cursesでvi風移動してみる。

端末制御ライブラリ、cursesを使ってみた。すげー簡単。

とりあえずvi風移動をしてみる。

#include <curses.h>

int main(void)
{
    int x = 0;
    int y = 0;
    int c;

    initscr();       // ウィンドウの初期化
    noecho();        // キーボードのエコーをしない

    for (;;) {       // 終わり方がわからん(汗)
        c = getch(); // getcharみたいな

        switch (c) {
        case 'h' : x--; break;
        case 'j' : y++; break;
        case 'k' : y--; break;
        case 'l' : x++; break;
        }

        move(10, 20);             // デバッグ用
        printw("(%d, %d)", x, y); // x,y座標だと違和感アリ

        move(y, x); // 行、列
        refresh();  // 描画
    }

    return 0;
}

で、makeはこんな感じ。

ncuses1 : cuses1.c
	gcc -lcurses -o $@ $<

普段gvimを使ってるので、konsoleでデバッグしたい。

test : ncuses1
	konsole -e $(PWD)/$<

./が使えないので、環境変数PWDを見るようにした。

で、使ってみた。

  • 画面外の処理はしてないのでちょっとおかしい。
  • xy座標だとわかりにくかった。行、列で使うべし。
  • nじゃないので、日本語は扱えない。
  • 日本語対応でなければ案外簡単にエディタが作れるかもしれない。スバラシイ!

楽しすぎ。

参考

  • Linuxプログラミング第2版 第6章
    • 端末制御がやたら詳しい。
  • manはncurses,curs_xxにある。
    • (n)curses共通で書いてあるっぽい。