Snippet風味に移動とか

 最近少し思ってた、別にSnippetじゃなくてもSnippet風味の移動ってありなんじゃないのかと。特にlispならば。

■具体的に何をするか
ex:

(1111 2222(3333)
  (4444))

 こういう感じの良くあるlispなら、まず初めにカーソルが来て欲しいのは1の所、次に2の所その次は3と意外と括弧のお陰で法則性がある。これなら、lispの移動に関してはわざわざSnippetとかで苦労して作らなくても良いじゃないのかとか、そんな感じで。Cとかだったら結構難しいかもしれないけど。で、こんなのを作ってみた。

(defun lisp-skip()
  (interactive)
  (if (pre-selection-p)
	  (stop-selection))
  (if (eq (parse-point-syntax) ':string)
	  (scan-buffer "[ (]" :regexp t :tail t)
	(scan-buffer "[ (\"]" :regexp t :tail t))
  (when (match-string 0)
	(skip-syntax-spec-forward " (\"")
	(when (eq (parse-point-syntax) ':string)
	  (skip-syntax-spec-backward "^\"")
	  (set-mark (point))
	  (skip-syntax-spec-forward "^\"")
	  (start-selection 2 t (mark))
	  (return-from lisp-skip t))
	(set-mark (point))
	(unless (eolp)
	  (scan-buffer "[ ()]" :regexp t)
	  (if (bolp)
		  (backward-char))
	  (start-selection 2 t (mark)))
	))

 兎に角連打して、望みの所に移動して編集するもの。いつも、適当にこういうのを作るけど、実際に使えるのかどうかは不明。結構使わずに放棄してるのもあったりする。この前見ててコレを書こうかと思った動機みたいなの

Meadow/Emacs memo: テキストの補完入力 ― abbrev ,定型句
http://www.bookshelf.jp/soft/meadow_34.html#SEC487

 コレ見たいなのを自分も使ってるんだけど移動先は補完後一発目の位置くらいしか想定してないけど、見たらlist作って、移動先をわざわざ指定しないと駄目らしくて、ぱくってもとても設定を書くのが面倒そうだったので、適当に設定しなくてもそれっぽく動かないかとか。そういう安易な思考で考えたもの。とりあえず暫く使ってみる事にした。チョット使った感じだと悪くはないけど、逆向きの移動とか欲しいかなぁとか、行頭から文字が書いてある変則的なコメントみたいなところだったりしたら動作が変だとか。多少気になるところはある。