From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.help Subject: Re: ~`symbol-function' to get code as list even when byte-compiled? Date: Tue, 26 May 2015 02:01:52 +0200 Organization: Aioe.org NNTP Server Message-ID: <87h9r0b40f.fsf@debian.uxu> References: <877frxid14.fsf@debian.uxu> <87twv18i91.fsf@kuiper.lan.informatimago.com> <87wpzw1t8e.fsf@debian.uxu> <87k2vw1rmh.fsf@debian.uxu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1432598422 483 80.91.229.3 (26 May 2015 00:00:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 26 May 2015 00:00:22 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue May 26 02:00:21 2015 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Yx2I7-0001NG-PA for geh-help-gnu-emacs@m.gmane.org; Tue, 26 May 2015 02:00:19 +0200 Original-Received: from localhost ([::1]:45310 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yx2I6-000375-PZ for geh-help-gnu-emacs@m.gmane.org; Mon, 25 May 2015 20:00:18 -0400 Original-Path: usenet.stanford.edu!news.kjsl.com!feeder.erje.net!1.eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 44 Original-NNTP-Posting-Host: feB02bRejf23rfBm51Mt7Q.user.speranza.aioe.org Original-X-Complaints-To: abuse@aioe.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) X-Notice: Filtered by postfilter v. 0.8.2 Cancel-Lock: sha1:lYQMwqyOQQTDE1QGQOvUzRnR5cI= Mail-Copies-To: never Original-Xref: usenet.stanford.edu gnu.emacs.help:212279 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:104563 Archived-At: "Pascal J. Bourguignon" writes: > Then you can just write: > > ;;;; -*- mode:emacs-lisp;lexical-binding:t;coding:utf-8 -*- > (defun add-one-shot-meat (hook fun) > (let ((name (gensym))) > (setf (symbol-function name) > (lambda () > (remove-hook hook name) > (funcall fun))) > (add-hook hook name))) > > and use add-one-shot-meat instead of add-hook. That's exactly right! I knew this could be done without macros. Only, I had to change "gensym" into `cl-gensym' and add the "unused" argument to the lambda as with `w3m-display-hook', "each function is called with a url string as the argument". The byte-compiler then said Warning: Unused lexical argument `unused' so I made "use" of it to keep the compiler quiet. ;;;; -*- lexical-binding:t -*- (defun add-one-shot-hook (hook fun) (let ((name (cl-gensym))) (setf (symbol-function name) (lambda (&rest unused) (progn unused (remove-hook hook name) (funcall fun) ))) (add-hook hook name) )) I guess I like it fine - so far... -- underground experts united http://user.it.uu.se/~embe8573