채우기 영역 / 단락을 단락 접두사로 식별하는 방법은 무엇입니까?


11

다음 버퍼가 있다고 가정 해 봅시다.

1. lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum

M-q여기에 때리는 것은 text-mode다음과 같습니다.

1. lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem
ipsum lorem ipsum lorem ipsum lorem ipsum

반면 markdown-mode에을 활성화 하면 다음과 같은 결과가 나타납니다 (마크 다운은 예일 뿐이며 다양한 모드에서 유사한 동작이 나타납니다).

1. lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem
   ipsum lorem ipsum lorem ipsum lorem ipsum

텍스트 모드를 구성하려면 어떻게해야합니까?

special을 작성 하여이 작업을 수행 할 수 있다고 생각 fill-paragraph-function하지만이 변수는 nilin로 설정되어 markdown-mode있으므로 더 쉬운 방법이 있습니다.

답변:


6

필자는 오랫동안 이런 종류의 일을 처리하는 filladapt 모드의 행복한 사용자였습니다. 자세한 내용은

http://emacswiki.org/emacs/FillAdapt

해당 페이지에서 :

KyleJones의 Filladapt는 프로그램 코드의 주석 시퀀스와 같은 채우기 접두사를 추측하고 "1"과 같은 글 머리 기호를 처리하여 Emacs의 채우기 기능을 향상시킵니다. 또는 "*".

예를 들어

* Pretend I'm a really super long line.
* And the window's narrow.

으로

* Pretend I'm a really super
  long line.
* And the window's narrow.

좋아, 그것을 해결하기 위해 편집했다.
Chris

이 모드를 다른 모드와 함께 사용 (add-hook 'org-mode-hook 'turn-on-filladapt-mode)하려면 구성 파일 과 같은 것을 추가 하십시오 (이 정보는 링크 된 위키 페이지에서 직접 사용할 수 없습니다).
Mark

fill-paragraph인용 부호 내에서 올바르게 동작하도록 아름답게 작동합니다 markdown-mode.
라돈 로스 버러

그로부터 2 년이 지났습니다. wonderworks.com/download/filladapt.el 링크 를 더 이상 사용할 수 없습니다.
Tankman 六四

링크가 지금 저에게 효과적입니다. 사이트에 일시적인 문제가있을 수 있습니다.
Chris

3
(fill-paragraph &optional JUSTIFY REGION)

[...]

If `fill-paragraph-function' is non-nil, we call it (passing our
argument to it), and if it returns non-nil, we simply return its value.

If `fill-paragraph-function' is nil, return the `fill-prefix' used for filling.

[...]

markdown-mode아마도 함수가 채우기를 수행하는 데 사용되도록 설정 fill-paragraph-function됩니다 .nilfill-prefix

(let ((fill-prefix (make-string (length "1. ") ? ))
  (fill-paragraph))

전체 예 :

(let* ((num 15)
       (numstr (format "%d. " num))
       (fill-prefix (make-string (length numstr) ? )))
  (with-temp-buffer
    (loop for i from 1 to 15 do
          (insert (format "lorem ipsum (%d) doler sit amet " i)))
    (beginning-of-line)
    (insert numstr)
    (fill-paragraph)
    (buffer-string)))

;; =>

"\
15. lorem ipsum (1) doler sit amet lorem ipsum (2) doler sit amet
    lorem ipsum (3) doler sit amet lorem ipsum (4) doler sit amet
    lorem ipsum (5) doler sit amet lorem ipsum (6) doler sit amet
    lorem ipsum (7) doler sit amet lorem ipsum (8) doler sit amet
    lorem ipsum (9) doler sit amet lorem ipsum (10) doler sit amet
    lorem ipsum (11) doler sit amet lorem ipsum (12) doler sit amet
    lorem ipsum (13) doler sit amet lorem ipsum (14) doler sit amet
    lorem ipsum (15) doler sit amet "

1
"markdown-mode는 아마도 fill-paragraph-function을 nil로 설정하여 함수가 fill-prefix를 사용하여 채우기를 수행하도록합니다." 그것은 전체 이야기가 될 수 없습니다. 내가 때 M-q, fill-paragraph직접 호출됩니다 (그 주위에 바운드 바인딩이 없습니다). fill-prefix궁극적으로 이러한 목적으로 사용되는 것이 가능하지만 자동 감지 할 수있는 구성 변수가 있어야합니다.
Malabarba

1
@Malabarba markdown-mode실제로 단락 정의를 통해이 작업을 수행하는 것처럼 보입니다 : gist.github.com/vermiculus/88759fd9f8368adbf663
Sean Allred

예, 더 비슷해 보입니다.
Malabarba

2

Sean의 요지는 나를 올바른 방향으로 지적했으며 여기에 그것을 해결 한 발췌 문장이 있습니다.

(defun my-adaptive-fill-function ()
  "Return prefix for filling paragraph or nil if not determined."
  (cond
   ;; List item inside blockquote
   ((looking-at "^[ \t]*>[ \t]*\\([0-9]+\\.\\|[*+-]\\)[ \t]+")
    (replace-regexp-in-string
     "[0-9\\.*+-]" " " (match-string-no-properties 0)))
   ;; Blockquote
   ((looking-at "^[ \t]*>[ \t]*")
    (match-string-no-properties 0))
   ;; List items
   ((looking-at "^\\([ \t]*\\)\\([0-9]+\\.\\|[\\*\\+-]\\)\\([ \t]+\\)")
    (match-string-no-properties 0))
   ;; No match
   (t nil)))

;; Paragraph filling in text-mode.
(add-hook 'text-mode-hook
  (lambda ()
    (set (make-local-variable 'paragraph-start)
         "\f\\|[ \t]*$\\|[ \t]*[*+-] \\|[ \t]*[0-9]+\\.[ \t]\\|[ \t]*: ")
    (set (make-local-variable 'paragraph-separate)
         "\\(?:[ \t\f]*\\|.*  \\)$")
    (set (make-local-variable 'adaptive-fill-first-line-regexp)
         "\\`[ \t]*>[ \t]*?\\'")
    (set (make-local-variable 'adaptive-fill-function)
         'my-adaptive-fill-function)))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.