emama模式为snakemake?

Mur*_*son 5 python emacs makefile snakemake

snakemake是一个类似python的make替代品,它更倾向于工作流而不是编译.它非常好,但也很新,我似乎无法在Emacs中找到它的模式.我只想要一些非常简单的东西:从基本模式的一个非常小的修改,所以我在仔细阅读emacs手册,我在init.el中启动了以下内容:

(define-derived-mode snake-mode fundamental-mode
   ...
)
Run Code Online (Sandbox Code Playgroud)

像make一样,snakemake对缩进很严格(实际的tab"\ t"字符,而不是当一个TAB类型时默认的emacs行为).当我改为输入"Cq TAB"时,它会在缓冲区中放置一个真正的制表符:这是有效的,我在基本模式下使用Snakefile尝试它并且它运行得很好.因此,为了避免在每次我想在此模式下使用TAB键入"Cq TAB"时,我想要对snake模式进行的第一个添加是将TAB键重新绑定为"Cq TAB"(或类似的东西).所以我仔细阅读了emacs手册并尝试了:

(define-derived-mode snake-mode fundamental-mode
  (global-set-key (kbd "\t") (kbd "C-q \t"))
  ...
)
Run Code Online (Sandbox Code Playgroud)

但是这个和其他替代方案都不起作用...也许重新绑定像TAB键这样的标准键不是推荐的做法?

我想要的蛇模式的另一个补充是它根据python强调语法(但没有任何python行为,例如,python缩进行为)

总而言之,如果文件名为"Snakefile",那么在创建"蛇形模式"时只需对基本模式进行这2个简单修改,并且还可以调用蛇形模式,但我已经花了几个小时阅读emacs手册和做一些谷歌搜索,似乎我甚至没有接近.这很简单,我很确定它是可能的; 任何建议?

谢谢

穆雷

The*_*Cat 5

你的祈祷已得到回应:

https://github.com/kyleam/snakemake-mode

我对此很开心。

可以从melpaas 获取snakemake-mode


Mur*_*son 4

下面的(我认为有点优雅......至少它很短)kludge 现在可以解决问题。它确实做了我要求的两件事,即(1)重新绑定 TAB 键(以一种很好的方式),以及(2)根据 python 进行语法突出显示(加上它仅在调用文件时才进入此模式“Snakefile”,这很好),因此这回答了我的问题

; snake-mode
(add-to-list 'auto-mode-alist '("Snakefile" . snake-mode))

(defun insert-tab ()
  (interactive)
  (insert "     ")) ; a "real" tab, i.e., what "C-q \t" would give

(define-minor-mode snake-mode
  "Snakemake."
  :lighter " snake-make"
     (python-mode)
     (setq indent-line-function 'insert-tab)
)

; how to hard-code "\t" to a "real" tab (not recommended)
; (global-set-key "\t" `insert-tab)

; end snake-mode
Run Code Online (Sandbox Code Playgroud)

我确信,这到底有多优雅,还有待商榷。这只是 Snakemake 正确模式之旅的开始(它会突出显示 Snakemake 的特定单词,如“规则”和“输出:”等)