Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A quick summary of this issue:

- 'Dead' keys are keys used to modify the next character

- The backtick / grave key behaved as such on a typewriter

- ` + a = à

- Noto web fonts behave like this

- The latest Noto local fonts do not

- The expected modern behaviour in English is ` + a -> `a

- This is not necessarily the expected behaviour in other languages



It seems like you're confusing COMBINING GRAVE ACCENT and GRAVE ACCENT. These are two separate characters with distinct code points. One combines, the other does not. It's not a property of the font; it's a property of the characters.

http://www.fileformat.info/info/unicode/char/0060/index.htm

http://www.fileformat.info/info/unicode/char/0300/index.htm


Yes they are unique characters. I went to some pains to ensure I used the word 'key' as in physical switch on a keyboard. However I did not go far enough in ensuring I was referring to the font package as opposed to the font, please accept my apologies.

It is the font package, look at iverg's comment on the github issue https://github.com/googlei18n/noto-fonts/issues/736

here are screenshots with local font installed http://i.imgur.com/ycRs3A0.png

and without local font http://i.imgur.com/TUKsIY4.png

EDIT: it goes deeper: https://news.ycombinator.com/item?id=12656642


> Noto web fonts behave like this

Dear god why? They're Unicode fonts. There are perfectly good Unicode combining characters that can be used when this behavior is intended. Making non-combining characters behave like combining characters breaks all kinds of text.


> This is not necessarily the expected behaviour in other languages

But isn't it normally the operating system's responsibility to implement this, depending on the keyboard layout?


Operating system? Buddy, this is web development. We're reinventing the whole stack on top of HTML and JavaScript. Welcome to the future.


    > But isn't it normally the operating system's
    > responsibility to implement this
Presumably the font has backticks, but they're (poorly) implementing this method of accenting in the demo web app to allow people to search for accented characters?


Nope.

It looks like "web fonts" in general are poorly implemented. You can recreate the problem with just a text box and font styling CSS.

If you look at some of my other comments in this tree you will see screenshots of the same text box with and without the local fonts installed. Presumably when local fonts are installed the OS handles everything, without the browser and the noto-fonts definition file gets in the way.


What do you mean by "Noto web fonts behave like this"? Whether dead keys are enabled is a property of your system / input method.

The standard en_us linux config does [alt+\] [a] = à instead for example. (unless you choose a keyboard layout)


That is what would make sense however that is not the case. I should have been clearer and used the term "package" after font:

Local fonts package installed: http://i.imgur.com/ycRs3A0.png

No Local fonts package installed: http://i.imgur.com/TUKsIY4.png


That's weird. The package seems to include the ttf files only... https://www.archlinux.org/packages/extra/any/noto-fonts/


It is seemingly to do with how the "web fonts" are implemented by browsers. For more weirdness look here: https://news.ycombinator.com/item?id=12656642


You are conflating keyboard layout, unicode codepoints and the font rendering of said codepoints.

The issue here is that the non-combining accent (as generated by many keyboard layouts, dead keys or not) is rendered by the font as if it were combining. All the other aspects are tangential.


> This is not necessarily the expected behaviour in other languages

Which language, for example?

I'm french, we have characters with grave accent ('à', 'è' and 'ù'), and we do not expect the "` + a = à" behavior, as for one language.

EDIT: we do expect that "^ + a = â", though, but that's an other thing, and we have actually two ^ keys, one for our behavior and one for the usual behavior.


Brazilian Portuguese expects that behavior to write words such as "àqueles"


Forgive me, I don't want to sound xenophobic but this seems preposterous to me. So much energy wasted. I am deeply grateful to the guys who were developing keyboard standards in our country that I don't have to go through such waste. When we want to use "o" with accent we just press right ALT with "o". Simple and fast. Frankly speaking, this is first time I hear about such weird combination just to get local characters, in western countries ofc. PC keyboard is not mechanical one. Why someone would copy the same behavior is beyond me.


If you write in a single language that has only a few combinations, sure. But as the number of diacritics - letter combinations increase, dead keys become a more attractive solution.

With just two or three Western European languages to write in, you can easily have grave, acute and circumflex accents, umlauts, tildes, plus a couple one-off letters (like ß for German, ç for French, or å/æ for Scandinavian languages). Combining those with every vowel they can apply to grows too much for the poor Alt key.

The US-International layout runs into this problem. Since Alt + A = Á, if you want to type Ä or Å or Æ in a single keypress you have to use Alt + Q, W, or Z respectively, which is hardly intuitive. And if you want À or Ã, you're SOL.

Dead keys (also in the US-International layout) solve this problem. I know which keys make the tilde, umlaut, both types of accents, and circumflex. If I want the bare symbol (or a quote in the case of umlaut) I press spacebar after the symbol key, otherwise I press any applicable letter to output the modified version. For example, I'm pretty sure there's a key combination for ç, but I don't remember what it is (Alt + C is ©); however I did remember that I could type it as ' + c.

The other main solution is to have a hotkey for switching language layouts - typing in each language will be slightly faster, but when I tried it I frequently forgot which layout I was on and had to stop, delete my mangled output, switch language, and type again. I find dead keys much more friendly to muscle-memory.


I find it useful on a Mac to use some of the shortcuts for accents and diacritics in the default US-English keyboard layout, since I occasionally do have to type accented characters, or type text in a non-English language and don't want the hassle of changing keyboard setup or going through the Unicode menu. They all involve holding Option and pressing the key, though (for example, 'à' is Option-` followed by typing the 'a'; Option-e gets acute, Option-n gets tilde, Option-i gets circumflex and Option-u gets diaresis; there are also shortcuts for some common specific characters like ç and å).


It makes perfect sense if you know anything about Portuguese.

'àquele' is the preposition 'a' + 'aquele'. Grave accents are only used to mark contractions such as this, and the circumflex and acute accents - which denote differences in vowel quality and stress - are much more common, which is why it makes perfect sense to prioritise ease of typing for those two over the grave accent.


> When we want to use "o" with accent we just press right ALT with "o". Simple and fast.

That's fine for ò I guess, but then how do you type ô, ö and ó?

But as has been said elsewhere, this thread is confusing dead keys, which have nothing to do with fonts: typing the ^ key followed by the o key enters a single character ô, with combining characters where the character ̂ followed by the character o is rendered as ̂o (which should look the same as ô) (edit looks like this works fine on my fixed-width font when editing, but not so fine on the regular proportional font when displaying the comment, it's sadly quite usual for fonts to mishandle combining characters).

Here, the issue is that the standalone non-combining ` (as well as ´, ¨ and ¸) is handled by this font as if they were combining, thus doubly confusing users with dead-key keyboards.


I guess it all depends on the frequency of such characters in the given language. For example, in french keyboards, we have dedicated keys for 'é', 'é', 'à', 'ç' and 'ù', because they are incredibly frequent. On the other hand, 'â', 'ê', 'î', 'ô', 'û', 'ë' and 'ï' are less frequent, so they are generated using modifiers.

I'm quite glad of that, actually, it would be really annoying if we had to keep using modifiers every two words. I know french people who use English keyboards, they just usually forget about accents totally instead of using dedicated modifiers.


I see. Thanks!


Spanish keyboards work like that too. If you want the accent by itself, you tap it followed by a space (same as in a type-writer).


Hmm, here in Poland we use right alt plus a letter to make the diacritic version of it, e.g. alt+a = ą (the left alt functions like in other keyboards).

It is probably easier for language that doesn't have multiple diacritics for the same letter.

In Poland we have only one such letter: z. The problem is solved by using 'x' for the other (less frequently used) diacritic type:

alt+z = ż

alt+x = ź


Which language, for example?

On Swedish keyboards, for example, "` + a = à"


Aside, I can't believe I never realized that was the intended use of the grave key.


This is not related to the font.


Local font installed: http://i.imgur.com/ycRs3A0.png

Web font: http://i.imgur.com/TUKsIY4.png

See iverg's comment on the github issue: https://github.com/googlei18n/noto-fonts/issues/736

EDIT: To be clear, parent is technically correct. The problem is with the way "web fonts" is working, the actual 'font' is the same across both, just the web fonts are having fun.




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

Search: