elisp 小部件:在更改可编辑字段时实时修改可编辑字段的值



我有一个简单的小部件设置:

(setq gobgen-widget-name
      (widget-create 'editable-field
                     :size 25
                     :format "Name:   %v"
                     :notify (lambda (widget &rest ignore)
                               (widget-value-set gobgen-widget-prefix (get-gobject-prefix (widget-value widget))))
                     "g_example_object"))
(widget-insert " ")
(setq gobgen-widget-prefix
      (widget-create 'editable-field
                     :size 10
                     :format "Prefix: %vn"
                     "g"))

我想用 get-gobject-prefix 的返回值实时更新第二个小部件。

但是,每当我在Name小部件中输入字符时,point都会自动跳转到Prefix字段的最后一个字符,并在那里插入我的字符。

有没有办法实现我想要实现的目标?

注意:我使用的是 Emacs 24.3.1。

注2:移至 Emacs 站点

尽管迁移到了Emacs站点,我也在这里发布了我的解决方案。

事实证明,这比我预期的要容易:使用save-excursion节省了一天(和我的点位置(。

(lambda (widget &rest ignore)
  (save-excursion
    (widget-value-set gobgen-widget-prefix (get-gobject-prefix (widget-value widget)))))

不过,并不完全完美,因为它改变了Prefix小部件的宽度。

最新更新