Często używam ctrl+cdo kopiowania tekstu z niektórych aplikacji GUI, a następnie wklejania go do emulatora terminala (terminatora), używając menu prawym przyciskiem myszy i wklej. Czasami zapominam, że schowek zawiera kilka linii, które po wklejeniu do bash powodują, że każda linia jest „wykonywana”
Czy istnieje jakieś rozwiązanie, które całkowicie zapobiega wklejaniu wielu wierszy?
bash
command-line
x11
clipboard
terminal-emulator
Martin Vegter
źródło
źródło
sleep 999999
a następnie wklej, jeśli wszystko wygląda dobrze. polecenie uśpienia nie odczytuje wierszy i są one odrzucane po naciśnięciuctrl+c
.bash
będzie obsługiwać wklejanie w nawiasach ,zsh
już za pośrednictwem wtyczki innej firmy .printf '\e[?2004h'
w większości xtermowych emulatorów terminali włącza tryb wklejania z nawiasami kwadratowymi, w którym terminal nawiasuje wklejony tekst, dzięki czemu aplikacje mogą wykryć, gdzie wklejanie się zaczyna i gdzie kończy. xterm obsługuje także inny tryb, w\e[?2005h
którym wszystkie wklejane znaki są poprzedzane^V
(rozumiane przez wiele aplikacji i dyscyplinę tty-line aslitteral-next
).Odpowiedzi:
Ta odpowiedź nie jest najbardziej szczegółowa dla pytania użytkownika. Zobacz moją drugą odpowiedź. Zostawiam to tutaj, ponieważ dotyczy bardziej ogólnego problemu.
Za komentarzach do oryginalnego postu, trzeba (1) emulator terminala, który wspiera nawias wklej i (2) odpowiadające wsparcie dla cokolwiek działa w terminalu, to znaczy
vim
,bash
,zsh
. Emulatory terminali obsługujące wklejanie w nawiasach (lista do aktualizacji na podstawie komentarzy do tego postu):xterm
- od ??gnome-terminal
- od ??putty
- od 0,63 (data wydania 2013-08-06)Aplikacje obsługujące tryb braketingu:
vim
zsh
Bo
bash
StéphaneChazelas przygotował skrypt powłoki, aby ułatwić wykrycie tego trybu i podjąć odpowiednie działania.Bardziej szczegółowa odpowiedź - zapobiegająca odcięciu linii - jest niemożliwa do odpowiedzi bez wiedzy o programie unixowym, który działa po naciśnięciu przycisku wklej.
Menedżer schowka może co trzeba.
źródło
^V
jakoliteral-next
. Ale jak^V
dostać się do strumienia wejściowego aplikacji?bash
readline ją zobaczy (i potraktuje jako dosłownie-następny)). W trybie icanon dyscyplina liniowa tego wewnętrznego urządzenia tty usunie go (pod warunkiem, żelnext
postać^V
), podobnie jak podczas ręcznego wpisywania Ctrl-V X.^V
chyba że użyjeszquoted paste
trybu xterm (włączony przez wysyłanie\e[?2005h
). Żeperl
skrypt może być dostosowany tak, że usuwa wszystkie, ale pierwsza linia w postaci pasty multi-line (choć nie wiarygodnie dla dużych past), ale jak już jest, ponieważ cytuje się przełamane dla readline (jak gdyby wciśnięty Ctrl V Ctrl-J), zapobiega wykonywaniu wierszy (są one po prostu dodawane do bufora edycji i nadal trzeba nacisnąć Enter, aby je wykonać).