Emacs 23.3.1: стиль пробелов

#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 , чтобы сделать это таким образом:

введите описание изображения здесь

Итак, проблема решена. Спасибо, Люк!