2008年4月29日火曜日

ckw 発見!

 ckwはKazuo Ishii氏作の Windows用のターミナルソフトです。ReadMe.txtでは
" コマンドプロンプトウィンドウを使い易くしたソフトです。 コマンドプロンプトを隠しておいて、画面表示や キー操作などユーザーインターフェース部分だけを置き換えています。"
と説明されています。
(「コマンドラインシェル - WindowsをUNIXっぽく」 からの引用)

これ探してたのですが、作者様のホームページが 見つからなく残念な思いをしてました。

が、やっと見つけましたよ。

Perlとかmemoとか日記とか。

これすごいなぁ。

2008年4月14日月曜日

CUIでCLIなコマンドラインのファイラ「morito ver 1.00」公開

コマンドラインインターフェースで操作するファイラ「morito」を公開します。

ファイラとは言ってますが、実際はいっぱいファイル名の補完ができるシェルみたいなモンです。
補完の方法は、
  1. TABでカレントフォルダのファイル名を補完
  2. 先頭が大文字だと、migemo検索により日本語ファイル名をローマ字検索して補完
  3. Alt+英数字でファイル名を検索して補完
の3種類。特に、2と3の補完が便利です。3については、
  • カレントディレクトリのファイルは常時インデックス化されていきます。
  • 条件入力により、インデックス化されたファイル名を検索できます。
  • 先頭が大文字(または末尾が.)だと、migemo検索によりローマ字で日本語が検索できます。
  • .xxx の条件入力で拡張子を指定して検索できます。(フォルダの指定は「..」で入力)
だいたいこんな仕様です。

その他の特徴としては、
  • mark と入力することでカレントディレクトリをマーキング。ch と入力するとカレントディレクトリを交換できます。保存してあるフォルダは「%%」と入力することで、コマンドの入力に利用できます。
  • ファイル名入力→Ctrl+l→コマンド名 で、主語+動詞 みたいな入力ができます。
  • bash みたいなキー操作。
  • バグも少~しあるみたいです。たまに固まる(> <)
詳しくは readme.txt みてみてください。


実際に作成してたときは、嬉々として作成してたのですが、段々形になってくるにつれて開発のモチベーションが下がってきました。やっぱり人と同じで、付き合い始めが一番燃えるんですよね。(^^;
自分のアイデアがある程度形になるにつれて、細かいとこ詰めていくのが徐々にメンドウになってきちゃって、この有様です。

この辺は性格だなぁ。この辺の気持ちを乗り切ってきちんとした「一個」の完璧な作品を作れる人っていうのが、世に名前を残していくんだろなぁ。

「morito」のアイデア自体は悪くないと思うので、誰かこのアイデアを元にもっと使いやすいツールを作ってくれたら嬉しいです。


morito ver 1.00

2008年3月25日火曜日

CUIでCLIなコマンドラインのファイラ「morito」

D言語で自作のプロンプトを作成したのだが、全く反響がないです。まぁ何の宣伝もしてないから当然といえば当然なのですが、せっかく作ったから多くの人に見てもらいたいというのが本当のトコロ。

何人かこのBlogを覗いてくれる人も、自作プロンプトにはほとんど興味がないようです。興味があるものといえば、パスの相対→絶対変換とか、バッチファイルの条件分岐とか。そもそもプロンプトのツールってのがニッチな分野なのに加えて、一般の人にとっては全くといって需要のないツールだよなぁ。

いろいろ考えたのですが、もっとたくさんの人に興味を持ってもらえるように、このツールのジャンルを「コマンドラインファイラ」と言い張ることにしました(^^;
プロンプトと言っても、bashみたいにいろいろできるようなものでもないから、実際に使うのはファイルの実行・コピー・削除・移動が主。だったらファイラって言っても差し支えないかな?

あと名前も改名。「morito」と名乗ることにします。
命名の由来は、アイコンのファイル名から。やっぱり普通の人にアピールするには見た目も重要。コマンドプロンプトなんて見た目が地味以外の何者でもないから、せめてアイコンだけでもカワイイものにしてライトユーザーにもアピール!アイコンはここから借りてきました。(Icon Archive
ちなみに羊にしたのは、なんとなく気に入ったから。関係はまったくありません。。。


以下は morito の開発コンセプトです。

CUIがGUIに勝っている点といえば、
  • マウスを持ちかえる手間がない。っていうかマウスが使えない。キーボードのホームポジションから手を離さずに全ての操作が行える。
  • 深い階層のフォルダも一発で指定可。例えば、c:\windows\system32\drivers\etc なんてフォルダもタイピングだけで瞬間移動が可。GUIだとフォルダを4回クリックする上に、system32フォルダなんてファイルが一杯だから表示に「カラカラ」時間がかかっちゃう。
とかあります。
でも、その代わりに、CUIだとイチイチ全ての文字を入力しないとダメなのが厄介なところ。
入力を省略するために、プロンプトだとTABキーでファイル名の補完もできます。が、日本語とかだと入力が面倒だし、いまいち痒いところに手が届かない。
だったら、もっと便利なファイル補完機能を持たせて入力の手間を軽減されられれば、 GUI に負けない使い心地の CUI ツールが実現するんじゃない!?

と、考えて「morito」を作成してます。
ということで、「morito」にはいろんなファイル補完機能を持たせてあります。
  1. コマンド入力中は入力文字列に併せて動的にファイル名を補完
  2. migemo.dll により、日本語のファイルはローマ字での補完が可能。
  3. 一度開いたフォルダはファイル構成を保存し、次回からは、どこにいてもファイル名を検索するだけで一発で開いたり、移動が可能。
  4. ファイル名補完候補はポップアップで選択(CUIだけど、無理してポップアップを表示してるのが個人的にはお気に入りの機能♪)

自分で言うのもなんなのですが、結構使い易いのですよ。これが。いやホントに。

細かいバグはまだまだあるみたいですが、自分の考えている機能は大体形になってきたので、もうすぐ公開しようと思います。まだ公開しないのは、readme が整わないから。

たくさんの人に使ってもらえるといいなぁぁぁぁ。。。

2008年3月11日火曜日

「名詞→動詞」の順序でコマンド入力すること

 コマンドプロンプトで入力するときにも、GUIの操作みたいに、「ファイルを選択→コマンド入力」の方が自然なんじゃない?って思って、自作プロンプト(d prompt)に組み込んでみたのですが、考え方としてはそんなに間違ってないみたい。

 こんなところを見つけました。
(インタラクションデザインパターン(3)モーダル/モードレスなインタラクション )

 「モードレスインタラクション」とかいうらしい。
 この記事の内容だと、GUIに関する操作の説明として例が挙げられてるんですが、そういうことが言いたかったんですよ。「名詞→動詞」の順序で入力した方が、イメージとして自然な感じがするんですよ。
 自分で実際に操作してみても、最初は自分でも戸惑ったけど後から大部自然に入力できるようになってきた。

 この考え方をもちっと大事にしていこ。

2008年3月3日月曜日

d prompt ver 1.02 公開


ちょっとだけ修正しました。
修正点としては、
  • alias機能の追加。iniファイルに記述する。
  • iniファイルに AbbrevEnvPath 項目を追加。環境変数PATH内の exe名を補完するかどうか。
  • パス入力時、 / で入力されたパス区切りを自動で \ に変換する。
  • コマンドの遅延入力機能 ( Ctrl+L ) を追加。(後述)
  • その他、細かいバグ修正。
今回、試験的に「コマンドの遅延入力機能」をつけてみました。機能名の是非はさておき、その内容としてはコマンド入力時に、「ファイル名→コマンド」の順番で入力できるというものです。
試しに実装してはみたものの、使いやすいかはどうかは、はなはだ疑問。。。

何でこんなことを考えたかというと、

(以下、添付readme.txt の抜粋)

エクスプローラとかGUIのファイラの場合、
  1. [ファイルをクリック](このファイルを操作しよう。)
  2. (コピーしようかな。)
  3. [ドラッグ&ドロップ]
操作は(ファイル選択→操作)の順番になります。

CUI のコマンド入力の場合、
(入力「copy AAAA BBBB」の場合)
  1. [copy を入力](コピーしようかな。)
  2. [AAAA BBBB を入力](このファイルをコピーしよう)
  3. [copy AAAA BBBB 実行]
(操作入力→ファイル選択)
という逆の流れになります。

CUI の入力の場合も、「ファイル選択→コマンドの入力」の方が、思考的に自然な操作方法なんじゃない?っていうのがそもそもの発端です。

操作方法としては、
  1. ファイル名を入力して ctrl+L
  2. '(lazy) ! ' に続けて コマンドを入力。
  3. その他のパラメータがあれば続けて入力。
  4. 空白入力でコマンドが実行される。
  5. 入力をキャンセルする場合は再び ctrl+L
ex1. del AAAA を入力する場合
[D:\]
> AAAA
(lazy) ! del
(lazy) >

Input Command is ...
' del AAAA '
ex2. copy AAAA BBBB を入力する場合
[D:\]
> AAAA
(lazy) ! copy
(lazy) > BBBB
(lazy) >

Input Command is ...
' copy AAAA BBBB '

d_prompt_1.02.lzh

2008年2月27日水曜日

skk.vim で AZIK 設定

コードを書いている環境は、
という環境で作業してます。

skkimeがWindows のどこでも skk で入力できて(skkが便利だと思っている人にとっては)便利なのですが、コマンドプロンプト上だと漢字候補を選ぶときに少し挙動が変になります。
そこで vim のプラグイン skk.vim を導入しました。
skk.vim上でAZIK を利用するための設定を作成したので公開します。たぶんどこかに必要としてる人も少~しはいるのかな?

内容はほぼAZIKと同じですが、個人的な変更もちょっとだけあります。そこら辺は適宜修正してください。下記に簡単な説明を。
  • skk.vim を導入後、下記の設定を vimrc ファイルに記述します。
  • デフォルトの skk.vim の設定では、変換開始のキーに "X" が除かれているので、新たに設定しておく必要があります。
  • 個人的に、「っ」は "tm" で変換してます。(AZIK では ";" で入力するようになってます。)
  • その他は適当に。。。


1 let skk_henkan_point_keys = 'ABCDEFGHIJKMNOPRSTUVWXYZ'
2 let skk_rom_kana_rules = ""
3 \. "a あ ア\<NL>"
4 \. "ba ば バ\<NL>"
5 \. "bd べん ベン\<NL>"
6 \. "be べ ベ\<NL>"
7 \. "bh ぶう ブウ\<NL>"
8 \. "bi び ビ\<NL>"
9 \. "bj ぶん ブン\<NL>"
10 \. "bk びん ビン\<NL>"
11 \. "bl ぼん ボン\<NL>"
12 \. "bn ばん バン\<NL>"
13 \. "bo ぼ ボ\<NL>"
14 \. "bp ぼう ボウ\<NL>"
15 \. "bq ばい バイ\<NL>"
16 \. "bu ぶ ブ\<NL>"
17 \. "bw べい ベイ\<NL>"
18 \. "bya びゃ ビャ\<NL>"
19 \. "byd びぇん ビェン\<NL>"
20 \. "bye びぇ ビェ\<NL>"
21 \. "byh びゅう ビュウ\<NL>"
22 \. "byj びゅん ビュン\<NL>"
23 \. "byl びょん ビョン\<NL>"
24 \. "byn びゃん ビャン\<NL>"
25 \. "byo ぴょ ピョ\<NL>"
26 \. "byp びょう ビョウ\<NL>"
27 \. "byq びゃい ビャイ\<NL>"
28 \. "byu びゅ ビュ\<NL>"
29 \. "byw びぇい ビェイ\<NL>"
30 \. "byz びゃん ビャン\<NL>"
31 \. "bz ばん バン\<NL>"
32 \. "ca ちゃ チャ\<NL>"
33 \. "cd ちぇん チェン\<NL>"
34 \. "ce ちぇ チェ\<NL>"
35 \. "ch ちゅう チュウ\<NL>"
36 \. "cj ちゅん チュン\<NL>"
37 \. "cl ちょん チョン\<NL>"
38 \. "cn ちゃん チャン\<NL>"
39 \. "co ちょ チョ\<NL>"
40 \. "cp ちょう チョウ\<NL>"
41 \. "cq ちゃい チャイ\<NL>"
42 \. "cu ちゅ チュ\<NL>"
43 \. "cw ちぇい チェイ\<NL>"
44 \. "cz ちゃん チャン\<NL>"
45 \. "da だ ダ\<NL>"
46 \. "dci でぃ ディ\<NL>"
47 \. "dcu どぅ ドゥ\<NL>"
48 \. "dd でん デン\<NL>"
49 \. "de で デ\<NL>"
50 \. "dh づう ヅウ\<NL>"
51 \. "di ぢ ヂ\<NL>"
52 \. "dj づん ヅン\<NL>"
53 \. "dk ぢん ヂン\<NL>"
54 \. "dl どん ドン\<NL>"
55 \. "dn だん ダン\<NL>"
56 \. "do ど ド\<NL>"
57 \. "dp どう ドウ\<NL>"
58 \. "dq だい ダイ\<NL>"
59 \. "ds です デス\<NL>"
60 \. "du づ ヅ\<NL>"
61 \. "dw でい デイ\<NL>"
62 \. "dz だん ダン\<NL>"
63 \. "e え エ\<NL>"
64 \. "fa ふぁ ファ\<NL>"
65 \. "fd ふぇん フェン\<NL>"
66 \. "fe ふぇ フェ\<NL>"
67 \. "fh ふう フウ\<NL>"
68 \. "fi ふぃ フィ\<NL>"
69 \. "fj ふん フン\<NL>"
70 \. "fk ふぃん フィン\<NL>"
71 \. "fl ふぉん フォン\<NL>"
72 \. "fn ふぁん ファン\<NL>"
73 \. "fn ふぁん ファン\<NL>"
74 \. "fo ふぉ フォ\<NL>"
75 \. "fp ふぉー フォー\<NL>"
76 \. "fq ふぁい ファイ\<NL>"
77 \. "fu ふ フ\<NL>"
78 \. "fu ふ フ\<NL>"
79 \. "fw ふぇい フェイ\<NL>"
80 \. "fz ふぁん ファン\<NL>"
81 \. "ga が ガ\<NL>"
82 \. "gd げん ゲン\<NL>"
83 \. "ge げ ゲ\<NL>"
84 \. "gh ぐう グウ\<NL>"
85 \. "gi ぎ ギ\<NL>"
86 \. "gj ぐん グン\<NL>"
87 \. "gk ぎん ギン\<NL>"
88 \. "gl ごん ゴン\<NL>"
89 \. "gn がん ガン\<NL>"
90 \. "go ご ゴ\<NL>"
91 \. "gp ごう ゴウ\<NL>"
92 \. "gq がい ガイ\<NL>"
93 \. "gu ぐ グ\<NL>"
94 \. "gw げい ゲイ\<NL>"
95 \. "gya ぎゃ ギャ\<NL>"
96 \. "gyd ぎぇん ギェン\<NL>"
97 \. "gye ぎぇ ギェ\<NL>"
98 \. "gyh ぎゅう ギュウ\<NL>"
99 \. "gyj ぎゅん ギュン\<NL>"
100 \. "gyl ぎょん ギョン\<NL>"
101 \. "gyn ぎゃん ギャン\<NL>"
102 \. "gyo ぎょ ギョ\<NL>"
103 \. "gyp ぎょう ギョウ\<NL>"
104 \. "gyq ぎゃい ギャイ\<NL>"
105 \. "gyu ぎゅ ギュ\<NL>"
106 \. "gyw ぎぇい ギェイ\<NL>"
107 \. "gyz ぎゃん ギャン\<NL>"
108 \. "gz がん ガン\<NL>"
109 \. "ha は ハ\<NL>"
110 \. "hd へん ヘン\<NL>"
111 \. "he へ ヘ\<NL>"
112 \. "hga ひゃ ヒャ\<NL>"
113 \. "hgd ひぇん ヒェン\<NL>"
114 \. "hge ひぇ ヒェ\<NL>"
115 \. "hgh ひゅう ヒュウ\<NL>"
116 \. "hgj ひゅん ヒュン\<NL>"
117 \. "hgl ひょん ヒョン\<NL>"
118 \. "hgn ひゃん ヒャン\<NL>"
119 \. "hgo ひょ ヒョ\<NL>"
120 \. "hgp ひょう ヒョウ\<NL>"
121 \. "hgq ひゃい ヒャイ\<NL>"
122 \. "hgu ひゅ ヒュ\<NL>"
123 \. "hgw ひぇい ヒェイ\<NL>"
124 \. "hgz ひゃん ヒャン\<NL>"
125 \. "hf ふ フ\<NL>"
126 \. "hh ふう フウ\<NL>"
127 \. "hi ひ ヒ\<NL>"
128 \. "hj ふん フン\<NL>"
129 \. "hk ひん ヒン\<NL>"
130 \. "hl ほん ホン\<NL>"
131 \. "hn はん ハン\<NL>"
132 \. "hn はん ハン\<NL>"
133 \. "ho ほ ホ\<NL>"
134 \. "hp ほう ホウ\<NL>"
135 \. "hq はい ハイ\<NL>"
136 \. "hu ふ フ\<NL>"
137 \. "hw へい ヘイ\<NL>"
138 \. "hya ひゃ ヒャ\<NL>"
139 \. "hyd ひぇん ヒェン\<NL>"
140 \. "hye ひぇ ヒェ\<NL>"
141 \. "hyh ひゅう ヒュウ\<NL>"
142 \. "hyj ひゅん ヒュン\<NL>"
143 \. "hyl ひょん ヒョン\<NL>"
144 \. "hyn ひゃん ヒャン\<NL>"
145 \. "hyo ひょ ヒョ\<NL>"
146 \. "hyp ひょう ヒョウ\<NL>"
147 \. "hyq ひゃい ヒャイ\<NL>"
148 \. "hyu ひゅ ヒュ\<NL>"
149 \. "hyw ひぇい ヒェイ\<NL>"
150 \. "hyz ひゃん ヒャン\<NL>"
151 \. "hz はん ハン\<NL>"
152 \. "i い イ\<NL>"
153 \. "ja じゃ ジャ\<NL>"
154 \. "jd じぇん ジェン\<NL>"
155 \. "je じぇ ジェ\<NL>"
156 \. "jh じゅう ジュウ\<NL>"
157 \. "ji じ ジ\<NL>"
158 \. "jj じゅん ジュン\<NL>"
159 \. "jl じょん ジョン\<NL>"
160 \. "jn じゃん ジャン\<NL>"
161 \. "jo じょ ジョ\<NL>"
162 \. "jp じょう ジョウ\<NL>"
163 \. "jq じゃい ジャイ\<NL>"
164 \. "ju じゅ ジュ\<NL>"
165 \. "jw じぇい ジェイ\<NL>"
166 \. "jz じゃん ジャン\<NL>"
167 \. "ka か カ\<NL>"
168 \. "kd けん ケン\<NL>"
169 \. "ke け ケ\<NL>"
170 \. "kga きゃ キャ\<NL>"
171 \. "kgd きぇん キェン\<NL>"
172 \. "kge きぇ キェ\<NL>"
173 \. "kgh きゅう キュウ\<NL>"
174 \. "kgj きゅん キュン\<NL>"
175 \. "kgl きょん キョン\<NL>"
176 \. "kgn きゃん キャン\<NL>"
177 \. "kgo きょ キョ\<NL>"
178 \. "kgp きょう キョウ\<NL>"
179 \. "kgq きゃい キャイ\<NL>"
180 \. "kgu きゅ キュ\<NL>"
181 \. "kgw きぇい キェイ\<NL>"
182 \. "kgz きゃん キャン\<NL>"
183 \. "kh くう クウ\<NL>"
184 \. "ki き キ\<NL>"
185 \. "kj くん クン\<NL>"
186 \. "kk きん キン\<NL>"
187 \. "kl こん コン\<NL>"
188 \. "kn かん カン\<NL>"
189 \. "kn かん カン\<NL>"
190 \. "ko こ コ\<NL>"
191 \. "kp こう コウ\<NL>"
192 \. "kq かい カイ\<NL>"
193 \. "ku く ク\<NL>"
194 \. "kw けい ケイ\<NL>"
195 \. "kya きゃ キャ\<NL>"
196 \. "kyd きぇん キェン\<NL>"
197 \. "kye きぇ キェ\<NL>"
198 \. "kyh きゅう キュウ\<NL>"
199 \. "kyj きゅん キュン\<NL>"
200 \. "kyl きょん キョン\<NL>"
201 \. "kyn きゃん キャン\<NL>"
202 \. "kyo きょ キョ\<NL>"
203 \. "kyp きょう キョウ\<NL>"
204 \. "kyq きゃい キャイ\<NL>"
205 \. "kyu きゅ キュ\<NL>"
206 \. "kyw きぇい キェイ\<NL>"
207 \. "kyz きゃん キャン\<NL>"
208 \. "kz かん カン\<NL>"
209 \. "la ぁ ァ\<NL>"
210 \. "le ぇ ェ\<NL>"
211 \. "li ぃ ィ\<NL>"
212 \. "lo ぉ ォ\<NL>"
213 \. "lu ぅ ゥ\<NL>"
214 \. "lya ゃ ャ\<NL>"
215 \. "lyo ょ ョ\<NL>"
216 \. "lyu ゅ ュ\<NL>"
217 \. "ma ま マ\<NL>"
218 \. "md めん メン\<NL>"
219 \. "me め メ\<NL>"
220 \. "mga みゃ ミャ\<NL>"
221 \. "mgd みぇん ミェン\<NL>"
222 \. "mge みぇ ミェ\<NL>"
223 \. "mgh みゅう ミュウ\<NL>"
224 \. "mgj みゅん ミュン\<NL>"
225 \. "mgl みょん ミョン\<NL>"
226 \. "mgn みゃん ミャン\<NL>"
227 \. "mgo みょ ミョ\<NL>"
228 \. "mgp みょう ミョウ\<NL>"
229 \. "mgq みゃい ミャイ\<NL>"
230 \. "mgu みゅ ミュ\<NL>"
231 \. "mgw みぇい ミェイ\<NL>"
232 \. "mgz みゃん ミャン\<NL>"
233 \. "mh むう ムウ\<NL>"
234 \. "mi み ミ\<NL>"
235 \. "mj むん ムン\<NL>"
236 \. "mk みん ミン\<NL>"
237 \. "ml もん モン\<NL>"
238 \. "mn もの モノ\<NL>"
239 \. "mo も モ\<NL>"
240 \. "mp もう モウ\<NL>"
241 \. "mq まい マイ\<NL>"
242 \. "ms ます マス\<NL>"
243 \. "mu む ム\<NL>"
244 \. "mw めい メイ\<NL>"
245 \. "mya みゃ ミャ\<NL>"
246 \. "myd みぇん ミェン\<NL>"
247 \. "mye みぇ ミェ\<NL>"
248 \. "myh みゅう ミュウ\<NL>"
249 \. "myj みゅん ミュン\<NL>"
250 \. "myl みょん ミョン\<NL>"
251 \. "myn みゃん ミャン\<NL>"
252 \. "myo みょ ミョ\<NL>"
253 \. "myp みょう ミョウ\<NL>"
254 \. "myq みゃい ミャイ\<NL>"
255 \. "myu みゅ ミュ\<NL>"
256 \. "myw みぇい ミェイ\<NL>"
257 \. "myz みゃん ミャン\<NL>"
258 \. "mz まん マン\<NL>"
259 \. "na な ナ\<NL>"
260 \. "nd ねん ネン\<NL>"
261 \. "ne ね ネ\<NL>"
262 \. "nga にゃ ニャ\<NL>"
263 \. "ngd にぇん ニェン\<NL>"
264 \. "nge にぇ ニェ\<NL>"
265 \. "ngh にゅう ニュウ\<NL>"
266 \. "ngj にゅん ニュン\<NL>"
267 \. "ngl にょん ニョン\<NL>"
268 \. "ngn にゃん ニャン\<NL>"
269 \. "ngo にょ ニョ\<NL>"
270 \. "ngp にょう ニョウ\<NL>"
271 \. "ngq にゃい ニャイ\<NL>"
272 \. "ngu にゅ ニュ\<NL>"
273 \. "ngw にぇい ニェイ\<NL>"
274 \. "ngz にゃん ニャン\<NL>"
275 \. "nh ぬう ヌウ\<NL>"
276 \. "ni に ニ\<NL>"
277 \. "nj ぬん ヌン\<NL>"
278 \. "nk にん ニン\<NL>"
279 \. "nl のん ノン\<NL>"
280 \. "nn ん ン\<NL>"
281 \. "no の ノ\<NL>"
282 \. "np のう ノウ\<NL>"
283 \. "nq ない ナイ\<NL>"
284 \. "nu ぬ ヌ\<NL>"
285 \. "nw ねい ネイ\<NL>"
286 \. "nya にゃ ニャ\<NL>"
287 \. "nyd にぇん ニェン\<NL>"
288 \. "nye にぇ ニェ\<NL>"
289 \. "nyh にゅう ニュウ\<NL>"
290 \. "nyj にゅん ニュン\<NL>"
291 \. "nyl にょん ニョン\<NL>"
292 \. "nyn にゃん ニャン\<NL>"
293 \. "nyo にょ ニョ\<NL>"
294 \. "nyp にょう ニョウ\<NL>"
295 \. "nyq にゃい ニャイ\<NL>"
296 \. "nyu にゅ ニュ\<NL>"
297 \. "nyw にぇい ニェイ\<NL>"
298 \. "nyz にゃん ニャン\<NL>"
299 \. "nz なん ナン\<NL>"
300 \. "o お オ\<NL>"
301 \. "pa ぱ パ\<NL>"
302 \. "pd ぺん ペン\<NL>"
303 \. "pe ぺ ペ\<NL>"
304 \. "pga ぴゃ ピャ\<NL>"
305 \. "pgd ぴぇん ピェン\<NL>"
306 \. "pge ぴぇ ピェ\<NL>"
307 \. "pgh ぴゅう ピュウ\<NL>"
308 \. "pgj ぴゅん ピュン\<NL>"
309 \. "pgl ぴょん ピョン\<NL>"
310 \. "pgn ぴゃん ピャン\<NL>"
311 \. "pgo ぴょ ピョ\<NL>"
312 \. "pgp ぴょう ピョウ\<NL>"
313 \. "pgq ぴゃい ピャイ\<NL>"
314 \. "pgu ぴゅ ピュ\<NL>"
315 \. "pgw ぴぇい ピェイ\<NL>"
316 \. "pgz ぴゃん ピャン\<NL>"
317 \. "ph ぷう プウ\<NL>"
318 \. "pi ぴ ピ\<NL>"
319 \. "pj ぷん プン\<NL>"
320 \. "pk ぴん ピン\<NL>"
321 \. "pl ぽん ポン\<NL>"
322 \. "pn ぱん パン\<NL>"
323 \. "po ぽ ポ\<NL>"
324 \. "pp ぽう ポウ\<NL>"
325 \. "pq ぱい パイ\<NL>"
326 \. "pu ぷ プ\<NL>"
327 \. "pw ぺい ペイ\<NL>"
328 \. "pya ぴゃ ピャ\<NL>"
329 \. "pyd ぴぇん ピェン\<NL>"
330 \. "pye ぴぇ ピェ\<NL>"
331 \. "pyh ぴゅう ピュウ\<NL>"
332 \. "pyj ぴゅん ピュン\<NL>"
333 \. "pyl ぴょん ピョン\<NL>"
334 \. "pyn ぴゃん ピャン\<NL>"
335 \. "pyo ぴょ ピョ\<NL>"
336 \. "pyp ぴょう ピョウ\<NL>"
337 \. "pyq ぴゃい ピャイ\<NL>"
338 \. "pyu ぴゅ ピュ\<NL>"
339 \. "pyw ぴぇい ピェイ\<NL>"
340 \. "pyz ぴゃん ピャン\<NL>"
341 \. "pz ぱん パン\<NL>"
342 \. "ra ら ラ\<NL>"
343 \. "rd れん レン\<NL>"
344 \. "re れ レ\<NL>"
345 \. "rh るう ルウ\<NL>"
346 \. "ri り リ\<NL>"
347 \. "rj るん ルン\<NL>"
348 \. "rk りん リン\<NL>"
349 \. "rl ろん ロン\<NL>"
350 \. "rn らん ラン\<NL>"
351 \. "rn らん ラン\<NL>"
352 \. "ro ろ ロ\<NL>"
353 \. "rp ろう ロウ\<NL>"
354 \. "rq らい ライ\<NL>"
355 \. "ru る ル\<NL>"
356 \. "rw れい レイ\<NL>"
357 \. "rya りゃ リャ\<NL>"
358 \. "ryd りぇん リェン\<NL>"
359 \. "rye りぇ リェ\<NL>"
360 \. "ryh りゅう リュウ\<NL>"
361 \. "ryj りゅん リュン\<NL>"
362 \. "ryl りょん リョン\<NL>"
363 \. "ryn りゃん リャン\<NL>"
364 \. "ryo りょ リョ\<NL>"
365 \. "ryp りょう リョウ\<NL>"
366 \. "ryq りゃい リャイ\<NL>"
367 \. "ryu りゅ リュ\<NL>"
368 \. "ryw りぇい リェイ\<NL>"
369 \. "ryz りゃん リャン\<NL>"
370 \. "rz らん ラン\<NL>"
371 \. "sa さ サ\<NL>"
372 \. "sd せん セン\<NL>"
373 \. "se せ セ\<NL>"
374 \. "sf せい セイ\<NL>"
375 \. "sh すう スウ\<NL>"
376 \. "si し シ\<NL>"
377 \. "sj すん スン\<NL>"
378 \. "sk しん シン\<NL>"
379 \. "sl そん ソン\<NL>"
380 \. "sn さん サン\<NL>"
381 \. "so そ ソ\<NL>"
382 \. "sp そう ソウ\<NL>"
383 \. "sq さい サイ\<NL>"
384 \. "su す ス\<NL>"
385 \. "sw せい セイ\<NL>"
386 \. "sya しゃ シャ\<NL>"
387 \. "syd しぇん シェン\<NL>"
388 \. "sye しぇ シェ\<NL>"
389 \. "syh しゅう シュウ\<NL>"
390 \. "syj しゅん シュン\<NL>"
391 \. "syl しょん ション\<NL>"
392 \. "syn しゃん シャン\<NL>"
393 \. "syo しょ ショ\<NL>"
394 \. "syp しょう ショウ\<NL>"
395 \. "syq しゃい シャイ\<NL>"
396 \. "syu しゅ シュ\<NL>"
397 \. "syw しぇい シェイ\<NL>"
398 \. "syz しゃん シャン\<NL>"
399 \. "sz さん サン\<NL>"
400 \. "ta た タ\<NL>"
401 \. "td てん テン\<NL>"
402 \. "te て テ\<NL>"
403 \. "tgi てぃ ティ\<NL>"
404 \. "tgu とぅ トゥ\<NL>"
405 \. "th つう ツウ\<NL>"
406 \. "ti ち チ\<NL>"
407 \. "tj つん ツン\<NL>"
408 \. "tk ちん チン\<NL>"
409 \. "tl とん トン\<NL>"
410 \. "tm っ ッ\<NL>"
411 \. "tn たん タン\<NL>"
412 \. "to と ト\<NL>"
413 \. "tp とう トウ\<NL>"
414 \. "tq たい タイ\<NL>"
415 \. "tu つ ツ\<NL>"
416 \. "tw てい テイ\<NL>"
417 \. "tya ちゃ チャ\<NL>"
418 \. "tyd ちぇん チェン\<NL>"
419 \. "tye ちぇ チェ\<NL>"
420 \. "tyh ちゅう チュウ\<NL>"
421 \. "tyj ちゅん チュン\<NL>"
422 \. "tyl ちょん チョン\<NL>"
423 \. "tyn ちゃん チャン\<NL>"
424 \. "tyo ちょ チョ\<NL>"
425 \. "typ ちょう チョウ\<NL>"
426 \. "tyq ちゃい チャイ\<NL>"
427 \. "tyu ちゅ チュ\<NL>"
428 \. "tyw ちぇい チェイ\<NL>"
429 \. "tyz ちゃん チャン\<NL>"
430 \. "tz たん タン\<NL>"
431 \. "u う ウ\<NL>"
432 \. "va ヴぁ ヴァ\<NL>"
433 \. "ve ヴぇ ヴェ\<NL>"
434 \. "vi ヴぃ ヴィ\<NL>"
435 \. "vo ヴぉ ヴォ\<NL>"
436 \. "vu ヴ ヴ\<NL>"
437 \. "wa わ ワ\<NL>"
438 \. "wd うぇん ウェン\<NL>"
439 \. "we うぇ ウェ\<NL>"
440 \. "wi うぃ ウィ\<NL>"
441 \. "wk うぃん ウィン\<NL>"
442 \. "wl うぉん ウォン\<NL>"
443 \. "wn わん ワン\<NL>"
444 \. "wn わん ワン\<NL>"
445 \. "wo を ヲ\<NL>"
446 \. "wo を ヲ\<NL>"
447 \. "wp うぉー ウォー\<NL>"
448 \. "wq わい ワイ\<NL>"
449 \. "wso うぉ ウォ\<NL>"
450 \. "wz わん ワン\<NL>"
451 \. "xa しゃ シャ\<NL>"
452 \. "xd しぇん シェン\<NL>"
453 \. "xe しぇ シェ\<NL>"
454 \. "xh しゅう シュウ\<NL>"
455 \. "xj しゅん シュン\<NL>"
456 \. "xl しょん ション\<NL>"
457 \. "xn しゃん シャン\<NL>"
458 \. "xo しょ ショ\<NL>"
459 \. "xp しょう ショウ\<NL>"
460 \. "xq しゃい シャイ\<NL>"
461 \. "xu しゅ シュ\<NL>"
462 \. "xw しぇい シェイ\<NL>"
463 \. "xz しゃん シャン\<NL>"
464 \. "ya や ヤ\<NL>"
465 \. "yh ゆう ユウ\<NL>"
466 \. "yj ゆん ユン\<NL>"
467 \. "yl よん ヨン\<NL>"
468 \. "yn やん ヤン\<NL>"
469 \. "yn やん ヤン\<NL>"
470 \. "yo よ ヨ\<NL>"
471 \. "yp よう ヨウ\<NL>"
472 \. "yq やい ヤイ\<NL>"
473 \. "yu ゆ ユ\<NL>"
474 \. "yz やん ヤン\<NL>"
475 \. "z  \<NL>"
476 \. "z- ~\<NL>"
477 \. "z, ‥\<NL>"
478 \. "z. …\<NL>"
479 \. "z/ ・\<NL>"
480 \. "z[ 『\<NL>"
481 \. "z] 』\<NL>"
482 \. "z< ←\<NL>"
483 \. "z< ←\<NL>"
484 \. "z9 (\<NL>"
485 \. "z0 )\<NL>"
486 \. "za ざ ザ\<NL>"
487 \. "zc ざ ザ\<NL>"
488 \. "zd ぜん ゼン\<NL>"
489 \. "ze ぜ ゼ\<NL>"
490 \. "zh ずう ズウ\<NL>"
491 \. "zi じ ジ\<NL>"
492 \. "zj ずん ズン\<NL>"
493 \. "zk じん ジン\<NL>"
494 \. "zl ぞん ゾン\<NL>"
495 \. "zn ざん ザン\<NL>"
496 \. "zo ぞ ゾ\<NL>"
497 \. "zp ぞう ゾウ\<NL>"
498 \. "zq ざい ザイ\<NL>"
499 \. "zu ず ズ\<NL>"
500 \. "zv ざい ザイ\<NL>"
501 \. "zw ぜい ゼイ\<NL>"
502 \. "zx ぜい ゼイ\<NL>"
503 \. "zya じゃ ジャ\<NL>"
504 \. "zyd じぇん ジェン\<NL>"
505 \. "zye じぇ ジェ\<NL>"
506 \. "zyh じゅう ジュウ\<NL>"
507 \. "zyj じゅん ジュン\<NL>"
508 \. "zyl じょん ジョン\<NL>"
509 \. "zyn じゃん ジャン\<NL>"
510 \. "zyo じょ ジョ\<NL>"
511 \. "zyp じょう ジョウ\<NL>"
512 \. "zyq じゃい ジャイ\<NL>"
513 \. "zyu じゅ ジュ\<NL>"
514 \. "zyw じぇい ジェイ\<NL>"
515 \. "zyz じゃん ジャン\<NL>"
516 \. "zz ざん ザン\<NL>"
517 \. "- ー\<NL>"
518 \. "! !\<NL>"
519 \. ": :\<NL>"
520 \. "' ー\<NL>"
521 \. "? ?\<NL>"
522 \. "[ 「\<NL>"
523 \. "] 」\<NL>"
524 runtime skk.vim
525

2008年2月26日火曜日

d prompt ver 1.01 公開



ちょっとだけ修正しました。
修正点としては、
  • 環境変数PATH内 の exe / bat ファイルも入力補完対象とした。
  • 終了のコマンドは exit でなく quit とした。
  • ドライブ名を含む入力補完では、コロン(:)の後の \ を省略可能とした。(C:P の入力補完で、C:\Program Files が候補に挙がる)
  • dabbrev コマンド追加。動的補完の on /off を切り替える。
  • その他、細かいバグ修正。

d prompt 1.01 .lzh

2008年2月23日土曜日

d prompt ver 1.00 公開


D言語での自作プロンプトがある程度、形になってきました。
まだまだ不安定な部分もありますが、せっかく形になってきたので、早々に公開しちゃいます。
サンデープログラマの一人よがりなツールですので、自己責任で使ってみてください。

前にも書いたのですが、特徴としては、
  • ctrl+fとかctrl+bとか、bashみたいなキー操作。
  • TABでファイル名の入力補完。
  • 補完候補はポップアップとして表示。
  • 入力時に動的に補完候補を表示する動的補完機能。
  • migemo を利用して ローマ字でファイル名の補完が可能。
などなどです。

使ってみて感想等ありましたら、是非是非コメントください。

d prompt ver 1.00

2008年2月18日月曜日

D言語での自作プロンプトがあとちょい。



 D言語で自作のプロンプトを作成しようということで、一人でテレテレやっているのですが、ようやく形になりそうです。とりあえずの名前は、D言語製のプロンプトということで、「dp」としました。



 特徴としては、




  • TAB押下時のファイル名補完。候補を画面上にリスト形式で表示する。

  • ファイル名補完時に、頭文字が大文字の場合、Migemo検索を開始して、日本語ファイル名を候補としてリスト表示する。

  • Ctrl+a でカーソルを行頭。Ctrl+e でカーソルを末尾に。

  • Ctrl+d で1文字削除。Ctrl+h でBack Space。Ctrl+w で単語を削除。

  • Ctrl+n, Ctrl+p でコマンド履歴検索。前回立ち上げ時の履歴も参照できる。



今のところは、まだこれくらい。



 というわけで、もうちょっと形になってきたら公開。といきたいのですが、Bloggerってファイルのアップロードってどうすればいいんだ?それともできないのかしらん???



 誰かいい方法知っていたらオシエテクダサイ。。。

D言語でmigemoを使う

 [Migemo: ローマ字のまま日本語をインクリメンタル検索]なんていう仕組みが世の中にあります。これがとにかく便利でたまらないんです。なんで市販の日本語を扱うソフトがこの機能に対応しないのか不思議でしょうがないです。今のところ、対応しているソフトはフリーのものでしか見たことがありません。

 D言語で自作プロンプトをつくりたいな、と思いたち、一人でいろいろ試行錯誤しているのですが、もともとはMigemo対応のプロンプトが欲しいと考えたことに端を発してます。

 ということで、D言語からMigemoを利用できるようにしてみました。利用しているのは香り屋さんのCMigemoです。



main.d
// migemo テスト
import std.stdio;
import std.string;
import std.windows.charset;
import migemo;

void main(string[] args)
{

if(args.length < 3)
{
printf("There is not keyword.\n");
return;
}

cmigemo migemo = new cmigemo("D:\\migemo\\dict");

// mige.open(); // 自動で行われる。

// migemo dict
// dict は sjis だが、std.regexp を利用するために、
// 標準の戻り値は utf8 を返す。
// sjis が必要な場合は、 query_sjis を使う。
string ret;

// utf8
ret = migemo.query(args[1]);
printf("utf8: :%s\n",toStringz(ret));
printf("utf8:toMBSz:%s\n",toMBSz(ret));
writefln(migemo.find_sjis(args[2]));
writefln(migemo.find("テスト"));

// sjis
ret = migemo.query_sjis(args[1]);
printf("sjis: :%s\n",toStringz(ret));


// mige.release();// 自動で行われる。

}


migemo.d
import std.stdio;
import std.string;
import std.regexp;
import std.windows.charset;

pragma (lib, "migemo.lib");

const int MIGEMO_DICTID_INVALID =0;
const int MIGEMO_DICTID_MIGEMO =1;
const int MIGEMO_DICTID_ROMA2HIRA =2;
const int MIGEMO_DICTID_HIRA2KATA =3;
const int MIGEMO_DICTID_HAN2ZEN =4;

struct migemo {};
extern (C) {
export migemo* migemo_open(char* dict);
export void migemo_close(migemo* object);
export char* migemo_query(migemo* object, char* query);
export void migemo_release(migemo* object, char* string);

export int migemo_set_operator(migemo* object, int index, char* op);
export const char* migemo_get_operator(migemo* object, int index);

export int migemo_load(migemo* obj, int dict_id, char* dict_file);
export int migemo_is_enable(migemo* obj);
}


class cmigemo
{

private migemo *m;
private string migemo_path;
private bool open_flg = false;
private string prev_pattern;
public void path(string p){migemo_path = p;}


// コンストラクタ
public this(string path){migemo_path = path;}
public ~this(){if(open_flg)close();}

// migemo 開く
public void open()
{
open_flg = true;
m = migemo_open(null);
migemo_load(m, MIGEMO_DICTID_MIGEMO, toStringz(migemo_path ~ "\\migemo-dict"));
migemo_load(m, MIGEMO_DICTID_ROMA2HIRA, toStringz(migemo_path ~ "\\roma2hira.dat"));
migemo_load(m, MIGEMO_DICTID_HIRA2KATA, toStringz(migemo_path ~ "\\hira2kata.dat"));
migemo_load(m, MIGEMO_DICTID_HAN2ZEN, toStringz(migemo_path ~ "\\han2zen.dat"));
}

// migemo 閉じる
public void close()
{
migemo_close(m);
open_flg = false;
}


// 戻り値は utf8
public string query(string keyword)
{
return query_sub(keyword, false);
}


// 戻り値は sjis
public string query_sjis(string keyword)
{
return query_sub(keyword, true);
}


// migemo文字列取得用サブルーチン
public string query_sub(string keyword, bool sjis_flg)
{

if(!open_flg)open();

char* p;
string s;
p = migemo_query(m, toStringz(keyword));
if(sjis_flg)
s = std.string.toString(p);
else
s = fromMBSz(cast(invariant)(p));

migemo_release(m, p); /* queryの結果は必ずreleaseする */

prev_pattern = s.idup;
return s.idup;

}


// migemo 文字列比較
public bool find_sjis(string sjis)
{
return find(fromMBSz((sjis ~ "\00").ptr));
}
public bool find_sjis(string sjis, string pattern)
{
return find(fromMBSz((sjis ~ "\00").ptr), pattern);
}
public bool find(string text)
{
return find(text, prev_pattern);
}
public bool find(string text, string pattern)
{
// phobos ライブライリを利用しているため、
// text,patternともに utf8 の必要がある。
return (-1 != std.regexp.find(text, pattern, "i"));
}

}