2010-04-15 38 views

Trả lời

8

Đây là thứ mà thư viện ncurses có thể làm cho bạn.

Chức năng curs_set() có thể làm cho con trỏ ẩn đi.

3

Nếu điều này đang sử dụng ứng dụng 'telnet' thì ứng dụng của bạn sẽ gửi 'IAC SILL ECHO' để vô hiệu hóa lặp lại ở phía xa của chúng. Điều này rất hữu ích cho việc nhập mật khẩu hoặc nếu ứng dụng của bạn đang lặp lại.

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

Hoặc

write(sock, TEL_IAC TEL_WILL TEL_ECHO, 3); 

Hope this helps.

+2

Câu hỏi có vẻ là ẩn con trỏ, không ẩn đầu vào của người dùng. –

4

Nếu nhà ga bạn đang sử dụng hỗ trợ định dạng ANSI bạn sẽ có thể gửi sau escape codes:

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

Tôi biết đây là một vài năm tuổi nhưng bạn đã nhận được lệnh đó ở đâu? Có liên kết nào với các mã thoát khác không? – Cybrix

+0

Có nhấp vào liên kết để tìm các mã thoát. – mjh2007

+2

Không mã hóa cứng các mã điều khiển đầu cuối trừ khi bạn không có lựa chọn nào khác. Sử dụng ncurses để tìm kiếm các mã thích hợp cho giá trị '$ TERM' hiện tại trừ khi bạn không thể sử dụng ncurses vì ​​một lý do nào đó. –

9

Để mở rộng khi câu trả lời mjh2007, sự/C++ mã c sau đây sẽ thực hiện gửi các mã thoát ra thiết bị đầu cuối và có thể đọc được nhiều hơn số hex thô.

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

Không mã hóa cứng mã kiểm soát thiết bị đầu cuối trừ khi bạn không có lựa chọn nào khác. Sử dụng ncurses để tìm kiếm các mã thích hợp cho giá trị '$ TERM' hiện tại trừ khi bạn không thể sử dụng ncurses vì ​​một lý do nào đó. –

+3

Tôi đồng ý rằng ncursrs sẽ là tốt nhất, nhưng nếu vì một số lý do bạn không có quyền truy cập vào đó, điều này có thể là một giải pháp "đủ tốt" cho một số trường hợp. – joesdiner

Các vấn đề liên quan