Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on fennel.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/fennel.e>
#           or at <http://angg.twu.net/e/fennel.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######




# «.mailing-list»	(to "mailing-list")
# «.install»		(to "install")
# «.tutorial»		(to "tutorial")
# «.fennel-git»		(to "fennel-git")
# «.fennel.exe»		(to "fennel.exe")
# «.fennel-0.0.1»	(to "fennel-0.0.1")
# «.fennel-lang.git»	(to "fennel-lang.git")
# «.traceback»		(to "traceback")
# «.traceback-email»	(to "traceback-email")
# «.translate»		(to "translate")
# «.fennel-mode»	(to "fennel-mode")
# «.exo-encounter-667»	(to "exo-encounter-667")
# «.test-blocks»	(to "test-blocks")
# «.fennelconf-2021»	(to "fennelconf-2021")
# «.anarres»		(to "anarres")
# «.antifennel»		(to "antifennel")
# «.game-jam-1»		(to "game-jam-1")
# «.reload»		(to "reload")
# «.fnlfmt»		(to "fnlfmt")
# «.edrxlib»		(to "edrxlib")
# «.compile»		(to "compile")
# «.icollect»		(to "icollect")
# «.require-fennel.el»	(to "require-fennel.el")




#####
#
# mailing-list
# 2022nov25
#
#####

# «mailing-list»  (to ".mailing-list")
# https://lists.sr.ht/~technomancy/fennel

# [IDEA] Destructuring in flow control?
# https://lists.sr.ht/~technomancy/fennel/%3Cm2v8je49x1.fsf%40me.com%3E




#####
#
# install
# 2021sep23
#
#####

# «install»  (to ".install")
# https://fennel-lang.org/
# https://fennel-lang.org/setup#downloading-fennel
# https://fennel-lang.org/downloads/fennel-0.10.0
# https://git.sr.ht/~technomancy/fennel/tree/main/item/src/fennel.fnl

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -v    ~/bin/fennel
cp -v $S/https/fennel-lang.org/downloads/fennel-0.10.0 ~/bin/fennel
chmod +x ~/bin/fennel




#####
#
# tutorial
# 2022sep15 / 2022nov23
#
#####

# «tutorial»  (to ".tutorial")
# https://fennel-lang.org/tutorial
# https://benaiah.me/posts/everything-you-didnt-want-to-know-about-lua-multivals/
# https://leafo.net/posts/itchio-and-coroutines.html
# (find-fenneldoc "index")
# (find-fenneldoc "tutorial")

* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)

;; (find-fenneldoc "tutorial#functions-and-lambdas")
(fn print-and-add [a b c]
  (print a)
  (+ b c))

(fn print-sep [sep ...]
  "Prints args as a string, delimited by sep"
  (print (table.concat [...] sep)))
,doc print-sep

(lambda print-calculation [x ?y z]
  (print (- x (* (or ?y 1) z))))

(print-calculation 5) ; -> error: Missing argument z

;; (find-fenneldoc "tutorial#locals-and-variables")

(let [x (+ 89 5.2)
      f (fn [abc] (print (* 2 abc)))]
  (f x))

(local tau-approx 6.28318)

(let [x 19]
  ;; (set x 88) <- not allowed!
  (let [x 88]
    (print (+ x 2))) ; -> 90
  (print x)) ; -> 19

(var x 19)
(set x (+ x 8))
(print x) ; -> 27

;; (find-fenneldoc "tutorial#numbers-and-strings")

(let [x (+ 1 99)
      y (- x 12)
      z 100_000]
  (+ z (/ y 10)))

(.. "hello" " world")

;; (find-fenneldoc "tutorial#tables")

{"key" "value"
 "number" 531
 "f" (fn [x] (+ x 2))}

(let [tbl (function-which-returns-a-table)
      key "a certain key"]
  (. tbl key))

(let [tbl {}
      key1 "a long string"
      key2 12]
  (tset tbl key1 "the first value")
  (tset tbl key2 "the second one")
  tbl) ; -> {"a long string" "the first value" 12 "the second one"}

;; (find-fenneldoc "tutorial#sequential-tables")
;; (find-fenneldoc "tutorial#iteration")
;; (find-fenneldoc "tutorial#looping")
;; (find-fenneldoc "tutorial#conditionals")




#####
#
# fennel-git
# 2021sep23
#
#####

# «fennel-git»  (to ".fennel-git")
# (find-angg ".emacs" "fennel")
# https://git.sr.ht/~technomancy/fennel
# https://git.sr.ht/~technomancy/fennel/tree/main/item/src/fennel.fnl
# (find-git-links "https://git.sr.ht/~technomancy/fennel" "fennel")
# (code-c-d "fennel" "~/usrc/fennel/")
# (find-fennelfile "")
# (find-fennelfile "README.md")
# (find-fennelfile "setup.md")
# (find-fennelfile "Makefile")
# (find-fennelfile "src/")
# (find-fennelfile "src/fennel.fnl")
# (find-fennelfile "src/fennel/")
# (find-fennelsh "find * | sort")

# (find-fennelgrep "grep --color=auto -nRH --null -e comment *")
# (find-fennelgrep "grep --color=auto -nRH --null -e fennelrc *")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/fennel/
cd      ~/usrc/
git clone https://git.sr.ht/~technomancy/fennel
cd      ~/usrc/fennel/

export PAGER=cat
git branch --list -a
git for-each-ref
git log --oneline --graph --all -20

# (find-fline "/tmp/fe/")
rm -Rv /tmp/fe/
mkdir  /tmp/fe/
cd     /tmp/fe/

cd      ~/usrc/fennel/
git reset --hard

     make -f Makefile LUA_VERSION=5.2         |& tee om
sudo make -f Makefile LUA_VERSION=5.2 install |& tee omi

# Uninstall:
sudo rm -fv /usr/local/bin/fennel
sudo rm -fv /usr/local/share/lua/5.4.3/fennel.lua
sudo rm -fv /usr/local/share/lua/5.2/fennel.lua
sudo rm -fv /usr/local/man/man1/fennel.1

* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)
,help

# (find-fline "~/usrc/")
# (find-fline "~/usrc/fennel/")
# (find-gitk  "~/usrc/fennel/")




#####
#
# Building fennel.exe
# 2021nov04
#
#####

# «fennel.exe»  (to ".fennel.exe")
# (find-fline "~/LOGS/2021nov04.lua")
# (find-fline "~/LOGS/2021nov04.lua" "Makefile#L92")
# (code-c-d "fennel" "~/usrc/fennel/")
# (find-fennelfile "")
# (find-fennelfile "Makefile")
# (find-fennelfile "Makefile" "fennel.exe:")
# (find-fennelfile "lua-5.4.3/")
# (find-fennelfile "lua-5.4.3/Makefile")
# (find-fennelfile "lua-5.4.3/src/")
# (find-fennelfile "lua-5.4.3/src/Makefile")
# (find-fennelfile "lua-5.4.3/src/Makefile" "mingw:")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/usrc/fennel/
git clean -dfx
git reset --hard
make fennel.exe    |& tee omfe

i686-w64-mingw32-gcc

# (find-sh "apt-file search i686-w64-mingw32-gcc")
# (find-status   "gcc-mingw-w64-i686-posix")
# (find-vldifile "gcc-mingw-w64-i686-posix.list")
# (find-udfile   "gcc-mingw-w64-i686-posix/")



#####
#
# fennel-0.0.1
# 2024oct11
#
#####

# «fennel-0.0.1»  (to ".fennel-0.0.1")
# (find-fline "~/LOGS/2024oct11.emacs" "just barely over 1000 lines")
# https://git.sr.ht/~technomancy/fennel/tree/0.0.1/item/fnl.lua





#####
#
# Building a local copy of fennel-lang.org
# 2022nov25
#
#####

# «fennel-lang.git»  (to ".fennel-lang.git")
# https://git.sr.ht/~technomancy/fennel-lang.org
# (find-git-links "https://git.sr.ht/~technomancy/fennel-lang.org" "fennellang")
# (code-c-d "fennellang" "~/usrc/fennel-lang.org/")
# (find-fennellangfile "")
# (find-fennellangfile "Makefile")
# (find-fennellangfile "Makefile" "\nhtml:")
# (find-fennellangfile "Makefile" "Makefile")
# (find-fennellangfile "Makefile" "\nfennelview.lua:")
# (find-fennellangfile "Makefile" "fennel/fennel:")
# (find-es "git" "very-hard-reset")
# (find-node "(make)Options Summary" "-C DIR")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/fennel-lang.org/
git clean -dfx
git reset --hard
git pull

cd ~/usrc/fennel-lang.org/fennel/
git clone https://git.sr.ht/~technomancy/fennel .

cd ~/usrc/fennel-lang.org/
make   |& tee om

# (find-fenneldoc "tutorial")





#####
#
# traceback
# 2021sep25
#
#####

# «traceback»  (to ".traceback")
# (find-fennelgrep "grep --color=auto -nRH --null -e traceback *")
# (find-fennelgrep "grep --color=auto -nRH --null -e 'function traceback' *")
# (find-fennelfile "bootstrap/fennel.lua" "local function traceback_frame(")
# (find-fennelfile "bootstrap/fennel.lua" "local function traceback(")
# (find-fennelfile "src/fennel/compiler.fnl" "(fn traceback-frame ")
# (find-fennelfile "src/fennel/compiler.fnl" "(fn traceback ")
# https://git.sr.ht/~technomancy/fennel/tree/main/item/src/fennel/compiler.fnl
# (find-fline "~/LOGS/2022jan19.fennel")

* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)
(local REPL (EdrxRepl.new)) (REPL:repl)

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
= os.getenv("LUA_INIT"):sub(2)
dofile(os.getenv("LUA_INIT"):sub(2))




#####
#
# E-mail about traceback - sent to lua-l in 2022mar22
# 2022mar22
#
#####

# «traceback-email»  (to ".traceback-email")
# https://mail.google.com/mail/u/0/#sent/KtbxLzGPrdrsVBJgMPwDggWQLNnXZQTbCL
# Subj: debug.traceback() in Lua?

Hi list,

where can I find a version in Lua of debug.traceback()?
I know that there is one in Fennel... its original code -
in Fennel - is here,

https://git.sr.ht/~technomancy/fennel/tree/main/item/src/fennel/compiler.fnl#L827-873

and we can obtain its translation to Lua by running this:

  rm -Rfv /tmp/fennel/
  cd      /tmp/
  git clone https://git.sr.ht/~technomancy/fennel
  cd      /tmp/fennel/
  make -f Makefile LUA_VERSION=5.2
  awk '2902<=NR && NR<=2963' bootstrap/fennel.lua  | tee tb.lua

After running the code above the file /tmp/fennel/tb.lua
will contain this:

  local function traceback_frame(info)
    if ((info.what == "C") and info.name) then
      return string.format("  [C]: in function '%s'", info.name)
    elseif (info.what == "C") then
      return "  [C]: in ?"
    else
      local remap = sourcemap[info.source]
      if (remap and remap[info.currentline]) then
        if remap[info.currentline][1] then
          info.short_src = sourcemap[("@" .. remap[info.currentline][1])].short_src
        else
          info.short_src = remap.short_src
        end
        info.currentline = (remap[info.currentline][2] or -1)
      else
      end
      if (info.what == "Lua") then
        local function _325_()
          if info.name then
            return ("'" .. info.name .. "'")
          else
            return "?"
          end
        end
        return string.format("  %s:%d: in function %s", info.short_src, info.currentline, _325_())
      elseif (info.short_src == "(tail call)") then
        return "  (tail call)"
      else
        return string.format("  %s:%d: in main chunk", info.short_src, info.currentline)
      end
    end
  end
  local function traceback(msg, start)
    local msg0 = tostring((msg or ""))
    if ((msg0:find("^Compile error") or msg0:find("^Parse error")) and not utils["debug-on?"]("trace")) then
      return msg0
    else
      local lines = {}
      if (msg0:find(":%d+: Compile error") or msg0:find(":%d+: Parse error")) then
        table.insert(lines, msg0)
      else
        local newmsg = msg0:gsub("^[^:]*:%d+:%s+", "runtime error: ")
        table.insert(lines, newmsg)
      end
      table.insert(lines, "stack traceback:")
      local done_3f, level = false, (start or 2)
      while not done_3f do
        do
          local _329_ = debug.getinfo(level, "Sln")
          if (_329_ == nil) then
            done_3f = true
          elseif (nil ~= _329_) then
            local info = _329_
            table.insert(lines, traceback_frame(info))
          else
          end
        end
        level = (level + 1)
      end
      return table.concat(lines, "\n")
    end
  end

This seems to be loosely based on the function db_errorfb in the file
src/ldblib.c of the Lua source, but with several changes... I can try
to modify that code to make it more similar to db_errorfb, but I am
not a good programmer, and that would probably take many hours - and I
think that having other "debug.tracebacks()"s in Lua to compare would
save me a lot of time...

  Thanks in advance!
    Eduardo Ochs
    http://angg.twu.net/#eev
    http://angg.twu.net/dednat6.html
    http://angg.twu.net/dednat6/tug-slides.pdf







#####
#
# translate
# 2021sep23
#
#####

# «translate»  (to ".translate")
# https://fennel-lang.org/see

# (find-fline "~/bin/fennel")





#####
#
# fennel-mode
# 2021sep23
#
#####

# «fennel-mode»  (to ".fennel-mode")
# (find-epackage-links 'fennel-mode "fennelmode" t)
# (find-epackage       'fennel-mode)
# (code-c-d "fennelmode" "~/.emacs.d/elpa/fennel-mode-20221025.1830/")
# (find-fennelmodefile "")




#####
#
# Technomancy's exo-encounter-667
# 2021sep23
#
#####

# «exo-encounter-667»  (to ".exo-encounter-667")
# https://technomancy.itch.io/exo-encounter-667
# https://gitlab.com/technomancy/exo-encounter-667
# (find-git-links "https://gitlab.com/technomancy/exo-encounter-667" "exoencounter667")
# (code-c-d "exoencounter667" "~/usrc/exo-encounter-667/")
# (find-exoencounter667file "")



#####
#
# test-blocks
# 2021sep23
#
#####

# «test-blocks»  (to ".test-blocks")
# (find-angg "FENNEL/test0.fnl")
# (find-fline "~/LOGS/2021sep23.emacs" "autumn-lisp-game-jam-2021")
# (find-fline "~/LOGS/2021sep23.fennel")




#####
#
# fennelconf-2021
# 2022jan13
#
#####

# «fennelconf-2021»  (to ".fennelconf-2021")
# https://conf.fennel-lang.org/2021
# https://conf.fennel-lang.org/v/fennelconf-2021-technomancy.mp4
# https://conf.fennel-lang.org/v/fennelconf-2021-mattykins.mp4
# https://conf.fennel-lang.org/v/fennelconf-2020-technomancy.mp4
# https://conf.fennel-lang.org/v/fennelconf-2021-durrendal.mp4
# https://conf.fennel-lang.org/v/fennelconf-2021-andreyorst.mp4
# https://conf.fennel-lang.org/v/



#####
#
# anarres
# 2022jan24
#
#####

# «anarres»  (to ".anarres")
# https://asciinema.org/a/463816
# https://git.sr.ht/~technomancy/anarres

<technomancy> edrx: it's the "emacs" branch specifically
<technomancy> I thiiiiiiink it's fully self-contained? other than
              needing lua on your machine.




#####
#
# antifennel
# 2022mar27
#
#####

# «antifennel»  (to ".antifennel")
# (find-git-links "https://git.sr.ht/~technomancy/antifennel" "antifennel")
# (code-c-d "antifennel" "~/usrc/antifennel/")
# (find-antifennelfile "")
# (find-antifennelfile "README.md")
# (find-fline "~/LOGS/2022mar27.fennel")
# https://fennel-lang.org/see

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/antifennel/
git clean -dfx
git reset --hard

make   |& tee om
antifennel

rm -fv ~/bin/antifennel
cp -v antifennel ~/bin/


# (find-status   "luajit")
# (find-vldifile "luajit.list")
# (find-udfile   "luajit/")

cd
antifennel

./antifennel targetfile.lua > targetfile.fnl
./antifennel targetfile.lua > targetfile.fnl




#####
#
# game-jam-1
# 2022jun20
#
#####

# «game-jam-1»  (to ".game-jam-1")
# https://itch.io/jam/fennel-game-jam-1
# https://gitlab.com/alexjgriffith/min-love2d-fennel
# https://technomancy.us/187 in which a game jam is recounted



#####
#
# reload
# 2022nov25
#
#####

# «reload»  (to ".reload")
# (find-fennelgrep "grep --color=auto -nRH --null -e reload *")
# (find-fennelgrep "grep --color=auto -nRHw --null -e reload *")
# (find-fennelfile "src/fennel/repl.fnl" "(fn reload ")
# (find-fennelfile "src/fennel/repl.fnl" "(fn commands.reload ")
# (find-fennellanggrep "grep --color=auto -nH --null -e reload *.html")
# (find-fennellanggrep "grep --color=auto -nwH --null -e reload *.html")



#####
#
# fnlfmt
# 2022nov25
#
#####

# «fnlfmt»  (to ".fnlfmt")
# https://git.sr.ht/~technomancy/fnlfmt
# (find-git-links "https://git.sr.ht/~technomancy/fnlfmt" "fnlfmt")
# (code-c-d "fnlfmt" "~/usrc/fnlfmt/")
# (find-fnlfmtfile "")





#####
#
# Loading edrxlib / lua50init from the fennel repl
# 2022nov26
#
#####

# «edrxlib»  (to ".edrxlib")
# (find-angg "LUA/lua50init.lua" "Repl1.lua")
# (find-fline "~/LOGS/2022nov26.fennel")

* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)
(dofile "/home/edrx/LUA/lua50init.lua")
(run_my_repl_now)



#####
#
# fennel --compile
# 2022nov26
#
#####

# «compile»  (to ".compile")
# (find-sh "fennel --help")
# (find-sh "fennel --help" "--compile")
# (find-fenneldoc "tutorial")
# (find-fennelgrep "grep --color=auto -nRH --null -e compile *")
# (find-fennelfile "src/fennel/compiler.fnl")
# (find-fennelfile "src/fennel/compiler.fnl" "(fn compile-string ")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cat > /tmp/o.fnl <<'%%%'
(fn print-and-add [a b c]
  (print a)
  (+ b c))
%%%

fennel            --compile /tmp/o.fnl
fennel --metadata --compile /tmp/o.fnl

* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)
(let  [{: compile-string} (require :fennel)] (print compile-string))
(local {: compile-string} (require :fennel))

(compile-string "
  (fn print-and-add [a b c]
    (print a)
    (+ b c))
  ")



#####
#
# icollect
# 2023nov26
#
#####

# «icollect»  (to ".icollect")
# https://mail.google.com/mail/u/0/#inbox/FMfcgzGwHpMvnhHhQgQVqRqpBtSHSMhN
# https://lists.sr.ht/~technomancy/fennel/%3C87r0klp1bd.fsf%40hagelb.org%3E





#####
#
# require-fennel.el
# 2024dec16
#
#####

# «require-fennel.el»  (to ".require-fennel.el")
# https://lists.sr.ht/~technomancy/fennel/%3Cee889c6e-694c-4577-83e2-c6875365f1f0@gmail.com%3E#%3C87zfkvz5yz.fsf@gmail.com%3E
# https://gitlab.com/andreyorst/require-fennel.el
# (find-git-links "https://gitlab.com/andreyorst/require-fennel.el" "requirefennel")
# (code-c-d "requirefennel" "~/usrc/require-fennel.el/")
# (find-requirefennelfile "")
# (find-requirefennelfile "require-fennel.el")

;; If you're using recent-enough Emacs, you can install it with:
;;
(use-package-vc-install
 '(require-fennel
   (:url "https://gitlab.com/andreyorst/require-fennel.el" :branch "master")))

;; Or, if you're using a really bleeding edge Emacs, then:
;;
(use-package require-fennel
  :vc ( :url "https://gitlab.com/andreyorst/require-fennel.el"
        :branch "master"
        :rev :newest))






https://git.sr.ht/~technomancy/fennel/tree/main/Makefile#L92





https://git.sr.ht/~technomancy/fennel/tree/main/rationale.md



* (eepitch-fennel)
* (eepitch-kill)
* (eepitch-fennel)

(fn square [a] (* a a))
(square 15)
(fn _G.square [a] (* a a))
(_G.square 15)
((fn [x] (* x x)) 5)
(let [square (fn [x] (* x x))] (square 5))


https://andregarzia.com/2020/06/languages-that-compile-to-lua.html


https://www.facebook.com/forfoxsakewildlife/posts/2642736806023066 Fennel

https://technomancy.us/189 in which interactive development saves the day
https://technomancy.us/197 in which five different paths lead to methods

https://news.ycombinator.com/item?id=31029478 Fennel: A Practical Lisp (mattroelle.com) - Chicken Scheme is embedded in C programs with one line
https://github.com/bakpakin/Fennel/wiki/Cookbook
https://github.com/bakpakin/Fennel/wiki/Repl
https://andreyorst.gitlab.io/posts/2022-09-26-reproducible-research-with-org-mode-fennel-and-love/
https://andreyorst.gitlab.io/posts/2023-03-25-implementing-a-protocol-based-fennel-repl-and-emacs-client/

https://github.com/bakpakin/Fennel/wiki/Repl

https://news.ycombinator.com/item?id=33678782 TIC-80 tiny computer (tic80.com) - Fennel
https://technomancy.us/193 in which many rays are cast
https://conf.fennel-lang.org/2022

https://oylenshpeegul.gitlab.io/blog/posts/20240106/ Tim Heaney - very detailed instructions ***
https://oylenshpeegul.gitlab.io/blog/posts/20240108/ Tim Heaney - Emacs configuration
https://fennel-lang.org/survey/2024





#  Local Variables:
#  coding:               utf-8-unix
#  End: