As linhas comentadas disparam para a coluna 32 no modo oitava


8

Estou usando o modo oitava principal para editar meu código MATLAB, pois é mais conveniente do que os pacotes não suportados do MATLAB para o emacs na internet.

Uma desvantagem é que sempre que tento recuar automaticamente as linhas comentadas, o caractere de comentário é transferido para a coluna 32, o que torna um pouco problemático o recuo de grandes blocos de código.

Devo notar que eu fiz

(setq comment-start "%")

para usar o sinal de porcentagem como o caractere de comentário padrão. No entanto, tenho o mesmo problema ao usar #. Quando eu uso comment-region, ele realmente insere ##no início das linhas, e as linhas com ##não disparam como as que estão #.

A mesma pergunta foi feita duas vezes como eu encontrei no Google, como esta . Mas nenhum deles me ajudou.

Gostaria de resolver esse problema para que as linhas que começam com %ou #sejam recuadas automaticamente de maneira correta, sem disparar para a coluna 32. Estou usando o GNU Emacs 24.5.1.

Respostas:


8

Consegui o que queria, substituindo algumas definições do modo principal original. Em /lisp/progmodes/octave.el(o arquivo foi compactado, tive que descompactá-lo para visualizar a fonte), redefini o octave-indent-commentque originalmente é assim:

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

Eu removi o último bit e anexei à octave-mode-hookminha configuração da seguinte maneira:

(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 eu acho que removeu toda essa funcionalidade vinculada a um número diferente de caracteres de comentário. Como essa funcionalidade não era desejável para mim desde o início, estou satisfeito com esse resultado. Agora, as linhas de comentário estão sempre alinhadas com as linhas anteriores quando uso comment-region.

Editar: acho que é útil adicionar esse link à minha configuração, pois as substituições que fiz para tornar o octave-modecomportamento mais agradável ao editar o código MATLAB.


Não queria responder minha própria pergunta, mas resolvi-a por sorte e não achei que a resposta viesse de outro lugar.
Osolmaz 30/08

11
Por favor , responda sua própria pergunta, se você forneceu a resposta. Isso permite que as pessoas saibam que a pergunta não é respondida. Por outro lado, se você ainda estiver procurando respostas, poderá deixar isso inaceitável.
Drew

7

Tente usar mais de um %ou #em uma fila: %%ou %%%etc.

Por padrão, o número de caracteres de comentários consecutivos determina o tipo de comentário e seu comportamento (por exemplo, com relação à indentação).

Consulte o manual Elisp, nó Dicas de Comentários .


11
Na verdade, esse é o comportamento que quero mudar. No editor do MATLAB, #e ##têm significados diferentes em termos de documentação, e as pessoas para as quais estou trabalhando usam esse editor, por isso tenho que cumprir seus padrões.
Osolmaz 30/08/2015
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.