Linux - rimappa il tasto Ctrl- [tasto


3

Su Linux, il Ctrl - [ la combinazione di tasti sembra essere equivalente a colpire il Esc chiave. Mi piacerebbe definire il Ctrl - [ come scorciatoia in Emacs ma non riesco a farlo perché quando il tasto raggiunge Emacs sembra che Esc il tasto è stato premuto. È comunque necessario disabilitare questo comportamento in questo modo Ctrl - [ significa semplicemente Ctrl - [ ?

Esecuzione di Ubuntu 9.10 con GNOME.


Quale linux? Quale gestore di finestre?

quale xterm stai usando?
Nathan Fellman

Risposte:


5

Supponendo che si esegua Emacs direttamente sotto un sistema di finestre (Cocoa, MS-DOS, Windows, X, ...) e non all'interno di un terminale di testo (gnome-terminal, konsole, rxvt, xterm, ...), è possibile .

(define-key key-translation-map [?\C-\[] [(control left_bracket)])
(define-key key-translation-map [escape] [?\e])
(define-key function-key-map [escape] nil)
(define-key function-key-map [?\e] nil)
(when (boundp 'local-function-key-map)
  ;;(define-key local-function-key-map [escape] nil)
  (defun remove-escape-from-local-function-key-map ()
    (define-key local-function-key-map [?\e] nil)
    (define-key local-function-key-map [escape] nil))
  (add-hook 'term-setup-hook 'remove-escape-from-local-function-key-map))

Qui ci sono tre diversi eventi di input:

  • Ctrl + [ , cioè il control modificatore insieme a un tasto che invia il personaggio [. Emacs lo mostrerebbe normalmente come C-[ (e C-[ accettato da kbd ), se non ha avuto un caso particolare per questo, come spiegato di seguito.

  • Numero di carattere 27, che viene inviato dal Esc chiave su alcuni sistemi. Emacs lo dimostra come ESC quando si visualizzano sequenze di tasti, e \e nelle stringhe.

  • Il Esc tasto stesso (in X Window, questo significa il Escape keysym). Emacs lo dimostra come escape se non tradotto (vedi sotto).

Emacs normalmente si traduce escape in ESC, ma questo è fatto ad un livello relativamente alto, in function-key-map, quindi può essere sovrascritto modificando function-key-map o definendo un legame per escape nella keymap globale o in una keymap locale. GNU Emacs 23 introduce local-function-key-map che si applica per tipo di terminale.

Emacs si traduce sempre C-[ in ESC, ad un livello molto basso (in keyboard.c ). Questo non è configurabile.

Tuttavia Emacs fornisce un modo per tradurre le chiavi a un livello relativamente basso: key-translation-map. Ciò vale prima di qualsiasi associazione globale o locale, ma solo per le chiavi non presenti function-key-map. Quindi il trucco è scambiare ESC e escape a quel punto.

Questi meccanismi sono descritti nel manuale di Emacs Lisp sotto l'intestazione "Keymap di traduzione".


A proposito, si applicano principi simili a

  • C-i, TAB, \t tab
  • C-m, RET, \r, return

0

A seconda del tuo xterm, potresti essere in grado di usarlo bindkey. Prova a eseguire questo comando al prompt della shell:

bindkey ^] tty-dsusp
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.