2011-11-13 13 views
0

選択にテキストを取得しようとしましたが、最初に関数 find_max_eq_filterに渡されました。私が修正しようとしている関数は、 "s"パラメータを持っていましたが、これは選択テキストです。 関数を変更して、ユーザーが渡すパラメーターを許可します。誰か 私にこれを行う方法の手がかりをつかむことができますか?は、選択されたテキストをslickCのパラメータとして渡します

_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

あなたは、関連部分を投稿し、私はあなたが呼び出し元の関数のヘッダを投稿するべきだと思い ...

しかし、私はあなたが質問を更新した場合更新し、部分的な答えで私の手を試してみましょうされていません...

これらのタグはありますか? VSARG2_REQUIRES_AB_SELECTION、またはVSARG2_REQUIRES_SELECTION(または本当にREQUIRESELECTIONを使って何 - それらを削除しようとするので、場合

はどのselect_active()チェックがありますそれらに従うか、

はまた、あなたが対話的にまたはちょうどからそれを起動しようとしているそれらを無効にします?別の滑らかな-Cのコード?私はnarrow.eを書いたとき

何年も前、私は私はEmacsのnarrow-to-regionをエミュレートすることができ、この一部を考え出した。私は私の答えをベースに、それを使用(narrow.eis posted hereフルたとえば)。

+0

まあ私はvalenの例を修正して、実際に等号ではなく、どの文字を配置するかを指定できるようにしようとしています。 http://community.slickedit.com/index.php?topic=5899.0 – Flethuseo

+0

編集してくれてありがとう...しかし、私はスクリプト全体の目的を正確に知っていない(または気にしている)ので、減らすことはできますかあなたが選んだものだけで何をしようとしているのですか? (1)あなたの関数を呼び出す前に、ユーザーは何を強調表示するでしょうか?文字、言葉?完全な行? (2)_select_typ()はあなたのために何を返しますか? (3)機能を減らす場合は、プロンプトをスキップできますか?私はあなたの全体のスクリプトをデバッグせずに選択問題を再現したい、ありがとう:) – nhed

+0

私は変更しようとしているコードで質問を更新しました。私はそれがグローバル変数で動作するようにしました。私はまた、彼らの最初の議論が何を促すのか理解していない。 – Flethuseo

関連する問題