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

Я только что обновился до Kubuntu 11.10. После этого способ, которым Emacs представляет пробелы в режиме второстепенных пробелов, изменился. Это были заштрихованные прямоугольники, а не Emacs ставит точки вместо пробелов:

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

Я пытался изменить его через M-x customize-group, а затем whitespace -- но там нет такой вещи, как точка. В нем говорится, что пробелы представлены штриховкой (см. рисунок выше), но это не так (см. тот же рисунок).

Вот значение лица Whitespace Space:

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

Я также задал этот вопрос в superuser, но так как я не получил там 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


person Adobe    schedule 24.10.2011    source источник
comment
Каково значение «Белое пространство» (третий элемент сверху)?   -  person Luke Girvin    schedule 24.10.2011
comment
@ Люк Гирвин: я загрузил скриншот.   -  person Adobe    schedule 24.10.2011


Ответы (3)


Вероятно, есть лучший способ сделать это, но добавление этого в ваш .emacs должно работать:

(setq whitespace-display-mappings
      '(
    (space-mark   ?\     [? ]) ;; use space not dot
    (space-mark   ?\xA0  [?\u00A4]     [?_])
    (space-mark   ?\x8A0 [?\x8A4]      [?_])
    (space-mark   ?\x920 [?\x924]      [?_])
    (space-mark   ?\xE20 [?\xE24]      [?_])
    (space-mark   ?\xF20 [?\xF24]      [?_])
    (newline-mark ?\n    [?$ ?\n])
    (tab-mark     ?\t    [?\u00BB ?\t] [?\\ ?\t])))

(custom-set-faces
 '(whitespace-space
   ((((class color) (background dark)) (:background "red" :foreground "white"))
    (((class color) (background light)) (:background "yellow" :foreground "black"))
    (t (:inverse-video t)))))

Стандартное значение whitespace-display-mappings использует «среднюю точку» для пробела, код выше использует стандартный пробел. Вы можете изменить цвета для whitespace-space по мере необходимости.

person Luke Girvin    schedule 24.10.2011
comment
Я добавил скриншот. Странно - но после ввода Вашего кода в .emacs - ни пробелы, ни табы не подсвечиваются. - person Adobe; 24.10.2011
comment
Работает ли это, если eval код после запуска Emacs с флагом -q? - person Luke Girvin; 25.10.2011

Все, что вам нужно, это просто добавить ключевое слово «лицо» вместе с другими в стиле пробелов. Например.:

(setq whitespace-style (quote
  ( face spaces tabs newline space-mark tab-mark newline-mark)))
person Sergey    schedule 31.10.2011
comment
Я попробовал это - вы правы - добавление face действительно исправляет решение Люка (второй снимок экрана в исходном сообщении). Спасибо. - person Adobe; 31.10.2011

После использования совета Люка Гирвина и запуска 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, чтобы сделать так:

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

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

person Adobe    schedule 26.10.2011