emacsのelispで作ってみた。改善編|編集画面にLinuxコマンドの結果を貼り付け

| コメント(0) | トラックバック(0)

前回からの続き、そもそもshell-commandshell-command-to-stringを使えば

  意味ないよね

終わり・・・・・ orz

マニュアルをもっと見ておけば良かった\(^o^)/

と言う訳じゃもったいないので、改善をしてみました。

今、反省はしている・・・・・

前回:emacsのelispで作ってみた。編集画面にLinuxコマンドの結果を貼り付け

elispソース

(defvar shell-path "/bin/bash")

(defun cmd (command )
  (setq cmdbuf "*command buffer*" )
  (setq resbuf "*command result buffer*" )
  (setq res "" )

  ;現在のバッファを固定、下のフォームを実行
  (save-current-buffer
    ;current-bufferに切り替え   (buffer を作成)
    (set-buffer (get-buffer-create cmdbuf))
    ;コマンド貼付け
    (insert command) 
    ;コマンド実行, resbufに結果入れる
    (call-process-region
     (point-min)  ;start
     (point-max)  ;end
     shell-path   ;program
     nil          ;delete
     resbuf       ;destination
     )

    ;resbufに切り替え
    (set-buffer resbuf)
    ;res に結果格納 (文字のみ
    (setq res (buffer-substring-no-properties (point-min) (point-max)))

    ;kill-buffer
    (kill-buffer cmdbuf)
    (kill-buffer resbuf)

    )

  res)

;;inscmd
;;
(defun ic (command )
  (insert (cmd command))
)

使い方

前回同様

  • 1.eval起動

    M-:
    
  • 2.コマンドを書く

    (ic "echo hoge fuga bar foo bar baz")
    
  • 3.コードが張り付く!

おわり

今回のきっかけは、tmuxとの連携がしたかったので その調査段階でlinuxコマンド貼りつければ便利だなと思った次第でした。

(cmd "tmux show-buffer ")
(cmd "tmux list-buffer ")
(cmd "tmux set-buffer -b 0 \"hoge\" ")
(cmd "tmux show-buffer ")

上記の感じで、tmuxとのバッファ共有ができます。

あとは(defadvice kill-region ~ほげほげ~などを書くだけでできそうな予感!

今回のコードはもっと簡単にすると、下記

;;inscmd
;;
(defun ic (command )
  (insert (shell-command-to-string command))
)

関連記事

トラックバック(0)

トラックバックURL: http://mukaer.com/cgi-bin/mt/mt-tb.cgi/65

コメントする

PR

PR





検索

Loading

メニュー

twitter