[Top][All Lists]

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

mac/dos/unix newline conversion without specify from

From: Xah Lee
Subject: mac/dos/unix newline conversion without specify from
Date: Sun, 2 Dec 2007 10:14:44 -0800 (PST)
User-agent: G2/1.0

i was surprised today, to find that Carbon Emacs 22 and also Aquamacs,
does not open a file with classic Mac OS line endings properly? (i.e.
EOL shows up as ^M)

i realized this when trying to write a elisp program to do the
conversion given a file name.

originally, i thought set-buffer-file-coding-system does it. But not
so if the file opened is a classic mac os file with CR as newline.
After some elisp doc reading, i find that i have to call (coding-
system-for-read 'mac) first. But then, it is not better if i actually
just do the newline replacement myself like this:

; code untested
(defun xx ()
  "temp... Convert list of files to unix/mac/dos's newline char."
  (let (fpath mybuffer)
    (setq fpath "~/web/emacs/x2/x1mac")
    (setq mybuffer (find-file fpath))
    ; note: Mac here denote Mac OS up to 9.
    ; In Mac OS X, both unix newline and old mac newline are accepted,
but unix newline is recommended.
    (replace-string "\n" "\r" nil 1 (1+ (buffer-size))) ; unix to mac
    (replace-string "\n" "\r\n" nil 1 (1+ (buffer-size))) ; unix to
    (replace-string "\r" "\n" nil 1 (1+ (buffer-size))) ; mac to unix
    (replace-string "\r" "\r\n" nil 1 (1+ (buffer-size))) ; mac to dos
    (replace-string "\r\n" "\n" nil 1 (1+ (buffer-size))) ; dos to
    (replace-string "\r\n" "\r" nil 1 (1+ (buffer-size))) ; dos to mac
;    (set-buffer-file-coding-system 'unix) ; or 'mac or 'dos
    (kill-buffer mybuffer)

Basically, i was trying to avoid having both to specify the from and
to. I was hoping to just specifiy the to.

any suggestions? Thanks.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]