snakemake ist ein Python-ähnlicher Ersatz für make, der mehr auf Workflows als auf Kompilierung ausgerichtet ist. Es ist ziemlich nett, aber auch ziemlich neu, und ich finde keinen Modus dafür in Emacs. Ich möchte nur etwas sehr einfach: Eine sehr leichte Modifikation von Grundmoden, so dass ich in das Emacs-Handbuch durchlesen, begann ich folgend in init.el:Emacs-Modus für Snakemake?
(define-derived-mode snake-mode fundamental-mode
...
)
wie Marke, ist snakemake streng über Einzüge (tatsächliche Tab "\ t" Zeichen, nicht wie Emacs standardmäßig verhält, wenn man TAB eingibt). Wenn ich stattdessen "C-q TAB" eintrage, wird ein echtes Tab-Zeichen in den Puffer geschrieben: das funktioniert, ich habe es mit einem Snakefile im Grundmodus versucht und es läuft perfekt. Um also nicht jedesmal "C-q TAB" eingeben zu müssen, wenn ich ein TAB in diesem Modus möchte, besteht die erste Hinzufügung, die ich zum Snake-Modus machen möchte, darin, die TAB-Taste an "C-q TAB" (oder etwas Ähnliches) neu zu binden. So las ich das Handbuch Emacs und versucht:
(define-derived-mode snake-mode fundamental-mode
(global-set-key (kbd "\t") (kbd "C-q \t"))
...
)
aber diese und andere Alternativen arbeiten nicht ... vielleicht rebinding Standardtasten wie der TAB-Taste wird nicht empfohlen?
die andere neben den Schlange-Modus Ich mag würde es Syntax markieren Python nach (aber nicht haben keinen Python Verhalten, zB Python Einrücken Verhalten)
Zum Schluss nur diese 2 Einfache Änderungen am fundamental-Modus beim Erstellen eines "Snake-Modus" und eine Möglichkeit, auch Snake-Modus aufzurufen, wenn der Dateiname "Snakefile" ist, war alles was ich suchte, aber ich habe schon mehrere Stunden damit verbracht, das Emacs Handbuch zu lesen etwas googeln, und es scheint, ich bin nicht einmal in der Nähe. Das ist so einfach und ich bin mir ziemlich sicher, dass es möglich ist; irgendein Rat?
Dank
Murray
Ein kleines Addendum zu dieser "Lösung": die Funktion "Einfügen-Tab" ist bereits in Emacs definiert, also sollte man lieber (defn snake-tab() ... oder einen anderen Namen, der nicht schon drin ist der Namespace – user2489449