案としては
- getch で1文字ずつ取得してカーソル制御は自前でなんとかする(BSキーの対応とか、カーソル移動とか)
- getc、getcharでなんとか[tab]キー取得できないの?
import std.stdio;
import std.process;
import std.c.stdio;
void main(){
int c;
string com;
bool loop = true;
printf(">");
while(loop){
c = getch();
switch(c){
case 13: // ret
if(com == "exit"){
// loop exit
loop = false;
} else {
// cmd execute
printf("\n");
system(com);
}
com.length = 0;
printf("\n");
printf(">");
break;
default:
if(c < 0x100){
// hankaku
com ~= c;
} else {
// zenkaku
com ~= c & 0xff;
com ~= c >> 8;
}
printf("%s",&c);
}
}
}
最初、getchで全角文字が取得できなくて途方に暮れかけたのですが、戻り値を char で受けてたのが原因でした。int型でもらえば全然大丈夫。考えてみれば当たり前か。
これからカーソルの操作について処理を増やしていく予定。あとgetchだと[DELETE]キーの取得ができないのは何故?Ctrl+Dで代用する予定だからいいのですが、どれも帯に短しタスキに長し。。。
0 件のコメント:
コメントを投稿