フォーラムの返信を作成しました。
- 作成者投稿
- ShuHeiメンバー
気分的な問題というのがひとつと、
デバッグする時追うのが面倒なのでevalは余り使いたくありません。最近は標準で使えるスクリプトエンジンを採用するメリットの方が大きいと思うようになったので、言語的な制約は諦めるようになりました。
使い勝手が悪ければ他のでやれば済みますから、ね。
ShuHeiメンバーβ3で再度強調表示の件を確認しました。
document.getElementById(“hoo”)
HTMLのプロパティで特別な構文を「HTML」もしくは「HTML埋め込み」にした場合でチェックしました。
開始タグ以降は正常に埋め込みの強調表示になったのですが、その後の終了タグがきてもそのまま強調表示
がもどらないようです。お手数ですが再度確認をお願い致します。
ShuHeiメンバーあー、、、デフォルトの大きさがちょうどいい
具合だったので気づきませんでした。検索・置換ダイアログの縦幅が長いときだけ各
フィールドが複数行になるんですね。ちょっと困っていたので助かりました。ありがとうございます。
ShuHeiメンバーAye Wongさんは書きました:
私はCtrl+Fで検索ダイアログを表示させて単語を入力してEnterを押して検索する癖がついているのですが、同じくです。
慣れの問題なんですが検索語句入力→Alt+Dだとちょっと辛いですね。デフォルト機能のUIについては以前のフォーラムの話題で
色々と思惑があるという事でしたので、
検索バープラグイン側で今までと同様な機能をつけて
頂けるとありがたいです。—
要望で恐縮なのですが、検索バープラグインの
各種機能/振る舞いにキーバインドが割り当てられると
使い勝手がものすごく向上すると思います。・Ctrl+Fで検索バープラグインのインプットフォームにフォーカスを当てる。
・Enterキーでエディタ側にフォーカスを当てる
という感じだとすごく使いやすそうな気がします。現状Enter、Shift+Enterで次候補、前候補が選べますが、
検索→次候補を調べたい場合はF3という流れが一般的かと
思いますので細かい挙動も選べると嬉しいです。前向きに検討していただけたらと幸いです。
ShuHeiメンバーよくHTMLの編集をしているのですが、埋め込みのjavascript等の
強調表示がされないようです。以前は
document.getElementById(“hoo”)
でdocumentが強調表示されるのですが、ベータ2ですと
通常のHTMLの設定の状態で同じ状態でも色分けがされません。document.getElementById(“hoo”)
ためしに特別な構文(HTML-埋め込み)を設定し
強調(2)のスクリプトの開始、終了にを設定してみたのですが、スクリプトタグに括られた
部分がスクリプトの強調表示色になるだけで、強調1で設定した色の表示にならないようです。ShuHeiメンバーベーター2早速試用させて頂いております。
細かい部分で恐縮なのですが、折り返しなしの状態で
長い行の右側から左側にキャレットを左キーで移動する際の
スクロールの処理が変わっているような気がします。以前は画面に表示されている部分から左にひとつ移動した際に
約10文字分くらい左に移動していた気がするのですが、
ベータ2ですと画面に表示されている部分からさらに約15文字分程
左に移動した際に画面がスクロールされるようです。(画面スクロールしても表示領域より左にキャレットが
あるので20桁目くらいにこないと見えません)ご確認していただければ幸いです。
ShuHeiメンバー通常版でも同様に置換コマンドで置換することが出来ません。
強調表示されるだけで、emeditorのステータスバーに
「すべての文章に(検索文字列)は見つかりませんでした」という表示がされるのみです。
ShuHeiメンバーご存知かと思いますがポストしておきます。
先ほどshellオブジェクトのテストをしようかと思って
書いてみたのですがマクロの記録→停止→実行をした場合はshellオブジェクト
が動作しているようなのですが、
一度保存した後にshellオブジェクトを使うおうとすると「オブジェクトがありません。: ‘shell’」
というエラーが表示されてしまい実行することができません。
その他にも新たに追加されたオブジェクトが使用できないので
ご確認していただければと存じます。#因みにプリプロセッサ的な機能のほうはいかがでしょうか?
外部にまとめたマクロライブラリが使えるようになると
今後もっとマクロが有用になるかと思いますので前向きに
ご検討していただければ幸いです。ShuHeiメンバーお忙しい中お返事有難うございます。
>単語補完のソースは公開する方向で検討しています。
ありがとうございます。楽しみに待っています。取り急ぎHTMLバー、検索バーのプラグインの件の表示されない
条件が判明したのでご報告させて頂きます。ツールバーの変更から「すべてリセット」を押した後
、EmEditorを再起動せずにHTMLバー、もしくは検索バーを有効にするとどちらのバーも表示されないようです。
(右クリックしても一覧に表示されません。)現状は一度emeditorを再起動しないと表示されないようです。
ShuHeiメンバー開発お疲れ様です。
いくつかプラグイン関連の挙動で質問があります。
・単語補完プラグインについての質問なのですが、
単語ファイルというのはEmEditorで判別できる単語
ならなんでもOKという具合でしょうか?
(あまりドキュメントがなかったもので、、、)あと、もし宜しければ単語補完プラグインのソースも併せて
公開して頂けるととても嬉しいです。
(マクロで単語補完を無理くり実装していたので、プラグインのほうでもやってみたいです!)・検索バー、HTMLバープラグインについて
現在VistaBusiness(32bit)で動作チェックをしているのですが、検索バー、HTMLバーをクリックしても特に新しく
バーが出るというような挙動を確認することができません。・マウスのすべての移動を記録について
このオプションをチェックすると実際の動作よりもかなり
遅い動作で再現されてしまうのですが、これは改善可能
でしょうか?
できれば実際に記録した場合と同じ速度で再生されると嬉しいです。
※比べるべきではないんですが、どうしても既存のソフトウェアと比べてしまいます[http://www.uwsc.info/]お手数ですが一度確認していただけますでしょうか?
ShuHeiメンバーとりあえずこんなんでその場しのぎということで。
ShuHeiメンバー試しにIEからActiveScript rubyを使った処理を
書いてみたところ同じ現象が発生したので
十中八九ActiveScript Ruby側の実装でしょう。EmEditor側とは特に関係ないかと思います。
emtest class Emstring < String
def em_msg
return self + " is good editor.n"
end
endclass String
def em_msg
return self + " is good editor.n"
end
endbuf = Emstring.new("EmEditor")
buf2 = "EmEditor"
@window.document.write buf.em_msg
@window.document.write buf2.em_msg # エラーで停止する
@window.document.write buf.em_msg取り急ぎEmeditor側から対応するのはムリそうな
のでStringを継承して対応してみてはいかがでしょう?上記プログラムをRDE上にて実行すると
EmEditor is Good Editor!!
とコンソールに表示されます。
目的通りの実行結果です。これもOLE(だっけ?)からrubyに渡して処理するか、
直接rubyインタプリタで処理するかという違いでしょうね。ShuHeiメンバーXOOPSで発言に画像を挿入する機能([img]~~URL~~[/img])があんまり
調子よくない?みたいです。geocitiesにある画像は外部から参照できない設定がされてるみたいですね。
xoopsの問題っていうわけではありません。ShuHeiメンバー// この時、ハイフンの行は選択範囲外。バグか意図なのか不明
これはマニュアルの通り正しい動作なんですが、
マクロの自由さが裏目にでちゃった例ですね。もっと詳しく情報がでるマクロをこさえてみました。
var prog = ”
var str = ‘aaaaaaaaaaaaarn’;n
for(var i=0;i<3;i++){str += str;}n
document.write(str+’———————rnZZZZZZZZZZZZZrn’);n
document.selection.LineUp(false,2);n
editor.ExecuteCommandByID(4154);//行選択を開始n
//document.selection.SetActivePoint(eePosLogical, 1, 4);n
“;recipe = prog.split(“n”);
for(var s in recipe)
{
if(recipe[s].replace(/^s+/,””).match(/^//.+/,””)){continue;}
eval(recipe[s]);
checkMode(“実行コード:” + recipe[s] + “n”,document.selection.Mode);
}function checkMode(string,num)
{
x = document.selection.getActivePointX(eePosLogical);
y = document.selection.getActivePointY(eePosLogical);
sx = document.selection.getTopPointX(eePosLogical);
sy = document.selection.getTopPointY(eePosLogical);
ex = document.selection.getBottomPointX(eePosLogical);
ey = document.selection.getBottomPointY(eePosLogical);ret = “選択の種類:”;
switch(num & eeModeMask)
{
case eeModeStream:
ret = ret + “eeModeStream”;
break;
case eeModeLine:
ret = ret + “eeModeLine”;
break;
case eeModeBox:
ret = ret + “eeModeBox”;
break;
case eeModeKeyboard:
ret = ret + “eeModeKeyboard”;
break;
case eeModeSelected:
ret = ret + “eeModeSelected”;
break;
}
ret = ret + “n”;
current_point = “現在のカーソル位置:” + x + “, ” + y + “n”;
anchor_point = “選択範囲の開始位置:” + sx + “, ” + sy + “n”;
bottom_point = “選択範囲の終了位置:” + ex + “, ” + ey + “n”;alert(string + “n” +ret + current_point + anchor_point + bottom_point);
}—
確かに行選択(Ctrl+F8)後にジャンプ(Ctrl+G)をすると描画領域が変になりますね。
マクロで調べる限りでは正しく選択範囲の最初と最後が
設定されているのですが、ジャンプした直後だとうまく切り取れないようですし・・・ShuHeiメンバー多分こんなんで出来るんじゃないでしょうか?
この処理にはEmeditor Professionalが必要です。1.既に作ってある置換リストを
{target:”亜”,rep:”A”},
{target:”場”,rep:”BA”},という形式に直します。
因みに正規表現で置換をすれば簡単にこの形式に直せます。検索する文字列:^(.*)?,(.+)
置換後の文字列:{target:”1″,rep:”2″},2.下のコードの2行目から5行目を
先ほど修正した置換リストの内容に置き換え
replace.jseeという名前で保存します。list = [
{target:”亜”,rep:”A”},
{target:”場”,rep:”BA”},
{target:”差”,rep:”SA”},
{target:”西”,rep:”NISHI”},
]document.selection.SelectAll();
regexp = new RegExp(“(?:{)(.+?)(?:})”,”g”);
document.selection.Text = document.selection.Text.replace(regexp,
function(target){
for(var n in list){
target = target.replace(list[n].target,list[n].rep);
}
return target;
}
);3.置換したい文章を開いてreplace.jseeを実行すればOK
置換リストの部分を変更すれば色々と応用が出来るので
試してみてください。ShuHeiメンバーperlerさんは書きました:
スクリプトばっかりやってると、こういう仕様は凄く違和感あるんですけど、エディタではこれが当たり前の普通の事なんですかね。 他のエディタもそうなんですかね。スクリプトばっかりやってるとこのような挙動は
確かに違和感を感じますよね。因みに手元のemacsでさくっと試した所、マッチする
箇所が選択範囲を超えてしまった為警告文出しましたが、最後の行も選択範囲までは変換されました。他のエディタでは選択範囲を指定しても無視して
行単位で置換していたりするようです。ここらへんは設計思想で分かれてしまうので一概に
なんとも言えないですねー。ShuHeiメンバーperlerさんは書きました:
ShuHei さんも、不具合とだと認識しているみたいですし、
V7では再現しないとのことです。私の言葉足らずで誤解させてしまっているようで申し訳ないです。
「下の」というのは強調表示の件です。ver7でも置換の件はperlerさんがおっしゃるとおりの
置換結果となりますので、特にver7固有の不具合
というわけではありません。正規表現自体は、選択範囲に関係なくテキスト全体として評価して、置換対象は、
選択範囲のみであるという、仕様なのだということで良いのでしょうか。エディタ側からみればデフォルトはこういう
仕様で良いかと思います。ただ、検索・置換のオプションに関しては場合よって
要求される挙動が違うので将来的にもっと詳細に
挙動が指定できると便利ですね。ShuHeiメンバー選択範囲のみの置換で、 量指定子がある時とない時で、正規表現の置換動作が異なってます。
恐らくマッチし終わる前に見かけ上の終了地点を
越えてしまうので処理を中止してるんでしょうね。—
因みにパッと試しver7では下の不具合は出なさそうです。ShuHeiメンバーいろんなやり方ありますので一例ということで。
test.jseeという名前で下記を保存してemeditorで実行してあげてください。
prefix = prompt(“行頭に入れたいのを入力してください。”,””);
suffix = prompt(“行末にいれたいのを入力してください。”,””);eols = document.selection.Text.match(/(rn|r|n)/);
if(eols != null) {
eol = eols[0];
lines = document.selection.Text.split(eol);
for(var n in lines) {
lines[n] = prefix + lines[n] + suffix;
}
document.selection.Text = lines.join(eol);
} else {
document.selection.Text = prefix + document.selection.Text + suffix;
}因みにマクロ使わずに正規表現でもお手軽に出来ますよー
ShuHeiメンバーChangeLogならばAye Wongさんが実装された
「ChangeLogメモ入力支援マクロ」がお勧めです。
(検索などの機能はありませんが)
http://emeditor.net/EmMacros.html#ChangeLogランチャなどにemeditorマクロ実行のコマンドを登録していればお手軽にメモも残せるかと思います。
ちなみに私はbluewindというランチャソフトでchangelog
と打つとこのマクロが実行されるように設定しているので
普段のメモ取りなどにとっても便利に使ってます。まだ試されていないのでしたら是非!
ShuHeiメンバーmigemoだったらプラグインありますよ~。
ShuHeiメンバー試しにdocument.replace()やってみましたが
結構時間かかっちゃいますねぇ。若干使える正規表現が変ってしまいますが、
String.replaceを使われたほうが速度的には良いかと思います。画面が緑色(検索結果の強調表示)で埋まっちゃうんですよね。
因に
document.HighlightFind=false
を設定すれば強調表示をOFFにできますよ :-)ShuHeiメンバー=====================================
名前:タブ検索マクロ
版:1.0
用途:開いたタブのファイル名を前方一致で検索して移動します。
コメント:ファイルを一度に開きすぎると
選ぶのが大変なので作ってました。
=====================================var doc = Editor.Documents
search = prompt(“ファイル名を入力してね”,””);
regexp = new RegExp(search + “.*”);
for(i=1;i<=doc.Count;i++)
{
if(doc.Item(i).Name.search(regexp)!=-1)
{
doc.Item(parseInt(i)).Activate();
break;
}
}
Quit();ShuHeiメンバーWindow.Redraw = false;
///たくさんの置換処理
Window.Redraw =true;
では期待通り動作しませんでした。なぜなのでしょうか?置換対象の文字列とマクロ側の処理がわからないので
なんとも言えません。最近私はver7しか触ってないのでなんとも言えませんが、大量の置換を行うのであれば一度
text = document.selection.text
等で変数に割当ててから
text.replace~とかするほうが時間は早く終ります。通常であればRedraw=falseの設定をしていれば
あまり気にならない範囲かと思います。
もし、差し支えなければどのような置換を行おうと
したかを投稿して頂ければ解決するかもしれません :-)ShuHeiメンバー拡張ってEmEditor内蔵のDocumentオブジェクトをWRAPするdocumentオブジェクトをマクロ側で定義して、それを毎回Importすれば出来るんじゃないかなと。(重いけど・・・)
こういうのをWikiなりオープンな場で作って共有できれば良いのじゃないかなと思ったのですが。恐らくマクロ部分を拡張するとなるとEmeditorの
DOMに属する形になると思うのでああいう表現にさせていただきました。文字列を走査するとかのコストがかかる処理なんかは
C側で実装できたら便利そうだし、マクロ側からもっと
簡単に色々なことが出来るんじゃないかなーっていう
位です。例えば指定URLの中身を拾ってくるWindow.Extension.get_url()という関数をCで定義できたらどのActiveScriptからでもWindow.Extension.get_url()をコールするだけで簡単に中身が拾える!とか、色々応用は出来そうですよね。
まぁ、プラグイン側でやりゃ解決する事なんですが。
プラグインを作れる人は限られてしまいますからねぇ・・・でも組み込みObjectの関数で用意していただけると使える気がする。先の例でのEditor.ImportSrc()みたいな感じで。
Editor.importSrc(“hoge.jsee”);
とか書いておくとマクロの実行前にhoge.jseeの中身を
読み込んでからActiveScriptに渡してくれるのであれば出来そうですよね
(恐らくもっと効率よい方法があるかと思いますが。) - 作成者投稿