dapatkan terminal ubuntu untuk mengirim urutan pelarian (kontrol + shift + atas)

4

Masalah ini dimulai ketika saya menggunakan emacs (dengan opsi -nw). Biarkan saya jelaskan dulu. Saya mencoba mendefinisikan hotkey (untuk emacs) sebagai berikut

(global-set-key [(control shift up)] 'other-window)

tapi itu tidak berhasil (tidak ada kesalahan, tidak berfungsi), juga tidak

(global-set-key [(control shift down)] 'other-window)

Tapi

(global-set-key [(control shift right)] 'other-window) 

dan

(global-set-key [(control shift left)] 'other-window)

kerja!

Tetapi karena dua kombinasi tombol terakhir digunakan oleh emacs (sebagai default), saya tidak ingin mengubahnya untuk fungsi lain.

Jadi bagaimana saya bisa membuatnya control-shift-up dan control-shift-down kerja?

Saya telah googled "(control shift up)", sepertinya begitu control-shift-up digunakan oleh orang lain, (tetapi tidak sedikit hasilnya).

Di forum Stack Overflow, Gille menjawab saya sebagai berikut:

Ctrl + Shift + Up memang mengirim sinyal ke komputer Anda, tetapi terminal emulator Anda tampaknya tidak mengirimkan urutan pelarian untuk itu. Jadi masalah Anda ada dua. Pertama, Anda harus mendapatkan emulator terminal untuk mengirim urutan pelarian, yang tergantung pada emulator terminal Anda, dan merupakan bahan Pengguna Super, atau Unix.SE jika Anda menggunakan sistem unix. Maka Anda perlu mendeklarasikan urutan pelarian di Emacs, dan jawaban saya menjelaskan bagian itu

Jadi saya datang ke sini untuk pertanyaan ini:

Bagaimana cara mendapatkan terminal saya (saya menggunakan ubuntu 10.04, dan terminal built-in) untuk mengirim urutan pelarian Kontrol + Shift + Atas Kontrol + Shift + bawah

user565739
sumber

Jawaban:

4

Ubuntu menggunakan GNOME dan gnome-terminal. Menurut dokumentasinya ( dalam versi 2.30 ), Ctrl Bergeser Naik dan Ctrl Bergeser Turun digunakan untuk menavigasi buffer scrollback, dan sepertinya tidak ada cara untuk mematikan "fitur" ini (selain memodifikasi kode sumber dari vte, perpustakaan terminal).


Untuk menambal vte di Ubuntu 10.04:

  1. Membangun kembali vte, perpustakaan emulasi terminal:

    1. Instal perangkat lunak yang diperlukan untuk kompilasi:

      sudo apt-get install git-core fakeroot
      sudo apt-get build-dep vte
      
    2. Unduh vte kode sumber dan terapkan tambalan:

      cd /tmp
      git clone git://gist.github.com/771667.git patches
      apt-get source vte
      cd vte-0.23.5
      patch -p1 < ../patches/vte-0.23.5.patch
      
    3. Buat paket Debian dan instal:

      dpkg-buildpackage -us -uc
      sudo dpkg -i ../libvte9_0.23.5-*.deb
      
  2. Tutup semua gnome-terminal proses.

  3. Nikmati - hingga yang berikutnya vte memperbarui...

Patch untuk 0.23:

diff -ur vte-0.23.5/src/vte.c vte-0.23.5+patched/src/vte.c
--- vte-0.23.5/src/vte.c    2010-01-14 02:46:18.000000000 +0200
+++ vte-0.23.5+patched/src/vte.c    2011-01-09 15:19:01.000000000 +0200
@@ -4948,26 +4948,6 @@
            }
            break;
        /* Keypad/motion keys. */
-       case GDK_KP_Up:
-       case GDK_Up:
-           if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, -1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
-       case GDK_KP_Down:
-       case GDK_Down:
-           if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, 1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
        case GDK_KP_Page_Up:
        case GDK_Page_Up:
            if (modifiers & GDK_SHIFT_MASK) {

Patch untuk 0.26:

diff -ur vte-0.26.2/src/vte.c vte-0.26.2+patched/src/vte.c
--- vte-0.26.2/src/vte.c    2010-11-13 14:18:41.000000000 +0200
+++ vte-0.26.2+patched/src/vte.c    2011-01-09 15:06:54.870000002 +0200
@@ -5153,26 +5153,6 @@
            }
            break;
        /* Keypad/motion keys. */
-       case GDK_KEY (KP_Up):
-       case GDK_KEY (Up):
-           if (modifiers & GDK_CONTROL_MASK 
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, -1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
-       case GDK_KEY (KP_Down):
-       case GDK_KEY (Down):
-           if (modifiers & GDK_CONTROL_MASK
-                            && modifiers & GDK_SHIFT_MASK) {
-               vte_terminal_scroll_lines(terminal, 1);
-               scrolled = TRUE;
-               handled = TRUE;
-               suppress_meta_esc = TRUE;
-           }
-           break;
        case GDK_KEY (KP_Page_Up):
        case GDK_KEY (Page_Up):
            if (modifiers & GDK_SHIFT_MASK) {
grawity
sumber
Terima kasih banyak! Tetapi bisakah Anda mengajari saya sesuatu? Pertama-tama, "tambalan" menambahkan kode Anda ke kode sumber vte? (Maaf, tapi saya baru mulai belajar C, dan masih pada level "jika" "sementara" .. dll) Jika lain kali, saya ingin sesuatu yang serupa (misalnya, katakan kontrol + shift + backspace), bisakah saya ganti saja "ke atas" dalam kode Anda dengan "backspace", lalu lakukan perintah yang Anda sebutkan di komentar Anda? Terima kasih lagi!
user565739
@ pengguna: 1) Semacam. Tambalan khusus ini saja menghapus kode yang akan mencuri dua penekanan tombol ini. Dalam output dari diff -u, baris yang ditambahkan dimulai dengan a + dan garis yang dihapus mulai dengan a -. 2) Anda harus mengedit vte.c sendiri, bukan tambalan saya atau orang lain. Tapi ingat itu tidak semua kunci memiliki urutan mereka sendiri.
grawity
@ Pengguna: Juga, saya lupa menambahkan sudo apt-get build-dep vte untuk instruksi di halaman itu; Anda mungkin perlu menjalankan perintah sebelum melakukannya dpkg-buildpackage.
grawity
Saya mengekstrak file dari vite_1.0 + snv834-5.orig.tar.gz, dan ada banyak folder, dan di setiap folder, ada banyak file .cpp dan .hpp. Apa cara terbaik untuk mengetahui bagian yang perlu dimodifikasi? (Dalam pikiran saya, saya pikir saya perlu mengetahui beberapa pengetahuan dasar untuk mengetahui kata kunci, lalu melakukan sesuatu seperti "mencari kata di semua file di dalam folder")?
user565739
@ kegembiraan: Saya telah melakukan langkah-langkah yang Anda sebutkan, dan itu berfungsi dengan baik. Terima kasih
user565739
1

Ctrl + Bergeser + Naik / Ctrl + Bergeser + Turun tampaknya ditangkap oleh terminal default gnome, namun saya cenderung menggunakan terminal yang disebut "Terminator" pada 10,04, di mana kunci-kunci ini tampaknya tidak dipetakan.

Forbesmyester
sumber