转换这个untabify上保存挂机的Emacs与咖啡模式(或所有模式)工作

我发现这个片段添加到我的.emacs会,在保存,去掉标签,并将它们用空格代替(帮助我的文件播放很好地与其他人谁使用空间的球队)。

不幸的是,我的Lisp和的Emacs Lisp印章都不是很强。 这似乎是这个片段将只用于Java的主要方式 - 我怎么能得到这个与咖啡模式的工作?

(defun java-mode-untabify () (save-excursion (goto-char (point-min)) (while (re-search-forward "[ \t]+$" nil t) (delete-region (match-beginning 0) (match-end 0))) (goto-char (point-min)) (if (search-forward "\t" nil t) (untabify (1- (point)) (point-max)))) nil) (add-hook 'java-mode-hook '(lambda () (make-local-variable 'write-contents-hooks) (add-hook 'write-contents-hooks 'java-mode-untabify)))

--------------解决方案-------------

我已经按照我的.emacs对我的作品的代码:

;; untabify some modes
(setq alexott/untabify-modes '(haskell-mode emacs-lisp-mode lisp-mode scheme-mode
erlang-mode clojure-mode))
(defun alexott/untabify-hook ()
(when (member major-mode alexott/untabify-modes)
(untabify (point-min) (point-max))))
(add-hook 'before-save-hook 'alexott/untabify-hook)

你可以添加咖啡模式成模式列表中,为此untabify意愿进行钻削,通过更改列表中alexott / untabify-模式变量以下方式:

(setq alexott/untabify-modes '(haskell-mode emacs-lisp-mode lisp-mode scheme-mode
erlang-mode clojure-mode espresso-mode))

你在这里的片段将适用于任何文本文件。 有没有什么具体的Java它除了事实,它被命名为java-mode-untabify 如果您需要做的唯一一件事就是复制该add-hook电话,改变钩名espresso-mode-hook ,或任何正确的挂钩是咖啡模式。 虽然我可能会建议你改变功能的东西,反映了一个事实,即它不是Java的具体名称。 喜欢的东西cleanup-whitespace-in-buffer ,或任何你喜欢的。

(defun cleanup-whitespace-in-buffer () ; <- more appropriate name
(save-excursion
(goto-char (point-min))
(while (re-search-forward "[ \t]+$" nil t)
(delete-region (match-beginning 0) (match-end 0)))
(goto-char (point-min))
(if (search-forward "\t" nil t)
(untabify (1- (point)) (point-max))))
nil)

(add-hook 'espresso-mode-hook ; <- you can actually add this to any hook
'(lambda ()
(make-local-variable 'write-contents-hooks)
(add-hook 'write-contents-hooks 'cleanup-whitespace-in-buffer)))

警告:

我只是修改您发布的片段。 我不是一台机器上的Emacs现在,所以我没有测试任何这一点。

cleanup-whitespace-in-buffer功能,只需将删除该文件中的每一行的任何尾随空格,然后将其转换非尾随卡口插入空格。 因此,要求add-hook创建一个匿名函数(拉姆达)每当钩子运行时要调用。 该匿名函数安排cleanup-whitespace-in-buffer在缓冲区中运行它被保存之前。

我真的很喜欢亚历克斯·奥特的回答好了很多,因为它是灵活得多。 它设置了运行时所有缓冲区保存功能。 它检查以查看是否正在被保存的缓冲液具有的模式是在指定的模式列表,如果是这样,untabifies缓冲器保存前。 它不会删除尾随空白,但你可以很容易地改变(untabify (point-min) (point-max))调入(cleanup-whitespace-in-buffer)如果你想要的行为。 这使您可以轻松地添加将在保存之前已预处理的文件的其他方式。 它甚至可以,如果由于某种原因,你的模式没有与之相关联的钩。 他的方法是比我更好的建议。 我只是张贴在澄清,因为你说你觉得有点一周的Emacs Lisp的片段是如何工作的利益,这个答案。

分类:elisp的 时间:2012-01-15 人气:0
本文关键词: elisp的
分享到:

相关文章

  • 平台无关的路径(乳胶和elisp的)? 2012-01-01

    我运行Win7和Ubuntu的Emacs和尝试通过dropbox.com分享我的大部分配置. 我仍然无法弄清楚如何在一个平台独立的方式写的路径负载文件或图像(例如). 我反映在两台机器上我的目录结构,这样的家庭目录中的相对路径应该工作了. 有没有办法不用if子句(如果系统... ...别的)到处单一路径来实现这一目标? 我试过〜/,而且有时工作,有时没有. "家"坐落在Win7的,但它必须为%HOME%的Win7和为$ HOME ubuntu上加以解决(对吧?). 我需要一个解决方案:

  • 为什么不FONT-锁fontify缓冲从elisp的工作,当它从迷你缓冲区的作品? 2012-01-06

    所以我黑客一些elisp的测试Web服务,而我正在与语法高亮的麻烦. 我使用的网址检索同步地得到一个HTTP响应,然后编辑文本静下心来,只是XML我需要看到的. 不幸的是,语法高亮不会在返回的缓冲区的工作,即使我已经将它设置为nxml模式和脚本中使用"FONT-锁fontify缓冲区". 但是,如果我做"的Mx字体锁fontify缓冲区",高亮工程,我期望的那样. 有没有elisp的和在Emacs使用它之间有什么区别? 下面是我放在一起的脚本中的相关部分. 我承认了

  • Emacs的 - 怎么看/如何调试一个elisp的功能/ emacs的命令 2012-01-08

    有一件事,我不喜欢在组织模式为Emacs表函数. 我希望看到所有的得到由函数执行的,我作为运行命令的Emacs的功能. 什么是做到这一点的最好办法? 任何提示如何开始使用debuging elisp的代码,特别是单利息命令? --------------解决方案------------- C-HF 函数名称来查找函数的源代码. C-UC-的MX仪器Edebug功能. 每当调用函数时,Emacs会落入Edebug这使得它易于通过一步执行函数的步骤,检查变量,以及执行其他典型的调试任务. 见(inf

  • 如何获取Windows路径从elisp的反斜杠 2012-01-08

    我尝试了几件事情在Windows上使用Emacs. 以我为例,我需要用反斜杠从elisp的返回文件路径. 但是elisp的总是斜线返回路径,等等. (expand-file-name "text.log" "d:\\ProgramData\\temp") => d:/ProgramData/temp/text.log 我的要求: (expand-file-name "text.log" "d:\\ProgramData\\temp

  • Emacs的文件集:如何运行其他(elisp的,没有外壳)命令? 2012-01-15

    有迹象表明,可以在Emacs的文件集运行5 elisp的命令,再加上运行任何shell命令的能力. 什么其他所有的Emacs的命令? 只是举一个例子,这将是很好能够运行的Mx发生在一个文件集. 我知道它可能标志着dired多个文件,然后在它们上面运行的任何Emacs的命令(这是真的,还是我用shell命令混淆?),但它会很方便一次定义文件集,然后可以使用它喜欢各种文本编辑的一个文件中. 感谢您的任何意见 --------------解决方案------------- 可以在文件集操作的命令在全局

  • 如何复制的系统剪贴板不杀环的elisp / emacs的一些内容? 2012-01-26

    我了解到,一些副本杀缓冲区,我可以使用kill-新的缓冲区 (kill-new (file-truename buffer-file-name)) 如何复制到剪贴板中的内容? 请问emacs的/ elisp的提供的功能? 添加 我2回答,但答案似乎适用的X窗口系统. 正如我使用Aquamacs,它可能不是可以应用于我的问题通用的解决方案. --------------解决方案------------- (x-set-selection nil (file-truename buffer-file

  • 有没有办法回去从elisp的键盘宏? 2012-01-29

    我一直在创建宏,并将其保存与以下过程以后使用. 创建的键盘宏 编辑宏: Cx Ck Ce 命名宏: Mx name-last-kbd-macro 创建一个.el文件然后插入宏定义: Mx insert-kbd-macro 随着Lisp代码保存后,我会在我的加载它.emacs文件. 也许这是我与elisp的不熟悉,但它产生的elisp代码显得相当笨拙. 我更喜欢在宏编辑器的语法,我想进行更新和完善,以我所创建的代码,所以我想问: 有没有办法把我的elisp的代码回落到合理再现了宏编辑器? ----

  • 问ESS / R用户在.emacs文件建议elisp的代码 2012-02-03

    我认为,不是所有的R用户都知道的elisp. 这将是很好,如果ESS用户可以分享自己的代码在自己的.emacs这里文件. 良好的注释代码将是特别有用的. 希望这将推广使用ESS的由R用户. --------------解决方案------------- 对我来说,这件事是飞驰有用: ;; ESS: Emacs Speaks Statistics (load "~/elisp/vendor/ess/lisp/ess-site.el") ;; Use shift-enter to spli

  • 在以上的elisp两个列表映射函数 2012-02-03

    Common Lisp中我可以这样做: (mapcar #'cons '(1 2 3) '(abc)) => ((1 . A) (2 . B) (3 . C)) 我该怎么做的elisp的同样的事情? 当我尝试,我得到一个错误: (wrong-number-of-arguments mapcar 3) 如果elisp的的mapcar可以在一个名单上每次只工作,什么是两个清单合并成一个ALIST的idomatic方式吗? --------------解决方案------------- 你想mapca

  • 如何解析INI文件格式的elisp? 2012-02-07

    我想分析在elisp的一个配置文件:http://en.wikipedia.org/wiki/INI_file. 我还没有发现,提供这个功能,如果这样的库不存在出库,什么是完成这一任务的最佳方式? 是否有关于如何学习使用的elisp写一个解析器的资源? --------------解决方案------------- 在缓冲区和使用的步行路程打开该文件,通过使用像正常的运动功能forward-line ,并检查使用正则表达式的每一行的内容:■使用类似的功能looking-at和match-stri

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.196 (s). 10 q(s)