2011-06-23 13 views
16

To doprowadzało mnie do szału przez długi czas; Zastanawiam się, czy istnieje sposób, aby to naprawić? Mam nadzieję, że potrafię dobrze opisać sytuację.Automatyczne zamykanie bufora tabulacji w trybie powłoki emacs?

Dla uproszczenia, powiedzmy Mam następującą strukturę katalogów: ~ jer/Díra i ~ jer/dirB

ciągu powłoki w emacs, zaczynam się w moim katalogu najwyższego poziomu (~ jer) , wpisz "cd dir" i naciśnij kartę.

Moje okno dzieli się na 2, a mam bufor * Completions *. To jest fajne; Widzę, że moje wybory to "dirA" i "dirB", wpisuję "A" (więc moje pełne polecenie to "cd dirA") i wciskam enter, ale bufor * Completions * pozostaje otwarty i muszę go ręcznie zamknąć (ogólnie z "Cx 1", ponieważ jestem w buforze powłoki, który chcę zapisać, ale jeśli mam już podzielone okno, jest to jeszcze bardziej irytujące, ponieważ bufor * Completions * zajmuje miejsce drugiego, który był już tam, i muszę przejść do tego i uderzyć Cx k, aby ręcznie go zabić).

Tak więc moje pytanie: czy istnieje sposób na to, aby komplementy * umierały automatycznie po ukończeniu dowodzenia? W powyższym przykładzie, zaraz po naciśnięciu klawisza "cd DirA", chciałbym, aby bufor został zabity.

Dzięki, i mam nadzieję, że to ma sens. Uwaga, nie sądzę, że jest to duplikat Is there any way to automatically close filename completetion buffers in Emacs?, bo to temat korzystania Find-pliku (iw tym przypadku * Realizacje * bufor robi blisko

wyszukiwania
+1

Bufor powinien automatycznie zamknąć się po opuszczeniu "obszaru uzupełniania" (fragmentu tekstu, który wypełniałeś). Przynajmniej jeśli używasz najnowszej wersji Emotsa. Jeśli nadal widzisz ten problem w Emacs-24, zgłoś go za pośrednictwem 'M-x report-emacs-bug' z wystarczającą ilością szczegółów, aby odtworzyć problem. – Stefan

Odpowiedz

8

Myślę, że właśnie tego chcesz.
Funkcja usuwania-okna-bufora-okna będzie wykonywana za każdym razem, gdy wprowadzisz polecenie. Znajduje wszystkie bieżące okna i pobiera z niego bufor. Sprawdź, czy nazwa bufora to "* Completions *", bufor, który doprowadza Cię do szaleństwa, jeśli tak, zabij bufor i usuń odpowiednie okno.
Na koniec przekazuje ciąg wyjściowy do następnej funkcji hook-preoutput-filter-hook.
Dlaczego występuje argument wyjściowy? Zobacz dokument funkcji comint-preoutput-filter-function. Lepiej to wyjaśnić.

(defun delete-completion-window-buffer (&optional output)                 
    (interactive)                         
    (dolist (win (window-list))                     
    (when (string= (buffer-name (window-buffer win)) "*Completions*")           
     (delete-window win)                      
     (kill-buffer "*Completions*")))                   
    output)                          

(add-hook 'comint-preoutput-filter-functions 'delete-completion-window-buffer) 

Ale acturelly The nie robi bufor ukończenie przeszkadza mi wiele. Problem polega na tym, że polecenie "clear" nie działa dobrze. Aby rozwiązać twój problem, przechodzę w tryb powłoki, nic tam nie ma.
Ale mam rozwiązanie mojego problemu EmacsWiki.

(defun clear-shell()                       
    (interactive)                         
    (let ((comint-buffer-maximum-size 0))                   
    (comint-truncate-buffer)))                     

(define-key shell-mode-map (kbd "C-l") 'clear-shell)               

Wiążę go z Ctrl-L, normalnym wiązaniem terminala.
Niezły kod. Mam nadzieję że ci się spodoba!

+0

Dziękuję, dziękuję, dziękuję! Jak dotąd działa to doskonale. – Jer

+0

@Jer Nie ma za co! :) –

0

eshell-mode. Realizacje bufor zostanie zamknięta po trafieniu miejsca lub komenda jest zakończona.

Powiązane problemy