[Date Prev][Date Next][Thread Prev][][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 ではだめなのかな…

--
青田