2012-06-27 12 views
5

Mi piace usare C-j a eval-last-sexp ma in modalità paredit (che altrimenti mi piace) lo sostituisce con paredit-newline. Guardando i documenti in modalità paredit non vedo nulla di simile a paredit-mode-hook definito dove posso add-hook chiamare local-set-key o una funzione simile.È disponibile un hook paredit Emacs per ridefinire C-j?

Qualcuno ha un suggerimento?

Aggiornamento Dopo aver provato le due risposte qui sotto e non avendo molto successo, penso che il problema potrebbe essere legato al fatto che paredit viene sempre caricato in alcuni contesti differenti? A proposito, sto aprendo entrambi i file Common Lisp, Clojure ed Emacs Lisp, che possono tutti usare paredit. Purtroppo, le varie forme di eval-last-sexp hanno nomi leggermente diversi in ciascuna modalità, quindi non posso definire la chiave una volta per tutto. Piuttosto, ho bisogno di legare la chiave in base alla modalità principale in cui mi trovo anch'io. Si spera che aggiunga un altro punto dati utile.

risposta

10

Non c'è bisogno di usare i ganci, qualcosa come il seguente dovrebbe funzionare:

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

In alternativa, se per qualche motivo che non funziona, o semplicemente preferisce l'uso di ami, è possibile aggiungere quanto sopra define-key invocazione agli hook delle principali modalità per cui è attivato paredit.

+0

Grazie! Questo ha funzionato come un fascino. – bitops

6

Ogni modalità definita da una delle macro define-*-mode esegue automaticamente un MODE-hook corrispondente.

Vedo che la modalità paredit è una modalità secondaria definita con (define-minor-mode paredit-mode ...) e pertanto verrà eseguita paredit-mode-hook.

È possibile digitare M-xfind-functionRETdefine-minor-modeRET e la ricerca di run-hooks per vedere dove è definito questo comportamento.

Modifica (sulla base di oltre alla domanda):

fare tutti usano C-x C-e come vincolante per la funzione eval-last-sexp specifiche modalità di default, per caso? Sarebbe sembrare una cosa coerente da fare per loro, e se è così allora si potrebbe utilizzare il seguente approccio:

+1

+1. Mai realizzato che Emacs automatizza questo comportamento anche quando la variabile hook non è stata definita esplicitamente dalla modalità in questione. –

2

C'è un paredit-mode-hook. Non lo vedi finché non aggiungi qualcosa. Strano, ma questo è il modo in cui si comportano gli ami.

Tuttavia, nel tuo caso, l'approccio migliore potrebbe essere quella di cancellare l'associazione per C-j paredit:

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

e quindi impostare il proprio via-chiave locale-set in ogni gancio major-mode.

Problemi correlati