Функция emacs c-forward-sws: Неверный аргумент типа: stringp, nil - PullRequest
3 голосов
/ 14 января 2010

Я получаю эту ошибку в emacs всякий раз, когда я что-то печатаю в определенных буферах:

c-forward-sws: неверный аргумент типа: stringp, nil

Кажется, что это подсветка синтаксиса; Я получаю его в буфере, который находится в режиме sh, всякий раз, когда я что-то печатаю - даже возвращаю пустую строку. Я также иногда получал его в буфере режима C ++, но не помню конкретной строки и не могу воспроизвести его в таком режиме.

В последнее время я не изменил свой .emacs (насколько я помню).

Есть идеи, в чем проблема? Функция определена в cc-engine.el, но мне сложно разобраться в контексте.

Ответы [ 2 ]

4 голосов
/ 14 января 2010

Чтобы выяснить проблему, вам нужно немного больше изучить. Недостаточно того, что вы указали (если ответчик уже не видел конкретной проблемы).

Первым шагом обычно является установка переменной debug-on-error на t. Это обеспечит трассировку стека дополнительной информацией (обычно сообщающей, какое выражение внутри функции вызывает проблему).

Если вы можете надежно воспроизвести проблему, не устанавливайте вышеуказанную переменную, а вместо этого перейдите к определению функции ( Mx find-function c-forward-sws RET ) и установите ее для отладки с Mx edebug-defun . Затем сделайте то, что вызывает ошибку, и пошагово пройдитесь по коду. Отладчик довольно интуитивно понятен, если вы знакомы с просмотром lisp, а документацию можно найти на этой информационной странице .

По крайней мере, добавление трассировки стека может предоставить достаточно информации, чтобы привести к ответу, хотя, скорее всего, потребуется тестовый пример, чтобы воспроизвести проблему ...

3 голосов
/ 12 августа 2010

Скорее всего, у вас есть auto-fill-mode, а auto-fill-function - c-do-auto-fill, что не очень хорошо работает для других языков. Либо отключите автозаполнение (M-x auto-fill-mode), либо измените значение функции заполнения.

Вы должны быть в состоянии отладить запись в auto-fill-mode явно с помощью M-x debug-on-entry RET auto-fill-mode и посмотреть, что ее вызывает. Вероятно, есть крючок, который его включает, который появится в трассировке стека.

[Update]

Я обнаружил, что глобальное значение auto-fill-function было установлено (оно всегда должно быть локальным по отношению к буферу). В результате все буферы по умолчанию используют функцию автозаполнения с этой функцией. Я не определил, как устанавливается глобальное значение, но его можно очистить с помощью (setq-default auto-fill-function nil).

...