# $Id$ if {$tcl_platform(platform) == "windows"} { package require dde } proc postload {} {} proc menuload {menudesc} { return $menudesc } proc finload {} {} proc browser_loadopt {} { custom::defvar webbrowser "" \ [::msgcat::mc "Command to be run when you click a URL\ in a message. '%s' will be replaced with this URL (e.g. \"galeon -n %s\")."]\ -group IFace -type string } hook::add postload_hook browser_loadopt proc browseurl {url} { global env tcl_platform set_status $url update idletask set url [string map {\u0009 %09 \u000a %0a \u000d %0d \u0020 %20 \" %22 \' %27 \; %3b \< %3c \> %3e \@ %40 \{ %7b \| %7c \} %7d} $url] debugmsg browseurl "Mapped URL: '$url'" if {[info exists ::webbrowser] && $::webbrowser != ""} { # If user specified a browser, use it eval exec [format $::webbrowser $url] & return } # Set the clipboard value to this url in-case the user needs to paste the # url in (some windows systems). clipboard clear clipboard append $url switch -- $tcl_platform(platform) { windows { # DDE uses commas to separate command parts set url [string map {, %2c} $url] # See if we can use dde and an existing browser. set handled 0 foreach app {Opera Firefox {Mozilla Firebird} Mozilla Netscape IExplore} { if {[dde services $app WWW_OpenURL] != {}} { if {[catch {dde request $app WWW_OpenURL $url,} msg]} { debugmsg browseurl "dde request $app failed: \"$msg\"" } else { set handled 1 break } } } # The windows NT shell treats '&' as a special character. Using # a '^' will escape it. See http://wiki.tcl.tk/557 for more info. if {! $handled} { if {[string compare $tcl_platform(os) "Windows NT"] == 0} { set url [string map {& ^&} $url] } if {[catch {eval exec [auto_execok start] [list $url] &} emsg]} { MessageDlg .browse_err -aspect 50000 -icon info \ -buttons ok -default 0 -cancel 0 -type user \ -message \ [format \ [::msgcat::mc "Error displaying %s in browser\n\n%s"] \ $url $emsg] } } } macintosh { if {![info exists env(BROWSER)]} { set env(BROWSER) "Browse the Internet" AppleScript execute \ "tell application \"env(BROWSER)\"\nopen url \"$url\"\nend tell\n" } } default { if {![info exists env(BROWSER)]} { foreach b [list firefox galeon konqueror mozilla-firefox \ mozilla-firebird mozilla netscape \ iexplorer opera] { if {[llength [set e [auto_execok $b]]] > 0} { set env(BROWSER) [lindex $e 0] break } } if {![info exists env(BROWSER)]} { if {[string equal $tcl_platform(os) Darwin]} { exec open $url & set_status "" return } MessageDlg .browse_err -aspect 50000 -icon info \ -message [::msgcat::mc "Please define environment variable BROWSER"] \ -type user \ -buttons ok -default 0 -cancel 0 return } } if {[catch { exec $env(BROWSER) -remote openURL($url,new-tab) }]} { if {[catch { exec $env(BROWSER) -remote $url }]} { exec $env(BROWSER) $url & } } } } set_status "" }