時々、私は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)))