[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug in shimbun-fill-line (was Why my sb-hatena.el can't run)
青田です。
lightcyan.area51@xxxxxxxxx writes:
> lightcyanです。
>
> hatena で特定の人のはてなダイアリーを取ってくるための
> sb-hatena.el を書きました(添付参照)。
>
> shimbun-hatena-your-id を lightcyan にしているので
> 僕の日記を落としてくるものになっています。
>
> また、shimbun-hatena-group-table のところを見ていただければ
> 使い方は分かると思うのですが、
> ("blog" "はてな" "archive/" ,@default)
> が途中で
> shimbun: Make contents...
> で固まります。
>
> この原因はなんでしょうか?
>
> よろしくご教授お願いします(_ _)
sb-hatena.el 自体には問題はないように思います。 どうやら
http://www.nicovideo.jp/tag/%E4%BD%9C%E8%80%85%E3%81%AF%E7%97%85%E6%B0%97%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA
の行を sb-text.el の shimbun-fill-line がうまく処理できていないらしくそ
こで無限ループしているようです。
(with-temp-buffer
(insert "http://www.nicovideo.jp/tag/%E4%BD%9C%E8%80%85%E3%81%AF%E7%97%85%E6%B0%97%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA")
(goto-char (point-min))
(shimbun-fill-line))
とすると、再現できます。
とりあえず、以下のようにすれば動きますが URL が途中で改行されてしまう
のはいただけませんね…。
--8<---------------cut here---------------start------------->8---
--- sb-text.el.~1.18.~ 2009-05-22 12:18:35.000000000 +0900
+++ sb-text.el 2009-05-22 13:18:44.000000000 +0900
@@ -63,7 +63,7 @@
(or (eolp) (delete-region (point) (match-end 0)))
(or (not chr)
(> (char-width chr) 1)
- (re-search-backward "\\<" top t)
+ (re-search-backward "\\<" (1+ top) t)
(end-of-line)))
(if (eolp)
nil
--8<---------------cut here---------------end--------------->8---
URL も考慮するとこんな感じでしょうか? w3m-url-at-point() あたりが効率悪
いかなぁ…。
--8<---------------cut here---------------start------------->8---
--- sb-text.el.~1.18.~ 2009-05-22 12:18:35.000000000 +0900
+++ sb-text.el 2009-05-22 13:33:22.000000000 +0900
@@ -57,13 +57,17 @@
(while (memq (char-before) shimbun-kinsoku-eol-list)
(backward-char))
(insert "\n"))
- (while (memq (setq chr (char-after)) shimbun-kinsoku-bol-list)
+ (while (and (not (eobp))
+ (w3m-url-at-point))
+ (forward-char))
+ (while (and (not (eobp))
+ (memq (setq chr (char-after)) shimbun-kinsoku-bol-list))
(forward-char))
(if (looking-at "\\s-+")
(or (eolp) (delete-region (point) (match-end 0)))
(or (not chr)
(> (char-width chr) 1)
- (re-search-backward "\\<" top t)
+ (re-search-backward "\\<" (1+ top) t)
(end-of-line)))
(if (eolp)
nil
--8<---------------cut here---------------end--------------->8---
;; fill-region ではだめなのかな…
--
青田