Apakah ada pustaka untuk bidang input di Emacs?

10

Cukup banyak mode Emacs menggunakan bentuk (seperti): antarmuka kustomisasi adalah salah satunya, mode Pesan (baca: bagian tajuknya) adalah yang lain; ada lebih banyak dari mereka, sayangnya tidak selalu sangat mirip. Yang dimaksud dengan "formulir" di sini adalah buffer dengan bagian hanya baca dan tempat yang ditunjuk untuk memasukkan teks; mungkin atau mungkin tidak mengandung tombol (mungkin harus menerima C-c C-csebagai kunci konfirmasi / komit, terlepas dari keberadaan tombol OK ).

Saya sangat tertarik pada pelengkapan otomatis di bidang (dan khususnya, bidang yang memungkinkan dengan daftar nilai dari beberapa set yang ditunjuk, katakanlah, dipisahkan dengan koma). Pertanyaan saya adalah: apakah ada perpustakaan Emacs yang memudahkan pembuatan (dengan "mudah", maksud saya tidak menciptakan kembali roda) pembuatan bentuk seperti itu, atau haruskah saya membuat kode sendiri semuanya?

(Saya membayangkan bahwa apa yang harus saya lakukan dalam kasus terakhir adalah (1) mengatur beberapa bagian dari buffer read-only, (2) menyiapkan mode utama khusus, sehingga misalnya TABdan S-TABberalih antara "bidang", dan (3) mungkin menggunakan sesuatu seperti Icicles atau Helm untuk pelengkapan otomatis.)

mbork
sumber
1
Mengubah judul Anda untuk mengatakan kolom input. Bentuk memiliki makna yang sangat khusus di elisp, yang dapat menyebabkan kebingungan.
Malabarba
2
Dan ya, Ada perpustakaan widget bawaan. Tetapi saya tidak tahu apa-apa tentang itu.
Malabarba
@Malabarba: terima kasih, itu mungkin kata-kata yang lebih baik.
mbork
(Meskipun Emacs sendiri menggunakan kata "form" dalam arti ini - lihat manual widget yang disebutkan dalam jawaban Drew!)
mbork

Jawaban:

8

Lihat pustaka cus-edit.eldan wid-edit.el(dan pustaka tingkat atas custom.eldan widget.el, serta pustaka komponen terkait), yang disertakan dengan GNU Emacs. Yang pertama memanfaatkan yang terakhir. Yang terakhir mendefinisikan hal-hal entry-entry dasar (dan tidak-begitu-dasar), yang disebut " widget ", dalam hierarki. Anda dapat menggunakan widget dan fungsi yang telah ditentukan ini di perpustakaan untuk membuat widget dan jenis widget Anda sendiri.

Namun, berhati-hatilah bahwa kode perpustakaan-perpustakaan ini, khususnya yang ada wid-edit.el, tidak mudah diikuti. Taruhan terbaik Anda adalah memulai dengan menggunakan kembali widget yang ada atau menggunakan kode definisi widget yang ada sebagai panduan.

(Dua perpustakaan ekstensi kecil untuk ini adalah cus-edit+.eldan wid-edit+.el. Mereka juga menyajikan beberapa contoh penggunaan.)

Ada manual Info untuk widget, didistribusikan dengan GNU Emacs, berjudul " Perpustakaan Widget Emacs ".

Ada juga perpustakaan forms.el, termasuk dengan GNU Emacs, tapi saya tidak terbiasa dengannya. Mungkin orang lain memiliki sesuatu yang berguna untuk dikatakan tentang hal itu. Ada manual untuk formulir, didistribusikan dengan GNU Emacs, berjudul " Mode Bentuk ".

Drew
sumber
2
Lebih banyak tentang forms.el: stackoverflow.com/questions/10166600/…
phils
1
@Rew: terima kasih atas jawaban Anda! Bisakah Anda memperjelas hubungan antara \(custom\|widget\).eldan \(cus\|wid\)-edit.elsedikit? Saya menemukan terutama bagian dari Widget pengguna dimengerti: (require 'widget) (eval-when-compile (require 'wid-edit)).
mbork
1
Pertama, saya bukan ahli dalam hal ini. Saat-saat ketika saya perlu mengubah sesuatu, Sesuaikan saya mencelupkan ke dalam cus-edit.eldan wid-edit.el. File lain yang Anda sebutkan adalah file tingkat atas; *-edit.elfile - file tersebut memiliki kode yang saya minati. Tidak lebih dari itu; Maaf. Kesulitan sebenarnya adalah kode itu sendiri, yang menggunakan gaya semi-OOP tertentu yang tidak cocok untuk dokumentasi diri Emacs (dengan kata lain) atau ke debugger Emacs. Anda dapat menyelidiki sendiri, atau mungkin mencoba menghubungi penulis (semoga sukses dengan itu!). Mungkin orang lain di sini akan membantu.
Drew