続続マクアプ用 lisp
2010-02-27
知らない人は損してる?コーディングが3倍速くなるZen-Codingを導入してみた - EC studio デザインブログ とかを読んで、最近 Zen-Coding とかいうものが流行っているらしいことを知りました。私は html や xml のマークアップの際は xyzzy というエディタと、続マクアプ用 lisp で紹介した lisp を使っているのですが、これをちょこっといじって、Zen-Coding とまでは行きませんが、div.hoge を div class="hoge" にしたり、div#fuga を div id="fuga" となるようにしてみました。
;;カーソル行をタグで括る
(defun quote-line-by-tag (&optional (quotetag ""))
(interactive "*sTag: ") ; s => 文字入力を指示する。
; 入力された文字列は quotetag に割り当てられる。
(setq tmp1tag (string-trim "<>" quotetag))
(setq tmp2tag (substitute-string tmp1tag "\\.\\([^ ]+\\)" " class=\"\\1\""))
(setq starttag (substitute-string tmp2tag "\\#\\([^ ]+\\)" " id=\"\\1\""))
(setq endtag (substitute-string starttag " .*" ""))
(save-excursion
(goto-eol)
(insert "</" endtag ">")
(goto-bol)
(skip-white-forward)
(insert "<" starttag ">")))
;(define-key ed::*html+-mode-map* '(#\M-b) 'quote-line-by-tag)
(global-set-key '(#\M-t) 'quote-line-by-tag)
;;リージョン・セレクションををタグで囲む
(defun quote-region-by-tag (&optional (quotetag ""))
(interactive "*sTag: ") ; s => 文字入力を指示する。
; 入力された文字列は quotetag に割り当てられる。
(setq tmp1tag (string-trim "<>" quotetag))
(setq tmp2tag (substitute-string tmp1tag "\\.\\([^ ]+\\)" " class=\"\\1\""))
(setq starttag (substitute-string tmp2tag "\\#\\([^ ]+\\)" " id=\"\\1\""))
(setq endtag (substitute-string starttag " .*" ""))
(case (get-selection-type)
((1 2)
(exchange-region-and-selection)))
(let ((begin (mark))
(end (point)))
(when (> begin end)
(let ((tmp begin))
(setq begin end
end tmp)))
(save-excursion
(goto-char end)
(insert "</" endtag ">")
(goto-char begin)
(insert "<" starttag ">"))))
;(define-key ed::*html+-mode-map* '(#\C-t) 'quote-region-by-tag)
(global-set-key '(#\C-t) 'quote-region-by-tag)
私としてはこの程度で十分かな。
「続続マクアプ用 lisp」へコメントをつける
この記事へのツッコミ
- 1: mitsugu oyama (2010-02-27T17:31:46+09:00)
- xyzzyはEmacs用のスクリプトとかは流用できないんでしょうか(ライセンスに問題なければ)。
- 2: のり (2010-02-27T19:16:04+09:00)
- xyzzy は基本的に common lisp ですので、emacs lisp とはちょっと違っていたりするようです。共通で動くものもあるかもしれませんが、普通は移植したりする必要があるようですね。
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2010/02/diary_100227a.html