Piszę rozszerzenie emacs do użytku z rozpoznawaniem mowy i szukam pomocy z określoną funkcją. Niektóre słowa, które rozpoznaje mowę (Dragon), konsekwentnie słabo rozpoznaje - nie ma znaczenia, ile razy je ćwiczysz, będzie po prostu ssać rozpoznawanie niektórych słów. W tym samym czasie zwykle, kiedy piszesz na temat lub kodujesz, będziesz używać wielu takich samych słów w kółko.
Napisałem więc tryb, który używa nakładek do zmiany sposobu renderowania słów w buforze. Bierze losową literę w słowie, podkreśla go losowym kolorem i kładzie na nim losowy znak diakrytyczny (akcent, umlaut itp.). Oto zrzut ekranu (prawdopodobnie będziesz musiał powiększyć, aby zobaczyć znaki / podkreślenia):
Następnie możesz powiedzieć „fioletowe włosy”, a ono będzie szukać słowa z fioletowym podkreśleniem pod „a” ze znakiem diakrytycznym, który wygląda jak włosy, i wpisz to słowo dla siebie. Więc na powyższym zrzucie ekranu powiedzenie, że spowoduje to, że emacs napisze dla ciebie „regexp-quote”.
Pomysł polega na tym, że możesz odwoływać się do każdego słowa, które już użyłeś, które jest wyświetlane na ekranie przy użyciu skończonego zestawu słów, które rozpoznający jest niezmiennie dobry w rozpoznawaniu.
Działa całkiem dobrze, ale czasami zdarza się kolizja. Aby to zrobić, mogę nauczyć się konsekwentnego odwoływania się do słów w ten sam sposób, w jaki używam bajtów z skrótu md5 słowa zamiast (random)
algorytmu przypisującego zmiany tak, aby uniknąć kolizji. Znalazłem tylko 6 łatwych do odróżnienia kolorów (jest to trudne, gdy podkreślenie ma tylko jeden znak szerokości i grubość jednego piksela) oraz 3 łatwo rozpoznawalne znaki diakrytyczne (łatwe do odróżnienia od siebie i nie mylące z podkreśleniem powyżej) linia lub nachodzące na podkreślenie), widoczne u góry źródła powyżej.
Potrzebuję więcej sposobów zmiany renderowania, aby zmniejszyć częstotliwość kolizji. Najlepiej byłoby, gdyby modyfikacja renderowania:
- Nie denerwuj się resztą tekstu. Doprowadziło mnie to do odrzucenia na przykład właściwości odwrotnego wideo.
- Nie da się łatwo pomylić z innymi zmianami. Podkreślenia łatwo pomylić z podkreśleniami poprzedniej linii. Wiele znaków diakrytycznych wygląda podobnie, chyba że rozmiar czcionki jest niepraktycznie ogromny.
- Bądź przestrzennie blisko innych zmian. W tej chwili, gdy moje oko znajdzie celującą postać, wszystkie informacje są tam, znacznik, podkreślenie i litera.
- Pracuj ładnie z czcionką o stałej szerokości (potrzebną do kodowania), która poprawnie wyświetla znaki diakrytyczne (musiałem przełączyć się na DejaVu Sans Mono z Consolas, aby znaki były poprawnie renderowane)
- Praca z literami alfabetu łacińskiego. Na przykład arabskie znaki łączące nie łączą się ze znakami alfabetu łacińskiego.
- Nie zmieniaj koloru liter, ponieważ jest on już używany do podświetlania składni.
- Właściwie być wykonalnym w emacs z emacs lisp;)
Być może istnieją specjalne znaki Unicode kontrolujące renderowanie, które mogłyby zostać wykorzystane do otwarcia nowych możliwości? Lub sposób na pogrubienie podkreśleń, aby móc łatwo rozróżnić więcej kolorów? A może jakaś inna niejasna funkcja emacsa, która pozwala renderować znaki na znakach innych niż Unicode?
(char-to-string ?\uFEFF)
a drugi to postać docelowa, która jest zmniejszona w rozmiar, więc oba pasują. Innym pomysłem byłoby użycie przekreślenia w pionie (dostępnego w niektórych czcionkach, ale nie we wszystkich) podobnego do tego, które jest używane w bibliotecevline.el
emacswiki.org/emacs/VlineMode