Ich schreibe eine Emacs-Erweiterung für die Spracherkennung und suche Hilfe bei einer bestimmten Funktion. Einige Wörter erkennt der Spracherkenner (Dragon) durchweg schlecht - es spielt keine Rolle, wie oft Sie ihn trainieren, er wird nur beim Erkennen bestimmter Wörter nerven. In der Regel werden beim Schreiben eines Themas oder beim Codieren immer wieder dieselben Wörter verwendet.
Deshalb habe ich einen Modus geschrieben, der Überlagerungen verwendet, um zu ändern, wie Wörter im Puffer gerendert werden. Es nimmt einen zufälligen Buchstaben in das Wort auf, unterstreicht es in einer zufälligen Farbe und setzt eine zufällige diakritische Markierung (Akzent, Umlaut usw.) darüber. Hier ist ein Screenshot (Sie müssen wahrscheinlich zoomen, um Markierungen / Unterstreichungen zu sehen):
Dann können Sie sagen, "lila Haare" und es wird nach dem Wort mit einem lila Unterstrich unter dem "a" mit einem diakritischen Zeichen, das wie Haar aussieht, gesucht und das Wort für Sie eingegeben. In dem obigen Screenshot würde dies dazu führen, dass Emacs "regexp-quote" für Sie eingibt.
Die Idee ist, dass Sie auf jedes Wort verweisen können, das Sie bereits verwendet haben und das auf dem Bildschirm mit einer endlichen Menge von Wörtern angezeigt wird, die der Erkenner durchweg gut erkennt.
Es funktioniert ziemlich gut, außer dass es gelegentlich zu einer Kollision kommt. Um dies so zu gestalten, dass ich lernen kann, konsequent auf Wörter zu verweisen, wie ich Bytes aus dem md5-Hash des Wortes verwende, anstatt (random)
die Änderungen durch einen Algorithmus so zuzuweisen, dass Kollisionen vermieden werden. Ich habe nur 6 leicht unterscheidbare Farben gefunden (es ist schwierig, wenn die Unterstreichung nur ein Zeichen breit und ein Pixel dick ist) und 3 leicht unterscheidbare diakritische Zeichen (leicht voneinander zu unterscheiden und auch nicht mit einer Unterstreichung zu verwechseln) Linie oder Überlappung mit der Unterstreichung), oben in der Quelle oben zu sehen.
Ich benötige mehr Möglichkeiten zum Ändern des Renderings, um die Kollisionshäufigkeit zu verringern. Im Idealfall würde eine Rendering-Änderung:
- Nicht vom Rest des Textes abschrecken. Dies hat mich veranlasst, beispielsweise die Inverse-Video-Eigenschaft zu verwerfen.
- Nicht leicht mit anderen Änderungen zu verwechseln. Overlines werden in der vorherigen Zeile leicht mit Unterstrichen verwechselt. Viele diakritische Zeichen sehen ähnlich aus, es sei denn, Ihre Schriftgröße ist unpraktisch groß.
- Seien Sie räumlich in der Nähe der anderen Veränderungen. Sobald mein Auge den Zielcharakter gefunden hat, sind alle Informationen vorhanden, die Markierung, die Unterstreichung und der Buchstabe.
- Arbeiten Sie gut mit einer Schriftart mit fester Breite (für die Codierung erforderlich), die diakritische Zeichen korrekt wiedergibt (ich musste von Consolas zu DejaVu Sans Mono wechseln, damit die Zeichen korrekt wiedergegeben werden).
- Arbeiten Sie an lateinischen Buchstaben. Es gibt zum Beispiel arabische Kombinationszeichen, die sich jedoch nicht mit lateinischen Buchstaben kombinieren lassen.
- Buchstabenfarbe nicht ändern, da dies bereits für die Syntaxhervorhebung verwendet wird.
- Eigentlich machbar in emacs mit emacs lispel;)
Vielleicht gibt es spezielle Unicode-Zeichen, die das Rendern steuern und die missbraucht werden könnten, um neue Möglichkeiten zu eröffnen? Oder eine Möglichkeit, die Unterstreichungen zu verdicken, damit ich möglicherweise problemlos mehr Farben unterscheiden kann? Oder eine andere obskure Emacs-Funktion, mit der Sie neben Unicode Markierungen auf Zeichen rendern können?
(char-to-string ?\uFEFF)
und das andere ist ein Zielzeichen, das verkleinert wird Größe so passen sie beide. Eine andere Idee wäre, ein vertikales Durchgestrichen zu verwenden (in einigen Schriften verfügbar , aber nicht in allen), ähnlich dem, was in der Bibliothekvline.el
emacswiki.org/emacs/VlineMode