2010-04-15 3 views
7

У меня есть открытый разъем для удаленного терминала. Используя ответ на «Force telnet client into character mode», я смог поместить этот терминал в режим символов.Скрыть курсор на удаленном терминале

Мой вопрос: как скрыть курсор в удаленном терминале с помощью этого метода?

ответ

8

Это что-то, что может сделать для вас библиотека ncurses.

Функция curs_set() может сделать курсор невидимым.

3

Если это приложение «telnet», ваше приложение должно отправить «IAC WILL ECHO», чтобы отключить эхо на их удаленной стороне. Это полезно для ввода паролей или если ваше приложение выполняет эхо.

#define TEL_IAC "\377" 
#define TEL_WILL "\373" 
#define TEL_ECHO "\001" 

char buf[4]; 
snprintf(buf, sizeof(buf), "%c%c%c" TEL_IAC, TEL_WILL, TEL_ECHO); 
write(sock, buf, sizeof(buf)); 

Или

write(sock, TEL_IAC TEL_WILL TEL_ECHO, 3); 

Надеется, что это помогает.

+2

Вопрос, похоже, заключается в том, чтобы скрывать курсор, а не скрывать ввод пользователя. –

4

Если терминал, который вы используете, поддерживает формат ANSI, вы должны быть в состоянии послать следующие escape codes:

 
Hide the cursor: 0x9B 0x3F 0x32 0x35 0x6C 
Show the cursor: 0x9B 0x3F 0x32 0x35 0x68 
+0

Я знаю, что это несколько лет, но откуда вы взяли эту команду? Есть ли связь с другими escape-кодами? – Cybrix

+0

Да, нажмите ссылку для кодов выхода. – mjh2007

+2

Не производите жесткого кода управляющих кодов терминала, если у вас нет другого выбора. Используйте ncurses для поиска соответствующих кодов для текущего значения $ TERM, если вы не можете использовать ncurses по какой-либо причине. –

9

Чтобы расширить на ответ mjh2007, имеет место следующее C/C++ код будет осуществлять отправку кодов эвакуации в терминал и немного читабельнее, чем шестнадцатеричные номера.

void showCursor(bool show) const { 
#define CSI "\e[" 
    if (show) { 
    fputs(CSI "?25h", stdout); 
    } 
    else { 
    fputs(CSI "?25l", stdout); 
    } 
#undef CSI 
} 
+1

Не кодируйте коды управления терминалом, если у вас нет другого выбора. Используйте ncurses для поиска соответствующих кодов для текущего значения $ TERM, если вы не можете использовать ncurses по какой-либо причине. –

+3

Я согласен с тем, что ncursrs будет лучше, но если по какой-то причине у вас нет доступа к этому, это может быть «достаточно хорошим» решением для некоторых случаев. – joesdiner

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