[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: form submitでのnew-session表示
>> On Fri, 24 Nov 2006 22:56:04 +0900
>> tsuyoshi_cho@xxxxxxxxx (Tsuyoshi CHO) said as follows:
>1. w3m-form-submitにoptional引数でnew-sessionを付ける
> ->NG、w3m-view-this-url内で (eval act) として召喚されるので、渡せない
> # 論議に上っているad-hocなパターンで解決できますが、さすがにどうかと
> 思ったので。
どうして,この解決法を NG と思われたのでしょうか?
コードとデータが区別されない,というのは lisp の面白い性質なので,これ
を使うのはごくごく自然な発想だと思ったのですが.以下のように,変更箇所
も最小で済むようですし.
(eval act) や (eval submit) する場所では常に,new-session という変数が
束縛されていないといけないのが,危険という判断でしょうか? でもまあ,そ
ういう箇所は,今のところ2箇所だけなので….
何か見落としているような気はするんですけど.
--
土屋 雅稔 ( TSUCHIYA Masatoshi )
--- w3m.el 8 Dec 2006 07:52:03 -0000 1.1232
+++ w3m.el 9 Dec 2006 01:48:36 -0000
@@ -5972,9 +5972,9 @@
(mouse-set-point event)
(w3m-view-this-url nil t))
-(defun w3m-submit-form ()
+(defun w3m-submit-form (&optional new-session)
"Submit the form at point."
- (interactive)
+ (interactive "P")
(let ((submit (w3m-submit)))
(if (and submit
w3m-current-url
--- w3m-form.el 14 May 2006 12:42:47 -0000 1.155
+++ w3m-form.el 9 Dec 2006 01:48:47 -0000
@@ -557,7 +557,8 @@
,(format "fid=%s/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-textarea ,form ,hseq)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-form-hseq ,hseq
w3m-anchor-sequence ,abs-hseq
w3m-form-id ,id
@@ -697,9 +698,11 @@
start end
`(w3m-form-field-id
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
- w3m-action (w3m-form-submit ,form ,id ,name ,value)
+ w3m-action (w3m-form-submit ,form ,id ,name ,value
+ new-session)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq))))
((string= type "reset")
(w3m-form-make-button
@@ -733,7 +736,8 @@
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-textarea ,form ,hseq)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-textarea-rows ,rows
w3m-form-hseq ,hseq
w3m-anchor-sequence ,abs-hseq
@@ -755,7 +759,8 @@
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-select ,form ,id ,name)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq))))
((string= type "password")
(w3m-add-face-property start end 'w3m-form-face)
@@ -765,7 +770,8 @@
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-password ,form ,id ,name)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq)))
((string= type "checkbox")
(let ((cvalue (w3m-form-get form id)))
@@ -780,7 +786,8 @@
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-checkbox ,form ,id ,name ,value)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq)))
((string= type "radio")
;; Radio button input, one name has one value
@@ -794,7 +801,8 @@
w3m-action (w3m-form-input-radio ,form ,id ,name ,value)
w3m-submit (w3m-form-submit ,form ,id ,name
(w3m-form-get-by-name
- ,form ,name))
+ ,form ,name)
+ new-session)
w3m-anchor-sequence ,abs-hseq)))
((string= type "file")
(w3m-add-face-property start end 'w3m-form-face)
@@ -804,7 +812,8 @@
,(format "fid=%d/type=%s/name=%s/id=%d" fid type name id)
w3m-action (w3m-form-input-file ,form ,id ,name ,value)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq)))
(t
(w3m-form-put form
@@ -819,7 +828,8 @@
w3m-action (w3m-form-input ,form ,id ,name ,type
,width ,maxlength ,value)
w3m-submit (w3m-form-submit ,form ,id ,name
- (w3m-form-get ,form ,id))
+ (w3m-form-get ,form ,id)
+ new-session)
w3m-anchor-sequence ,abs-hseq)))))))))
;; Process <internal> tag.
(when (search-forward "<internal>" nil t)
@@ -1710,7 +1720,7 @@
(setq files (cons file files))))
files)))
-(defun w3m-form-submit (form &optional id name value)
+(defun w3m-form-submit (form &optional id name value new-session)
(if (w3m-anchor (point))
;; cf SA17565
(w3m-goto-url (w3m-anchor (point)))
@@ -1735,12 +1745,17 @@
;; we use the `post' method according to the proposal
;; of RFC2070.
(eq 'multipart/form-data (w3m-form-enctype form)))
- (w3m-goto-url url 'reload nil
- (w3m-form-make-form-data form)
- w3m-current-url))
+ (funcall (if new-session
+ 'w3m-goto-url-new-session
+ 'w3m-goto-url)
+ url 'reload nil
+ (w3m-form-make-form-data form)
+ w3m-current-url))
((eq 'get (w3m-form-method form))
- (w3m-goto-url
- (concat url "?" (w3m-form-make-form-data form))))
+ (funcall (if new-session
+ 'w3m-goto-url-new-session
+ 'w3m-goto-url)
+ (concat url "?" (w3m-form-make-form-data form))))
(t
(w3m-message "This form's method has not been supported: %s"
(let (print-level print-length)