Festlegen von Major-Mode-spezifischen Tastenkombinationen in Emacs

9

In meiner .emacsDatei möchte ich eine Schlüsselbindung für einen bestimmten Hauptmodus hinzufügen (Einstellung coffee-compile-fileauf C-c C-cim Kaffeemodus).

Ich habe viele Anweisungen zur Verwendung von local-set-keyund gefunden global-set-key, sodass ich diese Bindung problemlos hinzufügen kann, sobald ich eine Datei im Kaffeemodus geöffnet habe, aber es wäre schön, wenn dies von behandelt würde .emacs.

Jeff
quelle

Antworten:

8

Verwenden Sie den Modus-Hook. C-h mzeigt Informationen zum Hauptmodus an, normalerweise einschließlich der unterstützten Hooks; dann machst du so etwas wie

(add-hook 'coffee-mode-hook ;; guessing
    '(lambda ()
       (local-set-key "\C-cc" 'coffee-compile-file)))
Geekosaurier
quelle
6

Sie können den Schlüssel in der modusspezifischen Karte definieren, z. B.:

(add-hook 'coffee-mode-hook
    (lambda ()
        (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))

Oder sauberer:

(eval-after-load "coffee-mode"
    '(define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file))

Die zweite Anweisung bewirkt, dass die Schlüsseldefinition nur einmal erfolgt, während die erste bewirkt, dass die Definition jedes Mal coffee-modeerfolgt , wenn sie aktiviert ist (was übertrieben ist).

Trey Jackson
quelle
2
Zu Ihrer Information: Diese Eltern sind am falschen Ort. Dieser Add-Hook sollte lauten: (add-hook 'coffee-mode-hook (lambda () (define-key coffee-mode-map (kbd "C-c c") 'coffee-compile-file)))
Owenmarshall
Warum sollte man es auch in einem Haken definieren?
Nikana Reklawyks
@NikanaReklawyks Sie haben Recht, die Definition in einem Hook ist eval-after-loadin diesem Fall nicht so sauber wie die Verwendung einer Anweisung. Ich werde die Antwort entsprechend aktualisieren.
Trey Jackson
3

Emacs 24.4 ersetzt eval-after-loaddurch with-eval-after-load:

** New macro `with-eval-after-load'.
This is like the old `eval-after-load', but better behaved.

Die Antwort sollte also sein

(with-eval-after-load 'coffee-mode
  (define-key coffee-mode-map (kbd "C-c C-c") 'coffee-compile-file)
  (define-key erlang-mode-map (kbd "C-c C-m") 'coffee-make-coffee)
  ;; Add other coffee commands
)
Blaz
quelle