アウトライン解析でのレベルの上げ下げにNo.32624
取手呉兵衛 さん 13/10/06 09:46
 
アウトライン解析でのツリー操作について質問があり、投稿します。

今の秀丸では、「この見出しだけのレベルを上げる/下げる」は可能ですが、
「下位レベルも含めてレベルを上げる/下げる」ことは、できないのでしょうか?

例えば、1個の上位レベルの項目に沢山の下位レベルの項目が含まれている場合、
この全体を1レベル下げようとすると、下にぶら下がる全ての項目について、
いちいち「この見出しだけのレベルを下げる」を実行するか、
見出し文字列を手動で打ち直す必要があるのか、ということです。

もし不可能なのでしたら、以後のバージョンで別コマンドかオプション選択で
そのように操作できるよう、検討していただきたく。

アウトラインプロセッサのツリー操作では、あるノードのレベルを上げ下げすると、
その下にぶら下がる部分も、まとめて一緒に上げ下げされる方が、
標準的だと思いますので…。

あるいは別マクロで実行可能なようであれば、方法を教えていただきたく。

以上、よろしくお願い致します。

[ ]
RE:32624 アウトライン解析でのレベルの上No.32625
秀丸担当 さん 13/10/07 10:50
 

秀丸エディタのアウトライン解析は、テキスト内容を解釈しているにすぎないの
で、難しいところがあります。
いわゆるアウトラインプロセッサやワープロ系ソフトのように独自のファイル形
式で情報をアウトラインとしての情報を埋め込めればどのようにでもできると思
いますが、テキストエディタの場合は簡単にはいかないです。

アウトライン解析の設定方法には様々な条件を指定できて、関数や正規表現など、
条件によってはそもそもレベルの上げ下げができないです。
そういう上げ下げできないものが配下に含まれていたら、いままで上げ下げでき
ていた見出しもできないことになって、より自由度が下がってしまうと思います。

例えば設定が全て「行頭の文字列」に限られているなど、限定的な条件ではなん
とかすることは考えられると思います。
「"."の数で階層を表す用」でリセットした場合の例では、配下も含めて上げ下
げできることは考えやすいです。

手動でまとめて編集するとしたら、配下も含めて範囲選択し、その範囲を部分編
集して、見出しを全置換するという操作になると思いますが、それをマクロにす
ると以下のような感じになります。

例1:

//レベルを下げる
setcompatiblemode 0x2000f;
disabledraw;
#l=lineno;
selectfoldable 0x20;
rangeeditin;
replaceallfast "^(\\.+)", "\\1.",regular;
rangeeditout;
moveto #x,#y;
refreshoutline;
moveto2 0,#l;
endmacro;


例2:

//レベルを上げる
setcompatiblemode 0x2000f;
disabledraw;
#l=lineno;
selectfoldable 0x20;
rangeeditin;
replaceallfast "^(\\.+?)\\.", "\\1",regular;
rangeeditout;
moveto #x,#y;
refreshoutline;
moveto2 0,#l;
endmacro;



ただこの場合でも、「"."の数で階層を表す用」でリセットした場合は6階層ま
でしか定義していないので、6階層を超えると階層が違ってみえてくると思いま
す。

[ ]
RE:32625 アウトライン解析でのレベルの上No.32629
取手呉兵衛 さん 13/10/08 00:20
 
丁寧に回答していただき、ありがとうございます。
マクロの例まで示していただき、恐縮です。

広い条件でこれを可能にするのは、意外に難しいんですね…。

自分の場合、アウトライン解析用のレベル1〜6の行頭文字列を、
「【」「■」「◆」「▼」「▽」「◎」という風に指定しています。
解析は段落先頭文字だけで行っています。

この条件に限り、あらかじめ範囲選択をせず、アウトライン解析ウィンドウで
選択しているノードを下位レベルも含めて全て1レベル上げるには、
例示していただいたマクロを、次のように変更すればよいのでしょうか。

1) selectfoldable を使用せず、選択ツリーの先頭行から 次の同レベルの
  行頭文字列を後方検索、その行の1行前までを選択範囲とする。
2) 選択範囲内の段落先頭にある「■」のみを「【」に置換する。
3) 同様に「◆」を「■」、「▼」を「■」…という風に、下位レベルの
  先頭文字列を順次置換する。

これを機会に、マクロ作成にチャレンジしてみたいと思いますが、
1) でツリー選択状態から、ツリー先頭行の行番号(または位置)を
どう取得していいのかが、よく分かりません。

重ねての質問になりますが、お教えいただけると幸いです。

[ ]
RE:32629 アウトライン解析でのレベルの上No.32630
秀丸担当 さん 13/10/08 10:39
 


>1) selectfoldable を使用せず、選択ツリーの先頭行から 次の同レベルの
>  行頭文字列を後方検索、その行の1行前までを選択範囲とする。

この選択方法については、一応 selectfoldable 0x20; でできるようになってい
るはずでした。
ただ試してみたら、アウトライン解析の枠,見出しバー,折りたたみ用の余白の
うちどれか1つが表示されている必要があり、どれも表示されていない場合はう
まくいっていませんでした。
表示されていなくてもうまくいくように修正させていただきます。

いずれかが表示されている場合は、以下の様なマクロでできました。

//レベルを下げる
setcompatiblemode 0x2000f;
disabledraw;
#l=lineno;
selectfoldable 0x20;
rangeeditin;
replaceallfast "^(\\s*)▽", "\\1◎",regular;
replaceallfast "^(\\s*)▼", "\\1▽",regular;
replaceallfast "^(\\s*)◆", "\\1▼",regular;
replaceallfast "^(\\s*)■", "\\1◆",regular;
replaceallfast "^(\\s*)【", "\\1■",regular;
rangeeditout;
moveto #x,#y;
refreshoutline;
moveto2 0,#l;
endmacro;


//レベルを上げる
setcompatiblemode 0x2000f;
disabledraw;
#l=lineno;
selectfoldable 0x20;
rangeeditin;
replaceallfast "^(\\s*)■", "\\1【",regular;
replaceallfast "^(\\s*)◆", "\\1■",regular;
replaceallfast "^(\\s*)▼", "\\1◆",regular;
replaceallfast "^(\\s*)▽", "\\1▼",regular;
replaceallfast "^(\\s*)◎", "\\1▽",regular;
rangeeditout;
moveto #x,#y;
refreshoutline;
moveto2 0,#l;
endmacro;

[ ]
RE:32630 アウトライン解析でのレベルの上No.32637
取手呉兵衛 さん 13/10/10 23:42
 
質問に対して詳しく答えていただき、ありがとうございます。

「selectfoldable 0x20」を下位レベルを含まない、そのレベルの部分のみの
選択と勘違いしていましたので、的外れな質問になってしまいました…。

示していただいた通りにマクロを登録したところ、いとも簡単にできました!
こんなにコンパクトに書けるんですね…。

早速2つのマクロをショートカットにも登録したのですが、その関係から
もう一つ、質問をお許し下さい。

上の2マクロを「Ctrl+1/2」や「Ctrl+L/R」などに登録した時は、問題なく
動作したのですが、「Ctrl+Left/Right」という風にカーソルキーに割り当てると、
何故か上手く動きませんでした。
「キー割り当て拡張」にチェックを入れても、同じです。

確認したところ、カーソルが本文内の見出し行にあれば「Ctrl+Left/Right」
でもちゃんと動くのですが、アウトライン枠でその見出しを選択した状態で
実行すると、何も起こりませんでした。

何かの理由で、アウトライン枠ではカーソルキーを使ったキー割り当ては
行えないのでしょうか? もし方法があるのでしたら、教えていただきたく。

お手数ですが、よろしくお願い致します。

[ ]
RE:32637 アウトライン解析でのレベルの上No.32638
秀丸担当 さん 13/10/11 10:03
 

ツリー表示があるときのキー割り当ては、一部のキー操作でツリー表示独自の操
作が優先されているものがあります。
アウトライン解析の枠の右上の▼マークを押して出てくるメニューの操作の幾つ
かと、ヘルプの「アウトライン解析の枠」のページに書かれている操作がありま
す。

Ctrl+Shift+C ツリーそのものをコピー
Alt+Left この見出しだけのレベルを上げる
Alt+Right この見出しだけのレベルを下げる
Alt+Up 下位レベルも含めて上移動
Alt+Down 下位レベルも含めて下移動
Alt+1 レベル1まで展開
Alt+2 レベル2まで展開
Alt+3 レベル3まで展開
Alt+4 レベル4まで展開
Alt+A 全て展開
Alt+0 同期して展開
Shift+Right 子を全て展開

これに加えて、ヘルプに書かれていない操作もありました。
ヘルプ書かれておらずすみません。

Ctrl+Left 左スクロール
Ctrl+Right 右スクロール
Ctrl+Up 高速上移動
Ctrl+Down 高速下移動

この操作もヘルプに追記させていただきます。
Ctrl+Left/Rightに標準の「単語左」「単語右」以外が割り当てられていたら、
キー割り当てを優先するようにしたらいい気がするので、その方法も検討してみ
ます。

[ ]
RE:32638 アウトライン解析でのレベルの上No.32640
取手呉兵衛 さん 13/10/12 14:54
 
重ねての回答、ありがとうございました。

やはり、アウトライン解析枠では、そこが予約されていたんですね。
予約外の「Shift+Alt+Left/Right」「Shift+Ctrl+Left/Right」
に割り付けたところ、ちゃんと動作することを確認しました。

前者の場合「Alt+Left/Right」で下位レベルを含まない上げ下げ、
「Shift+Alt+Left/Right」で下位レベルを含む上げ下げとなり
ますので、こちらの方がスッキリした配置かなと思います。

以下は、我が儘な1ユーザーの要望になりますが…。

アウトラインプロセッサを使ったことのあるユーザーとしては、
やはり「何か1つのキー+Left/Right/Up/Down」で、下の階層まで
含めたレベルの上げ下げ・上下移動を統一して行えた方が、
自然に感じます。

先のコメントでも少し書かれていましたが、アウトライン枠における
「Alt or Ctrl+Left/Right/Up/Down」について、ユーザー定義の
キーを優先するオプションを考えていただけると、ありがたいです。

あるいは、アウトライン枠でのキー割り当ても、別途ユーザー側で
変更できればベストなのですが、さすがにそこまでは無理でしょうか…。

[ ]
RE:32640 アウトライン解析でのレベルの上No.32648
秀丸担当 さん 13/10/15 09:52
 

>先のコメントでも少し書かれていましたが、アウトライン枠における
>「Alt or Ctrl+Left/Right/Up/Down」について、ユーザー定義の
>キーを優先するオプションを考えていただけると、ありがたいです。
>
>あるいは、アウトライン枠でのキー割り当ても、別途ユーザー側で
>変更できればベストなのですが、さすがにそこまでは無理でしょうか…。

キー割り当てを個別に指定できたらよりいいですが、次のバージョンでは、マク
ロが割り当てられていたら、マクロを優先するように修正させてただきます。

キー割り当てもできたらいいということでご意見参考にさせていただきます。

[ ]