2010-01-14 5 views
3

je reçois cette erreur dans emacs chaque fois que je tape quelque chose dans certains tampons:fonction emacs c-forward-sws: argument de type incorrect: stringp, nul

c-forward-sws: argument de type incorrect: stringp ,

Cela semble être une mise en évidence de la syntaxe; Je l'obtiens dans un tampon qui est en mode sh chaque fois que je tape quelque chose - même retourner sur une ligne vide. Je l 'ai aussi parfois trouvé dans un tampon en mode C++ mais je ne me souviens pas de la ligne spécifique, je ne peux pas non plus la reproduire dans un tel mode.

Je n'ai pas changé mes .emacs récemment (que je peux rappeler).

Des idées quel est le problème? La fonction est définie dans cc-engine.el mais j'ai du mal à comprendre le contexte.

Répondre

3

Les chances sont bonnes que vous avez auto-fill-mode sur et auto-fill-function est c-do-auto-fill, ce qui ne fonctionne pas très bien pour d'autres langues. Désactivez le filtrage automatique (M-x auto-fill-mode) ou modifiez la valeur de la fonction de remplissage.

Vous devriez pouvoir déboguer l'entrée à auto-fill-mode explicitement avec M-x debug-on-entry RET auto-fill-mode et voir ce qui l'appelle. Il y a probablement un crochet qui l'active, qui apparaîtra dans la trace de la pile.

[Mise à jour]

J'ai trouvé que la valeur globale de auto-fill-function était fixé (il est censé être local tampon toujours). Le résultat est que tous les tampons utilisent par défaut le remplissage automatique avec cette fonction. Je n'ai pas déterminé comment la valeur globale est définie, mais elle peut être effacée en utilisant (setq-default auto-fill-function nil).

+0

Merci. Si je le vois encore, je vais l'essayer. – Anne

+1

Je vois cela encore, et c'est exactement ce qui se passe. Je suis en mode de remplissage fondamental, donc je ne sais pas pourquoi la fonction de remplissage automatique est c-do-auto-fill. En fait, cela est vrai pour tout nouveau tampon que j'ouvre en mode fondamental, mais seulement dans cette session emacs. On dirait que la session d'emacs a été corrompue. – Anne

3

Pour comprendre le problème, vous devez faire un peu plus d'enquête. Ce que vous avez fourni n'est pas suffisant (à moins que le répondant n'ait déjà vu le problème spécifique).

La première étape consiste généralement à définir la variable debug-on-error à t. Cela fournira une trace de pile avec plus d'informations (vous indiquant généralement quelle expression à l'intérieur de la fonction est à l'origine du problème).

Si vous pouvez fiable reproduire le problème, ne définissez pas la variable ci-dessus, mais plutôt aller à la définition de la fonction (find fonction Mx c-forward-sws RET) et le configurer pour le débogage avec Mx edebug-defun. Ensuite, faites ce qui provoque l'erreur et passez par le code. Le débogueur est assez intuitif si vous êtes familier avec lisp, et la documentation peut être trouvée sur this info page.

À tout le moins, en ajoutant la trace de la pile pourrait fournir suffisamment d'informations pour mener à une réponse, mais probablement il faudra un test pour reproduire le problème ...

+0

J'espérais que quelqu'un aurait déjà vu le problème spécifique. Maintenant que j'ai le temps de regarder plus, je ne peux pas reproduire le problème, donc je ne peux pas déboguer davantage. Oh bien ... – Anne

Questions connexes