unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Elisp - Function returning a list
@ 2020-12-16  3:25 steve-humphreys
  2020-12-16  4:09 ` Jean Louis
  2020-12-16  4:13 ` Elisp - Function returning a list Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  3:25 UTC (permalink / raw)
  To: Help Gnu Emacs


I am having a go at making a function that returns a list of numbers, but need it interactive.
Unsure this is good

(defun typh-agenda-tgrd (tstr tend tskp)
   (interactive "n Start_Time: n End_Time: n Skip_Time: ")
   (number-sequence tstr tend tskp))




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

* Re: Elisp - Function returning a list
  2020-12-16  3:25 Elisp - Function returning a list steve-humphreys
@ 2020-12-16  4:09 ` Jean Louis
  2020-12-16  4:17   ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  4:30   ` Elisp - Function returning a list steve-humphreys
  2020-12-16  4:13 ` Elisp - Function returning a list Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 2 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-16  4:09 UTC (permalink / raw)
  To: steve-humphreys; +Cc: Help Gnu Emacs

* steve-humphreys@gmx.com <steve-humphreys@gmx.com> [2020-12-16 06:27]:
> 
> I am having a go at making a function that returns a list of numbers, but need it interactive.
> Unsure this is good
> 
 (defun typh-agenda-tgrd (tstr tend tskp)
    (interactive "n Start_Time: n End_Time: n Skip_Time: ")
    (number-sequence tstr tend tskp))

You are asking for time and function is asking for number. To me time
is more like 10:01 something rather than 10.

The function definitely returns the list and is handy.

(number-sequence 10 20 2) => (10 12 14 16 18 20)

You need some formatting here:

(interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")

You can test `interactive' before doing it.

(defun typh-agenda-tgrd (tstr tend tskp)
  (interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")
  (number-sequence tstr tend tskp))




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

* Re: Elisp - Function returning a list
  2020-12-16  3:25 Elisp - Function returning a list steve-humphreys
  2020-12-16  4:09 ` Jean Louis
@ 2020-12-16  4:13 ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16  4:13 UTC (permalink / raw)
  To: help-gnu-emacs

steve-humphreys wrote:

> I am having a go at making a function that returns a list of
> numbers, but need it interactive. Unsure this is good

The function that returns the list of number has already been
written, well, as you have discovered.

You need to do something else with it on top of that, otherwise
there isn't any point having it interactive.

> (defun typh-agenda-tgrd (tstr tend tskp)
>    (interactive "n Start_Time: n End_Time: n Skip_Time: ")
>    (number-sequence tstr tend tskp))

Hm, interesting indentation, did you really write that in
emacs-lisp-mode?

Yes, the interactive line is incorrect. You can do something
like this:

(defun num-seq (beg end skip)
  (interactive "nstart: \nnend: \nnskip: ")
  (message "%s" (number-sequence beg end skip) ))

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: Elisp - Function returning a list
  2020-12-16  4:09 ` Jean Louis
@ 2020-12-16  4:17   ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  5:04     ` steve-humphreys
  2020-12-16  4:30   ` Elisp - Function returning a list steve-humphreys
  1 sibling, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16  4:17 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> You can test `interactive' before doing it.

Yes, good idea. I.e., evaluate the interactive form. Use
`C-x e' after the right paren.

> (defun typh-agenda-tgrd (tstr tend tskp)
>   (interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")
>   (number-sequence tstr tend tskp))

Yes, but works, but doesn't make any sense. Try invoke it and
see what happens :)

--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: Elisp - Function returning a list
  2020-12-16  4:09 ` Jean Louis
  2020-12-16  4:17   ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  4:30   ` steve-humphreys
  2020-12-16  4:38     ` Yuri Khan
  1 sibling, 1 reply; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  4:30 UTC (permalink / raw)
  To: Jean Louis; +Cc: Help Gnu Emacs

For me 800 is 8 O'Clock

> Sent: Wednesday, December 16, 2020 at 5:09 AM
> From: "Jean Louis" <bugs@gnu.support>
> To: steve-humphreys@gmx.com
> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>
> Subject: Re: Elisp - Function returning a list
>
> * steve-humphreys@gmx.com <steve-humphreys@gmx.com> [2020-12-16 06:27]:
> >
> > I am having a go at making a function that returns a list of numbers, but need it interactive.
> > Unsure this is good
> >
>  (defun typh-agenda-tgrd (tstr tend tskp)
>     (interactive "n Start_Time: n End_Time: n Skip_Time: ")
>     (number-sequence tstr tend tskp))
>
> You are asking for time and function is asking for number. To me time
> is more like 10:01 something rather than 10.
>
> The function definitely returns the list and is handy.
>
> (number-sequence 10 20 2) => (10 12 14 16 18 20)
>
> You need some formatting here:
>
> (interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")
>
> You can test `interactive' before doing it.
>
> (defun typh-agenda-tgrd (tstr tend tskp)
>   (interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")
>   (number-sequence tstr tend tskp))
>
>
>



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

* Re: Elisp - Function returning a list
  2020-12-16  4:30   ` Elisp - Function returning a list steve-humphreys
@ 2020-12-16  4:38     ` Yuri Khan
  2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
                         ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: Yuri Khan @ 2020-12-16  4:38 UTC (permalink / raw)
  To: steve-humphreys; +Cc: Help Gnu Emacs, Jean Louis

On Wed, 16 Dec 2020 at 11:30, <steve-humphreys@gmx.com> wrote:
>
> For me 800 is 8 O'Clock

You cannot just do decimal arithmetics on times written in that format.

Start: 800  End: 1100  Skip: 45
Expected: 800 845 930 1015 1100
Actual: 800 845 890 935 980 1025 1070



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

* Re: Elisp - Function returning a list
  2020-12-16  4:38     ` Yuri Khan
@ 2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  5:20         ` steve-humphreys
  2020-12-16  5:18       ` steve-humphreys
  2020-12-16  5:33       ` Jean Louis
  2 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16  4:48 UTC (permalink / raw)
  To: help-gnu-emacs

Yuri Khan wrote:

>> For me 800 is 8 O'Clock
>
> You cannot just do decimal arithmetics on times written in
> that format.
>
> Start: 800  End: 1100  Skip: 45
> Expected: 800 845 930 1015 1100
> Actual: 800 845 890 935 980 1025 1070

Arithmetics on time? Is that the purpose?

If so, check out this:

;;; -*- lexical-binding: t -*-
;;;
;;; this file:
;;;   http://user.it.uu.se/~embe8573/emacs-init/time-cmp.el
;;;   https://dataswamp.org/~incal/emacs-init/time-cmp.el

(defun wall-clock-time (h1 m1 s1 h2 m2 s2)
  (let*((d   08) ; arbitrary day to use below, any would do
        (m   05) ; actually something cool happened that day
        (y 1978) ; in the history of climbing
        (total-seconds-1 (float-time (encode-time s1 m1 h1 d m y)))
        (total-seconds-2 (float-time (encode-time s2 m2 h2 d m y)))
        (s-diff (- total-seconds-2 total-seconds-1)) )
    (format-seconds "%.2h:%.2m:%.2s" s-diff) ))
(defalias 'wct #'wall-clock-time)
;; (wct 09 35 10 23 00 00) ; 13:24:50
;; (wct 09 35 10 09 35 20) ; 00:00:10

(defun time-between-times (year1 month1 day1
                           year2 month2 day2)
  (let*((seconds-then  (float-time (encode-time 0 0 0 day1 month1 year1)))
        (seconds-now   (float-time (encode-time 0 0 0 day2 month2 year2)))
        (seconds-diff  (- seconds-now seconds-then)) )
    (format-seconds "%yy %dd" seconds-diff)))
;;   (time-between-times 1958  4 13 1958 8 30) ; Tahiti Nui 2 -> 3,
;;                                             ; i.e. 0y 139d

(defun get-time-since (year month day)
  (interactive "nyear: \nnmonth: \nnday: ")
  (message "%s"
           (format-seconds
            "%yy %dd"
            (float-time
             (time-since (encode-time 0 0 0 day month year)) ))))
;; (get-time-since 2011 09 27) ; 8y 228d @ 2020-05-10

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: Elisp - Function returning a list
  2020-12-16  4:17   ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  5:04     ` steve-humphreys
  2020-12-16  5:39       ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  5:04 UTC (permalink / raw)
  To: moasenwood; +Cc: help-gnu-emacs


Here's how it makes sense!

Is using "setq frq" and "setq tim" good

--------- code --------

(defun agenda-tgrd (&optional tstr tend tskp)
   "Sets the time grid for the agenda."
   (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
   (let ( (tstr (or tstr 800))
          (tend (or tend 1500))
          (tskp (or tskp 100))
          frq tim)
      (setq frq '(daily today))
      (setq tim (number-sequence tstr tend tskp))
      (setq org-agenda-time-grid `(,frq ,tim "------" "---"))) )





> Sent: Wednesday, December 16, 2020 at 5:17 AM
> From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: Elisp - Function returning a list
>
> Jean Louis wrote:
>
> > You can test `interactive' before doing it.
>
> Yes, good idea. I.e., evaluate the interactive form. Use
> `C-x e' after the right paren.
>
> > (defun typh-agenda-tgrd (tstr tend tskp)
> >   (interactive "nStart Time: \nnEnd Time: \nnSkip_Time: ")
> >   (number-sequence tstr tend tskp))
>
> Yes, but works, but doesn't make any sense. Try invoke it and
> see what happens :)
>
> --
> underground experts united
> http://user.it.uu.se/~embe8573
> https://dataswamp.org/~incal
>
>
>



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

* Re: Elisp - Function returning a list
  2020-12-16  4:38     ` Yuri Khan
  2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  5:18       ` steve-humphreys
  2020-12-16  5:33       ` Jean Louis
  2 siblings, 0 replies; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  5:18 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Help Gnu Emacs, Jean Louis



> Sent: Wednesday, December 16, 2020 at 5:38 AM
> From: "Yuri Khan" <yuri.v.khan@gmail.com>
> To: steve-humphreys@gmx.com
> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>, "Jean Louis" <bugs@gnu.support>
> Subject: Re: Elisp - Function returning a list
>
> On Wed, 16 Dec 2020 at 11:30, <steve-humphreys@gmx.com> wrote:
> >
> > For me 800 is 8 O'Clock
>
> You cannot just do decimal arithmetics on times written in that format.
>
> Start: 800  End: 1100  Skip: 45
> Expected: 800 845 930 1015 1100
> Actual: 800 845 890 935 980 1025 1070

Bugger!



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

* Re: Elisp - Function returning a list
  2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  5:20         ` steve-humphreys
  0 siblings, 0 replies; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  5:20 UTC (permalink / raw)
  To: moasenwood; +Cc: help-gnu-emacs

> Sent: Wednesday, December 16, 2020 at 5:48 AM
> From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: Elisp - Function returning a list
>
> Yuri Khan wrote:
>
> >> For me 800 is 8 O'Clock
> >
> > You cannot just do decimal arithmetics on times written in
> > that format.
> >
> > Start: 800  End: 1100  Skip: 45
> > Expected: 800 845 930 1015 1100
> > Actual: 800 845 890 935 980 1025 1070
>
> Arithmetics on time? Is that the purpose?

Yes, to set the agenda time grid.

> If so, check out this:
>
> ;;; -*- lexical-binding: t -*-
> ;;;
> ;;; this file:
> ;;;   http://user.it.uu.se/~embe8573/emacs-init/time-cmp.el
> ;;;   https://dataswamp.org/~incal/emacs-init/time-cmp.el
>
> (defun wall-clock-time (h1 m1 s1 h2 m2 s2)
>   (let*((d   08) ; arbitrary day to use below, any would do
>         (m   05) ; actually something cool happened that day
>         (y 1978) ; in the history of climbing
>         (total-seconds-1 (float-time (encode-time s1 m1 h1 d m y)))
>         (total-seconds-2 (float-time (encode-time s2 m2 h2 d m y)))
>         (s-diff (- total-seconds-2 total-seconds-1)) )
>     (format-seconds "%.2h:%.2m:%.2s" s-diff) ))
> (defalias 'wct #'wall-clock-time)
> ;; (wct 09 35 10 23 00 00) ; 13:24:50
> ;; (wct 09 35 10 09 35 20) ; 00:00:10
>
> (defun time-between-times (year1 month1 day1
>                            year2 month2 day2)
>   (let*((seconds-then  (float-time (encode-time 0 0 0 day1 month1 year1)))
>         (seconds-now   (float-time (encode-time 0 0 0 day2 month2 year2)))
>         (seconds-diff  (- seconds-now seconds-then)) )
>     (format-seconds "%yy %dd" seconds-diff)))
> ;;   (time-between-times 1958  4 13 1958 8 30) ; Tahiti Nui 2 -> 3,
> ;;                                             ; i.e. 0y 139d
>
> (defun get-time-since (year month day)
>   (interactive "nyear: \nnmonth: \nnday: ")
>   (message "%s"
>            (format-seconds
>             "%yy %dd"
>             (float-time
>              (time-since (encode-time 0 0 0 day month year)) ))))
> ;; (get-time-since 2011 09 27) ; 8y 228d @ 2020-05-10
>
> --
> underground experts united
> http://user.it.uu.se/~embe8573
> https://dataswamp.org/~incal
>
>
>



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

* Re: Elisp - Function returning a list
  2020-12-16  4:38     ` Yuri Khan
  2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  5:18       ` steve-humphreys
@ 2020-12-16  5:33       ` Jean Louis
  2020-12-16  5:42         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-16  5:33 UTC (permalink / raw)
  To: Yuri Khan; +Cc: Help Gnu Emacs, steve-humphreys

* Yuri Khan <yuri.v.khan@gmail.com> [2020-12-16 07:39]:
> On Wed, 16 Dec 2020 at 11:30, <steve-humphreys@gmx.com> wrote:
> >
> > For me 800 is 8 O'Clock
> 
> You cannot just do decimal arithmetics on times written in that format.
> 
> Start: 800  End: 1100  Skip: 45
> Expected: 800 845 930 1015 1100
> Actual: 800 845 890 935 980 1025 1070

I am using external tools that have features built-in, PostgreSQL
database has it.

(defun my-time-range (time-start add-hours interval-in-minutes)
  (interactive "MBegin time by format HH:MM: \nMFor how many hours later? \nMInterval in minutes: ")
  (let* ((sql (format "SELECT to_char(t.hour::timestamp,'HH:MI') FROM generate_series('2020-01-01 %s:00'::timestamp, '2020-01-01 %s:00'::timestamp + interval '%s hours',  '%s minutes'::interval) as t(hour);" time-start time-start add-hours interval-in-minutes))
	 (command (format "psql -tc \"%s\"" sql)))
    (insert (shell-command-to-string command))))

With: 10:00 and 20 hours later with interval of 35 minutes, result is:

 10:00
 10:35
 11:10
 11:45
 12:20
 12:55
 01:30
 02:05
 02:40
 03:15
 03:50
 04:25
 05:00
 05:35
 06:10
 06:45
 07:20
 07:55
 08:30
 09:05
 09:40
 10:15
 10:50
 11:25
 12:00
 12:35
 01:10
 01:45
 02:20
 02:55
 03:30
 04:05
 04:40
 05:15
 05:50

To make a list from external command, then:

(defun my-time-range (time-start add-hours interval-in-minutes)
  (interactive "MBegin time by format HH:MM: \nMFor how many hours later? \nMInterval in minutes: ")
  (let* ((sql (format "SELECT to_char(t.hour::timestamp,'HH:MI') FROM generate_series('2020-01-01 %s:00'::timestamp, '2020-01-01 %s:00'::timestamp + interval '%s hours',  '%s minutes'::interval) as t(hour);" time-start time-start add-hours interval-in-minutes))
	 (command (format "psql -qtc \"%s\"" sql))
	 (result (shell-command-to-string command))
	 (list (split-string result "\n"))
	 (list (mapcar #'string-trim list))
	 (list (delete-if #'seq-empty-p list)))
    list))

(my-time-range "10:00" "20" "35") => ("10:00" "10:35" "11:10" "11:45" "12:20" "12:55" "01:30" "02:05" "02:40" "03:15" "03:50" "04:25" "05:00" "05:35" "06:10" "06:45" "07:20" "07:55" "08:30" "09:05" "09:40" "10:15" "10:50" "11:25" "12:00" "12:35" "01:10" "01:45" "02:20" "02:55" "03:30" "04:05" "04:40" "05:15" "05:50")

Maybe such Emacs package does exist but if little fiddling with
the external tool helps me to get the range, then I use external
tool.

Jean



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

* Re: Elisp - Function returning a list
  2020-12-16  5:04     ` steve-humphreys
@ 2020-12-16  5:39       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  7:36         ` steve-humphreys
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16  5:39 UTC (permalink / raw)
  To: help-gnu-emacs

steve-humphreys wrote:

> Is using "setq frq" and "setq tim" good
>
> (defun agenda-tgrd (&optional tstr tend tskp)
>    "Sets the time grid for the agenda."
>    (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
>    (let ( (tstr (or tstr 800))
>           (tend (or tend 1500))
>           (tskp (or tskp 100))
>           frq tim)
>       (setq frq '(daily today))
>       (setq tim (number-sequence tstr tend tskp))
>       (setq org-agenda-time-grid `(,frq ,tim "------" "---"))) )

It is better to do all computation in the `let's, then use
them. No `setq' needed.

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: Elisp - Function returning a list
  2020-12-16  5:33       ` Jean Louis
@ 2020-12-16  5:42         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16  8:01           ` Elisp - Function returning a sequence of times Jean Louis
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16  5:42 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> I am using external tools

Me too, here is some zsh:

  https://dataswamp.org/~incal/conf/.zsh/time

and a screenshot:

  https://dataswamp.org/~incal/pimgs/comp/clocks.png

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: Elisp - Function returning a list
  2020-12-16  5:39       ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  7:36         ` steve-humphreys
  2020-12-16  8:55           ` Joost Kremers
                             ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  7:36 UTC (permalink / raw)
  To: moasenwood; +Cc: help-gnu-emacs

> Sent: Wednesday, December 16, 2020 at 6:39 AM
> From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: Elisp - Function returning a list
>
> steve-humphreys wrote:
>
> > Is using "setq frq" and "setq tim" good
> >
> > (defun agenda-tgrd (&optional tstr tend tskp)
> >    "Sets the time grid for the agenda."
> >    (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
> >    (let ( (tstr (or tstr 800))
> >           (tend (or tend 1500))
> >           (tskp (or tskp 100))
> >           frq tim)
> >       (setq frq '(daily today))
> >       (setq tim (number-sequence tstr tend tskp))
> >       (setq org-agenda-time-grid `(,frq ,tim "------" "---"))) )
>
> It is better to do all computation in the `let's, then use
> them. No `setq' needed.

Example? Is there anything written about it?

> --
> underground experts united
> http://user.it.uu.se/~embe8573
> https://dataswamp.org/~incal
>
>
>



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

* Re: Elisp - Function returning a sequence of times
  2020-12-16  5:42         ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16  8:01           ` Jean Louis
  2020-12-16  9:05             ` steve-humphreys
  2020-12-16 21:54             ` Michael Heerdegen
  0 siblings, 2 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-16  8:01 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-16 08:53]:
> Jean Louis wrote:
> 
> > I am using external tools
> 
> Me too, here is some zsh:
> 
>   https://dataswamp.org/~incal/conf/.zsh/time
> 
> and a screenshot:
> 
>   https://dataswamp.org/~incal/pimgs/comp/clocks.png

Looks like prompt, is it? Huge calendar prompt. OK fine. Could be also
used to show upcoming appointments.

Emacs must have those date/time features and adding times
somewhere. But where?

(info "(elisp) Time Calculations")

time-add is a built-in function in ‘src/timefns.c’.

(time-add A B) 

In the manual there is more references:

          (let ((time (decode-time nil nil t))
                (delta (make-decoded-time :month 2)))
            (encode-time (decoded-time-add time delta)))

(make-decoded-time :hour 10 :minute 20) => (nil 20 10 nil nil nil nil nil nil)

This adds 360 seconds to current-time:
(time-add (current-time) 360)

(defun my-days (days)
  "Returns seconds for days"
  (* 24 3600 days))

(defun my-minutes (minutes)
  "Returns seconds for minutes"
  (* 60 minutes))

(my-minutes 35)
2100

(format-time-string "%H:%M" (current-time))
"10:57"

(time-add (current-time) (my-minutes 35))
(24537 50767 754967 229000)

(format-time-string "%H:%M" (time-add (current-time) (my-minutes 35)))
"11:33"

So adding works in plain Emacs.

What I do not know is how to convert 10:57 time to TIME format
like: (24537 50767 754967 229000)

And because function requires only time as hours and minutes, the
date would not matter.

Once that is found, how to convert any TIME:MINUTES to that TIME
format: (24537 50767 754967 229000) then it will be easy to make
function that adds minutes or specified hours or minutes to it
and produces a sequence.

Jean





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

* Re: Elisp - Function returning a list
  2020-12-16  7:36         ` steve-humphreys
@ 2020-12-16  8:55           ` Joost Kremers
  2020-12-16 10:25           ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16 11:52           ` let, let*, oh, why [was: Elisp - Function returning a list] tomas
  2 siblings, 0 replies; 60+ messages in thread
From: Joost Kremers @ 2020-12-16  8:55 UTC (permalink / raw)
  To: steve-humphreys; +Cc: help-gnu-emacs, moasenwood


On Wed, Dec 16 2020, steve-humphreys@gmx.com wrote:
>> Sent: Wednesday, December 16, 2020 at 6:39 AM
>> From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>
>> To: help-gnu-emacs@gnu.org
>> Subject: Re: Elisp - Function returning a list
>>
>> steve-humphreys wrote:
>>
>> > Is using "setq frq" and "setq tim" good
>> >
>> > (defun agenda-tgrd (&optional tstr tend tskp)
>> >    "Sets the time grid for the agenda."
>> >    (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
>> >    (let ( (tstr (or tstr 800))
>> >           (tend (or tend 1500))
>> >           (tskp (or tskp 100))
>> >           frq tim)
>> >       (setq frq '(daily today))
>> >       (setq tim (number-sequence tstr tend tskp))
>> >       (setq org-agenda-time-grid `(,frq ,tim "------" "---"))) )
>>
>> It is better to do all computation in the `let's, then use
>> them. No `setq' needed.
>
> Example? Is there anything written about it?

You can use `let*` instead of `let`:

```
(defun agenda-tgrd (&optional tstr tend tskp)
  "Set the time grid for the agenda."
  (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
  (let* ((tstr (or tstr 800))
         (tend (or tend 1500))
         (tskp (or tskp 100))
         (frq '(daily today))
         (tim (number-sequence tstr tend tskp)))
    (setq org-agenda-time-grid (list frq tim "------" "---"))))
```

(You really only need `let*` for `tim`, in this case; even in your version there
was no need to give `frq` a value with `setq`).

Some small nitpicks: I'd use `list` instead of backquote-unquote to create
a list. And the doc string conventions in Elisp say to use the imperative
instead of third person singular, so "Set the time grid" rather than "Sets the
time grid". But those are stylistic and therefore personal choices, of course. :-)

-- 
Joost Kremers
Life has its moments



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

* Re: Elisp - Function returning a sequence of times
  2020-12-16  8:01           ` Elisp - Function returning a sequence of times Jean Louis
@ 2020-12-16  9:05             ` steve-humphreys
  2020-12-16  9:20               ` Joost Kremers
  2020-12-16 21:54             ` Michael Heerdegen
  1 sibling, 1 reply; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  9:05 UTC (permalink / raw)
  To: Jean Louis; +Cc: help-gnu-emacs

I have done something like this, but need help to finalise the actual function.
Do you agree on this solution?


(defun timfutur ()
   (interactive)
   (setq tm 845)
   (setq tsk 30)
   (setq thr (/ tm 100))
   (setq tmn (- tm (* thr 100)))
   (setq tmn-futur (% (+ tmn tsk) 60))
   (setq thr-futur (% (+ (/ (+ tmn tsk) 60) thr) 24))
   (message "%d %d %d%d" thr tmn thr-futur tmn-futur))



> Sent: Wednesday, December 16, 2020 at 9:01 AM
> From: "Jean Louis" <bugs@gnu.support>
> To: help-gnu-emacs@gnu.org
> Subject: Re: Elisp - Function returning a sequence of times
>
> * Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-16 08:53]:
> > Jean Louis wrote:
> > 
> > > I am using external tools
> > 
> > Me too, here is some zsh:
> > 
> >   https://dataswamp.org/~incal/conf/.zsh/time
> > 
> > and a screenshot:
> > 
> >   https://dataswamp.org/~incal/pimgs/comp/clocks.png
> 
> Looks like prompt, is it? Huge calendar prompt. OK fine. Could be also
> used to show upcoming appointments.
> 
> Emacs must have those date/time features and adding times
> somewhere. But where?
> 
> (info "(elisp) Time Calculations")
> 
> time-add is a built-in function in ‘src/timefns.c’.
> 
> (time-add A B) 
> 
> In the manual there is more references:
> 
>           (let ((time (decode-time nil nil t))
>                 (delta (make-decoded-time :month 2)))
>             (encode-time (decoded-time-add time delta)))
> 
> (make-decoded-time :hour 10 :minute 20) => (nil 20 10 nil nil nil nil nil nil)
> 
> This adds 360 seconds to current-time:
> (time-add (current-time) 360)
> 
> (defun my-days (days)
>   "Returns seconds for days"
>   (* 24 3600 days))
> 
> (defun my-minutes (minutes)
>   "Returns seconds for minutes"
>   (* 60 minutes))
> 
> (my-minutes 35)
> 2100
> 
> (format-time-string "%H:%M" (current-time))
> "10:57"
> 
> (time-add (current-time) (my-minutes 35))
> (24537 50767 754967 229000)
> 
> (format-time-string "%H:%M" (time-add (current-time) (my-minutes 35)))
> "11:33"
> 
> So adding works in plain Emacs.
> 
> What I do not know is how to convert 10:57 time to TIME format
> like: (24537 50767 754967 229000)
> 
> And because function requires only time as hours and minutes, the
> date would not matter.
> 
> Once that is found, how to convert any TIME:MINUTES to that TIME
> format: (24537 50767 754967 229000) then it will be easy to make
> function that adds minutes or specified hours or minutes to it
> and produces a sequence.
> 
> Jean
> 
> 
> 
>



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

* Re: Elisp - Function returning a sequence of times
  2020-12-16  9:05             ` steve-humphreys
@ 2020-12-16  9:20               ` Joost Kremers
  2020-12-16  9:40                 ` steve-humphreys
  0 siblings, 1 reply; 60+ messages in thread
From: Joost Kremers @ 2020-12-16  9:20 UTC (permalink / raw)
  To: steve-humphreys; +Cc: help-gnu-emacs


On Wed, Dec 16 2020, steve-humphreys@gmx.com wrote:
> I have done something like this, but need help to finalise the actual function.
> Do you agree on this solution?
>
>
> (defun timfutur ()
>    (interactive)
>    (setq tm 845)
>    (setq tsk 30)
>    (setq thr (/ tm 100))
>    (setq tmn (- tm (* thr 100)))
>    (setq tmn-futur (% (+ tmn tsk) 60))
>    (setq thr-futur (% (+ (/ (+ tmn tsk) 60) thr) 24))
>    (message "%d %d %d%d" thr tmn thr-futur tmn-futur))

My humble opinion: try to avoid `setq` at all cost. It has some legitimate uses,
but they're far and few between.

```
(defun timfutur ()
  (interactive)
  (let* ((tm 845)
         (tsk 30)
         (thr (/ tm 100))
         (tmn (- tm (* thr 100)))
         (tmn-futur (% (+ tmn tsk) 60))
         (thr-futur (% (+ (/ (+ tmn tsk) 60) thr) 24)))
    (message "%d %d %d%d" thr tmn thr-futur tmn-futur)))
```

-- 
Joost Kremers
Life has its moments



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

* Re: Elisp - Function returning a sequence of times
  2020-12-16  9:20               ` Joost Kremers
@ 2020-12-16  9:40                 ` steve-humphreys
  0 siblings, 0 replies; 60+ messages in thread
From: steve-humphreys @ 2020-12-16  9:40 UTC (permalink / raw)
  To: Joost Kremers; +Cc: help-gnu-emacs

Just made it quick, the focus is on the calculation for the new time.

> Sent: Wednesday, December 16, 2020 at 10:20 AM
> From: "Joost Kremers" <joostkremers@fastmail.fm>
> To: steve-humphreys@gmx.com
> Cc: help-gnu-emacs@gnu.org
> Subject: Re: Elisp - Function returning a sequence of times
>
>
> On Wed, Dec 16 2020, steve-humphreys@gmx.com wrote:
> > I have done something like this, but need help to finalise the actual function.
> > Do you agree on this solution?
> >
> >
> > (defun timfutur ()
> >    (interactive)
> >    (setq tm 845)
> >    (setq tsk 30)
> >    (setq thr (/ tm 100))
> >    (setq tmn (- tm (* thr 100)))
> >    (setq tmn-futur (% (+ tmn tsk) 60))
> >    (setq thr-futur (% (+ (/ (+ tmn tsk) 60) thr) 24))
> >    (message "%d %d %d%d" thr tmn thr-futur tmn-futur))
>
> My humble opinion: try to avoid `setq` at all cost. It has some legitimate uses,
> but they're far and few between.
>
> ```
> (defun timfutur ()
>   (interactive)
>   (let* ((tm 845)
>          (tsk 30)
>          (thr (/ tm 100))
>          (tmn (- tm (* thr 100)))
>          (tmn-futur (% (+ tmn tsk) 60))
>          (thr-futur (% (+ (/ (+ tmn tsk) 60) thr) 24)))
>     (message "%d %d %d%d" thr tmn thr-futur tmn-futur)))
> ```
>
> --
> Joost Kremers
> Life has its moments
>
>



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

* Re: Elisp - Function returning a list
  2020-12-16  7:36         ` steve-humphreys
  2020-12-16  8:55           ` Joost Kremers
@ 2020-12-16 10:25           ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16 11:52           ` let, let*, oh, why [was: Elisp - Function returning a list] tomas
  2 siblings, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16 10:25 UTC (permalink / raw)
  To: help-gnu-emacs

steve-humphreys wrote:

>>> Is using "setq frq" and "setq tim" good
>>>
>>> (defun agenda-tgrd (&optional tstr tend tskp)
>>>    "Sets the time grid for the agenda."
>>>    (interactive "n StartTime: \nn EndTime: \nn SkipTime: ")
>>>    (let ( (tstr (or tstr 800))
>>>           (tend (or tend 1500))
>>>           (tskp (or tskp 100))
>>>           frq tim)
>>>       (setq frq '(daily today))
>>>       (setq tim (number-sequence tstr tend tskp))
>>>       (setq org-agenda-time-grid `(,frq ,tim "------" "---"))) )
>>
>> It is better to do all computation in the `let's, then use
>> them. No `setq' needed.
>
> Example? Is there anything written about it?

Here, use `let*' instead of `let'. You already know how to do
let and to do the computation. So you don't need an example...

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16  7:36         ` steve-humphreys
  2020-12-16  8:55           ` Joost Kremers
  2020-12-16 10:25           ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16 11:52           ` tomas
  2020-12-16 14:13             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 1 reply; 60+ messages in thread
From: tomas @ 2020-12-16 11:52 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 4131 bytes --]

On Wed, Dec 16, 2020 at 08:36:03AM +0100, steve-humphreys@gmx.com wrote:
> > From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>

[...]

> > It is better to do all computation in the `let's, then use
> > them. No `setq' needed.

I generally agree, but not 100% (all generalizations suck, you know ;-)

> Example? Is there anything written about it?

What setq does is to "search upwards" from where it is until it
"finds the variable", and then sets its value as instructed.

If it doesn't find that variable, it creates a new one at the
"top level", to be able to accomplish this task.

I put "search upwards" and "find the variable" in quotes, because
they deserve some explanation. I'll limit myself here to the
"upwards" part:

What "upwards" means depends on whether you are under dynamic
scope (traditional) or lexical scope (more modern, recommended
almost always).

Under dynamic scope, the search for the variable goes up the call
chain: if the function where the setq is in "sees" that variable,
then it's there. Otherwise it asks its caller, and so on.

Under lexical scope, the search considers the source code: if
that variable is visible/defined in the current expression (think
"block", if you're coming from C/Perl/Python/PHP/Java), then that's
it. Otherwise go look in the enclosing expression.

Needless to say, this is the source of lots of fun: if you are
doing something in your code and import a snippet of code from
elsewhere (for the lexical case) or just call some code elsewhere,
and "they" trample on your "variables", spooky things happen.

In the dynamic case, those things are very spooky. Imagine
you have some code:

  (setq x 3)
  (setq y 4)

and call on Tomas's library to get the last mouse click coordinates.

  (setq mouse-x (car (tomas-coords)))

Jane's library does this (CAVEAT: there are nicer ways to do this,
apart from the "obvious" error that this function tramples over
whatever values mouse-pos, x, and y might have "globally".

I'm doing that to have a small working example. I repeat: DON'T DO
IT THIS WAY ;-)

  (defun tomas-coords ()
    (setq mouse-pos (mouse-position)) ; elisp manual 29.16
    ;; mouse-position has as first arg the frame. Let's get rid of that:
    (setq x (cadr mouse-pos))
    (setq y (cddr mouse-pos))
    (cons x y)) ;; return the pair (x . y)

Now your 'x' above isn't 3 anymore, but has some random value depending
on where your user was wiggling around the mouse. Oops.

Now under lexical scope things aren't so bleak, but still annoying.

That's why function arguments and let are there. They create a
kind of barrier for private variable names. A slightly better
version of the above function would then be:

  (defun tomas-coords ()
    (let ((mouse-pos (mouse-position))) ; elisp manual 29.16
      ;; mouse-position has as first arg the frame. Let's get rid of that:
      (let ((x (cadr mouse-pos))
            (y (cddr mouse-pos)))
        (cons x y)))) ;; return the pair (x . y)
      
So the `let' is telling elisp: "look, we are introducing here a
new variable called `x'. It has nothing to do with any other `x'
out/up there". Or "Any Similarity to Persons Living or Dead is
Purely Coincidental", as some like to put it. Still, the "here"
in the phrase above is interpreted differently depending on
whether we're "flying" dynamically or lexically.

Why the two nested `let's above, you ask? Well, in the variable-
assignment part of a let each arm is independent of the others.

The line above ...(y (cddr mouse-pos)) doesn't "see" the `x'
defined above it. It is as if all those parts were happening
at the same time. So for the `x' and `y' assignments to "see"
the just assigned `mouse-pos', we must `let' that happen
before.

That's why `let*' has been invented. Basically,

  (let* ((foo blah)
         (bar bleh)
         (baz mih))
    ...)

is equivalent, but arguably more readable than

  (let ((foo blah))
     (let ((bar bleh))
       (let ((baz mih))
         ...)))

HTH
 - t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 11:52           ` let, let*, oh, why [was: Elisp - Function returning a list] tomas
@ 2020-12-16 14:13             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-16 15:10               ` Jean Louis
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-16 14:13 UTC (permalink / raw)
  To: help-gnu-emacs

tomas wrote:

> What "upwards" means depends on whether you are under
> dynamic scope (traditional) or lexical scope (more modern,
> recommended almost always).

Indeed, put this topmost in your Elisp files:

;;; -*- lexical-binding: t -*-

Then use `let' and `let*'.

Write code as one intuitively does, based on functions that do
stuff and/or return stuff.

When done, byte compile.

Simple simple simple. Actually it is much easier to do right
than to do wrong in this case.

But ... to be fair it also works like this:

(defvar some-var)
(setq some-var 0) ; 0

(defun test-var ()
  (let ((some-var 1))
    (setq some-var 2)
    some-var) )

(test-var) ; 2

some-var ; 0

But it is still ugly and error prone. If you make a typo it
won't tell you when you evaluate the function:

(defvar some-var)
(setq some-var 0) ; 0

(defun test-var ()
  (let ((some-var 1))
    (setq some-vari 2) ; oups
    some-var) )

(test-var) ; 1 ???

some-var ; 0

But the byte-compiler will:

  In test-var:
  geh.el:210:11: Warning: assignment to free variable ‘some-vari’

So, better to do all computation in the `let's, then use them
in the body. Yes, nest lets where needed... let is supposedly
parallel while let* is sequential but in practice it most
often means with let* you can see the vars and their values
later or in the varlist...

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 14:13             ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-16 15:10               ` Jean Louis
  2020-12-16 15:58                 ` Stefan Monnier
  2020-12-18 14:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-16 15:10 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-16 17:34]:
> tomas wrote:
> 
> > What "upwards" means depends on whether you are under
> > dynamic scope (traditional) or lexical scope (more modern,
> > recommended almost always).
> 
> Indeed, put this topmost in your Elisp files:
> 
> ;;; -*- lexical-binding: t -*-

That line is somehow out of sight for me so I just use:

(setq lexical-binding t) as first line in the file.

> Then use `let' and `let*'.
> 
> Write code as one intuitively does, based on functions that do
> stuff and/or return stuff.
> 
> When done, byte compile.
> 
> Simple simple simple. Actually it is much easier to do right
> than to do wrong in this case.

I do follow that workflow as you explained, but it took me time to
find out about it. I do not find it all simple as workflows like that
are not described anywhere. Functions are described in the manual and
everything is there but general practical workflows are not there. In
other words instructions are not well integrated.

Environments like Dr. Racket also try to be self-documented. I still
find Emacs better self-documented than other similar environments.

There are no big deals with dynamic variables as well, one can program
for years without real problem. Then if programmer knows the problem
one can continue programming for decades without entering into
problem. 

> But the byte-compiler will:
> 
>   In test-var:
>   geh.el:210:11: Warning: assignment to free variable ‘some-vari’

Good to have such messages.




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 15:10               ` Jean Louis
@ 2020-12-16 15:58                 ` Stefan Monnier
  2020-12-16 18:37                   ` Jean Louis
  2020-12-18 14:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 1 reply; 60+ messages in thread
From: Stefan Monnier @ 2020-12-16 15:58 UTC (permalink / raw)
  To: help-gnu-emacs

> That line is somehow out of sight for me so I just use:
> (setq lexical-binding t) as first line in the file.

That doesn't do what you usually want.


        Stefan




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 15:58                 ` Stefan Monnier
@ 2020-12-16 18:37                   ` Jean Louis
  2020-12-16 19:04                     ` Stefan Monnier
  0 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-16 18:37 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs

* Stefan Monnier <monnier@iro.umontreal.ca> [2020-12-16 18:59]:
> > That line is somehow out of sight for me so I just use:
> > (setq lexical-binding t) as first line in the file.
> 
> That doesn't do what you usually want.

Help me to understand why?

Jean



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 18:37                   ` Jean Louis
@ 2020-12-16 19:04                     ` Stefan Monnier
  2020-12-16 20:05                       ` Jean Louis
                                         ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: Stefan Monnier @ 2020-12-16 19:04 UTC (permalink / raw)
  To: Jean Louis; +Cc: help-gnu-emacs

>> That doesn't do what you usually want.
> Help me to understand why?

https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00750.html


        Stefan




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 19:04                     ` Stefan Monnier
@ 2020-12-16 20:05                       ` Jean Louis
  2020-12-16 20:34                         ` tomas
  2020-12-16 20:06                       ` tomas
  2020-12-18 15:08                       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-16 20:05 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs

* Stefan Monnier <monnier@iro.umontreal.ca> [2020-12-16 22:05]:
> >> That doesn't do what you usually want.
> > Help me to understand why?
> 
> https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00750.html

Is it possible to show example that it will not work as expected?




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 19:04                     ` Stefan Monnier
  2020-12-16 20:05                       ` Jean Louis
@ 2020-12-16 20:06                       ` tomas
  2020-12-18 15:08                       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 0 replies; 60+ messages in thread
From: tomas @ 2020-12-16 20:06 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 266 bytes --]

On Wed, Dec 16, 2020 at 02:04:59PM -0500, Stefan Monnier wrote:
> >> That doesn't do what you usually want.
> > Help me to understand why?
> 
> https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00750.html

Heh. You've beat me to it :)

Cheers
-- t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 20:05                       ` Jean Louis
@ 2020-12-16 20:34                         ` tomas
  0 siblings, 0 replies; 60+ messages in thread
From: tomas @ 2020-12-16 20:34 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 1299 bytes --]

On Wed, Dec 16, 2020 at 11:05:36PM +0300, Jean Louis wrote:
> * Stefan Monnier <monnier@iro.umontreal.ca> [2020-12-16 22:05]:
> > >> That doesn't do what you usually want.
> > > Help me to understand why?
> > 
> > https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00750.html
> 
> Is it possible to show example that it will not work as expected?

Compose a file roughly like this:

  (let ((canary 'lexical))
    (defun test-binding ()
      (insert (format "binding is %S" canary))))

  (let ((canary 'dynamic))
    (test-binding))

Now save it, say as /tmp/foo.el.

Next, from some buffer (say *scratch*), do M-x load-file <ENTER> /tmp/foo.el <ENTER>.

This will put in your buffer "binding is dynamic" (since that's the
default).

Now test again

 (1) having inserted (setq lexical-binding t) at the top of the above
     file

 (2)  having inserted -*- lexical-binding: t -*- at the top of the
      above file.

Compare results. Discuss :-)

(Cheatsheet: in case (1), the variable `lexical-binding' has been set
in the buffer from which you called `load-file', which was, if you
chose the same setting as me, *scratch*. In the second case, the
setting of the lexical binding was effective for the source file
itself, i.e. foo.el)

Cheers
 - t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: Elisp - Function returning a sequence of times
  2020-12-16  8:01           ` Elisp - Function returning a sequence of times Jean Louis
  2020-12-16  9:05             ` steve-humphreys
@ 2020-12-16 21:54             ` Michael Heerdegen
  1 sibling, 0 replies; 60+ messages in thread
From: Michael Heerdegen @ 2020-12-16 21:54 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis <bugs@gnu.support> writes:

> (time-add A B) 

> (make-decoded-time :hour 10 :minute 20) => (nil 20 10 nil nil nil nil nil nil)
>
> This adds 360 seconds to current-time:
> (time-add (current-time) 360)

BTW, this also works:

| (format-time-string "%Mm %Ss" (seconds-to-time 150)) ==> "02m 30s"

i.e. it's possible to convert a number of seconds to a timestamp
(string).

Michael.




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 15:10               ` Jean Louis
  2020-12-16 15:58                 ` Stefan Monnier
@ 2020-12-18 14:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-18 17:42                   ` Jean Louis
  1 sibling, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-18 14:27 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

>> Then use `let' and `let*'.
>> 
>> Write code as one intuitively does, based on functions that
>> do stuff and/or return stuff.
>> 
>> When done, byte compile.
>> 
>> Simple simple simple. Actually it is much easier to do
>> right than to do wrong in this case.
>
> I do follow that workflow as you explained, but it took me time to
> find out about it. I do not find it all simple as workflows like that
> are not described anywhere.

Well, it is intuitive to use let instead of creating global
variables outside of the function. Isn't it? Well, to me it
is. lexical-scope is intuitive in that it makes the most sense
and is what you are used to from other languages, yeah, Lisp
wasn't my first language. I think Basic, then C?

> There are no big deals with dynamic variables as well, one
> can program for years without real problem.

That's right, I did so for many years without knowing about
this distinction at all, what I remember the transition to
lexical was done with only a few very minor changes. But then
I again, to me lexical is they way I always did it and it
makes the most sense, you enclose the code in blocks and
levels, and what you do, you don't want anything else to
interfere with it, and you don't want it to interfere with
anything else outside of it...

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-16 19:04                     ` Stefan Monnier
  2020-12-16 20:05                       ` Jean Louis
  2020-12-16 20:06                       ` tomas
@ 2020-12-18 15:08                       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-18 15:08 UTC (permalink / raw)
  To: help-gnu-emacs

Stefan Monnier wrote:

>>> That doesn't do what you usually want.
>>
>> Help me to understand why?
>
> https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg00750.html

Maybe a line in the docstring of `lexical-binding' would be
in place?

I always did ;;; -*- lexical-binding: t -*- and it does make
sense that (setq lexical-binding t) doesn't "work" but one can
easily imagine a misunderstanding taking place. Or we just saw
it, actually, with a reference at that, so we don't even have
to imagine...

*chuckle*

This only underscores what J. Louis just said!

> There are no big deals with dynamic variables as well, one
> can program for years without real problem.

That's right! Just program soundly and this corresponds to the
lexical style to the point that even in dynamic mode, it won't
cause any problems :)

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-18 14:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-18 17:42                   ` Jean Louis
  2020-12-18 20:57                     ` Eli Zaretskii
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-18 17:42 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-18 17:28]:
> Well, it is intuitive to use let instead of creating global
> variables outside of the function. Isn't it? Well, to me it
> is. lexical-scope is intuitive in that it makes the most sense
> and is what you are used to from other languages, yeah, Lisp
> wasn't my first language. I think Basic, then C?

I did learn BASIC, then assembler, then machine language directly on
65C02 processor. Then we got LOGO and I learned it and it was
interesting. Years later I came to LISP and I find it is almost same
as LOGO, that is where I found familiarity.

As we were not exposed to free software and only to proprietary
software I did not have opportunity to access or learn other
languages. All the marketing was about proprietary software. Many
years I lost without liberties.





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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-18 17:42                   ` Jean Louis
@ 2020-12-18 20:57                     ` Eli Zaretskii
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 60+ messages in thread
From: Eli Zaretskii @ 2020-12-18 20:57 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Fri, 18 Dec 2020 20:42:16 +0300
> From: Jean Louis <bugs@gnu.support>
> 
> Then we got LOGO and I learned it and it was interesting. Years
> later I came to LISP and I find it is almost same as LOGO, that is
> where I found familiarity.

It's actually the other way around: Logo was conceived as a kind-of
dialect of Lisp (with "turtle graphics" added to make it easier to
teach kids).  I still have the 3 volumes of "Computer Science Logo
Style" on my shelf.



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-18 17:42                   ` Jean Louis
  2020-12-18 20:57                     ` Eli Zaretskii
@ 2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  5:06                       ` Thien-Thi Nguyen
                                         ` (3 more replies)
  1 sibling, 4 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-20  4:49 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> I did learn BASIC, then assembler, then machine language
> directly on 65C02 processor. Then we got LOGO and I learned
> it and it was interesting. Years later I came to LISP and
> I find it is almost same as LOGO, that is where
> I found familiarity.

Never heard of Logo, thanks, got to update my history file:

  https://dataswamp.org/~incal/COMP-HIST

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-20  5:06                       ` Thien-Thi Nguyen
  2020-12-20  7:02                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  6:21                       ` Jean Louis
                                         ` (2 subsequent siblings)
  3 siblings, 1 reply; 60+ messages in thread
From: Thien-Thi Nguyen @ 2020-12-20  5:06 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 601 bytes --]


() Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org>
() Sun, 20 Dec 2020 05:49:51 +0100

   Never heard of Logo

Boggle!

I thought all two-wheels-good folks knew about Logo!  :-D

-- 
Thien-Thi Nguyen -----------------------------------------------
 (defun responsep (query)               ; (2020) Software Libero
   (pcase (context query)               ;       = Dissenso Etico
     (`(technical ,ml) (correctp ml))
     ...))                              748E A0E8 1CB8 A748 9BFA
--------------------------------------- 6CE4 6703 2224 4C80 7502


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 219 bytes --]

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  5:06                       ` Thien-Thi Nguyen
@ 2020-12-20  6:21                       ` Jean Louis
  2020-12-20 23:20                       ` Drew Adams
  2020-12-25 14:41                       ` 황병희
  3 siblings, 0 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-20  6:21 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-20 07:50]:
> Jean Louis wrote:
> 
> > I did learn BASIC, then assembler, then machine language
> > directly on 65C02 processor. Then we got LOGO and I learned
> > it and it was interesting. Years later I came to LISP and
> > I find it is almost same as LOGO, that is where
> > I found familiarity.
> 
> Never heard of Logo, thanks, got to update my history file:
> 
>   https://dataswamp.org/~incal/COMP-HIST

There was turtle graphics for Emacs but program is lost, I cannot find
it.



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  5:06                       ` Thien-Thi Nguyen
@ 2020-12-20  7:02                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  7:16                           ` Thien-Thi Nguyen
  2020-12-20 13:38                           ` Jean Louis
  0 siblings, 2 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-20  7:02 UTC (permalink / raw)
  To: help-gnu-emacs

Thien-Thi Nguyen wrote:

> Boggle!
>
> I thought all two-wheels-good folks knew about Logo! :-D

Okay, well now I have joined them :)

But what is special about it?

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  7:02                         ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-20  7:16                           ` Thien-Thi Nguyen
  2020-12-21  2:34                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20 13:38                           ` Jean Louis
  1 sibling, 1 reply; 60+ messages in thread
From: Thien-Thi Nguyen @ 2020-12-20  7:16 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 784 bytes --]


() Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org>
() Sun, 20 Dec 2020 08:02:24 +0100

   But what is special about it?

To two-wheels-good folks, anything that has a tendency to make
spirograph[0] art is beautiful, in both the process (or precess,
yuk yuk) and the result.  Sometimes beauty can be special.  :-D

[0] https://en.wikipedia.org/wiki/Spirograph

-- 
Thien-Thi Nguyen -----------------------------------------------
 (defun responsep (query)               ; (2020) Software Libero
   (pcase (context query)               ;       = Dissenso Etico
     (`(technical ,ml) (correctp ml))
     ...))                              748E A0E8 1CB8 A748 9BFA
--------------------------------------- 6CE4 6703 2224 4C80 7502


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 219 bytes --]

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  7:02                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  7:16                           ` Thien-Thi Nguyen
@ 2020-12-20 13:38                           ` Jean Louis
  1 sibling, 0 replies; 60+ messages in thread
From: Jean Louis @ 2020-12-20 13:38 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-20 10:06]:
> Thien-Thi Nguyen wrote:
> 
> > Boggle!
> >
> > I thought all two-wheels-good folks knew about Logo! :-D
> 
> Okay, well now I have joined them :)
> 
> But what is special about it?

It helps beginner programmers to understand what are those computers
commands, functions, variables and they may mathematically create
visual pictures.

There is program kturtle in KDE that helps in learning to program.

Jean



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

* RE: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  5:06                       ` Thien-Thi Nguyen
  2020-12-20  6:21                       ` Jean Louis
@ 2020-12-20 23:20                       ` Drew Adams
  2020-12-21  4:50                         ` Jean Louis
  2020-12-25 14:41                       ` 황병희
  3 siblings, 1 reply; 60+ messages in thread
From: Drew Adams @ 2020-12-20 23:20 UTC (permalink / raw)
  To: Emanuel Berg; +Cc: help-gnu-emacs

> Never heard of Logo, thanks, got to update my history file:

https://en.wikipedia.org/wiki/Mindstorms_(book)



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  7:16                           ` Thien-Thi Nguyen
@ 2020-12-21  2:34                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-21  2:34 UTC (permalink / raw)
  To: help-gnu-emacs

Thien-Thi Nguyen wrote:

> Sometimes beauty can be special. :-D

Beautify the moment!

Swedish: Försköna stunden

Not: För sköna stunder :)

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20 23:20                       ` Drew Adams
@ 2020-12-21  4:50                         ` Jean Louis
  2020-12-21  5:40                           ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-21  4:50 UTC (permalink / raw)
  To: Drew Adams; +Cc: help-gnu-emacs, Emanuel Berg

Official LOGO resources:
https://el.media.mit.edu/logo-foundation/what_is_logo/logo_and_natural_language.html




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-21  4:50                         ` Jean Louis
@ 2020-12-21  5:40                           ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-21  9:17                             ` tomas
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-21  5:40 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> Official LOGO resources:
> https://el.media.mit.edu/logo-foundation/what_is_logo/logo_and_natural_language.html

Looks like an old-school official URL...

What's so special about it?

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-21  5:40                           ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-21  9:17                             ` tomas
  2020-12-21 15:20                               ` Drew Adams
  0 siblings, 1 reply; 60+ messages in thread
From: tomas @ 2020-12-21  9:17 UTC (permalink / raw)
  To: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 757 bytes --]

On Mon, Dec 21, 2020 at 06:40:03AM +0100, Emanuel Berg via Users list for the GNU Emacs text editor wrote:
> Jean Louis wrote:
> 
> > Official LOGO resources:
> > https://el.media.mit.edu/logo-foundation/what_is_logo/logo_and_natural_language.html
> 
> Looks like an old-school official URL...
> 
> What's so special about it?

About the URL? Well, perhaps that it doesn't try to take over your
computer with some sleazy javascript. I appreciate that more and
more.

About Logo? Many things. The minimalist way to achieve direct visual 
feedback (via Turtle graphics). The shell-y syntax, which makes REPL
pleasant. But first of all: it's Lisp. In a package with a shiny label
"For Our Kids" on it. It's a Trojan Horse ;-D

Cheers
 - t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* RE: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-21  9:17                             ` tomas
@ 2020-12-21 15:20                               ` Drew Adams
  2020-12-21 15:50                                 ` tomas
  0 siblings, 1 reply; 60+ messages in thread
From: Drew Adams @ 2020-12-21 15:20 UTC (permalink / raw)
  To: tomas, help-gnu-emacs

Wrt Turtle Geometry, here's a good book:

https://mitpress.mit.edu/books/turtle-geometry

Like Mindstorms, it's fairly old, but very good.



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-21 15:20                               ` Drew Adams
@ 2020-12-21 15:50                                 ` tomas
  0 siblings, 0 replies; 60+ messages in thread
From: tomas @ 2020-12-21 15:50 UTC (permalink / raw)
  To: Drew Adams; +Cc: help-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 253 bytes --]

On Mon, Dec 21, 2020 at 07:20:02AM -0800, Drew Adams wrote:
> Wrt Turtle Geometry, here's a good book:
> 
> https://mitpress.mit.edu/books/turtle-geometry

By Harold Abelson and Andrea diSessa.

The first author rings a bell ;-)

Cheers
 - t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
                                         ` (2 preceding siblings ...)
  2020-12-20 23:20                       ` Drew Adams
@ 2020-12-25 14:41                       ` 황병희
  2020-12-26  4:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  3 siblings, 1 reply; 60+ messages in thread
From: 황병희 @ 2020-12-25 14:41 UTC (permalink / raw)
  To: help-gnu-emacs

>   https://dataswamp.org/~incal/COMP-HIST

Thanks Emanuel^^^ i did add the url in my firefox's bookmark.

Sincerely, Gnus fan Byung-Hee

-- 
^고맙습니다 _救濟蒼生_ 감사합니다_^))//

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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-25 14:41                       ` 황병희
@ 2020-12-26  4:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  6:18                           ` Jean Louis
  2020-12-26  6:44                           ` Byung-Hee HWANG
  0 siblings, 2 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-26  4:22 UTC (permalink / raw)
  To: help-gnu-emacs

Byung-Hee wrote:

>> https://dataswamp.org/~incal/COMP-HIST
>
> Thanks Emanuel^^^ i did add the url in my firefox's bookmark.

No problem :)

Feel free to mail me additional lines to describe the history
of your favorite technology... AND the tech you love to
dislike :)

> Sincerely, Gnus fan Byung-Hee

FYI your name is back to Korean. Maybe that was intentional?
(Yes, I changed the attribution line manually in
this message.)

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  4:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-26  6:18                           ` Jean Louis
  2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  6:44                           ` Byung-Hee HWANG
  1 sibling, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-26  6:18 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-26 07:26]:
> Byung-Hee wrote:
> 
> >> https://dataswamp.org/~incal/COMP-HIST
> >
> > Thanks Emanuel^^^ i did add the url in my firefox's bookmark.
> 
> No problem :)
> 
> Feel free to mail me additional lines to describe the history
> of your favorite technology... AND the tech you love to
> dislike :)

On your history page you totally forgot Ada:
https://en.wikipedia.org/wiki/Ada_Lovelace




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  6:18                           ` Jean Louis
@ 2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  7:07                               ` Christopher Dimech
                                                 ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-26  6:33 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> On your history page you totally forgot Ada:
> https://en.wikipedia.org/wiki/Ada_Lovelace

Nope,

  Ada         1980 US military software unifying attempt

line 27, https://dataswamp.org/~incal/COMP-HIST

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  4:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  6:18                           ` Jean Louis
@ 2020-12-26  6:44                           ` Byung-Hee HWANG
  1 sibling, 0 replies; 60+ messages in thread
From: Byung-Hee HWANG @ 2020-12-26  6:44 UTC (permalink / raw)
  To: help-gnu-emacs

> FYI your name is back to Korean. Maybe that was intentional?
> (Yes, I changed the attribution line manually in
> this message.)

Oh thanks for the spot! A few minutes ago, i did make some change [1].

[1]
https://gitlab.com/soyeomul/Gnus/-/commit/41655e2f238cda1fa0bb59adaf412ae05d579fe3

Sincerely, Gnus fan Byung-Hee

-- 
^고맙습니다 _和合團結_ 감사합니다_^))//



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-26  7:07                               ` Christopher Dimech
  2020-12-26  9:53                               ` Jean Louis
  2020-12-26  9:53                               ` Jean Louis
  2 siblings, 0 replies; 60+ messages in thread
From: Christopher Dimech @ 2020-12-26  7:07 UTC (permalink / raw)
  To: moasenwood; +Cc: help-gnu-emacs


Discord 2015 - The trend by the community of socialists

---------------------
Christopher Dimech
General Administrator - Naiad Informatics - GNU Project (Geocomputation)
- Geophysical Simulation
- Geological Subsurface Mapping
- Disaster Preparedness and Mitigation
- Natural Resource Exploration and Production
- Free Software Advocacy


> Sent: Saturday, December 26, 2020 at 12:03 PM
> From: "Emanuel Berg via Users list for the GNU Emacs text editor" <help-gnu-emacs@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: let, let*, oh, why [was: Elisp - Function returning a list]
>
> Jean Louis wrote:
>
> > On your history page you totally forgot Ada:
> > https://en.wikipedia.org/wiki/Ada_Lovelace
>
> Nope,
>
>   Ada         1980 US military software unifying attempt
>
> line 27, https://dataswamp.org/~incal/COMP-HIST
>
> --
> underground experts united
> http://user.it.uu.se/~embe8573
> https://dataswamp.org/~incal
>
>
>



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  7:07                               ` Christopher Dimech
@ 2020-12-26  9:53                               ` Jean Louis
  2020-12-26 10:11                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  9:53                               ` Jean Louis
  2 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-26  9:53 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-26 09:33]:
> Jean Louis wrote:
> 
> > On your history page you totally forgot Ada:
> > https://en.wikipedia.org/wiki/Ada_Lovelace
> 
> Nope,
> 
>   Ada         1980 US military software unifying attempt

That is maybe programming language Ada, but not Ada Lovelace. Then
what about https://en.wikipedia.org/wiki/Charles_Babbage who is father
of computers?




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-26  7:07                               ` Christopher Dimech
  2020-12-26  9:53                               ` Jean Louis
@ 2020-12-26  9:53                               ` Jean Louis
  2020-12-26 10:20                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2 siblings, 1 reply; 60+ messages in thread
From: Jean Louis @ 2020-12-26  9:53 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-26 09:33]:
> Jean Louis wrote:
> 
> > On your history page you totally forgot Ada:
> > https://en.wikipedia.org/wiki/Ada_Lovelace
> 
> Nope,
> 
>   Ada         1980 US military software unifying attempt
> 
> line 27, https://dataswamp.org/~incal/COMP-HIST

And you could make a nice Emacs package with that list where users
could be presented a list of resources and could get more references
to each of those.




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  9:53                               ` Jean Louis
@ 2020-12-26 10:11                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-26 10:11 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> That is maybe programming language Ada, but not Ada
> Lovelace. Then what about
> https://en.wikipedia.org/wiki/Charles_Babbage who is father
> of computers?

There have always been mechanical machines to do counting...
most likely there were such devices and solutions even during
the stone age! Only they are long lost because they were made
out of wood.

And if you don't have a computer, and can't build one for
practical reasons, one can always do a theoretical model like
Alan Turing and have them execute for arbitrary/sound input,
only then, one has to do computation by hand.

Oh no, computer age year zero is 1947, USA, the transistor.

Or more exactly, 1947-12-23. [1]

$ time-from 1947-12-23 # [2]
73y 3d

[1] https://www.aps.org/publications/apsnews/200011/history.cfm

[2] https://dataswamp.org/~incal/conf/.zsh/time

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26  9:53                               ` Jean Louis
@ 2020-12-26 10:20                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-27  9:11                                   ` Byung-Hee HWANG
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-26 10:20 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

>> https://dataswamp.org/~incal/COMP-HIST
>
> And you could make a nice Emacs package with that list where
> users could be presented a list of resources and could get
> more references to each of those.

Well, that list is just because I love computer history, text
files, and lists. [1]

I have written a toy IRC bot in Python [2] where you can run
a 'hist' command [3] with a technology or programming language
as argument and then it will answer with that line, if found.

So while I think it is fun and cool, for actual usefulness and
information retrieval any such systems will fail in
competition with the WWW... It is just programming and lists
for their own sake.

But of course, feel free to do whatever with it :)

[1] https://dataswamp.org/~incal/HYPERLIST

[2] https://dataswamp.org/~incal/#bot

[3] https://dataswamp.org/~incal/bot/scripts/hist

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-26 10:20                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-27  9:11                                   ` Byung-Hee HWANG
  2020-12-27 11:52                                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 60+ messages in thread
From: Byung-Hee HWANG @ 2020-12-27  9:11 UTC (permalink / raw)
  To: help-gnu-emacs

> But of course, feel free to do whatever with it :)
>
> [1] https://dataswamp.org/~incal/HYPERLIST
> [2] https://dataswamp.org/~incal/#bot
> [3] https://dataswamp.org/~incal/bot/scripts/hist

Wow Emanuel you Python3 code(sth.py) so cool! AMAZING!!!

Sincerely, Gnus fan Byung-Hee

-- 
^고맙습니다 _地平天成_ 감사합니다_^))//



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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-27  9:11                                   ` Byung-Hee HWANG
@ 2020-12-27 11:52                                     ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-27 11:56                                       ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-27 11:52 UTC (permalink / raw)
  To: help-gnu-emacs

Byung-Hee HWANG wrote:

>> But of course, feel free to do whatever with it :)
>>
>> [1] https://dataswamp.org/~incal/HYPERLIST
>> [2] https://dataswamp.org/~incal/#bot
>> [3] https://dataswamp.org/~incal/bot/scripts/hist
>
> Wow Emanuel you Python3 code(sth.py) so cool! AMAZING!!!
>
> Sincerely, Gnus fan Byung-Hee

Well, thank you Hwang. But I'm sure there is some Python pro
reading this who thinks that code stinks. Normally I always
encourage people to listen to the pros, but in this case, let's
settle for "the truth is somewhere in between" :)

Development is Python is very, very fast. Speaking of the
pros, I don't even dare think how fast they develop in Python.

As for the coolness and beauty, well, compare...

Python:

__version__ = time.strftime('%Y-%m-%d', time.gmtime(os.path.getmtime(pathlib.Path(__file__).absolute())))

Lisp:

(defvar bot-version)
(setq bot-version (format-time-string "%Y-%m-%dT%H:%M:%S"
                   (nth 5 (file-attributes buffer-file-name)) ))

eheh

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

* Re: let, let*, oh, why [was: Elisp - Function returning a list]
  2020-12-27 11:52                                     ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-27 11:56                                       ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 0 replies; 60+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-27 11:56 UTC (permalink / raw)
  To: help-gnu-emacs

> (defvar bot-version)
> (setq bot-version (format-time-string "%Y-%m-%dT%H:%M:%S"
>                    (nth 5 (file-attributes buffer-file-name)) ))

Maybe better:

(defvar bot-version)
(setq bot-version (format-time-string
                   "%Y-%m-%dT%H:%M:%S"
                   (file-attribute-modification-time
                    (file-attributes (buffer-file-name)) )))

Hm, actually in this case the Lisp isn't cool either!

OK, just a bad example :)

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




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

end of thread, other threads:[~2020-12-27 11:56 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-16  3:25 Elisp - Function returning a list steve-humphreys
2020-12-16  4:09 ` Jean Louis
2020-12-16  4:17   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16  5:04     ` steve-humphreys
2020-12-16  5:39       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16  7:36         ` steve-humphreys
2020-12-16  8:55           ` Joost Kremers
2020-12-16 10:25           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16 11:52           ` let, let*, oh, why [was: Elisp - Function returning a list] tomas
2020-12-16 14:13             ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16 15:10               ` Jean Louis
2020-12-16 15:58                 ` Stefan Monnier
2020-12-16 18:37                   ` Jean Louis
2020-12-16 19:04                     ` Stefan Monnier
2020-12-16 20:05                       ` Jean Louis
2020-12-16 20:34                         ` tomas
2020-12-16 20:06                       ` tomas
2020-12-18 15:08                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-18 14:27                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-18 17:42                   ` Jean Louis
2020-12-18 20:57                     ` Eli Zaretskii
2020-12-20  4:49                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-20  5:06                       ` Thien-Thi Nguyen
2020-12-20  7:02                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-20  7:16                           ` Thien-Thi Nguyen
2020-12-21  2:34                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-20 13:38                           ` Jean Louis
2020-12-20  6:21                       ` Jean Louis
2020-12-20 23:20                       ` Drew Adams
2020-12-21  4:50                         ` Jean Louis
2020-12-21  5:40                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-21  9:17                             ` tomas
2020-12-21 15:20                               ` Drew Adams
2020-12-21 15:50                                 ` tomas
2020-12-25 14:41                       ` 황병희
2020-12-26  4:22                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-26  6:18                           ` Jean Louis
2020-12-26  6:33                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-26  7:07                               ` Christopher Dimech
2020-12-26  9:53                               ` Jean Louis
2020-12-26 10:11                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-26  9:53                               ` Jean Louis
2020-12-26 10:20                                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-27  9:11                                   ` Byung-Hee HWANG
2020-12-27 11:52                                     ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-27 11:56                                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-26  6:44                           ` Byung-Hee HWANG
2020-12-16  4:30   ` Elisp - Function returning a list steve-humphreys
2020-12-16  4:38     ` Yuri Khan
2020-12-16  4:48       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16  5:20         ` steve-humphreys
2020-12-16  5:18       ` steve-humphreys
2020-12-16  5:33       ` Jean Louis
2020-12-16  5:42         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-16  8:01           ` Elisp - Function returning a sequence of times Jean Louis
2020-12-16  9:05             ` steve-humphreys
2020-12-16  9:20               ` Joost Kremers
2020-12-16  9:40                 ` steve-humphreys
2020-12-16 21:54             ` Michael Heerdegen
2020-12-16  4:13 ` Elisp - Function returning a list Emanuel Berg via Users list for the GNU Emacs text editor

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