On 3/31/2022 3:48 PM, Sean Whitton wrote: > Thank you for testing. In the meantime, I've thought it all through > some more, and I think that your original idea of catching the > 'eshell-incomplete is the right thing, assuming all tests pass. > > I think the error should be caught inside the `or', though? The idea > would be that if eshell-incomplete is thrown within one of the > disjuncts, that disjunct should return nil. Hmm, that's an interesting thought. Maybe this code could be more particular about what parse function it calls. Since each of the function calls here: (while (or (eshell-parse-lisp-argument) (eshell-parse-backslash) (eshell-parse-double-quote) (eshell-parse-literal-quote))) correspond to a particular token here (earlier in the source): (re-search-forward "\\(?:(\\|#?'\\|\"\\|\\\\\\)" bound t))) perhaps it would be better to match the function call to the corresponding token. That is, if we see a "#?", we call `eshell-parse-lisp-argument', and so on. See the attached patch, which works in my tests (and passes all the existing Eshell unit tests).