Muszę uzyskać pełną ścieżkę do pliku, który edytuję za pomocą emacsa.
- Czy jest do tego funkcja?
- Jeśli nie, jaka byłaby funkcja elisp, aby to uzyskać?
- Jak mogę skopiować wynik (nazwę ścieżki) do schowka, aby móc go ponownie wykorzystać?
Używam Mac OS X i Aqumacs.
(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???
DODANY
(defun nazwa-pliku-pokazu () „Pokaż pełną nazwę pliku ścieżki w minibuforze”. (interaktywny) (wiadomość (nazwa-pliku-bufora)) (kill-new (nazwa-pliku-pliku-bufora-nazwa-pliku)) ) (global-set-key "\ C-cz" 'show-file-name)
Łącząc dwie odpowiedzi, które otrzymałem, mogłem dostać to, czego chcę. Dzięki za odpowiedzi. I jeszcze kilka pytań.
- Do czego służy (nazwa-pliku)?
- Czy mogę skopiować nazwę ścieżki do schowka systemu (OS), a nie pierścień zabijania, aby móc używać tych informacji w innych aplikacjach?
buffer-file-name
M-x
?funcall
aby wywołać funkcję, która jest przechowywana jako wartość zmiennejfoo
, ponieważ gdybyś użył(foo)
, używałbyśfoo
raczej gniazda funkcji niż gniazda wartości.Aby pożyczyć z odpowiedzi Jérôme Radix, jeśli chcesz szybko zobaczyć ścieżkę pliku bieżącego bufora, możesz to zrobić
M-: buffer-file-name
.Alternatywnie, wpisz
(buffer-file-name)
gdzieś bufor i uruchomC-x C-e
w nawiasie zamykającym (zadziała to w każdym trybie, nie tylko w trybie lisp).źródło
buffer-file-name
jako funkcja, ale nie pojawia sięM-x
, ale pojawia sięM-:
jakoemacs eval
, tam mogę uruchomić polecenie, dzięki twojej odpowiedzi :)M-x
uruchamia tylko funkcje interaktywne, podczas gdyM-:
uruchamia dowolną funkcję elisp.Moja sztuczka polega na tym, aby zrobić coś
C-x C-f
podobnego, aby otworzyć plik,C-g
aby zakończyć minibuff bieżącą ścieżką do pliku . Szybszy niż,M-: buffer-file-name
ale o wiele brzydszy niż inne metody.źródło
Bezpośrednia realizacja tego, co chcesz, to:
To powiedziawszy, uważam za niezwykle przydatne, aby móc uzyskać pełną ścieżkę tego, co jest w minibuforze, a tego używam:
A potem, jeśli chcę, żeby znalazła się w schowku, po prostu wyłączam linię ( C-a C-k). Ale moglibyśmy łatwo skopiować prawdziwą nazwę do schowka w powyższym poleceniu, po prostu zmień ostatnią linię na:
Nowa część to wywołanie,
'kill-new
które umieszcza strunę w pierścieniu zabijania.źródło
Po prostu nie potrzebujesz dodatkowej funkcji
źródło
C-x C-f
, uruchamiającM-! pwd
, a następnieM-x cd
wybierając inny katalog i uruchamiającM-! pwd
ponownie.Mam następujący kod w użyciu już od dłuższego czasu. Kopiuje pełną ścieżkę pliku do pierścienia zabijania, gdy naciskam środkowy przycisk myszy na nazwie bufora w wierszu trybu. Kopiuje tylko nazwę bufora do pierścienia zabijania, kiedy naciskam shift-mouse-2 na nazwę bufora w linii trybu.
źródło
C-x C-d
, również wywoływany przezM-x list-directory
, pokaże katalog dla twojego aktualnego pliku i wystarczy nacisnąć klawisz „Enter”, aby wyczyścić minibufor. Dodatkowe informacje dostępne są tutaj .źródło
C-x C-b
pokazuje listę buforów i ścieżkę do pliku dla każdego bufora, jeśli ma to zastosowanie.źródło
C-u C-x C-b
wyświetla bufory aktualnie odwiedzające pliki.źródło
Możesz, jeśli wyskoczysz do czegoś takiego jak xclip (Linux), pbcopy (Mac), putclip (Cygwin).
Osobiście używam skryptów opakowujących
c
oraz odpowiedniop
do kopiowania i wklejania, pierwszego odczytu ze standardowego wejścia, a drugiego zapisu na standardowe wyjście. W ten sposób działa to na wszystkich moich platformach programistycznych:Uważam, że jest to bardziej niezawodne i konfigurowalne niż używanie obsługi schowka Emacsa. Na przykład moje
c
polecenie kopiuje dane wejściowe do wszystkich 3 schowków w systemie Linux (podstawowy, dodatkowy, schowek), więc mogę wkleić za pomocą Ctrl-V lub kliknięcia środkowym.źródło
date | xclip
ixclip file
oba działają zgodnie z zapowiedzią (przechowują datę lub zawartość pliku na podstawowym), jeśli zostaną wpisane w powłoce. Ale jeśli wpiszę którekolwiek z tych poleceń po M-! w emacs (i hit return) nic się nie dzieje; kursor pozostaje w minibuforze, jakby oczekiwał więcej danych wejściowych; a jeśli przerywam, aby odzyskać kontrolę, nic nie zostało zapisane w pierwotnym.(shell-command (format "echo '%s' | xsel -i" buffer-file-name))
- a kiedy zostanie przekształcony w komendę interaktywną (jak zasugerował @JeromeRadix powyżej), jest to WIELKA WYGRANA! Dzięki!Najprostszy sposób i byłby
Pożyczając od Treya Jacksona, wymyśliłem to:
Więcej informacji można znaleźć na stronie
źródło
copy-buffer-file-name-as-kill
z [0] robi dokładnie to, czego potrzebujesz. Ma również opcję kopiowania samej nazwy katalogu lub tylko nazwy pliku.[0] http://www.emacswiki.org/emacs/download/buffer-extension.el
źródło