Re: A Minimal PicoLisp DB/GUI Application, Importing twice

2015-01-16 Thread Alexander Burger
On Fri, Jan 16, 2015 at 08:30:47AM +0100, Alexander Burger wrote:
 Then something else must be wrong. The expression

Sorry! My fault!!

Jon was in the unlucky situation of having installed an intermediate
version, where the behavior of '+IdxFold' was just in the process of
small modifications.

With the current version 3.1.9.3 everything works as expected :)

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: altering lists (TUI program launcher)

2015-01-16 Thread marmorine
I had been meaning to ask this same question myself (and thanks to dave
for bringing it up). I wrote a quick launcher namely for the console,
it uses rotate to select options and settings, that changes the options
list in place and worked really well actually, I like the effect.

Then I wanted to insert INTO the options list using command line
switches, and there I was stumped at first, wondering what is
destructive, what is not and so forth (or what that even IS), finally
returned a rebuilt options list to an assignment, but thinking all
along that there must be a better way.

So made some changes using your suggestion with set and nth:

Replaced this:

#(de insert_opt (Id X)
#   (setq *opts
#  (make
# (for L *opts
#(if (= Id (car L))
#   (link (place 4 L (cons X (last L
#   (link L) ) ) ) ) )

with this:

(de insert_opt (Id X)
   (let L (nth (assoc Id *opts) 4)
  (set L (cons X (car L))) ) )

(this uses a let because I couldn't get a @ or @@ working...)

Usage:

By the way, if you fire up ez_opts (its fun), use j and k to select
options, h and l to rotate presets (the car in a presets list is the
active setting), and if the car is itself a list, you can rotate it with
the i key. That's it! The opts menu here is for (what else!) a
flashcard-like program, but could be anything.

***

#!/usr/bin/picolisp /usr/lib/picolisp/lib.l

(setq
   *ed2  ^[[2J *cud3i ^[[3B   *cr ^M *esc ^[
   *ezkeys '(h j k l i) )

(de cupyx (Y X)
   (pack ^[[ Y ; X H) )

(de rotl (L)
   (do (- (length L) 1) (rot L)) )

(de gopt (X)
   (car (last (assoc X *opts))) )

(de ez_opts ()
   (loop
  (prin *ed2 (cupyx 2 3) *title)
  (for L (reverse *opts)
 (prin (cupyx (cadr L) 3) (caddr L))
 (print (last L)) )
  (prin *cr)
  (T (not (member (setq K (key)) *ezkeys)) K)
  (case K
 (j (rotl *opts))
 (k (rot *opts))
 (l (rot (last (car *opts
 (h (rotl (last (car *opts
 (i (rot (car (last (car *opts) ) ) )

#(de insert_opt (Id X)
#   (setq *opts
#  (make
# (for L *opts
#(if (= Id (car L))
#   (link (place 4 L (cons X (last L
#   (link L) ) ) ) ) )

(de insert_opt (Id X)
   (let L (nth (assoc Id *opts) 4)
  (set L (cons X (car L))) ) )

(de l ()
   (let X (any (opt))
  (when (info X) (load X)) ) )
  
### end of lib-able ez_opts, start of cards ###

(setq *title CARDS: )

(setq *opts '(
   (hst 4 hosts:   (pc fb))
   (fil 6 files:   (de dgs paz saz))
   (sel 8 limit:   (5 10 20 50))
   (dsp 10 views:   ((1 2) (d_ de) (p de) (sp 1) (v de)))
   (sec 12 times:   ((-1 2) (-1 -1) (3 2) (1 1)))
   (duh 14 lkeys:   ((l) (l NIL)))
   (dia 16 sshow:   (1 2 5)) ))

(de main NIL
   (seed (time))
   (while ( (ez_opts) *esc) )
   # cards program code removed - exit with ESC! #
   (prin *ed2 ^[[1;1H)
   (raw NIL) )

# usage: -v 4 5 (adds (4 5) to views presets)
(de v ()
   (let X (str (opt))
  (when (lst? X) (insert_opt 'dsp X) ) ) )

# usage: -f xxx (file must exist, adds to presets)
(de f ()
   (let X (any (opt))
  (when (info X) (insert_opt 'fil X) ) ) )

(load T)
(main)
(bye)
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe