From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: pjb@informatimago.com (Pascal J. Bourguignon) Newsgroups: gmane.emacs.help Subject: Re: Need help with macros Date: Wed, 06 Jan 2010 20:00:19 +0100 Organization: Informatimago Message-ID: <87r5q3rrcs.fsf@hubble.informatimago.com> 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 1262806924 18582 80.91.229.12 (6 Jan 2010 19:42:04 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 6 Jan 2010 19:42:04 +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 20:41:56 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 1NSblM-0002SP-BK for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jan 2010 20:41:48 +0100 Original-Received: from localhost ([127.0.0.1]:44495 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NSblM-0007pm-Nk for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jan 2010 14:41:48 -0500 Original-Path: news.stanford.edu!usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 85 Original-X-Trace: individual.net fb6HNNAOpTcfozvtVdYY1AiMEl1SoeKyVTZoANrghhJgCcrgYN Cancel-Lock: sha1:ZDU2ZjQ3NmM4NjU3NDU5ZjExODdhNTA1MDU3NDdjNmFkMThhZTBjYQ== sha1:bYg3WxJZwe2sEjCjyXNakb+8A8k= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en X-Disabled: X-No-Archive: no User-Agent: Gnus/5.101 (Gnus v5.10.10) Emacs/22.3 (gnu/linux) Original-Xref: news.stanford.edu gnu.emacs.help:176001 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:71088 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)) I would avoid using the character # in lisp output, since it is meaningful (readable). (let ((print-circle t)) (let* ((a "hello") (b (list a a))) (print b))) prints: (#1="hello" #1#) (read-from-string "(#1=\"hello\" #1#)") --> ((#1="hello" #1#) . 16) In a preceding message, I used "%S" instead. You should try it! > (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)))) gnus-group-jump-bind has no need to be a macro. As a macro it is wrong. Use defun! > 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. By using a function instead of macro. > 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? Make it a function. -- __Pascal Bourguignon__ http://www.informatimago.com/