我有一個打開的遠程終端套接字。使用「Force telnet client into character mode」的答案,我能夠將該終端置於字符模式。在遠程終端上隱藏光標
我的問題是,如何使用這種方法隱藏遠程終端中的光標?
我有一個打開的遠程終端套接字。使用「Force telnet client into character mode」的答案,我能夠將該終端置於字符模式。在遠程終端上隱藏光標
我的問題是,如何使用這種方法隱藏遠程終端中的光標?
這是ncurses庫可以爲您做的事情。
curs_set()
函數可以使光標不可見。
如果這是使用'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);
希望這有助於。
如果您應該能夠發送以下escape codes您使用支持ANSI格式的終端:
Hide the cursor: 0x9B 0x3F 0x32 0x35 0x6C Show the cursor: 0x9B 0x3F 0x32 0x35 0x68
要在mjh2007的回答展開,以下的C/C++代碼將實現發送轉義碼到終端,並且比原始的十六進制數字更易讀。
void showCursor(bool show) const {
#define CSI "\e["
if (show) {
fputs(CSI "?25h", stdout);
}
else {
fputs(CSI "?25l", stdout);
}
#undef CSI
}
除非沒有其他選擇,否則不要對終端控制代碼進行硬編碼。使用ncurses查找當前'$ TERM'值的適當代碼,除非由於某種原因不能使用ncurses。 – 2012-03-10 21:53:02
我同意ncursrs會是最好的,但如果由於某種原因您無法訪問它,這對於某些情況可能是「足夠好」的解決方案。 – joesdiner 2012-03-11 01:51:31
這個問題似乎是關於隱藏光標,而不是隱藏用戶輸入。 – 2012-03-10 21:55:19