10 Stimmen

Emacs M-x Befehle zum Aufrufen von "GUI-ähnlichen" Menüs

Pregunta: Wie kann ich die M-x-äquivalenten Befehle für GUI-basierte Operationen in Emacs herausfinden, wenn meine Emacs-Variante OS-spezifische Desktop-Funktionen verwendet?

Hintergrund: Nach herkömmlichem Verständnis ist alles in Emacs ein Befehl, und Befehle können über M-x aufgerufen werden, solange man den Namen des Befehls kennt. Angenommen, diese Aussage ist richtig, wie kann man den Namen der Befehle finden, die zum Auslösen der "GUI-artigen" Menüs in einer "Desktop"-basierten Emacs-Variante verwendet werden?

Wenn ich z. B. mit der Maus das Menü "Datei" auswähle, um eine Datei zu öffnen, erscheint das OS-spezifische "GUI"-Dialogfeld zum Öffnen einer Datei und wartet auf meine Eingabe.

Wie kann ich den äquivalenten M-x-Befehl herausfinden, mit dem ich genau dasselbe tun kann?

I Gedanken dass der Beschreibungsschlüssel mir sagt, was ich wissen muss, aber er ist ein Hinweis auf die Verwendung:

M-x menu-find-file-existing

ruft nicht den "GUI"-ähnlichen Datei-Öffnen-Dialog auf. Stattdessen verwendet es die Emacs-interne, nicht GUI-OS-neutrale Variante.

8voto

Joe Casadonte Punkte 14548

Sie müssen Emacs überlisten, damit er denkt, dass die Tastatur nicht benutzt wird, was nicht so intuitiv ist, wie ihm vorzugaukeln, dass die Maus war benutzt. :)

(defadvice find-file-read-args (around find-file-read-args-always-use-dialog-box act)
  "Simulate invoking menu item as if by the mouse; see `use-dialog-box'."
  (let ((last-nonmenu-event nil))
    ad-do-it))

Getestet mit Emacs 22.2.1 unter WinXP. Ich glaube, das Paradigma gibt es schon eine Weile, also sollte es auch mit älteren Emacs funktionieren. Keine Ahnung, ob XEmacs ähnlich funktioniert oder nicht.

4voto

Charlie Martin Punkte 106684

Wow, ich bin froh, dass du das gefragt hast. Ich wollte schon seit einer Weile selbst nachschlagen.

C-h k gefolgt von der Menüauswahl wird Ihnen dies angezeigt. Hier sehen Sie zum Beispiel, was Sie erhalten, wenn Sie Menü/Bearbeiten/Einfügen wählen:

<menu-bar> <edit> <paste> runs the command clipboard-yank
  which is an interactive compiled Lisp function in \`menu-bar.el'.
It is bound to <paste>, <f18>, <menu-bar> <edit> <paste>.
(clipboard-yank)
Insert the clipboard contents, or the last stretch of killed text.

Wenn Sie die Einzelheiten erfahren möchten, folgen Sie dem Link für menu-bar-el zur LISP-Quelle:

(defun menu-find-file-existing ()
  "Edit the existing file FILENAME."
  (interactive)
  (let* ((mustmatch (not (and (fboundp 'x-uses-old-gtk-dialog)
                  (x-uses-old-gtk-dialog))))
     (filename (car (find-file-read-args "Find file: " mustmatch))))
    (if mustmatch
    (find-file-existing filename)
      (find-file filename))))

0 Stimmen

Wenn ich mich nicht irre, ist M-x describe-key äquivalent zu Emacs Standard C-h k. Es ist großartig zu wissen, dass es mehr als nur Tastenbelegungen beschreiben kann. Leider scheint es keine GUI-spezifischen Variationen zu beschreiben, um OS-spezifische Dialoge auszulösen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X