2016-12-16 3 views
-1

Я пытаюсь в do текстовый редактор для C.Получить координаты клавиатуры (вверх, вниз, влево, вправо) для Linux в C

Мне нужно получить координаты клавиатуры.

Я добавил связанный список.

Моя система Linux не поддерживает библиотеку windows.h.

Как я могу их получить?

Существует ли эквивалентная библиотека или функция для Linux?

+1

вы должны посмотреть на 'curses' библиотеки? (Или 'ncurses') –

+0

Да ı найти getc getch funch. Но они не использовали их для координат. – imnew

+0

Что значит «координаты»? –

ответ

0

Вот пример использования ncurses для записи на экран в определенных положениях (с помощью «mvaddstr»), считывание нажатий клавиш с помощью «getch» ​​и интерпретация кодов клавиш (включая функциональные клавиши, UP, DOWN и т. Д.) ... Предполагая, что вы установили Ncurses в вашей системе (libncurses5-Dev на Ubuntu), то вы скомпилировать этот источник с «-lncurses»

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h>     /* for sleep() */ 
#include <ctype.h> 
#include <curses.h> 
#include <string.h> 

char * intprtkey(int ch); 

int main(void) { 

    WINDOW * mainwin; 
    int  ch; 

    /* Initialize ncurses */ 

    if ((mainwin = initscr()) == NULL) { 
    fprintf(stderr, "Error initialising ncurses.\n"); 
    exit(EXIT_FAILURE); 
    } 

    noecho();     /* Turn off key echoing     */ 
    keypad(mainwin, TRUE);  /* Enable the keypad for non-char keys */ 

    mvaddstr(13, 33, "Hello, world!"); 
    mvaddstr(14, 33, "Press F2 to Exit."); 
    refresh(); 

    /* Loop until user presses 'F2' */ 

    ch = getch(); 
    while (strcmp(intprtkey(ch), "Function key 2")) 
    { 
    /* 
    * Delete the old response line, 
    * and print a new one 
    */ 

    mvprintw(17, 30, " "); 
    deleteln(); 
    mvprintw(17, 33, "You pressed: 0x%x (%s)", ch, intprtkey(ch)); 
    refresh(); 
     ch = getch(); 
    } 
    sleep(1); 

    delwin(mainwin); 
    endwin(); 
    refresh(); 

    return 0; 
} 

/* Struct to hold keycode/keyname information */ 

struct keydesc { 
    int code; 
    char name[20]; 
}; 


/* Returns a string describing a character passed to it */ 

char * intprtkey(int ch) { 

    /* Define a selection of keys we will handle */ 

    static struct keydesc keys[] = { { KEY_UP,  "Up arrow"  }, 
        { KEY_DOWN,  "Down arrow"  }, 
        { KEY_LEFT,  "Left arrow"  }, 
        { KEY_RIGHT,  "Right arrow"  }, 
        { KEY_HOME,  "Home"   }, 
        { KEY_END,  "End"    }, 
        { KEY_BACKSPACE, "Backspace"  }, 
        { KEY_IC,  "Insert"   }, 
        { KEY_DC,  "Delete"   }, 
        { KEY_NPAGE,  "Page down"  }, 
        { KEY_ENTER,  "Enter"   }, 
        { KEY_PPAGE,  "Page up"   }, 
        { KEY_F(1),  "Function key 1" }, 
        { KEY_F(2),  "Function key 2" }, 
        { KEY_F(3),  "Function key 3" }, 
        { KEY_F(4),  "Function key 4" }, 
        { KEY_F(5),  "Function key 5" }, 
        { KEY_F(6),  "Function key 6" }, 
        { KEY_F(7),  "Function key 7" }, 
        { KEY_F(8),  "Function key 8" }, 
        { KEY_F(9),  "Function key 9" }, 
        { KEY_F(10),  "Function key 10" }, 
        { KEY_F(11),  "Function key 11" }, 
        { KEY_F(12),  "Function key 12" }, 
        { -1,   "<unsupported>" } 
    }; 
    static char keych[2] = {0}; 

    if (isprint(ch) && !(ch & KEY_CODE_YES)) { 

    /* If a printable character */ 

    keych[0] = ch; 
    return keych; 
    } 
    else { 

    /* Non-printable, so loop through our array of structs */ 

    int n = 0; 

    do { 
     if (keys[n].code == ch) 
     return keys[n].name; 
     n++; 
    } while (keys[n].code != -1); 

    return keys[n].name; 
    }  

    return NULL;  /* We shouldn't get here */ 
} 
+0

это работа спасибо – imnew

Смежные вопросы