hatenahelper-mode に追加している機能
僕は hatenahelper-mode に以下の2つの機能を追加して使っている。
- スーパープレ記法の挿入を支援する機能
- C-c s したときに、>|ruby| などが簡単に挿入できる
- 例えば C-c s r とすれば >|ruby| が、C-c s j とすれば >|javascript| を挿入する
- http 記法を挿入する機能
- C-c [ で http 記法を挿入する
- C-c [ t で :title を入れて挿入することもできる
- クリップボードに URL がコピーされている場合は、自動的にそれに置き換わる。そうでなければ URL の部分は空になる
僕はスーパープレ記法も http 記法もよく使うので、この2つで若干効率がアップしてます。
なお、このスクリプトはhttp://www.geocities.jp/emacsjjjj/hatedara/にある hatedara.el の hatedara-insert-tag 関数を参考にしています。
(add-hook 'hatenahelper-mode-hook '(lambda() (define-key hatenahelper-mode-map "\C-cs" 'selectable-super-pre) (define-key hatenahelper-mode-map "\C-c[" 'insert-http-notation))) (defun selectable-super-pre () "スーパープレ記法の挿入を支援" (interactive) (let* ((langlist '((?r "ruby") (?j "javascript") (?l "lisp") (?p "perl"))) (prompt (mapconcat (lambda (l) (format "%c/%s" (car l) (cadr l))) langlist " ")) lang prefix) (when (fep-get-mode) (fep-force-off)) (message prompt) (setq lang (cadr (assq (read-char) langlist))) ;; >|lang| の lang を指定した言語名に置き換える (setq prefix (concat ">|" lang "|")) (message "%s" prefix) (hatenahelper-insert-block-aux prefix hatenahelper-sonomama-textblock-suffix) (when mw32-ime-state (fep-force-on)))) (defun insert-http-notation () "http 記法を挿入する。 例.[http://www.example.com:title]" (interactive) (let* ((modifiers '((?t ":title") (?i ":image") (?l ":image:large") (?s ":image:small"))) (prompt (mapconcat (lambda (l) (format "%c/%s" (car l) (cadr l))) modifiers " ")) mod (clip-data (w32-get-clipboard-data))) (when (fep-get-mode) (fep-force-off)) (message prompt) (setq mod (cadr (assq (read-char) modifiers))) (if (null mod) (setq mod "")) (insert "[") (if (and (stringp clip-data) (string-match "^https?:" clip-data)) (insert clip-data)) (insert mod "]") (when mw32-ime-state (fep-force-on))))
追記
プロンプトが出てくるときに IME が自動的にオフになるようにしたいなー。
と思って調べていたらhttp://www-tsujii.is.s.u-tokyo.ac.jp/~yoshinag/tips/elisp_tips.html#ime-offで紹介されていた方法で解決できたので実装した。
これはもうテンプレートとして色んなところで使えそうだ(・∀・)
;; IME がオンだったらオフにする (when (fep-get-mode) (fep-force-off) ;; IME がオンだったのならオンに戻す (when mw32-ime-state (fep-force-on))
そういえば、lisp で if を書くと else のことも気にしなきゃならなくなるから、ある条件にマッチする処理だけ書きたい場合は when を使うみたいだってことに気付いた。
マニュアルにもこう書いてある。
(when CONDITION A B C) は、つぎとまったく等価である。 (if CONDITION (progn A B C) nil)
僕は下の if みたいな書き方ばっかりやってた(´・ω・`)
これからは if じゃなくて when を使うようにしよう。
でもこの if のおかげで progn が何のためにあるか分かったんだよね。
なのでめんどくさい if の書き方にも感謝しております。