Pertanyaan
Saya ingin membuat antarmuka pengguna dalam bentuk menu popup , menu popup mirip dengan yang digunakan di Magit .
fitur
Definisi Popup
Munculan dalam konteks pertanyaan ini berarti sedikit jendela sementara yang berisi koleksi item menu sehingga pengguna dapat memilih satu dan hanya satu dari item ini.
Posisi di Layar
Munculan diperbolehkan untuk muncul di bagian mana pun dari layar, tetapi diinginkan bahwa itu harus cukup jelas dan karenanya harus muncul di samping jendela yang sedang aktif.
Isi dari Penyangga Popup
Item harus ditampilkan dalam bentuk tabel cantik. Pretty adalah konteks pertanyaan yang berarti menarik secara visual, efek ini dapat paling mudah dicapai dengan meletakkan item menu ke dalam baris lurus, lihat
complete--insert-string
misalnya. Paragraf ini berfungsi untuk klarifikasi tambahan, Anda dapat melakukannya dengan cara Anda sendiri, ini tidak akan membuat jawaban Anda salah.
Pemilihan Item Menu
Pemilihan ini diharapkan dilakukan dengan menekan satu tombol atau, secara opsional dengan mouse (meskipun tidak begitu penting sehingga jawaban yang berisi proposisi yang tidak mendukung mouse adalah legal). Jika Anda mengusulkan solusi yang mendukung mouse, harap perhatikan bahwa pengguna harus dapat memilih item menu dengan cara yang intuitif, yaitu dengan mengklik tombol kiri pada pilihan yang diinginkan.
NB mouse dapat digunakan dalam banyak cara dan cara-cara alternatif untuk menunjukkan pilihan juga disambut.
Eliminasi Popup
Setelah pengguna memilih item menu dengan cara yang dijelaskan di atas, buffer dan dengan demikian jendelanya harus dihilangkan dari pandangan dan juga dimatikan. Jendela yang telah aktif sebelum doa menu popup harus mendapatkan fokus (yaitu, menjadi aktif) lagi.
Nilai dan Argumen yang Dikembalikan
Lebih disukai, konsekuensi tindakan ini harus menghasilkan objek Lisp dikembalikan. Objek Lisp dapat berupa:
nil
- ini menunjukkan bahwa pengguna telah membatalkan menu popup dengan menekan C-gatau dengan cara lain †.string
- string (diizinkan menggunakan simbol) harusstring-equal
ke salah satu string yang disediakan ke menu popup sebagai koleksi item yang sebenarnya.
Cara alternatif untuk memberi tahu seluruh program mengetahui pilihan pengguna, atau, mungkin, ketidakhadirannya, dapat diterima. Namun, jika tidak jelas bagaimana hal itu dapat dilakukan, saya meminta semua penjawab berimprovisasi dan tidak meminta saya untuk klarifikasi lebih lanjut tentang aspek ini.
Ini semua untuk nilai yang dikembalikan. Adapun parameter input, mereka harus setidaknya menyertakan kumpulan string yang mewakili pilihan yang mungkin (yaitu, item menu).
Jawaban yang Dapat Diterima
Jawaban yang diharapkan dapat berupa:
Cuplikan kode yang memadai yang memungkinkan pembaca yang berpendidikan untuk menulis fungsi seperti yang dijelaskan di atas; tidak diharapkan atau perlu untuk menulis seluruh fungsi kerja. Namun, untuk menghindari ketidakpastian (dapatkah sebagian besar kode dihilangkan?), Saya harus mencatat bahwa bagian potongan yang hilang harus dijelaskan dalam komponen jawaban tekstual.
Tautan ke perpustakaan yang ada yang mengimplementasikan fungsi serupa. Untuk menghindari ketidakpastian, saya harus mencatat bahwa serupa dalam kasus kami berarti bahwa perpustakaan dapat digunakan untuk membuat popup (lihat definisi di atas) yang memiliki setidaknya 2 atau 3 fitur yang dijelaskan di atas. Jika perpustakaan yang diusulkan berbeda ke titik di mana kondisi yang dinyatakan sebelumnya tidak dapat dipenuhi, masing-masing kasus tersebut akan dinilai secara independen dan akan selalu dicabut jika OP menganggapnya berguna.
Deskripsi fungsi Emacs bawaan atau yang pihak ketiga yang dapat digunakan untuk mengimplementasikan fitur apa pun yang dijelaskan di bagian «Fitur», lihat di atas. Untuk ketidakpastian menghindari, silakan negara jelas bagaimana jawaban Anda dapat bermanfaat bagi pembaca masa depan yang ingin menerapkan popup , popup menu mirip dengan yang digunakan di Magit .
† Cara-cara alternatif untuk membatalkan menu popup mungkin termasuk yang berikut (tetapi tidak terbatas pada ini):
mengklik di luar jendela menu sembulan;
membunuh buffer yang berisi popup tanpa membuat pilihan.
magit-popup
. Paket baru dipanggiltransient
, dan inilah yang digunakan dalam versi saat inimagit
. Lihat magit.vc/manual/transient untuk dokumentasi.