#emacs #elisp
#emacs #elisp
Вопрос:
Пожалуйста, я ищу помощи для управления выделенными жирным шрифтом гранями в сочетании с наложениями. При стандартном методе обычно достаточно поместить в другую грань, чтобы предотвратить ее превышение. font-lock
:bold nil
Однако эта же концепция, похоже, не применяется при работе с оверлеями. Что еще можно сделать при работе с оверлеями, чтобы предотвратить распространение выделения жирным шрифтом на другие грани?
Например: когда два наложения перекрываются, как я могу предотвратить выделение tab-face
жирным шрифтом hr-underscore-face
?
(defface tab-face
'((t (:foreground "cyan" :bold t)))
"Face for `tab-face`."
:group 'lawlist-ruler-faces)
(defface hr-underscore-face
'((t (:underline "yellow" :bold nil)))
"Face for `hr-underscore-face`."
:group 'lawlist-ruler-faces)
РЕДАКТИРОВАНИЕ (19 июня 2014 г.): добавлен пример .emacs
конфигурации для воспроизведения проблемы и два скриншота. Путь к файлу ispell-program-name
необходимо будет задать в соответствии с собственными настройками пользователя.
;; GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0,
;; NS appkit-1038.36 Version 10.6.8 (Build 10K549)) of 2014-06-01 on MP.local
(set-face-attribute 'default nil
:background "black" :foreground "white" :font "Courier" :height 180)
(tool-bar-mode -1)
(require 'ispell)
(require 'flyspell)
(setq-default ispell-program-name
"/Users/HOME/.0.data/.0.emacs/elpa/bin/aspell")
(custom-set-faces
'(flyspell-incorrect ((t (:foreground "yellow" :weight bold ))))
'(highlight ((t (:underline "yellow" :weight normal)))))
(defun zoom ()
(interactive)
(setq buffer-face-mode-face `(:height 575))
(buffer-face-mode 1))
(defun test-number-one ()
(interactive)
(switch-to-buffer (get-buffer-create "test-number-ONE"))
(zoom)
(turn-on-flyspell)
(setq flyspell-mark-duplications-flag nil)
(setq flyspell-duplicate-distance 0)
(hl-line-mode 1)
(insert
"This is `test-number-one`."
"n"
"n"
"Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"
"n"
"n"
"Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"))
(defun test-number-two ()
(interactive)
(switch-to-buffer (get-buffer-create "test-number-TWO"))
(zoom)
(hl-line-mode 1)
(insert
"This is `test-number-two`."
"n"
"n"
"Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"
"n"
"n"
"Aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz"))
В примере номер один подчеркивание выделено жирным шрифтом. [Тем не менее, я хотел бы узнать, как сделать так, чтобы подчеркивание последовательно имело нормальный вес (даже если :foreground
текст выделен жирным шрифтом).]
(источник: lawlist.com )
В примере номер два подчеркивание является нормальным.
(источник: lawlist.com )
Ответ №1:
:bold
это псевдоним совместимости. Для более точного управления используйте :weight
, например
(defface hr-underscore-face
'((t (:underline "yellow" :weight normal)))
"Face for `hr-underscore-face`."
:group 'lawlist-ruler-faces)
Комментарии:
1. Спасибо — я продолжу работать над этим проектом в течение следующих нескольких дней и посмотрю, смогу ли я собрать короткий рабочий пример, чтобы воспроизвести то, что я вижу. Похоже, что использование наложения, содержащего только подчеркивание (например,
(:underline "yellow" :weight normal)
) в том же месте, что и другое наложение с жирным шрифтом (например, ),(:foreground "cyan" :weight bold)
приводит к ситуации, которая сбивает с толку Emacs, и имеет значение, какое наложение было размещено первым. Я вижу это сflyspell-incorrect
помощью; а такжеbuffer-display-table
модификация, в которой у меня есть жирная раскраска символов для вкладок.2. По сути, я хотел бы использовать наложения для подчеркивания всей горизонтальной строки текста (текст может содержать или не содержать жирный шрифт); и я бы хотел, чтобы подчеркивание имело нормальный вес по всей длине горизонтальной строки ( без изменения внешнего вида выделенного жирным шрифтом текста, который может быть выделен жирным шрифтом).присутствует над подчеркиванием). Это очень похоже на
hl-line-mode
.
Ответ №2:
Я не вижу проблемы, о которой вы сообщаете, даже с кодом, который вы опубликовали (хотя я согласен с @Stefan о :weight normal
).
Оценивая ваш код, я получаю это, который показывает желтое подчеркивание по всему буферу и жирный текст только на части последней строки:
Чего мне не хватает? (Это с буфером в текстовом режиме и font-lock-mode
отключено.)
Комментарии:
1. Спасибо, что взглянули на эту тему — очень признателен! Я обновил вопрос с помощью примера кода, чтобы воспроизвести проблему, которую я вижу, и два скриншота. Если возможно, я хотел бы узнать о способе последовательного контроля наличия наложений в одной и той же позиции с выделением
:foreground
жирным шрифтом и:underline
нормальным . Flyspell использует оверлеи вместоfont-lock
, поэтому я выбрал этот пример.hl-line-mode
также использует оверлеи вместоfont-lock
. Ситуация, вероятно, несколько особенная, когда имеешь дело с двумя конкурирующими наложениями в одной и той же позиции.2. Второстепенный режим, с которым я писал / работал, — это улучшенная версия
vline-mode
andhl-line-mode
. Решение этой конкретной проблемы, которую можно увидеть вhl-line-mode
, также решит ту же проблему, которую я вижу в моем пользовательском режиме перекрестия.3. Попробуйте использовать более высокое
priority
значение для наложения, в котором используется грань nderline. Приоритеты наложения обычно позволяют перемещать одно наложение поверх другого (визуально). (И вы должны попытаться дать минимальный код, если хотите, чтобы люди пытались что-то переписать. Вы должны быть в состоянии повторить вашу проблему, не вводя различные режимы и т. Д.)4. Спасибо за
priority
предложение. Это будет незавершенный поток. Сегодня вечером я добился некоторого прогресса, определив, что мое наложение курсора оказывает значительное влияние на визуальную проблему, описанную в этой теме — у меня есть четыре (4) базовых группы наложений, которые происходят здесь — (1) от левого края вдовы до курсора (подчеркнуто); (2) курсор (выделенный жирным шрифтом, но не подчеркнутый); (3) после курсора до конца строки (подчеркнутый); и (4) после строки (подчеркнутый) от конца строки до правого края окна. Flyspell — это пятый (5-й) элемент, появляющийся на сцене . . . .5. См. Также Ошибку Emacs # 17824 . Это может быть актуально; не знаю.