In breve, questo dovrebbe risolvere il problema per voi:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
Longer versione:
Dalle Emacs Lisp documentazione su function keys:
in ASCII, Ci e < TAB> sono lo stesso carattere. Se il terminale può distinguere tra , Emacs trasmette la distinzione ai programmi Lisp rappresentando il primo come l'intero 9 e il secondo come scheda simbolo .
Nella maggior parte dei casi, non è utile per distinguere i due. Quindi normalmente la chiave di posizione locale (vedere Keymap di traduzione) è impostata per mappare la scheda in 9. Pertanto, un legame chiave per il codice carattere 9 (il carattere C-i) si applica anche alla scheda. Allo stesso modo per gli altri simboli in questo gruppo. La funzione read-char converte anche questi eventi in caratteri.
Quindi, una volta che fate quanto segue, si può vedere la differenza nelle combinazioni di tasti:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
;; this is C-i
(global-set-key (kbd "C-i") (lambda() (interactive) (message "C-i")))
;; this is <tab> key
(global-set-key (kbd "<tab>") (lambda() (interactive) (message "<tab>")))
nota, ogni modalità imposta i vari TAB attacchi modo diverso, quindi potrebbe essere necessario personalizza per modalità che ti interessa.
Dipendenza Versione:
I lavori di cui sopra per Emacs 23.1. Dal file NEWS: sequenze di tasti
funzione sono ora mappati usando `locale-funzione-chiave-map', una nuova variabile. Questo eredita dalla variabile globale key-map-chiave, che non viene più utilizzata direttamente.
Il che significa, nelle versioni 22 e precedenti, è possibile ottenere lo stesso effetto utilizzando la variabile function-key-map
. Ho provato questo e l'ho trovato a lavorare con Emacs 21.
(setq local-function-key-map (delq '(kp-tab . [9]) function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
Quando provo questo codice, ottengo un errore che la mappa-chiave-chiave locale è nullo. Qualche idea sul perché sarebbe nullo? – Steve
@Steve La variabile è definita in Emacs 23, ho aggiornato la risposta con una versione per 22 e precedenti. –
Questo non ha funzionato esattamente per me. Senza alcuna modifica il tasto 'tab' è stato lasciato unbounrd. Ho provato a fare un secondo "global-set-key" per, che ha parzialmente risolto il problema, ma ho impedito il completamento della scheda nel minibuffer. L'uso della soluzione di Caio in basso sembrava fare il trucco. –
mksuth