C言語用インデントの改善要望No.28112
緒方聡 さん 10/04/26 04:05
 
お世話になっています。

C言語用インデントで以下の点の改善を希望します。

(1)ブロック開始行にコメントがある場合インデントしない
(2)ブロック開始行に特定の文字列がある場合インデントしない

(1)の再現例
if (#i == 0) { // ここにコメントがある状態でEnter入力

(2)の再現例
if (code == '(') {


環境:
秀丸 ver 8.00
拡張子 .mac の設定は「自動インデント」「C言語用インデント」

(1)のケースは自分でマクロで動作を拡張して対応していましたが
(2)のケースを今日見つけ、これもマクロで対応できなくもないですが
根本的に対応してもらったほうが良いかな、と思って投稿しました。

マクロでは以下のような地味なことをしています。

begingroupundo;
disabledraw;

if (filetype == ".mac") {
 #column = column;
 #lineno = lineno;
 while ((code == '\r' || code == '\n' || code == -1) && column != 0) {
  left;
 }
 if (colorcode & 3 == 3) { // コメントかどうか
  while (colorcode == 3 && column != 0) { // テスト(ここで改行)
   left;
  }
  if (colorcode & 3 != 3) {
   while ((code == ' ' || code == '\t') && column != 0) {
    left;
   }
   if (code == '{') {
    #addtab = true;
   }
  }
 }
 movetolineno #column + 1, #lineno;
}
enabledraw;
endgroupundo;

[ ]
RE:28112 C言語用インデントの改善要望No.28115
秀丸担当 さん 10/04/26 10:58
 

>(1)ブロック開始行にコメントがある場合インデントしない
>(2)ブロック開始行に特定の文字列がある場合インデントしない

ご要望ありがとうございます。
いずれもそのようになることが確認できました。

(1)の件については、現状のC言語用の自動インデントはカーソル位置の直前にあ
る文字を判断している機能なのですが、カーソル位置よりもさかのぼって計算す
るということになると思います。
できたほうが便利だと思いますが、カーソル位置を基準とする基礎的な機能より
も少し高度な機能ということになると思うので、慎重に考えたほうがいいかもし
れません。
例えばカーソル位置の直前の文字を判断して処理を分けているマクロがあるとし
たら不都合が起きるかもしれないです。

(2)の件については、確かに文字列部分は無視したほうがいいと思います。
手元で試しにやってみたところ一応できました。
今後のきりのいいバージョンで反映できるようにしたいと思います。

[ ]