2012-04-01 6 views
2

Ich habe kürzlich auf das Dvorak-Layout getippt. Aber nach einiger Zeit habe ich beschlossen, Dvorak nur in Emacs zu benutzen - also würden alle anderen Tastenbelegungen meines Systems nicht durchdrehen.Dvorak-Layout in Emacs standardmäßig?

So nahm ich die folgenden von einer Frage auf StackOverflow.com:

(defadvice switch-to-buffer (after activate-input-method activate) 
    (activate-input-method "english-dvorak")) 

Er schaltet die Eingabemethode in allen neuen Puffer bis Dvorák. Es funktioniert gut, aber da ist das Problem - der Scratch-Buffer behält sein Standard-Englisch-Layout, und alle Dateien, die "Dialoge" (Cx Cf) wählen, behalten es auch - was irgendwie nervig ist, weil es mich zwingt, "Mentalitäten zu schreiben" mehrmals pro Minute.

Gibt es eine Möglichkeit, das dvorak-Layout global in Emacs zu aktivieren - und trotzdem die Standard-Shortcuts (wie C-x auf Englisch) zu behalten?

EDIT:

Die Antwort auf meine Probleme:

(defadvice switch-to-buffer (after activate-input-method activate) 
    (activate-input-method "english-dvorak")) 
(add-hook 'minibuffer-setup-hook (lambda() (set-input-method "english-dvorak"))) 

Antwort

3

Sie könnte so etwas wie (garantiert 100% ungetesteten Code) versuchen:

(define-minor-mode dvorak-minor-mode "Use Dvorak IM." :lighter nil 
    (if dvorak-minor-mode (active-input-method "english-dvorak"))) 
(define-global-minor-mode dvorak-mode dvorak-minor-mode dvorak-minor-mode) 
+0

Komisch - es sieht gut aus, aber es tut * nichts * - absolut nichts. Und auch kein Fehler. – Rogach

+0

@Rogach: Wenn Sie den Code lesen (und versuchen, zu erraten, was er tut, basierend auf den verwendeten Bezeichnern), definiert er nur einen (gut, zwei) untergeordneten Modus. Sie müssen dann diesen Nebenmodus aktivieren, wenn Sie möchten, dass er wirksam wird. Z.B. füge '(dvorak-mode 1)' am Ende hinzu. – Stefan

+0

Ok, Hinzufügen (Dvorak-Modus 1) machte diesen Code ausgeführt, und es war nicht in der Lage, die Active-Input-Methode Identifier zu finden. In der Zwischenzeit habe ich das Problem auf andere Weise gelöst :) – Rogach