2010-06-15 12 views
5

Ich gebe ErgoEmacs Modus einen Versuch, um zu sehen, ob ich Emacs bequemer verwenden kann. Einige Tastenbelegungen sind ziemlich intuitiv, aber in vielen Fällen möchte ich die Standardeinstellungen nicht einfach ersetzen.Weisen Sie einem einzelnen Befehl mehrere Emacs-Tastenbindungen zu?

Zum Beispiel, im Zusammenhang mit ErgoEmacs Navigation Shortcut Struktur, M-h macht Sinn als Ersatz für C-a - aber ich möchte in der Lage sein, beide zu verwenden, nicht nur M-h. Ich habe versucht, einfach die Befehle zu duplizieren:

Aber Emacs überschreibt einfach die erste Tastenkombination mit der zweiten. Wie kann man das am besten angehen?

Antwort

3

Wie sich herausstellt, verwendet ErgoEmacs zwei Dateien, um die Tastenkürzel zu definieren. Eine ist die Hauptdatei ergoemacs-mode.el, und die andere ist das spezifische Tastaturlayout, das Sie auswählen (z. B. ergoemacs-layout-us.el). Das letztgenannte Dokument erzeugt eine Konstante, mit der der Erstere die Tastenbindung erstellt. Während ich also dachte, ich würde die Tastenkombination duplizieren, änderte ich tatsächlich die Konstante, die später für diesen Zweck verwendet wurde.

Lösung:

In ergomacs-mode.el:

;; Move to beginning/ending of line 
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key 'move-beginning-of-line) 
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key 'move-end-of-line) 
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key2 'move-beginning-of-line) ; new 
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key2 'move-end-of-line) ; new 

In ergoemacs-Layout-us.el:

;; Move to beginning/ending of line 
(defconst ergoemacs-move-beginning-of-line-key (kbd "M-h")) 
(defconst ergoemacs-move-end-of-line-key  (kbd "M-H")) 
(defconst ergoemacs-move-beginning-of-line-key2 (kbd "C-a")) ; new 
(defconst ergoemacs-move-end-of-line-key2  (kbd "C-e")) ; new 
2

Huh? Gibt es einen einzigen Weg für jede Funktion, ein goldenes Prinzip von ErgoEmacs? Da die normale Tastenbelegung genau umgekehrt funktioniert, benennen Sie jeweils einen Schlüssel und legen fest, was er tun soll. Wenn ein Modus eine globale Variable definiert, die "den Schlüssel, an den das Ende der Zeile gebunden ist" bedeutet, dann kann es natürlich nur einen Wert geben, aber mit den normalen Bindungsbefehlen können Sie die gleiche Funktion an so viele Kombinationen wie binden du magst. In der Tat haben alle Keybinding ich je benutzt gesehen sah entweder wie diese

(global-set-key [(meta space)] 'just-one-space) 

oder ähnliche

(add-hook 'c-mode-hook 'my-c-mode-hook) 
(defun my-c-mode-hook() 
    (define-key c-mode-map [(control c) b] 'c-insert-block)) 

wenn es nur für einen bestimmten Modus.

+0

Danke, Kilian - das war der Hinweis, der mich auf die Antwort geführt. Es stellt sich heraus, ErgoEmacs definiert die Tastenbelegung in ergoemacs-mode.el nach einer Zuordnung, die in der "Defconst" ich oben eingefügt definiert ist. – Dan

4

Um re-post Antwort ergo-emacs mailing list:

Xah Lee sagte:

, die sehr einfach ist.
im ergoemacs-mode.el Datei, gibt es diese Linie (load "ergoemacs-unbind") nur es Kommentar aus. Das sollten alle sein, die Sie tun müssen. Beachten Sie jedoch, ErgoEmacs Tastenkürzel definiert diese gemeinsamen Verknüpfungen wie Öffnen, Schließen, Neu, Speichern ... mit den Tasten Strg + o, Strg + w, Strg + n, Strg + s usw. Über 7 von sie oder so. Also, ich denke, einige dieser werden auf Emacs traditionelle Bindungen mit Strg schlagen. Wenn Sie neu sind ErgoEmacs und versuchen, es zu erkunden, Sie könnten nur versuchen, mit wenigen Schlüssel zu starten.Diese Seite könnte einige nützliche Informationen haben: http://code.google.com/p/ergoemacs/wiki/adoption danke für den Check-out ErgoEmacs!
Xah Σ http://xahlee.org/