Emacs вещь в точке в буфере Dired - PullRequest
3 голосов
/ 11 августа 2009

Я хочу знать, что за «вещь» находится в точке в буфере с задержкой.

Например, Debug - это «каталог»:

drwxrwxrwx 0 10-08-2009 17:50 Отладка

Makefile - это «файл»:

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

и это "заголовок"

d: / Foo / бар / Debug:

Один из способов найти предмет - посмотреть, какое лицо в точке. Есть ли другой способ сделать это? Как я могу определить границы вещей в точке?

Стандарт (имя файла вещи в точке) не обрабатывает пробелы в имени файла.

Ответы [ 4 ]

6 голосов
/ 12 августа 2009

Эти функции могут быть полезны при составлении того, что вы хотите:

  • Dired-получить имя файла
  • Dired-ход к имени файла
  • Dired-ход к отслуживших файла
  • file-directory-p и друзья
1 голос
/ 05 сентября 2011

Никогда (почти никогда?) ни одной вещи в точке. Существуют функции «вещь в точке», которые могут извлекать некоторый текст в точке или рядом с ней, которая является вещью определенного типа. Таким образом, у вас есть фундаментальное заблуждение здесь.

В Dired, как и везде, в зависимости от того, где находится точка, вы можете получить имя символа в точке, имя файла в точке и несколько других типов вещей - все из одной и той же позиции.

Другие ответили, как определить, предназначена ли данная строка для обычного файла или каталога.

Если вы используете Dired + , то вы можете использовать Ch RET (команда diredp-describe-file) для получения информации о файле или каталог в текущей строке - ее тип, атрибуты и т. д.

Если вы хотите получить вещь в точке или рядом с ней программно, см. Thing At Point + .

1 голос
/ 11 августа 2009

Первый символ списка - d для каталогов, l для ссылок - для обычных файлов. Есть символы, представляющие символьные и блочные устройства, процессы и т. Д. Что еще вы хотели узнать? (Я никогда не видел ваш тип "заголовка". Как вы его создали?)

1 голос
/ 11 августа 2009

Вы можете выделить текст, используя оверлеи . Вот пара функций, которые вы можете добавить в свой файл .emacs, чтобы сделать это. Ключевым моментом является то, что мы называем все наложения, созданные таким образом, «my -lights», чтобы позже мы могли удалить только эти наложения.

(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))

EDIT:

Вы можете добавить пользовательскую функцию для возврата границ имени файла в точке, в которой есть пробелы. См. эту статью 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)
...