if
数か月前に、多くのステートメントを含むコードをプログラミングしました。もしregion-active-p
、もしbeginning-of-line
、そういうこと。
Lispについて学んだのでcond
、自分のコードを大幅に改善できないかと考えていました。
問題は、cond
私が見る限り、これは「真」の場合にのみ動作していることですが、実際にback-to-indentation
はこれらのチェックの間に移動する必要があります。
最後の句を適切にスキップするには、変数値を設定する必要さえあります。
(defun uncomment-mode-specific ()
"Uncomment region OR uncomment beginning of line comment OR uncomment end"
(interactive)
(let ((scvar 0) (scskipvar 0))
(save-excursion
(if (region-active-p)
(progn (uncomment-region (region-beginning) (region-end))
(setq scskipvar 1))
(back-to-indentation)) ; this is that "else" part that doesn't fit in cond
(while (string= (byte-to-string (following-char)) comment-start)
(delete-char 1)
(setq scskipvar 1))
(indent-for-tab-command)
(when (= scskipvar 0)
(search-forward comment-start nil t)
(backward-char 1)
(kill-line))
)))
)
したがって、基本的に私の質問は、別の節のチェックの前に、節に「真」を与えないことの結果をもたらしたいということです。これは可能ですか?そうでない場合、何をするのが最善でしょうか?
編集:これを解決策の例として使用しているので、理解しやすいように書き留めました。
リージョンがアクティブな場合、リージョンからコメントを削除します。そうでない場合は、ポイントを意図に移動します。
次の文字がコメント文字である限り、削除します。その後、この行をインデントします。
上記のいずれも行わなかった場合は、前方にコメント文字を検索し、その行を削除します。