如何让PROPETIES和LOGBOOK drawer只读以防止误操作

最近发现agendafile 里有些数据丢失,肯定是自己误操作了.想设置部分只读,特请教各位大佬

这两个网址应该会有所帮助

(defun org-make-properties-read-only ()
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward
            "^ *:PROPERTIES:\n\\( *:.+?:.*\n\\)+ *:END:\n" nil t)
      (add-text-properties (- (match-beginning 0) 1) (- (match-end 0) 1) '(read-only t)))))

(defun org-make-logbooks-read-only ()
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward
            "^ *:LOGBOOK:\n\\( *-.+\n\\)+ *:END:\n" nil t)
      (add-text-properties (- (match-beginning 0) 1) (- (match-end 0) 1) '(read-only t)))))

(add-hook 'org-mode-hook #'org-make-properties-read-only)
(add-hook 'org-mode-hook #'org-make-logbooks-read-only)

临时糊了一个,应该能满足要求,但是这样修改就挺麻烦的。

ps. 也可以隐藏 drawers 来防止误操作,

5 个赞

也许可以把“只读/去掉只读”与“隐藏/显示drawers”写在一起: 显示drawer则进入读写模式,隐藏drawer则进入只读保护模式。

再写一个run-with-idle-timers 闲时自动进入只读模式。

这样修改就不那么麻烦了。