【要望】折りたたみ状態を保存/再現No.26538
シナモン さん 09/05/11 05:40
 
編集中のファイルの、折りたたみの状態を保存することって、
可能でしょうか?

デスクトップ保存みたいな感じで、編集中のファイルの
折りたたみ状態を保存、再度開いたときに再現してくれると
うれしいのですが。

もし、すでにできる、ということでしたら、
教えていただけると助かります。

いまはムリということでしたら、ぜひ、
次回、ご検討ください。

ついでに、これは、アイディアだけなんですが、
タブで開いているファイルを
ひとつのアウトラインで表示するようなことって、
できませんか?
使い道がありそうな気が。


こんな感じ
-----
File_1.txt
 |-- ◆第1章 ○○
     |-1-1 ○○
     |-1-2
       :
       :
File_2.txt
 |-- ◆第2章 ○○
     |-2-1 ○○
     |-2-2
       :
       :
-----


#アウトライン、最近使い出したんですが、
#ものすごい強力で使いやすいです。
#ありがとうございます。

[ ]
RE:26538 【要望】折りたたみ状態を保存/No.26540
秀丸担当 さん 09/05/11 10:10
 

>編集中のファイルの、折りたたみの状態を保存することって、
>可能でしょうか?

現状では、折りたたみの状態を保存することはできないです。
もしやるとした場合、テキスト以外のデータをどこかに保存することになると思
います。
もし自動で覚えておくような機能だとしたら、テキストファイルと並行した情報
ファイルを作ったり、サブストリームに書き込むといったことが考えられますが、
テキストファイル以外の情報を書き込むというのは、テキストエディタの範疇を
超えるような機能になってしまいそうです。
[ウィンドウ]→[デスクトップ保存]を手動で選ぶのと同様に、任意で情報ファイ
ルを作成するということでしたら、テキストエディタの範疇を超えたとは言えな
いかもしれないです。
ご意見として参考にさせていただきます。

もしマクロを作ることができれば、現状でも手動で保存する機能として作ること
ができるかもしれないです。

>ついでに、これは、アイディアだけなんですが、
>タブで開いているファイルを
>ひとつのアウトラインで表示するようなことって、
>できませんか?

こういうことができたら便利だと思います。
内部的な仕組みの都合上、現実的にやるにはいろいろ難があるかもしれませんが、
要望として参考にさせていただきます。
将来バージョンでは、ウィンドウ一覧のようなものを枠に表示させることも考え
ていて、2つの枠を使って似たような状態にはできるかもしれません。

[ ]
RE:26540 【要望】折りたたみ状態を保存/No.26541
シナモン さん 09/05/12 01:03
 
お返事どうもです。

>[ウィンドウ]→[デスクトップ保存]を手動で選ぶのと同様に、任意で情報ファイ
>ルを作成するということでしたら、

そそ。そんな感じです。

カーソル位置の復元みたいに、
オンにしておくと、最新の10個分だけ覚えておいて
再現してくれるとか、そんな感じです。


>もしマクロを作ることができれば、現状でも手動で保存する機能として作ること
>ができるかもしれないです。

なるほど。ちょっとチャレンジしてみます。


>要望として参考にさせていただきます。
>将来バージョンでは、ウィンドウ一覧のようなものを枠に表示させることも考え
>ていて、2つの枠を使って似たような状態にはできるかもしれません。

ありがとうございます。
期待しています。

[ ]
RE:26540 【要望】折りたたみ状態を保存/No.26542
シナモン さん 09/05/12 07:59
 
折りたたみ状態保存の件、
マクロで自己解決しました。
ありがとうございました。

もうひとつ、アウトラインがらみで。
本文とアウトラインツリーで
折りたたみ状態を常に同期するような
ことって、できますか?
本文を折りたたむと、同時にツリーも折りたたまれる、
みたいな。

ないようなら、ちょっと欲しいかも。
ご検討ください。

[ ]
RE:26542 【要望】折りたたみ状態を保存/No.26543
秀丸担当 さん 09/05/12 09:24
 

>折りたたみ状態保存の件、
>マクロで自己解決しました。

マクロでできましたか。
すごいです。

>本文とアウトラインツリーで
>折りたたみ状態を常に同期するような
>ことって、できますか?

本文の「折りたたみ」機能の折りたたみ状態と、アウトライン解析の枠の折りた
たみ状態を常に同期するということはできないと思います。
現状では、マクロでアウトライン解析の枠の折りたたみ状態を操作することはで
きないので、マクロを使ってもできないと思います。
申し訳ありません。
同様の要望を他の方からも頂いたことがあり、ご意見参考にさせていただきます。

[ ]
RE:26543 【要望】折りたたみ状態を保存/No.26544
シナモン さん 09/05/12 17:04
 
>マクロでできましたか。
>すごいです。

ありがとうございます。
公開して他人に使ってもらうようなものではないのですが、
話題にした責任上、貼り付けておきますね。
もちろん、間違いなどご指摘は歓迎しますが、
とりあえず動いているので、放置していただいてかまいません。

>同様の要望を他の方からも頂いたことがあり、
>ご意見参考にさせていただきます。

ありがとうございます。
よろしくお願いします。

---
// 折りたたみ状態の保存/再現
// 対象ファイルの末尾に書き込むのでどうだろう。
// -------------------------------------------------------------

Preparation: // 事前の準備
 setcompatiblemode 0x0007 ; // 折りたたみ維持、部分編集解除
 #cx = x ; #cy =y ; // カーソル位置の座標を記憶

ActionSelect: // 保存か再現か選択
 question "折りたたみ保存(Yes)/再現(No)";
 if( result == yes ) {
  goto SaveCondition ; // 保存 <Yes> なら SaveCondition に
 } else {
  goto LoadCondition ; // 再現 <No> なら LoadCondition に
 }

SaveCondition: // 折りたたみ状態を保存する
 // 状態を調べる
 #n = 0 ; // 添字変数の初期化
 gofiletop ;  // ファイルの先頭にカーソル移動
 #fp[#n] = -1 ; // #fp[#n] に-1をセット。終了判定用
 while ( yes ) {
  if ( folded != 0 ) { // その行が折りたたまれていれば
   #fp[#n] = y ; // #fp[#n] に行番号を記憶 *行番号は0始まり
   #n = #n + 1 ; // #n を + 1
   #fp[#n] = -1 ; // 次の #fp[#n] に-1をセット。終了判定用
  }
  #ln = y ; // 行位置を記憶
  nextfoldable ;  // カーソルを次の折りたたみ可能行に移動
  if ( #ln == y ) { // 行移動に失敗したら(飛ぶ前と同じ行だったら)
   break ;   // Whileループから脱出
  }
 }
 // データの書き込み
 gofileend ;  // ファイルの末尾に
 insert "\n" ; // 改行を挿入
 insert "//** 折りたたみ状態 - マクロ用 **//\n" ; // 識別用の文字列
 #n = 0 ; // 添字変数の初期化
 while ( #fp[#n] != -1 ) { // #fp[#n] が -1 じゃない間は繰り返す
  insert str ( #fp[#n] ) + "\n" ;
  #n = #n + 1 ;
 }
 insert "*****\n" ; // 識別用
 message "折りたたみの状態を、保存しました。" ;
 goto EndEnd ;

LoadCondition :
 // データの読み出し
 #n = 0 ; // 添字変数の初期化
 gofileend ; // ファイルの末尾へカーソル移動
 searchup "//** 折りたたみ状態 - マクロ用 **//" ; // 保存データの先頭へ
 if ( result == 0 ) { // 見つからなかったら終了
  message "保存したデータが見つからないので、マクロを終了します。" ;
  goto EndEnd ;
 }
 golinetop ; // 見つかったら、行頭に移動
 down ; // 下の行へ
 while ( yes ) {
  golinetop ; // 行頭に移動
  beginsel ; // データをクリップボードに
  golineend ;
  copy ;
  beginclipboardread ; // クリップボードの読み出し
  $fp[#n] = getclipboard ; // $fp[#n] にデータを格納
  if ( $fp[#n]  == "*****" ) { // 識別用の文字列に当たったら、
   break ; // Whileループから離脱
  }
  down ; // 下の行へ
  #n = #n + 1 ;
 }

 // 折りたたみの再現
 #n = 0 ; // 添字変数の初期化
 while ( yes ) {
  if ( $fp[#n] == "*****" ) { // 識別用の文字列に当たったら、
   break ; // Whileループから離脱
  }
  moveto 1, val ( $fp[#n] ) ; // 折りたたまれていた行にカーソル移動
  fold ; // 折りたたみ処理
  #n = #n + 1 ;
 }
 message "折りたたみの状態を、再現しました。" ;

EndEnd: // 終了処理
 moveto #cx, #cy ; // カーソルを元の位置に戻す
 endmacro ; // マクロ終了

[ ]
RE:26538 【要望】折りたたみ状態を保存/No.26570
シナモン さん 09/05/18 04:55
 
折りたたみ状態保存/再現の件です。続きです。
マクロ使っていて気がついたんですが、
見出し行の左横の[-]を押して折りたたんだときと
マクロ[fold]で折りたたんだときの
空行の扱いが異なるようです。
急ぎませんが、調べていただけないでしょうか?
私の勘違いでしたら、ご指摘いただけると助かります。


たとえば、次のようなテキストの場合、
========================
★<見出し行1> Leve l
--見出し行 Level 2
----あいうえお
----かきくけこ
----<空行>
--見出し行 Level 2
----さしすせそ
----たちつてと
----<空行>
★<見出し行2> Leve l
========================

<見出し行1>の左横の[-]を押したときは、
========================
★<見出し行1> Leve l
★<見出し行2> Leve l
========================
となりますが、
同じ場所でマクロ[fold]を実行すると、
========================
★<見出し行1> Leve l
----<空行>
--見出し行 Level 2
----さしすせそ
----たちつてと
----<空行>
★<見出し行2> Leve l
========================
となるようです。

[ ]
RE:26570 【要望】折りたたみ状態を保存/No.26573
秀丸担当 さん 09/05/18 10:53
 

試してみたのですが、再現させることができませんでした。
同じサンプルテキストで、空行の行だけを改行だけにして、
アウトライン解析を、
レベル1:行頭の文字列「★<見出し行」
レベル2:行頭の文字列「--見出し行」
として定義して、fold;とだけ書いたマクロを実行してみましたが、問題は見ら
れませんでした。

もしかしたらアウトライン解析が完了する前にfoldが実行される影響なのかもし
れないと思って、「折りたたみ用の余白」「見出しバー」「アウトライン解析の
枠」を全てOFFにした状態からもやってみましたが、再現できませんでした。
あるいは、自動起動マクロでファイルを開いた直後に実行しているとしたら、そ
の影響なのかもしれないと思いましたが、その影響は分かりませんでした。

[その他]→[ファイルタイプ別の設定]→[アウトライン]→[折りたたみ]→[折り
たたみ可能な条件の設定]は、「行頭の無効行」以外は全てONの状態です。

解決になるかどうかわかりませんが、もしfold文でアウトライン解析との対応だ
けを対象したいという場合、fold 0x0020; としてみると空行で折りたたみして
しまうことは無くなるかもしれませんが、どうでしょうか。

[ ]
RE:26573 【要望】折りたたみ状態を保存/No.26576
シナモン さん 09/05/18 17:37
 
>あるいは、自動起動マクロでファイルを開いた直後に実行しているとしたら、そ
>の影響なのかもしれないと思いましたが、その影響は分かりませんでした。

たしかに、トラブルは
自動起動マクロで実行したときだけに
起きるようです。

>解決になるかどうかわかりませんが、もしfold文でアウトライン解析との対応だ
>けを対象したいという場合、fold 0x0020; としてみると空行で折りたたみして

ありがとうございます。
これも試してみますが、
根本的な対策ではないので、
もうちょい調べてみますね。

[ ]
RE:26576 【要望】折りたたみ状態を保存/No.26577
シナモン さん 09/05/18 18:20
 
調べていたのですが、
マクロヘルプを見ると、
-----
fold, foldall文
パラメタを指定して、折りたたみ可能な条件を指定することができます。
パラメタが無い場合はファイルタイプ別の設定に従います。
-----
となっていますが、
試しに自動起動マクロで
foldall
を実行すると、
----
全ての折りたたみ
□アウトライン解析との対応
□インデントの深さ
  :
  :
□行の強調表示区切り
[ OK ] [ キャンセル ]
----
というダイアログが出ますね。

自動起動で実行すると
ファイルタイプ別の設定を読み込む前に
マクロが実行されいるような印象なのですが、
そんなことはないでしょうか?

ちょっと調べていただけると助かります。
勘違いなら、ご指摘いただけるとうれしいです。

[ ]
RE:26577 【要望】折りたたみ状態を保存/No.26578
シナモン さん 09/05/18 18:24
 
書き忘れましたが、
マクロの冒頭に
---
foldall ; // 全て折りたたみ
unfoldall ; // 全て展開
---
と入れることで、
クリックの手間は増えましたが、
期待通りの動きにはなりました。

ありがとうございます。

[ ]
RE:26578 【要望】折りたたみ状態を保存/No.26579
シナモン さん 09/05/18 18:36
 
何度もすみません。環境は、次のとおりです。
----
秀丸: Ver.7.11
OS: Windows XP Pro SP3
CPU: Pen4 2.8GHz
Memory: 1GB
AV: Norton Internet Security 2009
----

[ ]
RE:26579 【要望】折りたたみ状態を保存/No.26580
秀丸担当 さん 09/05/19 09:37
 

お手数をおかけして申し訳ありません。
改めていろいろテストしてみたところ、やはりアウトライン解析が完了する前に
foldが実行される場合の問題だったようです。
ご指摘の通り、foldallしておくと、問題を回避することができました。
foldallはパラメタ無しでファイルタイプ別の設定がデフォルトのままの状態で
は、ダイアログが出るようになっていました。これは明示的にダイアログを出す
かどうかを指定できるように改善するべきと思います。
現状でえは、foldall 0x20;というように、どの方法で折りたたみをするかを指
定することで、ダイアログを出さずに全て折りたたみできました。

[ ]
RE:26580 【要望】折りたたみ状態を保存/No.26581
シナモン さん 09/05/19 12:52
 
いろいろありがとうございます。
とりあえず、支障のない範囲で運用できるようになりましたので、
あとは、今後のバージョンアップに期待します。

[ ]