Pytanie w sprawie org-mode, emacs, copy-paste – emacs - zapisz bieżącą listę buforów do pliku tekstowego

9

Często muszę dostać prostą kopię tekstową moich aktualnie otwartych plików. Powody są zazwyczaj:

Chcę wysłać listę do kolegiChcę dokumentować wszystko, nad czym pracuję (zwykle w dokumencie org)Chcę działać na jednym z moich aktualnie otwartych plików, na powłoce. Muszę do tego skopiować i wkleić nazwę ścieżki.

Faktem jest, że zwyklebuffer-menu lublist-buffers zapewniają wygodne menu do nawigacji po otwartych buforach, ale są bardzo niewygodne, aby skopiować i wkleić do terminala nazwy otwartych plików lub wykonać dowolną z akcji wymienionych powyżej. Na przykład: nie mogę kliknąć dwukrotnie w wierszu, aby wybrać pełną nazwę ścieżki, i nie mogę użyćkill/yank sekwencja emacsa do kopiowania wokół nazwy ścieżki.

Podsumowanie: Chciałbym sposób na eksport do pliku tekstowego (lub do nowego bufora) listy otwartych plików, bez innych danych; brak rozmiaru pliku, trybu ani innych metadanych emacsa.

Czy jest do tego polecenie? Dodatkowy pakiet, który mogę zainstalować?

EDYTOWAĆ

Dodanie rozwiązania przez Treya Jacksona, zmodyfikowane w celu dostarczenia informacji zwrotnych o tym, co zostało zrobione:

<code>(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n"))
  (message "List of files copied to kill ring"))
</code>

Twoja odpowiedź

3   odpowiedź
6

Możesz zmienić tryb swojego*Buffer List* bufor. Domyślnie będzie w trybieBuffer Menu, ale zmieniając go natext-mode lubfundamental-mode usunie wszystkie specjalne zachowania pozwalające na wycinanie i wklejanie z niego tak jak zwykłego bufora. Metadane można łatwo odciąćdelete-rectangle.

Alternatywnie możesz programowo uzyskać dostęp do listy buforów za pomocą elisp:

<code>(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
</code>
Chociaż byłoby to praktyczne rozwiązanie, oznacza to zbyt wiele naciśnięć klawiszy, aby było to praktyczne. Używam tego bardzo często. dangonfast
9

To polecenie wykona zadanie za Ciebie:

<code>(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n")))
</code>
To jest to! Mogę łatwo wkleić pierścień zabijania wszędzie tam, gdzie pracuję, a stamtąd do powłoki, jeśli zajdzie taka potrzeba. dangonfast
1

Z pewnością powinieneś móc kopiować i szarpać z listy buforów.

na przykład skopiuj wszystko zC-xhM-w a następnie wciągnij nowy bufor do edycji.

Powiązane pytania