我正在completing-read
处理文件系统路径列表,例如。("~/parent/child" "/parent/child")
.
我想屏蔽 的输出completing-read/ido-completing-read
,使其仅显示child
,但仍会返回完整路径。
这可能吗?
最好的问候,老鼠
答:不,这是不可能的,因为完成读取不考虑字符串的任何语义。
这是可能的,但需要多次调用完成列表。
这个想法是这个函数被传递一个字符串列表,它可以帮助你从那个列表中选择一个字符串。
完成列表无法控制字符串包含的内容。它不关心字符串的语义,如路径。它只看到字符串列表。
所以,为了实现你想要的,你用当前目录中的文件列表调用它一次,如果你选择一个目录,首先你改变到那个目录,然后你用文件列表再次调用它从那个目录等
如果您想保持 pwd 与初始相同,那么当它返回时,您再次更改为原始目录。
(cd (concat default-directory
(completing-read "> " (directory-files default-directory ))))
该软件包的uniquify
功能与您想要的类似。当您有两个缓冲区访问具有相同文件名的文件时,它将在末尾添加一个字符串以区分两者。
例如,如果您有文件/etc/foo/bar/a
,/mnt/a
它将调用缓冲区,例如a <bar>
和a <mnt>
。然后,当您使用ido
切换缓冲区时,您不必从完整文件名中进行选择,但最终会进入正确的缓冲区。