From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Cecil Westerhof Newsgroups: gmane.emacs.help Subject: Re: Need help with macros Date: Wed, 06 Jan 2010 18:18:55 +0100 Organization: Decebal Computing Message-ID: <87eim3gni8.fsf@Traian.DecebalComp> References: <874omzi6n9.fsf@Traian.DecebalComp> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1262800885 28356 80.91.229.12 (6 Jan 2010 18:01:25 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 6 Jan 2010 18:01:25 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed Jan 06 19:01:17 2010 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 1NSaBi-0001Oz-MB for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jan 2010 19:00:55 +0100 Original-Received: from localhost ([127.0.0.1]:56165 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSaBi-0003M5-S5 for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jan 2010 13:00:54 -0500 Original-Path: news.stanford.edu!usenet.stanford.edu!goblin1!goblin.stu.neva.ru!feeder.news-service.com!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!newsfeed6.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Original-Newsgroups: gnu.emacs.help X-Homepage: http://www.decebal.nl/ User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.3 (gnu/linux) Cancel-Lock: sha1:BKLs73oB0d8fXzrKGUGyE9cqv+c= Original-Lines: 86 Original-NNTP-Posting-Host: 84.53.123.169 Original-X-Trace: 1262798337 news.xs4all.nl 22944 decebal/[::ffff:84.53.123.169]:21920 Original-X-Complaints-To: abuse@xs4all.nl Original-Xref: news.stanford.edu gnu.emacs.help:175996 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:71083 Archived-At: Cecil Westerhof writes: > I am trying to make some useful functionality for Gnus. I think that I > should use a macro for that. I made the following macro (the two message > statements are just for debugging): > (defmacro gnus-group-jump-bind (key-binding group-to-jump-to) > (message "#%s#%s#" key-binding (type-of key-binding)) > (message "#%s#%s#" group-to-jump-to (type-of group-to-jump-to)) > (define-key gnus-group-mode-map key-binding > (lambda () > (interactive) > (gnus-group-jump-to-group group-to-jump-to)))) > > When calling this with: > (gnus-group-jump-bind "vjd" "nndraft:drafts") > > In the message buffer it gives: > #vjd#string# > #nndraft:drafts#string# > > And the return value is: > (lambda nil (interactive) (gnus-group-jump-to-group group-to-jump-to)) > > This is the first problem. Outside the macro group-to-jump-to is not > existing, I need the value of group-to-jump-to not the name itself. How > do I do this? I tried eval, but that did not work. > > But of course I do not want to set the key bindings manually but data > driven. So I wrote the following function: > (defun gnus-group-do-jump-bind () > (dolist (this-jump gnus-group-jump-list) > (let ((this-group (second this-jump)) > (this-key (concat "vj" (first this-jump)))) > (gnus-group-jump-bind this-key this-group)))) > > I defined the used value: > (setq gnus-group-jump-list > (list > '("d" "nndraft:drafts") > )) > > And call the function: > (gnus-group-do-jump-bind) > > This gives in the message buffer: > #this-key#symbol# > #this-group#symbol# > Entering debugger... > > And the debug output starts with: > Debugger entered--Lisp error: (wrong-type-argument arrayp this-key) > > I tried to work with symbol-value, but that did not work. > > What do I need to do to get this working? Found it: (setq gnus-group-jump-list (list '("d" "nndraft:drafts") )) (defmacro gnus-group-jump-bind (key-binding group-to-jump-to) `(define-key gnus-group-mode-map ,(symbol-value key-binding) (lambda () (interactive) (gnus-group-jump-to-group ,(symbol-value group-to-jump-to))))) (defun gnus-group-do-jump-bind () (dolist (this-jump gnus-group-jump-list) (let ((this-group (second this-jump)) (this-key (concat "vj" (first this-jump)))) (gnus-group-jump-bind this-key this-group)))) (gnus-group-do-jump-bind) And this does what I want. A problem could be that: (gnus-group-jump-bind "vjd" "nndraft:drafts") does not work anymore, but just always use variables solves that 'problem'. -- Cecil Westerhof Senior Software Engineer LinkedIn: http://www.linkedin.com/in/cecilwesterhof