Ini adalah pintasan keyboard pengeditan teks standar yang saya gunakan secara konstan setiap kali mengedit teks di, secara harfiah, aplikasi linux apa pun selain emulator terminal:
- panah kiri + kanan untuk bergerak ke kiri + kanan
- ctrl + panah untuk memindahkan seluruh kata
- home / end untuk pindah ke start / end of line
- ctrl + c / ctrl + v untuk menyalin / menempel [beberapa terminal dapat menggunakan shift-ctrl-C / shift-ctrl-V; ini adalah pengganti yang bagus]
- geser + panah untuk menyorot teks
- menggeser + ctrl + panah untuk menyorot seluruh kata
Saya belum pernah menemukan kombinasi emulator shell plus terminal yang memungkinkan dua item terakhir dalam daftar ini, dan itu membuat saya gila. Jelas emulator terminal mendukung penyorotan (mouse dapat melakukannya), dan mereka mendukung penggunaan ctrl dan tombol shift sebagai pengubah (mereka dapat digunakan untuk menggerakkan kursor seluruh kata, dan untuk huruf besar, masing-masing; [edit:] mereka bahkan dapat digunakan bersama untuk menyalin / menempel dengan shift-ctrl-C dan shift-ctrl-V), jadi apa masalahnya mencegah fungsi ini? Saya punya beberapa pertanyaan:
- Apakah ini masalah dengan emulator terminal saya, atau dengan shell saya (bash, meskipun saya bersedia untuk berubah)?
- Mengapa emulator terminal / cangkang tidak sesuai dengan standar universal ini?
- Jika ada alasan aktual, apakah ini kuno dan usang, atau apakah masih relevan dengan sejumlah besar pengguna desktop linux?
- Apakah ada solusi?
- Apakah ada beberapa program tidak jelas yang dapat saya gunakan yang mendukung ini?
- Apakah layak untuk memodifikasi sumber, katakanlah, terminal gnome untuk mendukung ini?
Saya tahu teks dapat disalin / ditempelkan dengan mouse, bukan itu yang saya tanyakan. Saya bertanya mengapa saya tidak dapat melakukan hal-hal ini dengan keyboard di terminal emulator.
sumber
Jawaban:
Saya pikir itu akan sangat berguna jika saya mengambil sepotong ini sekaligus. Masalah umumnya adalah: untuk siapa pers utama itu ditekan? Terminal, atau program yang berjalan di dalam terminal?
Sebagai contoh, "layar", yang merupakan terminal, menggunakan Ctrl+ Asebagai awalan untuk perintahnya, untuk membedakannya dari hal-hal yang terjadi pada program yang sedang berjalan itu sendiri. (Dan menyediakan cara untuk mengirim Ctrl+ A.)
gnome-terminal
memiliki beberapa kunci yang ditangkapnya untuk melakukan berbagai hal, termasuk beberapa yang Anda tanyakan.Juga perlu diingat bahwa "penyorotan" terminal terpisah dari posisi kursor terminal . Beberapa terminal tidak memiliki kemampuan untuk menyorot sama sekali.
Sekarang, ambil kombinasi tombol ini sekaligus:
Pindahkan apa yang kiri dan kanan? Bash dapat dikonfigurasi untuk melakukan ini, dan biasanya secara default. Biasanya, ini memindahkan posisi kursor.
Pertama: apakah salin / tempel masuk akal? Jika Anda berada di VT, Anda tidak benar-benar memiliki clipboard, terutama jika X tidak berjalan.
Beberapa terminal dapat menyalin teks di output, dan beberapa juga akan "menempel" dengan mensimulasikan Anda mengetik konten clipboard. Ctrl+ Shift+ V, misalnya, ditempelkan
gnome-terminal
, yang mungkin membantu. (Dan Ctrl+ Shift+ Cadalah copy.) Seperti dibahas sebelumnya, masalah besar dengan Ctrl+ Cdan Ctrl+ Vadalah mereka tumpang tindih dengan perintah terminal / program umum. ( Ctrl+ Cmengirim interupsi (SIGINT) dan Ctrl+ Vadalah kata demi kata.)Beberapa terminal juga mendukung dua mode penyalinan data: "salin saja" yang lebih normal, dan apa yang dikenal sebagai "blok pilih" atau "blok salin". (Tahan Ctrl, lalu seret selagi masuk
gnome-terminal
misalnya.)Selain itu,
xsel -b
dapat digunakan untuk menyalurkan konten clipboard di sekitar. Tergantung pada situasi yang pasti apakahxsel
versi tempel terminal lebih berguna. Lihatman xsel
.Sorotan terminal Anda (jika memiliki kemampuan ini) terpisah dari posisi kursor. Sekali lagi, kurangnya kombo kunci yang tersedia mungkin merupakan faktor. Perlu diingat bahwa sorotan memiliki dua posisi: mulai dan berakhir, atau sudut kiri atas dan kanan bawah. Bagaimana Anda mengatur keduanya?
Akhirnya, perhatikan bahwa banyak terminal GUI, mengklik dua kali kata akan menyorotnya. (Dan di X, salin ke pemilihan utama.)
screen
, sebagai contoh, memiliki tombol untuk beralih ke mode untuk bergerak di sekitar buffer (output sebelumnya) dan menyalin / menempel.Saya pikir jika Anda menggunakan cukup
xsel
dan pemilihan utama, Anda akan menemukan operasi clipboard cukup langka dan cukup kompleks untuk pantas menggunakan mouse.sumber
gnome-terminal
akan memiliki masalah serupa: mereka mungkin tidak mengimplementasikannya karena itu bukan sesuatu yang Anda lakukan. Ingatlah bahwa shell bukan satu-satunya program yang berjalan: program apa pun dapat berjalan, dan ia ingin menggunakan urutan kunci apa pun yang mungkin Anda gunakan untuk menyalin / menempel untuk tujuan itu sendiri. Layar memiliki cara untuk mengirim kunci yang ditimpa, dan gnome-terminal mencoba untuk tidak menginjak jari kaki.Saya bukan ahli emulator terminal tapi ...
aplikasi seperti bash (readline) yang berjalan ke terminal emulator tidak tahu apa-apa tentang sistem X windows yang sedang berjalan dan jendela X yang ada di dalamnya, mereka tahu stdin dan stdout pada perangkat terminal (ttyS / ttyUSB / tty / pts di linux).
Masalahnya bukan menampilkan beberapa teks yang disorot tetapi bagaimana memberi tahu aplikasi X-window (emulator terminal) bahwa teks telah dipilih, melalui perangkat terminal ini.
Saya kira aplikasi terminal X membuka salah satu perangkat di input dan output dan kemudian menerjemahkan peristiwa kunci X untuk benar output (dari sisi X) input (dari sisi bash). Demikian pula sebaliknya aliran keluaran bash ke terminal X sebagai input , di sini terminal X memproses input ini untuk memindahkan kursor, mengisi backround dengan beberapa warna, sesuai dengan output aplikasi bash.
Untuk pengetahuan saya kode pelarian dapat digunakan untuk mengontrol perilaku khusus, seperti menghapus, mengisi latar belakang, memindahkan kursor, dan mungkin beberapa kode pelarian khusus dapat ditambahkan untuk memberi tahu terminal X bahwa teks dari baris, col ke baris, col telah dipilih, hanya sebuah contoh, mungkin sebagai gantinya teks yang dipilih hanya dapat dikembalikan (detail implementasi).
Saya kira tidak menjadi definisi standar Anda harus menambal setiap aplikasi yang Anda ingin mendukungnya untuk mengetahui tentang kombinasi tombol yang telah ditekan dan menampilkan kode escape yang sesuai, readline jika Anda menginginkannya di bash, emulator terminal X aktif sisi lain untuk memproses dengan benar kode pelarian (dan akhirnya mengirim informasi ke clipboard). Mungkin mengimplementasikan ini sebagai kemampuan terminal akan menyelamatkan Anda dari menambal setiap aplikasi. Saya harap (dan tebak) driver perangkat terminal di kernel ingin tahu sesedikit mungkin tentang kode melarikan diri, jadi jika Anda beruntung patch tidak diperlukan.
Terminal X menggambar output, sehingga dengan mudah tahu, ketika Anda menggunakan mouse, teks / karakter apa yang Anda pilih.
Widget teks grafis mengetahui segala hal tentang jendela X-nya sehingga mengapa sangat mudah untuk menerapkan pilih & salin.
EDIT
Di sini tambalan urxvt-9.16-image-display ini bisa menjadi titik awal yang baik untuk memahami apa yang diperlukan untuk mendukung kode pelarian baru. http://lists.schmorp.de/pipermail/rxvt-unicode/2013q1/001736.html
sumber
Jawaban yang diberikan adalah penjelasan yang baik mengapa hal ini sulit dilakukan. Ini adalah sesuatu yang dapat Anda lakukan di gnome-terminal untuk mengatur ctrl-cdan ctrl-vmenyalin dan menempel, sembari memutar kunci lain dalam disiplin terminal dengan
stty
mengirimSIGINT
dan menyisipkan karakter kata demi kata. Ini bukan solusi lengkap karena beberapa program menonaktifkan disiplin terminal, dan Anda tidak akan dapat mengirimnya '^ C' dan '^ V'. Info lebih lanjut di sini .Dalam skrip startup shell Anda (mis
~/.bashrc
.~/.zshrc
,~/.rcrc
), LakukanKemudian di gnome-terminal Edit> Preferences> Shortcuts Anda dapat mengikat Copy dan Paste ke ctrl-c dan ctrl-v. Perhatikan bahwa terminal akan mendapatkan peristiwa penting sebelum sesuatu dikirim ke perangkat terminal, jadi sejak saat itu Anda tidak dapat mengirim '^ C' dan '^ V' ke proses apa pun yang berjalan di terminal.
Saya hanya melakukan ini dan saya akan melihat bagaimana kelanjutannya, dan masalah apa yang menyebabkannya. Saya melakukan stty secara kondisional untuk menerapkannya hanya ketika saya menjalankan X.
sumber
Seperti yang disebutkan Thanatos, ada perbedaan yang harus dibuat antara emulator terminal (berjalan di X Windows atau Wayland) dan program yang berjalan di dalam terminal (sebut saja "shell", meskipun mungkin tidak); dua hal ini terisolasi satu sama lain (lihat detail teknis ).
Item pertama dalam daftar Anda (tombol panah, Rumah / Akhir, dll.) Ditangani langsung oleh program di dalam terminal, sehingga posisi kursor dikendalikan oleh program di dalam terminal.
Cara pintas salin dan tempel (Ctrl + Shift + C dan Ctrl + Shift + V), di sisi lain, ditangani oleh terminal emulator, yang memahami mouse (sehingga Anda dapat memilih teks dengan mouse), ia tahu apa itu pada layar (sehingga dapat menyalin), dan dapat mengirim penekanan tombol ke program di dalamnya (sehingga dapat menempel).
Untuk mendukung Shift + Kiri dan Shift + Kanan, baik emulator terminal atau shell harus menangani keystroke. Bagaimanapun kita memiliki masalah:
xclip
). Dan sejauh yang saya tahu, jika shell mendukung pemilihan teks, Linux tidak mendefinisikan mekanisme apa pun untuk memberi tahu emulator terminal tentang apa yang dipilih.~ $ ls -l
dan emulator terminal tidak menyadari bahwa hanyals -l
bagian yang menjadi milik pengguna.Tidak sulit membayangkan emulator terminal yang mendukung seleksi dengan Shift + Arrows, tapi saya kira itu harus menyembunyikan kursor shell dan memperkenalkan "kursor palsu" sendiri yang ada sementara untuk membantu Anda memilih sesuatu, dan kemudian Anda dapat menekan Ctrl + C / Ctrl + Shift + C / Ctrl + Ins untuk menyalin (atau Esc untuk membatalkan) dan menunjukkan kursor nyata sekali lagi. Ini tidak akan memiliki semua kemampuan pilihan normal - tentu saja memotong dan menghapus tidak akan ada.
sumber
Ini adalah binding keyboard CUA yang Anda uraikan, standar dari IBM pada pertengahan 80-an:
https://en.wikipedia.org/wiki/IBM_Common_User_Access
Mereka biasanya diterapkan di semua lingkungan desktop yang dibuat sejak itu. DOS, Windows, Motif, bahkan alat-alat Netware semuanya memenuhi standar ini. Satu pengecualian adalah Mac, yang menggunakan set yang sangat mirip tetapi berbeda (Cmd, bukan Ctrl) dari periode waktu yang sama.
Terminal Unix jauh sebelum standar ini dan kebanyakan mengabaikannya. Juga, jika mereka benar-benar menerapkan ikatan kunci ini, itu mungkin mengganggu program TUI yang sudah menggunakannya untuk fungsionalitas lain. Jadi sementara secara teknis bisa dilakukan, bermasalah juga.
Aplikasi:
The
micro
editor teks adalah yang terbaik yang pernah kulihat di meniru editor teks GUI, mirip dengan DOSedit
tetapi dengan fitur yang lebih modern Teks Sublime la.ne
adalah yang lebih lama di repo Debian, dan bahkannano
dapat dikonfigurasi dengan keybindings yang waras. Tapi terminal telanjang / kulitnya, tidak.Dengan
libvte
itu mungkin mudah untuk membangun terminal virtual yang belum sempurna yang menangani sendiri keybindings ini. Namun, banyak pekerjaan untuk keuntungan kecil.sumber
Saya hanya membantu seorang teman melalui masalah yang serupa dengan ini dan menemukan bahwa clipit manager clipit adalah biang keladinya.
sudo apt-get remove clipit
bisa mendapatkan semuanya kembali dan berjalan baik untuknya. Semoga itu bisa membantu orang lain di luar sana.
sumber