emacsでコードを書いているとき、ls
やcat
の結果を
編集画面に貼付けできればな~と思って作ってみた。
call-process
のオプション項目が多いのですぐ忘れます・・・
※追記 2012-03-22
C-u M-!
を利用すればできる!
コメントでご指摘ありがとうございました!
使い方
1.eval起動
M-:
2.コマンドを書く
(ic "ls" )
3.結果が勝手に張り付きます。
オプションを利用したい場合
(ic "ls" "-a")
ダメな例1、文字列1つにすると動きませぬ・・・
(ic "ls -a")
ダメな例2、引数を5個使うと動きませぬ・・・・・
(ic "echo" "hoge" "fuga" "foo" "bar" "baz")
elispソース
(defun cmd (command &optional op1 &optional op2 &optional op3 &optional op4)
"linux command"
(setq buffername "command-buffer" )
(setq res "" )
(let (
(oldbuf (current-buffer))
)
;現在のバッファを固定、下のフォームを実行
(save-current-buffer
;curettn-bufferに切り替え (buffer を作成)
(set-buffer (get-buffer-create buffername))
(cond
(op4
(call-process command nil buffername nil op1 op2 op3 op4))
(op3
(call-process command nil buffername nil op1 op2 op3))
(op2
(call-process command nil buffername nil op1 op2))
(op1
(call-process command nil buffername nil op1))
(t
(call-process command nil buffername nil ))
)
;buffer内容取得
(setq res (buffer-string))
;buffe kill
(kill-buffer buffername)
))
res
)
;;inscmd
;;
(defun ic (command &optional op1 &optional op2 &optional op3 &optional op4)
(insert (cmd command op1 op2 op3 op4 ))
)
終わり
簡単に結果が張り付くのは便利だ!!
今後のTODO
- 文字列を1つでも動くように。
- 引数の制限解除
引数は何とかしたいけど call-process
の&rest
の受け渡し方法がわかりませぬ・・・
次はTODOをなおしたい! かも・・・
C-u M-!
としてコマンドを打ち込めばカレントバッファに
結果を展開することができます。
また call-processでなく call-process-shell-command
を使えばコマンドを文字列として渡させるので、
引数の数を気にする必要はなくなります。
> syohex さん
お教えありがとうございます!
universal-argumentとshell-commandを使えばできたのですね・・・