Cấu đặt phím tắt xóa màn hình trong Python IDLE

Để tích hợp chức năng xóa màn hình (Clear Screen) và gán phím tắt Ctrl+L cho môi trường phát triển tích hợp IDLE của Python, người dùng cần thực hiện việc cài đặt một tiện ích mở rộng (extension) và chỉnh sửa file cấu hình hệ thống. Quy trình này bao gồm việc tạo một file script mới và đăng ký nó với file cấu hình của IDLE.

Bước 1: Tạo tiện ích mở rộng

Điều hướng đến thư mục cài đặt Python, cụ thể là đường dẫn Python\Lib\idlelib. Tại đây, hãy tạo một file mới tên là ClearScreenExt.py. File này sẽ chứa logic xử lý việc xóa nội dung trên cửa sổ Shell đồng thời hỗ trợ tính năng hoàn tác (Undo).

"""
Tiện ích mở rộng Xóa Cửa sổ (Clear Screen Extension)
Phiên bản: 1.0

Tác giả: Dev Team
Mô tả: Cung cấp tùy chọn xóa màn hình trong menu Options.
Phím tắt mặc định: Ctrl+L
"""

class ShellCleaner:
    
    menudefs = [
        ('options', [
            ('Clear Shell Window', '<>'),
        ]),
    ]

    def __init__(self, editwin):
        self.editor = editwin
        self.text_area = self.editor.text
        
        # Gán sự kiện cho phím tắt và lệnh Undo
        self.text_area.bind("<<do-clear>>", self.perform_clear)
        self.text_area.bind("<<undo>>", self.handle_undo)

    def handle_undo(self, event):
        """
        Xử lý sự kiện Undo để đảm bảo con trỏ và mark được khôi phục đúng vị trí.
        """
        text = self.text_area
        
        # Lưu vị trí hiện tại của iomark và insert
        text.mark_set("iomark_backup", "iomark")
        text.mark_set("insert_backup", "insert")
        
        # Thực hiện undo mặc định
        self.editor.undo.undo_event(event)

        # Khôi phục lại vị trí iomark và insert
        text.mark_set("iomark", "iomark_backup")
        text.mark_set("insert", "insert_backup")
        text.mark_unset("iomark_backup")
        text.mark_unset("insert_backup")

    def perform_clear(self, event):
        """
        Thực hiện xóa nội dung màn hình nhưng vẫn giữ lại khả năng Undo.
        """
        text = self.text_area
        
        # Bắt đầu khối undo
        text.undo_block_start()
        
        # Đánh dấu vị trí hiện tại (iomark) để phân biệt input và output
        text.mark_set("iomark_backup", "iomark")
        text.mark_set("iomark", 1.0)
        
        # Xóa nội dung từ đầu dòng đến vị trí iomark cũ
        text.delete(1.0, "iomark_backup linestart")
        
        # Đặt lại iomark về vị trí cũ
        text.mark_set("iomark", "iomark_backup")
        text.mark_unset("iomark_backup")
        
        # Kết thúc khối undo
        text.undo_block_stop()
        
        # Đảm bảo con trỏ không nằm ở vùng đã bị xóa
        if self.text_area.compare('insert', '<', 'iomark'):
            self.text_area.mark_set('insert', 'end-1c')
            
        # Cập nhật trạng thái dòng/cột trên thanh trạng thái
        self.editor.set_line_and_column()

Bước 2: Cập nhật file cấu hình

Tại cùng thư mục idlelib, tìm và mở file config-extensions.def bằng trình soạn thảo văn bản. Cuộn đến phần cuối của file và thêm các đoạn cấu hình sau để kích hoạt tiện ích vừa tạo:

[ShellCleaner]
enable=1
enable_editor=0
enable_shell=1
[ShellCleaner_cfgBindings]
do-clear=<Control-Key-l>

Bước 3: Kích hoạt và sử dụng

Sau khi lưu lại các thay đổi ở cả hai file trên, hãy đóng hoàn toàn ứng dụng Python IDLE và khởi động lại. Lúc này, trong menu Options, bạn sẽ thấy xuất hiện dòng lệnh Clear Shell Window. Bây giờ, bạn có thể nhấn tổ hợp phím Ctrl+L để xóa sạch các dòng lệnh và kết quả đầu ra trên cửa sổ Shell một cách nhanh chóng mà không cần nhập thủ công các lệnh phụ trợ.

Đăng vào ngày 26 tháng 8 lúc 13:10