我正在尝试将选择中的文本传递给函数 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 :(得分:0)
您没有发布相关部分, 我想你应该发布调用函数的标题......
但我会尝试部分答案,如果你更新问题就更新......
它有这些标签吗?
VSARG2_REQUIRES_AB_SELECTION
或VSARG2_REQUIRES_SELECTION
(或任何包含REQUIRE
和SELECTION
的内容 - 如果是,请尝试删除
是否有select_active()
次检查?按照这些或禁用它们
你也试图以交互方式或仅从另一个光滑的代码中调用它吗?
很多年前,当我写narrow.e
时,我想到了一些,允许我模仿emacs'narrow-to-region
。我用它作为答案的基础(narrow.e
is posted here作为完整的例子。)