如何在条件下加载yasnippets

时间:2012-09-21 06:26:34

标签: emacs elisp yasnippet

我正在做一些Drupal编程并为常用函数创建了yasnippets:db_select,db_delete等。

我想在我处理Drupal文件时加载它们,而不是用于常见的php文件。任务是:

给出yasnippet文件列表和当前打开文件的路径

if(path contains '/sites/all/modules')
{
    load all the snippets from the list
}

怎么做?

1 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 创建一个名为drupal-mode的新模式,该模式从php模式继承所有内容,然后为该模式定义片段,在EMacs手册中查看Derived Modes如何执行此操作
  2. 向find-file挂钩添加一个函数,该挂钩检查当前缓冲区是否在特定目录中,然后加载所需的片段
  3. 无论哪种方式,你都会根据当前目录或文件名做事。

    查找文件钩子示例

    我没有测试过这段代码,但概念就在那里。您可能必须将yas/load-directory-1函数检查为其他内容或将参数弄乱。

    (defun load-drupal-snippets ()
        (when (string-match-p "/sites/all/modules" (file-name-directory (buffer-file-name)))
            (yas--load-directory-1 "/path/to/drupal/snippets/" 'php-mode 'text-mode)))
    
    (add-hook 'find-file-hook 'load-drupal-snippets)