3 điểm bởi GN⁺ 2024-12-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Gần đây tôi nhận ra rằng mọi thứ diễn ra trong terminal đều là sự kết hợp của bốn yếu tố sau

    • vai trò của hệ điều hành
    • vai trò của shell
    • vai trò của terminal emulator
    • vai trò của chương trình đang chạy (top, vim, cat v.v.)
  • Các chương trình hoạt động nhất quán một cách đáng ngạc nhiên

    • POSIX chủ yếu quy định cách terminal emulator, OS và shell hoạt động, nhưng không có tiêu chuẩn nào cho cách các chương trình riêng lẻ nên hoạt động
    • Tuy vậy, các chương trình terminal nhìn chung vẫn hoạt động theo những cách khá nhất quán
  • Những quy tắc này mang tính mô tả chứ không mang tính quy phạm

    • Mục đích không phải là thuyết phục tác giả của các chương trình terminal rằng họ phải tuân theo các quy tắc này
    • Nhưng việc biết những quy tắc mặc định có thể kỳ vọng khi dùng một chương trình terminal mới là điều hữu ích
  • Đôi khi không rõ trách nhiệm thuộc về chương trình nào

    • Ví dụ, việc nhấn Ctrl-D để thoát REPL là thứ mà chương trình phải tự triển khai một cách tường minh

Quy tắc 1: Chương trình không tương tác nên thoát khi nhấn Ctrl-C

  • Chương trình không tương tác mặc định sẽ thoát khi nhấn Ctrl-C
  • Trong các chương trình tương tác, Ctrl-C lại có vai trò khác

Quy tắc 2: TUI nên thoát khi nhấn q

  • Các chương trình TUI như less hay htop sẽ thoát khi nhấn q

Quy tắc 3: REPL nên thoát khi nhấn Ctrl-D trên dòng trống

  • Hầu hết REPL sẽ thoát khi nhấn Ctrl-D trên một dòng trống

Quy tắc 4: Không nên dùng quá 16 màu

  • Chương trình terminal hầu như không dùng các màu ngoài 16 màu ANSI cơ bản

Quy tắc 5: Nên hỗ trợ đại khái các key binding của readline

  • Phần lớn chương trình hỗ trợ các key binding của readline

Quy tắc 5.1: Ctrl-W nên xóa từ cuối cùng

  • Hầu như không có chương trình nào mà Ctrl-W lại không xóa từ cuối cùng

Quy tắc 6: Nên tắt màu khi ghi vào pipe

  • Phần lớn chương trình sẽ tắt màu khi ghi vào pipe

Quy tắc 7: - có nghĩa là stdin/stdout

  • Nếu truyền - thay cho tên tệp, chương trình sẽ đọc từ stdin hoặc ghi ra stdout

  • Phải mất thời gian để học những quy tắc này

    • Cần học quy tắc áp dụng ở đâu, nhận ra các ngoại lệ, và vô thức nắm bắt các mẫu
    • Việc viết rõ các quy tắc này ra có thể giúp người khác học nhanh hơn

1 bình luận

 
GN⁺ 2024-12-14
Ý kiến trên Hacker News
  • Cần tôn trọng màu tiền cảnh và màu nền mặc định của người dùng

    • Nếu sử dụng màu sắc, phải đảm bảo dễ đọc bất kể màu nền và màu tiền cảnh mặc định là gì
    • Không nên truyền đạt thông tin chỉ bằng màu sắc
    • Nên sử dụng emoji một cách thận trọng
    • Không nên để thông tin quan trọng bị cuốn mất trong phần đầu ra cuộn
    • Cần cung cấp thiết lập để người dùng có thể chọn màu sắc và các yếu tố trực quan
  • Khuyến nghị Command Line Interface Guidelines

    • Bao gồm các quy tắc như thoát bằng Ctrl-C, chấp nhận - cho stdin, vô hiệu hóa màu khi dùng pipe
  • Các quy tắc bổ sung cho công cụ dòng lệnh

    • Không nên giả định loại terminal cụ thể
    • Cần giả định có thể không có terminal
    • Nên tuân theo các quy ước phổ biến về cấu trúc tham số và đầu ra
    • Nên sử dụng mã thoát chuẩn trong sysexits.h
    • Nên bao gồm --help trong binary và trang hướng dẫn man
  • Thông tin về key binding readline/emacs

    • Trên macOS có thể dùng Ctrl-E, Ctrl-W, Ctrl-U
    • Có thể cài chương trình rlwrap để thêm khả năng chỉnh sửa dòng
  • Lời khuyên về việc dùng màu sắc

    • Không nên dùng quá 16 màu
    • Nên cho phép cấu hình màu sắc
  • Vấn đề xảy ra khi dùng Ctrl-D trong GHCi

    • Cần thoát bằng lệnh :q
  • Giải thích về việc coi ~ là thư mục home

    • Hoạt động trong shell nhưng không hoạt động trong POSIX API
  • Không nên để chương trình thêm tệp vào thư mục home

    • Cần tôn trọng XDG_CONFIG_HOME
  • Ý kiến về tính nhất quán của CLI

    • CLI nhất quán hơn GUI
    • Khó mang đặc tính này sang GUI
  • Tiến trình chạy lâu nên tải lại cấu hình khi nhận SIGHUP

  • Mẹo hữu ích khi kết nối SSH

    • Có thể dùng ~. để thoát phiên SSH