API đồ họa của thiết bị đầu cuối là gì?


8

Làm thế nào một số chương trình nhất định có thể đặt màu nền và phông chữ, viết các ký tự vào cùng một vị trí trên màn hình (ví dụ: hàng thứ ba, cột thứ năm) nhiều lần?

Một số ví dụ là thanh tiến trình được hiển thị bởi curl google.com > a, một số màn hình cài đặt và gần như bất kỳ trình soạn thảo văn bản nào.

Câu trả lời:


5

Những gì bạn đang hỏi về thực sự không phải là một API đồ họa, nó chỉ là các ký tự điều khiển đầu cuối.

Có rất nhiều lịch sử đằng sau nó, nhưng các thiết bị đầu cuối ngày trước là máy Teletype . Về cơ bản là một máy đánh chữ với giấy theo dõi được kết nối với máy tính có kết nối nối tiếp. Nhập một ký tự sẽ gửi giá trị nhị phân đó đến máy tính (cũng như nhập nó trên trang). Máy tính sẽ in lại các ký tự dưới dạng đầu ra của bất cứ thứ gì bạn yêu cầu.

Các ký tự đặc biệt được sử dụng để điều khiển thiết bị đầu cuối (là nơi mà phím điều khiển xuất phát, nó dùng để sản xuất các ký tự đó). Ví dụ, ^Hhoặc ^?sẽ là một khoảng lùi, ^Mlà một trở về vận chuyển (di chuyển con trỏ đến đầu dòng) và ^Jlà một nguồn cấp dữ liệu (di chuyển trang lên một dòng). Một số mã điều khiển có một chuỗi thoát trong C (được chia sẻ bởi hầu hết các ngôn ngữ lập trình) để tạo các ký tự điều khiển. Các điều khiển được liệt kê trước đó sẽ là \b, \r, \ntương ứng.

Trình giả lập thiết bị đầu cuối mà bạn sử dụng ngày nay giống như phần mềm nghe có vẻ như là một máy teletype cũ. Theo một cách nào đó, gần như Unix vẫn nghĩ rằng bạn đang sử dụng một máy đánh chữ để giao tiếp với nó.

Trong trường hợp curl, nó viết toàn bộ một dòng sau đó gửi \r(trả về vận chuyển) đưa con trỏ đến đầu dòng sau đó viết một dòng khác. Vì nguồn cấp dữ liệu không được gửi, nó tiếp tục ghi trên cùng một dòng trên màn hình.

Đây là một cái gì đó bạn có thể cố gắng chứng minh điều này:

echo -n  "First" ; sleep 5 ; echo -en "\rSecond\n"

Bạn sẽ thấy từ "Đầu tiên" được in (nhưng không có dòng mới nào được gửi). 5 giây sau nó sẽ được thay thế bằng từ "Thứ hai" và một dòng mới được gửi. Bạn có thể lặp lại mô hình này vô thời hạn. Hãy thử tự thêm "Thứ ba", bạn sẽ thấy điều gì đó mà bạn có thể không mong đợi ;-)

Để biết thêm thông tin về những điều này và các nhân vật điều khiển khác xem ascii(7)hướng dẫn.



1

Câu hỏi đó thực sự là một số câu hỏi và "ký tự điều khiển" chỉ giải quyết một phần nhỏ của câu hỏi, ví dụ: thanh tiến trình cho curl. Tổng quát hơn, đây là những tính năng phổ biến của thiết bị đầu cuối (và trình giả lập thiết bị đầu cuối).

Hầu hết các tính năng phổ biến này được tiêu chuẩn hóa trong ECMA-48: Chức năng điều khiển cho các bộ ký tự được mã hóa . Tuy nhiên, các tính năng khác thì không . Chúng được xác định theo thực hiện.

ECMA-48 đề cập đến các chức năng điều khiển . Điều đó bao gồm các ký tự điều khiểncác chuỗi điều khiển (thường được gọi là các chuỗi thoát, các chuỗi ANSI, v.v.).

Một số ký tự điều khiển được sử dụng cho các hoạt động đơn giản , ví dụ:

  • di chuyển con trỏ đến cột trước đó trên cùng một hàng
  • di chuyển con trỏ đến cột đầu tiên trên cùng một hàng
  • di chuyển con trỏ đến điểm dừng tiếp theo trên cùng một hàng
  • di chuyển con trỏ đến hàng tiếp theo (và cuộn màn hình nếu ở hàng cuối cùng)

Thanh tiến trình curlđược xây dựng bằng các thao tác đơn giản này. Nhưng nhân vật điều khiển chỉ có thể làm rất nhiều, không hơn. Trình tự điều khiển làm nhiều hơn, ví dụ,

  • di chuyển con trỏ đến bất kỳ hàng / cột nào trên màn hình
  • di chuyển con trỏ đến bất kỳ hàng nào trong cùng một cột trên màn hình
  • di chuyển con trỏ đến bất kỳ cột nào trong cùng một hàng trên màn hình
  • đặt các điểm dừng tab tại bất kỳ cột nào trên màn hình
  • di chuyển con trỏ đến dòng trước
  • làm cho màn hình cuộn lên hoặc xuống mà không di chuyển con trỏ

Quá nhiều cho sự tương đồng giữa đơn giản / phức tạp. Trình tự điều khiển cũng được sử dụng để thay đổi màu văn bản và nền, xóa văn bản khỏi màn hình, hiển thị văn bản trong video đảo ngược (hoặc in đậm, gạch chân, nhấp nháy).

Các chương trình vẽ chuỗi điều khiển sử dụng thanh tiến trình video đảo ngược (hoặc được tô màu) .

Mặc dù các chuỗi điều khiển có thể làm nhiều hơn, nhưng chúng chỉ có thể làm những việc cụ thể. Đặt chúng lại với nhau để làm cho trình soạn thảo văn bản, màn hình cài đặt (và các chương trình vẽ các thanh tiến trình được tô màu) trở nên phức tạp. Một số trong đó được làm đơn giản hơn bằng cách sử dụng các thư viện biết về những điều này. Ban đầu, chúng tôi có termcap (và cơ sở dữ liệu của vài trăm loại thiết bị đầu cuối), được mở rộng thành terminfo (và cơ sở dữ liệu của khoảng một nghìn loại thiết bị đầu cuối).

Ngay cả với tiêu chuẩn hóa, có hàng tá mô tả thiết bị đầu cuối mà bạn có thể sử dụng . Vì vậy, chúng tôi tiếp tục sử dụng các thư viện cho tất cả trừ những ứng dụng tầm thường nhất. Một là ncurses ("new-curses"), một cái khác là tiếng lóng (về mặt kỹ thuật là "S-Lang").

Đọc thêm:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.