From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: weber Newsgroups: gmane.emacs.help Subject: Re: YAsnippet Emacs-Lisp Templates Date: Thu, 25 Sep 2008 05:19:53 -0700 (PDT) Organization: http://groups.google.com Message-ID: <684ec37f-72e2-41b1-9378-305e933d593c@s50g2000hsb.googlegroups.com> References: <87myhwaaxh.fsf@manatee.domain> <31d2385f-2763-4f49-832e-f5ff89e270ea@f63g2000hsf.googlegroups.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1222346502 16257 80.91.229.12 (25 Sep 2008 12:41:42 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 25 Sep 2008 12:41:42 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Sep 25 14:42:37 2008 connect(): Connection refused Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KiqAw-0006W5-Oc for geh-help-gnu-emacs@m.gmane.org; Thu, 25 Sep 2008 14:42:31 +0200 Original-Received: from localhost ([127.0.0.1]:55913 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Kiq9u-0003fX-GU for geh-help-gnu-emacs@m.gmane.org; Thu, 25 Sep 2008 08:41:26 -0400 Original-Path: news.stanford.edu!newsfeed.stanford.edu!postnews.google.com!s50g2000hsb.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 282 Original-NNTP-Posting-Host: 201.21.216.91 Original-X-Trace: posting.google.com 1222345193 1804 127.0.0.1 (25 Sep 2008 12:19:53 GMT) Original-X-Complaints-To: groups-abuse@google.com Original-NNTP-Posting-Date: Thu, 25 Sep 2008 12:19:53 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: s50g2000hsb.googlegroups.com; posting-host=201.21.216.91; posting-account=7GrjgQoAAAD6slWURausdJnhFDkmQYC8 User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8,gzip(gfe),gzip(gfe) X-HTTP-Via: 1.1 stargate.datacom:3128 (squid/2.6.STABLE5) Original-Xref: news.stanford.edu gnu.emacs.help:162723 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:58065 Archived-At: On 25 set, 06:39, Nordl=F6w wrote: > On 25 Sep, 10:26, Andy Stewart wrote: > > > > > >>>>> "Nordl=F6w" =3D=3D Nordl=F6w writes: > > > Hi, Nordl=F6w! > > > Nordl=F6w> Has anyone written any YAsnippet templates for emacs-lis= p? > > Nordl=F6w> /Nordl=F6w > > > This my YASnippet templates for emacs-lisp. > > > ------------------------------> addal start <--------------------------= ---- > > #name : (autoload '... "..." "..." ...) > > # -- > > (autoload '${1:function-name} "${2:file-name}" "${3:document}" ${0:inte= ractive}) > > ------------------------------> addal end <--------------------------= ---- > > > ------------------------------> addav start <--------------------------= ---- > > #name : (defadvice ... ... ...) > > # -- > > (defadvice ${1:function-name} (${2:args}) > > "${3:advice-document}" > > (${0:advice-body}) > > ) > > ------------------------------> addav end <--------------------------= ---- > > > ------------------------------> addbk start <--------------------------= ---- > > #name : (basic-set-key-alist ...) > > # -- > > (basic-set-key-alist ${0:rest}) > > ------------------------------> addbk end <--------------------------= ---- > > > ------------------------------> addgk start <--------------------------= ---- > > #name : (global-set-key (kbd "...") ...) > > # -- > > (global-set-key (kbd "${1:some-key}") ${0:some-command}) > > ------------------------------> addgk end <--------------------------= ---- > > > ------------------------------> addhk start <--------------------------= ---- > > #name : (dolist (hook (list ... )) (add-hook hook '...)) > > # -- > > (dolist (hook (list > > ${1:mode-list} > > )) > > (add-hook hook '${0:mode-hook})) > > ------------------------------> addhk end <--------------------------= ---- > > > ------------------------------> addhkd start <-------------------------= ----- > > #name : (dolist (hooked (list ...)) (add-hook '... 'hooked)) > > # -- > > (dolist (hooked (list > > ${1:mode-list} > > )) > > (add-hook '${0:mode-hook} 'hooked)) > > ------------------------------> addhkd end <-------------------------= ----- > > > ------------------------------> addlk start <--------------------------= ---- > > #name : (define-key ... (kbd "...") ...) > > # -- > > (define-key ${1:some-mode-map} (kbd "${2:some-key}") ${0:some-command}) > > ------------------------------> addlk end <--------------------------= ---- > > > ------------------------------> addpr start <--------------------------= ---- > > #name : (provide '...) > > # -- > > (provide '${0:library-name}) > > ------------------------------> addpr end <--------------------------= ---- > > > ------------------------------> addrq start <--------------------------= ---- > > #name : (require '...) > > # -- > > (require '${0:library-name}) > > ------------------------------> addrq end <--------------------------= ---- > > > ------------------------------> addse start <--------------------------= ---- > > #name : (setq ... ...) > > # -- > > (setq ${1:variable-name} ${0:variable-value}) > > ------------------------------> addse end <--------------------------= ---- > > > ------------------------------> deffu start <--------------------------= ---- > > #name : (defun ... (...) "..." ...) > > # -- > > (defun ${1:Function Name} ($2) > > "${3:Function document}" > > $0) > > ------------------------------> deffu end <--------------------------= ---- > > > ------------------------------> defvr start <--------------------------= ---- > > #name : (defvar ... ... "...") > > # -- > > (defvar ${1:variable-name} ${2:variable-varlue} "${0:document}") > > ------------------------------> defvr end <--------------------------= ---- > > > ------------------------------> evalal start <-------------------------= ----- > > #name : (eval-after-load ... ...) > > # -- > > (eval-after-load ${1:file-name} > > ${0:form}) > > ------------------------------> evalal end <-------------------------= ----- > > > ------------------------------> header start <-------------------------= ----- > > #name : A elisp file header > > # -- > > ;;; ${1:filename}.el --- ${2:Simple description} > > > ;; Author: ${3:Andy Stewart} ${4:} > > ;; Maintainer: ${5:Andy Stewart} ${6:} > > ;; Copyright (C) 2008, $3, all rights reserved. > > ;; Created: ${7:Created time} > > ;; Version: ${8:Current version} > > ;; Last-Updated: ${9:Update time} > > ;; URL: ${10:not distributed yet} > > ;; Keywords: ${11:keyword} > > ;; Compatibility: GNU Emacs ${12:Compatibility version} > > > ;; This program is free software; you can redistribute it and/or modify > > ;; it under the terms of the GNU General Public License as published by > > ;; the Free Software Foundation; either version 2, or (at your option) > > ;; any later version. > > > ;; This program is distributed in the hope that it will be useful, > > ;; but WITHOUT ANY WARRANTY; without even the implied warranty of > > ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > ;; GNU General Public License for more details. > > > ;; You should have received a copy of the GNU General Public License > > ;; along with this program; see the file COPYING. If not, write to > > ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth > > ;; Floor, Boston, MA 02110-1301, USA. > > > ;; Features that might be requried by this library: > > ;; > > ;; ${13:None} > > ;; > > > ;;; Installation: > > ;; > > ;; Copy $1.el to your load-path and add to your ~/.emacs > > ;; > > ;; (require '$1) > > ;; > > ;; ${14:No need more} > > > ;;; Commentary: > > ;; > > ;; ${15:Comment} > > ;; > > > ;;; Change log: > > ;; > > ;; ${16:Chang log} > > ;; > > > ;;; Acknowledgements: > > ;; > > ;; $17 > > ;; > > > ;;; TODO > > ;; > > ;; $18 > > ;; > > > ;;; Require > > $19 > > > ;;; Code: > > > $0 > > > (provide '$1) > > > ;;; $1.el ends here > > ------------------------------> header end <-------------------------= ----- > > > Enjoy! > > > Andy. > > Great! > > Is it possible to change the way these are are triggered (the keys I > believe YAsnippet calls them)? > > I would like yasnippet to trigger on the real uses of them. For > example > > "(defmacro " + TAB > expands defmacro-statement. > > Thanks in advance, > Nordl=F6w I did something like that, but after I just preferred using eldoc. If you have any further questions please use the yasnippet group; the package author is always helpful... I'm pasting the code below... HTH, weber ;;; Hugo Schmitt (hugows@gmail.com) - Insert elisp function ARGS as a ;;; Yasnippet ;; 13-01-2008 ;; Usage: ;; You've just entered a function name but forgot its arguments (cursor is on ^): ;; (push ^) ;; then running lisp-snippet-insert will expand the snippet: ;; (push ${1:x} {2:place}) ;; Note: I wasn't aware of Eldoc at the time, which ends up being ;; much easier to use than this. (provide 'lisp-snippet-insert) (require 'yasnippet) (require 'cl) (defun lisp-snippet-insert () "Insert args for 'current function' as a snippet." (interactive) (while (looking-back "\\s-") (backward-delete-char 1)) ; remove any extra whitespace (let* ((fun (function-called-at-point)) (args (unified-function-arglist fun))) (insert " ") (yas/expand-snippet (point) (point) (args-to-snippet args)))) (defun unified-function-arglist (fun) "Return argument LIST for all kinds of functions (or so i hope)." (let ((arglist (help-function-arglist fun))) (if (or (stringp arglist) (listp arglist)) (split-string (substring (downcase (format "%S" (help-function- arglist fun))) 1 -1)) (cdr (split-string (substring (downcase (car (help-split-fundoc (documentation fun) "ignore"))) 1 -1)))))) (defun args-to-snippet (arglist) "Convert string with space separated args to a snippet template. Args like &optional will be removed." (let* ((filterlist '("&optional" "&rest")) (newlist (remove-if (lambda (x) (member x filterlist)) arglist)) (template (mapconcat (lambda (arg) (concat "${" arg "}")) newlist " "))) template))