Tôi đang viết một bộ lọc (trong một đường ống dành cho đầu ra đầu cuối) đôi khi cần "ghi đè lên" một dòng vừa mới xảy ra. Nó hoạt động bằng cách truyền stdin đến stdout character-by-ký tự cho đến khi đạt được \n
và sau đó gọi hành vi đặc biệt. Vấn đề của tôi liên quan đến cách quay lại đầu dòng.Trả về con trỏ thiết bị đầu cuối để bắt đầu dòng với gói được kích hoạt
Điều đầu tiên tôi nghĩ đến là sử dụng \r
hoặc trình tự ANSI \033[1G
. Tuy nhiên, nếu đường dây đủ dài để quấn trên thiết bị đầu cuối (và do đó làm cho nó cuộn), chúng sẽ chỉ di chuyển con trỏ trở lại dòng vật lý hiện tại.
Ý tưởng thứ hai của tôi là theo dõi độ dài của dòng (số ký tự được chuyển từ trước đó), và sau đó echo \b
nhiều lần. Tuy nhiên, điều đó sai nếu dòng chứa các ký tự điều khiển hoặc các chuỗi thoát (và có thể là Unicode?).
Thiếu tìm kiếm tất cả các chuỗi đặc biệt và sử dụng điều này để điều chỉnh số ký tự của tôi, có cách nào đơn giản để đạt được điều này không?
Cảm ơn bạn đã đề xuất! Thật không may có một vài lý do tại sao tôi không nghĩ rằng sẽ làm việc cho tôi: * Tôi vẫn cần phải theo dõi trình tự trường hợp đặc biệt để biết làm thế nào gần với cạnh Tôi * Tôi có thể không phải là điều cuối cùng trong đường ống Đối với ngữ cảnh; bộ lọc của tôi phù hợp với mẫu và các chuỗi phù hợp "viết lại" được bao quanh trong chuỗi thoát màu. Tôi không thể sử dụng 'fgets()' và hoạt động trên toàn bộ chuỗi tại một thời điểm, vì một số đầu vào của tôi sẽ tạo ra đầu ra "động" (ví dụ: trạng thái tiến trình tăng) không xuất ra '\ n' trong một thời gian. –