#whitespace #emacs23
#пробелы #emacs23
Вопрос:
Я только что обновился до Kubuntu 11.10. После этого способ, которым Emacs представляет пробелы в режиме незначительных пробелов, изменился. Это были заштрихованные прямоугольники, а не Emacs, которые ставят точки вместо пробелов:
Я попытался изменить его с помощью M-x customize-group
and then whitespace
— но такой вещи, как точка, нет. В нем говорится, что пробелы представлены затенением (см. Рисунок выше), но это не так (см. Тот же рисунок).
Вот значение пробельной грани пробела:
Я также задавал этот вопрос суперпользователю, но, поскольку я получил там 0 ответов, я решил проконсультироваться с другим сообществом.
Правка 1:
Следование решению Люка не дает раскраски ни для пробелов, ни для вкладок (если я не сделал что-то не так):
Правка 2:
Добавление face
здесь исправляет решение Люка. Спасибо Сергею.
(setq whitespace-style (quote
( face spaces tabs newline space-mark tab-mark newline-mark)))
Правка 3:
В настоящее время я использую:
(custom-set-variables
'(whitespace-line-column 9999999)
'(whitespace-tab-width 4 t)
'(whitespace-display-mappings '(
(space-mark ? [?u00B7] [?.]) ; space - centered dot
(space-mark ?xA0 [?u00A4] [?_]) ; hard space - currency
(newline-mark ?n [?$ ?n]) ; eol - dollar sign
(tab-mark ?t [?u00BB ?t] [?\ ?t]) ; tab - left quote mark
))
'(whitespace-style '(face spaces tabs newline space-mark tab-mark newline-mark))
)
(custom-set-faces
'(default ((t (:inherit nil :stipple nil :background "#ffffb1" :foreground "#141312" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 125 :width normal :foundry "monotype" :family "DejaVu Sans Mono"))))
'(whitespace-trailing ((t (:background "grey99"))))
)
в Emacs 24.3.50.1
Комментарии:
1. Каково значение «Пробельного пробела» (третий элемент сверху)?
2. @ Luke Girvin: Я загрузил скриншот.
Ответ №1:
Вероятно, есть лучший способ сделать это, но добавление этого в ваш файл .emacs должно сработать:
(setq пробел-отображение-сопоставления '( (пробел? [? ]) ;; используйте пробел, а не точку (пробел ?xA0 [?u00A4] [?_]) (пробел ? x8A0 [? x8A4] [?_]) (пробел ? x920 [? x924] [?_]) (пробел ?xE20 [? xE24] [?_]) (пробел ? xF20 [? xF24] [?_]) (новая строка-пометка ?n [?$ ?n]) (табуляция ?t [?u00BB ?t] [?\ ?t]))) (настраиваемые грани '(пробел-пробел (((цвет класса) (фон темный)) (: фон "красный": передний план "белый")) (((цвет класса) (фоновый свет)) (: фон "желтый": передний план "черный")) (t (: обратное-видео t)))))
Стандартное значение whitespace-display-mappings
использует «среднюю точку» для пробела, приведенный выше код использует стандартный пробел. Вы можете изменить цвета по whitespace-space
мере необходимости.
Комментарии:
1. Я добавил скриншот. Странно — но после ввода вашего кода в .emacs — ни пробелы, ни табуляции не выделяются.
2. Работает ли это, если выполнить оценку кода после запуска Emacs с флагом -q?
Ответ №2:
Все, что вам нужно, это просто добавить ключевое слово ‘face’ вместе с другими в стиле пробелов. Например.:
(setq whitespace-style (quote
( face spaces tabs newline space-mark tab-mark newline-mark)))
Комментарии:
1. Я попробовал это — вы правы — добавление
face
действительно исправляет решение Люка (второй скриншот в исходном сообщении). Спасибо.
Ответ №3:
После использования рекомендаций Люка Гирвина и начала emacs
с -q
флага — решение Люка сработало. Я обнаружил, что проблема заключалась в
;; make whitespace-mode use just basic coloring
(setq whitespace-style (quote
( spaces tabs newline space-mark tab-mark newline-mark)))
эти строки в .emacs
. Итак, я удалил их, а затем использовал customize-group
-> whitespace
, чтобы сделать это таким образом:
Итак, проблема решена. Спасибо, Люк!