2010-11-14 9 views
18

Questo è il messaggio di errore più inutile che abbia mai visto.Che cosa significa quando emacs mi dice "Errore nella specifica della modalità file"?

Penso che si traduca in .. "errore".

Il messaggio di errore completo dalle *Messaggi* buffer è:

File mode specification error: (wrong-type-argument characterp "string value here") 

penso che l'ultima parte di quel messaggio significa che emacs mi aspettavo un personaggio e ha ottenuto una stringa.

Ma come faccio a diagnosticare cosa significa quando emacs mi dice "Errore nella specifica della modalità file"? e come posso restringere il punto in cui questo errore sta originando?

In che modo sono correlati questi due errori (errore della modalità file, attesa del carattere e stringa ottenuta)?

+2

Un po 'più di contesto sulle condizioni in cui viene attivato l'errore aiuterebbe –

+0

Quindi, stai aprendo un file tramite find-file e alla fine dell'apertura del file Emacs segnala questo errore? O stai chiamando in modalità normale te stesso? Qual è il tipo di file che stai tentando di aprire? – vpit3833

+0

@ vpit3833, non sto tentando di aprire un file. non esplicitamente comunque. Sto eseguendo un codice elisp, ma ... anche questo non apre un file, nemmeno implicitamente. @Richard, capisco cosa stai chiedendo, ma non sto cercando aiuto per diagnosticare * questo particolare errore *. Sto cercando una spiegazione per questo messaggio di errore comune di emacs. Sembra apparire in molte circostanze, spesso non (apparentemente) legate all'apertura di un file. Sto chiedendo, * Perché è così? * – Cheeso

risposta

24

Usa M-xtoggle-debug-on-errorRET a cadere nel debugger quando si verifica questo (o qualsiasi) Errore - supponendo che si tratta di un errore di corretta, e non solo un messaggio. Questo ti dà la traccia dello stack, così puoi capire cosa lo ha causato, e procedi da lì (possibilmente con edebug, una volta che hai determinato quale funzione (o) utilizzare per lo strumento, ma puoi fare molto con il debugger regolare).

comandi standard del debugger: M-:(info "(elisp) Debugger Commands")RET

inserimento manuale principale per il debug di Lisp (tra cui edebug): M-:(info "(elisp) Debugging")RET

FYI, rgrep mi dice che l'unica istanza della stringa "Errore nella specifica della modalità file" nei file * .el per NTEmacs 23.2.1 appare nelloDefinizioneFunzione:
M-xfind-functionRETnormal-modeRET

+0

Grazie per i suggerimenti, e grazie per aver fatto il grep. Guarderò in 'normal-mode' e vedrò se riesco a capirci qualcosa. – Cheeso

+0

Non mi aiuta. Anche se ho 'toggle-debug-on-error', ottengo ancora l'errore senza che il debugger si avvii (ciò accade a volte quando provo ad aprire il file con' ido-find-file', e crea il buffer, ma non lo fa accendiamoci, se cambio poi manualmente tutto va bene). Qualche idea? – dolzenko

+0

dolzenko: Almeno in Emacs 24, quel messaggio è * solo * generato se 'debug-on-error' è' nil', quindi supponendo che si stia abilitando la variabile ON e non OFF, allora qualcos'altro deve essere disabilitato ' debug-on-error' prima che si verifichi l'errore. – phils

4

si potrebbe desiderare di dire quale versione di Emacs che si sta utilizzando.

Se è GNU Emacs 23, quindi il relativo codice è nella funzione normal-mode in files.el e si presenta così:

(report-errors "File mode specification error: %s" 
    (set-auto-mode)) 

Quindi la funzione set-auto-mode (o qualche funzione chiamata da lì) sta segnalando l'errore wrong-type-argument e normal-mode sta aggiungendo il testo File mode specification error nel tentativo di aiutarlo a rintracciare, ma purtroppo non aiuta qui, perché la funzione di set-auto-mode è determinare quale modalità principale deve avere un buffer e quindi attivare quella modalità. Mi aspetto che sia la modalità stessa a segnalare l'errore.

Quindi il consiglio di phil per accendere debug-on-error e guardare il backtrace è un buon esempio: questo dovrebbe darvi un'idea di cosa sta succedendo.

+0

Questo è utile, grazie. Sì, è emacs 23 su Windows. – Cheeso

0

Per me, è successo perché avevo una coppia in più di parentesi () attorno al corpo di una funzione che ho scritto. Immagino che faccia il lisp tentativo di eseguire il valore di ritorno del corpo della funzione. Quindi fai attenzione al numero delle tue parentesi!

Problemi correlati