La terminal no acepta algunos caracteres Unicode escritos

La terminal no acepta algunos caracteres Unicode escritos

Necesito solucionar el problema de por qué no funciona escribir algunos caracteres Unicode en mi terminal.

Utilizo una distribución de teclado que no es qwerty (es decir,neo) que me permite escribir directamente caracteres Unicode como α β γ δ … ∀ ∃ … ∘ ⇒ ⇔, lo que funciona bien para la mayoría de las aplicaciones.

Sin embargo, con terminales como rxvt-unicodeo xterm, escribir los caracteres y no hace nada –aunque los personajes se muestran perfectamente biencuando los copio y pego.

Información sobre los caracteres y claves específicos que no funcionan:

  • : código hexadecimal 0x21D4; neosecuencia:Capslock + AltGr + m
  • : código hexadecimal: 0x2218; neosecuencia:Capslock + AltGr + [

Otros caracteres escritos mediante Capslock + AltGr + ⟨some key⟩, por ejemplo , también funcionan sin problemas en mi terminal. Esto me desconcierta.

Entonces, ¿alguien sabe dónde podría estar el problema aquí? ¿Alguien tiene idea de dónde buscar?

Yo uso Parabola GNU/Linux (que es básicamente Arch Linux).

Respuesta1

Bien, al menos encontré una solución ahora.

Resulta que el problema es que ifonlyify jotno parecen ser reconocidos por xmodmapnombres de claves. Se utilizan en mi configuración.

$ xmodmap -pke | egrep "jot|ifonlyif" 
keycode  34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol jot NoSymbol U017F Greek_finalsmallsigma U2212 NoSymbol jot
keycode  58 = m M m M percent Greek_mu KP_1 KP_1 ifonlyif

Si uno los reemplaza por sus códigos hexadecimales Unicode, todo funciona bien. Entonces lo acabo de hacer:

$ xmodmap -pke | sed -e 's:ifonlyif:U21D4:' -e 's:jot:U2218:' > .Xmodmap
$ xmodmap .Xmodmap
$ xmodmap -pke | egrep "keycode  (34|58)" 
keycode  34 = ssharp U1E9E ssharp U1E9E U017F Greek_finalsmallsigma U2212 NoSymbol U2218 NoSymbol U017F Greek_finalsmallsigma U2212
keycode  58 = m M m M percent Greek_mu KP_1 KP_1 U21D4

En caso de que esto pueda ser útil para otros, llegué a esto de la siguiente manera: observé el xevresultado al intentar escribir (ifonlyif) y (jot) respectivamente.

KeyPress event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170075495, (1,1), root:(552,302),
    state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170075574, (1,1), root:(552,302),
    state 0xa0, keycode 58 (keysym 0x8cd, ifonlyif), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170076304, (1,1), root:(552,302),
    state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2400001,
    root 0x9b, subw 0x0, time 170076336, (1,1), root:(552,302),
    state 0xa0, keycode 34 (keysym 0xbca, jot), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Por el contrario, al escribir otros caracteres funcionales ( Θ, ), se obtienen líneas como:


state 0xa0, keycode 61 (keysym 0x7c8, Greek_THETA), same_screen YES,
XLookupString gives 2 bytes: (ce 98) "Θ"

state 0xa0, keycode 59 (keysym 0x10021d2, U21D2), same_screen YES,
XLookupString gives 3 bytes: (e2 87 92) "⇒"

Entonces supe que el problema posiblemente era XLookupStringno devolver nada. Así lo hice man xlookupstringy man xmodmap. Luego investigué la tabla xmodmap xmodmap -pkey comparé la búsqueda fallida de ifonlyifas con la búsqueda exitosa de U21D2as .

información relacionada