朝顔日記

続続マクアプ用 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」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事へのツッコミ

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