Las líneas comentadas salen a la columna 32 en modo octava

8

Estoy usando el modo principal de octava para editar mi código MATLAB, ya que es más conveniente que los paquetes MATLAB no compatibles para emacs en Internet.

Una desventaja es que cada vez que trato de sangrar automáticamente las líneas comentadas, el carácter del comentario se traslada a la columna 32, lo que hace que la sangría de grandes bloques de código sea un problema.

Debo notar que hice

(setq comment-start "%")

para usar el signo de porcentaje como el carácter de comentario predeterminado. Sin embargo, tengo el mismo problema cuando lo uso #. Cuando lo uso comment-region, en realidad se inserta ##al comienzo de las líneas, y las líneas con ##no se disparan como las que tienen #.

La misma pregunta se ha hecho un par de veces como la que he encontrado en Google, como esta . Pero ninguno de ellos me ayudó.

Me gustaría resolver este problema para que las líneas que comienzan con %o #se sangran automáticamente de una manera correcta sin disparar a la columna 32. Estoy usando GNU Emacs 24.5.1.

osolmaz
fuente

Respuestas:

8

Logré lo que quería anulando algunas definiciones del modo principal original. En /lisp/progmodes/octave.el(el archivo estaba comprimido, tuve que descomprimirlo para ver la fuente), redefiní lo octave-indent-commentque originalmente es así:

(defun octave-indent-comment ()
  "A function for `smie-indent-functions' (which see)."
  (save-excursion
    (back-to-indentation)
    (cond
     ((octave-in-string-or-comment-p) nil)
     ((looking-at-p "\\(\\s<\\)\\1\\{2,\\}")
      0)
     ;; Exclude %{, %} and %!.
     ((and (looking-at-p "\\s<\\(?:[^{}!]\\|$\\)")
           (not (looking-at-p "\\(\\s<\\)\\1")))
      (comment-choose-indent)))))

Eliminé el último bit y agregué a octave-mode-hookmi configuración de esta manera:

(setq octave-mode-hook
      (lambda () (progn (setq octave-comment-char ?%)
                        (setq comment-start "%")
                        (setq indent-tabs-mode t)
                        (setq comment-add 0)
                        (setq tab-width 2)
                        (setq tab-stop-list (number-sequence 2 200 2))
                        (setq octave-block-offset 2)

                        (defun octave-indent-comment ()
                          "A function for `smie-indent-functions' (which see)."
                          (save-excursion
                            (back-to-indentation)
                            (cond
                             ((octave-in-string-or-comment-p) nil)
                             ((looking-at-p "\\(\\s<\\)\\1\\{2,\\}") 0)))))))

que supongo que eliminó toda esa funcionalidad vinculada a un número diferente de caracteres de comentarios. Como esa funcionalidad no era deseable para mí desde el principio, estoy satisfecho con este resultado. Ahora, las líneas de comentarios siempre están alineadas con las líneas anteriores cuando las uso comment-region.

Editar: Supongo que es útil agregar este enlace a mi configuración, por las anulaciones que hice para que se octave-modecomporten de manera más agradable al editar el código MATLAB.

osolmaz
fuente
No quería responder mi propia pregunta, pero la resolví por suerte y no pensé que la respuesta vendría de otro lado.
osolmaz
1
Por favor, no responder a su propia pregunta, si proporcionó la respuesta. Esto le permite a la gente saber que la pregunta no está sin respuesta. Por otro lado, si todavía está buscando respuestas, es posible que desee dejarlas sin aceptar.
Dibujó
7

Intente usar más de uno %o #en una fila: %%o %%%etc.

Por defecto, el número de caracteres de comentarios consecutivos determina el tipo de comentario y su comportamiento (por ejemplo, con respecto a la sangría).

Consulte el manual de Elisp, Sugerencias de comentarios de nodo .

Dibujó
fuente
1
En realidad, ese es el comportamiento que quiero cambiar. En el propio editor de MATLAB, #y ##tienen diferentes significados en términos de documentación, y las personas para las que estoy trabajando usan ese editor, por lo que tengo que cumplir con sus estándares.
osolmaz