J'écris une extension emacs à utiliser avec la reconnaissance vocale, et je cherche de l'aide avec une fonctionnalité particulière. Certains mots que le logiciel de reconnaissance vocale (Dragon) ne reconnaît pas toujours correctement - peu importe le nombre de fois que vous l'entraînez, il suffira de reconnaître certains mots. En même temps, généralement, lorsque vous écrivez sur un sujet ou lors du codage, vous utiliserez maintes et maintes fois les mêmes mots.
J'ai donc écrit un mode qui utilise des superpositions pour changer la façon dont les mots sont rendus dans le tampon. Il prend une lettre au hasard dans le mot, la souligne dans une couleur aléatoire et met une marque diacritique aléatoire (accent, tréma, etc.) par-dessus. Voici une capture d'écran (vous devrez probablement zoomer pour voir les marques / soulignements):
Ensuite, vous pouvez dire «cheveux violet p» et il recherchera le mot avec un soulignement violet sous son «a» avec une marque diacritique qui ressemble à des cheveux et tapez ce mot pour vous. Donc, dans la capture d'écran ci-dessus, cela indique qu'emacs tapera "regexp-quote" pour vous.
L'idée est que cela vous permet de vous référer à n'importe quel mot que vous avez déjà utilisé qui est à l'écran en utilisant un ensemble fini de mots que le programme de reconnaissance est toujours bon à reconnaître.
Cela fonctionne plutôt bien, sauf qu'il y a parfois une collision. Pour que je puisse apprendre à faire référence aux mots de la même manière que j'utilise les octets du hachage md5 du mot au lieu de (random)
ou qu'un algorithme attribue les changements de manière à éviter les collisions. Je n'ai trouvé que 6 couleurs facilement reconnaissables (c'est difficile lorsque le soulignement n'a qu'un caractère de large et un seul pixel d'épaisseur) et 3 marques diacritiques facilement reconnaissables (faciles à distinguer les unes des autres et non confondables avec un soulignement ci-dessus) ou chevauchement avec le soulignement), vu en haut de la source ci-dessus.
J'ai besoin de plus de façons de modifier le rendu afin de réduire la fréquence des collisions. Idéalement, une modification de rendu:
- Ne vous ébranlez pas du reste du texte. Cela m'a conduit à rejeter par exemple la propriété vidéo inverse.
- Ne pas être facilement confondu avec d'autres changements. Les surlignages sont facilement confondus avec les soulignements de la ligne précédente. Beaucoup de signes diacritiques se ressemblent, sauf si la taille de votre police n'est pas énorme.
- Soyez spatialement près des autres changements. En ce moment, une fois que mon œil a trouvé le personnage ciblé, toutes les informations sont là, le marqueur, le soulignement et la lettre.
- Fonctionne bien avec une police à largeur fixe (nécessaire pour le codage) qui rend correctement les marques diacritiques (j'ai dû passer à DejaVu Sans Mono de Consolas pour que les marques soient correctement rendues)
- Travail sur les lettres de l'alphabet latin. Il y a des marques de combinaison arabe par exemple, mais elles ne se combinent pas sur les caractères de l'alphabet latin.
- Ne change pas la couleur des lettres, car cela est déjà utilisé pour la coloration syntaxique.
- En fait être faisable dans emacs avec emacs lisp;)
Peut-être existe-t-il des caractères unicode spéciaux contrôlant le rendu qui pourraient être utilisés abusivement pour ouvrir de nouvelles possibilités? Ou un moyen d'épaissir les soulignements pour que je puisse facilement distinguer plus de couleurs? Ou une autre fonctionnalité emacs obscure vous permettant de rendre des marques au-dessus des caractères en plus de l'unicode?
(char-to-string ?\uFEFF)
et l'autre est un caractère cible qui est réduit en taille pour qu'ils s'adaptent tous les deux. Une autre idée serait d'utiliser un barrage vertical (disponible dans certaines polices, mais pas toutes) similaire à ce qui est utilisé dans la bibliothèquevline.el
emacswiki.org/emacs/VlineMode