term+のセッションをhelmで選択
第6回関西emacs勉強会(http://peccu.sytes.net/ke/)で紹介されたterm+.el(taraoさん作Emacs上のターミナルを最強に: term+.el - 貳佰伍拾陸夜日記)。
めちゃくちゃ便利で日頃から使わせてもらってる。
helmで表示されるbuffer-listからいつもセッションを選択していたのだが...sessionリストだけから、helmで選択したいなと思い、作ってみました。
popwinを内部で使ってるのでpopwinを入れてないとhelm-source-term+-new-sessionは動かないです...
ふぅ~これでさらに便利になった。taraoさんには感謝です。
sessionを新たに開いた場合にother-windowやpopupで開くのに苦労した...
"open session in popup window"と"open session in other window"はうまく動かない環境があるかもしれません...
誰かもっとうまい実装法があれば...教えてください...教えてエロい人!
2013/3/24追記 term+mux-new-other-windowって関数がいつのまにか追加されてたらしい。それを使うように変更。
必要elisp
1. term+
2. helm
3. popwin
(defun helm-term+-sessions () (interactive) (helm-other-buffer '(helm-source-term+-sessions helm-source-term+-new-session ) "*helm-term+-sessions*")) (defvar helm-source-term+-new-session '((name . "Create new session") (dummy) (action . (("open session" . (lambda (name) (when (eq name "") (setq name system-name)) (term+mux-new (term+mux-new-session name)))) ("open session in popup window" . (lambda (name) (popwin:popup-buffer (current-buffer)) (when (eq name "") (setq name system-name)) (term+mux-new (term+mux-new-session name)) )) ("open session in other window" . (lambda (name) (when (eq name "") (setq name system-name)) (term+mux-new-other-window (term+mux-new-session name)) )))))) (defvar helm-source-term+-sessions `((name . "term+-session") (candidates . (lambda () (helm-term+-session-list))) (type . buffer) (match . helm-buffer-match-major-mode) (persistent-action . helm-buffers-list-persistent-action) (keymap . ,helm-buffer-map) (volatile) (mode-line . helm-buffer-mode-line-string) (persistent-help . "Show this buffer / C-u \\[helm-execute-persistent-action]: Kill this buffer"))) (defun helm-term+-session-list () "Return the current list of term+ sessions. Currently visible buffers are put at the end of the list. See `ido-make-buffer-list' for more infos." (require 'ido) (let ((ido-process-ignore-lists t) ido-ignored-list ido-use-virtual-buffers term-lists) (dolist (buffer (ido-make-buffer-list nil) term-lists) (when (string-match "^term:" buffer) (setq term-lists (append term-lists (list buffer)))))))