{"id":681,"date":"2023-06-09T12:06:44","date_gmt":"2023-06-09T16:06:44","guid":{"rendered":"https:\/\/www.fitzsim.org\/blog\/?p=681"},"modified":"2023-06-09T13:01:46","modified_gmt":"2023-06-09T17:01:46","slug":"ulisp-repl","status":"publish","type":"post","link":"https:\/\/www.fitzsim.org\/blog\/?p=681","title":{"rendered":"ulisp-repl"},"content":{"rendered":"<p><em>Read-Evaluate-Print Loops are great for doing quick experiments.  I recently released two new REPL packages for Emacs to GNU ELPA.  This is the second in a two part series.  <a href=\"https:\/\/www.fitzsim.org\/blog\/?p=669\">Here is part 1.<\/a><\/em><\/p>\n<p>For microcontroller projects, <a href=\"http:\/\/ulisp.com\/\">uLisp<\/a> is a great option.  It provides a Lisp REPL on top of the Arduino libraries.  It implements a <a href=\"http:\/\/www.ulisp.com\/show?3L\">subset of Common Lisp<\/a> and adds microprocessor-specific functions.<\/p>\n<p>I previously built  and <a href=\"https:\/\/www.fitzsim.org\/blog\/?p=365\">blogged about<\/a> a handheld computer designed by uLisp&#8217;s creator.  I also <a href=\"https:\/\/www.fitzsim.org\/blog\/?p=460\">ported uLisp to the SMART Response XE<\/a>.<\/p>\n<p>uLisp is controlled by a serial port.  People on the <a href=\"http:\/\/forum.ulisp.com\/\">uLisp forum<\/a> have posted various ways to do this, including some Emacs methods.  They required external software though, and I wanted something that would run in Emacs with no external dependencies.  Emacs has <code>make-serial-process<\/code> and <code>serial-term<\/code> built-in, so I wondered if I could make a REPL using those.  The result is <code><a href=\"https:\/\/elpa.gnu.org\/packages\/ulisp-repl.html\">ulisp-repl<\/a><\/code> which I published to GNU ELPA.  Here is an asciinema screencast of installing and using it.  You can pause the video and copy text out of it to try in your Emacs session.<\/p>\n<div id=\"ulisp-repl-screencast-1\"><em>This inline player uses only free and open source JavaScript.  Or you can download <code><a href=\"\/screenshots\/ulisp-repl-1.cast\">ulisp-repl-1.cast<\/a><\/code> and play it with the <code><a href=\"https:\/\/asciinema.org\/\">asciinema<\/a><\/code> command line player.<\/em><\/div>\n<p>It has syntax highlighting on the current line.  It might be cool to also implement a SLIME server in Emacs itself (and have SLIME connect to the current Emacs process instead of an external one) but uLisp programs are usually small, so it&#8217;s easy enough to copy-n-paste Lisp snippets into the REPL.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Read-Evaluate-Print Loops are great for doing quick experiments. I recently released two new REPL packages for Emacs to GNU ELPA. This is the second in a two part series. Here is part 1. For microcontroller projects, uLisp is a great option. It provides a Lisp REPL on top of the Arduino libraries. It implements a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.fitzsim.org\/blog\/?p=681\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;ulisp-repl&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6],"tags":[],"class_list":["post-681","post","type-post","status-publish","format-standard","hentry","category-emacs","category-lisp","entry"],"_links":{"self":[{"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=681"}],"version-history":[{"count":51,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/681\/revisions"}],"predecessor-version":[{"id":734,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/681\/revisions\/734"}],"wp:attachment":[{"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fitzsim.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}