2010-04-15 21 views

risposta

8

Questo è qualcosa che la biblioteca ncurses può fare per voi.

La funzione curs_set() può rendere invisibile il cursore.

3

Se questa è utilizzando l'applicazione 'telnet', allora la vostra applicazione dovrebbe inviare 'IAC sarà Echo' per disabilitare l'eco dalla loro parte remota. Questo è utile per inserire password o se la tua app sta facendo eco.

#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)); 

O

write(sock, TEL_IAC TEL_WILL TEL_ECHO, 3); 

Spero che questo aiuti.

+2

La questione sembra essere di nascondere il cursore, non nascondendo input dell'utente. –

4

Se il terminale si utilizza supporti formato ANSI si dovrebbe essere in grado di inviare il seguente escape codes:

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

So che questo ha pochi anni ma dove hai ottenuto quel comando? C'è un collegamento con altri codici di escape in? – Cybrix

+0

Sì fare clic sul collegamento per i codici di escape. – mjh2007

+2

Non codificare i codici di controllo del terminale a meno che non si abbia altra scelta. Usa ncurses per cercare i codici appropriati per il valore corrente '$ TERM' a meno che tu non possa usare ncurses per qualche motivo. –

9

di estendere la risposta di mjh2007, il seguente c/C++ codice implementerà l'invio dei codici di escape per la terminale, ed è leggermente più leggibile rispetto ai numeri esadecimali grezzi.

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

Non codificare i codici di controllo del terminale a meno che non si abbia altra scelta. Usa ncurses per cercare i codici appropriati per il valore corrente '$ TERM' a meno che tu non possa usare ncurses per qualche motivo. –

+3

Concordo sul fatto che ncursrs sarebbe il migliore, ma se per qualche motivo non si ha accesso a ciò, questa potrebbe essere una soluzione "abbastanza buona" per alcuni casi. – joesdiner