emacs: visual-line-mode и fill-абзац - PullRequest
       9

emacs: visual-line-mode и fill-абзац

6 голосов
/ 13 сентября 2009

Я сейчас использую Emacs 23 с выключенным режимом визуальных линий для редактирования текста, но продолжаю нажимать M-q по привычке (таким образом добавляя жесткие переносы концов строк ...). Интересно, есть ли способ добавить условие, чтобы отключить заливку абзаца (или удалить привязку к Mq) для режимов, в которых включен режим визуальной строки, но повторно включить его для тех, в которых я все еще используя режим автозаполнения? Спасибо!

Ответы [ 3 ]

7 голосов
/ 13 сентября 2009
(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)

Вместо использования global-set-key вы также можете перепривязать M-q только в определенных режимах. (Или вы можете изменить глобальную привязку, а затем привязать M-q обратно к fill-paragraph в определенном режиме.) Обратите внимание, что многие режимы загружаются автоматически, поэтому их раскладка клавиш может быть не определена, пока режим не активирован. Чтобы установить привязку к конкретному режиму, я обычно использую такую ​​функцию:

(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 не является строго необходимым, но функция должна запускаться только один раз.)

5 голосов
/ 13 сентября 2009

Вы можете использовать совет для этого.

Для ваших .emacs:

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

Это изменит заполнение абзаца, чтобы ничего не делать, когда включен режим визуальной линии. Вы также можете добавить ошибку, если хотите.

2 голосов
/ 19 сентября 2016

visual-line-mode имеет собственную раскладку: visual-line-mode-map. Я рекомендую повторно связать M-q только в этой раскладке.

Карта определена как часть запуска, поэтому вам не требуется eval-after-load. Просто отключите привязку в этом режиме:

(define-key visual-line-mode-map [remap fill-paragraph] 'ignore)
...