Anulación de párrafo de relleno en modo LaTeX

9

Me gustaría cambiar el comportamiento de fill-paragraphciertos modos (por ejemplo, LaTeX-modeproporcionado por AucTeX).

Podría volver a vincular la clave M-q, pero también estoy usando evil-modecuya implementación de evil-fill-and-moveusos fill-region. Idealmente, mi función de relleno personalizada para anular ambas funciones fill-paragraph(para que funcione M-q) y fill-region(para que funcione evil).

Suponiendo que tengo un programa independiente formatque toma el código LaTeX a través de stdinun código formateado stdout, ¿cómo podría anular las dos funciones de relleno anteriores para usar format?

(Nota: esto es similar a vimla formatprgopción de.)

Kevin
fuente
¿La vinculación M-qafecta de alguna evil-fill-and-movemanera? No uso el mal, por lo tanto tengo curiosidad. Si la región está activa, fill-paragraphllama de fill-regiontodos modos. Por lo tanto, puede aconsejar o reemplazar fill-regioncon su función.
Vamsi
No lo he probado, pero creo que no. evil-fill-and-moveestá vinculado a la secuencia de teclas gqen el modo normal del mal. Rebinding M-qno debería afectar a esta combinación de teclas. En cierto sentido, mi pregunta es realmente dos preguntas: 1) ¿Cómo reemplazar las dos funciones? 2) ¿Cómo usar un programa externo? La razón de 2) es que ya tengo una solución externa que no es Elisp.
Kevin
1
En ese caso, puede resolver parte de su problema (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))donde your-fill-functionestá su defunción elisp personalizada. Esto establecerá esa combinación de teclas solo en Auctex. Probablemente podría usar shell-command-on-regioncon el argumento REPLACE para definir your-fill-function.
Vamsi

Respuestas:

7

Sería mejor tener 2 funciones, aunque una se puede implementar en términos de la otra. La razón es que un párrafo es una región implícita , por lo que la entrada en ambos casos debería ser diferente

(defun my-format-region (beg end)
  (interactive "r")
  (shell-command-on-region beg end "format"))

(defun my-format-paragraph ()
  (interactive)
  (save-excursion
    (mark-paragraph)
    (my-format-region (point) (mark))))

Para sustituir las funciones por otras, independientemente de su combinación de teclas, utilice las asignaciones de teclas de reasignación:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
Sigma
fuente