original commit: f64490b81c7cb4661eb1f72ebbae059cd07871a4
This commit is contained in:
Matthew Flatt 2001-12-20 17:36:11 +00:00
parent a450ad9490
commit 05b3a0cab1

View File

@ -1,6 +1,7 @@
(module sendurl mzscheme (module sendurl mzscheme
(require (lib "process.ss")) (require (lib "process.ss")
(lib "file.ss"))
(provide send-url) (provide send-url)
@ -24,28 +25,33 @@
(close-input-port err))) (close-input-port err)))
(error 'send-url "don't know how to open URL in Windows without MrEd")))] (error 'send-url "don't know how to open URL in Windows without MrEd")))]
[(unix) [(unix)
(cond (let ([preferred (get-preference 'external-browser (lambda () #f))])
[(find-executable-path "opera" #f) (cond
=> [(and (or (not preferred)
(lambda (browser-path) (eq? preferred 'opera))
;; opera may not return -- always open asyncronously (find-executable-path "opera" #f))
;; opera starts a new browser automatically, if it can't find one =>
(let-values ([(out in id err status) (apply (lambda (browser-path)
values ;; opera may not return -- always open asyncronously
(process* browser-path "-remote" (format "openURL(~a)" str)))]) ;; opera starts a new browser automatically, if it can't find one
(close-output-port in) (let-values ([(out in id err status) (apply
(close-input-port out) values
(close-input-port err)))] (process* browser-path "-remote" (format "openURL(~a)" str)))])
[(find-executable-path "netscape" #f) (close-output-port in)
=> (close-input-port out)
(lambda (browser-path) (close-input-port err)))]
;; netscape's -remote returns with an error code, if no [(and (and (or (not preferred)
;; netscape is around. start a new netscape in that case. (eq? preferred 'netscape)))
(or (system* browser-path "-remote" (format "openURL(~a)" str)) (find-executable-path "netscape" #f))
(let-values ([(out in id err status) (apply values (process* browser-path str))]) =>
(close-output-port in) (lambda (browser-path)
(close-input-port out) ;; netscape's -remote returns with an error code, if no
(close-input-port err))))] ;; netscape is around. start a new netscape in that case.
[else (or (system* browser-path "-remote" (format "openURL(~a)" str))
(error 'open-url "Couldn't find Netscape or Opera to open URL: ~e" str)])] (let-values ([(out in id err status) (apply values (process* browser-path str))])
(close-output-port in)
(close-input-port out)
(close-input-port err))))]
[else
(error 'open-url "Couldn't find Netscape or Opera to open URL: ~e" str)]))]
[else (error 'send-url "don't know how to open URL on platform: ~s" (system-type))]))) [else (error 'send-url "don't know how to open URL on platform: ~s" (system-type))])))