Конфликты между org-mode и yasnippet - PullRequest
2 голосов
/ 23 февраля 2012

РЕДАКТИРОВАТЬ Моя проблема была связана с синтаксисом фрагмента все время ... Конфигурация ниже полностью работает.


Я пытаюсь использовать режим org и yasnippet вместе ион не работает даже с некоторыми из обходных путей в FAQ по режиму org.Всякий раз, когда я нажимаю TAB в аббревиатуре фрагмента, слово удаляется. TAB ведет себя нормально, если я не переписываюсь со словом фрагмента, поэтому что-то происходит ...

Я использую Org-mode version 7.7, yasnippet (version 0.7.0) и GNU Emacs 23.4.1.

Вот мои настройки:

(setq load-path
      (append (list nil
                    "~/.emacs.d/site-lisp/yasnippet"
                    "~/.emacs.d/site-lisp/org-7.7/lisp")
              load-path))

;; set up yasnippet
(require 'yasnippet)
(yas/initialize)
(setq yas/snippet-dirs '("~/.emacs.d/mysnippets"
                         "~/.emacs.d/site-lisp/yasnippet/snippets"))
(mapc 'yas/load-directory yas/snippet-dirs)

;; set up org mode
(require 'org-install)
;; fix some org-mode + yasnippet conflicts:
(defun yas/org-very-safe-expand ()
  (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))

(add-hook 'org-mode-hook
          (lambda ()
            (make-variable-buffer-local 'yas/trigger-key)
            (setq yas/trigger-key [tab])
            (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
            (define-key yas/keymap [tab] 'yas/next-field)))

И я почти уверен, что ловушка работает так, как ожидалось, из-за следующего вывода Ch v org-tab-first-hook в орг-буфере:

org-tab-first-hook is a variable defined in `org.el'.
Its value is
(yas/org-very-safe-expand org-hide-block-toggle-maybe org-src-native-tab-command-maybe org-babel-hide-result-toggle-maybe)

А вот Ch k TAB в орг-буфере:

<tab> runs the command org-cycle, which is an interactive Lisp
function in `org.el'.

РЕДАКТИРОВАТЬ

После выполнения edebug-defun на моей yas/org-very-safe-expand функции я вижу следующее сообщение

Result: "[yas] elisp error! Symbol's value as variable is void: err"

Так что yas где-то ошибается ... My edebugfoo не совсем в норме, но если у меня будет время, я постараюсь сделать шаг и посмотреть, где ошибка.Моя полная конфигурация emacs на github здесь .

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Оказывается, моя проблема была связана с синтаксисом фрагмента, а не с настройкой. Глупый глупый я ...

Другими словами, это полностью работает:

;; fix some org-mode + yasnippet conflicts:
(defun yas/org-very-safe-expand ()
  (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))

(add-hook 'org-mode-hook
          (lambda ()
            (make-variable-buffer-local 'yas/trigger-key)
            (setq yas/trigger-key [tab])
            (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
            (define-key yas/keymap [tab] 'yas/next-field)))
1 голос
/ 24 февраля 2012

Это заняло у меня некоторое время, чтобы потренироваться. Я использую Org-mode version 7.7, yasnippet (version 0.6.1c), GNU Emacs 22.1.1. Вот соответствующие части моего .emacs файла (есть некоторые flyspell вещи, которые не имеют значения):

;;                                                                              
;; org-mode stuff                                                               
;;                                                                              
(add-to-list 'load-path "/Users/cmalone/install/org-mode/org-mode/lisp")
(add-to-list 'load-path "/Users/cmalone/install/org-mode/org-mode/contrib/lisp")
(require 'org-install)

;;                                                                              
;; for YASnippet                                                                
;;                                                                              
(add-to-list 'load-path "/Users/cmalone/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "/Users/cmalone/.emacs.d/plugins/yasnippet-0.6.1c/snippets")
;; Make TAB the yas trigger key in the org-mode-hook and enable flyspell mode and autofill                                                                     
(add-hook 'org-mode-hook
          (lambda ()
            ;; yasnippet                                                        
            (make-variable-buffer-local 'yas/trigger-key)
            (org-set-local 'yas/trigger-key [tab])
            (define-key yas/keymap [tab] 'yas/next-field-group)
            ;; flyspell mode for spell checking everywhere                      
;;            (flyspell-mode 1)                                                 
            ;; auto-fill mode on                                                
            (auto-fill-mode 1)))

C-h v org-tab-first-hook такой же, как у вас, за исключением yas/org-very-safe-expand, конечно. C-h k TAB показывает:

TAB runs the command yas/expand
  which is an interactive Lisp function in `yasnippet.el'.
It is bound to TAB, <menu-bar> <YASnippet> <Expand trigger>.
(yas/expand)

Expand a snippet before point.

If no snippet expansion is possible, fall back to the behaviour
defined in `yas/fallback-behavior'
...