Von Natur aus ist das fundamental-mode
nackte Knochen, da andere Hauptmodi von diesem abgeleitet werden sollen.
Von der Infoseite (elisp) Major Modes
haben wir:
Dies ist der Hauptmodusbefehl für den Grundmodus. Im Gegensatz zu anderen Mode - Befehle, ist es nicht laufen alle Modus Haken (* Anmerkung Hauptmodus Konventionen: :), da Sie diesen Modus nicht anpassen sollen.
Aus diesem Grund,
- Wir haben keine
fundamental-mode-hook
. - Wird
my-minor-mode
auch NUR in diesem Hauptmodus nicht aktiviert, obwohl Puffer(global-my-minor-mode 1)
in meiner Konfiguration vorhanden sind.
Unten würde funktionieren, aber nur, wenn ich manuell tippte M-x fundamental-mode
:
(add-hook 'after-change-major-mode-hook #'my-minor-mode)
fundamental-mode
Dies hilft im folgenden Fall nicht, wenn standardmäßig ein Puffer (* abcd *) erstellt wird:
(with-current-buffer (get-buffer-create "*abcd*")
(insert "Hello world"))
Warum möchte ich einen Nebenmodus aktivieren fundamental-mode
?
Ich möchte meine benutzerdefinierten Tastenkombinationen in meiner Nebenmoduszuordnung behalten. Ich habe diesen Nebenmodus global aktiviert (aber er wird nicht nur in fundamental-mode
Puffern aktiviert ).
Hier ist ein Anwendungsfall, bei dem diese Frage hier gestellt wurde. Beim Ausführen M-x esup
( esup
Paket) wird ein *esup-log*
Puffer mit fundamental-mode
dem Hauptmodus erstellt. Aber jedes Mal muss ich meinen Nebenmodus manuell aktivieren, um meine praktischen Bindungen zu verwenden.
Ich möchte auf my-minor-mode
wirklich globale Weise aktivieren fundamental-mode
oder nicht.
Update 1:
Hier ist meine Definition des Nebenmodus : modi-mode
.
Update 2:
Basierend auf @npostavs' Kommentar, wiederholt ich , was zwischen meiner Moll anders ist modi-mode
und override-global-mode
in use-package/bind-key.el
. Und es stellt sich heraus, dass der Init-Wert meines Modus nil
und der von override-global-mode
ist t
.
Wenn ich den Init-Wert meines Modus auf ändere t
, wird er auch in den Grundmodus-Puffern aktiviert! Aber der Akt von (global-modi-mode 1)
endet nicht mit dem gleichen Ergebnis. Ist das seltsam? Wahrscheinlich ein Fehler?
quelle
fundamental-mode
für mich in Puffern aktiviert , sodass das Problem möglicherweise in der Definition Ihres Modus liegt.override-global-mode
use-package
umgesetzt wird.nil
. aber ich aktiviere es global.buffer.c
, es sieht aus wieget-buffer-create
läuft dasbuffer-list-update-hook
ganz am seiner Funktion beenden, vielleicht könnten Sie Ihre eigene Funktion mit Bedingungen an diesem Haken befestigen?Antworten:
Die einzige Möglichkeit, einen Nebenmodus in
fundamental-mode
Puffern standardmäßig zu aktivieren, besteht darin, den Init-Wert dieses Nebenmodus auf zu setzent
.Beachten Sie, dass das einfache Umschalten auf einen globalisierten Nebenmodus (siehe
C-h i g (elisp) Defining Minor Modes
) mit dem Init-Wertnil
nicht dasselbe bewirkt. In diesem Fall wird einfundamental-mode
Puffer mit deaktiviertem Nebenmodus erstellt.Das Obige funktioniert natürlich nur, wenn Sie die Quelle für den Nebenmodus steuern. Wenn Sie für alle anderen Nebenmodi, die mit unterschiedlichen Paketen geliefert werden, standardmäßig einen Nebenmodus in
fundamental-mode
Puffern aktivieren möchten, müssen Sie dies tunquelle
(setq-default 'the-minor-mode t)
man den gleichen Effekt erzielen.(setq-default modi-mode 1)
die Funktionturn-on-modi-mode
und den(setq-default modi-mode nil) to the function
Modi-Modus ausschalten würden, wären Sie der tatsächlichen globalen Aktivierung und Deaktivierung des Modus einen Schritt näher .Nicht verwenden
fundamental-mode
- zumindest nicht interaktiv. Du willst selten dabei seinfundamental-mode
. Es gibt fast immer etwas Besseres.Der springende Punkt
fundamental-mode
ist, nicht die übliche Handhabung im Hauptmodus (Haken usw.) zu haben. Sie können sich einefundamental-mode
Art abstrakte Klasse vorstellen.Wenn Sie durch ein Paket in einen Puffer versetzt werden,
fundamental-mode
tun Sie, was Sie tun müssen, um dies zu verhindern. Verwenden Sie dafür einen anderen Modus.Ziehen Sie eine Anpassung in Betracht,
major-mode
sodass standardmäßig etwas anderes als verwendet wirdfundamental-mode
. (Ich benutzeindented-text-mode
.)Früher gab es
default-major-mode
dafür, was ich für etwas klarer halte, aber sie haben beschlossen, das abzulehnen (es funktioniert natürlich immer noch).quelle
fundamental-mode
. Der springende Punkt ist, dass, wenn ein Paketget-buffer-create
einen temporären Puffer generiert, dieser Puffer als Hauptmodus erstellt wirdfundamental-mode
. In diesen Puffern wird mein Nebenmodus standardmäßig nicht aktiviert (da sein Init-Wert Null ist, obwohl ich ihn global aktiviert habe).esup
,keyfreq
get-buffer-create
unternimmt nichts, um den Hauptmodus (oder einen Nebenmodus) einzurichten. Sollte es (für das betreffende Paket)? Wenden Sie sich in diesem Fall an den Paketbetreuer. Wenn nicht, sollten Sie Ihren bevorzugten Dur- oder Moll-Modus selbst aktivieren. IOW, wenn es darum geht, was Sie wollen und nicht, was das Paket allgemein einrichten soll , dann liegt es an Ihnen, es so einzurichten, wie Sie es möchten.Die Funktion
get-buffer-create
ist in definiertbuffer.c
und ruft ganz am Ende dieser Funktion die aufbuffer-list-update-hook
. Ein solcher Hook könnte zum Ausführen einer benutzerdefinierten Funktion verwendet werden, es müssen jedoch möglicherweise bestimmte Bedingungen hinzugefügt werden, um zu verhindern, dass die benutzerdefinierte Funktion zu ungünstigen Zeitpunkten ausgelöst wird, wenn dieser Hook von anderen Funktionen aufgerufen wird.quelle