unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* YAsnippet Emacs-Lisp Templates
@ 2008-09-25  7:14 Nordlöw
  2008-09-25  8:26 ` Andy Stewart
  0 siblings, 1 reply; 5+ messages in thread
From: Nordlöw @ 2008-09-25  7:14 UTC (permalink / raw)
  To: help-gnu-emacs

Has anyone written any YAsnippet templates for emacs-lisp?

/Nordlöw


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: YAsnippet Emacs-Lisp Templates
  2008-09-25  7:14 YAsnippet Emacs-Lisp Templates Nordlöw
@ 2008-09-25  8:26 ` Andy Stewart
  2008-09-25  9:39   ` Nordlöw
  0 siblings, 1 reply; 5+ messages in thread
From: Andy Stewart @ 2008-09-25  8:26 UTC (permalink / raw)
  To: help-gnu-emacs

>>>>> "Nordlöw" == Nordlöw  <per.nordlow@gmail.com> writes:

Hi, Nordlöw!

    Nordlöw> Has anyone written any YAsnippet templates for emacs-lisp?
    Nordlöw> /Nordlöw

This my YASnippet templates for emacs-lisp.

------------------------------> addal start <------------------------------
#name : (autoload '... "..." "..." ...)
# --
(autoload '${1:function-name} "${2:file-name}" "${3:document}" ${0:interactive})
------------------------------> 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:<lazycat.manatee@gmail.com>}
;; Maintainer: ${5:Andy Stewart} ${6:<lazycat.manatee@gmail.com>}
;; 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.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: YAsnippet Emacs-Lisp Templates
  2008-09-25  8:26 ` Andy Stewart
@ 2008-09-25  9:39   ` Nordlöw
  2008-09-25 10:53     ` Andy Stewart
  2008-09-25 12:19     ` weber
  0 siblings, 2 replies; 5+ messages in thread
From: Nordlöw @ 2008-09-25  9:39 UTC (permalink / raw)
  To: help-gnu-emacs

On 25 Sep, 10:26, Andy Stewart <lazycat.mana...@gmail.com> wrote:
> >>>>> "Nordlöw" == Nordlöw  <per.nord...@gmail.com> writes:
>
> Hi, Nordlöw!
>
>     Nordlöw> Has anyone written any YAsnippet templates for emacs-lisp?
>     Nordlöw> /Nordlöw
>
> This my YASnippet templates for emacs-lisp.
>
> ------------------------------> addal start <------------------------------
> #name : (autoload '... "..." "..." ...)
> # --
> (autoload '${1:function-name} "${2:file-name}" "${3:document}" ${0:interactive})
> ------------------------------> 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:<lazycat.mana...@gmail.com>}
> ;; Maintainer: ${5:Andy Stewart} ${6:<lazycat.mana...@gmail.com>}
> ;; 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öw


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: YAsnippet Emacs-Lisp Templates
  2008-09-25  9:39   ` Nordlöw
@ 2008-09-25 10:53     ` Andy Stewart
  2008-09-25 12:19     ` weber
  1 sibling, 0 replies; 5+ messages in thread
From: Andy Stewart @ 2008-09-25 10:53 UTC (permalink / raw)
  To: help-gnu-emacs

Nordlöw <per.nordlow@gmail.com> writes:

> On 25 Sep, 10:26, Andy Stewart <lazycat.mana...@gmail.com> wrote:
>> >>>>> "Nordlöw" == Nordlöw  <per.nord...@gmail.com> writes:
> 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öw

Hi, Nordlöw.

I think YAsnippet's mode is like this.

KEYWORD + TAB             ==> Template completion

And I think YAsnippet can't understand below mode:

KEYWORD + SPACE + TAB 

Because YAsnippet completion template just when cursor behind KEYWORD.
If you make cursor and KEYWORD have a SPACE, YAsnippet can't completion
template.

I have read your another post about YAsnippet with hippie-expand.

I recommend you split the key binding of those two command.

I binding TAB yas/expand, and binding M-/ hippie-expand.

So yas/expand don't conflict with hippie/expand.

BTW, hippie/expand is powerful, but not intuitionistic.

I use Company-mode to completion. It's a interactive completion style.

You can find it at:
http://nschum.de/src/emacs/company-mode/

Regards.

Andy.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: YAsnippet Emacs-Lisp Templates
  2008-09-25  9:39   ` Nordlöw
  2008-09-25 10:53     ` Andy Stewart
@ 2008-09-25 12:19     ` weber
  1 sibling, 0 replies; 5+ messages in thread
From: weber @ 2008-09-25 12:19 UTC (permalink / raw)
  To: help-gnu-emacs

On 25 set, 06:39, Nordlöw <per.nord...@gmail.com> wrote:
> On 25 Sep, 10:26, Andy Stewart <lazycat.mana...@gmail.com> wrote:
>
>
>
> > >>>>> "Nordlöw" == Nordlöw  <per.nord...@gmail.com> writes:
>
> > Hi, Nordlöw!
>
> >     Nordlöw> Has anyone written any YAsnippet templates for emacs-lisp?
> >     Nordlöw> /Nordlöw
>
> > This my YASnippet templates for emacs-lisp.
>
> > ------------------------------> addal start <------------------------------
> > #name : (autoload '... "..." "..." ...)
> > # --
> > (autoload '${1:function-name} "${2:file-name}" "${3:document}" ${0:interactive})
> > ------------------------------> 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:<lazycat.mana...@gmail.com>}
> > ;; Maintainer: ${5:Andy Stewart} ${6:<lazycat.mana...@gmail.com>}
> > ;; 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öw

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))






^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-09-25 12:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-25  7:14 YAsnippet Emacs-Lisp Templates Nordlöw
2008-09-25  8:26 ` Andy Stewart
2008-09-25  9:39   ` Nordlöw
2008-09-25 10:53     ` Andy Stewart
2008-09-25 12:19     ` weber

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).