Отключить режим автозаполнения локально (или un fill-абзац) с помощью emacs - PullRequest
4 голосов
/ 09 сентября 2010

Я использую Mq для заполнения абзаца, могу ли я сделать un-fill-абзац в режиме автозаполнения?

В режиме org я иногда ввожу [[Очень длинный HTML] [Имя с пробелами]] , а для режима «Имя с пробелами» режим автозаполнения разбивает всю строку на основена вставленном месте, что делает его очень некрасивым.

Есть ли команда что-то вроде un-fill-абзаца?Или есть способ отключить режим автозаполнения временно / локально?

Ответы [ 4 ]

6 голосов
/ 09 сентября 2010

Emacs не записывает вашу линию до вызова fill-paragraph. Таким образом, единственное, что вы можете сделать, это C -_ , который запускает команду undo. Он может отменить вашу команду fill-paragraph, но только если это предыдущий вызов команды.

Если вы хотите поместить многострочный абзац в одну строку, вы можете сделать так:

  • Выберите регион
  • CM -% Cq Cj RET ПРОБЕЛ RET !
3 голосов
/ 21 февраля 2013

Xah Lee обновил свой код с момента ответа monotux, и я несколько изменил его для удобства чтения:

(defun my-toggle-fill-paragraph ()
  ;; Based on http://xahlee.org/emacs/modernization_fill-paragraph.html
  "Fill or unfill the current paragraph, depending upon the current line length.
When there is a text selection, act on the region.
See `fill-paragraph' and `fill-region'."
  (interactive)
  ;; We set a property 'currently-filled-p on this command's symbol
  ;; (i.e. on 'my-toggle-fill-paragraph), thus avoiding the need to
  ;; create a variable for remembering the current fill state.
  (save-excursion
    (let* ((deactivate-mark nil)
           (line-length (- (line-end-position) (line-beginning-position)))
           (currently-filled (if (eq last-command this-command)
                                 (get this-command 'currently-filled-p)
                               (< line-length fill-column)))
           (fill-column (if currently-filled
                            most-positive-fixnum
                          fill-column)))

      (if (region-active-p)
          (fill-region (region-beginning) (region-end))
        (fill-paragraph))

      (put this-command 'currently-filled-p (not currently-filled)))))
2 голосов
/ 21 февраля 2013

Чтобы переделать длинную строку из абзаца в режиме Org, я дал себе новую команду.Вот соответствующий код Emacs Lisp:

(defun fp-unfill-paragraph (&optional justify region)
  (interactive (progn
         (barf-if-buffer-read-only)
         (list (if current-prefix-arg 'full) t)))
  (interactive)
  (let ((fill-column 100000))
    (fill-paragraph justify region)))

(global-set-key "\C-ceu" 'fp-unfill-paragraph)

Конечно, вы настраиваете привязку клавиш команды, как считаете нужным!

1 голос
/ 10 сентября 2010

Я использую следующий фрагмент, чтобы заполнять и не заполнять абзацы (используя только M-q), это действительно очень удобноЯ позаимствовал его у Xah Lee, но удалил некоторые комментарии и пробелы, чтобы он поместился здесь.Ссылка в первом комментарии ведет на его оригинальный код.

;; http://xahlee.org/emacs/modernization_fill-paragraph.html
(defun compact-uncompact-block ()
  "Remove or add line endings on the current block of text.
This is similar to a toggle for fill-paragraph and unfill-paragraph
When there is a text selection, act on the region.

When in text mode, a paragraph is considered a block. When in programing
language mode, the block defined by between empty lines.

Todo: The programing language behavior is currently not done.
Right now, the code uses fill* functions, so does not work or work well
in programing lang modes. A proper implementation to compact is replacing
newline chars by space when the newline char is not inside string.
"
  (interactive)
  (let (bds currentLineCharCount currentStateIsCompact
            (bigFillColumnVal 4333999) (deactivate-mark nil))
    (save-excursion
      (setq currentLineCharCount
            (progn
              (setq bds (bounds-of-thing-at-point 'line))
              (length (buffer-substring-no-properties (car bds) (cdr bds)))))
      (setq currentStateIsCompact
            (if (eq last-command this-command)
                (get this-command 'stateIsCompact-p)
              (if (> currentLineCharCount fill-column) t nil)))
      (if (and transient-mark-mode mark-active)
          (if currentStateIsCompact
              (fill-region (region-beginning) (region-end))
            (let ((fill-column bigFillColumnVal))
              (fill-region (region-beginning) (region-end)))
            )
        (if currentStateIsCompact
            (fill-paragraph nil)
          (let ((fill-column bigFillColumnVal))
            (fill-paragraph nil))))
      (put this-command 'stateIsCompact-p
           (if currentStateIsCompact
               nil t)))))
(global-set-key (kbd "M-q") 'compact-uncompact-block)
...