缓冲区为只读时定义键

use*_*326 4 emacs dot-emacs

当我的缓冲区是只读的时候,我试图使用"n"和"p"键与"Cn"和"Cp"相同(是的,我很懒).

我在.emacs文件中使用此代码:

(when buffer-read-only (local-set-key "n" 'next-line))
(when buffer-read-only (local-set-key "p" 'previous-line))
Run Code Online (Sandbox Code Playgroud)

当缓冲区自动设置为只读时(即在w3m内),它正在工作但是当我运行Cx Cq(toggle-read-only)时它似乎不起作用.它一直在说

Buffer is read-only: #<buffer buffername>
Run Code Online (Sandbox Code Playgroud)

而且我不知道这怎么会起作用呢?

use*_*342 6

您的密钥定义在加载期间进行评估.emacs,而您希望每次访问只读文件时评估它们,并且每次toggle-read-only都执行.此外,只要缓冲区再次进行读写,您就希望它们被撤消.

您可以利用Emacs已支持view-mode在只读缓冲区中自动激活的事实,而不是实现所有这些.您需要做的就是启用该功能,并在view-mode-map以下位置定义您的密钥:

(setq view-read-only t)     ; enter view-mode for read-only files
(define-key view-mode-map "n" 'next-line)
(define-key view-mode-map "p" 'previous-line)
Run Code Online (Sandbox Code Playgroud)