(2007-07-07 19:34:51 (土))
//## 範囲選択部分をretにセットする。 // 範囲選択されていなければFALSEを返す。 // 複数行選択されていた場合最初の一行目のみをretにセットする。 static BOOL txGetSelectLine(TX *text, txstr ret) { if(!getselectlen) return FALSE; setundispex; ret = ""; walkstart; while(iswalking) { int c = readchar; if(txchIsReturn(c)) break; ret += chartostr(c); } walkend; setdispex; return TRUE; } main { txstr s; if(!getselectline(s)) { information("範囲選択が必要です"); return; } if(question("テキスト全体から\"%s\"を削除します", s) != IDYES) return; replaceex(s, "", SEARCH_ALL); }
(2007-06-08 21:43:07 (金))
選択後はコピーしたり削除したり入力文字で上書きしたりできる。//## カーソル位置の単語を選択 SelectCurrentWord { setundisp; if(!iscurreturn) right; leftword; for(;;) { mchar c = getchar; if(isalnum(c) || c=='_') { idmExec(IDM_SELECTRIGHT); continue; } break; } setdisp; }
(2007-06-05 10:31:00 (火))
//## 括弧,"", ''を閉じ行末にセミコロンをつけるマクロ // foo("bar| -> foo("bar|"); static BOOL Replace(txstr buf, mchar *searchstr, mchar *replacestr) { mchar *p = strstr(buf, searchstr); if(p) { int n = strlen(searchstr), m = strlen(replacestr); memmove(p+m, p+n, strlen(buf)-n+sizeof('\0')); memcpy(p, replacestr, m); return TRUE; } else return FALSE; } mchar GetCloseBrace(mchar *s) { txstr buf = s; mchar *p= (mchar*)buf, *q = p; for(; *q; q++) switch(*q) { case '{': case '}': case '(': case ')': case '[':case ']': // case '<': case '>': case '"': case '\'': *p++ = *q; break; } *p = (mchar)0; while( Replace(buf, "{}", "") || Replace(buf, "()", "") || Replace(buf, "[]", "") || // Replace(buf, "<>", "") || Replace(buf, "\"\"", "") || Replace(buf, "''", "")) ; size_t len = strlen(buf); if(len==0) return 0; switch(buf[len-1]) { case '{': return '}'; case '(': return ')'; case '[': return ']'; // case '<': return '>'; case '"': return '"'; case '\'': return '\''; case 0: return 0; } return '?'; // err } //## 閉じ括弧を入力 CloseBrace { setundispex; for(int i=0; i<10; i++) { txstr para; getpara(para); mchar c = GetCloseBrace(para); if(c == 0) break; jumpparaend; insertf("%c", c); } setdispex; } //## なければ行末にセミコロンを追加 AppendSemicolonToParaEnd { setundispex; jumpparaend; (getprevchar == ';') ? deleteprev : insert(";"); nextpara; setdispex; } CloseBraceAndAppendSemicolon { CloseBrace(text); AppendSemicolonToParaEnd(text); }
(2007-06-03 13:06:54 (日))
//## 大文字小文字変換の拡張。カーソル位置にある単語全体を対象とする。 // case|wordex -> CASE|WORDEX // CaseWordEx| -> casewordex| // foo(bar); | -> foo(BAR); | casewordex { setundispex; if(!iscurreturn) right; leftword; idmexec(IDM_CASEWORD); setdispex; }
(2007-06-07 08:03:13 (木))
SearchCurrentWord = ^@{PageDown} SearchCurrentWordPrev = ^@[PageUp}
//## カーソル位置の単語を即検索 main { setundispex; if(!iscurreturn) right; leftword; getword(sz); setdispex; if(!searchex(sz, SEARCH_SELECT|SEARCH_WORD)) statusbarprintf("%sは見つかりませんでした", sz); }
//## カーソル位置の単語を前方方向へ即検索 main { setundisp; if(!iscurreturn) right; leftword; getword(sz); setdisp; if(!searchex(sz, SEARCH_PREV|SEARCH_SELECT|SEARCH_WORD)) statusbarprintf("%sは見つかりませんでした", sz); }
(2007-06-01 20:24:46 (金))
SearchBookshelf2#include <windows.h> permanent txstr BookShelf2 = \"E:\Program Files\Microsoft Reference\Bookshelf Basic 2.0\bs98jl.exe"; main { setundispex; txstr word; right; leftword; getword(word); setdispex; if(word[0] <= ' ' && !inputstr("検索ワード", word)) return; WinExec(BookShelf2 + " /H /D \"" + word + "\"", SW_SHOW); }