Custom Query (1030 matches)
Results (535 - 537 of 1030)
| Ticket | Resolution | Summary | Owner | Reporter |
|---|---|---|---|---|
| #319 | fixed | RUN-PROGRAM and stream encodings | ||
| Description |
Many standard programs (many GNU tools, including GCC) produce output in UTF-8 or some other non-empty encoding. CCL::MONITOR-EXTERNAL-PROCESS just interprets each octet it receives as a character-code; ideally, there should be some way of specifying how those octets encode characters. Non-interactive input to external processes sometimes involves writing a lisp stream's contents to a temporary file and passing a descriptor to that file as the subprocess' standard input; similarly, there should be some way of ensuring that that input is encoded according to the external program's expectations. How significant a problem this is may depend on how visible it is, which in turn depends on lots of factors ("locales", terminal/Emacs settings) outside of the lisp's control. It seems desirable that the lisp offer a way of doing (its part of) this right. |
|||
| #318 | fixed | RUN-PROGRAM I/O limitations | ||
| Description |
(run-program ''prog'' args :output ''lisp-stream'' :error ''lisp-stream'') doesn't work as expected. CCL::MONITOR-EXTERNAL-PROCESS only has the ability to watch output on a single file descriptor, and in this case it winds up watching the input side of a pipe used as the error descriptor by the external program, and output is lost. Example: (defun foo ()
(with-output-to-string (out)
(with-output-to-string (err)
(run-program "ls" '("-l") :output out :error err)
(format t "~& out = ~a" (get-output-stream-string out))
(format t "~& err = ~a" (get-output-stream-string err))))
nil)
Calling (FOO) produces the output: out = err = which basically means "there was no error output, and we weren't watching standard output" Even though this is apparently a litte obscure (I don't recall it ever having been reported), it's probably fair to call it 'major'. Using :ERROR :OUTPUT provides a way of getting both standard and error output, but not a way of distinguishing between them. |
|||
| #949 | fixed | RESTART-CASE with :TEST & :INTERACTIVE broken | ||
| Description |
There seems to be some odd behavior in RESTART-CASE when a restart clause has both test and interactive expressions. In the attached file, the only difference between TEST-BROKEN-RESTART and TEST-WORKING-RESTART is that the latter’s restart clause has no test expression. ./dx86cl64 --no-init Welcome to Clozure Common Lisp Version 1.9-dev-r15272M-trunk (DarwinX8664)! ? (load "~/broken-restart.lisp") #P"/Users/greg/broken-restart.lisp" This case behaves correctly – the test fails, so the restart is not offered. ? (test-broken-restart 'non-restartable-error) > Error: Condition #<NON-RESTARTABLE-ERROR #x30200072ED8D> 1 > :r > Type (:C <n>) to invoke one of the following restarts: 0. Return to break level 1. 1. #<RESTART ABORT-BREAK #x7EBECD> 2. Return to toplevel. 3. #<RESTART ABORT-BREAK #x7EC5AD> 4. Reset this thread 5. Kill this thread 1 > :pop This case fails – the test passes and the restart is offered, but when the restart is selected, rather than calling the interactive expression, some anonymous restart is used, and another error is signaled. ? (test-broken-restart 'restartable-error) > Error: Condition #<RESTARTABLE-ERROR #x302000726B1D> 1 > :r > Type (:C <n>) to invoke one of the following restarts: 2. #<RESTART BROKEN #x7EC16D> 1 > :c 2 Invoking restart: NIL 432345564230164480 is not of type (OR SYMBOL FUNCTION), and can't be FUNCALLed or APPLYed 1 > :pop This is the same as the previous case, but with the test expression removed. This time it works – the restart is selected, then it interactively asks for a value. ? (test-working-restart 'restartable-error) > Error: Condition #<RESTARTABLE-ERROR #x302000721A6D> 1 > :r > Type (:C <n>) to invoke one of the following restarts: 2. #<RESTART WORKING #x7EC16D> 1 > :c 2 Invoking restart: #<RESTART WORKING #x7EC16D> Enter a value: 5 5 ? |
|||
