Penyelesaian kabur saat memasukkan karakter Unicode

12

Saya baru saja menemukan C-x 8 RETcara memasukkan karakter Unicode dengan nama Unicode atau kode hex. Saya belum (belum?) Menghafal semua nama karakter Unicode, jadi saya tidak selalu menemukan karakter yang tepat.

Ada, misalnya, karakter "SNOW CAPPED MOUNTAIN". Jika saya mengetik "GUNUNG" saja, karakter ini tidak akan muncul dalam daftar penyelesaian. Saya harus ingat untuk mencari "SNOW" untuk melihat karakter khusus ini dalam daftar penyelesaian.

Sebagai seseorang yang telah menjadi tergantung pada IDO untuk apa pun yang melibatkan penyelesaian, kurangnya fleksibilitas ini agak mengerikan. Saya menggunakan ido-ubiquitous-mode.

Bagaimana saya bisa menggunakan pencocokan mirip IDO untuk input Unicode? Bagaimana saya bisa menggunakan penyelesaian fleksibel untuk SEMUA HAL ?

(Saya akan baik-baik saja dengan meninggalkan mode IDO jika ada sesuatu yang lebih baik.)

rekado
sumber
Sebagai solusi untuk masalah yang sama, saya akan mengetik C-q SPC mountain TAB. Itu akan cocok dengan nama karakter apa pun dengan "gunung" sebagai kata pertama.
legoscia
1
Lihatlah emacs.stackexchange.com/a/3139/2094 untuk penyelesaian berbasis helm.
abo-abo
1
Hmm, ini terdengar seperti bug yang bisa Anda laporkan di pelacak masalah proyek .
wasamasa
1
Jika Anda mengetik *cap*mou TAB, maka Anda mendapatkan seluruh penyelesaiannya.
Juancho
@ Guancho itu benar, tapi itu bukan perilaku yang saya inginkan
rekado

Jawaban:

8

Seperti yang disarankan @wasamasa, Anda ido-ubiquitousharus menyelesaikannya saat insert-chardigunakan. Ada laporan bug yang ditutup pada 2013 , tapi saya masih melihat perilaku ini dengan Emacs 24.4 dan ido-ubiquitousversi 20140904.1547, jadi saya mengajukan laporan bug lain .

EDIT:

Pemelihara ido-ubiquitousmenulis ini:

Ok, saya menemukan masalahnya. Ada banyak karakter unicode, jadi daftar penyelesaiannya melebihi ido-ubiquitous-max-itemsdan ido-ubiquitousmenonaktifkan itu sendiri untuk alasan itu. Di sistem saya, ada hampir 40 ribu penyelesaian yang tersedia, dan standarnya ido-ubiquitous-max-itemsadalah 30 ribu. Mengaturnya ke 50k memungkinkan idopenyelesaian insert-charuntuk saya. Jadi cobalah menyesuaikannya.

Memang, (setq ido-ubiquitous-max-items 50000)memperbaikinya.

rekado
sumber
Untuk ido-completing-read+, gunakan (setq ido-cr+-max-items 50000)untuk memperbaiki kesalahan ini.
Bach Lien
5

Untuk snow capped mountaindisertakan saat Anda mengetik mount, Anda mungkin ingin melakukan:

(push '(unicode-name (styles substring)) completion-category-overrides)

Sebenarnya, mungkin substringgaya ini harus diaktifkan secara default untuk nama unicode, seperti itu untuk nama buffer. Mungkin Anda harus melobi untuk itu via M-x report-emacs-bug.

Stefan
sumber
3

Jika Anda menggunakan Icicles maka C-x 8 RETAnda dapat menggunakan substring atau regexp atau pencocokan fuzzy selama penyelesaian. Dan Anda dapat menggunakan penyelesaian progresif , untuk mencocokkan dengan beberapa pola (misalnya sederhana).

Selain itu, jika opsi icicle-read-char-by-name-multi-completion-flagini bukan nil, yang mana merupakan default, maka Anda dapat menggunakan multi-penyelesaian untuk mencocokkan dengan kombinasi ini:

  • nama Unicode
  • titik kode Unicode , sebagai angka heksadesimal
  • yang karakter itu sendiri (seperti yang muncul dalam teks, bukan integer)

Kandidat penyelesaian yang Anda lihat di buffer *Completions*berisi semua komponen ini - WYSIWYG.

Mengapa Anda ingin mencocokkan dengan karakter itu sendiri? Untuk melihat poin kode Unicode dan nama karakter yang sesuai, termasuk nama lama apa pun. Misalnya, untuk karakter ` (aksen kubur) Anda mendapatkan dua kandidat penyelesaian:

GRAVE ACCENT      60      `
SPACING GRAVE     60      `
Drew
sumber
Saya pikir saya harus benar-benar mencoba Icicles suatu hari nanti. Terima kasih atas jawaban anda.
rekado
0

Anda dapat menggunakan perintah apropos-chardi pustaka apu.eluntuk menampilkan semua karakter Unicode yang namanya cocok dengan regexp atau daftar kata yang Anda ketikkan. Secara default, kata-kata dicocokkan sebagai substring.

Dalam daftar kecocokan, Anda dapat menekan ^untuk memasukkan karakter yang ditunjukkan pada baris saat ini ke buffer di mana Anda dipanggil apropos-char, pada titik. Atau Anda dapat menekan C-yuntuk menyalin arang itu ke ring bunuh (atau M-ymenyalinnya ke pilihan sekunder ). (Hit RETuntuk melihat info lebih lanjut tentang char.)

Drew
sumber