【问题标题】:Change text of tree widget node更改树小部件节点的文本
【发布时间】:2014-08-03 11:41:34
【问题描述】:

我写了一段代码来创建一个树小部件:

(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

现在我想从我的程序中更改标签,但是用widget-put 设置:tag 值不会改变缓冲区中的任何内容。我怎样才能做到这一点?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    由于某种原因,树部件节点的标签存储为: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
    

    【讨论】:

    • 这是不正确的。当您打开和关闭two 按钮时,标签two 将再次突出显示。
    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多