Tôi đang cố gắng để lấy tọa độ của con trỏ vào một thiết bị đầu cuối vt100 sử dụng đoạn mã sau:Đọc Device Status Report ANSI dãy thoát trả lời
void getCursor(int* x, int* y) {
printf("\033[6n");
scanf("\033[%d;%dR", x, y);
}
Tôi đang sử dụng chuỗi ANSI thoát sau:
Device Status Report - ESC [6n
báo cáo vị trí con trỏ đến các ứng dụng như (như thể gõ bằng bàn phím) ESC [n; mR, trong đó n là hàng và m là cột.
mã biên dịch và trình tự ANSI được gửi đi, nhưng, khi nhận được nó, nhà ga in các ^[[x;yR
chuỗi các stdout
thay vì stdin
làm cho nó imposible cho tôi để lấy nó ra khỏi chương trình:
Rõ ràng, chuỗi được chỉ định cho chương trình, vì vậy, tôi phải làm điều gì đó không chính xác. Có ai biết nó là gì không?
Không có cách nào để làm cho lệnh ANSI không ghi ra '^ [[x; yR' cho thiết bị đầu cuối không? Tôi muốn âm thầm lấy các tọa độ mà không có bất kỳ thay đổi có thể nhìn thấy màn hình thiết bị đầu cuối. Nhưng điều này ghi vào thiết bị đầu cuối (không mong muốn khi tạo một GUI văn bản) và do đó thay đổi tọa độ của con trỏ (mà làm cho nó hoàn toàn vô dụng). – Witiko
Đây là lý do tại sao lời nguyền (và ncurses) tồn tại, do đó bạn không phải lo lắng về tất cả các chi tiết này. – Craig
Chắc chắn, nhưng ncurses là bloatware hoàn toàn. Đó là lý do tại sao tôi đang viết một chuỗi ANSI escape sequences của riêng mình, nó chỉ hỗ trợ VT100. Nhưng có, có vẻ như tôi sẽ chỉ cần phải dl ncurses và cố gắng đảo ngược-kỹ sư nó để tìm giải pháp của nó cho vấn đề này. – Witiko