Autocomplete auf Desktop-Ebene

11

Ich tippe oft dieselben Wörter in mehreren Anwendungen:

  • Herausgeber (emacs, vi)
  • Webbrowser
  • Muscheln

Es wäre großartig, wenn eine automatische Vervollständigung der Wörter, die ich in der letzten Woche eingegeben habe, in allen oben genannten Anwendungen verfügbar wäre.

Jeder von ihnen hat eine Möglichkeit, die Schreibgeschwindigkeit zu verbessern. Aber etwas auf Desktop-Ebene wäre das Beste.

Beispiel: "Kontinuierliche Integration". Ich möchte einen schnellen Weg, um dieses Wort einzugeben, ohne das Programm zu ändern, das die Eingabe empfängt.

Gibt es so etwas schon?

guettli
quelle
Soetihng wie Synapse ( lifehacker.com/5704221/… )?
Salem
Ich denke, sie bedeuten so etwas wie die automatische Vervollständigung von LibreOffice. Es speichert Wörter, die Sie eingeben (die eine anpassbare Längenanforderung erfüllen). Wenn Sie die ersten Buchstaben eines gespeicherten Wortes eingeben, können Sie den Rest eingeben. Sie können die Tabulatortaste drücken, um es einzugeben, oder weiter tippen, um es abzulehnen.
Andy Castille

Antworten:

7

Die Lösung für Ihre Anfrage ist die Eingabemethode.

Was Sie beschrieben haben, ist den meisten CJK-Sprachbenutzern vertraut. Lassen Sie uns überprüfen, wie die Eingabemethode in aktuellen Linux-Systemen funktioniert.

Das Eingabemethodensystem

Hier ist eine einfache Architektur für ein gängiges Eingabemethodensystem:

HINWEIS: Ich habe dieses Bild aus dem X Input Method Protocol aufgenommen . Einige der Pfeile sind für die folgende Diskussion irrelevant.

In der Vergangenheit war XIM (das Protokoll der X-Eingabemethode) das einzige Protokoll. Es ist zu komplex und es fehlen einige gewünschte Funktionen. Daher wird es größtenteils aufgegeben, obwohl die Kompatibilität immer noch von beliebten Toolkits wie GTK, Qt bereitgestellt wird.

Ein modernes Eingabemethodensystem besteht aus mehreren Teilen:

  1. Client-seitige Bibliotheksunterstützung

    • Wird normalerweise als Modul implementiert, das von Toolkits geladen wird (z. B. für GTK, siehe /usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/).
  2. Eingabemethodenserver
  3. X Server

Wie passen diese Teile zusammen?

Ein Benutzer gibt einen Schlüssel ein. Der X-Server empfängt das Hardware-Ereignis von der evdev-Schnittstelle, erstellt ein XEvent und sendet es unter Tastaturfokus an die Anwendung. Das Eingabemethodenmodul des Application Toolkit (GTK, Qt) fängt das Ereignis ab und übergibt die Informationen an den Eingabemethodenserver. Der Eingabemethodenserver stellt fest, was der Benutzer möchte, und gibt Text an das IM-Modul zurück.

Lassen Sie uns nun über die Architektur des IM-Servers sprechen.
Ein IM-Server besteht normalerweise aus zwei Teilen:

  1. Ein IM-Framework, das plattformspezifische Komplikationen behandelt und eine schöne Schnittstelle zu IM-Modulen und IM-Modulen des Toolkits bietet. Es bietet die IPC-Mechanismen, die vom IM-Modul, Server und der Engine verwendet werden.
  2. Verschiedene IM-Engines erledigen die eigentliche Arbeit, um vom Benutzer eingegebene Schlüssel in den gewünschten Text umzuwandeln. IM-Engines können gemeinsam genutzte Bibliotheken sein, die vom IM-Server geladen werden, oder unabhängige Prozesse, die mit dem IM-Server kommunizieren.
  3. Konfigurationsprogramme für zusätzliche Eingabemethoden bieten eine benutzerfreundliche Oberfläche zum Anpassen des IM-Servers und des Engine-Verhaltens.

Alles in allem besteht ein IM darin, Ihre Eingabe in etwas anderes umzuwandeln und optional Vorhersagen zu treffen.

Ein Beispiel

Wir verwenden ibus-pinyinhier einige chinesische Schriftzeichen.

Die Romanisierung von 汉语拼音 ist han yu pin yin. Zuerst müssen Sie alle diese Buchstaben eingeben, um die vier chinesischen Schriftzeichen zu erhalten. Nach einigen Malen müssen Sie nur noch die vier Anfangszeichen eingeben h y p y, um das chinesische Zeichen zu erhalten.

In dem ibus-pinyinFall han yu pin yinwird auf gekürzt h y p y.
Fortgeschrittenere IM-Engines verwenden statistische Lerntechniken, um eine bessere Vorhersage zu ermöglichen. Nichts kann Sie davon abhalten, eine englische Eingabemethode zu schreiben, um einen Tippschub zu erzielen.

Als Bonus unterstützen alle Toolkits Eingabemethoden mit Ausnahme einiger einfacher alter X-Programme. Das ist also eine ziemlich universelle Lösung.


Vielen Dank an Anders FU Kiær. Features / Typing-Booster | Fedora Project Wiki sollte die Antwort sein

sgx1
quelle
1
Das am häufigsten verwendete IM-Framework ist ibus . Wenn ich Zeit habe, werde ich daran arbeiten, eine IM-Engine zu schreiben, um das zu tun. Jeder kann es versuchen und einen Link hinterlassen, wenn Sie einen Proof-of-Concept-Code haben.
SGX1
Ihre Antwort ist die beste. Ich gebe dir das Kopfgeld :-)
Guettli
3

Schauen Sie sich mein Skript TextSuggest an .

In Aktion:

Imgur

Installation:

Installieren Sie die folgenden Pakete:

  • xdotool
  • xclip
  • suckless-tools(für dmenu)

Weisen Sie dann 2 Tastaturkürzel zu:

  • eine zu `python3 /path/to/TextSuggest.py --noselect
  • der andere zu python3 /path/to/TextSuggest.py

Der erste liefert einfach eine durchsuchbare Liste aller Wörter. Verwenden Sie die zweite Option, wenn Sie Text ausgewählt haben und Vorschläge / Vervollständigungen dafür erhalten möchten.

Die akzeptierten Vorschläge werden als Verlauf in der Datei gespeichert (und dann zuerst vorgeschlagen) ~/.textsuggest_history.txt.

Sie können benutzerdefinierte Wörter und Erweiterungen / Aliase unter definieren ~/.Custom_Words.txt.

UniversallyUniqueID
quelle
0

Schauen Sie sich Autokey an . Es könnte Ihren Bedürfnissen entsprechen. C / P von ihrer Website:

AutoKey ist ein Desktop-Automatisierungsprogramm für Linux und X11. Sie können die Sammlung von Skripten und Phrasen verwalten und diesen Abkürzungen und Hotkeys zuweisen. Auf diese Weise können Sie ein Skript ausführen oder bei Bedarf Text in das von Ihnen verwendete Programm einfügen.

Detnuomnu
quelle