2016-03-28 16 views
1

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

3

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.

+0

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

+0

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

+0

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

1

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.