¿Puedo permitir que la puntuación pase la columna de relleno?


12

En la tipografía, hay una práctica llamada 'protrusión' (o puntuación de suspensión ) que permite que ciertos símbolos cuelguen del final del margen:

saliente

Me gustaría hacer lo mismo para mis documentos de texto.

¿Puedo cambiar fill-paragraph(¿y amigos?) Para ignorar la puntuación de fin de línea ( .?!:;,'"-) cuando llena el párrafo?


No estoy seguro de si realmente se puede llamar protrusión (desplazamiento sutil de la puntuación final) del texto justificado comparable a ignorar la puntuación final cuando se ajusta el texto (que no justifica el texto de forma predeterminada, haciendo que el efecto sea esencialmente invisible). ¿Quizás le gustaría agregar que esto se aplica a la variante justificada de fill-paragraph?
wasamasa

@wasamasa Protrusion todavía existe para los bloques de texto a ras de la izquierda.
Sean Allred

¿Se aplica al borde izquierdo del texto entonces?
wasamasa

@wasamasa A menos que esté lidiando con un lenguaje y editor RTL (que, aunque es compatible, creo que está fuera de alcance), no tiene sentido. Si tiene un bloque de descarga a la derecha y 'se queda sin espacio' en el margen izquierdo (es decir, la columna 0), no puede colocar exactamente la puntuación en la columna -1. (Supongo que podría cambiar el margen derecho a (1+ columna de relleno), pero eso cambiaría el relleno y podría quedar atrapado en un bucle.)
Sean Allred

1
@wasamasa En términos de implementación: sin completar. Saltar a la columna de relleno. si el punto está mirando un solo carácter de puntuación y luego espacios en blanco, salte hacia adelante. de lo contrario, si está en medio de una palabra, salte hacia atrás. nueva línea, repita.
Sean Allred

Respuestas:


2

¡Ajá, tengo la solución! Pon esto en algún lugar de tu .emacs/ .emacs.d/init.elarchivo:

(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)))

He probado esto con fill-paragraph, y debería funcionar para todas las funciones de relleno (ya que todas se usan current-fill-columnal procesar cada línea). ¡Espero que te guste! 😇

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.