Definiowanie okna wskazywanego przez „inne okno”

10

W emacach, częściej niż lubię, kończę na 4 lub więcej oknach.

Użyję tego przykładu:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Wiele funkcji może wykonywać działania w other-window(zwykle to samo okno wskazywane przez C-x o). Szczególnie przydatne są scroll-other-window. Jednak po otwarciu 4 lub więcej okien other windowjest mało prawdopodobne, żebym chciał.

Czy istnieje prosty sposób na zarządzanie zestawem other-windowbez zmiany układu okna / bufora? Oczywiście, jest to wykonalne przy użyciu pęczek C-x 4 bi C-bale nie chcę, aby zmienić układ. Na przykład:

  • jeśli edytujesz w oknie 4 na powyższym obrazku, czy istnieje prosty sposób C-M-vna przewijanie okna 1 ?
  • Albo po prostu załóżmy, że fokus znajduje się w oknie 3 , jak ustawić other-windowwskazywanie okna 2 ?
Lompik
źródło

Odpowiedzi:

7

Jeśli poprawnie odczytam twoje pytanie, jesteś zainteresowany głównie szybkim działaniem na buforach wyświetlanych w innych oknach (zachowując obecny układ okna).

Zmiana okna, które other-windowwskazuje, jest jednym ze sposobów osiągnięcia tego, ale chciałbym zasugerować alternatywny przepływ pracy:

W przeciwieństwie do other-window, ace-windowpozwala szybko przejść do określonego okna : Podczas połączenia ace-windowwyświetla unikalny numer w każdym oknie. Aby przejść do określonego okna, wystarczy wpisać odpowiedni numer. Jeśli masz tylko dwa okna, umieszcza punkt w drugim oknie bez pytania o wpisanie liczby. Ten screencast pokazuje przejście do innego okna, przewijanie go i powrót do oryginalnego okna:

Demonstracja okna asa

Jeśli wiążą ace-windowsię C-x o, nie trzeba zapamiętywać dodatkowego wiązania klucz i będzie czuć się jak używasz doładowany wersję other-window.

Ponadto, jeśli naciśniesz na klawiaturze i / lub wolisz nie przesuwać palców zbyt daleko od rzędu głównego, możesz poinstruować system ace-window„numerowania” okien za pomocą liter zamiast cyfr (patrz poniżej).

ace-windowjest dostępny w MELPA . Po zainstalowaniu go za pomocą M-x package-install RET ace-window RET, możesz umieścić następujące pliki w pliku init, aby skonfigurować go zgodnie z powyższym opisem:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))
itsjeyd
źródło
Dzięki za wersję demonstracyjną, widziałem ten pakiet na innych stronach i zastanawiałem się, jak to działa. Właściwie mogę łatwo zmienić okno, ponieważ zobowiązałem się M-1 M-2 ..do wybrania okna o numerze 1, 2 za pomocą window-numberpakietu
Lompik
1

Z krótkiej recenzji źródła other-windowwygląda na to, że faktycznie zależy od okna zwróconego przez next-window, które jest zdefiniowane w c. Niestety scroll-other-windowjest również zdefiniowane w c i prawdopodobnie wywołuje tam następne okno. Nie sądzę, że łatwo to zmienić.

Wydaje się jednak, że switch-to-buffer-other-windowjest w użyciu pop-to-buffer, więc możesz mieć trochę szczęścia.

zdeterminowany
źródło
1

Nie ma łatwego sposobu manipulowania listą okien, więc wynik zwracany przez other-windowjest mniej więcej stały. Nie jest to złe samo w sobie, ponieważ pozwala zachować spójność podczas nawigacji w systemie Windows. Jeśli chodzi o dwa scenariusze, które opisałeś, za pomocą niektórych elisp lub makr możesz dopasować swój przepływ pracy.

jeśli edytujesz w oknie 4 na powyższym obrazku, czy istnieje prosty sposób, aby CMv przewinął okno 1?

Możesz użyć prostego fragmentu, takiego jak poniższy, aby użyć other-windowodpowiedniej liczby razy, przewinąć w dół i wrócić do pierwotnego okna.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Możesz podać argument prefiksu, aby określić, które okno ma być przewijane. Jak można wywnioskować, używa wbudowanego mechanizmu, other-windowaby pominąć argliczbę okien przed przewijaniem. save-selected-window, Zapewnia ostrość powróci do pierwotnego okna. Dokumentacja other-windowmoże zawierać więcej informacji na temat modyfikowania tego fragmentu kodu, aby pasował do Twojego zachowania.

Albo po prostu załóżmy, że fokus znajduje się w oknie 3, jak ustawić other-windowwskazywanie okna 2?

Ponownie użyj znaku „ prefix-argjak” C-3 C-x opodczas połączenia other-window. Rzeczywista liczba będzie się różnić w zależności od kolejności ich podziału i nie zmieni się, dopóki nie utworzysz nowych okien. Alternatywnie możesz użyć pakietów wygody, takich jak window-numberlub ace-windowz MELPA, aby szybko przełączać wybrane okna.

Vamsi
źródło
tak, nie ma łatwego sposobu manipulowania listą okien. Trudno mi używać prefiksów.
Wydaje się,
Do tego służą makra / skróty klawiaturowe. Jeśli jest to regularna część twojego przepływu pracy, możesz łatwo zdefiniować skrót klawiszowy oparty na mapie prefiksu, np. <f7> nAby przewinąć n-te okno. Utwórz tymczasowe powiązania jednego klawisza za pomocą makr klawiatury.
Vamsi,