Tôi đã viết nó cho bạn; nó không có thử nghiệm kỹ lưỡng, nhưng nó dường như làm những gì bạn tìm kiếm.
Lý do đằng sau nó là lặp qua từng ký tự đơn trong văn bản. Nếu ký tự bằng với ký tự viết hoa, hãy nối nó vào chuỗi trả về trong chữ hoa. Nếu không, hãy thêm nó vào dạng chữ in hoa. Cuối cùng, xóa vùng và chèn chuỗi trả về.
Nó hoạt động ngay trên một trang văn bản, mặc dù tôi rất thận trọng khi sử dụng nó trên các văn bản lớn (nên vẫn ổn).
(defun toggle-case()
(interactive)
(when (region-active-p)
(let ((i 0)
(return-string "")
(input (buffer-substring-no-properties (region-beginning) (region-end))))
(while (< i (- (region-end) (region-beginning)))
(let ((current-char (substring input i (+ i 1))))
(if (string= (substring input i (+ i 1)) (downcase (substring input i (+ i 1))))
(setq return-string
(concat return-string (upcase (substring input i (+ i 1)))))
(setq return-string
(concat return-string (downcase (substring input i (+ i 1)))))))
(setq i (+ i 1)))
(delete-region (region-beginning) (region-end))
(insert return-string))))
Có vẻ như một số câu trả lời đã cố gắng không thấy trường hợp sử dụng cho những gì bạn thực sự yêu cầu, do đó, họ giải quyết một vấn đề khác thay thế. Bạn có thể giải thích điều này sẽ hữu ích ở đâu, nếu chỉ cho vui chơi của chúng tôi? – tripleee
Điều này có thể không quá phổ biến, nhưng tôi đã chuyển trường hợp do nhầm lẫn (thiết bị đầu cuối và không phải thiết bị đầu cuối trong một tệp ngữ pháp) và nghĩ rằng có thể có một lệnh để đảo ngược chúng. Có thể xảy ra có thể với đánh dấu và các giá trị và các trường hợp tương tự. Tôi đang suy nghĩ bây giờ nếu có một lệnh như vậy, nó có thể được sử dụng cho cả upcase và downcase. –