Emacs Lisp の小さい関数
spec_helper.rb を探す
(defun rspec-search-spec-helper ()
(let ((dir "."))
(if (string-match-p "/spec/" (expand-file-name dir))
(progn
(catch 'not-find
(while (not (member "spec_helper.rb" (directory-files dir)))
(setq dir (concat dir "/.."))
(let (name (file-name-nondirectory (expand-file-name dir)))
(when (string= "spec" name)
(setq dir nil)
(throw 'not-find)))))
(if dir
(replace-regexp-in-string "^\." "" (concat dir "/spec_helper"))
nil))
nil)))
次のように yasnippet で使っている。
# -*- mode: snippet -*-
# name: spec_template
# --
require File.expand_path(File.dirname(__FILE__) + '`(or (rspec-search-spec-helper) "/spec_helper")`')
describe ${1:SomeClass} do
$0
end
ruby の開発用の C style
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Emacs などに書いてある。
;; c style for developing ruby
(c-add-style "ruby" '("bsd"
(c-basic-offset . 4)
(c-offsets-alist (case-label . 2)
(label . 2)
(statement-case-intro . 2)
(statement-case-open . 2))))
としておき、「M-x c-set-style」で “ruby” を選択すれば良い。
imenu for markdown-mode
markdown-mode の見出しを imenu で表示するための関数を作った。 単純に行頭が # で始まった行を抜き出しているので、 対応していない記法がある。
(autoload 'markdown-mode "markdown-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.\\(md\\|markdown\\)$" . markdown-mode))
(defun markdown-create-imenu-index ()
(let ((index)
(pattern "^#+ "))
(save-excursion
(goto-char (point-min))
(while (re-search-forward pattern (point-max) t)
(push (cons (buffer-substring-no-properties (line-beginning-position) (line-end-position))
(match-beginning 0)) index))
(nreverse index))))
(add-hook 'markdown-mode-hook
'(lambda ()
(setq imenu-create-index-function 'markdown-create-imenu-index)))
dired で隠しファイルの表示を切り替える
(setq dired-listing-switches "-lh")
(defun dired-toggle-showing-hidden-files ()
(interactive)
(if (string= dired-actual-switches "-lah")
(progn
(setq dired-actual-switches "-lh"))
(setq dired-actual-switches "-lah"))
(when (eq major-mode 'dired-mode)
(revert-buffer)
(goto-char (point-min))
(while (and (not (dired-move-to-filename)) (not (eobp)))
(forward-line 1))))
一部は http://d.hatena.ne.jp/sr10/20110502/1304327293 を参考にした。