LINUX.ORG.RU

[emacs,whitespace-mode] Уведомление о найденных проблемах


0

0

Попробовал whitespace-mode в emacs, понравилось. Единственное неудобство — если файл большой, то подсвеченные проблемы можно и не увидеть. В принципе, есть whitespace-report, но его надо вызывать ручками для каждого файла, да и содержит он слишком детализированную информацию — мне только нужно знать, найдены ли указанные мной проблемы или нет. Посему хотелось бы, чтобы при открытии файла whitespace делал проверку и менял цвет имени мода в мод-лайне в случае проблем.
Как это сделать? Как менять цвет в модлайне я вроде нашел:
(setq mode-name (propertize mode-name 'face 'whitespace-indentation))
(force-mode-line-update)
Остальное сокрыто туманом незнания.

(defun my/mark-modeline-on-bad-whitespace ()
  (when (whitespace-report) 
    (setq mode-name (propertize mode-name 'face 'whitespace-indentation)) 
    (force-mode-line-update)))

(add-hook 'find-file-hook 'my/mark-modeline-on-bad-whitespace)
Sphinx ★★☆☆
()
Ответ на: комментарий от Sphinx

Спасибо! Идея понятна. Но работает некорректно, буду разбираться.

Во-первых, я поменял (whitespace-report nil t), чтобы окно репорта не вылезало, если ошибок нет. Но это не решает всех проблем, так как (насколько я понял) whitespace-report возвращает t если найдет хоть какую-нибудь ошибку, даже если в настройках она выключена. Пример:

 Whitespace Report
 Current Setting                       Whitespace Problem
 empty                    [X]     [ ]  empty lines at beginning of buffer
 empty                    [X]     [ ]  empty lines at end of buffer
 trailing                 [X]     [ ]  SPACEs or TABs at end of line
 indentation              [X]     [ ]  TABs at beginning of line
 indentation::tab         [ ]     [X]  8 or more SPACEs at beginning of line
 space-before-tab         [X]     [ ]  SPACEs before TAB
 space-before-tab::tab    [ ]     [ ]  SPACEs before TAB: SPACEs
 space-after-tab          [X]     [ ]  8 or more SPACEs after TAB

WS считает, что 8 пробелов — это плохо. Я так не считаю (меня больше волнуют табы), но ws все равно возвращает t.

j-a-t-a
() автор топика
Ответ на: комментарий от Sphinx

Настроена, видимо это такая специфика whitespace-mode. Репорт выше я урезал, чтобы оставить побольше дискового пространства для толксолюбов, изначально там был такой кусок:

 indentation::tab         [ ]     [X]  8 or more SPACEs at beginning of line
 indentation::space       [X]     [ ]  TABs at beginning of line
У нас отступы отбиваются пробелами, табы запрещены, поэтому у меня в whitespace-style прописан indentation::space. Понятно, что это несовместимо с указанной в репорте проблемой indentation::tabs — либо проблемой являются табы, либо пробелы. Поэтому у меня и возникло подозрение, что ws в правой колонке показывает _ВСЕ_ виды проблем, которые ему известны и были обнаружены, но будет исправлять только помеченные в первой колонке. И возвращает t, если найден хоть один вид проблем, даже если они отключены в конфиге.

j-a-t-a
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.