Frage
Ich möchte eine Benutzeroberfläche in Form eines Popup-Menüs erstellen , ein Popup-Menü ähnlich dem in Magit verwendeten .
Eigenschaften
Definition von Popup
Popup im Kontext dieser Frage bedeutet ein kleines temporäres Fenster, das eine Sammlung von Menüelementen enthält, sodass der Benutzer nur eines dieser Elemente auswählen kann.
Position auf dem Bildschirm
Das Popup darf in jedem Teil des Bildschirms angezeigt werden, es ist jedoch wünschenswert, dass es ganz offensichtlich ist und daher neben dem derzeit aktiven Fenster angezeigt wird.
Inhalt des Popup-Puffers
Elemente sollten in Form einer hübschen Tabelle angezeigt werden. Hübsch ist der Kontext der Frage bedeutet optisch ansprechend, dieser Effekt kann am einfachsten erzielt werden, indem Menüpunkte in gerade Reihen gesetzt werden, siehe
complete--insert-string
zum Beispiel. Dieser Absatz dient der zusätzlichen Klarstellung. Sie können dies auf Ihre eigene Weise tun. Dadurch wird Ihre Antwort nicht falsch.
Auswahl des Menüpunktes
Die Auswahl wird voraussichtlich durch einmaliges Drücken einer Taste oder optional mit einer Maus durchgeführt (obwohl dies nicht so wichtig ist, sind Antworten mit Aussagen, die keine Maus unterstützen, legal). Wenn Sie eine Lösung vorschlagen, die Maus unterstützt, beachten Sie bitte, dass der Benutzer in der Lage sein sollte, einen Menüpunkt auf intuitive Weise auszuwählen, dh indem Sie mit der linken Maustaste auf die gewünschte Auswahl klicken.
NB Maus kann auf viele Arten verwendet werden und alternative Möglichkeiten, um eine Auswahl anzuzeigen, sind ebenfalls willkommen.
Beseitigung von Popup
Sobald der Benutzer einen Menüpunkt auf die oben beschriebene Weise ausgewählt hat, sollte der Puffer und damit sein Fenster nicht mehr angezeigt und nicht mehr angezeigt werden. Das Fenster, das vor dem Aufrufen des Popup-Menüs aktiv war, sollte wieder fokussiert werden (dh aktiv werden).
Rückgabewert und Argumente
Vorzugsweise sollte diese Konsequenz von Aktionen dazu führen, dass ein Lisp-Objekt zurückgegeben wird. Das Lisp-Objekt kann entweder:
nil
- Dies zeigt an, dass der Benutzer das Popup-Menü entweder durch Drücken C-goder auf andere Weise abgebrochen hat †.string
- Zeichenfolge (es darf ein Symbol verwendet werden) solltestring-equal
eine der Zeichenfolgen sein, die im Popup-Menü als Sammlung der tatsächlichen Elemente angegeben sind.
Alternative Möglichkeiten, den Rest des Programms über die Wahl des Benutzers oder möglicherweise über dessen Abwesenheit zu informieren, sind akzeptabel. Wenn jedoch nicht klar ist, wie es sonst durchgeführt werden kann, bitte ich alle Antwortenden, zu improvisieren, und bitte mich nicht um weitere Klärung dieses Aspekts.
Dies ist alles für den zurückgegebenen Wert. Die Eingabeparameter sollten mindestens eine Sammlung von Zeichenfolgen enthalten, die mögliche Auswahlmöglichkeiten darstellen (dh Menüelemente).
Akzeptable Antworten
Die erwartete Antwort kann folgende Formen annehmen:
Ausreichendes Code-Snippet, mit dem gebildete Leser Funktionen wie die oben beschriebene schreiben können; Es ist nicht zu erwarten oder notwendig, die gesamte Arbeitsfunktion zu schreiben. Um jedoch Unsicherheiten zu vermeiden (können erhebliche Teile des Codes weggelassen werden?), Sollte ich beachten, dass fehlende Teile des Snippets in der Textkomponente der Antwort beschrieben werden sollten.
Ein Link zu einer vorhandenen Bibliothek, die ähnliche Funktionen implementiert. Um Unsicherheiten zu vermeiden, sollte ich beachten, dass in unserem Fall ähnlich bedeutet, dass die Bibliothek zum Erstellen von Popups (siehe Definition oben) verwendet werden kann, die mindestens zwei oder drei oben beschriebene Funktionen aufweisen. Wenn sich die vorgeschlagene Bibliothek von dem Punkt unterscheidet, an dem die zuvor angegebene Bedingung nicht erfüllt werden kann, wird jeder dieser Fälle unabhängig beurteilt und immer bewertet, wenn OP dies für nützlich hält.
Beschreibung der integrierten Emacs-Funktionen oder Funktionen von Drittanbietern, mit denen alle im Abschnitt «Funktionen» beschriebenen Funktionen implementiert werden können, siehe oben. Um zu vermeiden , Unsicherheit, bitte angeben klar , wie Ihre Antwort kann für zukünftige Leser nützlich sein , die implementieren möchten Popup , Popup - Menü ähnlich dem in Magit verwendet .
† Alternative Möglichkeiten zum Abbrechen des Popup-Menüs können Folgendes sein (sind jedoch nicht darauf beschränkt):
Klicken außerhalb des Popup-Menüfensters;
Töten des Puffers, der das Popup enthält, ohne eine Wahl zu treffen.
magit-popup
. Das neue Paket heißttransient
und wird in aktuellen Versionen von verwendetmagit
. Dokumentation finden Sie unter magit.vc/manual/transient .