手册页的 Emacs 模式

Ema*_*erg 7 man emacs roff

我正在翻译手册页,并且在使用 Emacs 时遇到了一些问题。

  1. 你如何指定语言?(对于 man,man -Lsv shutdown对于瑞典语“sv”子目录,如果可用的话,它看起来像这样。)

  2. 在 Emacs man 模式下,你可以使用NP根据标题向前或向后跳转(在 roff 中,它们是这样的:.SH)。但是,如果标题包含三个特殊瑞典字符中的一个(或多个):Å、Ä 和 Ö,这将不起作用。我是否逃脱它们并不重要(像这样\(:A)。(但它们被正确显示。)

  3. 要查看项目中的工作,我使用例如M-x man RET ./ls.1(即绝对路径)。这很棒,因为它与查看“真实”联机帮助页(位于 /usr/share/man 中的那些)的 man 模式相同。只是,当我对文档进行一些更改时,如何刷新联机帮助页?revert-buffer说缓冲区与文件无关(不是真的,但好吧,我明白了);M-x load-file RET似乎失去了对文件的跟踪;……想法?

顺便说一句,翻译很有趣!

编辑:(见第一条评论) 桌子

Ema*_*erg 3

如何在编辑 roff 源代码时以手册页模式更新手册页:

;;;; MAN / man
(defvar *curr-man* "~/mansv/ls.1")

(defun edman ()
  "edit the current work-in-progress man page"
  (interactive)
  (find-file *curr-man*) )

(defun upman () ; edit: better version of this function below
  "update the current work-in-progress man page"
  (interactive)
  (buffer-menu)
  (revert-buffer)
  (with-temp-buffer
    (progn
      (insert-buffer-substring "*Buffer List*")
      (beginning-of-buffer)
        (let ((man-buffer (format "*Man %s*" *curr-man*)))
          (if (word-search-forward man-buffer (point-max) t) ; t = nil on fail
            (kill-buffer man-buffer) ))
      (man *curr-man*)
      (edman)
      (kill-buffer "*Buffer List*") )))
Run Code Online (Sandbox Code Playgroud)

编辑

希望这个版本upman更加稳定。请注意新全局的引入。

(defun upman ()
  "update the current work-in-progress man page"
  (interactive)
  (if (get-buffer *curr-man-file*) (save-buffer))
  (let ((man-buffer (format "*Man %s*" *curr-man*)))
    (if (get-buffer man-buffer) (kill-buffer man-buffer))
    (man *curr-man*)
    (edman) ))
Run Code Online (Sandbox Code Playgroud)