From 371f68e860eb7c627f99a847363229230ad0b33b Mon Sep 17 00:00:00 2001 From: capitaomorte Date: Wed, 2 Sep 2009 16:50:37 +0000 Subject: [PATCH] * Working on the issues regarding customization of yas/trigger-key and yas/root-directory. Still not quite fixed. --- yasnippet.el | 99 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 35 deletions(-) diff --git a/yasnippet.el b/yasnippet.el index eabd746..a7ea209 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -5,7 +5,7 @@ ;; Authors: pluskid , joaotavora ;; Version: 0.6.1 -;; Package-version: 0.6.1b +;; Package-version: 0.6.1c ;; X-URL: http://code.google.com/p/yasnippet/ ;; Keywords: convenience, emulation ;; URL: http://code.google.com/p/yasnippet/ @@ -154,18 +154,21 @@ (defcustom yas/root-directory nil "Root directory that stores the snippets for each major mode. -Can also be a list of strings, for multiple root directories. If -you make this a list, the first element is always the -user-created snippets directory. Other directories are used for -bulk reloading of all snippets using `yas/reload-all'" +If you set this from your .emacs, can also be a list of strings, +for multiple root directories. If you make this a list, the first +element is always the user-created snippets directory. Other +directories are used for bulk reloading of all snippets using +`yas/reload-all'" - :type '(string) + :type 'string :group 'yasnippet :require 'yasnippet - :set #'(lambda (symbol roots) - (set-default symbol roots) - (if (fboundp 'yas/reload-all) - (yas/reload-all)))) + :set #'(lambda (symbol new) + (let ((old (symbol-value symbol))) + (set-default symbol new) + (unless (or (not (fboundp 'yas/reload-all)) + (equal old new)) + (yas/reload-all))))) (defcustom yas/prompt-functions '(yas/x-prompt yas/dropdown-prompt @@ -233,8 +236,13 @@ Naturally this is only valid when `yas/indent-line' is `auto'" Value is a string that is converted to the internal Emacs key representation using `read-kbd-macro'." :type 'string - :group 'yasnippet) - + :group 'yasnippet + :set #'(lambda (symbol key) + (let ((old (symbol-value symbol))) + (set-default symbol key) + (if (fboundp 'yas/trigger-key-reload) + (yas/trigger-key-reload old))))) + (defcustom yas/next-field-key "TAB" "The key to navigate to next field when a snippet is active. @@ -647,18 +655,27 @@ Here's an example: :help "Display some information about YASsnippet"])) ;; Now for the stuff that has direct keybindings ;; - (when (and yas/trigger-key - (stringp yas/trigger-key)) - (define-key yas/minor-mode-map (read-kbd-macro yas/trigger-key) 'yas/expand)) + (yas/trigger-key-reload) (define-key yas/minor-mode-map "\C-c&\C-s" 'yas/insert-snippet) (define-key yas/minor-mode-map "\C-c&\C-n" 'yas/new-snippet) (define-key yas/minor-mode-map "\C-c&\C-v" 'yas/visit-snippet-file) (define-key yas/minor-mode-map "\C-c&\C-f" 'yas/find-snippets)) -;;;### eval this on require! -(progn - (yas/init-minor-keymap)) +(defun yas/trigger-key-reload (&optional unbind-key) + "Rebind `yas/expand' to the new value of `yas/trigger-key'. + +With optional UNBIND-KEY, try to unbind that key from +`yas/minor-mode-map'." + (when (and unbind-key + (stringp unbind-key) + (not (string= unbind-key ""))) + (define-key yas/minor-mode-map (read-kbd-macro unbind-key) nil)) + (when (and yas/trigger-key + (stringp yas/trigger-key) + (not (string= yas/trigger-key ""))) + (define-key yas/minor-mode-map (read-kbd-macro yas/trigger-key) 'yas/expand))) + (define-minor-mode yas/minor-mode "Toggle YASnippet mode. @@ -678,14 +695,18 @@ Key bindings: " yas" :group 'yasnippet (when yas/minor-mode - ;; when turning on theminor mode, re-read the `yas/trigger-key' - ;; if a `yas/minor-mode-map' is already built. Else, call - ;; `yas/init-minor-keymap' to build it - (if (and (cdr yas/minor-mode-map) - yas/trigger-key - (stringp yas/trigger-key)) - (define-key yas/minor-mode-map (read-kbd-macro yas/trigger-key) 'yas/expand) - (yas/init-minor-keymap)))) + ;; when turning on the minor mode. + ;; + ;; re-read the `yas/trigger-key' if a `yas/minor-mode-map' is + ;; already built. Else, call `yas/init-minor-keymap' to build it + (unless (and (cdr yas/minor-mode-map) + (yas/trigger-key-reload)) + (yas/init-minor-keymap)) + ;; load all snippets definitions unless we still don't have a + ;; root-directory or some snippets have already been loaded. + (unless (or (null yas/root-directory) + (> (hash-table-count yas/snippet-tables) 0)) + (yas/reload-all)))) (defvar yas/dont-activate nil "If non-nil don't let `yas/minor-mode-on' active yas for this buffer. @@ -749,10 +770,6 @@ behaviour.") (list "Load this snippet" 'yas/load-snippet-buffer "\C-c\C-c") (list "Try out this snippet" 'yas/tryout-snippet "\C-c\C-t")))))) -;;;### eval this on require! -(progn - (yas/init-major-keymap)) - (define-derived-mode snippet-mode text-mode "Snippet" "A mode for editing yasnippets" (set-syntax-table (standard-syntax-table)) @@ -1407,11 +1424,6 @@ content of the file is the template." (message "done."))) -;;;### eval this on require! -(progn - (when yas/root-directory - (yas/reload-all))) - (defun yas/quote-string (string) "Escape and quote STRING. foo\"bar\\! -> \"foo\\\"bar\\\\!\"" @@ -3408,6 +3420,23 @@ When multiple expressions are found, only the last one counts." ;; When not in an undo, check if we must commit the snippet (use exited it). (yas/check-commit-snippet)))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Evaluated on load or require +;; +;; ;;;### eval this on require! +;; (progn +;; (yas/init-minor-keymap)) + +;; ;;;### eval this on require! +;; (progn +;; (yas/init-major-keymap)) + +;; ;;;### eval this on require! +;; (progn +;; (when yas/root-directory +;; (yas/reload-all))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Debug functions. Use (or change) at will whenever needed. ;;