Shriftning qulfini dangasa bo'lishidan qanday saqlab qolish mumkin?

bu savol bilan bog'liq.

python-mode uchun hozirgi shrift himoyasi sozlamalari:

(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))))

Kod mening xohlagan narsani qilar ekan (sharh organlari bor, lekin emas) boshlanuvchilar uchun, default ko'rinishida bo'lgan sharhlar uchun yuzida) faqat kichik buferlar yoki o'zgartiradigan joylar uchun.

Katta hajmli buferlar uchun (bitta ekrandan katta) shrift-lock ishlamay qoladi kerakli yuzlarni qo'llamaydi. Ammo matnni o'zgartirsam bu mintaqaning atrofida, u to'g'ri ta'kidlanadi.

font-lock-lazy

Yuqoridagi rasmda font-lock "Ko'p o'lchamli indeks yaratish tasmasi" ga ishonsa bo'ladi. Men u erda bir nuqtaga ko'chib o'tdim va bo'sh joyga kirdim - ta'kidlash to'g'ri bo'ldi.

Ekrandagi har bir satrni ta'kidlash uchun harflarning himoyasini ni qanday majburlashim kerak?

1
Ha, lekin bu qoidalar men uchun yagona yo'nalishdir.
qo'shib qo'ydi muallif Bert Huijben, manba
Qo'llanmaning (elisp) Font Lock Multiline tuguniga qaradingizmi?
qo'shib qo'ydi muallif sds, manba

2 javoblar

[Haqiqatan ham, sizning qoidalaringiz "yagona yo'nalish" dir, shuning uchun u (elisp) Font Lock Multiline da tavsiflangan muammolar orasida emas. Albatta, "dangasa" bilan hech qanday aloqasi yo'q. ]

Muammo ancha soddalashtiriladi: lpy-outline-comment-highlight funktsiyasida, agar siz materani topsangiz, lekin muvaffaqiyatga nil qaror qilsangiz, unda siz nilni qaytarasiz. shrift-qulfini boshqa ko'rinishini to'xtatishini ayting.

IOW sizning kodingizni bilan almashtirishingiz kerak.

Biznes:

(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
qo'shib qo'ydi

Siz shrift-lock-extend-region-functions dan foydalanishingiz mumkin. Bu hududni kengaytiradigan funktsiyalar ro'yxati mavjud. Siz o'zingizning vazifangizni to'liq sharhni qo'shish uchun mintaqani kengaytiradigan qilib qo'shishingiz mumkin, bu sizning kalit so'zlaringizni to'g'ri qo'llanishga majbur qiladi.

2
qo'shib qo'ydi
Nima uchun boshqa biror narsani ishlatishim kerakligini tushunmayapman. Mening taassurotim shuki, shrift-lock butun ekran qayta ishlanmagunga qadar lpy-outline-comment-highlight deb atalishi kerak edi.
qo'shib qo'ydi muallif Bert Huijben, manba
Iltimos, qiling. Murakkab font-lock haqida juda ko'p amaliy ma'lumot topa olmadim. Ma'lumot sahifalarida hech qanday misol keltirilmaydi va vikidagi misollar unchalik ahamiyatga ega emas.
qo'shib qo'ydi muallif Bert Huijben, manba
Xullas, bunday emas. Agar u to'g'ri deb hisoblaydigan mintaqaga qaror qilsa va uni ta'kidlaydi. Agar bu mintaqa sizning maxsus sharhlaringizning birida boshlasa, sizning vazifangiz ishlamaydi. Uni ekranga ulash siz xohlamagan narsa emas - agar sizning sharhingizning o'rtasi ekran boshlasa, u ishlamayapti. (Agar sizni yoqtirsa, men sizni qayta tiklash maydonchasini tasavvur qiladigan, unchalik ko'zga tashlanmagan vosita qilib yuborishim mumkin. Men shunga o'xshash vaziyatlarda foydalanmoqdaman.)
qo'shib qo'ydi muallif Daniel McPherson, manba
@ abo-abo, men sizga elektron pochta orqali xabar yubordim. Shrift-qulflash ma'lumotlarining eng yaxshi manbai - boshqa paketlar va shrift-qulf o'zgaruvchilarining o'zgaruvchan hujjatlari. Bu juda yengil, lekin odatda to'g'ri shakllanishni o'z ichiga oladi. Kerakli narsalar - qaysi vositalar mavjudligi va qanday qilib to'g'ri tanlash kerakligi haqida ma'lumot.
qo'shib qo'ydi muallif Daniel McPherson, manba