Re: [twmode-users] automatic redisplay

2010-02-12 スレッド表示 yata_github
> icon 取得を非同期にしておき、定期 redisplay 時に取得済み
> かどうかを判断して描画するようにすれば icon の非同期更新
> にも利用できると思います。

icon取得を非同期にして、そのcallbackで描画してもいいのかな、
と思います。


ところで、twittering-get-tweetsでtwittering-retrieve-image
を実行している理由が判らないのですが、どうしてでしたっけ?

twittering-make-display-spec-for-iconでも取得しているので、
ここで取得しなくてもよいと思うのですが、何か理由があったの
かなあ…


> 松尾です。

> b21fce6e486d1ff16929ddd15d42675ebd11d158
> でtimeline表示の部分更新を導入したため�...@での表示が
> 更新されなくなっていた問題に対処しました。

> http://github.com/cvmat/twittering-mode/tree/auto-redisplay

> にcommitしてあります。色々試していただけると助かります。


> 新しい timer 変数 twittering-timer-for-redisplaying を
> 用意して、この timer で定期的に関数
> twittering-redisplay-status-on-buffer が呼び出される
> 仕組みになっています。

> twittering-redisplay-status-on-buffer は *twittering*
> buffer 内の 'need-to-be-updated property がnon-nilの値を
> 持つ部分を探して更新します。
> 更新時には need-to-be-updated property の値をLISPの
> 関数呼び出しのS式と思って解釈し、その結果の文字列で
> 該当箇所を置き換えています。

> icon 取得を非同期にしておき、定期 redisplay 時に取得済み
> かどうかを判断して描画するようにすれば icon の非同期更新
> にも利用できると思います。


> 現状、ひとつよく分からない点があって、
> 「scroll-modeにしておき、*twittering* bufferをC-x b等で
> 非表示にした状況」で放置しておいて、
> 再び *twittering* buffer に戻るとカーソル位置のstatusが
> 元々のものとは違うものになっている場合があります。

> *twittering* buffer を表示している場合にはこの現象は
> 起こらないようです。
> また、 windows.el で window-configuration を保持した
> まま非表示にしている場合も起こらないようです。

> ある twittering-timer-for-redisplaying が起動している
> ときに twittering-timer が起動すると何か問題があるのかも
> しれません。実際、現状は以下のようになってますが、

> (defun twittering-redisplay-status-on-buffer (&optional buffer)
> (let ((buffer (or buffer (twittering-buffer)))
> (deactivate-mark deactivate-mark))
> (with-current-buffer buffer
> (save-excursion
> (twittering-for-each-property-region
> 'need-to-be-updated
> (lambda (beg end value)
> (let* ((func (car value))
> (args (cdr value))
> (updated-str (apply func args))
> (buffer-read-only nil))
> (delete-region beg end)
> (goto-char beg)
> (insert updated-str)))
> buffer)

> これのbuffer-read-onlyを束縛する場所をずらして

> (defun twittering-redisplay-status-on-buffer (&optional buffer)
> (let ((buffer (or buffer (twittering-buffer)))
> (deactivate-mark deactivate-mark))
> (with-current-buffer buffer
> (setq buffer-read-only nil)
> (save-excursion
> (twittering-for-each-property-region
> 'need-to-be-updated
> (lambda (beg end value)
> (let* ((func (car value))
> (args (cdr value))
> (updated-str (apply func args)))
> (delete-region beg end)
> (goto-char beg)
> (insert updated-str)))
> buffer))
> (setq buffer-read-only t

> とすると時折 read-only 関連の警告が表示されます。

> ---
> 松尾 直志 

--
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
___
twmode-users mailing list
twmode-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/twmode-users


Re: [twmode-users] automatic redisplay

2010-02-02 スレッド表示 Tadashi MATSUO
松尾です。

> >
> > 現在のこの実装では、*twittering*が表示されていない場合は、
> > get-buffer-window-listはnilを返すと思います。window-listに
> > 期待した値が設定されていないのではないでしょうか。
> 
> 昔のコードでは scroll-mode の時に、カーソル移動となっていましたが、今のコー
> ドでは逆に scroll-mode でない時にカーソル移動になっているようです。
> (render 前の (point) が保存される感じです)
> 
> なので、 scroll-mode で additional が t の時には window-list も
> point-window-list も使われないように思います。

はい。 scroll-mode では window-list も point-window-list も
使わない実装になっています。
insert-before-markers で status を追加すると自動的にそれに
合わせて marker も動いてくれるので、 scroll-mode では使う
必要がなくなっています。

window-list や point-window-list を使うのは mapc の第2引数と
してだけなので、 nil の場合には mapc で指定した処理が行われ
ないだけで影響はないはずです。

どこでカーソルが移動しているのかは分かりませんが、もしかすると
save-excursion の範囲が広過ぎて他の process から割り込まれて
いるのかもしれません。そこで save-excursion の範囲を限定する
パッチを書いてみました。

現在の hayamiz/master のHEAD
ed67225499f77cadc419a4deffb13e3cace53b5c
に対するパッチです。

これを当ててもカーソル移動の問題が起きるでしょうか。

---
松尾 直志 
diff -r dcc04eee46d1 twittering-mode.el
--- a/twittering-mode.elMon Feb 01 00:45:29 2010 +0900
+++ b/twittering-mode.elTue Feb 02 23:59:13 2010 +0900
@@ -1900,27 +1900,27 @@
window-list)))
   (twittering-update-mode-line)
   (setq buffer-read-only nil)
-  (save-excursion
-   (unless additional
- (erase-buffer))
-   (let ((pos (twittering-get-first-status-head)))
- (mapc
-  (lambda (status)
-(let* ((id (cdr (assoc 'id status
-  ;; Find where the status should be inserted.
-  (while
-  (let* ((buf-id (get-text-property pos 'id)))
-(if (and buf-id (twittering-status-id< id buf-id))
-(let ((next-pos
-   (twittering-get-next-status-head pos)))
-  (setq pos (or next-pos (point-max)))
-  next-pos)
-  nil)))
-  (unless (twittering-status-id= id (get-text-property pos 'id))
-(let ((formatted-status
-   (twittering-format-status
-status twittering-status-format))
-  (separator "\n"))
+  (unless additional
+   (erase-buffer))
+  (let ((pos (twittering-get-first-status-head)))
+   (mapc
+(lambda (status)
+  (let* ((id (cdr (assoc 'id status
+;; Find where the status should be inserted.
+(while
+(let* ((buf-id (get-text-property pos 'id)))
+  (if (and buf-id (twittering-status-id< id buf-id))
+  (let ((next-pos
+ (twittering-get-next-status-head pos)))
+(setq pos (or next-pos (point-max)))
+next-pos)
+nil)))
+(unless (twittering-status-id= id (get-text-property pos 'id))
+  (let ((formatted-status
+ (twittering-format-status
+  status twittering-status-format))
+(separator "\n"))
+(save-excursion
   (goto-char pos)
   ;; Use `insert-before-markers' in order to keep
   ;; which status is pointed by each marker.
@@ -1928,8 +1928,8 @@
   ;; Now, `pos' points the head of the status.
   ;; It must be moved to the current point
   ;; in order to skip the status inserted just now.
-  (setq pos (point))
-  twittering-timeline-data)))
+  (setq pos (point)))
+twittering-timeline-data))
   (if (and twittering-image-stack window-system)
  (clear-image-cache))
   (setq buffer-read-only t)
--
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com___
twmode-users mailing list
twmode-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/twmode-users


Re: [twmode-users] automatic redisplay

2010-02-02 スレッド表示 Naohiro Aota
;; ぼくもさっと読んだだけですが…

yata_git...@y.haun.org writes:

> 外しているかもしれませんが、気づいた点を。
>
>> 「scroll-modeにしておき、*twittering* bufferをC-x b等で
>> 非表示にした状況」で放置しておいて、
>> 再び *twittering* buffer に戻るとカーソル位置のstatusが
>> 元々のものとは違うものになっている場合があります。
>
>> *twittering* buffer を表示している場合にはこの現象は
>> 起こらないようです。
>
> 現在のこの実装では、*twittering*が表示されていない場合は、
> get-buffer-window-listはnilを返すと思います。window-listに
> 期待した値が設定されていないのではないでしょうか。

昔のコードでは scroll-mode の時に、カーソル移動となっていましたが、今のコー
ドでは逆に scroll-mode でない時にカーソル移動になっているようです。
(render 前の (point) が保存される感じです)

なので、 scroll-mode で additional が t の時には window-list も
point-window-list も使われないように思います。

--
青田

--
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
___
twmode-users mailing list
twmode-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/twmode-users


Re: [twmode-users] automatic redisplay

2010-02-02 スレッド表示 yata_github
外しているかもしれませんが、気づいた点を。

> 「scroll-modeにしておき、*twittering* bufferをC-x b等で
> 非表示にした状況」で放置しておいて、
> 再び *twittering* buffer に戻るとカーソル位置のstatusが
> 元々のものとは違うものになっている場合があります。

> *twittering* buffer を表示している場合にはこの現象は
> 起こらないようです。

(defun twittering-render-timeline (&optional additional)
  (with-current-buffer (twittering-buffer)
(let* ((window-list (get-buffer-window-list (current-buffer) nil t))
   (point-window-list
(mapcar (lambda (window)
  (cons (window-point window) window))
window-list)))

現在のこの実装では、*twittering*が表示されていない場合は、
get-buffer-window-listはnilを返すと思います。window-listに
期待した値が設定されていないのではないでしょうか。

--
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
___
twmode-users mailing list
twmode-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/twmode-users


[twmode-users] automatic redisplay

2010-01-30 スレッド表示 Tadashi MATSUO
松尾です。

b21fce6e486d1ff16929ddd15d42675ebd11d158
でtimeline表示の部分更新を導入したため�...@での表示が
更新されなくなっていた問題に対処しました。

http://github.com/cvmat/twittering-mode/tree/auto-redisplay

にcommitしてあります。色々試していただけると助かります。


新しい timer 変数 twittering-timer-for-redisplaying を
用意して、この timer で定期的に関数
twittering-redisplay-status-on-buffer が呼び出される
仕組みになっています。

twittering-redisplay-status-on-buffer は *twittering*
buffer 内の 'need-to-be-updated property がnon-nilの値を
持つ部分を探して更新します。
更新時には need-to-be-updated property の値をLISPの
関数呼び出しのS式と思って解釈し、その結果の文字列で
該当箇所を置き換えています。

icon 取得を非同期にしておき、定期 redisplay 時に取得済み
かどうかを判断して描画するようにすれば icon の非同期更新
にも利用できると思います。


現状、ひとつよく分からない点があって、
「scroll-modeにしておき、*twittering* bufferをC-x b等で
  非表示にした状況」で放置しておいて、
再び *twittering* buffer に戻るとカーソル位置のstatusが
元々のものとは違うものになっている場合があります。

*twittering* buffer を表示している場合にはこの現象は
起こらないようです。
また、 windows.el で window-configuration を保持した
まま非表示にしている場合も起こらないようです。

ある twittering-timer-for-redisplaying が起動している
ときに twittering-timer が起動すると何か問題があるのかも
しれません。実際、現状は以下のようになってますが、

(defun twittering-redisplay-status-on-buffer (&optional buffer)
  (let ((buffer (or buffer (twittering-buffer)))
(deactivate-mark deactivate-mark))
(with-current-buffer buffer
  (save-excursion
(twittering-for-each-property-region
 'need-to-be-updated
 (lambda (beg end value)
   (let* ((func (car value))
  (args (cdr value))
  (updated-str (apply func args))
  (buffer-read-only nil))
 (delete-region beg end)
 (goto-char beg)
 (insert updated-str)))
 buffer)

これのbuffer-read-onlyを束縛する場所をずらして

(defun twittering-redisplay-status-on-buffer (&optional buffer)
  (let ((buffer (or buffer (twittering-buffer)))
(deactivate-mark deactivate-mark))
(with-current-buffer buffer
  (setq buffer-read-only nil)
  (save-excursion
(twittering-for-each-property-region
 'need-to-be-updated
 (lambda (beg end value)
   (let* ((func (car value))
  (args (cdr value))
  (updated-str (apply func args)))
 (delete-region beg end)
 (goto-char beg)
 (insert updated-str)))
 buffer))
  (setq buffer-read-only t

とすると時折 read-only 関連の警告が表示されます。

---
松尾 直志 

--
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
___
twmode-users mailing list
twmode-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/twmode-users