[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: You said the J word



> Well, Byron and Paul, how were you thinking of implementing a rewritable
> read-eval loop? Let's look at that, and see what facilities we might need
> to write a job-control system in an ES script.
oh, something like
	fn-forever = while {}
	catch @ e msg {
		if {~ $e error} {
			echo >[1=2] $msg
		} {
			echo >[1=2] uncaught exception: $e $msg
		}
		throw retry
	} {
		forever {
			if {!~ $#fn-prompt 0} {
				prompt
			}
			local (cmd = <>{%parse $prompt}) {
				if {~ $#cmd 0} {
					break
				}
				$cmd
			}
		}
	}
for the default interactive loop. possible additions:
	- additional special exceptions (sigwinch, maybe)
	- print of bad or non-0 statuses
	- additional hooks like prompt
	- anything you feel like
i can't promise that the above code will work in 0.75, but something like it 
will. if you notice, the only thing that's missing for this to work is %parse is 
not exposed yet. also, we haven't decided whether it's only the interactive repl 
that is redefinable or both interactive and non-interactive. if it's both, 
they'll probably be available under different names, with a strong recommendation 
to not change the non-interactive one.
other open issues:
	- is history handled inside this loop? (probably yes)
	- what happens when the user hits return at the prompt,
	 with just an empty line. (probably %parse does not return
	 and reprompts)
as to job control, if you can figure out how to do it, great, but i'm not sure i 
believe it's possible. i'd be happy to be proven wrong, but my guess is that 
really supporting job control is going to require work throughout the shell.

AltStyle によって変換されたページ (->オリジナル) /