2009-05-08 6 views
10

Durante la lettura di thesequestions o EmacsWiki article sull'associazione di Caps Lock a Control in emacs in Windows, le risposte migliori sembrano coinvolgere il registro. La mia domanda è cosa può fare un utente quando non può modificare il registro della macchina perché non ha diritti di amministratore. C'è un modo per fare la mappatura da dentro emacs? This article arriva oh-così-vicino, anche dicendo: "Come si è detto, è possibile mappare Caps-Lock su altri tasti, ad esempio, il tasto Control." Ma io non riesco a capire come rappresentare la chiave di controllo (usando various references che sembrano abbastanza completa, ma potrebbe non essere Windows-centric), cercando le cose comeMapping Caps Lock to Control da Emacs su Windows

(setq w32-enable-caps-lock nil) 
(global-set-key [capslock] '[control]) 

e

(setq w32-enable-caps-lock nil) 
(global-set-key [capslock] 'ctl-x-map) 

che don' t sembra funzionare.

risposta

8

So che questo in realtà non risponde alla tua domanda, ma Trey Jackson fondamentalmente ha spiegato il problema. Per rilevare il solo tasto di controllo, è necessario un hook per tastiera di basso livello su Windows, che non credo implementi Emacs.

Un modo (che coinvolge un programma esterno, ma non richiede diritti di amministratore) è quello di utilizzare AutoHotkey. Tutto ciò che serve è il seguente script 2 linee:

CapsLock::Ctrl 
LCtrl::Capslock 

Sarà necessario eseguire questo script ogni volta che emacs è aperto, ma per fortuna Autohotkey è un'applicazione piuttosto basso profilo (di solito dura circa un paio di centinaia Kb solo nella memoria). Ad esempio, puoi eseguire questo script nel tuo .emacs in modo che la chiave di controllo e il tasto capslock vengano scambiati ogni volta che viene aperto emacs.

+0

Ben fatto fare il backup dalla mia soluzione ipotizzata e trovare un altro modo. Avevo guardato molto brevemente AutoHotKey e ho pensato che dovesse richiedere i diritti di amministratore, ma sembra funzionare come un incantesimo. Modificherò la domanda e aggiungerò alcuni collegamenti pertinenti. –

+0

Correggetemi se ho torto, ma l'ortografia nella seconda riga dell'esempio di script deve essere "LCtrl :: CapsLock" anziché "LCtrl :: Cpaslock" –

+0

Sì, certo che hai ragione. Fisso. – polyglot

6

Credo che non funzioni perché Windows (o X) non passa un evento reale per [capslock] o [control] - è un tasto di modifica, come [shift]. Se si preme un tasto modificatore, l'applicazione non ottiene una sequenza di tasti, ma se si preme un modificatore e un secondo tasto (non modificatore), si ottiene la combinazione di tasti.

Ad esempio [a] e [A] sono due chiavi diverse, una è la "a" regolare e l'altra è essenzialmente "shift-a". Sono sicuro che potresti impostare Windows in modo che lo "shift-a" invii effettivamente una "z" o qualcosa del genere.

Perché [capslock], [control], [shift], [meta] sono tutti i tasti di modifica, che non generano gli eventi chiave in sé e per sé per le applicazioni.

In breve, Emacs non ottiene un evento chiave [control] che può essere rimappato, riceve un evento C-a. Questo è generalmente fatto dall'ovvia combinazione delle chiavi [control] e [a]. Ma l'evento potrebbe essere generato da un diverso tasto, ad esempio [F10] o anche [y] (confuso, sì).

Questo è il modo in cui ho capito. Chiarimenti sono benvenuti, naturalmente.

+0

Sì, questo è il senso che stavo ottenendo, ma grazie per averlo articolato molto meglio di quanto avrei potuto. –

1

Il modo più semplice per rimappare CapsLock su Windows è scaricare l'utilità CapsLockChanger, scegliere una chiave da mappare a (Controllo) e inserirla nel menu Start-> Startup.

Rimane nel vassoio, esegue il lavoro sul remapping dei tasti e non richiede problemi con il registro.

0

Non è necessario necessariamente i diritti di amministratore per modificare il registro.
In effetti, il registro di Windows è una risorsa segmentata, molto simile a un filesystem, e si possono avere autorizzazioni granulari su vari rami e nodi all'interno del registro. Sei sicuro che la tua ipotesi di non poter modificare il registro sia corretta? Penso che sia vero per impostazione predefinita su Vista, ma non su Windows precedente.

+0

Il solito metodo di remapping dei tasti è molto basso e per macchina (le modifiche vanno da qualche parte in HKLM \ SYSTEM), quindi i diritti di amministratore sono indispensabili. –