This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Compile-time detection of EOL translation mode (CLISP)


2007/1/30, Aaron Brown <arundelo@hotmail.com>:
Reini Urban (quoting Sam Steingold at the issue tracker
page [1]) wrote:

> The original problem is best solved by a
>   (setq *default-file-encoding* :unix)
> in ~/.clisprc.lisp

As mentioned in an earlier post, that doesn't work for
*standard-output*, presumably because it's already :dos
before .clisprc runs.  It would work if there were a way to
change the external-format of an already-open stream.  Is
there?

There's a setter, but not easy to find.
(setf (stream-external-format *standard-output* )
 (make-encoding :line-terminator :unix))
*** - SYSTEM::SET-STREAM-EXTERNAL-FORMAT on #<IO TERMINAL-STREAM> is illegal

You cannot set it on the command-line via "clisp -Efile 1:1 -Eterminal 1:1"
only via the setter. Thanksfully derived streams get it from the parent.

$ clisp -Efile 1:1 -Eterminal 1:1 -q
[1]> *DEFAULT-FILE-ENCODING*
#<ENCODING CHARSET:ISO-8859-1 :DOS>
[2]> *TERMINAL-ENCODING*
#<ENCODING CHARSET:ISO-8859-1 :DOS>
[3]> (stream-external-format *standard-output*)
#<ENCODING CHARSET:ISO-8859-1 :DOS>
[4]> (setf (stream-external-format *standard-output*) (ext:make-encoding :line-
terminator :unix))
*** - SYSTEM::SET-STREAM-EXTERNAL-FORMAT on #<IO TERMINAL-STREAM> is illegal
[5]> (setq *terminal-encoding* (ext:make-encoding :line-terminator :unix))
#<ENCODING CHARSET:ISO-8859-1 :UNIX>
[6]> (stream-external-format *standard-output*)
#<ENCODING CHARSET:ISO-8859-1 :UNIX>
[7]> (system::set-terminal-encoding (ext:make-encoding :line-terminator :unix))
#<ENCODING CHARSET:ISO-8859-1 :UNIX>

The -E arg is only for the charset, not for the line ending. See
encoding_from_name.

Sam also wrote at the issue tracker page [1]:

> note that even the cygwin CLISP is expected to write files
> useful for other (non-cygwin) programs, so the fact that
> they really expect CRLF does matter to us.

Au contraire; speaking for myself, the reason I use Cygwin
is to avoid (as much as possible) dealing with Windows's
non-unixy things such as CRLFs.  If I wanted CLISP to act
like a Windows program rather than a unix program, I would
use a Windows (non-Cygwin) version of it.

I agree with you. For the reader it is better to detect optional CRLF, but the stdout *standard-io* and stderr writer *debug-io* should produce LF only. Same for the *default-file-encoding*. Esp. annoying since you cannot set it on the command-line.

By the way, the cited section of the CLISP implementation
notes [2] says that defined(WIN32) is true in Cygwin, but it
isn't.

[1] http://tinyurl.com/3b3yux
[2] http://clisp.podval.org/impnotes/encoding.html#line-term-default

For me it is true during clisp compilation. I had to change the patch to fix the WIN32 section, not the UNIX one. I'll check which optional header defines WIN32. -- Reini Urban http://phpwiki.org/ http://murbreak.at/ http://spacemovie.mur.at/ http://helsinki.at/

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]