Ich verwende use-package
, um installierte Pakete zu verwalten und bind-key
benutzerdefinierten Schlüsseln Aktionen zuzuweisen, die mir gefallen.
Ich überschreibe die meisten Standard-Emacs-Tastenkombinationen (z. B. C-nwird M-k, C-pwird M-i), aber ich bin mit anderen Modi einverstanden, die mein Tastenkombinationsschema überschreiben. Manchmal möchte ich jedoch, dass meine Tastenkombination erhalten bleibt. Ich möchte M-ketwas anderes bedeuten als in Standard-Gnus oder Helm.
Sie alle stehen jedoch beim Start von Emacs in Konflikt miteinander, da ich einer Keymap keine Bindung hinzufügen kann, wenn sie nicht vorhanden ist (da use-package
manchmal das Laden eines Pakets verzögert wird ). Die folgenden Befehle werfen beispielsweise Fehler aus (z. B. (void-variable helm-map)
), da Helm und Gnus noch nicht vollständig geladen sind.
(bind-key "M-Y" 'helm-end-of-buffer helm-map)
(bind-key "M-k" 'helm-next-line helm-find-files-map)
(bind-key "M-s" 'other-window gnus-summary-mode-map)
Ich habe alle meine use-package
Aufrufe in einer Datei und bind-key
für benutzerdefinierte Tastenkombinationen in einer anderen Datei. Ich möchte keine Bindungen in use-package
Aufrufe einfügen, da ich möglicherweise mein benutzerdefiniertes Schlüsselbindungsschema als eigenständiges Paket veröffentlichen möchte. Was ist, wenn ich möchte, dass jemand, der mein Schema installiert, auch die lokalen Tastenkombinationen von Helm und Gnus überschreibt?
Wie verwalte ich mode-lokale Tastenkombinationen mit bind-key
, sodass alle Schlüssel festgelegt werden, auch wenn Pakete in letzter Zeit geladen wurden und alle Tasteneinstellungen in einer Datei enthalten sind?
quelle
Da Sie bereits den Bindeschlüssel verwenden, direkt aus der Dokumentation von
bind-key.el
:Das letzte Formular wird unterbrochen, wenn die Keymap derzeit nicht definiert
some-other-mode-map
ist, da die Dateidefinition noch nicht geladen wurde. Sie können dies also in einuse-package
forsome-other-mode
(das Paket, das definiertsome-other-mode-map
) einfügen oder Folgendes verwendenwith-eval-after-load
:Eine andere Alternative wäre, Ihren eigenen Nebenmodus zu definieren, der alle Bindungen enthält, die nicht durch Hauptmodi überschrieben werden sollten:
quelle