letの変数を書き換えとか(その2)

試してみたlet内置換。

(defun replace-let-string(pattern replacement)
  "letの中で置換"
  (interactive "*sReplace:\nsWiht:")
  (let ((cp (point))
		startlet
		endlet)
	(save-excursion
	  (save-restriction
		(when (goto-let)
		  (setq startlet (point))
		  (backward-char)
		  (goto-matched-parenthesis)
		  (setq endlet (point))
		  (narrow-to-region startlet endlet)
		  (goto-char (point-min))
		  (while (scan-buffer pattern :regexp t :tail t)
			(replace-match replacement))
		  )))))

次は変数の候補を取り出したい。ので、如何しても変数をどうにかして捕捉しないと。

(defun get-letvar-region()
  "letで定義した変数の辺りでナローイング"
  (interactive)
  (let ((paren-n 1)
		(cp (point))
		letvar
		startparen
		endparen)
	(when (goto-let)
	  (while (looking-at "[^(]")
		(forward-char)
		(when (or (looking-at "[);]")(eobp))
		  (goto-char cp)
		  (message "letの括弧が見つからない")
		  (quit)))
	  (setq startparen (point))
	  (set-mark)
	  (goto-matched-parenthesis)
	  (setq endparen (point))
	  (narrow-to-region startparen endparen))))

之を試して気づいたけどletで書く変数のパターンが結構あって変数部分だけ取り出すのが面倒(ry