その他の小物

後から使うつもり。

(defun next-paren()
  "並列的に括弧を移動(移動は下向き)"
  (interactive)
  (while (looking-at "[^(]")
	(backward-char))
  (goto-matched-parenthesis)
  (while (looking-at "[^(]")
	(forward-char)))

これも色々問題があったので修正。っていうか自分でもゴチャゴチャしすぎて微妙な気がする。

;v0.02
(defun next-paren()
  "並列的に括弧を移動(移動は下向き)"
  (interactive)
  (let ((cp (point))
		(next nil))
	(while (looking-at "[^(]")
	  (backward-char))
	(goto-matched-parenthesis)
	(forward-char)
	(setq next (point))
	(while (looking-at "[^(]")
	  (when (looking-at ")")
		(if (< cp next)
			(goto-char next)
		  (goto-char cp))
		(scan-buffer "[^ \t\n ]*[ \t\n ;]*" :regexp t :tail t)
		(return))
	  (forward-char))
	))

取り合えず当面のletを変える為にはこれでもいいということにして(後で困りそうだけど)華麗にスルー。で、next-parenが微妙なので代わりに変数とって来る奴(下ので)無理やりWhileを二回まわして取ることに。っていうか、もう無理やり。

(defun get-letvar()
  (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))
	  (save-restriction
		(narrow-to-region startparen endparen)
		(goto-char (point-min))
		(forward-char)
		(while (not (eobp))
		  (when (looking-at "(")
			(forward-char))
		  (push (hoge-word) letvar)
		  (next-paren))
		(goto-char (point-min))
		(forward-char)
		(while (not (eobp))
		  (if (looking-at "(")
			  (goto-matched-parenthesis)
			(forward-char))
		  ;上のもコメントとか書いてたら困ったことになりそう。
		  (if (looking-at "\\_<")
			  (push (hoge-word) letvar))))
	  letvar
	  )))

適当に使い方。

(setq var nil)
=>nil
(setq var (get-letvar))

 とかやるとキャレットがlet内にあればletの変数があれば返ってくる。しかし、書いて見て少し思った。これは動けばいい主義にしても、いくらなんでもこれはやりすぎなんじゃないかと。それくらい酷いなぁとか思いつつ華麗にスルー。だって面倒だったの。だって、もう疲れたの。(゚ε゚)キニシナイ
 これでget-letvarとreplace-let-stringを適当に超絶合体すれば、何となくメニューに候補をリストみたいにしてポップアップとか出来るんじゃないかと。