Also habe ich einen großen Modus für eine benutzerdefinierte Lisp erstellt, indem Sie aus dem Standard-Lisp-Modus abgeleitet. Wenn Emacs es jedoch betritt, aktiviert es automatisch auch den Schleim-Modus, der die meisten meiner Bindungen außer Kraft setzt. Soweit ich das beurteilen kann, passiert das, weil SLIME einige Haken beim Lisp-Modus registriert und mein Modus sie ebenfalls auslöst, aber ich bin mir nicht sicher. Gibt es eine Möglichkeit, dies zu vermeiden?Leite vom Lisp Mode ab und ignoriere seine Haken?
Antwort
Wenn Sie define-derived-mode
verwenden, werden der Hauptteil und der Modus-Hook für den übergeordneten Modus ausgeführt.
Weitere Informationen finden Sie unter https://stackoverflow.com/a/19295380.
Wenn Sie slime-mode
in lisp-mode-hook
ermöglicht sind, und ein Modus aus lisp-mode
abzuleiten, dann ist das würde einfachste Sache deaktivierenslime-mode
wieder für Ihren abgeleiteten Modus im Modus Haken sein.
Edit: Eigentlich glaube ich Sie durch die Manipulation delayed-mode-hooks
im Körper des Modus der Modus Haken für die Vorfahren Modi nicht ausgeführt werden konnte. obwohl
(Sie können nicht die Körper der Vorfahren Modi nicht ausgeführt werden.)
Ich empfehle Ihnen, dies nicht tunzu tun. Ich denke, wenn Sie sich mit den abgeleiteten Modus-Mechanismen befassen wollen (besonders wenn Sie vorhaben, den Code zu teilen), dann sollten Sie überhaupt keinen abgeleiteten Modus verwenden.
Sie sollten wahrscheinlich einen Hinweis auf die Implementierungen von lisp-mode
vs emacs-lisp-mode
nehmen. Anstatt dass eine von der anderen abgeleitet wird, sind sie unterschiedliche Modi (jeweils abgeleitet von prog-mode
). Ihre (unabhängigen) Tastenbelegungen haben jedoch eine gemeinsame Eltern-Tastenbelegung, was bedeutet, dass viele Tastenkombinationen die gleichen Dinge tun.
Ich empfehle diesen Code als Vorlage für die Erstellung eines neuen lisp-ish Hauptmodus zu verwenden.
Der richtige Weg ist es, von einem Elternteil des Lisp-Modus zu erben. Idealerweise sollte es einen Elternteil lispish-mode
geben, der von allen Lisp-ähnlichen Hauptmodi verwendet wird, aber momentan gibt es keine solche Sache, also müssen Sie prog-mode
verwenden und dann manuell die gewünschten Dinge von lisp-mode
einrichten/kopieren.
Ich würde einen Patch begrüßen, der eine lispish-mode
hinzufügt (noch besser, wenn es mit einem besseren Namen kommt), aber bis jetzt jedes Mal, wenn ich es betrachtete, fand ich, dass es zwischen den Lispish-Modi zu viel Variation gibt viel zu teilen.
Nun, das löst eine bestimmte Instanz des Problems, in das ich zufällig geriet, aber jemand anders könnte verschiedene Lisp-Modus-Hooks haben, die wieder etwas kaputt machen würden ... Gibt es eine allgemeinere Lösung, um dies zu verhindern, außer duplizieren Lisp Mode statt davon abzuleiten? – user3026691
Nein, der ganze Sinn der abgeleiteten Modi besteht darin, dass sie aufeinander aufbauen, und alle Dinge, die für den "Eltern-Modus" passieren, geschehen auch für den "Kind-Modus". Sie sollten sicherlich nicht nach Möglichkeiten suchen, um die * Lisp-Modus-Funktion anderer Leute daran zu hindern, in diesem Szenario zu arbeiten. – phils
Wenn Sie den Aufruf von 'derived-minor-mode' macroexpandieren, sehen Sie den tatsächlich erzeugten Code. Sie könnten das immer als Grundlage für Änderungen verwenden, wenn Sie immer noch meinen, dass das Ableiten von 'Lisp-Modus' teilweise sinnvoll ist. – phils