フォーラムの返信を作成しました。
- 作成者投稿
- snow参加者
行コメント(// ……)は先のマクロでもうまく動いているのですが、行の途中から選択している場合のブロックコメント(/* …… */ )の解除がうまく行かない、ということです。
と、先のマクロで一箇所誤りに気付きました。
× startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
○ f = startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd);
まあ、どのみち動いていないのですが。snow参加者コメントはエディタの持つ「状態」ではなく、その場で調べて判断しているため、「今どっちか」が取れないということかも知れませんね。
ちょっと考えてみたのですが、行全体を選択しないパターンの「コメント解除」がうまく行っていません。
「コメント」後の選択範囲を見ると、コメント開始は含まれず、コメント終了は含まれているので、元々ちょっと特殊ですね。function startsWith(a, b) { return b && a.substring(0, b.length) == b; } function endsWith(a, b) { return a.substring(a.length - b.length) == b; } function trim(a) { return a.replace(/^[\s]+|[\s]$/g, ''); } var t = document.selection.Text; if (!t) { document.selection.SelectLine(); t = document.selection.Text; } trim(t); var h = document.Config.Highlight; var f = startsWith(t, h.LineComment1) || startsWith(t, h.LineComment2); if (!f) { startsWith(t, h.CommentBegin) && endsWith(t, h.CommentEnd); } editor.ExecuteCommandByID(f ? 4372 : 4371);
snow参加者失礼しました。OpenFile(file, 0, eeOpenDetectUTF8 | eeOpenAllowNewWindow) ですね…。
snow参加者大きなお世話かも知れませんが、それっぽいものをマクロで書いてみたので貼り付けておきます。
1:
!function() { var file = new ActiveXObject("WScript.Shell").SpecialFolders("Desktop") + "\\filelist.txt"; var name = document.FullName; editor.NewFile(); var p = !1; if (!shell.FileExists(file)) { editor.NewFile(); } else { editor.OpenFile(file, 0, eeOpenDetectUTF8 | eeOpenAllowNewWindow); p = document.selection.Find(name, eeFindAround); document.selection.EndOfDocument(); } if (!p) { document.writeln(name); document.Save(file); } document.close(); }();
2:
!function() { var file = new ActiveXObject("WScript.Shell").SpecialFolders("Desktop") + "\\filelist.txt"; if (!shell.FileExists(file)) return; editor.OpenFile(file, 0, eeOpenDetectUTF8 | eeOpenAllowNewWindow); document.selection.SelectAll(); var t = document.selection.Text; document.close(); var files = t.split('\n'); menu = CreatePopupMenu(); for (var i = 0, k; i < files.length; ++i) { if (!(k = files[i])) continue; menu.Add(k.substring(k.lastIndexOf('\\') + 1), i + 1); } r = menu.Track(0); if (!r) return; editor.OpenFile(files[--r], 0, eeOpenDetectUTF8); // document.selection.insertFromFile(files[--r], 0, eeOpenDetectUTF8); }();
・良く使うファイルを開き、1でデスクトップのファイルに書き出しておきます(手で入れても構いません)。
・2を使うと、ポップアップメニューでファイル名の一覧が出ます。
・削除と移動はありませんが、デスクトップのテキストファイルなので何とでもなるでしょう…。snow参加者なぜかeeOpenAllowNewWindowを指定しても新しいウィンドウが開かれずにそのままロードしてしまうことがあるようで、現状は
editor.NewFile(); if (shell.FileExists(file)) { editor.OpenFile(file, eeOpenDetectUTF8); }
とすることにしました。
環境に起因する問題なのかは分かりません。snow参加者ありがとうございました。
まさに、shell.FileExists()が、求めていたものでした。snow参加者ご返信ありがとうございます。
すみません、前提条件が漏れていました。
新規作成するかどうかを確認せずにNewFile()へ流したいのです。
よろしくお願いいたします。snow参加者ご返信ありがとうございます。
すみません、ということは私が「今すぐインストール」というチップを見落として、終了させているようです。
次回注意して見てみます。snow参加者エンジニアの端くれとして言わせていただくと、このような場合は関数を作って一連のコードをまとめることを提案します。
snow参加者横から済みませんが…。
JavaScriptの言語仕様によるもののため、エディタに求めることではないと感じました。それから「編集」は私も良く使っていますが、反映されなかったことはないと思います。
(実際、たった今この投稿で試しました)snow参加者ご返信ありがとうございます。
お問い合わせ感謝いたします。待つことにします。「すべての現役ブラウザでvalid」は確かに正確ではありませんが、種類ではなく利用率で言えばかなり100%に近いのではないでしょうか。
IE11を考慮しつつ更新を続けているサイトも、もう少ないのでは…と。snow参加者横から失礼します。
もしかしたら、マクロオプションの「既定でマクロを非同期に実行する」のチェックを外すと期待どおり動くのではないかと思いました。
このオプション自体、元々私が「なぜかうまく動かない」系の質問をさせていただいたのが大元で、生まれたものと記憶しています。snow参加者ご返信ありがとうございました。
確認しました。一番上のプルダウンだったのですね。
確認不足でした。snow参加者ご返信ありがとうございます。
すみません、確かにそれでフリーズは防げるのですが。
チェック自体をなくしたいのではなく、チェック中にUIがフリーズするのをなくしたいだけなのです。
もしかするとアプリのレイヤーではどうすることもできないのかも知れませんが。よろしくお願いいたします。
snow参加者開発お疲れ様です。
私も、同じところが気になっていました(ベータ版は末尾が901~で、それ以外が正式版と認識しています)。
最新でいくと、一度22_2.9xxにすると、22_2.yには更新できず、22_3.0を待つ必要があるのですよね。特定の機能追加や修正の確認で、βを入れることが多いのではないでしょうか。
それが反映された正式版(末尾.0以外)のリリースを受けて、チェックを外して戻したいです。
つまり、数字の大小ではなくリリース日判断になればと。
その時点の変更がすべて次の正式版(末尾.0以外)に反映されるとは限りませんが、それは末尾.0でもあり得ると思います。snow参加者ご対応ありがとうございました。
さっそくv22.2.915をインストールして確認してみたところ、期待どおりジャンプしてくれました。
とくにファイル検索は便利な機能だけに、ジャンプしてくれるのとしてくれないのとでは、個人的にかなり違いを感じます。
改めて、スピーディな対応ありがとうございました。snow参加者ご返信ありがとうございます。
はい、そこのチェックはずっと入れたままです。
念のためいったん外して再度チェックしてみたのですが、状況は変わりませんでした。snow参加者ご対応ありがとうございました。
解消を確認しました。snow参加者1つ目。
var k = 10; // 上端からの行数 Window.scrollTo(1, document.selection.GetActivePointY(eePosView) - k + 1);
2つ目。
document.write(document.Config.Highlight.CommentBegin); // コメント開始 document.write("コメント"); document.write(document.Config.Highlight.CommentEnd); // コメント終了
こういう感じでしょうか。
snow参加者理解しました。末尾の行が最下段より上に行かないようにする設定なのですね。
解決した模様です。ありがとうございました。snow参加者こんにちは。
手でctrl+A→ctrl+C→ctrl+V→ctrl+Vしても同じだと思います。
一回目のPaste()は、選択範囲に対してペースト(結果、選択範囲が外れてカーソルが後ろに動く)していますね。
一回目のPaste()の代わりにCharRight()が正しいのではないでしょうか?状況を読み取れていなかったら済みません。
snow参加者ご返信ありがとうございます。
オンになっていましたので、オフにしてみました。
ちょっとすぐには何が違うのか解らなかったのですが、様子を見てみます。snow参加者失礼しました、ベタで書いたためにシングルクオートが化けているようです。
s=document.selection;a=s.text.split('.');a[0]=a[0].replace(/(\d)(?=(\d{3})+(?!\d))/g,'$1,');s.text=a.join('.');
snow参加者置換で正規表現を使えば可能ですが、同じことをするマクロを書いてみました。
s=document.selection;a=s.text.split(‘.’);a[0]=a[0].replace(/(\d)(?=(\d{3})+(?!\d))/g,’$1,’);s.text=a.join(‘.’);snow参加者ご返信ありがとうございます。
v21.7.911でも発生しました。すみません、手順は判りません。
判っているのは、ファイルからの検索で一覧をダブルクリックして開いたファイルで発生することがある、ということのみです。 - 作成者投稿