2010-04-15 136 views

回答

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

這個問題似乎是關於隱藏光標,而不是隱藏用戶輸入。 – 2012-03-10 21:55:19

4

如果您應該能夠發送以下escape codes您使用支持ANSI格式的終端:

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

我知道這已經過了幾年了,但你是從哪裏得到這個命令的?在其他轉義碼中是否有鏈接? – Cybrix 2011-08-23 23:04:08

+0

是點擊轉義碼鏈接。 – mjh2007 2011-08-24 02:39:33

+2

除非沒有其他選擇,否則不要對終端控制代碼進行硬編碼。使用ncurses查找當前'$ TERM'值的適當代碼,除非由於某種原因不能使用ncurses。 – 2012-03-10 21:54:36

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。 – 2012-03-10 21:53:02

+3

我同意ncursrs會是最好的,但如果由於某種原因您無法訪問它,這對於某些情況可能是「足夠好」的解決方案。 – joesdiner 2012-03-11 01:51:31