コードの折りたたみについての要望No.31627
kou7 さん 12/10/18 09:04
 
初めまして。多くのエディタを試してみましたが、秀丸エディタが総合的にみて一番
良かったです。特にトゥルーインライン入力が素晴らしいです。
ただ、コードの折りたたみに関しては、思ったような設定ができず悩んでいます。

折りたたみ機能だけに限定するとVisual studioとnotepad++の機能は優れていました。
これらのソフトでできる設定を秀丸エディタでも設定できるようにしていただけない
でしょうか。

1.折りたためる場所の最終行が空白行だった場合はその行以降は折りたたまない。
2.+-表示から出る枝を常時表示にする。(その際枝から横線を出して折りたためる場
所をわかりやすくする)
3.カーソルのある場所の枝の色を変えて編集場所をわかりやすくする。(notepad++)
4.インデントを深くしたところから下に線を伸ばす。(notepad++)
5.枝を触るとその部分のコードが明るくなる。(Visual Studio)

個人的な優先順位はこの番号の通りです。
併せて+-や枝の表示をもう少し大きくする・行番号の右に持っていくといった設定も
できると大変助かります。

ご検討のほどよろしくお願い致します。

[ ]
RE:31627 コードの折りたたみについての要No.31638
秀丸担当 さん 12/10/18 15:33
 

折りたたみについての要望ありがとうございます。
それぞれできたらいいということで今後のネタにさせていただきます。
気になる点についてコメントします。

>1.折りたためる場所の最終行が空白行だった場合はその行以降は折りたたまない。

これがどういう挙動のことか把握できませんでした。
2.の枝を常時表示した場合、枝と枝の間に空白が開くというということでしょう
か。
そうだとしたら、もし2.ができるとしたら、1.の機能が有る無いに関わらず、必
然的にそうなると思います。

>2.+-表示から出る枝を常時表示にする。(その際枝から横線を出して折りたためる場
>所をわかりやすくする)

個人的な感覚かもしれませんが、枝が常時あるとほとんどの場合、ずっと長い縦
線が一本続いて、終端を表す小さな横線が幾つも出てきて、開始と終端がどれが
どれに対応するものか把握できず、VisualStudio2008などでの表示は意味が無い
ものと思っていました。
最近のVisualStudioでは5.の機能が追加されているようで、5.の機能があれば対
応関係がわかるので常時表示は意味があると思います。
あと3.もあると意味があると思います。

3.と5.は確かに便利であったら便利で、それがあると今まで意味が無かった2.も
意味があるようになり、2.があると結果的に1.になる、ということだと思います
が、1.のことがちょっと不明で勘違いでしたら教えてもらえると助かります。


>4.インデントを深くしたところから下に線を伸ばす。(notepad++)

これは折りたたみというより、インデントのガイドラインのようなもののことで
しょうか。
一応秀丸エディタの場合は[その他]→[ファイルタイプ別の設定]→[デザイン]の
ところにある「ガイドライン(縦)」を表示しておくと、例えばインデント(タブ
幅)を4にしている場合、ガイドラインも4に指定しておくことで、インデントが
わかりやすくなると思います。

または、タブ文字を使っていれば、ガイドラインが無くても単純に、[その他]→
[ファイルタイプ別の設定]→[デザイン]のところの「タブ文字」をONにしておく
と、わかりやすいと思います。

[ ]
RE:31638 コードの折りたたみについての要No.31640
kou7 さん 12/10/18 16:41
 

返信ありがとうございます。

>これがどういう挙動のことか把握できませんでした。
>2.の枝を常時表示した場合、枝と枝の間に空白が開くというということでしょうか。

>1.のことがちょっと不明で勘違いでしたら教えてもらえると助かります。


私の書き方が下手で上手く伝わらずすみません。
私が言いたかったのは、コードとコードの間に空白行を何行か開けて見やすくしてい
ても、
秀丸エディタでは上のコードを閉じたときに、開けておいた空白行まで閉じてしまう
ということです。
(空白行まで枝が伸びているのでそこもコードだと認識されているようです)

秀丸エディタ以外のエディタでは空白行には枝が表示されず、
空白行を保持したままコードの折りたたみができるものがほとんどでした。
これを便利に思っていましたので、今回一番要望したかったのがこの機能です。



>これは折りたたみというより、インデントのガイドラインのようなもののことでし
>ょうか。


はい、その通りです。
ガイドラインやタブ文字の表示といった方法もありますが問題点があります。

私はRen'Pyという海外製のノベルゲームエンジンを使っているのですが、
これがPythonをベースに作られており、タブではなくスペースでインデントをつくる
のです。
ですからタブ文字の表示は使えません。

また、ガイドラインの表示は使うフォントの種類も選びますし、
何よりあまり見やすくならないです。(必要なところ以外にも線が引かれてしまうの
で)
私が要望したインデントを深くしたところから下に線を伸ばす機能は、
コードの関係を見やすくするための機能だと思っています。

一方ガイドラインはインデントが浅くても全体を見やすくするための機能ですので、
この二つは全く別のものだと思います。

それでは、よろしくお願い致します。

[ ]
RE:31640 コードの折りたたみについての要No.31646
秀まるお2 さん 12/10/18 22:27
 
 「1」の機能についてですが、これは例えば、C言語のソースコードで言うと、
例えばVisual Studio 2010の場合だと、

   void test1() {
       ...
       ...
       ...
   }


   void test2() {
       ...
       ...
       ...
   }

 のようなソースコードがある時に、test1()を折りたたむと、

    void test1() { ... }


    void test2() {
        ...
        ...
        ...
    }

 のように、ちゃんと関数の中身だけが折りたたまれる(関数と関数の間の空行
は折りたたまない)ってことですよね。

 秀丸エディタだと、

    void test1() {...
    void test2() {
        ...
        ...
        ...
    }

 のように、関数と関数の間に空行なりコメント行なりがあってもセットで折り
たたんでしまうので…。

 ただ、これを実現するには大括弧({ 〜 })の対応関係をちゃんと解析する仕
組みを作るか、または折りたたみする時の終了位置を、例えば正規表現を使うな
どして指定出来る機能が必要なのかなぁと思います。

 (昔そういうネタがあったような気もします)

 アウトライン関係は全部秀丸担当が作った処理なので、僕もあまり深い仕様が
分かってなかったりしますので…。

 明日また秀丸担当の方からコメントさせていただきます。

[ ]
RE:31646 コードの折りたたみについての要No.31647
秀まるお2 さん 12/10/18 22:58
 
 今ちょっといじってみたんですが、アウトラインの「ツリー表示の定義」にち
ょっと一工夫すれば、少なくとも関数についてはうまく折りたたむように出来ま
した。

 「ファイルタイプ別の設定・アウトライン・解析」を選択して、そこの「リセ
ット」ボタンを押して、「C言語用」にします。

 それから「追加」ボタンを押して、

 種類:     文字列
 文字列:   ^}
 大文字/小文字の区別:ON
 正規表現:           ON
 1つ上のツリー定義と同じレベルとして定義:   ON
 展開/折りたたみ状態:                         展開したままで固定

 として、あとはそのままでOKします。

 それで追加された条件を「↑」ボタンで「関数」の1つ下に移動します。

 そうしてやれば、関数を折りたたんだ時に、その関数の最後の「}」の直前ま
でが折りたたまれるようになります。

 それでどうでしょうか。

 他のswitch/case/defaultとかの折りたたみについてはこんな簡単なやり方で
は定義出来ない({〜}の対応関係を調べないといけない)かなぁと思います。

[ ]
RE:31647 コードの折りたたみについての要No.31650
kou7 さん 12/10/19 08:33
 
返信ありがとうございます。

>ちゃんと関数の中身だけが折りたたまれる(関数と関数の間の空行は折りたたまな
>い)ってことですよね。

はい、その通りです。

また、詳しい設定方法など調べてくださり大変ありがたいです。
確かにC言語やJavaのように括弧を使う言語ですと役立ちそうですね。
ですが、Pythonのように括弧を使わない言語では使えません。

私は31638で書いたとおり、Pythonをベースにしたスクリプトを書いています。
これは半角スペースでインデントをつくるのでちょっと難しそうですね。


また、これを書いているうちに疑問に思ったのですが、
行頭の半角スペースの表示を消す設定はできるのでしょうか?
行頭に半角スペースの表示がずらっと並んでいるのはちょっと気持ち悪いものですの
で。


最後になりますが、最初のレスで書いた
>併せて+-や枝の表示をもう少し大きくする・行番号の右に持っていくといった設定
>もできると大変助かります。

こういった設定も難しいものなのでしょうか?

度々質問してすみませんが、よろしくお願いします。

[ ]
RE:31650 コードの折りたたみについての要No.31653
秀丸担当 さん 12/10/19 09:27
 


詳しい情報ありがとうございます。
言われていることがわかりました。
折りたたみは、[その他]→[ファイルタイプ別の設定]→[アウトライン]→[折り
たたみ]の「折りたたみ可能な条件の設定」によって、いろいろ条件を決められ
ます。
例えば、インデントによる折りたたみだけに設定すれば以下のようなケースでx1
とx2の間は空白2行は折りたたみの対象にはならないです。

xxx( yyy ) {
   zzz
   zzz
}

または秀まるお2の言っている方法もあるにはあります。
他には、「{」にカーソルを合わせて折りたたみを実行すると、特に設定なしで
括弧の対応で折りたたみできます。

しかしコードがPythonベースということで、Pythonの場合は、{}の対応のような
インデントのされ方はされないようで、Web検索してPythonのコードのサンプル
を見てみた限りでは、確かに終端の空白は除外すると確かに具合がいいのだと思
います。
そういう判断でもできるオプションもできないか考えてみます。


ガイドラインについては、ガイドラインは本文にもかかるので確かにインデント
だけを可視化したい場合は邪魔だと思います。
ガイドラインが行頭からのインデント空白またはタブにだけできたらいいという
ことで試してみます。


>また、これを書いているうちに疑問に思ったのですが、
>行頭の半角スペースの表示を消す設定はできるのでしょうか?
>行頭に半角スペースの表示がずらっと並んでいるのはちょっと気持ち悪いものですの
>で。

おそらく[その他]→[ファイルタイプ別の設定]→[デザイン]のところの「半角空
白」をONにされているのだと思います。
これをOFFにすれば半角空白は何も見えなくなります。

ちなみにPythonがタブ文字を受け付けているのかわかりませんが、タブ文字も使
えるとしたら、範囲選択してから[編集]→[変換]→[空白 -> TAB]にして変換す
るとインデントの操作がやりやすいと思います。


>最後になりますが、最初のレスで書いた
>>併せて+-や枝の表示をもう少し大きくする・行番号の右に持っていくといった設定
>>もできると大変助かります。
>
>こういった設定も難しいものなのでしょうか?

技術的には可能だとは思います。
設定が増えすぎて繁雑になることや、プログラム上の処理が増えることや、他に
も多くある要望の消化のことを考えると全てできないこともあると思いますが、
ご意見参考にさせていただきます。

[ ]
RE:31653 コードの折りたたみについての要No.31655
kou7 さん 12/10/19 10:22
 
返信ありがとうございます。

>ガイドラインについては、ガイドラインは本文にもかかるので確かにインデントだ
>けを可視化したい場合は邪魔だと思います。
>ガイドラインが行頭からのインデント空白またはタブにだけできたらいいというこ
>とで試してみます。

ありがとうございます、助かります。


>おそらく[その他]→[ファイルタイプ別の設定]→[デザイン]のところの「半角空
>白」をONにされているのだと思います。
>これをOFFにすれば半角空白は何も見えなくなります。

はい、ONにしています。
ただ、行頭の半角空白だけ表示させない設定があれば、
Pythonのような言語でも半角空白を表示させるメリットを受けられると思い質問して
みました。


>ちなみにPythonがタブ文字を受け付けているのかわかりませんが、タブ文字も使え
>るとしたら、
>範囲選択してから[編集]→[変換]→[空白 -> TAB]にして変換するとインデントの
>操作がやりやすいと思います。

私が使っているスクリプトではタブ文字を使うとエラーになってしまいます。


>技術的には可能だとは思います。
>設定が増えすぎて繁雑になることや、プログラム上の処理が増えることや、
>他にも多くある要望の消化のことを考えると全てできないこともあると思いますが、
>ご意見参考にさせていただきます。

はい、わかりました。検討していただけると嬉しいです。

[ ]
RE:31655 コードの折りたたみについての要No.31656
秀丸担当 さん 12/10/19 10:51
 

>
>はい、ONにしています。
>ただ、行頭の半角空白だけ表示させない設定があれば、
>Pythonのような言語でも半角空白を表示させるメリットを受けられると思い質問して
>みました。

行頭から連続する半角空白だけを非表示にして、それ以降の半角空白は表示させ
たいという場合は、強調表示を使うとある程度近い感じには可能だと思います。

例えば、[その他]→[ファイルタイプ別の設定]→[デザイン]→[強調表示]で以下
のようなものを追加します。

 文字列 :(?<=[^ ]) +
 検索方法:「正規表現」だけON
 表示方法:強調表示1

表示方法の色は任意の好きな色でいいです。
こうしておくと、行頭以外の半角空白が任意の強調表示の色になります。
「強調表示1」は初期状態だと黒なのでテストのためには「特に強調表示2」とか
にしておくとわかりやすいです。

そして、[その他]→[ファイルタイプ別の設定]→[デザイン]のところの「半角空
白」の色を、背景色と同じ色か、または目立たない色にします。
目立たない色にしておくことで普段は見えないかのようになると思います。

[ ]
RE:31656 コードの折りたたみについての要No.31657
kou7 さん 12/10/19 11:32
 
便利な設定を教えていただきありがとうございます。
ただ、この半角空白の色設定と強調表示の色設定はかけ算のようになるのですね。

私の場合背景色を黒っぽい色にして、それより少しだけ明るい色を行頭の半角空白、
更に少し明るい色をコード中の半角空白にしようとしたのですが、
行頭の半角空白を目立たないよう暗い色にしているため、コード中の半角空白をどん
な色にしても
ほとんど行頭の半角空白と変わらない色になってしまいました。

[ ]
RE:31657 コードの折りたたみについての要No.31660
秀丸担当 さん 12/10/19 16:30
 

半角空白は、コメントの中にあったり他の強調の中にあったりすることも考えて、
色が混ざるようになっています。
半角空白の色を背景の色と全く同じ色にすると、強調で指定された色がそのまま
出てくると思います。
少々無理矢理ですが、強調表示を2つ用意しておいて、2つの色を指定すると一
応それっぽくなるとは思います。

 文字列 :(?<=[^ ]) +
 検索方法:「正規表現」だけON
 表示方法:強調表示1

 文字列 :^ +
 検索方法:「正規表現」だけON
 表示方法:強調表示2

例えばこの2つを強調して、強調表示1と強調表示2の色を指定すると、それぞれ
に色が付くと思います。

[ ]
RE:31660 コードの折りたたみについての要No.31661
kou7 さん 12/10/19 16:59
 
返信ありがとうございます。

>少々無理矢理ですが、強調表示を2つ用意しておいて、2つの色を指定すると一応
>それっぽくなるとは思います。

おお、素晴らしいですね、これで見やすくなりました。

[ ]
RE:31661 コードの折りたたみについての要No.31679
秀まるお2 さん 12/10/21 09:22
 
 コードの折りたたみについて、秀丸担当の方で「終端の空行を除外する」って
オプション追加をしてみたんですけども、なんとなく汎用性に乏しいような気が
して、もうちょっと考えてみました。

 Phytonの場合、関数の定義は、

    def XXXX

 で始まって、最後は必ず

        return XXXX

 って感じになってるんじゃないかと思います。もしそうだとしたら、「終端か
ら"return"を検索して見つかったらそこまで折りたたみ」としたらベストのよう
な気がします。

 ですが、そのまんまのオプション追加ではPhytonにしか使えなくて汎用性が無
いです。なので、そういう、特定の文字列を正規表現で指定して、それを終端か
ら検索してもし見つかったらそこまで折りたたみって指定が出来たらいいかと思
います。

 それを実現するのに、正規表現での検索文字列を指定する機能を付けるのはち
ょっと大変なので、例えばオプションとしては「強調表示8にマッチする文字列
が見つかったら」ってことにしておいて、具体的な正規表現パターンは強調表示
の方で指定してもらったらいいかと思いました。

 "return"が強調表示されてしまうのがみっともない点については、例えば強調
表示8のスタイルを普通の文字と同じスタイルにしてもらえれば、見栄え上は強
調してないのと同じになります。

 という作戦でどうでしょか。そういう作戦なら簡単ですけども。

 それと、C++言語の場合は、やはり{〜}の対応関係を調べて折りたたむのがベ
ストなので、それはそれでトライしてみます。

[ ]
RE:31679 コードの折りたたみについての要No.31683
kou7 さん 12/10/21 19:48
 
返信ありがとうございます。

うーん、私の場合Pythonといってもそれをベースにしたスクリプトですから、
折りたたみたいところにリターン等特定の文字が入っていることはほぼないんですよ
ね。

現在、折りたたみ可能な条件の設定でインデントの深さだけをチェックして使ってい
ます。
その状態でも空白行を閉じないようにできる設定が望ましいのですがいかがでしょう
か。


また、全く関係ないことで申し訳ないのですが、この文章を打っていて気付いたこと
があります。
「っ」の文字(他にもあるかもしれません)のあとにカーソルがずれる現象が発生し
ます。
普通カーソルは文字と文字の間にありますが、特定の状況(ずれないときもある)で
「っ」を打つと
その後の文字にカーソルを合わせたときに右側の文字に食い込んでしまいます。
文字をドラッグしたときにその文字と同一行の後ろの文字が動くものと動かないもの
があるのがヒントになるかもしれません。
ずれるからといって特に問題はないかもしれませんが、一応報告させていただきます。

[ ]
RE:31683 コードの折りたたみについての要No.31684
秀まるお2 さん 12/10/21 21:18
 
 情報ありがとうございます。やはり普通に空行を除外するような仕様でないと
ダメみたいなので、その仕様にします。

 ついでに、C言語/Javaでの「}」まで折りたたむオプションも、やってみたら
出来たので追加します。さらには折りたたみでの終端指定を部分編集にも効くよ
うにするオプションも追加します。

 いろいろいじって個人的にも使いやすくなりました。
 (関数を部分編集を多用してたんですが、「}」までに限定して欲しいと以前
から思ってた所でした)

 なるべく早めに次のβ版(V8.22β3)をアップロードさせていただきます。

[ ]
RE:31684 コードの折りたたみについての要No.31695
kou7 さん 12/10/22 21:46
 
返信ありがとうございます。

こんなにも早く要望に応えていたただき誠に感謝しております。

早速β版の方使わせていただきまして、いろいろ試して見ました。

ガイドラインについては最初戸惑いましたが、設定を見直した結果ほぼ思い通りの結
果になりました。
ただ、一点気になったのは、線の一番上の部分に空行を作ると線の上部が下がってい
ってしまうことです。


一例として

label 1

    menu:

        "選択肢をえらんでください"

このようになっている場合menu:に線が垂れ下がっている格好ではなく、"選択肢を選
んでください"の行から線が出てしまいます。



また、折りたたみについては

aaaaa
    bbbbb


label 1


このようにとても単純なものでも空行を閉じてしまいます。
しかし、空行を折りたたまない箇所もあります。
中には、複数行の空白の最上部に半角空白を1個打ったら
閉じなくなった箇所もあり、原因は見当も付きません。


まだβ版ということで、不完全なのが当たり前ですが、報告させていただきます。

[ ]
RE:31684 コードの折りたたみについての要No.31696
IKKI さん 12/10/22 22:41
 
こんにちは。ユーザの IKKI です。

折りたたみの空行除外オプションで、コメントのみの行も除外してほしいです。
このオプションの意図は要するに、以下のコードで関数 hoge を折りたたんだとき、
その下にある「// フガの処理」は表示されたままにしたい、ということだと思います。

// ホゲの処理
int hoge() {
}

// フガの処理
int fuga() {
}

ご検討のほどよろしくお願いいたします。

秀丸エディタ v8.22β4

[ ]
RE:31696 コードの折りたたみについての要No.31704
秀まるお2 さん 12/10/23 10:52
 
 実は、秀丸担当が作った処理は、「空行とコメントのみの行を除外する」にな
ってたんですが、僕の方で「空行のみの行を除外する」に変更してしまいました。

 なぜかというと、例えば僕の所にあるソースコードで、

int hoge() {
   ...
}

#ifdef XXXX
int fuga() {
    ...
}
#endif

 みたいなのがいっぱいあったり、その他にも関数と関数の間にコメント以外の
もの、例えばenumやstructの定義を書いてしまってる所があったりして、そうい
うのが全部折りたたみ範囲に入ってしまってあんまり意味が無かったからです。

 それでいろいろ考えて、「"}"まで」ってオプションを追加しました。これを
使えばばっちり関数の中だけが折りたたまれます。

 それでどうでしょうか。

 ただ、コメントを除外する、あるいは以前僕の出したアイデアである「強調表
示8にヒットする所まで」にしたりってオプションを別途追加するのもアリでは
あります。なので、「"}"まで」でダメなケースもあるようでしたら、コメント
除外オプションも追加可能です。

[ ]
RE:31695 コードの折りたたみについての要No.31706
秀まるお2 さん 12/10/23 11:11
 
 とりあえず、折りたたみの点について先にお返事させていただきますと…

aaaaa
    bbbbb


label 1

 の場合に「aaaaa」部分で折りたたむ場合に空行も含まれてしまうのは、すみ
ませんがバグでした。1行だけしか無い場合だとダメでした。2行

aaaaa
    bbbbb
    ccccc


label 1

 のように2行以上あれば大丈夫だと思います。

 とりあえずこのバグだけ先に修正させていただきます。

[ ]
RE:31695 コードの折りたたみについての要No.31707
秀丸担当 さん 12/10/23 11:17
 

>ガイドラインについては最初戸惑いましたが、設定を見直した結果ほぼ思い通りの結
>果になりました。
>ただ、一点気になったのは、線の一番上の部分に空行を作ると線の上部が下がってい
>ってしまうことです。

ガイドラインの件についてコメントさせていただきます。
確かに言われているケースではうまく出ていませんでした。
いったんインデントされると改行だけの行でもガイドラインが出ていましたが、
インデントの最初の行のときの改行ではできていませんでした。
次のβ版で修正させていただきます。

[ ]
RE:31707 コードの折りたたみについての要No.31711
kou7 さん 12/10/23 21:57
 
毎度、素早い対応誠にありがとうございます。

また、新しいβ版が出ましたらテストさせていただきたいと思います。

[ ]
RE:31704 コードの折りたたみについての要No.31727
IKKI さん 12/10/25 18:54
 
返信遅くなりました。ご検討ありがとうございます。

私見としては、「空行とコメントのみの行を除く」が妥当な仕様で、オプションとし
て「} まで」とか「空行を除く
(コメント行は除かない)」があってもいいと思っています。
VC++ はちょっとわかりませんが、手元の Visual Studio (VBE) では、Sub/Function
キーワードを含む行から上へ遡って、コメント行と空行以外の文字列が現れる箇所の
下にプロシージャの区切り線が表示されます。
このロジックで折りたたみ終了地点が判定されるオプションの追加を希望します。

> 「"}"まで」でダメなケースもあるようでしたら
はい、このオプションは C 言語系以外では意味がないです。Lisp の例を挙げておき
ます。

;;; 角度を求める
(defun theta (x)
  (atan (imagpart x) (realpart x)))

;;; 極座標を求める
(defun polar (a)
  (complex (cos a) (sin a)))

> #ifdef XXXX
> int fuga() {
>     ...
> }
> #endif
これはプリプロセッサとコンパイラが分かれている C/C++ の特殊事情のような気が
しますが…
C/C++ 用には何か専用のオプションを付けてもいいのかもしれません?

> 関数と関数の間にコメント以外のもの、例えばenumやstructの定義を書いてしまっ
>てる
これは…どうなんでしょう、最近のソースでも一般的なのでしょうか。
個人的にはグローバルスコープなものはファイル先頭にまとめて書く習慣なので、ち
ょっと何とも言えないです。

(以下駄文)

終了地点を強調表示で指定するアプローチは、私の直観ですが、あまり筋が良くない
気がします。
先の投稿で C っぽい例を出したので伝わりにくかったかもしれませんが、C
のようなコンパイラに優しい言語と違って、ブロックの末尾がキーワードで明示され
ない言語も世の中にはたくさんあるので…
例えば Haskell のコードはこんな感じですが、
http://code.google.com/p/tapl-haskell/source/browse/trunk/fullref/Parser.hs
関数の終了地点をキーワードで示せと言われても困ってしまいます。

それに、終了地点を明示的に検出するアプローチでは、新言語対応の要望が来るたび
に構文解析器を作る羽目になりかねません。
折りたたみの目的は人間にとっての見た目を良くすることであって、コンパイラの解
釈を厳密に再現することではないです。
それよりも、関数の上 (外側) にその関数の説明コメントを書くというような、人間
にとって馴染みのある慣習をサポートすることの方が大事だと思います。

ということで、あらためてご検討のほどよろしくお願いいたします。

[ ]
RE:31727 コードの折りたたみについての要No.31729
秀まるお2 さん 12/10/25 21:28
 
 IKKIさんどうもです。毎度詳しい情報ありがとうございます。

 たしかにおっしゃる通りなので、現状の「空行を除く」を「空行とコメントの
みの行を除く」か、または「空行を除く」とは別に「コメントのみの行を除く」
も追加するか、どちらかの対策をさせていただきます。

 (以後の修正は秀丸担当に交代します)

[ ]
RE:31729 コードの折りたたみについての要No.31730
IKKI さん 12/10/25 23:49
 
どうもです。m(_ _)m
いつも言うだけ言って後はお任せなので心苦しいですが、
どうぞよろしくお願いいたします。

[ ]
RE:31711 コードの折りたたみについての要No.31733
秀丸担当 さん 12/10/26 16:31
 

こちらの件で、V8.22βはバージョン番号を変更してV8.30β5のほうで修正させ
ていただきました。
インデント後の一行だけでもできるようにして、コメントも除外するようにしま
した。

[ ]
RE:31733 コードの折りたたみについての要No.31738
kou7 さん 12/10/26 23:31
 
β版のフォーラムとどちらに投稿するか迷いましたが、こちらに投稿させていただき
ます。
早速新しいβ版をテストさせていただきました。

まず確認したいのですが、「終端の空行とコメントは除外する」とありますが、コメ
ントの設定の方法を教えていただけないでしょうか。
#を打つとその行の#以降がコメントになるようにしたいのですが、その方法がわかり
ません。
複数行コメントのユーザー定義で表示方法をコメントにすれば良いのでしょうか?
単純に開始文字列#、終了文字列(\r\n|\n\r|\n|\r)のようにしてしまうとcolor="#D7
1345"のようなものまでコメント扱いされてしまいます。

そしてバグらしきものを見つけたので報告させていただきます。
#がらみでおかしな挙動をするのですが、#をコメントに設定したときにどうなるかは
テストできていません。

まず1つめは

aaa
    bbb

:

label 1

この場合bbbとlabel1の間に半角スペースや:などがあるとbbbとその間の空白行をと
じてしまいます。(例では:)
条件はわかりませんが、aなどアルファベットだけでも同じ現象が発生することがあ
ります。
また、a:を打つとa:までもがlabel1の直前まで折りたたまれてしまいます。

次に、init:以下を折りたたみたい場合

aaa

init:

とすると、aaaからinit:以下を折りたためるようになってしまいます。

また、aaaの下の行にbbbを入れるとbbbからの折りたたみになりますが、

aaa

#コメント

menu:

init:

このように#コメントやmenu:などが入っていてもaaaからの折りたたみになってしま
います。

以上、わかりにくいかもしれませんがバグの報告をさせていただきました。

[ ]
RE:31738 コードの折りたたみについての要No.31743
秀丸担当 さん 12/10/29 09:29
 

ご確認ありがとうございます。

>まず確認したいのですが、「終端の空行とコメントは除外する」とありますが、コメ
>ントの設定の方法を教えていただけないでしょうか。

コメントは、言われている通り複数行コメントで設定します。
ユーザー定義も可能ですが、Pythonベースということで、文法が同じであれば
「言語指定」で「Python」を選んでおくと手っ取り早いと思います。
Pythonを選んで「"」〜「"」が文字列の色として認識されれば、color="#D71345"
の#はコメントとは認識されなくなります。
ユーザー定義でも「"」〜「"」を文字列の色として定義すると同じことが可能で
す。


>そしてバグらしきものを見つけたので報告させていただきます。

こちらについて、いずれも同じように再現できず、もしかしたらアウトライン解
析の設定が関係しているのではないかと思います。
[その他]→[ファイルタイプ別の設定]→[アウトライン]→[解析]によって、アウ
トライン解析が設定されます。
設定されたものは標準のキー割り当てでF11キーを押すと、アウトライン解析の
ダイアログが出てきて一覧表示できます。

そして、[その他]→[ファイルタイプ別の設定]→[アウトライン]→[折りたたみ]
→[折りたたみ可能な条件の設定]で、「アウトライン解析との対応」があると、
インデントとは違う大きい[+]マークが折りたたみ用の余白に現れます。
この大きい[+]の折りたたむ範囲は、次の[+]があるところまでになります。

>まず1つめは
>
>aaa
>    bbb
>
>:
>
>label 1

こちらでアウトライン解析が無い状態では「bbb」の行が折りたたまれるだけで
したが、「aaa」と「label 1」がアウトライン解析されるように設定された状態
では、言われている通り「bbb」〜「:」までの行が折りたたまれます。
他の例でも同じようなことが言える気がします。

もしそうだとしたら、とりあえずアウトライン解析は、対象としたくない場合は、
[その他]→[ファイルタイプ別の設定]→[アウトライン]→[折りたたみ]→[折り
たたみ可能な条件の設定]で、「アウトライン解析との対応」をOFFにしておくと
いいと思います。

そうでないとしたら、ちょっと原因がわかりませんでした。
お手数ですが、もし差し支えなければ[その他]→[設定内容の保存/復元]で設定
をファイルに保存したものを送ってもらえるとこちらでも同じことが確認できる
と思います。
もし送っていただける場合、"PEH00775@nifty.com"まで秀丸担当宛であることを
書いて送ってもらえると助かります。

[ ]
RE:31743 コードの折りたたみについての要No.31744
kou7 さん 12/10/29 18:51
 
返信ありがとうございます。

まず、アウトライン解析にはチェックマークを入れておらず、インデントの深さのみ
で折りたたみを行っていることを報告させていただきます。

現在時間がなく詳しい検証ができないのですが、
少し確認してみたところ折りたたみの挙動が前回報告したときと変わっているようで
す。

1つめの例では:単独や半角空白を入れても問題が無くなったものの、menu:など:を最
後に入れるとそこまで閉じてしまいます。

そしてinit:で挙げた例については、相変わらずです。(init:は単独ではなくインデ
ントされてコードが書かれている)

設定ファイルを送りますので、検証のほどよろしくお願いします。

[ ]
RE:31744 コードの折りたたみについての要No.31748
秀丸担当 さん 12/10/30 13:28
 

ファイルを受け取りました。
ありがとうございます。
設定を反映させて、以下の内容でテストしました。

aaa
    bbb

:

label 1


aaa

init:


aaa

#コメント

menu:

init:


内容は同じで、(無題)の内容と、test.rpyと、test.pyという3つのパターンで
試しました。

全てで共通なのが、折りたたみ可能な+マークが付くのは、最初のaaaだけでした。
おそらく、折りたたみ可能な条件が「インデントの深さ」だけに絞った話という
ことで、2番目と3番目のaaaは送っていただいた設定では関係ない別の問題と
いうことかと思います。

最初のaaaだけの折りたたみ可能な範囲は、(無題)とtest.pyのにおいては、2行
目「bbb」と3行目の空行の合わせて2行が折りたたまれました。
test.rpyだけは、2行目の「bbb」だけが折りたたまれました。

test.rpyが期待通りで、(無題)とtest.pyが期待するものではないということだ
と思います。

設定を確認してみたところ、[その他]→[ファイルタイプ別の設定]で、
無題と.PYについては「共通」の設定で、折りたたみ可能な条件の「終端の空行
とコメントは除外する」がOFFでした。
.RPYについては、専用の設定で、折りたたみ可能な条件の「終端の空行とコメン
トは除外する」がONでした。
おそらくこの設定の違いで、期待通りにできる場合とできない場合があるのだと
思います。

[ ]
RE:31748 コードの折りたたみについての要No.31750
kou7 さん 12/10/30 20:18
 
返信ありがとうございます。

.rpyの設定で確認をしているので、他の設定は無視してもかまいません。

>全てで共通なのが、折りたたみ可能な+マークが付くのは、最初のaaaだけでした。

init:以下はインデントされてコードがずらーっと書かれているはずなので、
init:に折りたたみマークが付かないのはおかしいはずなのですが……。

その3つのコードの内、2番目と3番目に書かれているコードでの問題はaaa
からもinit:以下を折りたためてしまうということです。

本来ならばaaa以下はインデントされていないため、
折りたたみマークが出ないのが正しいのではないでしょうか。

[ ]
RE:31750 コードの折りたたみについての要No.31751
秀丸担当 さん 12/10/31 09:44
 

詳しい情報ありがとうございます。
init:以下にインデントされたコードがあるということで、再現できました。
調べてみて、インデントの深さによる条件は空白やタブの量だけでなく、他にも
条件がありました。失礼しました。

インデントが浅くても、以下の条件ではインデントを無視するようになっていま
した。
・空白やタブだけの行
・コメント行
・C言語のための、#ifdefなどの行
・C言語のための、ラベルの行(Label:という書き方)


例えば、C言語で以下のような書き方で、インデントせずに行頭に書くことがあ
りますが、行頭に書いてもインデントは判断できるようにしてありました。
この例ではifの行で、最後の}までを折りたたみます。

if( x ) {
    xxxx();
    xxxx();

//コメント
Label:
    xxxx();
    xxxx();
    xxxx();

#ifdef X
    xxxx();
#endif

    xxxx();
}


言語によって不要なこともあるということがわかり、こういった自動的は判断を
するかどうかのオプションをさらに追加させていただきます。

[ ]
RE:31751 コードの折りたたみについての要No.31755
kou7 さん 12/11/01 13:19
 
新たな設定を作っていただけるとのことで、ありがとうございます。

またβ版のテストもさせていただきますのでよろしくお願いします。

[ ]