Za pomocą kółka przewijania na ekranie GNU

254

Jak skonfigurować ekran GNU, aby kółko przewijania myszy mogło się przewijać w buforze przewijania? Próbowałem o tym napisać w Google, ale większość trafień dotyczyła tego, jak zezwolić aplikacjom na ekranie na używanie kółka przewijania.

JesperE
źródło
JesperE - Czy możesz zmienić wybraną odpowiedź? Byłem zdezorientowany, a komentarze są słuszne, druga odpowiedź jest znacznie lepsza.
Geoff
Obecnie nie używa się ekranu, ale głosy poparcia wydają się wystarczająco przekonujące. :)
JesperE

Odpowiedzi:

359

Wierzę, że możesz po prostu dodać taką linię do ~/.screenrc:

termcapinfo xterm* ti@:te@

Gdzie „xterm *” jest globalnym dopasowaniem twojego obecnego TERM. Aby potwierdzić, że działa, ^ A ^ D, aby odłączyć się od ekranu, a następnie screen -d -rponownie podłączyć, a następnie lskilka razy i spróbować przewinąć do tyłu. Mi to pasuje.


Co to za magia? Cóż, zajrzyjmy na strony podręcznika.

screen(1) mówi:

termcapinfo term terminal-tweaks [window-tweaks]
  [..]
  The first argument specifies which terminal(s) should be affected by this
  definition. You can specify multiple terminal names by separating them with
  `|'s. Use `*' to match all terminals and `vt*' to match all terminals that
  begin with "vt".
  [..]
  Some examples:

      termcap xterm*  LP:hs@

  Informs screen that all terminals that begin with `xterm' have firm
  auto-margins that allow the last position on the screen to be updated (LP),
  but they don't really have a status line (no 'hs' -  append  `@'  to turn
  entries off).  Note that we assume `LP' for all terminal names that start
  with "vt", but only if you don't specify a termcap command for that terminal.

Od termcap(5):

String capabilities
    [..]
    te   End program that uses cursor motion
    ti   Begin program that uses cursor motion
Pistacje
źródło
28
Postępowałem zgodnie z sugestią Pistosa i częściowo działa. Jak opisuje, mogę wprowadzić niektóre polecenia (aby uzyskać wystarczającą moc wyjściową do przewinięcia ekranu), a następnie użyć kółka myszy, aby przewinąć wstecz przez poprzednie linie. W rzeczywistości używam screena za pomocą Konsoli w KDE (w zasadzie xterm z kartami), a pasek przewijania okna Konsoli działa w ten sam sposób. Ale jest problem: jeśli przełączasz się między oknami ekranu (^ An, ^ Ap), bufor przewijania zostaje zawalony. Zawartość każdego okna, w które się przełączysz, zostanie po prostu „wciągnięta” do bufora przewijania. To naprawdę zmniejsza to.
Ryan B. Lynch
22
Ale to przewija się w historii poleceń. Chcę przewijać bufor wyjściowy.
JesperE
15
@JesperE: Doświadczyłem również przewijania historii poleceń (używam terminala GNOME Ubuntu). Naprawiłem to, przechodząc do opcji Edycja -> Preferencje profilu -> Przewijanie i odznaczając opcję „Użyj klawiszy, aby przewijać na innym ekranie”. Zauważ, że wciąż potrzebowałem użyć poprawki Pistos.
Michael Krebs,
2
Oprócz pracy w OS X Lion działa to również w Putty, iSSH i Prompt (przez Panic). Ta linia powinna być obecna we wszystkich plikach .screenrc!
funroll
20
Umożliwia to przewijanie w terminalu bez przewijania w sesji ekranowej. To znaczy, jeśli pracujesz z podzielonymi regionami lub przełączasz okno, nie będziesz mógł przewijać w tym regionie, a zamiast tego przewiniesz wyjście terminala i zobaczysz wyjście tak, jak było przed podzieleniem regionu lub zmianą okna .
g_daniel
69

Na ekranie musisz najpierw przejść do „trybu przewijania” (lub „trybu kopiowania”), aby móc przewijać w buforze przewijania: kombinacja klawiszy Ctrl- a Esclub Ctrl- a Ctrl- [. Następnie możesz przewijać historię za pomocą klawiszy strzałek w górę i w dół (lub Ctrl- b, Ctrl-, faby przenieść stronę).

W tym trybie kółko myszy powinno również działać, jeśli działa w innych aplikacjach. „Tryb przewijania” kończy się za pomocą Esc.

Jeśli chodzi o przewijanie bufora przewijania bez uprzedniego przejścia do trybu przewijania, prawdopodobnie nie jest to możliwe bez modyfikacji ekranu. Nigdy nie słyszałem o sposobie dostępu do bufora przewijania oprócz trybu przewijania.

Śleske
źródło
21
Tak, wiem o trybie przewijania. Miałem nadzieję, że nie będę musiał ręcznie włączać trybu przewijania, aby korzystać z myszy. Dzięki.
JesperE
4
„Tryb przewijania” jest raczej nieoficjalnym terminem IMHO. :) Ctrl + Esc wejdzie w tryb kopiowania ; ten tryb zawsze był tak nazywany, ponieważ jego głównym celem jest umożliwienie kopiowania tekstu tam iz powrotem. Możliwość przewijania kółkiem myszy w trybie kopiowania (nb. Nie działa dla mnie) powinna raczej być postrzegana jako rodzaj „dodatkowej sztuczki”, ale nie jako główny cel tego trybu.
składnia błąd
1
@syntaxerror: Cóż, doktorzy nazywają to „trybem kopiowania / przewijania” i wspominają o „buforze przewijania” ( gnu.org/software/screen/manual/screen.html#Copy-and-Paste ), więc myślę, że „ obie są w porządku :-). W każdym razie do mojej odpowiedzi dodałem „tryb kopiowania”.
sleske,
Wspaniały! Też chciałem to zrobić, ale zanim zacznę wprowadzać takie stare odpowiedzi, jestem znany z tego, że najpierw pytam (chociaż zdaję sobie sprawę, że reguły SO / SE tego nie zalecają; ale o to chodzi z niepisanymi regułami).
składniaerror
To powinna być oficjalna odpowiedź. Dziękuję :)
Linh
24

Doskonały artykuł, o którym wspomina Jon Z, nie jest już dostępny, ale udało mi się wyłowić wersję tekstową z pamięci podręcznej Google. Zapisuję go tutaj na wypadek, gdyby Google również to porzucił. Oryginalny post został napisany przez Mikaela Ståldala, więc kredyt w miejscu, w którym należy się kredyt.

-

Jak używać kółka myszy w ekranie GNU

GNU Screen obsługuje przewijanie, ale domyślnie musisz używać niewygodnych klawiszy, aby z niego korzystać. Chciałbym móc przewijać Shift-PageUp, Shift-PageDown i kółko myszy, tak jak w Xterm.

Skonfigurowanie Screen nie było łatwe i wymaga współpracy z emulatorem terminala. Ale w końcu udało mi się znaleźć rozwiązanie, które działa całkiem dobrze. Dodaj to do pliku ~ / .Xresources (musisz się wylogować, aby to zadziałało):

XTerm*saveLines: 0
XTerm*vt100.translations: #override \n\
  Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  <Btn4Down>: string(0x1b) string("[5S") \n\
  Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  <Btn5Down>: string(0x1b) string("[5T") \n\
  Shift <KeyPress> Prior: string(0x1b) string("[25S") \n\
  Shift <KeyPress> Next: string(0x1b) string("[25T") \n

Następnie dodaj to do pliku ~ / .screenrc:

defscrollback 1000

# Scroll up
bindkey -d "^[[5S" eval copy "stuff 5\025"
bindkey -m "^[[5S" stuff 5\025

# Scroll down
bindkey -d "^[[5T" eval copy "stuff 5\004"
bindkey -m "^[[5T" stuff 5\004

# Scroll up more
bindkey -d "^[[25S" eval copy "stuff \025"
bindkey -m "^[[25S" stuff \025

# Scroll down more
bindkey -d "^[[25T" eval copy "stuff \004"
bindkey -m "^[[25T" stuff \004

Działa to w Xterm. Nie jestem pewien, czy to działa w innych emulatorach terminali.

Pamiętaj, że wyłącza to normalną obsługę przewijania w Xterm, przewijanie będzie możliwe tylko podczas korzystania z Screen. Możesz uruchomić Xterm w ten sposób, aby zawsze używać Screen:

xterm -e screen
Tommi R.
źródło
11

Aby użyć kółka przewijania w VIM-ie na ekranie GNU:

[.vimrc]

set mouse=a             " hold shift to copy xterm
set ttymouse=xterm2     " necessary for gnu screen & mouse
Edench
źródło
Niesamowite, to w połączeniu z trikiem screenrc sprawiło, że mój dzień był lepszy, ponieważ używam awesomewm, a terminale to moje życie
Fotios
7

Naciśnij Ctrl+, aa następnie[

Pasek tytułowy twojego terminala powinien teraz mówić tryb kopiowania.

Teraz klawisze strzałek i kółko myszy powinny działać zgodnie z oczekiwaniami.

Aby wrócić do normalnego trybu, naciśnij klawisz Esc lub naciśnij kilka razy klawisz Enter.

Peter Crotty
źródło
5

Działa także ustawienie TERMzmiennej na vt100zamiast xtermprzed uruchomieniem ekranu.
Używam tego od dłuższego czasu, działa jak urok.

Dodaj to do .bashrc:

# make scrollbar / wheel scrolling work when running screen in gnome-terminal (or other)
if [ "$TERM" = "xterm" ]; then
  export TERM=vt100
fi

-

Dla porównania, mój .screenrcma to (nie potrzebne dla tego AFAIK):

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
lemonsqueeze
źródło
Ustawienie zmiennej środowiskowej TERM zgodnie z opisem (przed uruchomieniem ekranu) działało dla mnie. To tak proste, jak wpisanie „export TERM = vt100”. Wielkie dzięki. PS: Jestem na komputerze Mac, ssh do Linux-a i tam uruchamiam ekran.
Daniel K.
Jak wspomniano powyżej, nie działa to zgodnie z przeznaczeniem. Tak, możesz przewijać, jednak bufor przewijania jest zastępowany podczas zmiany systemu Windows.
Halsafar,
bardzo niedoceniane rozwiązanie
MolbOrg
4

Następujące działały dla mnie zarówno w Cygwin, jak i Putty: Edytuj .screenrc i dodaj

terminfo xterm* ti=:te=
Torbjör Weiland
źródło
3

Jeśli powyższe odpowiedzi nie działają, upewnij się, że nie masz podpisu ani opcji alwayslastline w twoim .screenrc. Jeśli je masz, to nie zadziała:

termcapinfo xterm* ti@:te@

Jeśli potrzebujesz tych informacji, możesz spróbować ustawić je w tytule terminala (za pomocą termcapinfo)

nachocab
źródło
0

Rozwiązanie w przypadku korzystania z „Ubuntu 16.04.2 LTS” jest następujące:

za). Zaktualizuj $ HOME / .screenrc zgodnie z wcześniejszymi odpowiedziami:

termcapinfo xterm* ti@:te@

b). Użyj „Ustawienia”. „Preferowane aplikacje”, aby zmienić domyślny terminal na xterm, wybierając „X Terminal” z rozwijanej listy.

Niektóre zbędne notatki

  • Żaden z innych terminali, w tym instalacja „lxterminal”, nie działał dla mnie, nawet gdy zmieniłem linię termcapinfo na „*” zamiast „xterm *”.

  • Klikając przycisk menu w lewym górnym rogu ekranu, możesz wyświetlić okno dialogowe Ustawienia, używając trzeciej ikony z prawego dolnego rogu.

Malcolm Boekhoff
źródło