スマートインデント(マクロ)}を入力すると、今まで入力していたテキストが消えてしまいます。

  1. こんにちわ、度々すいません。
    スマートインデントの使用方法を参考にして
    スマートインデント改行にEnter、スマートインデント用}入力にShift+]を割り当てました
    Cのソースを入力してみたのですが}を入力すると今まで入力していたテキストが消えて
    }のみになってしまいます。
    どこが悪いのかわかりません。
    どこを見なおせばなおるか教えていただけると
    ありがたいです。よろしくお願いします。

     |  M1号  |  返信
  2. 該当マクロ作者の ks です。
    もしこれでソースを失っていたら申し訳ありません。

    現象確認しました。
    取り急ぎ、「sel.SelectLine();」を以下の 2 行に置き換えると動作します(全箇所)
    sel.SetAnchorPoint(mePosLogical, 1, y);
    sel.SetActivePoint(mePosLogical, doc.GetLine(pos.y, 0).length, y, true);

    ただ作りがだいぶ古く、追加された関数を自前で処理していたり、前に挙がっていたようにマクロフォルダ名変更にも対応していなかったりと問題があるので、合わせて見直すようにします。
    ご報告、ありがとうございます。

     |  ks  |  返信
  3. こんばんは、横からスミマセン

    > 取り急ぎ、「sel.SelectLine();」を以下の 2 行に置き換えると動作します(全箇所)

    もしかして 2.5.0 以降で SelectLine() の挙動を変更したのが原因でしょうか。

    以前は SelectLine() で必ず 1 行だけ選択される仕様だったのですが、2.5.0 以降では行をまたいで選択されている時に SelectLine() を呼び出すと複数行を行選択するように変更しました。
    (特に深い意味はなく、複数行選択できたほうがイイカナーっていうノリで…)

    SelectLine() の仕様変更によって他のマクロにも影響があるようなら、仕様を元に戻そうと思いますがいかがでしょうか?

     |  Kuro  |  返信
  4. Kuro さん、こんばんはー

    > 以前は SelectLine() で必ず 1 行だけ選択される仕様だったのですが、2.5.0 以降では行をまたいで選択されている時に SelectLine() を呼び出すと複数行を行選択するように変更しました。
    > SelectLine() の仕様変更によって他のマクロにも影響があるようなら、仕様を元に戻そうと思いますがいかがでしょうか?

    確かに挙動の原因はここでした。
    行を選択して処理する、という場合のお手軽利用法として使っていたので、他にも引っかかる場所はあるかもしれません。
    もし戻されるようでしたら、複数行は引数対応か SelectLines のような別関数にはならないでしょうか。
    複数行を全選択、というのも処理としては割とありがちなので、両対応が一番嬉しいです。

    # ただ書いたとおり、要修正箇所が多々あるので、そのうちメンテしなきゃ……

     |  ks  |  返信
  5. ks さん、こんばんは、ご返信ありがとうございます。

    > 確かに挙動の原因はここでした。
    > 行を選択して処理する、という場合のお手軽利用法として使っていたので、他にも引っかかる場所はあるかもしれません。

    やはりそうでしたか。
    既存マクロへの影響を考えると、元に戻したほうが良さそうですね。
    引数対応 (省略時は以前と同じ挙動) の方向で修正してみようと思います。

    > # ただ書いたとおり、要修正箇所が多々あるので、そのうちメンテしなきゃ……

    お手数をおかけします…
    なるべく既存マクロに影響がないように気をつけていますが、他にもなんか挙動が変わってるぞ!とかございましたらご指摘くださいね。

     |  Kuro  |  返信
  6. > > # ただ書いたとおり、要修正箇所が多々あるので、そのうちメンテしなきゃ……
    >
    > お手数をおかけします…
    > なるべく既存マクロに影響がないように気をつけていますが、他にもなんか挙動が変わってるぞ!とかございましたらご指摘くださいね。

    何かあればまた報告しますね。
    今回の件だと SelectLine() だけで直るので、あえて変更した箇所以外では互換性の問題ってほとんどないと思います。

    ただ、折角 include ライブラリとかで実装した関数使ったらとか、追加された関数(GetActivePos とか)を自前で書いてたりと、
    もっと簡単に書けるじゃん、というのが散在していまして……。
    そういった意味で、地味に、でも着実に進化していると思います(マクロ作者的に)

     |  ks  |  返信
  7. > ks さん
    返信ありがとうございます。
    ソースは失ってはいないです。
    BlockEndIndent.jsを教えていただいた2行に置き換えました。
    動きました。

     |  M1号  |  返信
  8. ●M1号 さん
    > ソースは失ってはいないです。
    良かったです、ほっとしました。

    スマートインデント、古い箇所を見直して手元でつけた機能と合わせて更新しました。
    http://www.haijin-boys.com/wiki/スマートインデント(C_構文)

    以下の機能の追加(無効化可能)と、前のスレッドで質問されたように構成を変に変えなくとも動くようにしています。
    ・コメント行だった場合、先頭のコメントヘッダをコピー(行コメントを連続して入力するとき便利)
    ・閉じ括弧入力時、対応する括弧位置をステータスに表示

    今回から、拙作の include ライブラリの導入が必須になっていますので、もし使われるのでしたらご導入ください。
    http://www.haijin-boys.com/wiki/includeライブラリ

    素敵な Mery ライフを是非!

     |  ks  |  返信
  9. > ksさん
    こんにちわ、返信ありがとうございます。
    更新されたスマートインデント使ってみました、快適に動いています。
    Meryでプログラムの勉強ができるのでとても嬉しいです。

    >Kuro さん
    Mery使わさせて頂いています、ありがとうございます。

     |  M1号  |  返信
スポンサーリンク