◀一般トップへ
  • 4118 スマートインデント(emacs風味)
    • 4119 Re: スマートインデント(emacs風味)
      • 4121 Re2: スマートインデント(emacs風味)
  • [4118] スマートインデント(emacs風味) すぐる 2004年10月23日 00:52

    いつも愛用させていただいてます。

    サクラエディタでemacsみたいな自動インデントができればなーと思い、
    機能追加してみました。
    http://49uper.com:8080/html/img-s/17777.lzh
    使い方は、C++系のソースファイルを開き、調節したいところでタブキーです。

    ソースのほうもあっぷしておきます。
    開発者のみなさまのご意見いただければ幸いです。
    http://49uper.com:8080/html/img-s/17778.lzh
    (1.4.7.1をベースにしてます。)
    • [4119] Re: スマートインデント(emacs風味) げんた 2004年10月23日 11:37

      括弧を入力するとインデントが変化するんですね.
      Emacs使ってないのでなんか妙な感じ.

      関数の引数を複数行にわたって記述した場合に,関数の中身のインデントがどんどん深くなってしまうのですが...

      int abcde (
        int param1,
          int param2  // 先頭が揃わない
      )  // <-- 括弧の入力時にlevel 3->0
      {
          abcde();  // <-- 括弧の入力時にlevel 2->1
            a = 0;
              b = 0;  // どんどん深くなる
      }  // <-- 括弧の入力時にlevel 4->0

      閉じ括弧を入力した後にパラメータを追加する場合は正しく動作するようですね.

      TAB入力を整形で横取りしているので,思い通りのTABが入ってくれない場合にTABを追加できなくてストレスがたまる..ような人は使わなければいいだけかな.(思い通りなら問題ないんですが...) TABキーはTAB文字入力のままにしておいて,インデントは別のコマンドを追加した上でTABに割り当てた方がいいのかも.

      ----
      インデントにスペースとタブのどちらを使うかのフラグが共通設定にあるので,DoSmartIndent()にインデント幅及びTAB/SPACEの区別を渡すように出来ればうまく連動させられるように思います.

      現行のSmartIndentとだいぶ違うので併用できる形にしたいと思います.
      • [4121] Re2: スマートインデント(emacs風味) すぐる 2004年10月24日 00:48

        > 関数の引数を複数行にわたって記述した場合に,関数の中身のインデントがどんどん深くなってしまうのですが...
        >
        > int abcde (
        >   int param1,
        >     int param2  // 先頭が揃わない
        > )  // <-- 括弧の入力時にlevel 3->0
        > {
        >     abcde();  // <-- 括弧の入力時にlevel 2->1
        >       a = 0;
        >         b = 0;  // どんどん深くなる
        > }  // <-- 括弧の入力時にlevel 4->0

        こちらでも現象のほう確認しました。
        入力行がEOFを含むときに発生するようです。
        さっそく修正しましたー。
        http://49uper.com:8080/html/img-s/18082.lzh

        > TAB入力を整形で横取りしているので,思い通りのTABが入ってくれない場合にTABを追加できなくてストレスがたまる..ような人は使わなければいいだけかな.(思い通りなら問題ないんですが...) TABキーはTAB文字入力のままにしておいて,インデントは別のコマンドを追加した上でTABに割り当てた方がいいのかも.
        できるだけ思い通りのTABが入るようにチューニングしていけたらいいなーと思います。

        > インデントにスペースとタブのどちらを使うかのフラグが共通設定にあるので,DoSmartIndent()にインデント幅及びTAB/SPACEの区別を渡すように出来ればうまく連動させられるように思います.
        たしかに、タイプ別設定に”SPACEの挿入”ってフラグがありますね。

        CEditView_Command_Indent(170)から
        #ifdef INDENT_BY_SPACE
        for( int i = 0 ; i < *len ; i++ ){
        ret[i] = SPACE;
        }
        #else
        for( int i = 0, j = 0 ; i < *len ; i++ ){
        /* 略 */
        }
        #endif

        となっているところを、(m_bInsSpace==0)の分岐に変えればOKのはずですー。

        と思ったら、タイプ別設定の”SPACEの挿入”をチェックするとTAB入力がこなくなってしまうのですね。(^^;;;;;

        > 現行のSmartIndentとだいぶ違うので併用できる形にしたいと思います.
        もし、片隅にでも使っていただければ幸いですー。