[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: [gnu.emacs.help] Emacs/w3m textarea editing in same window



Katsumi Yamaoka <yamaoka@xxxxxxx> writes:

>>>>>> In [emacs-w3m : No.10437] Nicolas Neuss wrote:
>
> 大きな文章を書くには textarea は狭いので、現在のウィンドウを
> textarea のバッファに切り替えて使いたいという話しです。
> 彼は
>
> (pushnew "*w3m form textarea*" same-window-buffer-names)
>
> ということを行なったけれど、うまくいかない。その理由は
> `same-window-buffer-names' に従って動く `display-buffer' や
> `pop-to-buffer' を `w3m-form-input-textarea' が使っていないから
> で云々...。で、Niels Giesen さん曰く `w3m-form-input-textarea'
> から
>
>       (condition-case nil
> 	  (split-window cur-win (if (> size 0) size window-min-height))
> 	(error
> 	 (delete-other-windows)
> 	 (split-window cur-win (- (window-height cur-win)
> 				  w3m-form-input-textarea-buffer-lines))))
>       (select-window (next-window))
>
> の部分を外してしまえば、とりあえず望み通りになると。
>
> どなたか対応できる時間をお持ちの方はいらっしゃいませんか?
>
> ;; ぼくより適任の人がぜったいいると思うので、あえて書きました。;-)

改めてコードを読んでみました。

ここでやりたいことというのは、ちょうど
w3m-form-input-textarea-buffer-lines で指定されただけの行数を持った
window を作ることだと思います。

しかし、 pop-to-buffer() では、最小の行数を指定する変数
(split-height-threshold, window-min-height) はあれど、ぴったりこの行数と
いうものを指定することはできないようです。

なので、とりあえずは same-window-p() を使って Niels Giesen さんが外して
いる部分を unless で囲ってあげるといいのではないでしょうか?

;; w3m-form-input-textarea-buffer-lines ぴったりというのに固執する必要
;; もない気はするのですが…とりあえず踏襲ということで。

--
青田

Index: w3m-form.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m-form.el,v
retrieving revision 1.173
diff -u -r1.173 w3m-form.el
--- w3m-form.el	30 Jun 2008 06:56:39 -0000	1.173
+++ w3m-form.el	1 Dec 2008 06:33:36 -0000
@@ -1261,12 +1261,9 @@
 	 (wincfg (current-window-configuration))
 	 (w3mbuffer (current-buffer))
 	 (point (point))
-	 (size (min
-		(- (window-height cur-win)
-		   window-min-height 1)
-		(- (window-height cur-win)
-		   (max window-min-height
-			(1+ w3m-form-input-textarea-buffer-lines)))))
+	 (size (- (window-height cur-win)
+		  (1+ (max window-min-height
+			   w3m-form-input-textarea-buffer-lines))))
 	 (file (get-text-property (point) 'w3m-form-file-name))
 	 (coding (w3m-form-get-coding-system (w3m-form-charlst form)))
 	 (readonly (nth 3 info))
@@ -1329,13 +1326,14 @@
 	     (get-buffer-window (cdr buffer)))
 	;; same frame only
 	(select-window (get-buffer-window (cdr buffer)))
-      (condition-case nil
-	  (split-window cur-win (if (> size 0) size window-min-height))
-	(error
-	 (delete-other-windows)
-	 (split-window cur-win (- (window-height cur-win)
-				  w3m-form-input-textarea-buffer-lines))))
-      (select-window (next-window))
+      (unless (same-window-p (buffer-name (if (consp buffer) (cdr buffer) buffer)))
+	(condition-case nil
+	    (split-window cur-win (if (> size 0) size window-min-height))
+	  (error
+	   (delete-other-windows)
+	   (split-window cur-win (- (window-height cur-win)
+				    w3m-form-input-textarea-buffer-lines))))
+	(select-window (next-window)))
       (let ((pop-up-windows nil))
 	(switch-to-buffer (if (consp buffer) (cdr buffer) buffer))))))