如何在Emacs中通过editable-field组件存储用户输入内容?
解决Emacs Editable-Field仅存储用户输入内容的问题
你遇到的问题是因为widget-create返回的是widget组件对象,而非用户输入的内容,所以直接用setq存储会得到组件定义而非输入值。以下是几种可行的实现方式:
方法1:创建时绑定变量(推荐)
通过:value参数将组件与一个变量绑定,用户输入的内容会自动同步到该变量中:
;; 先定义用于存储输入的变量 (setq my-user-name "") (widget-create 'editable-field :size 13 :format "name: %v \n" :value 'my-user-name ; 绑定变量,输入内容会自动写入此变量 "Type in your name")
之后直接访问my-user-name就能获取用户输入的内容。
方法2:通过组件对象提取输入值
如果已经创建了组件,可以先存储组件对象,再用widget-value函数提取输入内容:
;; 存储组件对象 (setq name-input-widget (widget-create 'editable-field :size 13 :format "name: %v \n" "Type in your name")) ;; 提取并存储用户输入内容 (setq my-user-name (widget-value name-input-widget))
方法3:实时同步输入内容(用回调函数)
通过:notify回调函数,在用户输入变化时实时更新变量:
(setq my-user-name "") (widget-create 'editable-field :size 13 :format "name: %v \n" :notify (lambda (widget new-value) (setq my-user-name new-value)) ; 输入变化时同步变量 "Type in your name")
内容的提问来源于stack exchange,提问作者xava
相关产品推荐
相关产品推荐

