[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] 08/352: Oma ajastinkierros sanojen maalaamiselle
From: |
Stefan Monnier |
Subject: |
[elpa] 08/352: Oma ajastinkierros sanojen maalaamiselle |
Date: |
Mon, 07 Jul 2014 14:01:09 +0000 |
monnier pushed a commit to branch master
in repository elpa.
commit 264807b41dee92b35c5a7c32d06f8fef6cee24bb
Author: Teemu Likonen <address@hidden>
Date: Sat May 16 17:41:46 2009 +0000
Oma ajastinkierros sanojen maalaamiselle
Tämä muutos tekee sanojen maalaamiselle oman ajastimen, joka
käynnistetään yhden kerran sananlukuajastimesta. Funktio, joka ottaa
sanat vastaan ulkoiselta prosessilta, ei siis enää maalaa sanoja vaan
ainoastaan lisää ne puskurikohtaiseen listaan ja laittaa
maalaamispyynnön em. maalausajastimelle.
---
wcheck-mode.el | 146 ++++++++++++++++++++++++++++++++------------------------
1 files changed, 83 insertions(+), 63 deletions(-)
diff --git a/wcheck-mode.el b/wcheck-mode.el
index 683befb..e66b6e8 100644
--- a/wcheck-mode.el
+++ b/wcheck-mode.el
@@ -51,7 +51,10 @@ muokata suoraan; kieli kannattaa muuttaa komennolla
`\\[wcheck-change-language]'.")
(make-variable-buffer-local 'wcheck-language)
-(setq wcheck-buffer-process-data nil)
+(setq-default wcheck-buffer-process-data nil
+ wcheck-received-words nil)
+
+(make-variable-buffer-local 'wcheck-received-words)
(defconst wcheck-process-name-prefix "wcheck/"
"Oikolukuprosessien nimen etuliite. Tämä on vain ohjelman
@@ -70,7 +73,7 @@ sisäiseen käyttöön.")
"Keymap for wcheck-mode")
-(defconst wcheck-timer-event-idle 1
+(defconst wcheck-timer-idle .6
"Näin monta sekuntia odotetaan, kunnes ajastin käynnistää
oikoluvun niissä ikkunoissa, joiden puskuri on sitä pyytänyt.")
@@ -107,7 +110,7 @@ oletuskieli."
(wcheck-remove-overlays)))
;; Kieltä on muutettu, joten pyydetään päivitystä
- (wcheck-timer-request-for-update (current-buffer))))
+ (wcheck-timer-read-request (current-buffer))))
(define-minor-mode wcheck-mode
@@ -135,8 +138,8 @@ oletuskieli."
(add-hook 'kill-buffer-hook 'wcheck-hook-kill-buffer nil t)
(add-hook 'window-scroll-functions 'wcheck-hook-window-scroll nil t)
(add-hook 'after-change-functions 'wcheck-hook-after-change nil t)
- ;; (add-hook 'change-major-mode-hook
- ;; 'wcheck-hook-change-major-mode nil t)
+ (add-hook 'change-major-mode-hook
+ 'wcheck-hook-change-major-mode nil t)
;; global hooks
(add-hook 'window-size-change-functions
@@ -146,7 +149,7 @@ oletuskieli."
(unless wcheck-buffer-process-data
(setq wcheck-timer
- (run-with-idle-timer wcheck-timer-event-idle t
+ (run-with-idle-timer wcheck-timer-idle t
'wcheck-timer-read-send-words)))
;; Seuraavan komennon PITÄÄ olla ajastimen käynnistämisen
@@ -154,7 +157,7 @@ oletuskieli."
;; wcheck-buffer-process-data, että tarvitseeko ajastinta
;; ylipäätään käynnistää.
(wcheck-update-buffer-process-data (current-buffer) wcheck-language)
- (wcheck-timer-request-for-update (current-buffer))))
+ (wcheck-timer-read-request (current-buffer))))
;; Oikoluku pois
(setq wcheck-returned-words nil)
@@ -165,8 +168,8 @@ oletuskieli."
(remove-hook 'kill-buffer-hook 'wcheck-hook-kill-buffer t)
(remove-hook 'window-scroll-functions 'wcheck-hook-window-scroll t)
(remove-hook 'after-change-functions 'wcheck-hook-after-change t)
- ;; (remove-hook 'change-major-mode-hook
- ;; 'wcheck-hook-change-major-mode)
+ (remove-hook 'change-major-mode-hook
+ 'wcheck-hook-change-major-mode t)
;; global hooks
(remove-hook 'window-size-change-functions
@@ -179,25 +182,27 @@ oletuskieli."
;;; Ajastimet
-(setq wcheck-timer nil
- wcheck-timer-update-requested nil)
-
+(setq-default wcheck-timer nil
+ wcheck-timer-read-requested nil
+ wcheck-timer-paint-requested nil)
-(defun wcheck-timer-request-for-update (buffer)
- "Lisää puskurin BUFFER listaan, josta ajastin katsoo, mitä
-puskureita pitää päivittää."
- (add-to-list 'wcheck-timer-update-requested buffer))
+(defun wcheck-timer-read-request (buffer)
+ (add-to-list 'wcheck-timer-read-requested buffer))
+(defun wcheck-timer-read-request-delete (buffer)
+ (setq wcheck-timer-read-requested
+ (delq buffer wcheck-timer-read-requested)))
-(defun wcheck-timer-no-need-for-update (buffer)
- "Poistaa puskurin päivitystä pyytäneiden puskurien listasta."
- (setq wcheck-timer-update-requested
- (delq buffer wcheck-timer-update-requested)))
+(defun wcheck-timer-paint-request (buffer)
+ (add-to-list 'wcheck-timer-paint-requested buffer))
+(defun wcheck-timer-paint-request-delete (buffer)
+ (setq wcheck-timer-paint-requested
+ (delq buffer wcheck-timer-paint-requested)))
(defun wcheck-timer-read-send-words ()
;; Käydään läpi kaikki puskurit, jotka ovat pyytäneet päivitystä.
- (dolist (buffer wcheck-timer-update-requested)
+ (dolist (buffer wcheck-timer-read-requested)
(let ((lang (cdr (assq buffer wcheck-buffer-process-data))))
;; Käydään läpi kaikki ikkunat, joissa kyseinen puskuri on
;; näkyvissä, ja lähetetään sanat ulkoiselle prosessille.
@@ -205,10 +210,41 @@ puskureita pitää päivittää."
(function (lambda (window)
(when (eq buffer (window-buffer window))
(wcheck-send-words lang (wcheck-read-words lang
window)))))
- 'nominiguf t)
+ 'nomb t)
;; Sanat on lähetetty, joten voidaan poistaa tämä puskuri
;; päivityslistasta.
- (wcheck-timer-no-need-for-update buffer))))
+ (wcheck-timer-read-request-delete buffer)))
+
+ ;; Käynnistetään ajastin, joka maalaa sana, mikäli joku puskuri on
+ ;; sellaista pyytänyt.
+ (run-with-idle-timer
+ (* 2 wcheck-timer-idle)
+ nil
+ (function (lambda ()
+ (dolist (buffer wcheck-timer-paint-requested)
+ (with-current-buffer buffer
+ (when wcheck-mode
+ (wcheck-remove-overlays)
+ (walk-windows
+ (function (lambda (window)
+ (when (eq buffer (window-buffer window))
+ (with-current-buffer buffer
+ (wcheck-paint-words
+ wcheck-language
+ window
+ wcheck-received-words)))))
+ 'nomb t)
+ (setq wcheck-received-words nil)
+ (wcheck-timer-paint-request-delete buffer))))))))
+
+
+(defun wcheck-receive-words (process string)
+ "Ottaa sanat vastaan oikolukuprosessilta ja tallentaa ne
+listamuodossa puskurikohtaiseen muuttujaan
+wcheck-received-words."
+ (setq wcheck-received-words
+ (append wcheck-received-words (split-string string "\n+" t)))
+ (wcheck-timer-paint-request (current-buffer)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -219,33 +255,29 @@ puskureita pitää päivittää."
"Ajetaan kun ikkunaa WINDOW on vieritetty."
(with-current-buffer (window-buffer window)
(when wcheck-mode
- (wcheck-timer-request-for-update (window-buffer window)))))
+ (wcheck-timer-read-request (window-buffer window)))))
(defun wcheck-hook-window-size-change (frame)
"Tämä ajetaan aina, kun ikkunan kokoa on muutettu."
- ;; Täällä pitäisi käydä FRAMEn kaikki ikkunat läpi (paitsi
- ;; minibuffer), katsoa, mikä puskuri missäkin ikkunassa on, ja jos
- ;; kyseisessä puskurissa on wcheck päällä, pyytää päivitystä.
(walk-windows (function (lambda (window)
- (when wcheck-mode
- (wcheck-timer-request-for-update
- (window-buffer window)))))
- 'no-minibuf
+ (with-current-buffer (window-buffer window)
+ (when wcheck-mode
+ (wcheck-timer-read-request
+ (window-buffer window))))))
+ 'nomb
frame))
(defun wcheck-hook-window-configuration-change ()
"Tämä ajetaan aina, kun ikkunan kokoa tai muita asetuksia on
muutettu."
- ;; Täällä pitäisi käydä nykyisen framen kaikki ikkunat läpi (paitsi
- ;; minibuffer), katsoa, mikä puskuri missäkin ikkunassa on, ja jos
- ;; kyseisessä puskurissa on wcheck päällä, pyytää päivitystä.
(walk-windows (function (lambda (window)
- (when wcheck-mode
- (wcheck-timer-request-for-update
- (window-buffer window)))))
- 'no-minibuf
+ (with-current-buffer (window-buffer window)
+ (when wcheck-mode
+ (wcheck-timer-read-request
+ (window-buffer window))))))
+ 'nomb
'currentframe))
@@ -257,7 +289,7 @@ muutettu."
"Ajetaan aina, kun puskuria on muokattu."
;; Tämä hook ajetaan aina siinä puskurissa, mitä muokattiin.
(when wcheck-mode
- (wcheck-timer-request-for-update (current-buffer))))
+ (wcheck-timer-read-request (current-buffer))))
(defun wcheck-hook-kill-buffer ()
@@ -363,7 +395,7 @@ oikeanlaiset."
(cons buffer language))
;; Oikolukua on pyydetty sammutettavaksi, joten poistetaan se
;; päivitystä pyytäneiden prosessien listasta.
- (wcheck-timer-no-need-for-update buffer))
+ (wcheck-timer-read-request-delete buffer))
;; Poistetaan turhat prosessit
(setq new-langs (mapcar 'cdr wcheck-buffer-process-data))
@@ -374,7 +406,8 @@ oikeanlaiset."
(or wcheck-buffer-process-data
(when wcheck-timer
(cancel-timer wcheck-timer)
- (setq wcheck-timer nil))))
+ (setq wcheck-timer nil)
+ nil)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -387,12 +420,12 @@ oikeanlaiset."
(with-selected-window window
(save-excursion
- (let ((regexp (concat (wcheck-query-language-data
- language 'regexp-start t) "\\("
- (wcheck-query-language-data
- language 'regexp-word t) "\\)"
- (wcheck-query-language-data
- language 'regexp-end t)))
+ (let ((regexp (concat
+ (wcheck-query-language-data language 'regexp-start t)
+ "\\("
+ (wcheck-query-language-data language 'regexp-word t)
+ "\\)"
+ (wcheck-query-language-data language 'regexp-end t)))
(syntax (eval (wcheck-query-language-data
language 'syntax t)))
@@ -432,20 +465,7 @@ käsittelee kieltä LANGUAGE."
string)))
-(defun wcheck-receive-words (process string)
- "Ottaa sanat vastaan oikolukuprosessilta ja värjää ne kaikissa ikkuinoissa,
-joissa nykyinen puskuri on näkyvissä."
- (let* ((buffer (current-buffer))
- (lang (cdr (assq buffer wcheck-buffer-process-data)))
- (wordlist (split-string string "\n+" t)))
- (walk-windows
- (function (lambda (window)
- (when (eq buffer (window-buffer window))
- (wcheck-mark-words lang window wordlist))))
- 'nominibuf t)))
-
-
-(defun wcheck-mark-words (language window wordlist)
+(defun wcheck-paint-words (language window wordlist)
"Merkkaa listassa WORDLIST listatut sanat ikkunassa WINDOW."
(when (window-live-p window)
(with-selected-window window
@@ -481,8 +501,8 @@ oletusarvon."
ulkoista ohjelmaa. Palauttaa t tai nil."
;; Löytyykö kieltä?
(if (member language (mapcar 'car wcheck-language-data))
- ;; Löytyy. Löytyykö sille määriteltyä ohjelmaa? Huom, tämä ei vielä
- ;; testaa, onko kyseinen merkkijono ajettava ohjelma.
+ ;; Löytyy. Löytyykö sille määriteltyä ohjelmaa? Huom, tämä ei vielä
+ ;; testaa, onko kyseinen merkkijono ajettava ohjelma.
(if (stringp (wcheck-query-language-data language 'program))
t)))
- [elpa] 02/352: Poistetaan overlayt kielen vaihtamisen jälkeen, (continued)
- [elpa] 02/352: Poistetaan overlayt kielen vaihtamisen jälkeen, Stefan Monnier, 2014/07/07
- [elpa] 04/352: Muutetaan apufunktioryhmän otsikkoa, Stefan Monnier, 2014/07/07
- [elpa] 06/352: Tehdään ajastimen viiveestä muuttuja, Stefan Monnier, 2014/07/07
- [elpa] 05/352: Parannetaan wcheck-language-muuttujan kuvausta, Stefan Monnier, 2014/07/07
- [elpa] 07/352: Maalataan paluusanat automaattisesti, Stefan Monnier, 2014/07/07
- [elpa] 10/352: Viitataan nykyiseen puskuriin eikä ikkunan sisältämään puskuriin, Stefan Monnier, 2014/07/07
- [elpa] 09/352: Poistetaan maalaukset riippumatta siitä, onko oikoluku päällä, Stefan Monnier, 2014/07/07
- [elpa] 11/352: Muotoillaan kooditekstiä uudelleen (ei toiminnallista muutosta), Stefan Monnier, 2014/07/07
- [elpa] 12/352: case-fold-search "nil", kun luetaan sanoja ikkunasta, Stefan Monnier, 2014/07/07
- [elpa] 14/352: Lähetetään prosessille rivinvaihto ennen sanamerkkijonoa, Stefan Monnier, 2014/07/07
- [elpa] 08/352: Oma ajastinkierros sanojen maalaamiselle,
Stefan Monnier <=
- [elpa] 15/352: Tyhjennetään vastaanotettujen sanojen lista myöhemmin, Stefan Monnier, 2014/07/07
- [elpa] 13/352: Poistetaan turha tarkistus parametrien oikeellisuudesta, Stefan Monnier, 2014/07/07
- [elpa] 16/352: Sananlukuajastin tarkistaa nyt, onko kyseinen kieli sallittu, Stefan Monnier, 2014/07/07
- [elpa] 17/352: Minibuf-virheilmoitus pois; sopimattoman kielen ilmoitukseen kielen nimi, Stefan Monnier, 2014/07/07
- [elpa] 20/352: Poistetaan error-kutsu kielenvaihtofunktiosta, Stefan Monnier, 2014/07/07
- [elpa] 18/352: setq-default eikä setq, kun määritellään oletuskieliasetukset, Stefan Monnier, 2014/07/07
- [elpa] 21/352: Kielenvaihto pyytää päivitystä vain oikoluvun ollessa päällä, Stefan Monnier, 2014/07/07
- [elpa] 19/352: Muutetaan tietueen nimi: discard -> regexp-discard, Stefan Monnier, 2014/07/07
- [elpa] 23/352: Ajastinfunktiolle uusi nimi: wcheck-timer-event, Stefan Monnier, 2014/07/07
- [elpa] 25/352: Käynnistetään ajastin muuttujan wcheck-timer perusteella, Stefan Monnier, 2014/07/07