Tôi đang triển khai một ứng dụng Java bao gồm ngăn xếp Hoàn tác / Làm lại. Tôi đã nhận thấy rằng một số ứng dụng (như TextEdit trên Mac OS X) cho phép bạn chọn "Hoàn tác nhập" từ Menu Chỉnh sửa sau khi nhập một số văn bản. Tôi cũng muốn triển khai loại điều đó vào ứng dụng của mình, nhưng tôi đang rất khó khăn trong việc tìm hướng dẫn về cách ứng xử.
Với một số thử nghiệm và lỗi, tôi đoán tốt nhất về cách hoạt động Hoàn tác Nhập văn bản của TextEdit là:
- Khi người dùng nhập một ký tự mới (hoặc gõ phím xóa), hãy hợp nhất nó vào mục Hoàn tác nhập trước đó nếu một mục nằm ở đầu ngăn xếp Hoàn tác, trừ khi một trong các tình huống sau xảy ra
- Luôn tạo một mục Hoàn tác nhập mới sau khi người dùng tiếp tục nhập sau ít nhất 15 giây không hoạt động
- Luôn tạo một mục Hoàn tác Nhập mới sau khi người dùng nhập trong một khoảng thời gian dài và một số điều kiện được đáp ứng (không thể biết liệu đây là dựa trên thời gian hay dựa trên số ký tự).
- Luôn tạo một mục Hoàn tác nhập mới khi bất kỳ văn bản nào được chọn và sau đó xóa hoặc ghi đè (chọn văn bản, không thực hiện thay đổi, sau đó quay lại điểm chèn ban đầu và tiếp tục nhập không kích hoạt điều này)
Trong thực tế, chiến lược của Apple dường như hoạt động (ít nhất là nó hoạt động với tôi khi tôi gõ), nhưng như đã lưu ý ở điểm cuối cùng, tôi thực sự không thể tìm ra quy tắc. Ngoài ra, có vẻ như các chương trình khác tuân theo các quy tắc khác nhau, chẳng hạn như Microsoft Word. Google đã không đưa ra một danh sách các quy tắc được xác định cho bất kỳ triển khai Hoàn tác Nhập nào và tôi không bắt gặp bất kỳ thực tiễn tốt nhất nào về cách thức hoạt động của nó. Vậy nó nên cư xử thế nào? Hay chỉ là tùy theo ý thích của lập trình viên?
EDIT: Chỉ cần làm rõ, tôi không quan tâm đến chi tiết thực hiện ngay bây giờ. Tôi đặc biệt tò mò về việc có hay không một tài liệu tham khảo có thẩm quyền (ví dụ: thực tiễn tốt nhất hoặc tài liệu giao diện người dùng) tồn tại mô tả điều này hoặc mô tả về cách triển khai trên nhiều sản phẩm.
124<delete>3
, sau đó hoàn tác và làm lại nó kết quả 123
. Tôi đoán lợi thế của việc này là nó dẫn đến trạng thái cuối cùng của văn bản, giống như gợi ý ở trên.