persp-mode を設定してみた(ついでに helm も)

えー、今回は common lisp のコードを書こうと思ったらキーバインドが気になって、init.el を編集してるうちに elisp パッケージ探しに走ってしまい、気が付いたらリファレンスを見ながら elisp を書いていたという yak shaving の最たるものになってしまいました。
なので、せめて動いたコード片だけでも載せておこうと思います。

以下は persp-mode で新規パースペクティブを作成した時(厳密にはバッファがないパースペクティブに切り替えた時)にバッファを選択して登録する設定です。
毎度おなじみ rubikitch 様のサイトからコピーして、四苦八苦しながら希望する動作になるよう改造(改悪?)しました。
ホント、いつもお世話になってます。密度の濃い情報ありがとうございます。 > rubikitch 様
設定した persp-mode のバージョンは 20161226.2218 です。

;;; persp-mode 設定
(setq persp-add-on-switch-or-display t)
(persp-mode 1)
;;; 新規パースペクティブ作成時に追加するバッファを選択する
(defun persp-register-buffers () ; 関数名変更
  (interactive)
  (dolist (bufname (condition-case _
                       (helm-comp-read
                        "Buffers: "
                        (mapcar 'buffer-name (buffer-list))
                        :must-match t
                        :marked-candidates t)
                     (quit nil)))
    (persp-add-buffer (get-buffer bufname))))
;; ここから追加分
(defun persp-register-buffers-if-empty (mode)
  (interactive)
  (if (null (persp-buffer-list)) ; パースペクティブのバッファが空の時だけ
      (persp-register-buffers))) ; 上のバッファ選択関数を呼ぶ
(add-hook 'persp-activated-functions 'persp-register-buffers-if-empty) ; フック名が変わった?

それから、persp-mode 用の helm アクションも見様見真似で作ってみました。
いちおう動いているようですが、使用は自己責任でお願いします。

(defun helm-persp-add-buffer (buffer-or-name)
  (persp-add-buffer (helm-marked-candidates)))
(defun helm-persp-kill-buffer (buffer-or-name)
  (persp-kill-buffer (helm-marked-candidates)))
(setq helm-type-buffer-actions
      (append helm-type-buffer-actions
              '(("Add buffer(s) to perspective" . helm-persp-add-buffer)
                ("Kill buffer(s) from perspective." . helm-persp-kill-buffer))))

以上です。

How to add elisp library on Debian

突然ですが Emacs 紹介のページで rainbow-delimiters という「対応する括弧を色付けする」elisp を見付けました。
これは早速入れるべしという事で、まずはパッケージを探したのですが案の定そんなパッケージは存在せず、泣きながら(←誇張)手動でインストールとなりました。

で、「どうせだからパッケージと同じようにシステムにインストールしよう」と(いつもと同様)唐突に思い立ち、なんとか目的を達成したのでメモしておきます。

なお、フォルダのパーミッションの都合上、以下の作業は root で行いました。
手順は windows-el パッケージを参照させて頂きました。メンテナの方に感謝です。

  1. まずは elisp ファイルをダウンロードします。しないと話が始まりません。
  2. それを /usr/share/emacs/site-lisp/ 以下に置きます。今回は 1ファイルだったのでグループ化しませんでしたが、複数ファイルの場合はフォルダを掘って入れるのが良いようです。
  3. 続いて、元と同様のフォルダ構造で /usr/share/?flavor?/site-lisp/ 以下に elisp ファイルへの symlink を張ります。「?flavor?」の部分には実際の emacs の名前を入れてください。今回は「emacs24」でした。
  4. いよいよバイトコンパイルの時間です。symlink したファイル群に対して「emacs24 -batch -q -no-site-file -f batch-byte-compile elispファイル名」を叩いてください。「emacs24」の部分は環境に合わせて読み替えて下さい。(当然ながら作業フォルダは symlink 先だった  /usr/share/?flavor?/site-lisp/ 以下ですよ)
    コンパイル時に別ファイルを読ませる必要があれば「-l ファイルパス」(←小文字のエルです。アイでも1でもありません)をコマンドラインに追加すればいいようです。
  5. 最後に /etc/emacs/site-start.d/ に、ライブラリ読み込み用の設定ファイルを作成します。今回は 50windows-el.el70rainbow-delimiters.el にコピーさせてもらって、ちょこっと編集して使いました。
    基本的には元の elisp ファイルの存在を確認した後で emacs の load-path に追加して、require しているようでした。
    1ファイルしか無い今回は load-path 設定の部分をコメントアウトして require だけにしましたが、動作したので OK ということで。

これでシステムワイドにライブラリを読み込んでくれるので、後は個人設定で add-hook するなり global-rainbow-delimiters-mode で常に ON にするなり、好きなように料理できます。

いやぁ、今日の思い付きは短時間で済んだので本人もびっくりです。持つべきものは「バラせる(←ここ重要。テストに出ます)既存品(つまり windows-el パッケージ)」ですね。