gpt4 book ai didi

emacs - 如何通过完成读取返回值而不是键

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:09 25 4
gpt4 key购买 nike

(completing-read
"Complete a foo: "
'(("foobar1" "~/foobar1/") ("barfoo" "/usr/barfoo/") ("foobaz" "/hello/")))

如上所示,我想提示输入 "foobar1""barfoo""foobaz" 但得到配对目录作为返回。

此外,如果我有这样的哈希表

(cl-defstruct person ID name)
(setq person-object (make-person :ID 123 :name "foo"))
(setq person-table (make-hash-table))
(pushash (person-ID person-object) person-object person-table)

我怎样才能提示输入人名但得到一个人 ID 作为返回?

最佳答案

没有办法让 completing-read 返回值而不是键,所以你必须自己做查找:

(let ((completions '(("foobar1" "~/foobar1/") ("barfoo" "/usr/barfoo/") ("foobaz" "/hello/"))))
(cadr (assoc (completing-read "Complete a foo: " completions) completions)))

至于哈希表,由于名称不是键,因此需要遍历哈希表中的每个对象才能找到它,使用maphash。由于在找到所需内容后继续迭代会很浪费,因此可以使用 catchthrow,如下所示:

(catch 'found-it
(maphash
(lambda (key value)
(when (equal (person-name value) desired-name)
(throw 'found-it key)))
person-table))

这将返回人员 ID,如果没有名称等于 desired-name 的人员,则返回 nil

关于emacs - 如何通过完成读取返回值而不是键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com