AddKeywordToColorCfg


マクロ集

色分けスタイルの単語登録支援

カーソル位置の単語を色分けする為にCOLOR.CFGに登録するマクロ(たぶん5.0限定)

手順

  • 念の為、COLOR.CFGのバックアップを取っておく
  • このマクロを使わずに通常の手順で色分けスタイルに何か適当に単語を登録する
  • COLOR.CFGを開き登録したい箇所の一行上に
    // keywords:.c
    という行を追加する。
    形式は"// keywords:" + ファイルの拡張子で、複数の拡張子を登録する場合は
    // keywords:.c keywords:.h
    のように書く。以下設定例
:M AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Message-Id: <.2003527125.72428800.156994365.163875535>
Subject: Cプログラム

areaw(use=1;rgb="0x008040";atr=0): /* */
rear(use=1;rgb="0x008040";atr=0): //
// keywords:.c keywords:.h   ←この行を追加
words(use=1;rgb="0x008000";atr=1): asm auto break    ←この行に単語が登録されていく
<mh>
  • これ以降は本マクロを実行すると自動的に単語が追加されていく

推奨キーアサイン

wz.key

AddKeywordToColorCfg = ^KM

コード

AddKeywordToColorCfg

#define BUF_SIZE (1024*10)
#define AUTO_RELOAD 1

mchar *chop(mchar *s)
{
    mchar *p = s + strlen(s) - 1;
    while(s <= p && *p <= 20) *p-- = '\0';
    return s;
}

//## カーソル位置のキーワードをkeywordにセットする。戻り値はキーワードが存在すればTRUE、
//## なければFALSEを返す。
BOOL txGetCurrentKeyword(TX *text, txstr keyword)
{
    setundispex;
    right; leftword;
    getword(keyword);
    setdispex;
    return strcmp(chop((mchar*)keyword), "") != 0;
}

main
{
    txstr keyword;
    if(!getcurrentkeyword(keyword) || isspace(keyword[0]) || !isalpha(keyword[0]))
    {
        keyword = "";
        if(!inputstr("キーワードの登録", keyword) && strcmp(keyword, "")==0)
            return;
    }

//    information("KEYWORD:%s", keyword);
    
    txstr fn; pathFullConfig(fn, "color.cfg");
    txstr sw; sprintf(sw, "^//.*keywords:%s", pathGetExt(text->szfilename));
    
    TX *colortext = textopen(fn);
    if(txSearchEx(colortext, sw, SEARCH_REWZ | SEARCH_NOSENSECASE))
    {
        mchar *p, *buf = malloc(BUF_SIZE);
        if(    txNextPara(colortext) && 
            txGetParaRearEx(colortext, buf, BUF_SIZE) && 
            (p = strchr(buf, ':')))
        {
            p++; strcat(p, " ");
            if(strstr(p, " " + keyword + " ") == 0)
            {
                txJumpParaEnd(colortext);
                txInsertf(colortext, " %s", keyword);
                if(txSave(colortext))
                {
                    statprintf("キーワード\"%s\"を登録しました。", keyword);
                    if(AUTO_RELOAD)
                    {
                        if(text->fEdit) save;
                        uireopeninternal;
                    }
                }
                else
                    attention("ファイルの保存に失敗しました\n%s", fn);
                txClose(colortext);
            }
        }
        free(buf);
    }
    else
    {
        attention(
            "単語の登録箇所が指定されていません。"
            "COLOR.CFGの挿入箇所の一行上に\n"
            "// keywords:%s\nと記述してください。", pathGetExt(text->szfilename));
    }
    textclose(colortext);
}

この記事は役に立ちましたか?

選択肢 投票
とても役に立った 0  
役に立った 0  
どちらともいえない 0  
あまり役に立たなかった 0  
役に立たなかった 0  

  • スパム消しました。 -- 2008-11-10 21:17:53 (月)
  • なんかこのページだけスパムが多いので[コメントの挿入]を消しました。コメントのある方は直接かきこみましょう。 -- 2008-11-11 22:06:18 (火)