2010-02-26 16 views
5

Widziałem tu pytania dotyczące przesuwania kursora z okna na okno za pomocą C-x o i M-- C-x o. W porządku.Okno przełącznika emacs na C-TAB i C-S-TAB

Chcę zmapować to na C-TAB i C-S-TAB.

To właśnie dodałem do moich .emacs:

(global-set-key [C-tab] 'other-window) 
(global-set-key [C-S-tab] '(other-window -1)) 

C-tab działa, ale nie C-S-tab.

Minibuffer mówi mi:

Wrong type argument: commandp, (other-window -1) 

Próbowałem bez nawiasów wokół innych-okna, ale to nie działa.

Podsumowując, nie jestem pewien, jak przekazać opcjonalne argumenty do funkcji w moich .emacs.

Pomoc, proszę?

Edytuj, aby dodać wersję: (emacs 22.3.1 na windows)

Odpowiedz

7
(global-set-key [C-S-tab] 
    (lambda() 
     (interactive) 
     (other-window -1))) 

EDIT: Dodane w (interactive), za Gauthier i Peter Hart.

+0

prawo. ''(other-window -1)' interpretowane jest jako komórka cons i nie można wywoływać komórek cons. –

+0

Przepraszamy, to daje 'Wrong type argument: commandp, (lambda zero (inne okno -1))' (emacs 22.3.1 na windows) – Gauthier

+0

Działa, jeśli dodasz '(interactive)' after 'lambda()' . Edytuj swoją odpowiedź, a ustawię ją jako prawidłową odpowiedź! Byłoby miło, gdyby można było dodać krótkie wyjaśnienie, dlaczego potrzebne jest '(interaktywne)'. – Gauthier

2

Aby rozwinąć na odpowiedź Mateusza nieco, Niedawno napisałem trochę pomocnika makra w sytuacjach tak:

(defmacro global-set-key* (keys &rest body) 
    `(global-set-key ,keys (lambda() (interactive) ,@body)) 

ten sposób mogę pisać takie rzeczy jak:

(global-set-key* [(shift control n)] (next-line) (scroll-up 1)) 
(global-set-key* [(shift control p)] (previous-line) (scroll-down 1)) 
5

jestem na mój telefon komórkowy i nie pamiętam dokładnej sekwencji klawiszy, ale możesz go znaleźć w moim pliku init.el lub w Ch k CS-TAB, więc emacs tel you "< sekwencja klawiszy której szukasz > nie jest związana z niczym" lub coś podobnego. http://pablo.rauzy.name/init.el.html :-)

EDIT: Więc jestem teraz w moim komputerze, oto prosty sposób, aby to zrobić:

(global-set-key [C-tab] 'next-buffer) 
(global-set-key [C-S-iso-lefttab] 'previous-buffer) 
+0

Zauważ różnicę między wyborem następnego bufora i wyborem następnego okna. – Gauthier

+0

Och, moje złe! Ale nadal działa, z '' other-window' zamiast ''next-buffer' i'' (other-window -1) 'zamiast' 'previous-buffer' :-) – p4bl0

+1

To jest to, czego próbowałem (zobacz oryginalny post), ale nie zadziałało. Zobacz rozwiązanie. – Gauthier