代码之家  ›  专栏  ›  技术社区  ›  warfangle

将emacs的save hook上的untabify转换为espresso模式(或所有模式)

  •  2
  • warfangle  · 技术社区  · 14 年前

    不幸的是,我的lisp和emacslisp不是很强。似乎这段代码只适用于java主模式-我如何才能让它适用于espresso模式?

    (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 ()
                   (add-hook 'write-contents-hooks 'java-mode-untabify nil 'local)))
    
    2 回复  |  直到 9 年前
        1
  •  4
  •   Alex Ott    14 年前

    我的.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)
    

    您可以通过以下方式更改alexott/untabify modes变量中的list,将espresso mode添加到模式列表中,untabify将为其执行:

    (setq alexott/untabify-modes '(haskell-mode emacs-lisp-mode lisp-mode scheme-mode
                                            erlang-mode clojure-mode espresso-mode))
    
        2
  •  1
  •   Community CDub    7 年前

    您这里的代码段适用于任何文本文件。除了它的名称之外,它没有任何特定于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 ()
                 (add-hook 'write-contents-hooks 'cleanup-whitespace-in-buffer nil 'local)))
    

    我刚刚修改了你发布的片段。我现在不在一台有Emacs的机器上,所以我还没有测试过这些。

    清除缓冲区中的空白 函数只需从文件中的每一行删除任何尾随空格,然后将非尾随制表符转换为空格。呼叫 添加挂钩 创建一个匿名函数(lambda),每当运行钩子时都将调用该函数。这个匿名函数安排 在保存之前在缓冲区中运行。

    Alex Ott's answer (untabify (point-min) (point-max)) 召唤 (cleanup-whitespace-in-buffer)