Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
# This file: # https://github.com/edrx/edrxrepl/ # http://angg.twu.net/edrxrepl/README.org.html # http://angg.twu.net/edrxrepl/README.org # (find-angg "edrxrepl/README.org") # (find-angg "edrxrepl/") # Author: Eduardo Ochs <eduardoochs@gmail.com> # # Some eev-isms: # (defun c () (interactive) (eek "C-c C-e h h")) # (defun l () (interactive) (find-angg "edrxrepl/edrxrepl.lua")) # (defun o () (interactive) (find-angg "edrxrepl/README.org")) # (defun v () (interactive) (brg "~/edrxrepl/README.html")) # (defun cv () (interactive) (c) (v)) # (defun er () (interactive) (find-es "lua5" "Repl-emacs-lua")) # (defun e () (interactive) (find-es "lua5")) # (find-es "lua5" "Repl") # (find-es "magit" "edrxrepl") # # (find-mygitrepo-links "edrxrepl") # (find-orgnode "Table of Contents") #+OPTIONS: toc:nil num:nil * Introduction This is a simple [[https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop][REPL]] for Lua. # https://github.com/edrx/edrxrepl # (find-eepitch-intro) # (brg "~/edrxrepl/README.html") I wrote it because I was tired of not understanding the innards of Rob Hoelz's [[https://github.com/hoelzro/lua-repl/][lua-repl]]. As I use [[http://angg.twu.net/eev-intros/find-eepitch-intro.html][eepitch]] I need very few features from my REPLs -- for example, I don't need history or completion. The [[http://angg.twu.net/edrxrepl/edrxrepl.lua.html][code]] of this REPL is made of: - a few functions copied from my [[http://angg.twu.net/LUA/lua50init.lua.html][init file]], - my implementation on OO in 5 lines (a commented version of it is [[http://angg.twu.net/dednat6/dednat6/eoo.lua.html][here]]), - the class [[http://angg.twu.net/edrxrepl/edrxrepl.lua.html#MyXpcall][MyXpcall]], that is a hacker-friendly wrapper around Lua's [[https://www.lua.org/manual/5.1/manual.html#pdf-xpcall][xpcall]]; I wrote it because I needed better error handling in [[http://angg.twu.net/dednat6/tug-slides.pdf#page=9][Dednat6]] -- I need several different error handlers, each with its own [[https://www.lua.org/manual/5.1/manual.html#pdf-debug.traceback][traceback function]]. - the class [[http://angg.twu.net/edrxrepl/edrxrepl.lua.html#Repl][Repl]], that uses MyXpcall to run the user code. Once MyXpcall was working the class Repl was trivial to write. The code is full of [[http://angg.twu.net/#eev][eev]]-isms, but they are all in comments and can be ignored. Some of the multi-line comments are [[http://angg.twu.net/eev-intros/find-eepitch-intro.html#3][test blocks]]. Here's an example of how to use it from Lua. Note that the REPL uses ~>>>~ and ~...~ for its prompts. #+BEGIN_SRC cd ~/edrxrepl/ /home/edrx/edrxrepl(edrx:sc)# lua5.3 Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio > dofile "edrxrepl.lua" > REPL = EdrxRepl.new(); REPL:repl() >>> print( ... 1+2 ... ) 3 >>> = 1+2 3 >>> = 1, 2, 3 1 2 3 >>> = nil, 22 nil 22 >>> REPL.stop = 1 > os.exit() /home/edrx/edrxrepl(edrx:sc)# #+END_SRC And here is an example of how to use it from LuaLaTeX (without git!): #+BEGIN_SRC rm -Rfv /tmp/edrxrepl mkdir /tmp/edrxrepl/ cd /tmp/edrxrepl/ wget http://angg.twu.net/edrxrepl/edrxrepl.lua wget http://angg.twu.net/edrxrepl/edrxrepltest.tex lualatex edrxrepltest.tex #+END_SRC The body of [[http://angg.twu.net/edrxrepl/edrxrepltest.tex.html][edrxrepltest.tex]] is just this: #+BEGIN_SRC latex \documentclass{article} \begin{document} \directlua{dofile "edrxrepl.lua"} \directlua{print(); print(); print("Run REPL.stop = 1 to leave the REPL.")} \directlua{REPL = EdrxRepl.new(); REPL:repl()} \end{document} #+END_SRC I am also using this in emacs-lua, that at this moment is just a messy prototype. #+begin_comment * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) cd ~/edrxrepl/ laf rm -v *~ rm -v *.html # (find-fline "~/edrxrepl/") # (magit-status "~/edrxrepl/") # (find-gitk "~/edrxrepl/") # # (s)tage all changes # (c)ommit -> (c)reate # (P)ush -> (p)ushremote # https://github.com/edrx/edrxrepl # #+end_comment # Local Variables: # coding: utf-8-unix # modes: (org-mode fundamental-mode) # org-html-postamble: nil # End: