Tôi có thể cho phép chấm câu để chạy qua cột điền không?


12

Trong kiểu chữ, có một thực hành gọi là 'nhô ra' (hoặc dấu chấm câu ) cho phép các biểu tượng nhất định treo ở cuối lề:

nhô ra

Tôi muốn làm điều tương tự cho các tài liệu văn bản của tôi.

Tôi có thể thay đổi fill-paragraph(và bạn bè không?) Để bỏ qua dấu chấm câu cuối ( .?!:;,'"-) khi nó điền vào đoạn văn?


Tôi không chắc liệu bạn có thực sự có thể gọi phần nhô ra (sự dịch chuyển tinh tế của dấu chấm câu) của văn bản hợp lý có thể so sánh với việc bỏ qua dấu chấm câu khi văn bản đóng gói cứng (không mặc định văn bản theo mặc định, làm cho hiệu ứng về cơ bản là vô hình). Có lẽ bạn muốn thêm rằng điều này áp dụng cho biến thể hợp lý của fill-paragraph?
wasamasa

@wasamasa Protrusion vẫn tồn tại để xóa các khối văn bản bên trái.
Sean Allred

Có áp dụng cho cạnh trái của văn bản không?
wasamasa

@wasamasa Trừ khi bạn giao dịch với một ngôn ngữ và trình soạn thảo RTL (trong khi được hỗ trợ, tôi cảm thấy không thuộc phạm vi), điều đó không có ý nghĩa. Nếu bạn có một khối bên phải lộn xộn và bạn 'hết phòng' ở lề trái (tức là cột 0), bạn không thể đặt chính xác dấu câu trong cột -1. (Tôi cho rằng bạn có thể chuyển lề phải sang (1+ cột điền), nhưng điều đó sẽ thay đổi cách điền và bạn có thể bị cuốn vào vòng lặp.)
Sean Allred

1
@wasamasa Về mặt thực hiện: chưa hoàn thành. nhảy đến cột điền. nếu điểm đang nhìn vào một ký tự dấu chấm câu và sau đó khoảng trắng, bỏ qua về phía trước. khác nếu ở giữa một từ, bỏ qua lạc hậu. dòng mới, lặp lại.
Sean Allred

Câu trả lời:


2

Aha, tôi có giải pháp! Đặt cái này ở đâu đó trong tập tin .emacs/ của bạn .emacs.d/init.el:

(define-advice current-fill-column (:filter-return (rtn) protrusion)
  "Advice to allow hanging punctuation when filling text."
  ;; Get the character after the proposed cutoff point
  (let ((end-char (char-after (1+ rtn))))
    (if (and end-char
             ;; Check if character is in the “punctuation” syntax table…
             (or (eq (char-syntax end-char) ?.)
                 ;; …or is any of these characters (feel free to add more)
                 (memq end-char (string-to-list ".,!?;:-"))))
        ;; If so, return the original value, plus one.
        (1+ rtn)
      ;; Otherwise, do nothing and return the original value.
      rtn)))

Tôi đã thử nghiệm điều này với fill-paragraph, và nó sẽ hoạt động cho tất cả các hàm điền (vì tất cả chúng đều sử dụng current-fill-columnkhi xử lý từng dòng). Tôi hy vọng bạn thích nó! 😇

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.