Domanda

Ora sto usando Emacs 23 con la modalità a linea visiva disattivata per l'editing del testo ma continuo a colpire M-q per abitudine (aggiungendo così terminazioni di riga a capo ...). Mi chiedo se c'è un modo per aggiungere un condizionale per disabilitare il paragrafo di riempimento (o rimuovere l'associazione a Mq) per le modalità in cui è attiva la modalità di linea visiva, ma per riattivarlo per quelli in cui sono ancora utilizzando la modalità di riempimento automatico? Grazie!

È stato utile?

Soluzione

(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 , puoi anche ricollegare M-q solo in modalità specifiche. (In alternativa, è possibile modificare l'associazione globale, quindi ricollegare Mq a fill-paragraph in una modalità specifica.) Si noti che molte modalità sono caricate automaticamente, quindi la loro mappa dei tasti potrebbe non può essere definito fino all'attivazione della modalità. Per impostare un'associazione specifica per la modalità, di solito utilizzo una funzione come questa:

(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)))

(Il remove-hook non è strettamente necessario, ma la funzione deve essere eseguita una sola volta.)

Altri suggerimenti

puoi usare un consiglio per questo.

Per il tuo .emacs:

(defadvice fill-paragraph (around disable-for-visual-line-mode activate)
  (unless visual-line-mode
    ad-do-it))

Questo cambierà il paragrafo di riempimento per non fare nulla quando la modalità visuale è attiva. Puoi anche aggiungere un errore se lo preferisci.

visual-line-mode-map ha la propria keymap: visual-line-mode-map . Consiglio di ricollegare M-q solo in quella keymap.

La mappa è definita come parte dell'avvio, quindi non hai bisogno di eval-after-load. Basta disabilitare l'associazione in quella modalità:

(define-key visual-line-mode-map [remap fill-paragraph] 'ignore)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top