Linenoise: Buat ctrl kiri dan kanan

Dibuat pada 24 Nov 2016  ·  8Komentar  ·  Sumber: antirez/linenoise

Pintasan keyboard ini sangat berguna saat menavigasi baris yang sudah ada dengan cepat. Apakah ada alasan mengapa mereka tidak diimplementasikan?

Semua 8 komentar

A: Ini bukan perintah gerakan khas di POSIX / UNIX. Linenoise adalah 100% POSIX.

Namun, akan mudah untuk menambahkan ini ke salinan linenoise Anda sendiri. Banyak orang yang menggunakan linenoise meretasnya karena satu dan lain alasan. Sangat mudah dimengerti dan mod.

Berikut adalah bagan yang membandingkan penggunaan tombol kontrol di Win/Unix/Emacs: https://en.wikipedia.org/wiki/Control_key


Apa yang harus dilakukan?

pada baris #41 di linenoise.c Anda akan menemukan pembahasan tentang bagaimana kursor dikendalikan.

Di jalur # 768 Anda akan menemukan
static int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)

Jika Anda ingin mengubah fungsi pengeditan, itu akan ada di sini di fungsi ini.

Ingat juga bahwa pengeditan multi-baris harus diaktifkan dengan panggilan API:

linenoiseSetMultiLine(1);

Saya harap ini membantu dan Selamat Hari Thanksgiving! (tidak peduli di mana Anda berada :-)

Apakah ini mengacu pada ide yang sama dengan #64 dan #92, atau sesuatu yang lain?

Saya tidak berpikir linenoise membatasi dirinya pada fitur pengeditan baris yang ditentukan oleh POSIX (dan saya bahkan tidak dapat menemukan sumber urutan pelarian spesifik yang didefinisikan POSIX, meskipun saya menemukan banyak informasi tentang vi/emacs/readline back-word dan urutan kata depan). Anda mungkin memikirkan fakta bahwa linenoise bergantung pada lingkungan POSIX, tetapi itu hanya berarti ia harus menjauh dari panggilan khusus OS.

Mungkin saya tidak jelas - saya sadar bahwa control+kiri tidak sesuai dengan karakter kontrol (seperti ctrl+a sesuai dengan \01, dll.). Banyak emulator terminal menghasilkan urutan pelarian yang berbeda untuk ini, meskipun (seperti \033[1;5D atau \033f ), yang diikat oleh beberapa pustaka pengeditan baris secara default untuk menavigasi maju/mundur dengan kata. Setidaknya, saya berasumsi itulah yang disarankan oleh masalah ini.

Jika Anda telah menemukan sesuatu yang mencantumkan urutan escape pengeditan baris mana yang tidak (tidak) ditentukan oleh POSIX, atau sesuatu yang menyatakan bahwa linenoise tidak akan mengimplementasikan apa pun yang bukan bagian dari standar POSIX, beri tahu saya, sebagai Saya tidak dapat menemukannya.

Sunting: jika Anda merujuk ke tabel yang Anda tautkan di atas, meskipun itu tidak mengacu pada POSIX, saya pikir saya mengerti maksud Anda. Saya tidak berdebat mendukung ctrl+kiri/kanan secara khusus, tapi saya tidak berpikir beberapa urutan adalah ide yang buruk. Juga, itu bukan daftar lengkap kombinasi tombol atau ikatan readline - saya percaya readline mengikat esc-b/f (dan mungkin urutan pelarian lain yang lebih panjang) ke back/forward-word secara default, yang tidak terdaftar di sana.

Saya pikir fitur yang diinginkan JelteF melibatkan perluasan urutan escape input pegangan linenoise ( di sini , misalnya urutan yang dihasilkan dengan menekan tombol panah atau hapus), dan Anda mengacu pada urutan escape keluaran (misalnya urutan yang dikirim ke output untuk benar-benar memindahkan kursor) . Saya setuju bahwa berurusan dengan termcap berada di luar cakupan linenoise, dan saya menghargai fakta bahwa linenoise diimplementasikan dengan sedikit perintah.

Mungkin @JelteF dapat mengklarifikasi apa sebenarnya yang diminta oleh permintaan fitur ini. Saya pikir ini tentang menangani dua urutan tambahan di linenoiseEdit(), tapi saya bisa saja salah.

Hanya fyi, jika ini tentang memindahkan satu kata ke kiri/kanan ketika ctrl-left atau ctrl-right ditekan (dengan urutan escape panjang yang sesuai \033[5;D dan C masing-masing, Saya memiliki tambalan untuk itu di binding OCaml: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593

@c-cube benar bahwa itulah yang saya maksud. Maaf karena tidak merespon sebelumnya.

haha, ini baru satu setengah tahun, tidak ada apa-apanya dalam waktu internet. Dan di sana juga di linenoiseEdit(). Terima kasih @c-cube :+1:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

krux02 picture krux02  ·  8Komentar

denisvm picture denisvm  ·  9Komentar

ghost picture ghost  ·  4Komentar

fatcerberus picture fatcerberus  ·  5Komentar

ozancaglayan picture ozancaglayan  ·  21Komentar