From: Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
To: emacs-orgmode@gnu.org
Subject: Library of Babel usage of other programming languages than elisp
Date: Mon, 9 Aug 2021 12:52:41 +0000 [thread overview]
Message-ID: <e8d99258-6a0d-828e-b6e3-72e4ec84e03d@posteo.de> (raw)
[-- Attachment #1: Type: text/plain, Size: 3031 bytes --]
Hello Org-mode users!
I have repeatedly tried to use another programming language than elisp for
writing source blocks in org-mode, which I intended to use as functions inside
org-mode spreadsheets. So far without success.
Here is my latest attempt:
~~~~ START ~~~~
#+HEADER: :var dt1="uninitialized1" dt2="uninitialized2"
#+name: org-lob-timediff
#+begin_src scheme
(import
(ice-9 format)
(srfi srfi-19))
(define org-timestamp->time-utc
(λ (timestamp-string)
(let ([parsed-date (string->date timestamp-string "[~Y-~m-~d ~a ~H:~M]")])
(date->time-utc parsed-date))))
(define duration->hours
(λ (duration)
;; 1h = 60min = 3600s
(/ (time-second duration) 3600)))
(define org-lob-timediff
(λ (org-dt1 org-dt2)
;; formatting float:
;; ~@width, decimals, scale, overflowchar, padchar
;; ~ placeholder is following
;; @ with sign if negative
;; width: minimum width
;; decimals: minimum number of digits after decimal point
;; scale: ???
;; overflowchar: ???
;; padchar: char to use for padding
(format #f
"~,2f"
(number->string
(exact->inexact
(duration->hours
(time-difference (org-timestamp->time-utc org-dt2)
(org-timestamp->time-utc org-dt1))))))))
#+end_src
#+CALL: org-lob-timediff(dt1="[2021-01-01 Fri 00:00]", dt2="[2021-01-01 Fri 01:45]")
#+RESULTS:
~~~~ END ~~~~
This code works just fine in geiser using GNU Guile:
~~~~ START ~~~~
scheme@(guile-user)> (org-lob-timediff "[2021-01-01 Fri 00:00]" "[2021-01-01 Fri 01:45]")
$4 = "1.75"
~~~~ END ~~~~
However, when I C-c C-c the `CALL` line to actually run the code using library
of babel, as a precursor to using `org-sbe` inside a spreadsheet, it fails! I
see the following in my *Messages* buffer:
~~~~ START ~~~~
executing Scheme code block...
(dt1 '"[2021-01-01 Fri 00:00]")
(dt2 '"[2021-01-01 Fri 01:45]")
Starting Geiser REPL ... [3 times]
Guile REPL up and running!
Debug REPL. Enter ,q to quit, ,h for help.
=> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Wrong type to apply: #<syntax-transformer time-second>
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
Error during redisplay: (jit-lock-function 315) signaled (wrong-type-argument markerp nil)
Code block evaluation complete.
~~~~ END ~~~~
So something obviously is getting confused. `time-second` is not a
syntax-transformer. It is a procedure:
~~~~ START ~~~~
scheme@(guile-user)> time-second
$5 = #<procedure %time-second-procedure (s)>
~~~~ END ~~~~
Now I have many questions:
+ What am I doing wrong? How comes perfectly valid code does not work in LOB?
+ Can LOB even be used with other languages than Elisp?
+ Almost all examples I see online are elisp only. Perhaps I am trying to do
something, that is impossible with current Org-mode and Library of Babel?
Best regards,
Zelphir
--
repositories: https://notabug.org/ZelphirKaltstahl
[-- Attachment #2: Type: text/html, Size: 3611 bytes --]
next reply other threads:[~2021-08-09 12:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-09 12:52 Zelphir Kaltstahl [this message]
2021-08-09 13:34 ` Library of Babel usage of other programming languages than elisp Eric S Fraga
2021-08-09 14:25 ` Zelphir Kaltstahl
2021-08-09 15:11 ` Eric S Fraga
2021-08-09 16:03 ` Zelphir Kaltstahl
2021-08-10 13:18 ` Eric S Fraga
2021-08-09 15:23 ` Greg Minshall
2021-08-09 16:27 ` Zelphir Kaltstahl
2021-08-09 18:36 ` Greg Minshall
2021-08-10 5:49 ` Dr. Arne Babenhauserheide
2021-08-11 10:01 ` Zelphir Kaltstahl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e8d99258-6a0d-828e-b6e3-72e4ec84e03d@posteo.de \
--to=zelphirkaltstahl@posteo.de \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
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).