「
位置情報を保存してから「すべて選択/選択解除」(非スクロール)
」を編集中
2019年10月22日 (火) 00:13時点における
Sukemaru
(
トーク
|
投稿記録
)
による版
(ページを新規作成)
(差分) ← 古い版 |
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
== 【include 版】すべて選択/選択解除 (非スクロール) == ステータスバーに表示される '''選択範囲の文字数・行数''' の情報や、「[[検索ヒット数表示(選択文字列)#機能強化バージョン|文字数・行数・ヒット件数(選択文字列)]]」マクロや「[[バイト数]]」マクロによる追加情報、または「[[文字カウント]]」マクロなどを利用する機会が多い場合、「すべて選択 (Ctrl+A)」を実行して文書全体の文字数・行数などを確認したいときにキャレットやスクロール位置がスッ飛んでいってしまったり、選択範囲を解除したときにも同様のことが起こったりしてしまったりするので、スクロール位置とキャレット位置を元に戻す手間が必要でちょっと不便です。 以下のふたつのマクロを使って「すべて選択」/「選択範囲を解除」すると、無用なスクロールやキャレット移動がなくなります。<br> また、<span style="color:#0000c0;">ふたつのマクロを交互に実行することで「任意の範囲選択状態」と「すべて選択状態」のトグル切り替えができます。</span> お好みでツールバー(マクロバー)アイコンに登録するか、キーボードショートカットに割りあててご利用下さい。<br> ※ すでに [[キーアサイン集]] の「[[キーアサイン集#すべて選択 (非スクロール)|すべて選択 (非スクロール)]]」「[[キーアサイン集#選択範囲を解除 (非スクロール)|選択範囲を解除 (非スクロール)]]」マクロを導入している場合は、ソースコードをコピペして上書き保存するのがよいとおもいます。 ;【include版】 すべて選択 (非スクロール) :「すべて選択」を実行する前のキャレット位置とスクロール位置を保存してから「[[キーアサイン集#すべて選択 (非スクロール)|すべて選択 (非スクロール)]]」を実行します。<br> ※ 「すべて選択」前に選択範囲があった場合は、選択範囲の開始/終了位置を保存します。 :* 開いているタブごとに位置情報を保存し、すでに閉じられたタブの情報は逐次削除します。 :*「'''無題-<n>'''」タブの情報は<span style="background:#bfdfff;"> ファイル名 = "無題" </span>として保存します。<br><span style="color:#c00;">※ 「選択解除」するまえに別の「無題-<m>」タブでこのマクロを実行すると "無題" の位置情報は上書きされます。</span> ;【include版】 選択範囲を解除 (非スクロール) :「【include版】 すべて選択 (非スクロール)」マクロが保存した情報を利用して、キャレット位置とスクロール位置を復旧します。<br> ※ 当該タブの情報は、このマクロの実行時に削除されます。 :*「【include版】 すべて選択 (非スクロール)」マクロが保存した位置情報がない場合は「[[キーアサイン集#選択範囲を解除 (非スクロール)|選択範囲を解除 (非スクロール)]]」を実行します。<br><span style="color:#0000c0;"> ※「すべて選択」状態を解除したときに復元された選択範囲は、このマクロをもう一度実行すると完全に解除されます。</span> <br> <div class="warningbox"> * このふたつのマクロは、「[[includeライブラリ]]」を利用し、外部ファイル(JSON)に情報を保存/参照します。<br> あらかじめ「includeライブラリ」をインストールしてください。 * 外部ファイルの保存場所は '''Mery\Macros\MacroSettings\<すべて選択>.json''' <br> または '''%AppData%\Mery\MacroSettings\<すべて選択>.json''' です。 * 環境によっては、外部ファイルへの書き込みの '''遅延''' などによりエラーが発生することがあるかもしれません。 </div> :* JSON ファイルには、アクティブなタブの「ファイルパス」「全文字数」「選択範囲の開始/終了位置」「スクロール位置」を保存します。<br> 複数のタブで「すべて選択」を実行している場合は、それぞれのタブの情報が保存されます。 :* JSON ファイルへのファイルアクセスが最小限になる仕様にしてあります。<br>また、「すべて選択」を実行したときに他のタブで開かれていないファイルの情報があれば、それらのファイル情報は逐次削除するので、JSON ファイルが肥大化することはありません。 == ダウンロード == >> 「[[ファイル:【include 版】すべて選択/選択解除.zip]] (アイコン入り)」 == ソースコード == === 【include版】 すべて選択 (非スクロール) === <source lang="javascript"> #title = "すべて選択" #tooltip = "すべて選択 (スクロールしない)" #include "include/IO.js" #icon = "select_all.ico" // #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",111 // 推奨割当:「Ctrl + A」 /** * すべて選択時にスクロールしない(※通常は文書の末尾までスクロールする) * * 2019/10/21 【include 版】 * ・「すべて選択」前のキャレット位置(または選択範囲)と * スクロール位置の情報を JSON ファイルに書き出す * → 「選択解除」マクロで、保存した位置情報への復旧可 * ・現在開かれていないファイルの情報がリストにあれば削除する */ // ---------- ▼ 設定項目 ▼ ---------- // 位置情報の保存用ファイルのベース名 var jsonName = "すべて選択"; // ※「すべて選択」マクロと「選択解除」マクロで同一の名前を指定すること // 保存先は… (e.g. "すべて選択" の場合) // ・ポータブル版: Mery\Macros\MacroSettings\すべて選択.json // ・インストール版: %AppData%\Mery\MacroSettings\すべて選択.json // ---------- ▲ 設定項目 ▲ ---------- var d = editor.ActiveDocument, s = d.selection; var dText = d.Text, dLength = dText.length; if ( s.Text.length != dLength ) { /** * フルパス、文字数 * 選択範囲の開始/終了位置(anc, act) * スクロール位置(sx, sy) */ var dPath = d.FullName || "無題"; var anc = s.GetAnchorPos(), act = s.GetActivePos(); var sx = ScrollX, sy = ScrollY; // すべて選択 (スクロールしない) Redraw = false; s.SetActivePos( 0 ); s.SetActivePos( dLength, true ); ScrollX = sx; ScrollY = sy; Redraw = true; var setting = { fileList: [] } setting = IO.Deserialize( setting, jsonName ); // JSON 読み込み var list = setting.fileList; var infoExist = false; ListLoop: for ( var i = 0, path; i < list.length; i ++ ) { path = list[i][0]; // リストにファイルの情報があれば書き換える if ( list[i][0] == dPath ) { infoExist = true; list[i] = [ dPath, dLength, anc, act, sx, sy ]; } // リストに現在開かれていないファイルの情報があれば削除する else { var eCount = Editors.Count; var docus, dCount, filePath, hit; DeleteLoop: for ( var ee = 0, hit = 0; ee < eCount; ee ++ ) { docus = Editors.Item( ee ).Documents; dCount = docus.Count; for ( var dd = 0; dd < dCount; dd ++ ) { filePath = docus.Item( dd ).FullName; if ( path == filePath ) { hit ++ } } } // end DeleteLoop: // リストから削除し、ループ処理の i をひとつ巻き戻す if ( ! hit ) { list.splice( i --, 1 ) } } } // end ListLoop: // リストにファイルの情報がなければ追加する if ( ! infoExist ) { list.push( [ dPath, dLength, anc, act, sx, sy ] ); } setting.fileList = list; IO.Serialize( setting, jsonName ); // JSON 書き込み } </source> === 【include版】 選択範囲を解除 (非スクロール) === <source lang="javascript"> #title = "選択解除" #tooltip = "範囲選択を解除 (スクロールしない)" #include "include/IO.js" #icon = "selection_collapse.ico" // #icon = "Mery用 マテリアルデザインっぽいアイコン.icl",212 // 推奨割当:「Esc」 /** * 選択解除時にスクロールしない * * 2019/10/21 【include 版】 * ・「すべて選択」マクロ実行前のキャレット位置(または選択範囲)と * スクロール位置の情報を JSON ファイルから読み込んで復旧する * ・「すべて選択」以外の状態から実行したときは * スクロールなしで範囲選択を解除する */ // ---------- ▼ 設定項目 ▼ ---------- // 位置情報の保存用ファイルのベース名 var jsonName = "すべて選択"; // ※「すべて選択」マクロと「選択解除」マクロで同一の名前を指定すること // 保存先は… (e.g. "すべて選択" の場合) // ・ポータブル版: Mery\Macros\MacroSettings\すべて選択.json // ・インストール版: %AppData%\Mery\MacroSettings\すべて選択.json // ---------- ▲ 設定項目 ▲ ---------- var d = editor.ActiveDocument, s = d.selection; var dText = d.Text, dLength = dText.length; var sx = ScrollX, sy = ScrollY; // 「すべて選択」状態のとき if ( s.Text.length == dLength ) { var dPath = d.FullName || "無題"; var setting = { fileList: [] } setting = IO.Deserialize( setting, jsonName ); // JSON 読み込み var list = setting.fileList; var len = list.length; var infoExist = false; var fileInfo; Loop: for ( var i = 0; i < len; i ++ ) { // リストにファイル情報があれば if ( list[i][0] == dPath ) { infoExist = true; fileInfo = list[i]; list.splice( i, 1 ); // リストからファイル情報を削除 setting.fileList = list; IO.Serialize( setting, jsonName ); // JSON 書き込み /** * list[i] = [ dPath, dLength, anc, act, sx, sy ] * フルパス、文字数 * 選択範囲の開始/終了位置(anc, act) * スクロール位置(sx, sy) */ // テキストの文字数が同じなら、選択範囲とスクロール位置を復元 if ( fileInfo[1] == dLength ) { Restore( fileInfo[3], fileInfo[4], fileInfo[5] , fileInfo[2]); break Loop; } // テキストの文字数が異なるなら、選択解除 (スクロールしない) else { Restore( s.GetActivePos(), sx, sy ); break Loop; } } } // end Loop: } // 「すべて選択」以外の状態のときは、選択解除 (スクロールしない) if ( ! infoExist && s.Text ) { Restore( s.GetActivePos(), sx, sy ); } // 関数 Restore( activePos, scrollX, scrollY [, anchorPos] ) function Restore( act, sx, sy, anc ) { anc = anc >= 0 ? anc : act; editor.ActiveDocument.selection.SetActivePos( act ); editor.ActiveDocument.selection.SetAnchorPos( anc ); ScrollX = sx; ScrollY = sy; } </source>
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク