時々、私はEmacsコマンドの結果(エコー領域にエコーされた)を他のバッファまたは実行中の他のXプログラムに挿入したいと思います。だからキリングリングに入れたかったです。これを行う便利な方法は何ですか?
たとえば、diredモードでシェルコマンドを使用して、次のクエリを実行できます(!rpm -qf
ディレクトリリストで選択したファイルを所有するパッケージを見つける)。その後、結果を別の場所に挿入しようとします。
または別の例:現在のバッファのファイル名が必要な場合(例:バッファのファイル名を簡単に「インポート」できるユーザーインターフェイスはEmacsにありますか?)、まだ事前定義されたコマンドはありません。少なくともこれを実行しM-:(buffer-file-name)
てから、この一般的な方法を使用して後で貼り付けるために、表示された結果をキリングにコピーできます。 (もちろんevalを行うこともできますが(kill-new (buffer-file-name))
、ここの例は私が探している結果を得るための一般的なアプローチを示すことです)。
答え1
C-u
結果をエコー領域に送信する代わりに結果を挿入するには、前にまたはを入力します。M-:
M-!
キリングリングに直接物を入れるには、Elispを使ってみてください。次のもの(テストされていません):
;;; kill ring version of M-!
(defun shell-command-to-kill-ring (command)
(interactive
(list
(read-shell-command "Shell command: " nil nil
(let ((filename
(cond
(buffer-file-name)
((eq major-mode 'dired-mode)
(dired-get-filename nil t)))))
(and filename (file-relative-name filename))))
current-prefix-arg
shell-command-default-error-buffer))
(kill-new (shell-command-to-string command)))
;;; kill-ring version of M-:
(defun eval-expression-to-kill-ring ()
(interactive)
(call-interactively 'eval-expression)
(kill-new (car values)))
答え2
メッセージ領域にエコーされたすべてのメッセージはバッファに保存されるので、バッファ*Messages*
(C-h e
、、view-echo-area-messages
)に切り替えて必要なものを選択します。
現在のバッファに依存しない式の値を取得したい場合は、バッファに切り替えることもできます*scratch*
。式を入力してC-j
(eval-print-last-sexp
)を押します。
答え3
geekosaurのソリューションを少し改善しました。このメソッドは、式が文字列ではないと評価されても正しく実行されます。
(defun c5-eval-to-kill-ring ()
(interactive)
(kill-new (with-output-to-string (princ (call-interactively 'eval-expression)))))
(global-set-key (kbd "C-;") 'c5-eval-to-kill-ring)