無印エディタメモ

2007-04-11

[][]拡張マネージャ

以下の機能を実装する.

拡張インストール

拡張を所定のディレクトリコピーする.

設定ファイル拡張のGUIDを追加し,メニューやキー割り当てを追加する.

拡張削除

拡張を所定のディレクトリから削除する.

設定ファイルから拡張のGUIDを削除し,メニューやキー割り当てを削除する.

拡張の有効化

設定ファイル拡張のGUIDを追加し,メニューやキー割り当てを追加する.

拡張の無効化

設定ファイルから拡張のGUIDを削除し,メニューやキー割り当てを削除する.

バージョン管理

古いバージョンインストールしようとすると,警告をうるさく出す.

2007-04-04

[][]無印エディタ拡張仕様

近い将来変更する可能性があります.

拡張の読み込み

設定ファイル(files.datを使う?)から利用可能な拡張リストを取得する.

拡張自体は可能な限り必要になってから読み込む.

メニュードリブン

メニューやツールバーショートカットキーから駆動する.

呼び出すときに関数名に拡張のGUIDを付けることで識別する.

イベントドリブン

既存のイベントの呼び出される前に実行される.ただしinitは除く.

基本的には全ての拡張に含まれるイベントハンドラが順番に実行されるが,途中で握りつぶすことも可能.

ただし,細かい仕様はまとまっていない.

名前空間

拡張ディレクトリインストールされた別のクラスを参照するには,@Class のように,頭に@を付ける.

付けなかった場合は,通常通り macro, include の順で探索を行う.

2007-04-01

[][]無印エディタ拡張仕様

イメージとしては,https://addons.mozilla.org/ja/firefox/みたいな感じ.

拡張ファイル

必要な数個のファイルzipで圧縮したものを扱う.

インストールアンインストール

Firefoxの「アドオンの管理」のような感じ.

ファイルを放り込むだけでインストール,リストから選択して「削除」できれいに消せると良い.

インストール先のディレクトリ管理

GUIDをディレクトリ名にしたらぶつからない?

名前空間の分離

別の拡張で同じクラス名・同じ関数名がバッティングしても区別できるように.

GUIDをキーにすれば大丈夫?

2006-11-01

[][]危ないファイル

Windowsで,以下のファイル名のファイルが出来てしまうとエクスプローラから消せない。

  • AUX
  • CON
  • NUL
  • PRN
  • CLOCK$
  • COM1~COM9
  • LPT1~LPT9

拡張子が付いていてもアウト。

  • con.txt
  • nul.txt.doc

末尾のスペースは除去される。

以下のファイル名はエクスプローラからは作成できないが,cygwinmv等を使って作成できる。

2006-10-09

[][]Cのlocale.h

例:コマンドライン引数を前後逆にして出力

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

void ReverceStr(char *dest,const char *src)
{
  dest += strlen(src);
  *dest = '\0';

  while (*src){
    // 1文字ずつ処理
    int n = mblen(src, MB_CUR_MAX);
    dest -= n;
    memcpy(dest, src, n);
    src += n;
  }
}

int main(int argc,char **argv)
{
  enum { BUF_LEN = 256, };
  char buf[BUF_LEN];

  // OS既定のロケール(WindowsならJapanese.932)
  setlocale(LC_ALL, "");

  if (argc >= 2){
    ReverceStr(buf, argv[1]);
    printf("%s\n", buf);
  }
  return 0;
}

動作例

$ reverse abcdeあいうえお
おえういあedcba