在Emacs Lisp中掩盖completing-read的输出

3

我正在使用文件系统路径列表进行completing-read,例如("~/parent/child" "/parent/child")

我希望屏蔽completing-read/ido-completing-read的输出,以便仅显示child,但仍然返回完整路径。

这是否可能?

最好的问候,Rat


最终我将路径放入哈希表中,以文件名为键,路径为值,然后在完成读取之后通过文件名获取路径。 - Gerstmann
2个回答

4
答案:不可能,因为completing-read没有考虑字符串的语义。但是可以通过多次调用completing-list实现。
这个函数需要传入一个字符串列表,并帮助你从列表中选择一个字符串。Completing-list无法控制字符串的内容,它只看到一系列字符串。所以,为了达到你的目的,你需要先使用当前目录下的文件列表调用它一次,如果你选择了一个目录,那么你就需要进入该目录并再次调用它获取该目录下的文件列表,以此类推。如果你想保持初始工作目录不变,在返回结果后,你需要再次切换回原始目录。
(cd (concat default-directory
            (completing-read "> " (directory-files default-directory ))))

谢谢!看来我得重新考虑我的程序了。 - Gerstmann

2
uniquify可以完成类似于您想要的功能。当您有两个正在访问具有相同文件名的文件的缓冲区时,它将在末尾添加一个字符串以区分两者。
例如,如果您有文件/etc/foo/bar/a/mnt/a,它将调用缓冲区名称为a <bar>a <mnt>。然后,当您使用ido切换缓冲区时,您不必从完整的文件名中进行选择,而是直接进入正确的缓冲区。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接