2012-06-27 6 views
5

Ich mag C-j zu eval-last-sexp verwenden, aber parayment-Modus (was ich sonst mag) überschreibt dies zu paredit-newline. Schauen Sie in der Payment-Modus-Dokumente Ich sehe nichts wie eine paredit-mode-hook definiert, wo ich add-hooklocal-set-key oder eine ähnliche Funktion aufrufen kann.Gibt es einen Emacs Pariet Hook, damit ich C-j neu definieren kann?

Hat jemand einen Vorschlag?

aktualisieren Nach dem Versuch aus, die beiden Antworten unten und nicht viel Erfolg, ich denke, das Problem auf die Tatsache zurückzuführen sein, dass paredit in wenigen verschiedenen Kontexten immer geladen? Ich öffne sowohl Common Lisp, Clojure als auch Emacs Lisp Dateien, die alle mit parait arbeiten können. Leider haben die verschiedenen Formen von eval-last-sexp leicht unterschiedliche Namen in jedem Modus, so dass ich den Schlüssel nicht für alles einmal definieren kann. Stattdessen muss ich den Schlüssel basierend auf dem Hauptmodus binden, in dem ich mich auch befinde. Hoffentlich fügt das einen weiteren nützlichen Datenpunkt hinzu.

Antwort

10

Keine Notwendigkeit Haken zu verwenden, sollte in etwa wie folgt funktionieren:

(eval-after-load "paredit" 
    #'(define-key paredit-mode-map (kbd "C-j") 'eval-last-sexp)) 

Alternativ kann, wenn aus irgendeinem Grund, das nicht funktioniert, oder einfach Sie die Verwendung von Haken bevorzugen, können Sie die oben hinzufügen define-key Aufruf an die Hooks der Hauptmodi, für die paredit aktiviert ist.

+0

Danke! Das hat wie ein Zauber funktioniert. – bitops

6

Jeder von einem der define-*-mode Makros definierte Modus führt automatisch einen entsprechenden MODE-hook aus.

Ich sehe, dass Pareity-Modus ist ein Neben-Modus mit (define-minor-mode paredit-mode ...) definiert, und daher wird es paredit-mode-hook laufen.

Sie können für run-hooksM-xfind-functionRETdefine-minor-modeRET und suchen eingeben, um zu sehen, wo dieses Verhalten definiert ist.

bearbeiten (basierend auf zusätzlich zu hinterfragen):

Haben sie alle für den Modus spezifische eval-last-sexp Funktion Bindung C-x C-e als Standard verwenden, durch Zufall? Das wäre wie eine konsequente Sache scheint für sie zu tun, und wenn ja, dann können Sie den folgenden Ansatz verwenden:

+1

+1. Niemals bemerkt, dass Emacs dieses Verhalten selbst dann automatisiert hat, wenn die Hook-Variable nicht explizit vom jeweiligen Modus definiert wurde. –

2

Es gibt einen paredit-mode-hook. Sie sehen es erst, wenn Sie etwas hinzufügen. Seltsam, aber so verhalten sich Hooks.

jedoch in Ihrem Fall der beste Ansatz sein kann, die paredit Bindung für C-j zu löschen:

(eval-after-load 'paredit 
    #'(define-key paredit-mode-map (kbd "C-j") nil)) 

Und dann stellen Sie Ihre eigenen über local-Set-Taste in jedem Major-Modus Haken.

Verwandte Themen