gpt4 book ai didi

emacs - 只写缓冲区?

转载 作者:行者123 更新时间:2023-12-04 07:36:52 25 4
gpt4 key购买 nike

我想模仿大多数控制台在缓冲区中的工作方式,有什么办法可以做到吗? IE。只允许向缓冲​​区追加文本,但不允许删除?

也许我可以禁用或建议一些删除字符的内置函数,但我担心这不是一个可扩展性很强的解决方案……我可能会遗漏一些。

最佳答案

如前所述,您可以设置只读文本属性。或者更简单地说,您可以设置 buffer-read-only 变量,然后编写一些覆盖它的命令。例如(保证前面 100% 未经测试的代码):

(defun append-only-s-i-c ()
(let ((inhibit-read-only (eobp)))
(call-interactively 'self-insert-command)))

(defvar append-only-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [remap self-insert-command] 'append-only-s-i-c)
map))

(define-derived-mode append-only-mode nil "Append-Only"
"Here's the doc."
(set (make-local-variable 'buffer-read-only) t))

如本例所示,文本的只读性可以被命令覆盖,因此即使是 read-only text-property 也不能保证 100% 文本将永远不会被修改,但是很少有命令会覆盖只读信息,因此在实践中这应该不是一个严重的问题。

另一种方法是使用 before-change-functions 并在修改发生在 EOB 之前发出错误信号。可能是更好的方法:

(defun append-only-b-c-f (beg end)
(if (< beg (point-max)) (error "Can't modify text: append-only!")))

(define-derived-mode append-only-mode nil "Append-Only"
"Here's the doc."
(add-hook 'before-change-functions #'append-only-b-c-f nil 'local))

关于emacs - 只写缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13385454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com