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 を参考にした。

Tags of current page

, ,