Come posso impostare la codifica dei caratteri emacs per i file in una directory?


2

Sto usando Aquamacs, una distribuzione di GNU Emacs 23.3.50.1.

Sto guardando alcuni file sorgente scritti con alcuni commenti in greco e sono codificati in CP1253.

Inoltre, posso ripristinare la codifica corretta oppure aggiungere una variabile locale del file:

/* -*- mode: c-mode; tab-width: 4; coding: cp1253-unix; -*- */

In questo modo riesco ad aprirli correttamente e potrei sicuramente puntare sulle variabili dei file per ogni file.

Ma vorrei impostare la codifica per l'intera directory. Invece di modificare manualmente .dir-locals.el, ho pensato semplicemente:

M-x copy-file-locals-to-dir-locals

Dal file che si è aperto correttamente. E questo genera:

;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.

((c-mode
  (tab-width . 4)
  (coding . cp1253-unix)))

Niente da fare. Tuttavia riconosce chiaramente la nuova larghezza della scheda, quindi sta leggendo il file.

Qualche idea sul perché? E c'è qualche registro mentre emacs sta elaborando la a-list?


Con emacs24, se provo a impostare codingin .dir-locals.el, ricevo un avviso quando Warning (:warning): Coding cannot be specified by dir-locals
apro

Risposte:


1

Sfortunatamente, sembra che l'intestazione di codifica, di progettazione, non si propaga dai dir-locali di Emacs; Ho lottato con la tua configurazione e ho replicato anche il problema.

Successivamente mi sono imbattuto in questa fonte che sembra verificare ciò che hai trovato: http://www.emacsmirror.org/package/dir-locals.html

Non sono sicuro che esista un registro per elaborare l'elenco a, ma nel caso in cui non si abbia familiarità con questa variabile, è possibile verificare la codifica dopo aver visitato un file con:

C-h v buffer-file-coding-system RET

o

M-x describe-variable RET buffer-file-coding-system RET

Personalmente, penso che la tua scommessa migliore sarebbe quella che hai già funzionante: file variabili locali.

Le alternative a cui riesco a pensare (la prima è non testata) sarebbero dare un'occhiata ad alcune delle funzioni elisp:

(coding-system-priority-list)
(set-coding-system-priority &rest coding-systems)

O secondo: (supponendo che la struttura della directory sia /something/blah/greekcode/file.c)

(add-to-list 'auto-coding-alist 
     '("/greekcode/[^/]+.c\\'" . cp1253-unix))

Ciò ha la precedenza anche sulle variabili locali del file. Modifica la regexp di cui hai bisogno e sperimenta valutando:

(find-auto-coding "/home/brian/greekcode/garbage.c" 1) <= C-x C-e

ritorna:

(cp1253-unix . auto-coding-alist)

Speriamo che questo aiuti! Mi piacerebbe sapere cosa propongono gli altri utenti di emacs come soluzioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.