Question

J'écris un fichier de configuration et je dois définir si le processus attend un fichier au format Windows ou un fichier au format Unix. J'ai une copie du fichier attendu. Puis-je vérifier si elle utilise \ n ou \ r \ n sans quitter emacs?

Était-ce utile?

La solution

Si le fichier (DOS) est indiqué sur le modèle lorsque vous ouvrez le fichier sous Unix, les fins de ligne sont de style Windows. Si le fichier indique (Unix) à l’ouverture du fichier sous Windows, les fins de ligne sont de style Unix.

À partir du manuel Emacs 22.2 (Node: Mode Line):

  

Si le fichier du tampon utilise   retour à la ligne, les deux points   passe à une barre oblique inversée ('\') ou   '(DOS)', en fonction de l'opération   système. Si le fichier utilise seulement   retour de chariot, l'indicateur de deux points   passe soit à une barre oblique   ('/') ou '(Mac)'. Sur certains systèmes,   Emacs affiche '(Unix)' au lieu de   deux points pour les fichiers qui utilisent newline comme   le séparateur de ligne.

Voici une fonction qui & # 8211; Je pense & # 8211; montre comment vérifier depuis elisp ce qu'Emacs a déterminé être le type de fin de ligne. Si cela semble excessivement compliqué, peut-être que oui.

(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")))))

Autres conseils

Si vous passez en mode hexl (mode M-x hexl), vous devriez voir les octets de fin de ligne.

Ouvrez le fichier dans emacs en utilisant find-file-literally. Si les lignes comportent des symboles ^ M à la fin, un fichier texte au format Windows est attendu.

La fonction Elisp suivante renvoie nil si aucun terminateur "\ r \ n" n'apparaît dans un fichier (sinon, il renvoie le point de la première occurrence). Vous pouvez le mettre dans votre .emacs et l'appeler avec 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))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top