This came to light when reviewing PR#51
Reproducible: From a w3m buffer type 'G ddg:namazu'. Instead of
returning a search results page, emacs-w3m returns a blank search
input page.
The basic problem seems to me to be that function w3m-input-url
itself calls function w3m-canonicalize-url instead of letting its
own callers decide whether to do so.
What is happening is that function w3m-goto-url calls function
w3m-input-url as part of its interactive spec, so at the very
beginning of the function w3m-goto-url, the URL arg has already been
'sanitizied'. However, in Jakub's case of using the quick search
feature for duckduckgo (ie. user inputs a url "ddg:foo"), the tail of
that url needs to parsed and placed in arg POST-DATA, because the
entry for "ddg:" in w3m-uri-replace-alist uses function
w3m-search-uri-replace and the duckduckgo entry in variable
w3m-search-engine-alist has a fourth argument - POST-DATA.
So, because of this quick-search feature, w3m-input-url in its
current form can not be used by w3m-goto-url. Function
w3m-goto-url looks to me to be used in ten separate places, so a
refactor would need to be careful.
The simple solution seems to be to remove from function
w3m-goto-urlthe call to function w3m-canonicalize-url, and have
each caller itself decide whether and when to do so.
In the case of function w3m-goto-url, what looks to me to be a
solution is to replace
(when (and (stringp url) (not (w3m-interactive-p)))
(setq url (w3m-canonicalize-url url)))with
(let* ((uri-replace ; based upon: `w3m-uri-replace'
(catch 'found-replacement
(dolist (elem w3m-uri-replace-alist)
(when (string-match (car elem) url)
(throw 'found-replacement elem)))))
(query (substring url (match-end 0)))
engine-info)
(when (and uri-replace query
(eq (nth 1 uri-replace) 'w3m-search-uri-replace))
; based upon `w3m-search-uri-replace'
(setq engine-info (assoc (nth 2 uri-replace) w3m-search-engine-alist))
(when (and engine-info (< 2 (length engine-info)))
(setq post-data (w3m-search-escape-query-string query (nth 2 engine-info))))))
(setq url (w3m-canonicalize-url url)))—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.