Kommentierte Zeilen werden im Oktavmodus in Spalte 32 abgesprungen

8

Ich verwende den Oktav-Major-Modus zum Bearbeiten meines MATLAB-Codes, da er für Emacs im Internet bequemer ist als die nicht unterstützten MATLAB-Pakete.

Ein Nachteil ist, dass bei jedem Versuch, kommentierte Zeilen automatisch einzurücken, das Kommentarzeichen in Spalte 32 übertragen wird, was das Einrücken großer Codeblöcke zu einem Problem macht.

Ich sollte beachten, dass ich es getan habe

(setq comment-start "%")

um das Prozentzeichen als Standardkommentarzeichen zu verwenden. Trotzdem habe ich das gleiche Problem bei der Verwendung #. Wenn ich benutze comment-region, wird es tatsächlich ##am Anfang der Zeilen eingefügt, und die Zeilen mit ##schießen nicht wie die mit ab #.

Die gleiche Frage wurde einige Male gestellt, die ich bei Google gefunden habe, wie diese hier . Aber keiner von ihnen hat mir geholfen.

Ich möchte dieses Problem so lösen, dass Zeilen, die mit beginnen %oder #korrekt eingerückt werden, korrekt sind, ohne in Spalte 32 abzuschießen. Ich verwende GNU Emacs 24.5.1.

Osolmaz
quelle

Antworten:

8

Ich habe erreicht, was ich wollte, indem ich einige Definitionen aus dem ursprünglichen Hauptmodus überschrieben habe. In /lisp/progmodes/octave.el(die Datei wurde komprimiert, ich musste sie entpacken, um die Quelle anzuzeigen) habe ich neu definiert, octave-indent-commentwas ursprünglich so aussieht :

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

Ich habe das letzte Bit entfernt und octave-mode-hookin meiner Konfiguration wie folgt angehängt :

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

Ich denke, das hat all diese Funktionen entfernt, die an eine unterschiedliche Anzahl von Kommentarzeichen gebunden sind. Da diese Funktionalität für mich von Anfang an nicht wünschenswert war, bin ich mit diesem Ergebnis zufrieden. Jetzt werden die Kommentarzeilen immer an den vorhergehenden Zeilen ausgerichtet, wenn ich sie verwende comment-region.

Bearbeiten: Ich denke, es ist nützlich, diesen Link zu meiner Konfiguration hinzuzufügen , damit sich die Überschreibungen, die ich vorgenommen habe, octave-modebeim Bearbeiten von MATLAB-Code angenehmer verhalten.

Osolmaz
quelle
Ich wollte meine eigene Frage nicht beantworten, aber ich habe sie selbst durch Glück gelöst und dachte nicht, dass die Antwort von irgendwo anders kommen würde.
Osolmaz
1
Bitte keine Antwort auf Ihre eigene Frage, wenn Sie die Antwort zur Verfügung gestellt. Dies lässt die Leute wissen, dass die Frage nicht unbeantwortet bleibt. Wenn Sie jedoch immer noch nach Antworten suchen, möchten Sie diese möglicherweise nicht akzeptieren.
Drew
7

Versuchen Sie es mit mehr als einer %oder #einer Reihe: %%oder %%%etc.

Standardmäßig bestimmt die Anzahl aufeinanderfolgender Kommentarzeichen die Art des Kommentars und sein Verhalten (z. B. in Bezug auf Einrückungen).

Siehe das Elisp-Handbuch, Knoten Kommentartipps .

Drew
quelle
1
Eigentlich ist das das Verhalten, das ich ändern möchte. In MATLABs eigenem Editor #und ##mit unterschiedlichen Bedeutungen in Bezug auf die Dokumentation und die Personen, für die ich arbeite, verwenden Sie diesen Editor, sodass ich deren Standards einhalten muss.
Osolmaz