samedi has quit [Remote host closed the connection]
samedi has joined #commonlisp
prokhor has joined #commonlisp
Lord_of_Life has quit [Ping timeout: 268 seconds]
Lord_of_Life_ has joined #commonlisp
prokhor__ has quit [Ping timeout: 246 seconds]
Lord_of_Life_ is now known as Lord_of_Life
samedi has quit [Client Quit]
jmdaemon has joined #commonlisp
dlowe has quit [Ping timeout: 256 seconds]
marsia has quit [Ping timeout: 260 seconds]
marsia has joined #commonlisp
waleee has quit [Ping timeout: 264 seconds]
karlosz has quit [Ping timeout: 264 seconds]
samebchase2 has joined #commonlisp
istewart has joined #commonlisp
samebchase has quit [Ping timeout: 255 seconds]
samebchase2 is now known as samebchase
pdietz has joined #commonlisp
Everything has joined #commonlisp
jmbr has joined #commonlisp
jmbr has quit [Changing host]
jmbr has joined #commonlisp
istewart has quit [Quit: Konversation terminated!]
elderK has joined #commonlisp
chrcav has quit [Quit: leaving]
chrcav has joined #commonlisp
chrcav has quit [Quit: leaving]
chrcav has joined #commonlisp
occ has quit [Ping timeout: 255 seconds]
m5zs7k has quit [Ping timeout: 268 seconds]
m5zs7k has joined #commonlisp
m5zs7k has quit [Ping timeout: 260 seconds]
m5zs7k has joined #commonlisp
pdietz has quit [Ping timeout: 260 seconds]
m5zs7k has quit [Ping timeout: 256 seconds]
occ has joined #commonlisp
m5zs7k has joined #commonlisp
<beach>
DELETE-PACKAGE won't necessarily make definitions named by symbols in that package unreachable.
tyson2 has quit [Remote host closed the connection]
<qhong>
beach: right. If only we have BECOME! in Common Lisp...
<beach>
A step in the right direction would be to have first-class global environments with "delta" environments. Then the side effects on an environment could be undone by removing the last delta.
<beach>
We are planning to have some of that functionality implemented for Second Climacs, because we want to compile top-level forms, and we can't allow them to have side effects on the global environment. Those effects must be possible to undo when the user modifies a top-level form in the buffer.
<beach>
We can't undo all compile-time side effects, but we might be able to catch most of them.
azimut has quit [Ping timeout: 255 seconds]
hirez has quit [Ping timeout: 246 seconds]
hirez has joined #commonlisp
hirez has quit [Read error: Connection reset by peer]
hirez has joined #commonlisp
igemnace has joined #commonlisp
Lumine has quit [Quit: bbl]
<qhong>
beach: is there a reason I saw CL people talk about first-class global enviroment a lot lately but not first-class environment in general?
<qhong>
I guess implementation difficulty?
<qhong>
Also from the description I see it's more like a first-class store?
<qhong>
Is there a way to add a custom class as a string designator, so existing code that expect string also work on the instances of this class?
<beach>
There are two kinds of lexical environments. One kind is used only by the compiler, and we have those in the form of the Trucler library. The other one is the static environment of a closure, and those are highly implementation specific, and usually not useful as separate objects.
<beach>
First-class global environments is a way of representing the mappings between names and objects in a single object. Usually, in a typical Common Lisp implementation, there is only one global environment, and it is spread out everywhere. Part of it is represented in the slots of symbols.
<qhong>
what are the names and objects refer to? package-name\times symbol-name -> symbol, or something more else?
<qhong>
It seems that you're refering to symbol \times property -> value, but won't that leak information between FCGEs via the package system, if package-name\times symbol-name -> symbol is still shared?
<beach>
Symbols as names of functions, (SETF <symbol>) as names of functions. Symbols as names of method combinations. Symbols as names of classes. Strings as names of packages. etc.
<qhong>
Ok that makes sense
<qhong>
wait but if string->package is separated, there's no way for FCGEs to share packages, so the rest are all unnecessary?
<qhong>
because the set of symbol is already disjoint
<beach>
Who says packages can't be shared?
<beach>
Nothing prevents one name in one first-class global environment to map to the same object as a different name in a different first-class global environment.
<beach>
And who says that just because two packages are different, they can't share symbols?
<qhong>
let me recap... so any objects can still be shared between FCGEs, but require some explicit capability passing? So it's some separation mechanism like Unix virtual machines or Javascript worlds
<beach>
The mechanisms by which sharing can be done have not been fully worked out yet.
<qhong>
I see. If I now understand a bit more correctly, it doesn't really have a lot to do with first-class environment (in programming language context, at least)
<beach>
Oh?
lagash_ has quit [Ping timeout: 246 seconds]
<qhong>
more like a virtualization or sandboxing facility. Very useful none the least
<beach>
The standard defines what an environment is. It is in the chapter on compilation.
<beach>
Starting with "Four different environments are relevant..."
<qhong>
hmm
<qhong>
how first-class the FCGE will be?
<beach>
(make-instance 'environment ...)
<qhong>
I guess if it's first-class enough to support defining a chaining operation, it can be hacked into behaving like a usual lexical environment as well
<beach>
What is a "usual lexical environment"?
<qhong>
will closure closed over the current global environment?
<beach>
No, that's not a global environment.
<beach>
A closure closes over a lexical environment which is not global.
<qhong>
ok. if a closure refer to some global variables, the value it sees changes when switching FCGE
<beach>
I have not said anything about the effects of "switching" a first-class global environment.
gnoo has quit [Ping timeout: 255 seconds]
<beach>
Actually, I have, in my presentation, I think it was for the online Lisp meeting.
<qhong>
Anyway, I think I'd better convince myself FCGE is more like VM or first-class Store rather than environment in PL context which are primarily a device for describing scope nesting. Otherwise I just seem to confuse myself
<qhong>
can FCGE contain other binding information, like object slots to values?
<beach>
That's up to you. But it is definitely an environment.
<qhong>
Is Store in semantics for imperative language also an environment?
<qhong>
I guess so
<beach>
I am just considering the definition in Common Lisp.
kenran has joined #commonlisp
<beach>
And no, in general, slots to values won't be part of the first-class global environment. But there are some classes in Common Lisp where people think that they need slots, but they don't.
<beach>
People tend to assume that SYMBOL-FUNCTION and SYMBOL-PLIST access a slot in the symbol, but there is nowhere in the standard such a requirement.
<beach>
Same with package functions such as PACKAGE-USE-LIST.
<qhong>
I don't see the point of making and only-making what is defined as "environment" in CL standard first-class
<beach>
And none of this is in the future. We extracted first-class global environments in the form of the Clostrum library, and I already use it in SICL bootstrapping to isolate the host environment(s) from the SICL environments.
<beach>
Well, I guess you would have to read the paper then.
<qhong>
From what I see now there's two sensible level of separation: Separating package-name \times symbol-name -> symbol, or separating location -> value
<qhong>
The former partition symbol identity, and the latter is first-class store, which enables lots of wild uses
<beach>
The thing is that this separation does not have to be the same for all objects.
kevingal has quit [Ping timeout: 255 seconds]
<qhong>
I'm not that familiar with implementation and I'm slow on 4.1-2, but separating only packages seem to be already sufficient for 4.3-5
<qhong>
and I will already kill for a CL implementation that does not enforce one-to-one mapping of packages and names... so looking forward to this superset, aka FCGE, to be adopted :)
<beach>
I suspect it won't be generally adopted. It would require too many changes to existing implementations.
<beach>
What is 4.1-2 and 4.3-5?
<beach>
Oh, I guess in the paper?
<qhong>
beach: in the paper "First-class Global Environments in Common Lisp"
<beach>
I see, yes.
pve has joined #commonlisp
<beach>
Like I said, first-class global environments are already used in SICL (which is not yet usable to the general public), and we will need something like that for Second Climacs.
<beach>
But I don't think you will see them in any existing implementation.
<qhong>
kudos to the effort building a new world from the ground up. I'm just gonna defadvice SBCL running on UNIX :)
<beach>
Thanks.
<qhong>
Does second climacs support structural editing?
Cymew has joined #commonlisp
kenran` has joined #commonlisp
<qhong>
I think a tree-model is much more general than text buffer, and can potentially be extend to a much larger set of contents, e.g. tables and music notations
<beach>
I don't think so, no. For Common Lisp editing, it uses a traditional (but very efficient) buffer implementation, and a very good parser to turn the text into Common Lisp code.
<qhong>
ok got it.
<qhong>
I dream to see a structural editor grown into an OS
<qhong>
Emacs is a good text editor grown into an awful OS
occ has quit [Ping timeout: 255 seconds]
kenran has quit [Ping timeout: 268 seconds]
<qhong>
(still better than Linux desktop environments though)
<beach>
I don't plan to put all of Emacs into Second Climacs.
<beach>
As you pointed out, it's not a great idea. But we have CLIM, so that's already better.
<qhong>
Yes! qvq
occ has joined #commonlisp
<qhong>
actually I'm a bit suspicious
<qhong>
One feature Emacs has is that everything is not only read/displayable, but also editable
<qhong>
I'm not sure if that will hold true in a CLIM world
<qhong>
and if that is not true, from this single aspect it's the same as the rest of the GUI status quo
<splittist>
qhong: emacs is constantly telling me things are readonly. And the gui/tui chrome isn't editable.
<qhong>
splittist: Yes, I'm saying the GUI status quo is by default read only
<qhong>
splittist: copy the thing into a buffer and then edit. I find that incredibly useful
<qhong>
splittist: Of course there's also the technically-correct answer, which is M-x read-only-mode, but in practice less useful
<qhong>
In comparison, I can't copy a DOM element into another webpage and edit it. At least not easily.
<splittist>
I was just doing that very thing.
<qhong>
Already 1000x better than normie GUI
<qhong>
(or corporate GUI)
<splittist>
Unless the corporate GUI is made in Excel, in which case your nirvana has arrived.
<qhong>
;)
shka has joined #commonlisp
LW has joined #commonlisp
<qhong>
Is there a reasonable way to add a custom class as a pathname/string designator?
<beach>
I don't think so. There is no requirement on how standard operators convert designators to objects.
MajorBiscuit has joined #commonlisp
<qhong>
Is there way to mutate a pathname?
<qhong>
string has identity and are mutable, so a hashtable plus some wrapper can reasonably simulate subclasses of string
<pjb>
qhong: no way to mutate a pathname. Use make-pathname with :defaults to make a new pathname.
<pjb>
you can implement your own designator resolution function, and use it explicitely. Eg. (pathname<-integer 42) --> #P"/home/john/"
<qhong>
pjb: ok, then it's not feasible. I'm trying to simulate a subclass of pathname by passing around the pathname (taking advantage of it having object identity), and use a hash to map that pathname to the "actual" object.
<qhong>
but if pathname can't be mutated the above simulation doesn't work
<qhong>
it work for string though, which is good enough
seere has quit [Ping timeout: 246 seconds]
seere has joined #commonlisp
lagash_ has quit [Ping timeout: 255 seconds]
MajorBiscuit has quit [Ping timeout: 255 seconds]
occ has quit [Ping timeout: 246 seconds]
MajorBiscuit has joined #commonlisp
lagash has joined #commonlisp
occ has joined #commonlisp
remexre has quit [Read error: Connection reset by peer]
remexre has joined #commonlisp
occ has quit [Ping timeout: 264 seconds]
Algernon69 has joined #commonlisp
boro has quit [Quit: Leavin']
Guest6366 has joined #commonlisp
Guest6366 has quit [Client Quit]
Guest6340 has joined #commonlisp
<jackdaniel>
technically speaking clim features a tree structure so there you have your structure. editing is done with add-output-record, delete-output-record etc, you may traverse them and do many things. it is just that editing a structure is far less intuitive than editing a buffer
borodust has joined #commonlisp
MajorBiscuit has quit [Ping timeout: 252 seconds]
<jackdaniel>
as Craig Finseth puts it - writing with a structural editor is easy, but editing it is a hassle (paraphrasing)
<jackdaniel>
editing with it*
MajorBiscuit has joined #commonlisp
dcb has quit [Quit: MSN Messenger 3.8]
borodust has quit [Quit: Leavin']
borodust has joined #commonlisp
ttree has quit [Read error: Connection reset by peer]
rgherdt has joined #commonlisp
rgherdt has quit [Remote host closed the connection]
Guest6340 has quit [Quit: Ping timeout (120 seconds)]
LW has quit [Quit: WeeChat 3.6]
LW has joined #commonlisp
LW has quit [Client Quit]
LW has joined #commonlisp
hirez has quit [Ping timeout: 260 seconds]
hirez has joined #commonlisp
Guest6324 has joined #commonlisp
easye has quit [Remote host closed the connection]
easye has joined #commonlisp
random-nick has joined #commonlisp
Guest6324 has quit [Quit: Client closed]
Algernon91 has joined #commonlisp
Algernon69 has quit [Ping timeout: 264 seconds]
samedi has joined #commonlisp
<pve>
Hi! Is there a recommended way to set the current package and default directory for the slime repl while loading a lisp file? I have a few "session" files in which I would like to configure these things.
<pve>
by session file I mean i file that may get loaded at start-up that requires dependencies etc
<pve>
I've tried (swank:eval-in-emacs '(slime-repl-set-package "MY-PACKAGE")), and it works with C-c C-l but hangs weirdly if I do (load "mysession.lisp") in the repl, so I'm not sure if that's the way to go
<pve>
I think it hangs when I type it in the repl because whatever channel swank and slime communicate through gets locked when I hit enter at the repl, and swank:eval-in-emacs would like to use that same channel to set the package. But I can't really be sure, because this magic is beyond me.
Cymew has quit [Ping timeout: 246 seconds]
bird_ has joined #commonlisp
specbot has quit [Remote host closed the connection]
minion has quit [Read error: Connection reset by peer]
specbot has joined #commonlisp
minion has joined #commonlisp
overclucker_ has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
overclucker has joined #commonlisp
Brucio-61 has quit [Ping timeout: 260 seconds]
Andrew has quit [Remote host closed the connection]
Andrew- has joined #commonlisp
scymtym has quit [Ping timeout: 252 seconds]
kagev has quit [Ping timeout: 268 seconds]
kagev has joined #commonlisp
djuber has quit [Remote host closed the connection]
djuber has joined #commonlisp
Andrew- is now known as Andrew
specbot has quit [Remote host closed the connection]
minion has quit [Killed (NickServ (GHOST command used by minion1))]
minion has joined #commonlisp
jmdaemon has quit [Ping timeout: 260 seconds]
viaken has quit [Ping timeout: 256 seconds]
Colleen has quit [Read error: Connection reset by peer]
Colleen has joined #commonlisp
rgherdt has joined #commonlisp
epony has quit [*.net *.split]
hineios has quit [*.net *.split]
shka has quit [*.net *.split]
vxe420 has quit [*.net *.split]
skeemer has quit [*.net *.split]
energizer has quit [*.net *.split]
jackdaniel has quit [*.net *.split]
hefner_ has quit [*.net *.split]
Noisytoot has quit [*.net *.split]
jfb4 has quit [*.net *.split]
famicom_guy_ has quit [*.net *.split]
enzuru has quit [*.net *.split]
selwynning has quit [*.net *.split]
sukaeto has quit [*.net *.split]
hexology has quit [*.net *.split]
Noisytoot has joined #commonlisp
hexology has joined #commonlisp
energizer has joined #commonlisp
glaucon has joined #commonlisp
Brucio-61 has joined #commonlisp
viaken2 has joined #commonlisp
shka has joined #commonlisp
vxe420 has joined #commonlisp
epony has joined #commonlisp
hineios has joined #commonlisp
famicom_guy_ has joined #commonlisp
jackdaniel has joined #commonlisp
sukaeto has joined #commonlisp
jfb4 has joined #commonlisp
skeemer has joined #commonlisp
hefner_ has joined #commonlisp
enzuru has joined #commonlisp
selwynning has joined #commonlisp
scymtym has joined #commonlisp
green_ has quit [Ping timeout: 264 seconds]
minion has quit [Remote host closed the connection]
Brucio-61 has quit [Ping timeout: 260 seconds]
Brucio-61 has joined #commonlisp
specbot has joined #commonlisp
skeemer__ has joined #commonlisp
epony has quit [Max SendQ exceeded]
skeemer has quit [Remote host closed the connection]
epony has joined #commonlisp
minion has joined #commonlisp
MajorBiscuit has quit [Ping timeout: 264 seconds]
MajorBiscuit has joined #commonlisp
epony has quit [Remote host closed the connection]
euandreh has quit [Quit: euandreh]
ebrasca has joined #commonlisp
MajorBiscuit has quit [Ping timeout: 264 seconds]
MajorBiscuit has joined #commonlisp
green_ has joined #commonlisp
chipxxx has quit [Ping timeout: 252 seconds]
markb1 has quit [Ping timeout: 252 seconds]
epony has joined #commonlisp
Demosthe1ex has joined #commonlisp
Demosthenex has quit [Ping timeout: 255 seconds]
<scymtym>
for a file /tmp/f.lisp containing (defun f () (let ((l `(#1=(1) #1#))) (eq (first l) (second l)))), SBCL behaves like this: (progn (load (compile-file "/tmp/f.lisp")) (funcall 'f)) => t but (progn (load "/tmp/f.lisp") (funcall 'f)) => nil
<scymtym>
i know that both results are valid behaviors for quasiquote (and for both behaviors, there are other implementations which behave in the respective way) but is the difference in behavior allowed?
<pjb>
scymtym: you could use quote instead and always have T.
glaucon has quit [Quit: WeeChat 3.5]
<pjb>
scymtym: in the case of quasiquote, it is indeed allowed by the letter.
<pjb>
beach: { … } implies 0-n repeatition.
<beach>
Oh? I missed that.
<beach>
Thanks.
<pjb>
Err, perhaps I'm wrong. I see in 1.4.1.2.3 an example with { … }*
<scymtym>
pjb: sure, as a user, the best solution is to just use QUOTE where possible. i am, however, curious regarding the allowed behavior. it seems that mostly all bets are off with quasiquote. i guess the question is whether "An implementation is free to interpret a backquoted form F1 as any form F2 that …" implies a fixed F1 -> F2 mapping or not
<pjb>
the mapping is not defined in terms of EQ, but of EQUAL.
<scymtym>
my point is whether it has to be the same F_2 for a given F_1 processed in different contexts. but it doesn't matter too much
<jackdaniel>
the standard uses a modified bnf notation so {foo} seems to be correct while {foo}* is arguably not -- it should be foo* instead then
<jackdaniel>
on the other hand in the introduction about bnf {foo}n is explicitly mentioned, so {foo}* should be fine too if we take that at face value
<beach>
Interesting. A case for WSCL it seems.
<jackdaniel>
(introduction in clhs that is)
<jcowan>
IMO separation of concerns requires that ` , @, expand to calls on specific macros which then expand to runtime Lisp code
<pjb>
beach: 1.4.1.2 refers an "extended Backus Normal Form (BNF)" and https://en.wikipedia.org/wiki/Extended_Backus–Naur_form mentions {} = repeat. But perhaps there was some ambiguity on the part of the writers of the specification.
MajorBiscuit has quit [Ping timeout: 264 seconds]
<beach>
Yeah, maybe so.
<jcowan>
s/specific/& well-known
<jackdaniel>
i.e it is possible to say {foo}4 (in clhs) to denote "repeated four times"
<jackdaniel>
so {foo}* is the same as foo* and as {foo} (without qualifier)
<pjb>
ok.
<scymtym>
jackdaniel: i also that that {} is just for grouping (in the CL spec), but where did you see the {…}1 example in 1.4.1.2?
<ixelp>
Turning dpANS into new Specification Documents
<gilberth>
CLHS has a lot of issues. I try to be as acurate to the original TeX document as possible.
<beach>
Well, that seems to suggest that it would be a good idea to create a better HTML version of the (draft) standard.
<scymtym>
gilberth: if you are working from the dvi, is there a way to associate issue comments and reviewer comments with the specification text?
this-is-brazil has left #commonlisp [WeeChat 3.6]
<splittist>
or svg / pdf-displayed-with-pdf.js / pdf-displayed-with-whatever-Adobe-stuff-is-being-embedded-in-chromish-stuff
<gilberth>
scymtym: Yes, that's on my TODO. But first I want to care for those pesky \term{...}s in there.
<scymtym>
gilberth: i see. yeah \term is a pita since apparently you need stemming for proper linking
<Bike>
huh, so destructuring &whole is no good?
<gilberth>
scymtym: It's not as worse as it sounds. When you look at the DOM, notice all the CLASS=... attributes still there. I adviced the relevant macros to eject \special's so althrough I work from the DVI for accuracy, I still capture the structure.
<scymtym>
gilberth: i meant that, to find the glossary entry a \term refers to you seem to need stemming as far as i can tell
<gilberth>
scymtym: Indeed, you find \term{foos} refering to "foo". But there is more than just the glossary, There is also \newterm{...} in the main text. And then there is an index as well. At times you find three or four relevant spots in the whole document for a given term.
<scymtym>
yeah. regular plural to singular being the easiest case
<gilberth>
I don't see an issue here. This list is finite and I can care for that manually. What concerns me more is that although there is this \term{foo}\meaning{3} construct to refer to the the "3." meaning of a term, it is used for \term{whitespace} only is seems. This is annoying because I want to show the glossary definitions of terms mentioned in a side bar on the right near where the term is used.
<gilberth>
Less flipping from the main text to glossary and back. And those \term{}s are really part of each dictionary entry and at times have non-obvious definitions.
anticomputer has quit [Remote host closed the connection]
<gilberth>
I disabled that side-bar feature for now, because I had formatting issues and figured I'd need some JS-magic for that to work properly.
anticomputer has joined #commonlisp
eddof13 has joined #commonlisp
<gilberth>
Also, it disturbs w3m rendering. I want that w3m gives you a working plain text rendering as well.
<gilberth>
To summarize: I consider my HTML rendering usable by now, but still have some more work to do. And it appears that I don't have to announce it anymore here, it announced by itself :-)
rgherdt has quit [Ping timeout: 248 seconds]
<beach>
Heh.
Guest63 has joined #commonlisp
eddof13 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
azimut has joined #commonlisp
jmdaemon has joined #commonlisp
kevingal has joined #commonlisp
epony has quit [Remote host closed the connection]
waleee has quit [Ping timeout: 248 seconds]
epony has joined #commonlisp
Everything has quit [Quit: leaving]
kenran` has quit [Remote host closed the connection]
_cymew_ has joined #commonlisp
jmdaemon has quit [Ping timeout: 264 seconds]
jmdaemon has joined #commonlisp
eddof13 has joined #commonlisp
dlowe has joined #commonlisp
jeffrey has joined #commonlisp
rgherdt has joined #commonlisp
igemnace has quit [Ping timeout: 246 seconds]
jmdaemon has quit [Ping timeout: 255 seconds]
jmdaemon has joined #commonlisp
igemnace has joined #commonlisp
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
* splittist
is amazed and humbled that the problem he has been staring at for hours is solved by a stackexchange answer appearing towards the top of a web search - no GPT required...
euandreh has joined #commonlisp
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
kevingal has quit [Ping timeout: 248 seconds]
_cymew_ has quit [Ping timeout: 248 seconds]
Algernon91 has quit [Quit: Leaving]
Guest63 has quit [Quit: Ping timeout (120 seconds)]
MajorBiscuit has quit [Quit: WeeChat 3.6]
Inline has joined #commonlisp
Guest63 has joined #commonlisp
kevingal has joined #commonlisp
Guest63 has quit [Quit: Ping timeout (120 seconds)]
jmdaemon has quit [Ping timeout: 246 seconds]
_cymew_ has joined #commonlisp
eddof13 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
tyson2 has joined #commonlisp
jeosol has quit [Quit: Client closed]
Guest63 has joined #commonlisp
jmdaemon has joined #commonlisp
Guest63 has quit [Quit: Ping timeout (120 seconds)]
azimut_ has joined #commonlisp
azimut has quit [Ping timeout: 255 seconds]
morganw has joined #commonlisp
Guest63 has joined #commonlisp
waleee has joined #commonlisp
azimut_ has quit [Ping timeout: 255 seconds]
azimut has joined #commonlisp
rgherdt has quit [Ping timeout: 256 seconds]
<copec>
gilberth, do you have a list of known technical issues with the standard? (like the one-to-one upper/lowercase mapping being an issue in some cases)
<ixelp>
GitHub - Shinmera/ldapper: Trivial LDAP server
<NotThatRPG>
Say -- has anyone been able to quickload Didier's command-line parser? When I try, quickload can't find the supporting library net.didierverna.termio
<NotThatRPG>
Or can anyone suggest an alternate?
<Shinmera>
I have so far been unsuccessful in finding one I actually liked