副作用少なめlisp-skip

 この前書いたlisp-skip、チョット使ってたら、マークが移動してしまう副作用が結構便利な時もあるんだけど、逆にマークが外れてしまって微妙だった時が多かったので、マークは移動しないようにしてみた。その方がリージョン反転じゃなくてセレクションで選択している効果も活きそうに思ったので。

■具体的に何をするか
 適当にlispが書かれてるコードを移動する。lisp-modeとかのキーマップに割り当てて使う感じ。

;;skip
(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 "^\"")
	  (let ((from (point)))
		(skip-syntax-spec-forward "^\"")
		(start-selection 2 t from)
		(return-from lisp-skip t)))
	(let ((from (point)))
	  (unless (eolp)
		(scan-buffer "[ ()\n]" :regexp t )
		(if (bolp)
			(backward-char))
		(start-selection 2 t from)))
	))