29520


vim、less、manなどの、ターミナルの全域を使って表示制御を行っているアプリのことを一般的に何と呼ぶのでしょうか？

同じようなアプリを作るために情報収集したいのですが、そもそもどんな検索ワードで検索すればいいのかわかりません。


CC BY-SA 3.0
2016-10-13T04:41:23.613
29512
2016-10-14T15:00:37.320
18862
question
linux
ターミナル全域を使ったアプリの呼び方


「TUI」（Text User Interface）が近いかと思います。lessをTUIと呼ぶかどうかは微妙ですが。


CC BY-SA 3.0
2016-10-13T06:27:51.860
29519
2016-10-13T06:27:51.860
4010
29512
answer


vim/viはスクリーンエディタ、more/lessはページャーと呼ばれてると思います。

情報収集が目的であれば terminfo termcap curses ncurses あたりを調べてみると良いかと思います。


CC BY-SA 3.0
2016-10-13T06:57:58.597
29520
2016-10-13T06:57:58.597
5008
29512
answer


「俺テキストエディタ」を作ろうと思ったものの、途中で放置されたままになっているコードがありましたので、参考になれば。

[code]

    /*
    
     ncurses example
    
     $ gcc -lncurses main.c
    
    */
    
    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ncurses.h>
    
    int width;
    int height;
    
    void siginthandler(int param)
    {
    }
    
    void print(int x, int y, char const *text)
    {
        move(y, x);
        printw("%s", text);
    }
    
    void print_invert_line(int y, char const *text)
    {
        char *buf = (char *)malloc(width + 1);
    
        int n = strlen(text);
        if (n > width) n = width;
        memcpy(buf, text, n);
        while (n < width) {
            buf[n] = ' ';
            n++;
        }
        buf[n] = 0;
    
        attron(A_REVERSE);
        print(0, y, buf);
        attroff(A_REVERSE);
    
        free(buf);
    }
    
    void print_title_text(char const *text)
    {
        print_invert_line(0, text);
    }
    
    void print_status_text(char const *text)
    {
        print_invert_line(height - 1, text);
    }
    
    int main(int argc, char **argv)
    {
        int x = 0;
        int y = 1;
        signal(SIGINT, siginthandler);
        WINDOW *win = initscr();
        raw();
        nonl();
        noecho();
        keypad(win, false);
        width = getmaxx(win);
        height = getmaxy(win);
        print_title_text("ncurses example");
        print_status_text("press enter to exit.");
        while (1) {
            refresh();
            int c = wgetch(win);
            if (c == 0x0d) {
                break;
            }
            char tmp[100];
            sprintf(tmp, "(0x%02x)", c);
            print(x, y, tmp);
            x = x + strlen(tmp);
            y += x / width;
            x %= width;
        }
        endwin();
        return 0;
    }
    
[/code]


CC BY-SA 3.0
2016-10-14T15:00:37.320
29567
2016-10-14T15:00:37.320
3337
29512
answer