年末Emacs整理

「問題発見と解決」の問題が一向に解決するきざしを見せないので、現実逃避気味に。これで安心して次の年を迎えることができますね。

scratch

scratchは僕等のメモ帳、というかとりあえずなんだかんだを書くのに便利。例えば

  • 簡単Perlスクリプトを書いたり
    • ファイルには保存しないで、scratchバッファで実行。名前を考えなくていいから気軽にできる
  • Rのちょこちょこ計算させたりとか

などなど。とにかく名前考えなくていいってところがストレスを減らしてくれてよい。そんなscratchを便利にするためのelisp。

  • scratchバッファのディフォルトの状態を何も書いてない状態にする
  • scratchバッファを保存とかしてしまったら、自動的にまた新しいscratchバッファを作る

などである。特に2つめ重要。

(setq initial-scratch-message "")

(defun my-make-scratch (&optional arg)
  (interactive)
  (progn
    ;; "*scratch*" を作成して buffer-list に放り込む
    (set-buffer (get-buffer-create "*scratch*"))
    (funcall initial-major-mode)
    (erase-buffer)
    (when (and initial-scratch-message (not inhibit-startup-message))
      (insert initial-scratch-message))
    (or arg (progn (setq arg 0)
                   (switch-to-buffer "*scratch*")))
    (cond ((= arg 0) (message "*scratch* is cleared up."))
          ((= arg 1) (message "another *scratch* is created")))))

(defun my-buffer-name-list ()
  (mapcar (function buffer-name) (buffer-list)))

(add-hook 'kill-buffer-query-functions
    ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
          (function (lambda ()
                      (if (string= "*scratch*" (buffer-name))
                          (progn (my-make-scratch 0) nil)
                        t))))

(add-hook 'after-save-hook
;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
          (function (lambda ()
                      (unless (member "*scratch*" (my-buffer-name-list))
                        (my-make-scratch 1)))))

iswitchb-mode

バッファの切替え。ないと非常不便。ディフォルトのバッファの切替えはやりづらい。

;; iswitchb-mode
(iswitchb-mode t)

kill-summary

killしたやつの履歴が見れる。M-kill-summaryってやればよい。C-yやったあとにM-yでさかのぼる手間が省けて非常によい。そのバッファをインクリメンタルサーチとかできて、さらによい。

(autoload 'kill-summary "kill-summary" nil t)

session

kill-ringとかミニバッファで開いた内容を覚えとくもの。zshのhistoryとかないと生きていけない人は是非入れるべき。

(require 'session)
(add-hook 'after-init-hook 'session-initialize)

;;; session.el の設定
;; kill-ringやミニバッファで過去に開いたファイルなどの履歴を保存する
(when (require 'session nil t)
  (setq session-initialize '(de-saveplace session keys menus places)
        session-globals-include '((kill-ring 50)
                                  (session-file-alist 500 t)
                                  (file-name-history 10000)))
  ;; これがないと file-name-history に500個保存する前に max-string に達する
  (setq session-globals-max-string 100000000)
  ;; デフォルトでは30!
  (setq history-length t)
  (add-hook 'after-init-hook 'session-initialize)
  ;; 前回閉じたときの位置にカーソルを復帰
  (setq session-undo-check -1))