Saya sedang menulis ekstensi emacs untuk digunakan dengan pengenalan ucapan, dan saya mencari bantuan dengan fitur tertentu. Beberapa kata yang dikenal secara konsisten oleh pengenal ucapan (Naga) - tidak masalah berapa kali Anda melatihnya, ia hanya akan payah dalam mengenali kata-kata tertentu. Pada saat yang sama biasanya ketika Anda sedang menulis tentang suatu topik atau ketika coding Anda akan menggunakan banyak kata yang sama berulang-ulang.
Jadi saya telah menulis mode yang menggunakan overlay untuk mengubah bagaimana kata-kata disajikan dalam buffer. Dibutuhkan huruf acak dalam kata, menggarisbawahi dalam warna acak, dan menempatkan tanda diakritik acak (aksen, umlaut, dll.) Di atasnya. Berikut screenshot (Anda mungkin perlu memperbesar untuk melihat tanda / garis bawah):
Kemudian Anda dapat mengatakan, "rambut ungu" dan itu akan mencari kata dengan garis bawah ungu di bawah 'a' dengan tanda diakritik yang terlihat seperti rambut dan ketik kata itu untuk Anda. Jadi dalam screenshot di atas mengatakan itu akan menyebabkan emacs mengetik "regexp-quote" untuk Anda.
Idenya adalah ini memungkinkan Anda merujuk ke kata apa pun yang telah Anda gunakan yang ada di layar menggunakan serangkaian kata terbatas yang secara konsisten baik dikenali oleh pengenal.
Ini bekerja cukup baik, kecuali kadang-kadang ada tabrakan. Untuk membuatnya jadi saya bisa belajar untuk secara konsisten merujuk pada kata-kata dengan cara yang sama saya menggunakan byte dari md5 hash dari kata, bukannya (random)
atau memiliki algoritma menetapkan perubahan sehingga tabrakan dihindari. Saya hanya menemukan 6 warna yang mudah dibedakan (sulit ketika garis bawahnya hanya satu karakter lebar dan satu piksel tebal) dan 3 tanda diakritik mudah dibedakan (mudah untuk membedakan satu sama lain dan juga tidak dapat dibedakan dengan garis bawah di atas) garis atau tumpang tindih dengan garis bawah), terlihat di bagian atas sumber di atas.
Saya perlu lebih banyak cara untuk mengubah rendering untuk mengurangi frekuensi tabrakan. Idealnya, render modifikasi akan:
- Tidak akan menggelegar dari sisa teks. Ini membuat saya mengabaikan misalnya properti video terbalik.
- Tidak mudah dikacaukan dengan perubahan lain. Overline mudah dikira sebagai underline pada baris sebelumnya. Banyak tanda diakritik terlihat serupa kecuali ukuran font Anda tidak praktis besar.
- Dekat dengan tempat di mana perubahan lainnya berada. Saat ini begitu mata saya menemukan karakter penargetan semua informasi ada di sana, penanda, garis bawah, dan surat itu.
- Bekerja dengan baik dengan font lebar tetap (diperlukan untuk pengkodean) yang dengan benar membuat tanda diakritik (saya harus beralih ke DejaVu Sans Mono dari Consolas untuk membuat tanda-tanda itu dirender dengan benar)
- Bekerja pada huruf alfabet latin. Ada tanda menggabungkan Arab misalnya, tetapi mereka tidak menggabungkan pada karakter alfabet latin.
- Tidak mengubah warna huruf, karena itu sudah digunakan untuk penyorotan sintaksis.
- Sebenarnya bisa dilakukan di emacs dengan emacs lisp;)
Mungkin ada karakter unicode khusus yang mengendalikan rendering yang bisa disalahgunakan untuk membuka kemungkinan baru? Atau cara untuk mengentalkan garis bawah sehingga aku bisa dengan mudah membedakan lebih banyak warna? Atau fitur emacs tidak jelas lainnya yang memungkinkan Anda membuat tanda di atas karakter selain unicode?
(char-to-string ?\uFEFF)
dan yang lainnya adalah karakter target yang dikurangi dalam ukuran sehingga mereka berdua cocok. Gagasan lain adalah dengan menggunakan pemogokan vertikal (tersedia dalam beberapa font, tetapi tidak semua) mirip dengan apa yang digunakan di perpustakaanvline.el
emacswiki.org/emacs/VlineModeJawaban:
Kemungkinan lain adalah untuk menampilkan nomor baris dan mengucapkan nomor baris sebelum kata, atau, karena melihat ke atas untuk mendapatkan nomor baris yang tepat akan menyusahkan, Anda dapat meminta pencarian algoritma dalam + atau - 5 atau 10 baris dari angka yang Anda mengatakan.
Atau mungkin mendeklarasikan wilayah atau fungsi tempat Anda bekerja dan semua pencarian hanya terlihat di sana. Saya kira itu akan membatasi tabrakan.
Anda juga bisa membuat simbol unicode setelah atau sebelum kata dengan warna tertentu untuk membuatnya menonjol. Dan juga kotak atau garis bawahi kata dengan warna lain. Dengan cara ini Anda bisa memiliki 6 warna kata * 6 warna simbol * N kemungkinan simbol. Anda mungkin dapat menemukan 10 simbol yang baik dan memiliki 360 kombinasi. Misalnya Anda bisa mengatakan "bintang kuning biru" untuk merujuk pada kata kucing di sini.
Jika bintang terlalu menggelegar, Anda bisa berpasangan: kotak, dan dua yang berbeda: garis bawah.
Jadi, Anda bisa merujuk ke pohon kata di sini menggunakan "biru kuning merah" yang akan memberi Anda 216 kombinasi untuk digunakan.
sumber
Pernahkah Anda mendengar tentang ace-jump-mode ?
Itu tidak memenuhi salah satu persyaratan yang Anda tentukan, tetapi sepertinya sangat cocok dengan apa yang Anda coba capai. Itu akan memungkinkan pengguna untuk menentukan kata apa pun dengan hanya mengucapkan 2 atau 3 kata.
Anda dapat menentukan serangkaian karakter yang ditawarkan kepada Anda, sehingga Anda dapat menghindari konsonan yang sulit dibedakan. Maka penggunaannya bisa saja mengatakan "memperbaiki A sembilan" , dan memperbaiki kata ke-9 yang dimulai dengan
a
.sumber
Pertanyaan menarik. Saya yakin Anda akan mendapatkan beberapa saran menarik.
Satu saran kecil yang muncul pada saya adalah menggunakan warna dan gaya yang berbeda untuk menggarisbawahi. Lihat Elisp manual, simpul
Face Attributes
tentang atribut:underline
dan yang:color
dan:style
komponen.Anda juga dapat bereksperimen dengan atribut
:box
dan lebar serta gaya garis yang berbeda untuk itu, tetapi itu mungkin terlalu menggelikan.sumber
Saya akan menjawab dengan mengusulkan cara alternatif untuk memilih kata target. Sorot setengah dari kata-kata (dipilih secara acak). Pengguna mengatakan "ya" jika kata target disorot dan "tidak" sebaliknya. Jika pengguna mengatakan "ya", ambil semua kata yang disorot dan sorot secara acak setengah dari mereka. Jika pengguna mengatakan "tidak", sorot secara acak setengah dari kata-kata yang tidak disorot. Sekali lagi pengguna menunjukkan apakah kata target disorot dengan mengatakan "ya" atau "tidak". Ulangi itu sampai hanya kata target yang disorot.
Beberapa manfaat dari pendekatan ini:
Kekurangan: Anda harus mengatakan "ya" dan "tidak" terlalu sering. Namun, ini diperbaiki oleh variasi ide berikut: jangan menyorot kata-kata tetapi menggunakan warna untuk mereka. Anda mengatakan Anda memiliki 6 warna yang mudah dibedakan. Ini berarti bahwa jika Anda memiliki 100 kata di layar, memilih kata target membutuhkan penamaan rata-rata 2,6 warna. Jika ada 1000 kata, Anda harus memberi nama 3,9 warna rata-rata.
sumber
Berikut ini adalah contoh menggunakan overlay dengan gambar xpm untuk versi Emacs grafis yang mendukung format gambar xpm. Lebar 11 piksel; 20 piksel tinggi; dan memiliki jumlah 4 warna yang ditentukan pengguna. Saya menggunakan Mac yang menjalankan Snow Leopard 10.6.8 dan jenis huruf yang saya sukai ketika menggunakan Emacs adalah
-*-Courier-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1
-frame-char-width
adalah 11 danframe-char-height
adalah 20. Saya telah menambahkan garis kuning vertikal tipis di sebelah kiri huruf kapital "A" sebagai contoh cara menggambar gambar kustom. Substitusi karakter pada titik dapat dibuat secara programatik menggunakan(char-after (point))
dan mengambil nomor itu - yang dalam hal ini adalah 65 untuk huruf kapital "A" - dan mengganti variabel yang sesuai - misalnya,(cond ((eq (char-after (point)) 65) cap-ltr-a-xpm) . . .
- dan menggunakan variabel itu dalam penempatan hamparan - misalnya,(overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm)
. Ini bekerja dengan sangat baik untuk buffer terpotong dan juga dengan bungkus kata karenadisplay
properti overlay pada karakter di tengah kata tidak menyebabkan bungkus kata berpikir bahwa bagian pertama dari kata tersebut berada di akhir baris sebelumnya. . Tentu saja, perlu waktu untuk membuat pustaka khusus gambar xpm favorit.ImageMagick mampu menghasilkan xpm semi-akurat dari karakter tertentu berdasarkan keluarga font dan ukuran tertentu, tapi itu tidak setepat yang saya harapkan - di sini adalah tautan ke petunjuk untuk menggunakan utilitas eksternal itu: https: / /stackoverflow.com/a/14168154/2112489 Singkatnya, pengguna harus siap untuk menghabiskan waktu menyesuaikan gambar xpm sesuai dengan keinginannya.
sumber