Hacker News new | past | comments | ask | show | jobs | submit login
An accentuated Emacs experiment (à la macOS) (xenodium.com)
127 points by xenodium on July 30, 2022 | hide | past | favorite | 49 comments



For a ~50-year-old program, Emacs’s support for multilingual input — and really, it’s all-round flexibility — continually amazes me! For myself I prefer my own custom keyboard layout [0], because it works outside Emacs too, but I’d happily use Emacs’s own input methods if that would be sufficient.

(In fairness, I have found one weak spot, namely font support… I’ve used ‘unicode-fonts’ [1] with some success, but reportedly it doesn’t work with the latest Emacs. Ah well, it’s at least fairly rare that this becomes a problem in practice.)

[0] https://github.com/bradrn/Conkey

[1] https://github.com/rolandwalker/unicode-fonts


Emacs is a bit crazy about it... it has its own set of input modes which include modes you may not be familiar with. You can use various IMEs that plug directly into Emacs rather than relying on a systemwide IME (which was neat back when systemwide IMEs didn't work well), and there are systems like RFC 1345 (type &e' for é, &e* for ε, &12 for ½, etc), or TeX (type \'e for é, \varepsilon for ε, \frac12 for ½, etc).

So many people have their own preferences for how to type these characters, write an input method for Emacs, and get it included.


I remember the transition. They did handle it remarkably well, in the time of many different charsets.


> macOS has a wonderful input mechanism where you press and hold a key on your keyboard to display the accent menu.

Is it really convenient? I don't like to wait and would rather prefer to press a sequence of "Compose", "a", "1", (or, which is faster, "a" and "1" simultaneously). And make a popup appear when "Compose" + "a" is pressed.

Linux has Compose key, but it is implemented poorly, it doesn't provide an UI for selecting character and discovery of combinations, and in Gnome it has very small choice of characters.

Another alternative would be to insert accented characters automatically.


macOS offers three ways to input. One by holding the key (which it inherited from iOS), one through changing the keyboard to another locale, and one by language independent prefixes: alt-u for umlaut/dieresis, alt-e for accent aigu, etc.


Unfortunately, neither the first nor the last way is customiseable (and I consider changing the locale pretty brute-force …), or at least not according to the Mac experts I asked when I did a deep dive (which, to be fair, was long ago, before iOS even existed). You can always use the Unicode picker, but, if you never use, say, Opt-Z for Ω and want to re-bind it to something else, or if you wish the 'o' long-press menu included ő … too bad!

(I admit I am engaging in the rhetorical tactic of confidently asserting that something is impossible in the hopes that someone will be lured to come along and correct me, so that I can be happily wrong.)


You can do so by defining a custom keyboard layout. This is quite convenient with Ukelele https://software.sil.org/ukelele/ : you can take any existing layout (e.g. the one that is currently active) and then change all key mappings, including which keys are dead keys etc. I used this to create a modified EN-US keymap where Alt-A/O/U produces the corresponding umlaut versions directly, and Alt-S produces German ß (so that when I have to write German text I can do so quickly and conveniently)


Ukulele is great! It’s also handy for disabling the default language independent Alt-letter sequences that generate umlauted characters.

This way you can have Emacs style meta key cursor movement bindings in macOS text widgets. For me M-f and M-b are indispensable.


There used to be a way to define your own keyboard decoding, but I don't know if you still can, nor how flexible it is. I'm guessing it won't be Turing complete.


I'm not sure if it's the method you're referring to, but I believe custom keybinding dicts still work. For those interested, this should tell you all you need to know: http://web.archive.org/web/20210130012801/http://www.hcs.har...


Yeah, I'm using this for λ and ∀:

    /* -*- coding: utf-8 -*- */
    {
    "~/" = ("insertText:", "λ");
    "~a" = ("insertText:", "∀ ");
    }
It looks like you can actually send arbitrary objectiveC messages to the first responder with this, but I haven't played with it much.

(I'm also now using the `fn` key to toggle between greek and US.)


The mac has multiple. The press-and-hold is for occasional usage and is a lot more discoverable to people coming from iphone.


As one of the few people actually using the Colemak keyboard layout, I am very glad about it's excellent multi-language support. It allows me to type nearly any language reasonably well. https://colemak.com/Multilingual (Basically any latin-chars using language, Chinese and Japanese are also fine as they use IME-based inputs, only Cyrillic based langs and APL are a bit of problem but can't have everything)

For the languages I use is it is mostly a matter of AltGr + key, which is quite ergonomic. It would suffer greatly if I had to make long presses as that would kill my typing speed.

Not to distract from how awesome Emacs is though. Just wanted to add a solution for those who regularly type text in different languages.


Hey, here is the author of the accent package. It was my first extension that wrote after 1 week on starting using Emacs. ELisp is really great!

MacOS menu for accented characters is must have for me and I cannot understand why other OS are not adopting it.

Thanks for the article, it's a nice trick


Thanks for the package (handy!) and submitting to melpa. Well done.


Thanks for writing accent! It makes my life just a little bit better, and I'm grateful for it.


MacOS way it's only half good if you don't use accents while typing and only need them that one time, while in all languages with accented letters it's the worst and slowest method you can use.


True that. But I typed French on a qwerty for a while on Mac OS, and you « just » alt+e-e to do é or something. You get used to it.

And on iPhones, I never actually hold « e » to show the accents, their system figures out the accents. Although it missed sometimes, it’s pretty good. I can just type « je suis arrivee a la maison » and it accentuâtes my letters properly. Actually, I had to manually remove the accents for this exemple ^^

Édit: ok, that’s kinda funny, it must be because I typed French in English and it messed it up, but « accentuâtes » doesn’t make any sense, same with « édit » it just inferred for my. Leaving the message as is for the lols


That's what I used too on Mac and it also works on Linux

AltGr+e for grave accent and AltGr+' for acute accent.

Much better than auto completion boxes

My language, as yours, contains a lot of accented letters and it would be absolutely impractical to chose them from a dropdown.

p.s. I type on an Italian keyboard with UK layout because it's more comfortable for typing code


I understand you so much. Typing code on a non US keyboard (French here) is much worse. I long for a French coder layout.


Accentuâtes and édit do make sense as French words. An Édit is an edict, and accentuâtes is simple past (passé simple) for accentuer (accentuate).


I’m typing German on a US keyboard layout and I’m very used to the alt +u-u chord etc to write the Inlauts. I still don’t have a setup on Linux though because I’m used to type this sequence with the left Alt key not the right.


AFAIK at least on GNOME and KDE you can assign any special key to be the compose key, including left Alt.


I'm a Portuguese native speaker, and use a US keyboard with the US International layout (the pt keyboard layout is terrible for programming). Having dead keys for Portuguese diacritics is basically essential, but I do occasionally need to type things in other languages where I have no clue how to input the diacritics. The macOS input method makes it possible to input those characters in a predictable, easy to remember way.


Wouldn’t you also change the keyboard layout in that situation? So if you’re typing Spanish, there’s a dedicated key for ñ, but you can also push and hold c to get č, for example.


Changing keyboard layout it's tricky, when I'm writing code I want the most important keys (parenthesis, brackets, braces, semicolon etc) where I'm used to find them, but I often need to write comments in Italian for auto generated documentation.

Constantly switching keyboard layout can be almost as disruptive as waiting for a dropdown to appear.


I use a keyboard shortcut for swapping between the two most recently used layouts. Something like ctrl+space (or something else if I'm using Emacs a lot). Is this disruptive?

The most common scenario is that I'm writing a mixture of English and Japanese, and I can't do that without switching layouts.


> Is this disruptive?

what's disruptive is that keys are in different places

; on IT keyboards needs SHIFT

~ is not present

| is on the other side of the keyboard

etc etc


Is there a system you like to use?

If I'm switching keyboard layouts, I'm not programming in both layouts. I'm programming in a variation of the US layout, and writing natural language text in a different layout. I'm sure it is disruptive at first, but I got used to it such a long time ago at this point.

There are also a lot of games that don't work except in the QWERTY layout, so I am always switching if I play a game. I have gotten used to it.

I've only ever figured out how to type accents for foreign languages on Macs. Windows has the ALT+1234 gibberish that you have to memorize. I've been fighting against layouts and IMEs on Linux for at least two decades at this point and there are at least three different ways to set the keyboard layout, each of which affect different applications, and some applications seem to ignore the keyboard layout I set. As a result, I often just kind of give up on typing accented characters except on a Mac.


> Is there a system you like to use?

I use UK/US layout everywhere and dead keys for the occasional accented letters (on Linux), except for email and chats where I can copy/paste the code


I've always wondered why accents are generally added before the letter in most systems. The old Mac way was option-e e for é, dead-key way is ' e, but you have to type ' ' or ' SPC for the actual quote character. There's some keyboards based on alt-gr and such, but when we write we usually do it afterwards.

I could see that sending the wrong character initially to an online program is suboptimal, but we often do that anyway and have to hit delete.

Another thought, why is there no clever autocorrect to try to add the ¿ in the right spot? Again, not the desired behavior always, but in many cases. It could be a suggestion that you must approve. Thankfully, texting has shown that Spanish users are not that keen on correct punctuation.


> I've always wondered why accents are generally added before the letter in most systems.

As with many of these things, it’s a holdover from typewriters. ‘Dead keys’ in typewriters were literally keys which did not move the carriage to the next position: thus to get accented characters you would type the dead key, then the letter, so that both would end up in the same position on the page. (Incidentally, this also explains why we so often use SPC after a dead key to get the base character.)


> The old Mac way was option-e e for é

It's still the mac way. The long press thing is only usable if you just need accents once in a while, and can be disabled.


Very cool! One fix for the magit navigation issue could be somehow checking that the key you’re chording would otherwise call self-insert-command in the current mode.


Completely unacceptable as an input method for anybody with any level of typing proficiency.

I can type couple words during the time it would take to input one character...

Also, while typing 10 characters per second visual elements stop working. When I make a mistake and visual signal has to reach my brain and be recognised I have typically already typed half a dozen characters.


As a Portuguese speaker, I have a terrible dislike for this on macOS. It's usually one of the first things I disable. It's slow to activate, and slow to select, so it's disruptive to my thinking and expressing. Dead keys, on the other hand, allow me to type fluidly.

I switch between a keymap with and one without dead keys with a single shortcut depending on whether I'm typing English/programming, or Portuguese/other accented languages.


> As a Portuguese speaker, I have a terrible dislike for this on macOS. It's usually one of the first things I disable. It's slow to activate, and slow to select, so it's disruptive to my thinking and expressing. Dead keys, on the other hand, allow me to type fluidly.

Isn't the entire point of this popup to give you a visual fallback option if you e.g. aren't a native speaker and don't know how to type it otherwise? For instance, assuming an english keyboard layout, typing á is a matter of "Alt-e a".

I don't think it's meant to be the primary input method for native speakers?


> I don't think it's meant to be the primary input method for native speakers?

I'm assuming you meant that as an affirmation despite the use of the question mark.

If that's the case, then I agree it makes sense! I find macOS's default to have this enabled pretty bad though. I understand it on iDevices where dead keys would be awkward but not on a computer with a full, physical keyboard.


The question mark in this case doesn't indicate that the sentence is a question. This usage is common but not permitted in formal writing.


Yes, I've come across this. It's very confusing for me. Not sure if it's because I'm not a native English speaker or some other reason but it always makes me pause and is not always clear which way it's meant.


It’s used to mark a rising declarative. Wikipedia has an article about what it means.

https://en.wikipedia.org/wiki/Rising_declarative

The older generations think that this is “wrong”, so they don’t teach you what it means or how to use it.

Just an observation—foreign language education generally teaches a formal version of the language and neglects informal/casual usage. This is normal. The problem is that informal/casual usage today becomes formal usage in the future, as language changes.

Just as an example, if you take a Japanese class, they’ll probably teach you 「おはようございむす」 but not 「おっす」 (good morning), 「ありがとう」 but not 「サンキュー」 (thank you), and teach you to say 「無理」 when you should say 「難しい」 (impossible).


I'm a native English speaker, and it's confusing for me sometimes, too. I've had to ask multiple times whether someone was expecting an answer from me when they used this construct.


If you hate it you hate it, but one tip to perhaps try:

You can select the accented character with number keys (e.g. 1 for the first option), and you can reduce the delay in the panel appearing by reducing the key delay:

    defaults write NSGlobalDomain InitialKeyRepeat -int 12
Together, you can select accented letters in a few milliseconds. You can reset the delay to default with:

    defaults write NSGlobalDomain InitialKeyRepeat -int 25


Thanks, but any amount of waiting will cause disruption.

If I have to long-press (however short "long" might be), plus remember which number corresponds to which accent on each letter, that's a lot more than what I have now - accents make sense as you type the actual accent plus the letter. The only "exceptions" to this intuitiveness are 'c for ç (not an issue on PT or BR keyboards which have a dedicated key for that) and arguably " for umlauts like ü (I think only in pt_BR and even then it's not in use since the unification of the orthographies in the 90s).


Sounds more like a job for the keyboard layout itself ?

https://norme-azerty.fr/en/

(With good support for all(?) the Latin-based languages, and also Greek... I kind of wish they had managed to fit Cyrillic on another mode too !)

P.S.: better than the old AZERTY for math & code too !


I should be possible to use the OS’s IME, whatever that may be. If not, type `M-x report-emacs-bug` to send a bug report.


Wow: all my years using MacOS, and I did not know this:

> macOS has a wonderful input mechanism where you press and hold a key on your keyboard to display the accent menu.

The depth of my ignorance may be unbounded....

Anyhow, thanks! I'll use it!


I like the macos input a lot, by some accents are missing. I filed feedback, but that's a black hole. Is there a a way to replace the characters it uses?


This is great! Have you considered to make this into a package?




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: