Мне нужно получить полный путь к файлу, который я редактирую с помощью emacs.
- Есть ли для этого функция?
- Если нет, то какой была бы функция elisp для этого?
- Как я могу скопировать результат (путь) в буфер обмена, чтобы использовать его повторно?
Я использую Mac OS X и Aqumacs.
(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???
ДОБАВЛЕНО
(defun показать-имя-файла () «Показать полный путь к файлу в минибуфере». (интерактивный) (сообщение (имя-файла-буфера)) (kill-new (имя-файла-файла-буфера)) ) (глобальный-набор-ключ "\ C-cz" 'имя-шоу-файла)
Объединив два полученных ответа, я смог получить то, что хочу. Спасибо за ответы. И еще несколько вопросов.
- Что для (имя-файла)?
- Могу ли я скопировать имя пути в буфер обмена системы (ОС), а не список уничтожений, чтобы я мог использовать информацию с другими приложениями?
buffer-file-name
есть переменнаяM-x
?funcall
для вызова функции, которая хранится как значение переменнойfoo
, потому что, если бы вы использовали,(foo)
вы бы использовали слот функции,foo
а не слот значения.Чтобы позаимствовать из ответа Жерома Радикса, если вы просто хотите быстро увидеть путь к файлу текущего буфера, вы можете это сделать
M-: buffer-file-name
.Либо введите
(buffer-file-name)
где-нибудь буфер и запуститеC-x C-e
закрывающую скобку (это будет работать в любом режиме, а не только в режиме lisp).источник
buffer-file-name
это функция, но она не отображаетсяM-x
, а отображаетсяM-:
какemacs eval
, там я могу запустить команду благодаря вашему ответу :)M-x
выполняет только интерактивные функции, тогда какM-:
выполняет любую функцию elisp.Мой трюк - сделать что-то
C-x C-f
вроде открытия файла, он предварительно заполнит минибуф текущим путемC-g
к файлу, чтобы выйти. Быстрее, чемM-: buffer-file-name
любые другие методы, но намного уродливее.источник
Прямая реализация того, что вы хотите:
Тем не менее, я считаю невероятно полезным иметь возможность получить полный путь к тому, что находится в минибуфере, и вот что я использую:
А затем, если я хочу, чтобы это было в буфере обмена, я просто убиваю строку ( C-a C-k). Но мы могли бы легко скопировать истинное имя в буфер обмена в приведенной выше команде, просто изменив последнюю строку на:
Новая часть - это вызов,
'kill-new
который помещает строку в список уничтожения.источник
Нет необходимости в дополнительных функциях, просто
источник
C-x C-f
, запустивM-! pwd
, затемM-x cd
выбрав другой каталог, а затемM-! pwd
снова запустив .У меня уже давно используется следующий код. Он копирует полный путь к файлу в список уничтожений, когда я нажимаю среднюю кнопку мыши на имени буфера в строке режима. Он копирует только имя буфера в список уничтожений, когда я нажимаю shift-mouse-2 на имени буфера в строке режима.
источник
C-x C-d
, также вызываемый черезM-x list-directory
, покажет вам каталог для вашего текущего файла, и вам нужно только нажать клавишу «Enter», чтобы очистить минибуфер. Дополнительная информация доступна здесь .источник
C-x C-b
показывает список буферов и путь к файлу для каждого буфера, где это применимо.источник
C-u C-x C-b
перечисляет буферы, посещающие в данный момент файлы.источник
Вы можете использовать что-то вроде xclip (Linux), pbcopy (Mac), putclip (Cygwin).
Я лично использую сценарии-оболочки
c
иp
для копирования и вставки соответственно, первое чтение со стандартного ввода, второе запись на стандартный вывод. Таким образом, это работает на всех моих платформах разработки:Я считаю это более надежным и настраиваемым, чем использование поддержки буфера обмена Emacs. Например, моя
c
команда копирует ввод во все 3 буфера обмена в Linux (основной, дополнительный, буфер обмена), поэтому я могу вставить его с помощью Ctrl-V или среднего щелчка.источник
date | xclip
иxclip file
оба работают, как заявлено (сохраняя дату или содержимое файла в качестве основного), если они введены в оболочке. Но если я наберу любую из этих команд после M-! в emacs (и нажмите return) ничего не происходит; курсор остается в минибуфере, как будто ожидая ввода дополнительных данных; и если я прервусь, чтобы восстановить контроль, в первичном хранилище ничего не сохранится.(shell-command (format "echo '%s' | xsel -i" buffer-file-name))
- и когда она превращена в интерактивную команду (как предложено в ответе @JeromeRadix, получившем наибольшее количество голосов выше), это БОЛЬШАЯ ВЫИГРЫША! Спасибо!Самый простой способ и был бы
Заимствуя у Трея Джексона, я придумал следующее:
Вы можете найти больше информации на сайте
источник
copy-buffer-file-name-as-kill
from [0], я думаю, делает именно то, что вам нужно. Также есть возможность скопировать только имя каталога или просто имя файла.[0] http://www.emacswiki.org/emacs/download/buffer-extension.el
источник