作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一段代码来创建一个树小部件:
(require 'tree-widget)
(defun my-create-tree-widget ()
(interactive)
(with-current-buffer (get-buffer-create "*my-tree-widget*")
(setq-local my-tree-widget
(widget-create
'tree-widget
:open t
:tag "one"
:args
(list (widget-convert
'tree-widget
:tag "two"
:args (mapcar (apply-partially #'widget-convert 'item)
'("three" "four"))))))
(switch-to-buffer (current-buffer))))
:tag
参数成为节点的标签:
[-] one
`-[+] two
:tag
设置
widget-put
值不会更改缓冲区中的任何内容。我怎样才能做到这一点?
最佳答案
出于某种原因,树小部件节点的标签存储为 :children
属性中的第一个元素,因此您需要检索该值,并更改其 :tag
属性,而不是树小部件本身的 :tag
属性。
更改 :tag
属性后,您需要强制小部件更新。您可以使用 widget-value-set
做到这一点。由于您实际上不想更改该值,只需再次分配相同的值即可;它仍然具有重绘小部件的相同效果。
例如,要更新顶级节点:
(defun my-change-tree-widget-first-level ()
(interactive)
(let ((node (car (widget-get my-tree-widget :children))))
(widget-put node :tag (format-time-string "%T"))
;; Redraw
(widget-value-set node (widget-value node))))
[-] 12:39:19
`-[+] two
:children
属性向下挖掘,请记住,第一个“子”元素严格来说并不是子节点:
(defun my-change-tree-widget-second-level ()
(interactive)
(let ((second-level (cadr (widget-get my-tree-widget :children))))
(unless (tree-widget-p second-level)
(error "This is not the tree widget"))
(let ((node (car (widget-get second-level :children))))
(widget-put node :tag (format-time-string "%T"))
;; Redraw
(widget-value-set node (widget-value node)))))
[-] 12:39:19
`-[+] 12:40:41
关于emacs - 更改树小部件节点的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104291/
我是一名优秀的程序员,十分优秀!