作者itoc, 信區: itoc
標題[功能] edit.c 編輯文章時搜尋字串
時間03/08/24
作者: itoc (寫不完了 ^^) 看板: plan
標題: [功能] 編輯文章時搜尋字串
時間: Sat Aug 23 20:59:41 2003 Updated: 2003/08/23
※ 引述《cpd.bbs@pitch.twbbs.org (Seasons)》之銘言:
> 就是在編輯文章的時候...不知道maple有沒有尋找字串的功能呢?
> 像joe一樣,按 ^kf 或 Esc + s 就能尋找字串...
> 像一篇文章很長的時候,就可以按E來編輯搜尋要找的字串...
由於 edit 時的按鍵 Ctrl+? 都有功能佔去了
所以要先抓出一個按鍵,在此以 Ctrl('B') 做例子
你也可以自己選別的鍵
: edit.c:vedit() 由於 Ctrl('B') 可以用 KEY_PGUP 取代
: 所以把 Ctrl('B') 釋放出來給別的功能用
int /* -1:取消編輯 0:完成編輯 */
vedit(fpath, ve_op)
char *fpath;
int ve_op; /* 0:純粹編輯檔案 -1:編輯但不能儲存 1:quote/header 2:quote */
{
textline *vln, *tmp;
int cc, col, mode, margin, pos;
+ char hunt[32];
/* --------------------------------------------------- */
/* 初始設定:載入檔案、引用文章、設定編輯模式 */
/* --------------------------------------------------- */
+ hunt[0] = '\0';
tmp = vln = ve_alloc();
...
...
case KEY_PGUP:
- case Ctrl('B'):
ve_pageup();
continue;
...
...
+ case Ctrl('B'):
+
+ if (vget(b_lines, 0, "搜尋:", hunt, sizeof(hunt), GCARRY))
+ {
+ if (!ve_search(hunt))
+ {
+ vmsg("找不到您想搜尋的字串");
+ ve_mode = mode | VE_FOOTER;
+ }
+ }
+ continue;
default:
goto ve_key;
}
: edit.c:ve_search() 新增此函式於 ve_goto() 後面
static inline int
ve_search(hunt)
char *hunt;
{
textline *cur, *top, *tmp;
uschar *str, *pend;
int len, find;
len = strlen(hunt);
find = 0;
for (cur = vx_cur; cur; cur = cur->next) /* 往下搜尋 */
{
str = cur->data + (cur == vx_cur ? ve_col + 1: 0);
pend = str + cur->len - len + 1;
while (str < pend)
{
if (!str_ncmp(str, hunt, len))
{
ve_col = str - cur->data;
find = 1;
goto find_hunt;
}
str++;
}
}
find_hunt:
if (find)
{
top = cur;
for (len = 0; len < 10; len++)
{
if (!(tmp = top->prev))
break;
top = tmp;
}
vx_cur = cur;
vx_top = top;
ve_lno = len;
ve_position(cur, top);
}
return find;
}
--
□ 本文章由 itoc 從 itoc.Dorm11.NCTU.edu.tw 發表