選択されたテキストをslickCのパラメータとして渡す

私は関数に渡すために選択範囲内のテキストを取得しようとしています 最初にfind_max_eq_filter。私が修正しようとしている機能は、 私が想定している "s"パラメータは選択テキストです。私は ユーザーが渡すパラメーターを許可する関数。誰か これをどうやって私を手がかりにしますか?

    _command void align_equals() name_info(','VSARG2_MARK|VSARG2_REQUIRES_EDITORCTL)
    {

       if ( _select_type() != "LINE" && _select_type() != "BLOCK" ) {
          message("A LINE or BLOCK selection is required for this function");
          return;
       }

       gMaxEqCol = 0;

       _str character = prompt(prmt1, 'What do you wish to align?'); /* I want to ask the user for an input string */
       filter_selection(find_max_eq_filter(s, character));  /* Here I want to pass the selection with the string taken from the user. */

       if (gMaxEqCol == 0) {
         //no equal signs
          return;
       }

       filter_selection(align_eq_filter);
       _free_selection("");
    }


    static _str find_max_eq_filter(s, _str toalign)
    {
       _str inputStr = expand_tabs(s)
       int equalsPos = pos(toalign, inputStr, 1, "");
       if ( equalsPos > gMaxEqCol  ) {
          gMaxEqCol = equalsPos;
       }

       return s;
    }

filter_selection(find_max_eq_filter);

どんな助けもありがたいです

テッド

PS。私は何をしているのかを再現したいので、すべてを貼り付ける必要があります:

     #include "slick.sh"

     static int gMaxEqCol;
     static _str gUsrStr;

     static _str find_max_char_filter(s)
     {
        _str inputStr = expand_tabs(s);
        int equalsPos = pos(gUsrStr, inputStr, 1, "");
        if ( equalsPos > gMaxEqCol  ) {
           gMaxEqCol = equalsPos;
        }

        return s;
     }

     static _str align_char_filter(s)
     {
        if (gMaxEqCol <= 0 || length(s) == 0) {
           return s;
        }

        _str expandedStr = expand_tabs(s);

        int equalsPos  = pos(gUsrStr, expandedStr, 1, "");
        if (equalsPos == 0) {
           return s;
        }

        _str prefix    = substr(expandedStr, 1, equalsPos - 1);
        _str postfix   = substr(expandedStr,equalsPos);

        while (equalsPos < gMaxEqCol ) {
           prefix = prefix :+ ' ';
           ++equalsPos;
        }

        return prefix :+ postfix;
     }

     _command void align_chars() name_info(','VSARG2_MARK|VSARG2_REQUIRES_EDITORCTL)
     {

        if ( _select_type() != "LINE" && _select_type() != "BLOCK" ) {
           message("A LINE or BLOCK selection is required for this function");
           return;
        }

        gMaxEqCol = 0;
        _str prmpt1 = "";
        gUsrStr   = prompt(prmpt1, "Please enter a string: ");
        filter_selection(find_max_char_filter);

        if (gMaxEqCol == 0) {
          //no equal signs
           return;
        }
        filter_selection(align_char_filter);
        _free_selection("");
     }

だから私の問題です、私はグローバル変数を持つ代わりにヘルパー関数のパラメータにgUsrStrを変更したいと思います。しかし、私がそれをやろうとすると、それは壊れます。また、私はプロンプト関数の最初の引数を理解していません。それは何であると考えられていますか?ユーザーが何も入力しない場合のデフォルト値ですか?

0

1 答え

あなたは関連する部分を投稿していませんが、 私はあなたが呼び出し関数のヘッダーを投稿する必要があると思う...

しかし、私は部分的な答えで私の手を試してみましょう、あなたは質問を更新する場合は更新...

これらのタグはありますか? VSARG2_REQUIRES_AB_SELECTION または VSARG2_REQUIRES_SELECTION (または実際には REQUIRE および SELECTION

select_active()のチェックはありますか?それらに従うか、無効にする

また、インタラクティブに呼び出すことも、別の滑らかなコードから呼び出すこともできますか?

何年も前、私は narrow.e を書いたときにこれをいくつか考え出し、emacsの narrow-to-region をエミュレートすることができました。私はそれを使って答えを得ました( narrow.e はここに掲載されていますを参照してください)。

0
追加された
私は実際にvalenの例を変更して、常に等号ではなく、どの文字を配置するかを指定できるようにしようとしています。 community.slickedit.com/index.php?topic=5899.0
追加された 著者 Flethuseo,
変更しようとしているコードで質問を更新しました。私はそれがグローバル変数で動作するようにしました。私はまた、彼らの最初の議論が何を促すのか理解していない。
追加された 著者 Flethuseo,
ああ、私は後でそれをしなければならないでしょう。私は今かなりうまく動作していますが、prmpt = ""という空の変数を宣言して最初の引数として渡すだけの簡単な機能で、私がやっているハックを本当に嫌いです。とにかくこの最初の議論は何ですか?私は、関数プロンプトの最初の引数が何であるかは分かりません。
追加された 著者 Flethuseo,
編集に感謝します...しかし、スクリプト全体の目的を正確には分かっていない(または気にしています)ので、選択肢を使って何をしようとしているのか分かりませんか? (1)あなたの関数を呼び出す前に、ユーザーは何を強調表示するでしょうか?文字、言葉?完全な行? (2)_select_typ()はあなたのために何を返しますか? (3)機能を減らす場合は、プロンプトをスキップできますか?あなたの全体のスクリプトをデバッグせずに選択問題を再現したい、ありがとう:)
追加された 著者 nhed,
私は本当に、より小さな例を含めることを意味しました。これは、選択に関する問題に焦点を絞った例です。私はまだ私のコメントの他の質問に答えが必要です
追加された 著者 nhed,