"Window-end" oynasi qanday o'tsa, qanday olinadi?

window-end funksiyasining doc dan:

Yangilanish nil bo'lmagan bo'lsa ham, oyna-oxir ekranni siljitsa, ekranni siljitsa, haqiqiy relizlash usulini bajaradi. Bu oyna boshlang'ich qiymatini o'zgartirmaydi. Haqiqatdan ham, agar skript kerak bo'lmasa, ko'rsatilgan matn qaerga tugashini bildiradi.

window-end faqatgina hisobotlarni ko'rish kerak bo'lsa, window-end ni olish uchun nima qilishim kerak? > Joriy oynaning oxirida oynani bir satrga aylantirishga sabab bo'lgan next-line ni chaqirdimmi? window-end funksiyasini chaqirishdan oldin oynani qayta ko'rsatish uchun oynani majburlash kabi biror narsa kerakmi?

3
IIUC (faqat (redisplay) ) bilan ishlashni xohlaysizmi (ehtimol, avvalo qayta ishlashga majbur qilishdan tashqari). yaxshi javob.
qo'shib qo'ydi muallif sds, manba
Men "qandaydir funktsiya" nima ekanligini bilmayman va nima uchun men derazadan boshlash/tugatishni bilishim kerakligini bilmayman, va keyingi qatorni bajarish paytida nima uchun unga kerak bo'lmasligini ham bilmayman.
qo'shib qo'ydi muallif sds, manba
Buning uchun window-start va window-endni bilish shart emas. Aksincha, siz ko'rsatadigan buferning har bir qismida chaqiriladigan fontification-functions dan foydalanmoqchisiz. Odatda bu to'g'ridan-to'g'ri ishlatilmaydi, lekin uning o'rniga jit-lock-register orqali amalga oshiriladi.
qo'shib qo'ydi muallif sds, manba
Misol uchun, nlinum rejimini (GNU ELPA da) ko'ring.
qo'shib qo'ydi muallif sds, manba
@Stefan Men ba'zi funktsiyalarini bajarishga harakat qilaman to'plami. Muammo shundaki, barcha ko'rinadigan chiziqlarni olish uchun dolzarb window-start va window-end kodini bilishim kerak, lekin keyingi bosqichda derazasiga o'tishga sabab bo'ladi, bu oyna chegaralari to'g'ri emas.
qo'shib qo'ydi muallif Mahesh, manba
@Stefan Menda jit-lock-register dan foydalanishga harakat qilolmadim. Faqatgina parametrlarni chiqaradigan oddiy funktsiyani ro'yxatdan o'tkazgandan so'ng, derazani siljitish uchun next-line dan foydalansam, bu nom berishga o'xshamaydi. Buni ishlatadigan kodni ishora qila olasizmi? EDIT: bir necha martadan oldin turli parametrlarga ega bo'lib, u birinchi marta buferni tashrif buyuradi.
qo'shib qo'ydi muallif Mahesh, manba
Vizual chiziqlarga kirishni istaganim uchun window-start va window-end ni bilish kerak. Agar next-line oynani aylantirsa, ingl. Chiziqlar o'zgartiriladi, shuning uchun qoplamani mos ravishda o'zgartirishimiz kerak.
qo'shib qo'ydi muallif Mahesh, manba

1 javoblar

Foydalanuvchiga eng yaxshi tarzda erishish mumkin - C-manba kodini o'zgartirmasdan yoki majbur qilmasdan - window-end funktsiyasidan foydalanish window-scroll-functions t ga mos keladigan ixtiyoriy ikkinchi dalilni ikkita argumentga ega - https://www.gnu.org/software/emacs /manual/html_node/elisp/Window-Hooks.html#Window-Hooks [QAYD: Qayta ko'rib chiqishni majburiy bo'lmagan ko'zga (ikkinchi yarmida) tugallanmagan mahsulotni ko'rsatishi mumkin, masalan, yangi qoplamalar hali olinmagan/joylashtirilgan emas.]

CAVEAT:  Beware that the window-scroll-functions hook fires sometimes more than once during each command loop (while redisplay performs its job), and the first values for window-start and window-end win t are not always correct, and the last values are not always correct either -- e.g., when inserting/yanking, or when using goto. [Fn 1.] When the window-scroll-functions hook runs multiple times, the function attached to the hook can cause significant performance issues depending upon the complexity of said function. And, as mentioned, sometimes the user is simply out of luck -- i.e., correct values can never be obtained. Using pos-visible-in-window-p can be helpful as a workaround to set up some checks to prevent the function attached to the hook from fully running its course if point is not yet fully visible; and, a variable can be set up to test for whether the function has already fully run one time during that command loop (so that it doesn't keep running).

Men har doim to'g'ri window-start va window-end ni olish uchun o'z shaxsiy sozlamalarim uchun foydalanadigan C-manba kodini tasdiqlovchi hujjat loyihasini yozdim. em> paytida qayta ko'rib chiqishga; biroq dasturchi emasligimdan beri hech qachon asosiy oqimga o'tishim mumkin emas va faqat bitta kishi haqiqatan g'ayrioddiy: "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22404" "rel =" nofollow noreferrer "> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22404 Bunga window-start-end-hook - deyiladi. - lekin foydalanuvchi faqat loyiha nusxasi bilan tajriba qilishni va Emacsni manbadan tiklashni talab qilsa. Mening qoralama tuzatma oynasi oyna harakatidan qat'iy nazar ishlaydi, masalan, ko'rinadigan oynada nuqta harakatlanayotganda ishlaydi; goto foydalanishda ishlaydi; u qo'shganda/yanking paytida ishlaydi; va aylantirish paytida ishlaydi. Ushbu kontseptsiyani ishlab chiqishdan manfaatdor bo'lgan har bir kishi 22404 talabiga javob berish uchun o'z maqolangizni yuborishi mumkin.


Shuningdek qarang:

Qayta ishlashni chaqirishdan oldin oyna-startni qanday yangilash mumkin?

https://stackoverflow.com/questions/23923371/ emacs-calculating-new-window-start-end-without-redisplay/24216247 # 24216247


NOTE:  Debugging functions that run during redisplay may require using a feature called trace-redisplay (after launching Emacs from the command line) that is available when building Emacs from source with options such as: ./configure --enable-checking='glyphs'.


[Fn. 1.]:  When working with Bug #22637, Eli Z. on the Emacs development team explained that the reason the window-scroll-functions hook does not yield correct results for inserting/yanking or goto is because it was never designed for those scenarios: "The reason window-scroll-functions aren't run in both of these test cases is that what happens there is not considered 'scrolling'. Scrolling is informally defined as either an explicit call to a function that scrolls the window, or a pseudo-scroll done by the display engine when it detects that some part of the window's previous display is still present, but in a different vertical position. Moving point to an arbitrary location is neither." https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22637#35

3
qo'shib qo'ydi
Rostini aytadigan bo'lsak, men buni ni bartaraf etishning oson va oson yo'li deb o'ylayman va Emacs buni ta'minlashi kerak. Bu masalaning qanchalik murakkabligini ko'rish men uchun hayratlanarli. Men ham uni ochiq qoldiraman. Sizning javobingiz va ushbu muammoni hal qilish bo'yicha qilgan harakatlaringiz uchun tashakkur.
qo'shib qo'ydi muallif Mahesh, manba
Rahmat! Emacsning qayta kodlash kodi chindan ham murakkabligini eshitdim. Yaxshiyamki, sizning xabaringiz va abo-aboning tegishli mavzudagi sharhlari vaqtinchalik hal qilish uchun etarli maslahatlar beradi. Buni qoldirib ketishim kerakmi yoki uni hal qildimmi? Ehtimol, kimdir bu kabi muammolarga duch kelishi mumkin.
qo'shib qo'ydi muallif Mahesh, manba
Nima uchun window-start va window-end redisplay -dan oldin ishlashni so'rashi mumkinmi? window-start va window-end , redisplay bilan belgilangan joriy ingliz tiliga bog'liq bo'lishi kerak, chunki g'alati bo'ladi. Nima uchun ular vizual maydondan oldin qaytib kelishadi? (Emacs ichki sehridan hech kimni bilmayman ...)
qo'shib qo'ydi muallif Mahesh, manba
Loyihani ishlab chiquvchi nuqtai nazardan men bu muammoni hal etishga to'sqinlik qilayotgan narsani ko'rmayapman. Biz window-start va window-end har doim to'g'ri qiymatlarni qaytarishi mumkinligini kutishimiz kerak - bu vazifalarning bajarilishi kerak. Siz aytib o'tgan usullarni, shuningdek, abo-aboning yondashuvini sinab ko'raman.
qo'shib qo'ydi muallif Mahesh, manba
Abo Abo bu savolni allaqachon so'raganini bilmayman! Aslida u bilan bir xil savolim bor. Men sizning xabaringizni shu mavzuda o'qib chiqdim va hali hech qanday oqilona echim yo'q ekan. window-start-end-hook yaxshi, lekin qanday xususiyat so'rovini oldinga surishimiz mumkin?
qo'shib qo'ydi muallif Mahesh, manba
Eli Z. ga bir vaqtning o'zida elektron pochtani yuborishdan tashqari, 22404-ga kirib, sizning ma'lumotingizni aytganda, bu xususiyatni amalga oshirish uchun yana nima qilish mumkinligini bilmayman. Jon allaqachon elektron xatlarni o'qiganligi uchun u to'g'ridan-to'g'ri uglerod ko'chiradigan bo'lishi shart emasligini aytdi. [Men so'nggi paytlarda muntazam ravishda kuzatilmayotganim uchun) 22404 ga tegishli elektron maktublarning uglerod nusxasini olishni juda yaxshi bilaman.
qo'shib qo'ydi muallif lawlist, manba
Nuqta to'liq paydo bo'lganda window-start-end-hook butunlay (ya'ni, barcha kodni ishlatadi), lekin u erda nuqta bo'lsa, butunlay olovga o'zgarishi mumkin bo'lgan bir necha ichki kod mavjud qisman ko'rinadi. Ba'zi foydalanuvchilar ushbu qisman paydo bo'ladigan qobiliyatni istashlari mumkin - nil ga sozlanishi mumkin bo'lgan make-cursor-line-fully-visible joylashgan o'zgarmaydigan uchun doc- , lekin asl qiymati t . Boshqa so'zlar bilan aytadigan bo'lsak, mening loyihani tasdiqlash kontseptsiyasining yakuniy mahsuloti emas (u hali ham ba'zi TTL ishlatishi mumkin) - lekin uni o'z qoidamda bir necha haftadan beri ishlatib bo'ldim va u bilan juda xursandman.
qo'shib qo'ydi muallif lawlist, manba
Eli Z., foydalanuvchining Lispni qayta ko'rib chiqishga taklif qilishiga ruxsat berish Emacsning osib qo'yilishiga yoki qulashi sabab bo'lishi mumkin; ammo u meni safe_call dan foydalanishga yo'naltirdi. Men ishonaman, chunki Lisp funktsiyasi qayta ko'rib chiqilish vaqtida xato bo'lsa, bekor qilinadi. Eli Z. taklif qilgan post-redisplay-hook deb atagan so'nggi bir kanca afzal ko'radi; Lekin, menimcha, mening qarorim yaxshiroqdir, chunki foydalanuvchi Lispni tartibini o'zgartirishi mumkin (masalan, harakat nuqtasini o'zgartiradi yoki shrift hajmini oshiradi) va redisplay oldingi natijani qayta ko'rib chiqadi va kerak bo'lganda ko'proq ishlarni bajaradi.
qo'shib qo'ydi muallif lawlist, manba
Muammo shundaki, qayta ishlov berish window-start va window-end uchun yangi qiymatlarning natijasi bo'lib qoladi - bu uning ishining bir qismi. window-start va window-end kabi funktsiyalari redisplay hali ham noaniq va/yoki noma'lum) - shuning uchun qayta nusxaning oxirida echim talab qilinadi. [Lisel xato xabarlari qayta chop etish vaqtida mavjud emas, shuning uchun disk raskadrovka uchun trace-redisplay kabi bir narsa kerak.]
qo'shib qo'ydi muallif lawlist, manba
Masalan, window-scroll-functions kanca va pre-redisplay-function funksiyasi ekranni o'zgartiradigan funksiyalarni o'z ichiga olishi mumkin - masalan, ko'chirish nuqtasi yoki o'sish/Shrift o'lchamini kamaytirish. Shunday qilib, qayta ishlov berish, yangi window-start va window-end nima deganini aniqlash uchun qo'shimcha ishni amalga oshirishi kerak. window-start-end-hook kontseptsiyasining yangi loyiha kontseptsiyasi shuningdek, window-start va window-end . Oddiy Lisp funktsiyalari qayta ishlashni boshlagan oldin ishlatiladi.
qo'shib qo'ydi muallif lawlist, manba
Emacs nima qilsa, men faqat o'zimning yangi Emacs funktsiyalarini amalga oshirishning asosiy maqsadlari uchun C tilini o'rgana boshlagan va faqatgina dasturiy hobbichman (savdo bilan emas) va/yoki Emacs rivojlantirish guruhiga yangi xususiyatlar va modifikatsiyalar taklif qilish. Menga ma'lumki, biz, albatta, window-start-end-hook yoki post-redisplay-hook kabi biror narsaga muhtojmiz.
qo'shib qo'ydi muallif lawlist, manba
Men bu masalani diqqat bilan ko'raman, bu mening ishtiyoqim. Agar siz uni belgilasangiz, odamlar qiziqishni yo'qotadi. abo-abo o'z savolini ochiq qoldirdi, ehtimol, u javobdan mamnun emas, yoki u yangi xususiyatni xohlaganligi yoki u bu masalani ko'proq e'tiborga olishni istagani uchun. Mening shaxsiy imtiyozim bu savolni qabul qilinmagan javob sifatida qoldirib, diqqatni tortadi. Ammo sizning qaroringiz - bu sizning savolingiz va siz qoniqarli yechim borligini bilib olishingiz mumkin. Men hech qachon shoshilmayman :)
qo'shib qo'ydi muallif lawlist, manba
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb