Czasami przypadkowo zabijam bufor i chcę go ponownie otworzyć, tak jak CSt, aby cofnąć zamkniętą kartę w Firefoksie, ale nie ma wbudowanego polecenia w Emacsie, defun undo-kill-buffer
w http://www.emacswiki.org/RecentFiles :
(defun undo-kill-buffer (arg)
"Re-open the last buffer killed. With ARG, re-open the nth buffer."
(interactive "p")
(let ((recently-killed-list (copy-sequence recentf-list))
(buffer-files-list
(delq nil (mapcar (lambda (buf)
(when (buffer-file-name buf)
(expand-file-name (buffer-file-name buf)))) (buffer-list)))))
(mapc
(lambda (buf-file)
(setq recently-killed-list
(delq buf-file recently-killed-list)))
buffer-files-list)
(find-file
(if arg (nth arg recently-killed-list)
(car recently-killed-list)))))
w ogóle nie działa. Jeśli znasz elisp, jak rozwiązać ten problem?
Jeśli może wyświetlić listę zamkniętych buforów i je, mogę wybrać jeden z nich do ponownego otwarcia, byłoby lepiej.
buffers
undo
kill-buffer
CodyChan
źródło
źródło
Odpowiedzi:
Oto kolejna prosta alternatywa, która nie wymaga
recentf
. Podłączenie pierwszej funkcjikill-buffer-hook
spowoduje wypchnięcie nazwy pliku związanej z buforem na listę. (Pamiętaj, że jeśli zabijesz bufor, który nie odwiedza pliku, zniknie na dobre.) Ta ostatnia funkcja usuwa ten plik z listy i odwiedza go:Zauważ, że
killed-file-list
jest to lista, więc możesz na przykład napisać bardziej skomplikowaną funkcję, aby cyklicznie przewijać tę listę, niż prostą opisaną tutaj: to od ciebie zależy, ile chcesz z nią zrobić.EDYCJA: przepraszam, brakowało mi ostatniego przepisu w twoim Q na temat listy plików do wyboru. Poniższa funkcja jest nieco bardziej wyszukana niż powyższa wersja, ponieważ
completing-read
umożliwia określenie, który z zabitych plików chcesz. Jeśli używasz czegoś podobnegoido
, pozwoli Ci to na przeglądanie wszystkich plików, które zabiłeś w bieżącej sesji, domyślnie do najnowszej. Pamiętaj, że zakłada, że już wymagałeścl-lib
:źródło
Chciałbym cię zapytać: „Czy naprawdę chcesz to zabić?”. Rzeczywiście zabijanie bufora jest tak powszechną rzeczą w świecie Emacsa, ale po zabiciu bufor zniknął, a jak pokazuje twoje pytanie, nie zawsze jest to pożądane.
Możemy jednak wybrać inny sposób, abyś nigdy nie musiał przywracać zabitego bufora - po prostu wolisz grzebać niż zabijać. Spójrz na pakiet Kill or Bury Alive , jest on dostępny za pośrednictwem MELPA .
Z opisu paczki:
źródło
Korzystam z tego rozwiązania z tego postu SO i działa dobrze.
Rozwiązanie jest eleganckie, ale nie idealne; przechowuje listę aktywnych buforów i zwraca pierwszy plik z ostatniej listy, który nie należy do listy aktywnych buforów.
źródło
Musisz włączyć
recentf-mode
. Aby to zrobić, biegnijM-x recentf-mode
. Następnie funkcja może nie działać, dopóki nie otworzysz lub zabijesz niektórych nowych buforów; Nie sądzę, że sięrecentf-list
wypełniłeś.Jeśli chcesz, aby ta funkcja była włączona podczas uruchamiania Emacsa, umieść to w pliku init:
Następnie możesz umieścić tam
defun
znalezione i powiązać je z kluczem, jeśli chcesz.Jednym minusem tego trybu wydaje się być to, że tryb niedawny jest zbudowany do śledzenia
opened
plików, a nie zabitych. Tak więc, jeśli uruchomisz tę funkcję dwukrotnie, nie otworzy ona ponownie twojego ostatniego zabitego pliku.źródło
(recentf-mode 1)
z wyraźnym argumentem, aby ktoś ponownie oceniający swój plik init pod Emacs 23 nie skończył ponownie wyłączać tego trybu.ErgoEmacs ma funkcję,
close-current-buffer
która w szczególności prowadzi listę ostatnio zamkniętych buforów:Korzystając z nich, można ponownie otworzyć tę sesję za pomocą bufora zamkniętego
źródło
Cóż, nie jestem weteranem Emacsa i być może stało się to możliwe tylko w najnowszych wersjach. Wiem, że przyjadę kilka lat później, ale może to może być pomocne dla innych, ponieważ moje poszukiwania mnie tu doprowadziły.
Korzystam z Emacsa v.2.2.1,
recentf
jest już dostępny tutaj i ma gotową funkcję, która robi to, czego potrzebujesz. Aktywowałem go już w przeszłości na starszych wersjach, więc.emacs
mam:I to działało idealnie dla mnie. Oczywiście zmień skrót na to, co bardziej ci się podoba.
źródło