在一个Dired缓冲区中,Emacs的thing-at-point是什么?

3

我想知道在dired缓冲区中点位置的“thing”是什么。

例如,Debug是一个“directory”:

drwxrwxrwx 0 10-08-2009 17:50 Debug

Makefile是一个“file”:

-rw-rw-rw- 15k 6-03-2009 13:02 Makefile

而这是一个“header”

d:/foo/bar/Debug:

找到一个thing的一种方法是查看点所在的face。还有其他方法吗?如何确定bounds-of-thing-at-point?

标准的(thing-at-point 'filename)无法处理文件名中的空格。

4个回答

6

以下这些函数可能有助于您实现所需的功能:

  • dired-get-filename
  • dired-move-to-filename
  • dired-move-to-end-of-filename
  • file-directory-p 和其它相关函数

1

你可以使用覆盖来突出文本。以下是几个函数,你可以将它们添加到你的.emacs文件中来实现这一功能。关键在于我们将所有以这种方式创建的覆盖命名为“my-highlights”,以便稍后只需删除这些覆盖。

(defun highlight-thing-at-point ()
  (interactive)
  (let* ((my-thing (bounds-of-thing-at-point 'sexp))
         (my-overlay (make-overlay (first my-thing) (rest my-thing))))
    (overlay-put my-overlay 'name 'my-highlights)
    (overlay-put my-overlay 'face 'highlight)))

(defun unhighlight-all-of-mine ()
  (interactive)
  (remove-overlays nil nil 'my-highlights))

编辑:

你可以添加一个自定义函数,以返回具有空格的文件名点的边界。请参见此EmacsWiki文章中的示例。因此,如果您编写一个名为my-bounds-of-filename-at-point的函数,则可以将其设置为(bounds-of-thing-at-point'filename)和(thing-at-point'filename)的默认值,如下所示:

(put 'filename 'bounds-of-thing-at-point 'my-bounds-of-filename-at-point)

我的问题不是关于高亮,而是关于查找光标所在位置的内容。(bounds-of-thing-at-point 'sexp) 在 dired 缓冲区中无法处理文件名中的空格。 - Oleg Pavliv
是的,你说得对,我可以定义自己的解析器。更简单的方法是,我可以一次循环前进(然后向后)一个字符,直到它改变了面貌。这样我就可以找到边界。但我的问题是关于使用现有的东西,一个看似标准的任务的标准解决方案。 - Oleg Pavliv

1

在某个位置上几乎从不会有单一的事物。有一些获取点处或附近特定类型事物的函数。所以你在这里有一个基本误解。

在Dired中,与其他地方一样,根据光标所处位置,可以检索到点上的符号名称、文件名称和其他几种类型的事物,所有这些都可以从同一位置检索到。

其他人已经回答了如何确定给定行是普通文件还是目录。

如果您使用 Dired+,那么您可以使用 C-h RET 命令diredp-describe-file来获取当前行上的文件或目录的信息-其类型、属性等。

如果您想编程获取点处或附近的事物,请参见 Thing At Point+


1
列表的第一个字符是d,表示目录;l表示链接;-表示普通文件。还有代表字符和块设备、进程等的字符。你还想知道什么?(我从未见过你的“标题”类型。你是如何生成它的?)

Dired缓冲区使用不同的面来显示 - dired-header(例如在dired缓冲区中的第一行),dired-directory等。我的问题是点处的“东西”是什么,以及如何确定该“东西”的范围(开始和结束)。 - Oleg Pavliv
Oleg,你在重复使用相同的单词来提问。如果你想得到不同的答案,提供更多或不同的信息会很有用。为什么你关心点而不是当前行?为什么你想知道边界,当你可以使用正则表达式来查找整个文件名呢? - PanCrit

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