определение конца строки в Emacs - PullRequest
4 голосов
/ 24 октября 2008

Я пишу файл конфигурации, и мне нужно определить, ожидает ли процесс файл формата Windows или файл формата Unix. У меня есть копия ожидаемого файла - есть ли способ проверить, использует ли он \ n или \ r \ n, не выходя из emacs?

Ответы [ 4 ]

7 голосов
/ 24 октября 2008

Если при открытии файла в Unix на модельной строке написано (DOS), строки заканчиваются в стиле Windows. Если при открытии файла в Windows написано (Unix), строки заканчиваются в стиле Unix.

Из руководства по Emacs 22.2 (Узел: Строка режима):

Если файл буфера использует возврат каретки, перевод строки изменяется на обратную косую черту ('\') или '(DOS)', в зависимости от операционной система. Если файл использует только возврат каретки, индикатор двоеточия меняется на косую черту ('/') или '(Mac)'. В некоторых системах Emacs отображает «(Unix)» вместо двоеточие для файлов, которые используют перевод строки как разделитель строк.

Вот функция, которая & ndash; Я думаю & ndash; показывает, как проверить из elisp, что Emacs определил как тип конца строки. Если это выглядит чрезмерно сложным, возможно, это так.

(defun describe-eol ()
  (interactive)
  (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
    (when (vectorp eol-type)
      (setq eol-type (coding-system-eol-type (aref eol-type 0))))
    (message "Line endings are of type: %s"
             (case eol-type
               (0 "Unix") (1 "DOS") (2 "Mac") (t "Unknown")))))
2 голосов
/ 24 октября 2008

Если вы перейдете в режим hexl (режим M-x hexl), вы увидите байты завершения строки.

0 голосов
/ 24 октября 2008

Следующая функция Elisp вернет nil, если в файле не появятся терминаторы "\r\n" (в противном случае она возвращает точку первого вхождения). Вы можете положить его в свой .emacs и позвонить с помощью M-x check-eol.

(defun check-eol (FILE)
  (interactive "fFile: ")
  (set-buffer (generate-new-buffer "*check-eol*"))
  (insert-file-contents-literally FILE)
  (let ((point (search-forward "\r\n")))
    (kill-buffer nil)
    point))
0 голосов
/ 24 октября 2008

Откройте файл в emacs, используя find-file-literal. Если строки имеют символы ^ M в конце, ожидается текстовый файл формата Windows.

...