From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: "João Távora" <joaotavora@gmail.com>
Cc: emacs-devel@gnu.org, Tassilo Horn <tsdh@gnu.org>
Subject: Getting rid of low-level assumptions in yasnippet
Date: Thu, 19 Mar 2015 15:49:59 -0400 [thread overview]
Message-ID: <jwvwq2c3h69.fsf-monnier+emacs@gnu.org> (raw)
Hi João,
Could you double check the patch below, to make sure it does the right thing?
The main thrust is to get rid of the use of the `cl-struct-slots'
property which doesn't exist in Emacs-25 any more.
This is against the elpa.git version of the code, which IIUC is still
not up-to-date, right?
Stefan
diff --git a/packages/yasnippet/yasnippet.el b/packages/yasnippet/yasnippet.el
index aa3e312..7b4c429 100644
--- a/packages/yasnippet/yasnippet.el
+++ b/packages/yasnippet/yasnippet.el
@@ -1,6 +1,6 @@
;;; yasnippet.el --- Yet another snippet extension for Emacs.
-;; Copyright (C) 2008-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2013, 2015 Free Software Foundation, Inc.
;; Authors: pluskid <pluskid@gmail.com>, João Távora <joaotavora@gmail.com>
;; Maintainer: João Távora <joaotavora@gmail.com>
;; Version: 0.8.0
@@ -856,7 +856,7 @@ Honour `yas-dont-activate', which see."
\f
;;; Internal structs for template management
-(defstruct (yas--template (:constructor yas--make-blank-template))
+(defstruct (yas--template (:constructor yas--make-template))
"A template for a snippet."
key
content
@@ -872,16 +872,6 @@ Honour `yas-dont-activate', which see."
table
)
-(defun yas--populate-template (template &rest args)
- "Helper function to populate TEMPLATE with properties."
- (while args
- (aset template
- (position (intern (substring (symbol-name (car args)) 1))
- (mapcar #'car (get 'yas--template 'cl-struct-slots)))
- (second args))
- (setq args (cddr args)))
- template)
-
(defstruct (yas--table (:constructor yas--make-snippet-table (name)))
"A table to store snippets for a particular mode.
@@ -1668,20 +1658,19 @@ Optional PROMPT sets the prompt to use."
(uuid (or (ninth snippet)
name))
(template (or (gethash uuid (yas--table-uuidhash snippet-table))
- (yas--make-blank-template))))
+ (yas--make-template :uuid uuid
+ :table snippet-table))))
;; X) populate the template object
;;
- (yas--populate-template template
- :table snippet-table
- :key key
- :content (second snippet)
- :name (or name key)
- :group group
- :condition condition
- :expand-env (sixth snippet)
- :file (seventh snippet)
- :keybinding keybinding
- :uuid uuid)
+ (setf (yas--template-key template) key)
+ (setf (yas--template-content template) (second snippet))
+ (setf (yas--template-name template) (or name key))
+ (setf (yas--template-group template) group)
+ (setf (yas--template-condition template) condition)
+ (setf (yas--template-expand-env template) (sixth snippet))
+ (setf (yas--template-file template) (seventh snippet))
+ (setf (yas--template-keybinding template) keybinding)
+
;; X) Update this template in the appropriate table. This step
;; also will take care of adding the key indicators in the
;; templates menu entry, if any
@@ -2113,11 +2102,10 @@ This function does nothing if `yas-use-menu' is nil."
hash)
(dolist (uuid omit-items)
(let ((template (or (gethash uuid hash)
- (yas--populate-template (puthash uuid
- (yas--make-blank-template)
- hash)
- :table table
- :uuid uuid))))
+ (puthash uuid
+ (yas--make-template :table table
+ :uuid uuid)
+ hash))))
(setf (yas--template-menu-binding-pair template) (cons nil :none)))))))
(defun yas--define-menu-1 (table menu-keymap menu uuidhash &optional group-list)
@@ -2125,12 +2113,12 @@ This function does nothing if `yas-use-menu' is nil."
(dolist (e (reverse menu))
(cond ((eq (first e) 'yas-item)
(let ((template (or (gethash (second e) uuidhash)
- (yas--populate-template (puthash (second e)
- (yas--make-blank-template)
- uuidhash)
- :table table
- :perm-group group-list
- :uuid (second e)))))
+ (puthash (second e)
+ (yas--make-template
+ :table table
+ :perm-group group-list
+ :uuid (second e))
+ uuidhash))))
(define-key menu-keymap (vector (gensym))
(car (yas--template-menu-binding-pair-get-create template :stay)))))
((eq (first e) 'yas-submenu)
@@ -2622,12 +2610,11 @@ whether (and where) to save the snippet, then quit the window."
(yas--current-template
(and parsed
(fboundp test-mode)
- (yas--populate-template (yas--make-blank-template)
- :table nil ;; no tables for ephemeral snippets
- :key (first parsed)
- :content (second parsed)
- :name (third parsed)
- :expand-env (sixth parsed)))))
+ (yas--make-template :table nil ;; no tables for ephemeral snippets
+ :key (first parsed)
+ :content (second parsed)
+ :name (third parsed)
+ :expand-env (sixth parsed)))))
(cond (yas--current-template
(let ((buffer-name (format "*testing snippet: %s*" (yas--template-name yas--current-template))))
(kill-buffer (get-buffer-create buffer-name))
next reply other threads:[~2015-03-19 19:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-19 19:49 Stefan Monnier [this message]
2015-03-20 11:03 ` Getting rid of low-level assumptions in yasnippet João Távora
2015-03-20 14:18 ` Stefan Monnier
2015-03-28 15:59 ` João Távora
2015-03-28 20:32 ` Stefan Monnier
2015-03-28 21:23 ` João Távora
2015-03-29 19:36 ` Matthew Fidler
2015-03-30 0:47 ` Stefan Monnier
2015-03-30 15:15 ` Matthew Fidler
2015-03-30 18:53 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvwq2c3h69.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=joaotavora@gmail.com \
--cc=tsdh@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.