一个给法律条款文本前加两个全角空格的 Emacs 函数
Jump to navigation
Jump to search
;;; insert-quan: 从当前行(行首)到 buffer 末尾,在需处理的行前插入两个全角空格(U+3000)。
(defun insert-quan ()
"从当前行(行首)到 buffer 末尾的每一行前插入两个全角空格(U+3000)。
跳过空白行、以 '='(在可选前导空白之后)开头的行,以及已以全角空格开头的行。"
(interactive)
(let* ((beg (line-beginning-position))
(end (point-max))
(end-marker (copy-marker end))
(ideograph-space (char-to-string #x3000))
(count 0))
(save-excursion
(goto-char beg)
(while (< (point) end-marker)
(let* ((line-beg (line-beginning-position))
(line-end (line-end-position))
(line (buffer-substring-no-properties line-beg line-end)))
(unless (or
;; 空白行(只含空白字符)
(string-match-p "\\`[[:space:]]*\\'" line)
;; 第一非空字符是 '=' (允许行首有空格/tabs)
(string-match-p "\\`[[:space:]]*=" line)
;; 已经以全角空格开头(避免重复插入)
(string-prefix-p ideograph-space line))
(goto-char line-beg)
(insert-char #x3000 2)
(setq count (1+ count))))
(forward-line 1)))
(message "insert-quan: 已处理并插入 %d 行(从当前行到 buffer 末尾)。" count)))