フォーラムの返信を作成しました。
- 作成者投稿
- kshi参加者
開発お疲れ様です。
clipboardData.clearData(“”, 0);
を実行すると、「プロシージャの呼び出し、または引数が不正です。」とエラーになりました。
clipboardData.clearData(“LineText”, 0);
clipboardData.clearData(“BoxText”, 0);を実行しても、クリップボードの先頭?の状態は変わらないように見えます。
LineTextとBoxTextも含めた「ポップ」を実現するために、以下のようなマクロを書いて確認しております。履歴機能の仕様を勘違いしていましたら申し訳ありません。
menu = CreatePopupMenu();
menu.Add(clipboardData.getData(“Text”).substr(0,40),1);
menu.Add(clipboardData.getData(“LineText”).substr(0,40),2);
menu.Add(clipboardData.getData(“BoxText”).substr(0,40),3);
result = menu.Track(0);
if (result) {
document.selection.Paste();
// clipboardData.clearData(“”, 0); //エラーになる
switch (result) {
case 1:
clipboardData.clearData(“Text”, 0);
break;
case 2:
clipboardData.clearData(“LineText”, 0);
break;
case 3:
clipboardData.clearData(“BoxText”, 0);
break;
}
}kshi参加者開発お疲れ様です。
クリップボードの削除メソッドを拡張していただきましたので、
好みの動作にカスタマイズできそうです。clipboardData.clearData(“linetext”, 0);
だと、「プロシージャの呼び出し、または引数が不正です。」とエラーになりました。
・ Ctrl+C, Ctrl+XによるText,LineText,BoxText各履歴の遷移
・clipboardData.clearData(“[指定なし|Text|LineText|BoxText]”, 0);
による各履歴の遷移についてもう少し補足説明していただけるとありがたいです。
kshi参加者開発お疲れ様です。
不具合の報告ではないですが、クリップボード履歴についてここで要望を書かせてください。
ぜひ「クリップボード履歴から【削除して】貼り付け」もお願いいたします。これができれば、根強い要望があるVZ Editorのテキストスタックのような動作に近づくのではないかと思います。
貼り付け後のカーソル位置も制御(範囲指定せずに切り取った論理行を貼り付けると、カーソルは先頭に残る)できると嬉しいです。
範囲指定した文字列の場合も、
□ カーソル位置を位置を進めない
□ ブロックの選択方向を復元する
○ 選択時の位置
○ 選択時とは逆の位置
といったオプションで制御できるとよいですね。kshi参加者どうも WshScriptExec オブジェクトの仕様を勘違いしていたようです。WSHのサンプルコードでCALC.EXE(非同期なプログラム)を起動して、その終了を待つ例があったので真似したのですが、コマンドラインツールの標準出力を得るにはwhileループで待機する必要はなく、StdOutプロパティを1回参照すればよいようです。
WSHにお詳しい方、いかがでしょうか?
#title = “DOSコマンド実行”
#tooltip = “DOSコマンドを実行し、結果をアウトプットバーに出力します。”var sCmd
if ((sCmd = prompt(“input command:”, “”)) == “”) { Quit(); }
var wsh = new ActiveXObject(“WScript.Shell”);
wExec = wsh.Exec(“%ComSpec% /c ” + sCmd + “n”);OutputBar.Visible = true;
OutputBar.SetFocus();
OutputBar.writeln(“——–“);
OutputBar.write(wExec.StdOut.ReadAll());
OutputBar.write(wExec.StdErr.ReadAll());kshi参加者そうですね。こちらはEmEditorのマクロ機能への要望なのでしょうね。
「正規表現」か「マクロに関する質問と回答」へ移動したほうがよいかと思います。
EmEditorの置換機能で、タグのない行(先頭のがない)に
を付けるなら、こんな感じでしょうか。
・検索文字列
^([^])$
・置換文字列1
・検索オプション
[正規表現を使用する]ON文書の形式がある程度決まっていないと、
どんな場合に
タグをつけるか判定は難しいと思います。kshi参加者標準でインストールされるHTMLバープラグインは
試されましたか?HTMLを書いていると、やがて
だけでは
足りなくなってきますので、http://jp.emeditor.com/modules/mydownloads/singlefile.php?cid=21&lid=337
などもお試しください。
kshi参加者江村さん、ご回答ありがとうございます。
すっきりしました!!
しばらく悩んでいました。
後方参照だけでなく、通常の検索でも同様ですね。kshi参加者[ツール]→[カスタマイズ]→[検索]タブ→[表示フォントがシステム規定でない場合のみ変更する]のチェックをはずすと、文書の表示フォントと同じになりますね。
kshi参加者nayaさん、ご紹介ありがとうございます。
EmEditorに機能が取り込まれたようなプラグインも
たくさんありますね。わたしはDelphiをかじっていまして、
将来プラグインを書きたくなったら、
ソースを参考にさせていただこうと思います。kshi参加者江村さん、ご回答ありがとうございます。
2重引用符内のエスケープシーケンスについては、現状でも自前で “.+” を強調表
示すれば、リストの並べ替えで操作できるので、[引用符内でも強調表示する][エ
スケープされていない特殊文字を強調表示する]なんてオプションは必要ないです
ね。自前でやるとなると、
・ 強調表示リストを[上へ移動][下へ移動]で並べ替える
はやはり欲しくなりました。よろしくご検討ください。
kshi参加者江村さん、ご回答ありがとうございます。
[引用符内でも強調表示する]というオプションがあると嬉しいです。
バックスラッシュに限って言いますと、[強調(1)]で以下の設定をすると、プログ
ラム中の正規表現を青で強調表示し、エスケープされていない t, r, n を赤
で強調表示します。/.+/<img src="* → 正規表現ON(青) ↓この順序で定義すること。
[trn] → 正規表現ON(赤)
\[trn] → 正規表現ON(青)引用符内でも同じことができると、エスケープ忘れの単純ミスを多少は防止でき
るので、プログラムを書く人には喜ばれると思います。[エスケープされていない特殊文字を強調表示する]なんてオプションがあると、
もっといいですね。また、強調表示リストを[上へ移動][下へ移動]で並べ替えることができると、上
記の例のように凝った設定をしたい人には便利だと思います。kshi参加者ウィンドウの位置とサイズを調整するマクロをライブラリにアップロードさせていただきました。
http://jp.emeditor.com/modules/mydownloads/singlefile.php?cid=21&lid=339【タブ機能】と【グループ整列】との使い分けにお悩みの方、お試しください。
kshi参加者改良版?です。
単一ウィンドウ→上下に並べる→左右に並べる
をトグルします。単一ウィンドウに戻ったあと、元の文書をアクティブにするのは難しいですね。
[前のグループへ移動]やSetForegroundなど、ウィンドウ制御系のコマンドを使い
まわすと一応可能なのですが、うまく使いこなせていないのか、どうもEmEditor
が不安定になるようです。状況は特定できていません。文書のIDのようなプロパティを元に、document.Activate(ID) 一発で戻れると便
利な気がしました。var h = new ActiveXObject(“htmlfile”);
var sWidth = h.Script.screen.availWidth; //スクリーンの有効な横幅
var sHeight = h.Script.screen.availHeight; //スクリーンの有効な縦幅var aWnd = anotherWindow(/- EmEditor$/, Window);
if (aWnd == Window) {
editor.ExecuteCommandByID(4394); //新しい水平グループ
} else {
if (Window.Width == sWidth) {
editor.ExecuteCommandByID(4243); //左右に並べる
} else {
editor.ExecuteCommandByID(4407); //タブ有効化&ウィンドウ結合
// SetPosition(0, 0, sWidth, sHeight); //最大化
SetPosition(sWidth/8, 0, sWidth * 3/4, sHeight); //横幅 3/4
}
}function anotherWindow(regExpCaption, wSelf) {
var wnds = new Enumerator(shell.windows);
for( ; !wnds .atEnd(); wnds.moveNext() ) {
wnd = wnds.item();
if( wnd.Caption.search(regExpCaption) >= 0) {
if (wnd.Caption != wSelf.Caption) {
return wnd;
}
}
}
return wSelf;
}kshi参加者palazzo さん、コメントありがとうございます。
できました!!ふだんはEmEditorウィンドウを縦幅いっぱいにして
タブを有効にしていますが、別文書を並べて表示したあとは
サイズを元に戻すのが手間でした。結合したあと元の文書をアクティブにするのは
まだうまく行きませんが、快適になりました。if (existAnotherWindow(/- EmEditor$/, Window)) {
editor.ExecuteCommandByID(4407); //タブ有効化&ウィンドウ結合
var h = new ActiveXObject(“htmlfile”);
// SetPosition(0, 0, h.Script.screen.availWidth, h.Script.screen.availHeight);
SetPosition(h.Script.screen.availWidth/8, 0,
h.Script.screen.availWidth * 3/4, h.Script.screen.availHeight); // 横幅 3/4
editor.ExecuteCommandByID(5376); //最初の文書をアクティブにする ??
} else {
editor.ExecuteCommandByID(4394); //新しい水平グループ
}function existAnotherWindow(regExpCaption, wSelf) {
var wnds = new Enumerator(shell.windows);
for( ; !wnds .atEnd(); wnds.moveNext() ){
wnd = wnds.item();
if( wnd.Caption.search(regExpCaption) >= 0) {
if (wnd.Caption != wSelf.Caption) {
return true;
}
}
}
return false;
}kshi参加者江村さん、ご回答ありがとうございます。
見事に動きました!標準出力を得ることができれば、
アウトプットバーに出力するもよし、
文書に書き込むもよし、
外部ツールとの連携が自在にできますね。kshi参加者ライブラリの差し替えが完了いたしました。
江村さん、すみやかなご対応ありがとうございました。
kshi参加者[ツール]→[カスタマイズ]→[ウィンドウ]→[最後の文書を閉じるときウィンドウ
を閉じない]の設定で、最後の文書を閉じたときの動作は変更できますよ。オプションによらず元の文書と差し替えるには、
document.selection.SelectAll(); //元の文書をすべて選択
document.selection.Delete(1); //削除
document.selection.InsertFromFile(filename) //スペルチェック済みのファイルを挿入なんていかがでしょうか。
kshi参加者江村さん、ご回答ありがとうございます。
editor.ExecuteCommandByIDの仕様が大きく変わらない限り大丈夫だろうと楽観し
て利用したいと思います。kshi参加者もしや、と思い、いま日本語版、Version 8.02正式版(32ビット)をダウンロードして試したら、ダイアログを表示できました。
お騒がせしました。
kshi参加者特殊キーのコードを調べるのがちょっと面倒くさいな~と
思っていたら、ライブラリにEmurasoftさんによる・ 秀丸エディタのキー割り当てをインポートするマクロ
があるのに今頃気づきました。
良いリファレンスになります。kshi参加者江村さん、ご回答ありがとうございます。
当初、eeVirtualKey を eeVertualKeyとタイプミスして、
「宣言されていません」エラーが出て、一人で混乱しておりました。KeyboardList コレクションひとつ取り上げてみても、
EmEditorの深部に立ち入る仕組みが用意されており、
いろいろなことが出来そうです。kshi参加者palazzo さん、コメントありがとうございます。
ADODB.StreamでWEB検索してみたら、
文字コードがらみの情報がわんさか出てきました。コードのほうですが、
strm.LoadFromFile(DataFileName);
var buff = strm.readText(-1); //全部読むで良いのですよね?
Charsetに”_autodetect”を指定したらエラー。
省略したら正常に読み込めたり。
うーん、理解が浅いようです。いろいろ試してみます。kshi参加者江村さん、コメントありがとうございます。
勘違いだったようです。いま手元でやってみたら再現しませんでした。
もしかすると私の環境依存(XPとVista)かもしれません。参考までに、以下の main.jseeとsub.jseeを同じフォルダに置いて、
main.jseeを実行すると、sub.jseeの内容を読み込んで実行します。■ main.jsee
var DataFileName = ScriptFullName.replace(ScriptName, “sub.jsee”) ;
var TristateUseDefault = -2 //システム デフォルトを使ってファイルを開く
var TristateTrue = -1 //ファイルを Unicode ファイルとして開く
var TristateFalse = 0 //ファイルを ASCII ファイルとして開くvar fso = new ActiveXObject(“Scripting.FileSystemObject”);
if (fso.FileExists(DataFileName)) {
var ts = fso.OpenTextFile(DataFileName, 1, true, TristateUseDefault);
var s = ts.ReadAll();
ts.Close();
}
eval(s);
alert(“mainに戻りました”);■ sub.jsee
alert(“sub.jseeを実行中”);
いまWindows XPで試した結果は以下の通りでした。
● sub.jsee をシフトJIS で保存した場合
・ システムデフォルトで開く → OK
・ Unicodeとして開く → NG
・ ASCIIファイルとして開く → OK● sub.jsee をUTF-16LE(BOM付き)で保存した場合
・ システムデフォルトで開く → OK
・ Unicodeとして開く → OK
・ ASCIIファイルとして開く → NGこうしてみると、「システムデフォルトで開く」にすれば無難そうです。
OpenTextFileの4番目のパラメータを省略すると、TrestateFalse(0)が既定とな
るようですので、TristateUseDefault(-2)を明示することにします。【参考URL】 なぜか OpenTextFileのほうには具体的な数値がない……。
・ http://msdn.microsoft.com/ja-jp/library/cc428042.aspxkshi参加者江村さん、v8.02 beta 、ありがとうございます。
早速、太字表示を試してみたのですが……。
やはりMSゴシックで間延びしてしまうのです。
MS明朝でも同様です。他のユーザの方で同じ事象が発生している方、
いらっしゃいませんかねぇ。kshi参加者江村さん、ご回答ありがとうございます。
簡単な方法があるのですね。(常識?)
スッキリしました。 - 作成者投稿