Як прадухіліць шрыфт блакаванне ад ляноты?

Якія адносяцца да гэтае пытанне .

Вось мая бягучая налада блакавання шрыфта для пітон-рэжым :

(require 'org)
(defconst lpy-font-lock-keywords
  '(("^#\\(\\* .*\\)$" 1 'org-level-1 prepend)
    ("^#\\(\\*\\* .*\\)$" 1 'org-level-2 prepend)
    ("^#\\(\\*\\*\\* .*\\)$" 1 'org-level-3 prepend)
    ("^#\\(\\*\\*\\*\\* .*\\)$" 1 'org-level-4 prepend)
    ("^#\\(\\*\\*\\*\\*\\* .*\\)$" 1 'org-level-5 prepend)
    (lpy-outline-comment-highlight 1 'default prepend)
    ("`\\([^\n']+\\)'" 1 font-lock-constant-face prepend)))

(font-lock-add-keywords 'python-mode lpy-font-lock-keywords)
(defun lpy-outline-comment-highlight (limit)
  (when (re-search-forward "^#\\(?:[^*]\\|$\\)" limit t)
    (let* ((pt (point))
           (success (save-excursion
                      (and (re-search-backward "^#\\*" nil t)
                           (null (re-search-forward "^[^#]" pt t))))))
      (when success
        (set-match-data (list (line-beginning-position) (line-end-position)
                              (point) (line-end-position)))
        (end-of-line)
        t))))

Код, здаецца, робіць тое, што я хачу (ёсць каментар цела, але не стартэры, у па змаўчанні твар для каментароў, якія адносяцца да схемах), але толькі для маленькіх буфераў, ці месцаў, якія я мадыфікуюцца.

Для вялікіх буфераў (больш, чым адзін экран), шрыфта блакавання будзе лянівым і не ўжываць неабходнае твар. Аднак, калі я змяніць тэкст вакол гэтага рэгіёну, ён будзе выдзелены правільна.

font-lock-lazy

На малюнку вышэй, шрыфта блакавання будзе ленавацца ў «Multi-размерной індэксацыі контуру». Такім чынам, я перамясціў кропку там, і ўвайшоў у прасторы - разыначка стала правільнай.

Як прымусіць шрыфта блакавання , каб вылучыць кожную радок на экране?

1
Так, але гэтыя правілы выглядаюць однострочный мне.
дададзена аўтар Bert Huijben, крыніца
У вас ёсць вы глядзелі на (Elisp) Шрыфт блакавання Multiline вузла інструкцыі?
дададзена аўтар sds, крыніца

2 адказы

[Сапраўды, вашыя правілы «адна радок", так што гэта не адносіцца да ліку праблем, апісаных у (Elisp) Шрыфт блакавання Multiline . Гэта на самай справе не мае нічога агульнага з «ляноты». ]

Праблема даволі проста: у вашым LPY контурнага-каментар-падсветцы функцыя, калі вы знойдзеце матч, але вы вырашылі, што поспех нуль, то вяртаць нуль, які будзе скажыце шрыфт замку, каб перастаць глядзець далей.

IOW вам трэба замяніць калі з пятлёй.

рашэнне:

(defun lpy-outline-comment-highlight (limit)
  (catch 'done
    (while (re-search-forward "^#\\(?:[^*\n]\\)" limit t)
      (let* ((pt (point))
             (success (save-excursion
                        (and (re-search-backward "^#\\*" nil t)
                             (null (re-search-forward "^[^#]" pt t))))))
        (when success
          (set-match-data (list (line-beginning-position) (line-end-position)
                                (point) (line-end-position)))
          (end-of-line)
          (throw 'done t))))))
3
дададзена

Вы можаце выкарыстоўваць шрыфта замыканне пашырэння-вобласць-функцыі . Ён змяшчае спіс функцый, якія пашыраюць вобласць, якая rehighlighted. Вы можаце дадаць свае ўласныя функцыі да яго, што пашырае вобласць, каб ўключаць поўны каментар, прымушаючы ключавыя словы, якія будуць ужытыя правільна.

2
дададзена
Я не разумею, чаму я павінен выкарыстоўваць нешта іншае. У мяне склалася ўражанне, што шрыфт блакавання павінен быць выклік LPY контурны-каментар-разыначкай зноў і зноў, пакуль увесь экран не будзе апрацаваны.
дададзена аўтар Bert Huijben, крыніца
Калі ласка. Я не змог знайсці шмат практычнай інфармацыі аб комплексе шрыфта блакавання . На інфармацыйных старонках не даюць прыкладаў і прыклады на вікі трывіяльных іх.
дададзена аўтар Bert Huijben, крыніца
Ну, гэта не так. Калі рашэнне па вобласці, што лічу мэтазгодным і падкрэслівае яго. Калі гэты рэгіён пачнецца ў сярэдзіне аднаго з вашых спецыяльных каментароў, ваша функцыя не будзе працаваць. Падключэнне яго да экрана, не тое, што вы хочаце, альбо - калі экран запуску ў сярэдзіне Вашага каментара, ён па-ранейшаму не працуе. (Калі вы хочаце, я магу адправіць вам нявыдадзены інструмент, які візуалізуе вобласць refontification. Я выкарыстоўваю яго ў падобных сітуацыях.)
дададзена аўтар Daniel McPherson, крыніца
@ Або-Або, я толькі што адправіў вам ліст. Лепшы крыніца для шрыфта блакавання інфармацыі іншых пакетаў, а зменная дакументацыя зменных шрыфта антыблакавальнай. Гэта вельмі ўшчыльнены, але, як правіла, утрымлівае правільнае адукацыю. Што трэба, гэта павараная кніга якога інструменты даступныя і як вы павінны выбраць правільны.
дададзена аўтар Daniel McPherson, крыніца