unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* mutate list by appending a list (and similar for props)
@ 2014-09-08 18:42 Sam Halliday
  2014-09-08 19:29 ` Barry Margolin
  0 siblings, 1 reply; 8+ messages in thread
From: Sam Halliday @ 2014-09-08 18:42 UTC (permalink / raw)
  To: help-gnu-emacs

Hi all,

I often find that I am repeating calls to add-to-list (mutates) / plist-put (immutable) in my .emacs [1] configuration against the same variable. I'd like to be able to pass a list of elements to be appended/prepended to the variable to save on boilerplate.

It would be trivial to write a little function that repeats the operation for a list input, but I'd rather use something that is already in the emacs distro (or at least in a very lightweight MELPA package).

Does such a thing exist?


[1] https://github.com/fommil/unix/blob/master/.emacs

Best regards,
Sam


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-08 18:42 mutate list by appending a list (and similar for props) Sam Halliday
@ 2014-09-08 19:29 ` Barry Margolin
  2014-09-18  9:37   ` Sam Halliday
  0 siblings, 1 reply; 8+ messages in thread
From: Barry Margolin @ 2014-09-08 19:29 UTC (permalink / raw)
  To: help-gnu-emacs

In article <3710b1bf-1e23-4147-b6ea-40c360fb16b4@googlegroups.com>,
 Sam Halliday <sam.halliday@gmail.com> wrote:

> Hi all,
> 
> I often find that I am repeating calls to add-to-list (mutates) / plist-put 
> (immutable) in my .emacs [1] configuration against the same variable. I'd 
> like to be able to pass a list of elements to be appended/prepended to the 
> variable to save on boilerplate.
> 
> It would be trivial to write a little function that repeats the operation for 
> a list input, but I'd rather use something that is already in the emacs 
> distro (or at least in a very lightweight MELPA package).
> 
> Does such a thing exist?

The append function does it:

(setq list (append additional-list list))

-- 
Barry Margolin, barmar@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-08 19:29 ` Barry Margolin
@ 2014-09-18  9:37   ` Sam Halliday
  2014-09-18  9:42     ` Sam Halliday
                       ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Sam Halliday @ 2014-09-18  9:37 UTC (permalink / raw)
  To: help-gnu-emacs

On Monday, 8 September 2014 20:29:17 UTC+1, Barry Margolin  wrote:
>  Sam Halliday <sam.halliday@gmail.com> wrote:
> > I often find that I am repeating calls to add-to-list (mutates) / plist-put 
> > (immutable) in my .emacs [1] configuration against the same variable. I'd 
> > like to be able to pass a list of elements to be appended/prepended to the 
> > variable to save on boilerplate.
> 
> > It would be trivial to write a little function that repeats the operation for 
> > a list input, but I'd rather use something that is already in the emacs 
> > distro (or at least in a very lightweight MELPA package).
> 
> > Does such a thing exist?
> 
> 
> 
> The append function does it:
> 
> (setq list (append additional-list list))


Thanks! But that's not ideal because it involves repeating the list symbol (which can often be quite long).


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-18  9:37   ` Sam Halliday
@ 2014-09-18  9:42     ` Sam Halliday
  2014-09-18  9:44       ` Sam Halliday
  2014-09-18 10:10     ` Michael Heerdegen
       [not found]     ` <mailman.9095.1411035073.1147.help-gnu-emacs@gnu.org>
  2 siblings, 1 reply; 8+ messages in thread
From: Sam Halliday @ 2014-09-18  9:42 UTC (permalink / raw)
  To: help-gnu-emacs

On Thursday, 18 September 2014 10:37:52 UTC+1, Sam Halliday  wrote:
> On Monday, 8 September 2014 20:29:17 UTC+1, Barry Margolin  wrote:
> 
> >  Sam Halliday <sam.halliday@gmail.com> wrote:
> 
> > > I often find that I am repeating calls to add-to-list (mutates) / plist-put 
> 
> > > (immutable) in my .emacs [1] configuration against the same variable. I'd 
> 
> > > like to be able to pass a list of elements to be appended/prepended to the 
> 
> > > variable to save on boilerplate.
> 
> > 
> 
> > > It would be trivial to write a little function that repeats the operation for 
> 
> > > a list input, but I'd rather use something that is already in the emacs 
> 
> > > distro (or at least in a very lightweight MELPA package).
> 
> > 
> 
> > > Does such a thing exist?
> 
> > 
> 
> > 
> 
> > 
> 
> > The append function does it:
> 
> > 
> 
> > (setq list (append additional-list list))
> 
> 
> 
> 
> 
> Thanks! But that's not ideal because it involves repeating the list symbol (which can often be quite long).

(It also doesn't work when the original list is nil)


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-18  9:42     ` Sam Halliday
@ 2014-09-18  9:44       ` Sam Halliday
  0 siblings, 0 replies; 8+ messages in thread
From: Sam Halliday @ 2014-09-18  9:44 UTC (permalink / raw)
  To: help-gnu-emacs

On Thursday, 18 September 2014 10:42:03 UTC+1, Sam Halliday  wrote:
> (It also doesn't work when the original list is nil)

Ignore this comment: I was getting an error from another line.


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-18  9:37   ` Sam Halliday
  2014-09-18  9:42     ` Sam Halliday
@ 2014-09-18 10:10     ` Michael Heerdegen
       [not found]     ` <mailman.9095.1411035073.1147.help-gnu-emacs@gnu.org>
  2 siblings, 0 replies; 8+ messages in thread
From: Michael Heerdegen @ 2014-09-18 10:10 UTC (permalink / raw)
  To: help-gnu-emacs

Sam Halliday <sam.halliday@gmail.com> writes:

> > (setq list (append additional-list list))
>
> Thanks! But that's not ideal because it involves repeating the list
> symbol (which can often be quite long).

Try (cl-callf2 append additional-list list) instead, which expands
exactly into the above expression.

Michael.




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

* Re: mutate list by appending a list (and similar for props)
       [not found]     ` <mailman.9095.1411035073.1147.help-gnu-emacs@gnu.org>
@ 2014-09-18 16:53       ` Pascal J. Bourguignon
  2014-09-18 23:44         ` Stefan Monnier
  0 siblings, 1 reply; 8+ messages in thread
From: Pascal J. Bourguignon @ 2014-09-18 16:53 UTC (permalink / raw)
  To: help-gnu-emacs

Michael Heerdegen <michael_heerdegen@web.de> writes:

> Sam Halliday <sam.halliday@gmail.com> writes:
>
>> > (setq list (append additional-list list))
>>
>> Thanks! But that's not ideal because it involves repeating the list
>> symbol (which can often be quite long).
>
> Try (cl-callf2 append additional-list list) instead, which expands
> exactly into the above expression.

No!


You want prependf:


(require 'cl) ; of course!

(define-modify-macro appendf (&rest args) append "Append onto list")

(let ((list '(1 2 3)))
  (appendf list '(4 5 6) '(7 8 9))
  list)
--> (1 2 3 4 5 6 7 8 9)



(defun prepend (dest-list &rest other-lists)
  (apply (function append) (append other-lists (list dest-list))))
(define-modify-macro prependf (&rest args) prepend "Prepend to list")

(let ((list '(1 2 3)))
  (prependf list '(4 5 6) '(7 8 9))
  list)
--> (4 5 6 7 8 9 1 2 3)


-- 
__Pascal Bourguignon__                 http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk


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

* Re: mutate list by appending a list (and similar for props)
  2014-09-18 16:53       ` Pascal J. Bourguignon
@ 2014-09-18 23:44         ` Stefan Monnier
  0 siblings, 0 replies; 8+ messages in thread
From: Stefan Monnier @ 2014-09-18 23:44 UTC (permalink / raw)
  To: help-gnu-emacs

> (define-modify-macro appendf (&rest args) append "Append onto list")

With GV, this would be

   (defmacro sm-appendf (place &rest args)
     (gv-letplace (getter setter) place
       (funcall setter `(append ,getter ,@args))))

> (defun prepend (dest-list &rest other-lists)
>   (apply (function append) (append other-lists (list dest-list))))
> (define-modify-macro prependf (&rest args) prepend "Prepend to list")

Which with GV would turn into

   (defmacro sm-appendf (place &rest args)
     (gv-letplace (getter setter) place
       (funcall setter `(append ,@args ,getter))))


-- Stefan




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

end of thread, other threads:[~2014-09-18 23:44 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-08 18:42 mutate list by appending a list (and similar for props) Sam Halliday
2014-09-08 19:29 ` Barry Margolin
2014-09-18  9:37   ` Sam Halliday
2014-09-18  9:42     ` Sam Halliday
2014-09-18  9:44       ` Sam Halliday
2014-09-18 10:10     ` Michael Heerdegen
     [not found]     ` <mailman.9095.1411035073.1147.help-gnu-emacs@gnu.org>
2014-09-18 16:53       ` Pascal J. Bourguignon
2014-09-18 23:44         ` Stefan Monnier

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