フォーラムの返信を作成しました。

26 件の投稿を表示中 (合計 36 個)
  • 作成者
    投稿
  • 返信先: MacroにImport機能 #4093
    ShuHei
    メンバー

    takuyaさんは書きました:
    Importがあれば、ShuheiさんがおっしゃっているDOM関連の実装をEmeditorユーザーで作り上げることも可能かと存じます。

    因みに私のほうはマクロ側からより低レベルな
    処理を実行したいので、DOMを拡張できたらなーと思っています。

    マクロ側でテキストの取得やキャレットの移動などをやろうとするとどうしても冗長になってしまったりするんですよね。

    自分達でDOMを拡張できるのであれば、
    そういったボトルネックも解消できるかと思いますし、後々にそういった自由性が新たなemeditorの強みになるかもしれません。
    (素人考えですので変な所もあるかもしれませんが。)

    あと、個人的にJavascriptの言語構造でrequireなどの
    機能がないのはemeditor側ではどうしようもないような気がします・・・

    返信先: Editor.NewFile()の戻り値 #4070
    ShuHei
    メンバー

    evalでrequireもどきをやると変数の扱いやデバッグにちょっと気を使いますよね。
    私は一時期よく使う関数などはまとめてwscとかにしてましたが結局コピペしたほうが便利なのでやめちゃったなー。

    どうしてもマクロ書いていると冗長な書き方しないと
    いけない部分がでてくるのでそこら辺を解決できると良いですねー。

    >江村さん
    ということでEmeditorのDOM関連の拡張(個人で拡張でできたらステキ)もご検討していただければなーと思います

    ShuHei
    メンバー

    Redraw = false;
    でご希望の動作になるかと思います。

    返信先: EmEditor Professional v7.00 alpha 1 を公開 #3980
    ShuHei
    メンバー

    お世話になってます。

    マクロツールバーの#title 指示子、#tooltip 指示子に関しては
    デフォルトでファイル名が設定されるようにしたほうが良いかと思います。
    設定すればいいだけの話ですが、ずらっと無名のアイコンが並ぶのはちょっとびっくりします。
    (まぁ、ステータスバーにはファイル名が表示されているんですが。)

    個人的にはマクロ部分が個人で拡張できれば非常に嬉しいです。
    よく使う関数などをCで作っておいて登録できれば、
    かなり痒いところまで手が届きますし、マクロの自由度
    、実用性がさらに高まると思います。

    参考までに、phpのextensionを作る記事を張ります。
    http://www.whenpenguinsattack.com/2006/11/15/how-to-write-php-extensions/
    http://dsas.blog.klab.org/archives/50777398.html

    是非、前向きにご検討していただければと存じます。

    返信先: こういうことできますでしょうか? #3857
    ShuHei
    メンバー

    emacs等には用意されていた機能と思います

    すみません、思いっきり誤解してました。
    emacsのtranspose-charsだと大体こんな感じですね。
    参考までにどうぞ。

    transpose_chars.jsee

    Redraw= false;
    transpose_chars();
    Redraw = true;
    Quit();

    // Functions
    function transpose_chars()
    {
    if(isStartOfDocument())
    {
    status = “Beginning of buffer”
    return;
    }

    transpose_chars = document.selection.Text;

    if(transpose_chars == “”)
    {
    with(document.selection)
    {
    if(!isEndOfLine())
    CharRight(false,1)

    CharLeft(true,2);

    transpose_chars = Text;

    line = transpose_chars.split(“”).reverse()

    if(line[1] == “n” && line[2] == “r”)
    {
    //CR+LFの帳尻あわせ
    nline = new Array;
    nline[0] = line[0];
    nline[1] = line[2]+line[1];
    line = nline;
    }
    Text = line.join(“”);
    }
    }
    }

    function isStartOfDocument()
    {
    var p = new Object;
    p = getPos()
    return (p[‘x’] == 1 && p[‘y’] == 1) ? true : false;
    }

    function isEndOfLine()
    {
    var p;
    with(document.selection)
    {

    p = getPos();
    x1 = GetActivePointX(eePosLogical);
    EndOfLine()
    x2 = GetActivePointX(eePosLogical);
    setPos(p);
    }
    return (x1 == x2) ? true : false;
    }

    function getPos()
    {
    var pos = new Object;
    with(document.selection)
    {
    pos = {
    x : GetActivePointX(eePosLogical),
    y : GetActivePointY(eePosLogical)
    }
    }
    return pos
    }

    function setPos(pos)
    {
    with(document.selection)
    {
    SetActivePoint(eePosLogical,pos[‘x’],pos[‘y’])
    }
    }

    #functionの名前はswap->convcase, reverse->transposeに書き換えさせてもらいました。
    #ぜいたくを言うと、メニュー無しのショートカットキーで起動したいところですが、これはマクロでは無理ですよね。

    ショートカットキーはマクロを一度実行後にヘルプメニューの「キーボードマップ」から割り当てられます。

    ちなみに大文字小文字をスワップするマクロは
    ライブラリにあるtakuyaさんのマクロを使ったほうが
    様々なケースでも変換できるのでオススメです。

    返信先: こういうことできますでしょうか? #3847
    ShuHei
    メンバー

    StandardからProfessionalに1,500円くらい
    でアップグレードできるライセンスがあればいいんですがねぇ。

    Professionalは試用もできますので、もし機会が
    あったら今回書いたマクロ使ってみてください。

    他にもここのライブラリやEmEditor Wikiなどに
    日々の作業を楽にしてくれるマクロがあるので一度
    ずらーっと試してみると良いですよ

    返信先: 単語のみ検索する場合の ' | ' の動作 #3846
    ShuHei
    メンバー

    あれ、よくよく考がえてみたらそれってなんか腑に落ちない気もしますね。

    「単語のみ検索」って今回の件まで一回も使った事がなかったので気づきませんでしたが、潜在的な落とし穴が多そうですねぇ~

    仮に、単語の先頭の正規表現を とすると、
    単語のみ検索する場合には、 を検索するようです。
    私が想定していたのは || でした。

    すいません、ちょっと仰られてることが分かりません。


    ・||
    この二つの正規表現はマッチする箇所は一緒ですよ。
    (私はのほうがより良いと思いますが)

    因みに大なり小なりはエスケープする必要はありません。

    返信先: 単語のみ検索する場合の ' | ' の動作 #3841
    ShuHei
    メンバー

    使い方の違いとなります。

    正規表現str|str1|str2で検索した場合左から順番に
    マッチするかどうかを試します。
    この場合だと一番左のstrが先にマッチするので
    str1,str2もマッチしますが、左の項目を優先するので結果的に対象にはなりません。
    (yunokiさん注釈どうもです。)

    なのでstr,str1,str2どれもマッチさせたいなら
    (3)を用いるのが良いということですね。

    返信先: こういうことできますでしょうか? #3839
    ShuHei
    メンバー

    kfuさん

    すみません、てっきりProfessionalユーザーの方かと
    思っていました・・・

    デフォルトで文字列を反転させたり、ローマ字の大文字小文字をスワップさせる機能はありません。(見落としていたら御免なさい)

    頻繁に文字列の変換などを行うならばProfessionalを
    購入されるか、既製のものであればその都度gvimとかemacsとか利用されたほうが手っ取り早いと思いますよ。

    #takuyaさん補足ありがとうございます。

    返信先: こういうことできますでしょうか? #3835
    ShuHei
    メンバー

    マクロを使えばご希望のことは可能です。
    下記コードの//Initializeから最後の}までコピーし、
    emeditorで新しい文章を開いてペーストし、text_support.jseeという名前をつけて保存してください。

    そのままtext_support.jseeを開いたまま
    1.メニューの「マクロ」より「これを選択」をクリック
    2.メニューの「マクロ」より「実行(R)」をクリック

    そうするとポップアップで
    文字を逆にする(T)
    大文字小文字を反転する(^)
    と表示されるのでお好きな処理を選んでください。
    (ヘルプのキーボードマップでこのマクロ設定しておくと便利です)

    デフォルトでは選択範囲がないとキャレットがある位置の単語を対象に処理を行います。

    #息抜きで作ったのでどこか間違ってたらごめんなさい・・・

    //Initialize
    pos = new Object;
    commands = new Array;
    ccase = new Array;

    commands[1] = {
    “function” : “reverse”,
    “label” : “文字を逆にする(&T)”
    }
    commands[2] = {
    “function” : “swap”,
    “label” : “大文字小文字を反転する(&^)”
    }

    ccase[1] = “toLowerCase”;
    ccase[2] = “toUpperCase”;

    String.prototype.reverse = function(){
    return this.split(“”).reverse().join(“”);
    }
    String.prototype.swap = function(){
    return swap(this.split(“”));
    }

    //Main
    getPos();

    menu = CreatePopupMenu();
    for(var n in commands)
    menu.Add(commands[n][‘label’],n);

    result = menu.Track( 0 );
    if( result != 0 ) execute(result)

    setPos();
    Quit();

    //Functions
    function execute(num)
    {
    document.selection.Text = getText()[commands[num][‘function’]]();
    }

    function getText()
    {
    with(document.selection)
    {
    if(!(w = Text))
    {
    selectWord();
    w = Text;
    }
    }
    return w;
    }

    function swap(array)
    {
    for(i=0;i 64 && num < 91) ? 1 : 2;
    }

    function getPos()
    {
    with(document.selection)
    {
    pos = {
    x : GetActivePointX(eePosLogical),
    y : GetActivePointY(eePosLogical)
    }
    }
    }

    function setPos()
    {
    with(document.selection)
    {
    SetActivePoint(eePosLogical,pos['x'],pos['y'])
    }
    }

    返信先: document.onSave() #3651
    ShuHei
    メンバー

    とりあえず現状はCtrl+Sとかに自作のマクロを割り当てて
    document.Savedとかて判断するのはどうでしょうか?

26 件の投稿を表示中 (合計 36 個)