ora sto usando Emacs 23 con-line-modalità visiva girato di per la modifica del testo, ma continuare a colpire Mq per abitudine (aggiungendo così fine riga hard-wrapping ...) . Mi chiedo se c'è un modo per aggiungere un condizionale per disabilitare il paragrafo di riempimento (o rimuovere il legame a Mq) per le modalità in cui è attivata la modalità di visualizzazione a linea, ma per riattivarlo per quelle in cui sono ancora utilizzando la modalità di riempimento automatico? Grazie!emacs: linea-modalità visiva e Fill-punto
risposta
(defun maybe-fill-paragraph (&optional justify region)
"Fill paragraph at or after point (see `fill-paragraph').
Does nothing if `visual-line-mode' is on."
(interactive (progn
(barf-if-buffer-read-only)
(list (if current-prefix-arg 'full) t)))
(or visual-line-mode
(fill-paragraph justify region)))
;; Replace M-q with new binding:
(global-set-key "\M-q" 'maybe-fill-paragraph)
Invece di usare global-set-key
, è anche possibile associare nuovamente M-q
solo nelle modalità specifiche. (Oppure, è possibile modificare l'associazione globale e quindi associare M-q
a fill-paragraph
in una modalità specifica.) Si noti che molte modalità sono caricate automaticamente, quindi la loro mappa di tasti potrebbe non essere definita fino a quando la modalità non viene attivata. Per impostare una modalità di legame specifico, io di solito uso una funzione come questa: (. Il remove-hook
non è strettamente necessario, ma la funzione ha solo bisogno di eseguire una volta)
(add-hook 'text-mode-hook
(defun cjm-fix-text-mode()
(define-key text-mode-map "\M-q" 'maybe-fill-paragraph)
(remove-hook 'text-mode-hook 'cjm-fix-text-mode)))
è possibile utilizzare un consigliare per questo.
Per i vostri .emacs:
(defadvice fill-paragraph (around disable-for-visual-line-mode activate)
(unless visual-line-mode
ad-do-it))
questo cambierà fill-punto di non fare nulla quando visivo-line-modalità è attiva. Puoi anche aggiungere un errore se preferisci questo.
Nota che questo disabiliterà completamente' fill-paragraph' quando la modalità visuale-line è attiva, anche se viene chiamata da una funzione elisp. Probabilmente non vuoi essere così drastico. – cjm
Sono d'accordo, molto carina ... ma cjm ha un punto ... anche se non so quanto spesso viene chiamato il paragrafo di riempimento dalle funzioni elisp. – hatmatrix
(Adoro defadvice anche perché puoi anche spegnerlo senza riavviare emacs) – hatmatrix
visivo-line-mode ha la propria mappa della tastiera: visual-line-mode-map
. Raccomando di riavviare M-q solo in quella mappa dei tasti.
La mappa è definito come parte di avvio, quindi non è necessario eval-post-carico. Basta disabilitare l'associazione in questa modalità:
(define-key visual-line-mode-map [remap fill-paragraph] 'ignore)
l'impostazione globale "M-q" è malvagia, perché influisce su tutte le modalità. se devi fare questo, usa 'sostituto-chiave-definizione' (o usa defadvice o fset invece) – mihi
Ma quello era il punto. M-q è già un legame globale. Voleva che rimbalzasse su una funzione che controllava la modalità visuale. – cjm
Hmmm ... anche una grande opzione ... L'impostazione globale di M-q potrebbe essere pericolosa, ma la funzione è abbastanza semplice (ed elegante) che le sue conseguenze sono prevedibili? – hatmatrix