Open Bug 1149826 Opened 9 years ago Updated 1 month ago

Mac "text replacement" feature does not work in forms


(Core :: DOM: Editor, enhancement, P3)




Tracking Status
firefox40 --- affected


(Reporter: jruderman, Assigned: m_kato)


(Depends on 1 open bug, Blocks 1 open bug)


(Keywords: parity-chrome, parity-safari, Whiteboard: [mac:integration])


(2 files, 2 obsolete files)

1. Verify your settings [System Preferences > Keyboard > Text]
2. Focus a textbox in Firefox
3. Type "omw "

Expected: replace "omw " with "On my way! "

This makes it hard to repeatedly enter long or difficult-to-type things. For example, recommends using this feature in order to enter ¯\_(ツ)_/¯ without having to use the clipboard each time.
I can confirm this unexpected and inconsistent (with regard to the overall OS user experience) behavior. I don't want to call it a bug yet, as I don't know if maybe it's by design.

Moreover, not only Forms (HTML input fields), but also text input fields of the Firefox application itself are affected (e.g. bookmarks, or the URL address bar). The behavior is reproducible and can be tested.

Test Preparation:
 Go to "System Preferences → Keyboard → Text". Define a substitution, e.g. "EURO" (the string) → € (the currency symbol). Quit System Preferences.
Test Procedure:
 In Firefox, open "Bookmarks → Show All Bookmarks". Chose an arbitrary bookmark, or create a new one. In the "Name" field, enter "EURO", followed by a blank to trigger the text substitution.
Expected result:
 The string is being replaced with the currency symbol.
Actual result:
 The string is not being replaced with the currency symbol.
 Identical behavior if the string is entered into the field "Tags"
 Identical behavior if the string is entered into the Address Bar

Counter test:
 In Safari, open "Bookmarks → Edit Bookmarks". Select an arbitrary bookmark, or create a new one.
 Right-click on the bookmark, select "Rename" from the context menu. Enter the string "EURO" in the input field, followed by a blank to trigger the text substitution.
Expected result:
 The string is being replaced with the currency symbol.
Actual result:
 The string is being replaced with the currency symbol.
 Identical behavior if the string is entered into the bookmark manager window's Search Bar ("Search or enter website name").
 Identical behavior if the string is entered into Safari's Browser Address Bar.


OS X 10.10.4 (14E46)  Kernel Version:	Darwin 14.4.0

Firefox 39.0 about:buildconfig
Build Machine bld-lion-r5-061
Source Built from
Build platform target x86_64-apple-darwin11.2.0
Build tools Compiler 	Version 	Compiler flags
/usr/local/bin/ccache /builds/slave/rel-m-rel-m64_bld-000000000000/build/clang/bin/clang -arch x86_64 	3.3.0 	-Qunused-arguments -Wall -Wdeclaration-after-statement -Wempty-body -Wpointer-to-int-cast -Wsign-compare -Wtype-limits -Werror=char-subscripts -Werror=comment -Werror=endif-labels -Werror=enum-compare -Werror=ignored-qualifiers -Werror=int-to-pointer-cast -Werror=multichar -Werror=nonnull -Werror=pointer-arith -Werror=pointer-sign -Werror=return-type -Werror=sequence-point -Werror=trigraphs -Werror=unknown-pragmas -Werror=non-literal-null-conversion -Wno-unused -Wno-error=uninitialized -Wno-error=deprecated-declarations -isysroot /Developer/SDKs/MacOSX10.7.sdk -std=gnu99 -fno-strict-aliasing -ffunction-sections -fdata-sections -fno-math-errno -pthread -DNO_X11 -pipe
/usr/local/bin/ccache /builds/slave/rel-m-rel-m64_bld-000000000000/build/clang/bin/clang++ -arch x86_64 	3.3.0 	-Qunused-arguments -Qunused-arguments -Wall -Wempty-body -Woverloaded-virtual -Wsign-compare -Wwrite-strings -Werror=endif-labels -Werror=int-to-pointer-cast -Werror=missing-braces -Werror=parentheses -Werror=pointer-arith -Werror=return-type -Werror=sequence-point -Werror=switch -Werror=trigraphs -Werror=type-limits -Werror=unused-label -Werror=non-literal-null-conversion -Wno-invalid-offsetof -Wno-c++0x-extensions -Wno-extended-offsetof -Wno-unknown-warning-option -Wno-return-type-c-linkage -Wno-error=uninitialized -Wno-error=deprecated-declarations -isysroot /Developer/SDKs/MacOSX10.7.sdk -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -std=gnu++0x -pthread -DNO_X11 -pipe -DNDEBUG -DTRIMMED -g -O3 -fomit-frame-pointer
Configure arguments

--with-macos-sdk=/Developer/SDKs/MacOSX10.7.sdk --enable-crashreporter --enable-release --with-ccache --enable-application=browser --enable-update-channel=release --enable-update-packaging --with-google-api-keyfile=/builds/ --with-google-oauth-api-keyfile=/builds/google-oauth-api.key --with-mozilla-api-keyfile=/builds/mozilla-desktop-geoloc-api.key --enable-warnings-as-errors --enable-official-branding --target=x86_64-apple-darwin11.2.0 --with-unify-dist=../i386/dist
I have this exact same use case of frequently needing to type ¯\_(ツ)_/¯.  This bug is a real burden on my productivity.
Depends on: 86886

This would be a great improvement - it's one of the few things that I miss from Safari. Chrome recently implemented this, though it hasn't made it to stable yet. Their main bug for this issue is #42434; this commit contains their initial implementation of the feature.

This would seem like an old bug. Sure hope it gets some new love and attenthion.

Just to give some insight into why this functionality is valuable—I use it heavily in order to type special characters. For instance, I find myself wanting to type "→" a lot, so I set up a keyboard shortcut in macOS's System Preferences to replace instances of "==>" with "→". This is much faster than using the special character picker.

I could use a Firefox extension, but then those shortcuts would only work in Firefox and not other Mac apps—I'd have to manually keep the two in sync. I really miss having working text replacement in Safari.

hey with all respect and gratitude for the software i've consistently used longest so far across OSes, I'm surprised that text replacement hasn't been implemented on macOS since five years. also to pick up on jonathan's post above: I can't recall how many times ive used the OS-search function to bring up text files containing a single string like an account # only to cmd+a cmd+c cmd+q and alt+tab back to firefox. just typing "myiban" into an form would be so much more straightforward. i hope this bug gains some traction and thanks everyone for your work!

See Also: → 1653175

Like others here, this is one of the features I miss most from Safari (after playback controls were implemented, thanks for that). I use text replacements from all sorts of things ("g@@" fills my gmail, I have special characters mapped such as "&shift;" => ⇧ for writing technical docs, "&dis;" => ಠ_ಠ). This feels like one of the last remaining features for FireFox to appear fully integrated with macOS (in my book at least).

Also expected this to work and came here to find out that it is not and that I am not the bug. :)

+1, one of the only things holding Firefox from being my daily driver. Please please please implement this feature. Made an account just to say this.

Markus, should this be tracked somewhere for the ongoing macOS effort?

Flags: needinfo?(mstange.moz)

I want to use Firefox, but I can't. Because I have many shortcuts that I use every day. Unfortunately, this is the only thing that blocks me.

I also want to add my voice to those saying that this is kind of a show-stopper.

Any power-user who uses a lot of system-wide text replacements expects them to work everywhere, and Firefox not allowing them just feels broken. There's no good reason for it.

I would love it if this was fixed. Thank you.

Attached file WIP: Bug 1149826 - WIP (obsolete) —

Text substitution is one of macOS features to replace text by system settings (System Preferences - Language & Text - Text).

Also, quote substitution and dash substitution are disabled by default since Chrome and Safari are disabled.

Attachment #9228950 - Attachment is obsolete: true
Assignee: nobody → m_kato
Attachment #9229277 - Attachment description: WIP: Bug 1149826 - WIP: Support Text substitution on macOS. → Bug 1149826 - Support Text substitution on macOS. r=masayuki
Flags: needinfo?(mstange.moz)
Whiteboard: [mac:integration]
Blocks: 1725806

Writing in to add that just like several others here, I'd also very much like this feature to work in Firefox. It's the only blocker keeping me from using Firefox as my default browser.

Just created an account to add my voice here. :) I love FireFox so much and I'm using it as my primary desktop browser. But not having standard MacOS text replacements is a real pain in everyday use. As many have already written, I'm using text replacements heavily for certain shortcuts. According to this bug thread it's now 7 years old. Dear contributors, please PLEASE don't let us wait another 7 years...

This is a huge blocker! Please let me know if you need help with that.

Just chiming in here! Considering how many years-long bugs they recently fixed to improve experience on macOS, I hope this one is not too far away. (Please don't be like that 22 years old "native context menu" bug…)

Firefox is so close to greatness for me. It's only the fact that Firefox doesn't allow for native MacOS features that makes it awfully frustrating. I frankly wish I knew C++ to be able to contribute to this myself. I hope there's some progress on this and using native MacOS context menus ("lookup" is still missing).

Severity: normal → S3

The severity field for this bug is relatively low, S3. However, the bug has 3 duplicates.
:m_kato, could you consider increasing the bug severity?

For more information, please visit auto_nag documentation.

Flags: needinfo?(m_kato)

The severity field for this bug is relatively low, S3. However, the bug has 3 duplicates.
:m_kato, could you consider increasing the bug severity?

This is enhancement bug.

Type: defect → enhancement
Flags: needinfo?(m_kato)
Priority: -- → P3


  • This feature breaks an event order in Blink.
  • WebKit seems to use sync IPC to implement it. We cannot accept it.

Please fix this bug — it is really frustrating and breaks expected behavior on macOS. I don't think it can be classified as an "enhancement" in that context. (…former Apple designer here.)

I do find it odd that FF can take over the function 'fn' keys to control my media, but can't seem to solve a bug so it seems, from eight years ago. I just checked if it would work in Chrome and Safari. Both are capable of doing so. Would be sad to leave FF cause it's not meeting my requirements.

Duplicate of this bug: 1607115

(In reply to Timo from comment #35)

I switched to Firefox from Brave, and the lacking text engine is one of the major disadvantages that seriously hamper my productivity (the other being the unflexibility of search engine definitions compared to Brave/Chrome that just lets me use keywords for whatever the URL template). As a Mac user, simple text editing is just cumbersome in Firefox. It’s not just replacement. For instance, it does not let me choose from the emoji/glyphs pop-up using a shortcut.

Maybe Apple should force Mozilla into using the system text engine.

How could Apple force that change? will be define that autocorrect uses insertReplacementText. Safari does, but Chrome uses insertText. Until autocorrect attribute is implemented, we can implement this issue with pref=off.

Actually, Gecko's internal command event doesn't have replacement command, so I will add it by this issue. (Spellchecker already uses this type).

When using autocorrect, we should use insertReplacementText according
to So I would like to
add eContentCommandReplaceText command for this.

Also, this command has an option that is source string text. When
processing text subsitution, parent process doesn't know whether
target replaced text is modified. So I add this option for check.

macOs has the feature for auto-correction.

Other browsers already has this feature, and can control this by
autocorrect attribute [*1] that is still non-standard.

Since content script can modify source text for autocorrect by
any event handers, autocorrect is run when source text isn't
changed only.

The event order for this implementation is the following.

  1. keydown event by space
  2. keypress event by space
  3. beforeinput event (insertText) by space
  4. input event (insertText) by space
  5. beforeinput event (insertReplacementText) by autocorrect
  6. input event (insertReplacementText) by autocorrect
  7. keyup event by space

Also, Safari's order is that input event for space is fired after
insertReplacementText. And, Chrome's is broken. When typing
"omw", "w"'s keyup is fired after dismissing a picker. And they
don't use insertReplacementText.

And, Saferi can prevent this when calling event.preventDefault()
on keypress event handler for space/enter key. But I guess that
there is no way to get event handler calls preventDefault() from
widget side on Chrome process.


Attachment #9229277 - Attachment is obsolete: true
You need to log in before you can comment on or make changes to this bug.