3

我正在completing-read处理文件系统路径列表,例如。("~/parent/child" "/parent/child").

我想屏蔽 的输出completing-read/ido-completing-read,使其仅显示child,但仍会返回完整路径。

这可能吗?

最好的问候,老鼠

4

2 回答 2

4

答:不,这是不可能的,因为完成读取不考虑字符串的任何语义。

这是可能的,但需要多次调用完成列表。

这个想法是这个函数被传递一个字符串列表,它可以帮助你从那个列表中选择一个字符串。

完成列表无法控制字符串包含的内容。它不关心字符串的语义,如路径。它只看到字符串列表。

所以,为了实现你想要的,你用当前目录中的文件列表调用它一次,如果你选择一个目录,首先你改变到那个目录,然后你用文件列表再次调用它从那个目录等

如果您想保持 pwd 与初始相同,那么当它返回时,您再次更改为原始目录。

(cd (concat default-directory
            (completing-read "> " (directory-files default-directory ))))
于 2012-07-28T10:17:26.050 回答
2

该软件包的uniquify功能与您想要的类似。当您有两个缓冲区访问具有相同文件名的文件时,它将在末尾添加一个字符串以区分两者。

例如,如果您有文件/etc/foo/bar/a/mnt/a它将调用缓冲区,例如a <bar>a <mnt>。然后,当您使用ido切换缓冲区时,您不必从完整文件名中进行选择,但最终会进入正确的缓冲区。

于 2012-07-28T14:40:17.683 回答