Question

J'utilise maintenant Emacs 23 avec le mode ligne visuelle désactivé pour l'édition de texte, mais je continue de frapper M-q par habitude (en ajoutant ainsi des fins de ligne rigoureuses ...). Je me demande s’il est possible d’ajouter une condition pour désactiver le remplissage de paragraphe (ou supprimer la liaison à Mq) pour les modes dans lesquels le mode de ligne visuelle est activé, mais pour le réactiver pour ceux dans lesquels je suis toujours en utilisant le mode de remplissage automatique? Merci!

Était-ce utile?

La solution

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

Au lieu d'utiliser clé globale , vous pouvez également relier M-q uniquement dans des modes spécifiques. (Vous pouvez également modifier la liaison globale, puis lier Mq à fill-paragraph dans un mode spécifique.) Notez que de nombreux modes sont chargés automatiquement, de sorte que leur keymap peut ne pas être défini tant que le mode n'est pas activé. Pour définir une liaison spécifique à un mode, j'utilise généralement une fonction comme celle-ci:

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

( remove-hook n'est pas strictement nécessaire, mais la fonction ne doit être exécutée qu'une seule fois.)

Autres conseils

vous pouvez utiliser un conseil pour cela.

Pour vos .emacs:

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

Ceci changera le remplissage du paragraphe en ne faisant rien lorsque le mode ligne visuelle est activé. Vous pouvez également ajouter une erreur si vous préférez.

visual-line-mode a son propre clavier: visual-line-mode-map . Je recommande de relier M-q uniquement dans ce keymap.

La carte est définie dans le cadre du démarrage, vous n’avez donc pas besoin d’évaluer après le chargement. Désactivez simplement la liaison dans ce mode:

(define-key visual-line-mode-map [remap fill-paragraph] 'ignore)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top