Sven 

why not having this as extension. 

Stef


> On 2 Jun 2019, at 13:52, Alistair Grant <[email protected]> wrote:
> 
> Hi Ben,
> 
> On Fri, 31 May 2019 at 07:08, Ben Coman <[email protected]> wrote:
>> 
>> 
>> I'm on Windows wanting to write a text file with LF endings.
>> The code developed on Linux is thus...
>>    (destinationDirectory / 'README.md') ensureCreateFile
>>            writeStreamDo: [ :stream | stream nextPutAll: class comment ]
> 
> I've come across this so many times that I always add a couple of
> methods to my image:
> 
> ZnEncodedStream>>asNewLineStream
> "Answer the receiver wrapped with a ZnNewLineWriterStream"
> ^ZnNewLineWriterStream on: self! !
> 
> 
> ZnNewLineWriterStream>>asNewLineStream
> "Answer the receiver wrapped with a ZnNewLineWriterStream"
> ^self! !
> 
> 
> You could then modify the example above to be:
> 
> stream asNewLineStream forLf nextPutAll: class comment
> 
> Cheers,
> Alistair
> 
> 
> 
>> and I am stuck with CR line endings.
>> The specific symptom is that it screws `git diff`
>> Here is a simple experiment...
>>    testfile := 'README.md' asFileReference.
>>    testfile ensureCreateFile writeStreamDo: [ :stream |
>>    stream nextPutAll: 'aa
>> bb' ].
>>    testfile binaryReadStream contents at: 3      "==>  Character cr "
>> 
>> I think its safe to assume on Linux that will result in "==>  Character lf "
>> but can someone please confirm?
>> 
>> So my issue is that I've got
>>    #ensureCreateFile - returns a FileReference
>> and
>>    :stream - is a ZnCharacterWriteStream wrapping a ZnBufferedWriteStream 
>> wrapping BinaryFileStream.
>> 
>> and neither seem to have an easily accessible defaultLineEnding setting.
>> Indeed, line endings are not a property of FileReference
>> and Binary & Characters have nothing to do with line endings,
>> and questionable if Buffering is related.
>> 
>> Its more a property of a File, but IIUC that is being deprecated (??)
>> 
>> MultiByteFileStream has #lineEndConvention:
>> but IIUC that also is being deprecated.
>> 
>> So what is the proper way to force default line endings?
>> 
>> 
>> ------
>> Now while composing this email I discovered String>>withUnixLineEndings.
>> So I have a solution...
>>    testfile := 'README.md' asFileReference.
>>    testfile ensureCreateFile writeStreamDo: [ :stream |
>>    stream nextPutAll: 'aa
>> bb'  withUnixLineEndings ].
>>    (testfile binaryReadStream contents at: 3) asCharacter   "==> Character 
>> lf "
>> 
>> but that seems to imply that on Windows...
>> 'aa
>> bb' at: 3  "==> Character cr "
>> 
>> and on Linux (someone please confirm)...
>> 'aa
>> bb' at: 3   "==> Character lf "
>> 
>> and that is *very* curious.  Strange that I never noticed it before and 
>> obviously that hasn't hurt me,
>> but considering the Principal Of Least Surprise it leaves me feeling 
>> somewhat violated :)
> 



Reply via email to