10

質問:私の Emacs バリアントが OS 固有のデスクトップ機能を使用している場合、Emacs で GUI ベースの操作を行うための Mx に相当するコマンドを見つけるにはどうすればよいですか?

背景:従来の理解では、Emacs のすべてがコマンドであり、コマンドの名前を知っている限り、Mx を介してコマンドを呼び出すことができるとされています。このステートメントが正しいと仮定すると、「デスクトップ」ベースの Emacs バリアントで「GUI スタイル」メニューをトリガーするために使用されるコマンドの名前を見つける方法は何ですか?

たとえば、[ファイル] メニューをマウスで選択してファイルを開くと、OS 固有の "GUI" スタイルのファイルを開くダイアログが表示され、入力を待ちます。

まったく同じことを行うための Mx 同等のコマンドを見つけるにはどうすればよいですか?

describe-key は、私が知る必要があることを教えてくれると思いましたが、使用する指標です:

M-x menu-find-file-existing

「GUI」スタイルのファイルを開くダイアログを呼び出しません。代わりに、Emacs 内部の非 GUI OS 中立バリアントを使用します。

4

2 に答える 2

8

Emacs をだましてキーボードが使用されていないと思わせる必要がありますが、これはマウス使用されたと思わせるほど直感的ではありません。:)

(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))

WinXP 上の Emacs 22.2.1 でテスト済み。ただし、このパラダイムはしばらく前からあると思いますので、古い Emacs でも動作するはずです。XEmacs が同様に動作するかどうかはわかりません。

于 2008-12-24T14:51:06.447 に答える
3

うわー、私はあなたがそれを聞いてうれしいです。私はしばらくの間、自分で調べようと思っていました。

C-h k続いてメニューを選択すると、これがわかります。たとえば、メニュー/編集/貼り付けを選択すると、次のようになります。

<menu-bar> <edit> <paste> コマンドを実行します clipboard-yank
  これは `menu-bar.el' 内のインタラクティブにコンパイルされた Lisp 関数です。
<paste>、<f18>、<menu-bar> <edit> <paste> にバインドされています。
(クリップボード-ヤンク)
クリップボードの内容、またはキルされたテキストの最後のストレッチを挿入します。

詳細が必要な場合はmenu-bar-el、LISP ソースへのリンクをたどってください。

(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))))
于 2008-12-24T01:57:18.490 に答える