[[!meta title="Elisp and McCLIM"]] [[!meta copyright="Copyright © 2024 screwlisp"]] [[!inline pages="internal(2024/info/mcclim-nav)" raw="yes"]] # Elisp and McCLIM he or e/em/eir (Spivak, male and neuter pronouns are fine) - IRC: screwlisp, Mastodon: @screwtape@mastodon.sdf.org liberachat: screwlisp MOO: lambda.moo.mud.org Name: screwtape Moo mail preferred [[!inline pages="internal(2024/info/mcclim-before)" raw="yes"]] The gist is demoing using McCLIM common lisp interface manager implementation to make Sandewall 1978's lisp iconic example scheduler app, but to drive it to and from emacs lisp via slime and swank. To start with, a beginner walkthrough on getting slime and common lisp and mcclim, and configuring and using them with emacs org-mode. The default clim application-frame is made and its interactor used. A CLIM command is then defined to refer the default describe to emacs lisp rather than the inferior lisp. CLIM useage with no gui via slime / org-mode is demoed. This is then used via emacs lisp. CLIM's accepting-values is used to generate an anonymous gui that accepts a value **into elisp**. A small final discussion on integrating the clim scheduler back and forth into org-agenda. Bib: ``` @article{sandewall1978programming, title={Programming in an Interactive Environment: the``Lisp''Experience}, author={Sandewall, Erik}, journal={ACM Computing Surveys (CSUR)}, volume={10}, number={1}, pages={35--71}, year={1978}, publisher={ACM New York, NY, USA} } @inproceedings{strandh2002free, title={A free implementation of clim}, author={Strandh, Robert and Moore, Timothy}, booktitle={International Lisp Conference Proceedings}, year={2002} } @article{fruhwirth2006guided, title={A Guided Tour of CLIM, Common Lisp Interface Manager}, author={Fruhwirth, Clemens}, journal={Lisp Pointers}, year={2006} } @article{kochmanskimcclim, title={McCLIM Demonstration}, author={Kochmanski, Daniel} } @inproceedings{kochmanski2020ecl, title={On ECL, the Embeddable Common Lisp (ELS keynote).}, author={Kochmanski, Daniel}, booktitle={ELS}, year={2020} } @misc{beane2012quicklisp, title={Quicklisp}, author={Beane, Zach}, year={2012} } @misc{marsden2003slime, title={SLIME: The superior lisp interaction mode for emacs}, author={Marsden, Eric and Gorrie, Luke and Eller, Helmut and others}, year={2003}, publisher={URL: https://common-lisp. net/project/slime/(visited on 05/19/2017)} } @article{dominik2004org, title={Org mode manual}, author={Dominik, Carsten}, year={2004} } ``` **Q&A in LambdaMOO**: As an experiment, screwlisp will also be taking questions from LambdaMOO. Here's how to join: 1. Use `M-x telnet` to connect to `lambda.moo.mud.org 8888`. Alternatively, you can use a web-based client like https://mudslinger.net/play/ or rmoo.el (see rmoo.el note below) 2. `connect Guest` to connect as a guest. If that doesn't work, please ask in `#emacsconf-org` and we'll try to get you sorted out. 3. Agree to the terms by typing `YES`. 4. Teleport to where the speaker is by typing `@join screwtape`. To say something, start with `"` and omit the ending quotation mark, like this: `"Hello everyone!`. To say something to a specific person, start with a backtick (`` ` ``) and the person's nick, then your message, like this: `` `sachac I made it to LambdaMOO``. Use `help communication` to learn more about other communication tools, such as `:` for emoting and `whisper` for sending private messages. rmoo.el note: You may need to define process-kill-without-query if it doesn't exist on your computer. Here's a use-package declaration that might be a good starting point. If your version of use-package doesn't support `:vc` yet, you can check out the code from https://github.com/toddsundsted/rmoo and add it to your load-path, or use `M-x telnet` for now. ``` (use-package rmoo :vc "https://github.com/toddsundsted/rmoo" :init (unless (fboundp 'process-kill-without-query) (defun process-kill-without-query (process &optional flag) (set-process-query-on-exit-flag process nil) t)) :config (rmoo-worlds-add-new-moo "LambdaMOO" "lambda.moo.mud.org" "8888")) ``` You can also ask questions via BigBlueButton, Etherpad, or IRC, and the host will try to make sure your question gets to the speaker. Enjoy! About the speaker: I'm screwlisp from the lispy gopher climate, a weekly Wednesday 000UTC podcast (non-radio show) on aNONradio.net powered by sdf.org; (also the lesser-known Friday 1400UTC show, Zhen House Zhen Bonkwave. We are fortunate to have many great people in our live chat that happens in LambdaMOO during the shows. Last week, we shared Rog's new writing on his current personal emacs modes with his decades of emacs useage. (Roger Crew). That's not what this talk is about though, though we often deal with emacs and McCLIM, which **are** what this talk is about. I have many friends who picked those up in some small part thanks to the show. # Discussion - Q: I would love to see the GUI interacting with the scheduling stuff you were working on initially, if I didn't miss it somewhere earlier. - A: Will do a follow-up video - Q:Or any other GUI stuff you've worked on in the past that you'd be comfortable showing? - A:[https://toobnix.org/a/screwtape/video-channels](https://toobnix.org/a/screwtape/video-channels) - Q: Are we going to get a McCLIM LambdaMOO client? - A: You're right, I should make that into a client for Common Lisp. - Q: is the expression being returned directly eval-able is elisp / ielm? - screwlisp: Yes I didn't think this ahead - screwlisp: Like I've just said, you have to call (slime-eval-sync) - screwlisp: After which you can get it out of your kill-ring, because it has syncronised -> to be there - screwlisp: I was going to ask you if you had a way for me to do that - Q: i wonder if there's a presentation type for readable output that is returned to elisp? - most of the time i assume the expression type will be readable on the other end, but CL has readtables and other things that would need translation - similar to the multiple package-archive options with emacs there is also UltraLisp which tracks upstream more closely, but can cause fun-to-debug package conflicts in some situations - screwlisp: I guess I should try that, basically melpa right, I occasionally use person quicklisp dists - screwlisp: 40ants has often done things I want to do - lol @ either it will be faster or you will be smug about it running slowly - screwlisp: Old computer challenge ;) - we did see a little bit of that - https://toobnix.org/c/screwtape_channel/videos - Is the MOO McCLIM app still going? - yes - telnet lambda.moo.mud.org 8888, connect Guest, Y, then @join screwtape - maybe something like this would work for slime eval assuming we still want to use emacs while CLIM window is open: (slime-eval-async '(cl:+ 2 2) (lambda (x) (print x))) - the second arg is a continuation so can bind it, insert in a buffer, etc - I think most emacs users use scratch buffer - thanks for the talk! great intro. look forward to IELM talk next :P - Thank you! 😊 - Thanks for the talk, it was super interesting - May the source be with everyone - I use ielm as a repl but not a power user... sometimes I know I want to do more than a few M-: - (lazy-eval 'thanks) - screwlisp: "Yeah, I forgot now but during the talk there were a few tiny bits where it was different to slime that tripped me up - thanks for the talk screwlisp, always good to see lisp history being explored. i'll have to check out lambdamoo again - screwlisp: Quite a few people hang around during the Wednesday show (000UTC, anonradio.net) - screwlisp: Probably not a coincidence a lot of my emacs useage is the same as yduJ's who is normally there - what emacs mode/tool were you using to access the moo? - I dusted off rmoo.el, but it could definitely use some modernization =) - I went for the quick M-x telnet instructions for Guest - screwlisp: Can @request your nick with an email address [[!inline pages="internal(2024/info/mcclim-after)" raw="yes"]] [[!inline pages="internal(2024/info/mcclim-nav)" raw="yes"]]