選択にテキストを取得しようとしましたが、最初に関数 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を変更したい:私は、私は全体を貼り付ける必要がありますので、やっているものを再現したいですそれの変数。しかし、私がそれをやろうとすると、それは壊れます。また、私はプロンプト関数の最初の引数を理解していません。それは何であると考えられていますか?ユーザーが何も入力しない場合のデフォルト値ですか?
まあ私はvalenの例を修正して、実際に等号ではなく、どの文字を配置するかを指定できるようにしようとしています。 http://community.slickedit.com/index.php?topic=5899.0 – Flethuseo
編集してくれてありがとう...しかし、私はスクリプト全体の目的を正確に知っていない(または気にしている)ので、減らすことはできますかあなたが選んだものだけで何をしようとしているのですか? (1)あなたの関数を呼び出す前に、ユーザーは何を強調表示するでしょうか?文字、言葉?完全な行? (2)_select_typ()はあなたのために何を返しますか? (3)機能を減らす場合は、プロンプトをスキップできますか?私はあなたの全体のスクリプトをデバッグせずに選択問題を再現したい、ありがとう:) – nhed
私は変更しようとしているコードで質問を更新しました。私はそれがグローバル変数で動作するようにしました。私はまた、彼らの最初の議論が何を促すのか理解していない。 – Flethuseo