2011-07-06 24 views
29

Khi bạn nhập lệnh C-/, Emacs hoàn tác một số thay đổi gần đây của bạn đối với bộ đệm. Khi bạn nhập lại C-/, nó sẽ hoàn tác một đoạn công việc khác.Cách Emac xác định một đơn vị công việc để hoàn tác

Tôi đã đọc số Emacs manual entry on Undo nhưng thật mơ hồ về chính xác cách hoạt động của nó. Hướng dẫn sử dụng nói "Lệnh chèn ký tự liên tiếp thường được nhóm lại với nhau thành một bản ghi hoàn tác đơn" nhưng nó không giải thích cách nó quyết định số lệnh chèn ký tự cấu thành một nhóm. Số ký tự được đặt trong một nhóm có vẻ ngẫu nhiên.

Bất cứ ai có thể giải thích thuật toán Emacs sử dụng để nhóm các ký tự thành các bản ghi hoàn tác không?

Trả lời

33

Logic để đặt đường biên hoàn tác chủ yếu là trong self-insert-command được triển khai trong cmds.c. Bạn sẽ phải đọc mã cho toàn bộ câu chuyện, nhưng về cơ bản:

  • Miễn là bạn chỉ cần nhập ký tự, có một đường biên hoàn tác sau mỗi 20 ký tự bạn nhập.
  • Nhưng nếu bạn đưa ra lệnh chỉnh sửa khác (ví dụ: bạn giết một từ), điều này sẽ làm cho một đường biên hoàn tác được thêm ngay lập tức, đặt lại số ký tự.
  • Chèn "lông" nhất định (như được xác định bởi internal_self_insert) làm cho một ranh giới hoàn tác được thêm ngay lập tức và số ký tự cần được đặt lại. Đọc mã, có vẻ như đây là: (1) trong overwrite-mode, nếu bạn ghi đè một ký tự có ký tự có chiều rộng khác, ví dụ: gõ trên một tab; (2) nếu ký tự bạn chèn vào làm cho chữ viết tắt được mở rộng; (3) nếu ký tự bạn đã nhập gây ra auto-fill-mode để chèn thụt đầu dòng.
  • Ngoài ra, mọi lệnh chỉnh sửa quyết định sẽ là một ý tưởng hay để có ranh giới hoàn tác có thể yêu cầu bằng cách gọi undo-boundary. Điều này không làm cho số ký tự được đặt lại.
+0

Cảm ơn câu trả lời của bạn! –

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