--- /dev/null
+#!/bin/sh
+# Find wish, even though the path is unknown, and run it on this script. \
+exec wish "$0" "$@"
+
+# Dillo configuration script, by Bob Thomson (rjt@ee.ed.ac.uk).
+
+# The settings are kept in the global array called $prefs[].
+# It is indexed by key name.
+
+# use the file in the home directory, or in /etc ??
+proc find_source_file {} {
+
+}
+
+# this make some of the more awkward options into a convenient form
+proc unpack_options {} {
+ global prefs width height colours
+ regexp {([0-9]+)[xX]([0-9]+)} $prefs(geometry) ignore width height
+
+ # tcl/tk doesn't like C-style colours
+ foreach c {link_color visited_color bg_color text_color} {
+ regsub {0[xX]} $prefs($c) \# colours($c)
+ }
+}
+
+# the reverse of unpack_options
+proc pack_options {} {
+ global prefs width height colours
+ set prefs(geometry) ${width}x${height}
+
+ # dillo doesn't like tcl/tk-style colours
+ foreach c {link_color visited_color bg_color text_color} {
+ regsub \# $colours($c) "0x" prefs($c)
+ }
+}
+
+# update the display for new settings
+proc refresh {} {
+ global colours
+ .entries.b18 configure -bg $colours(link_color) \
+ -activebackground $colours(link_color)
+ .entries.b19 configure -bg $colours(visited_color) \
+ -activebackground $colours(visited_color)
+ .entries.b20 configure -bg $colours(text_color) \
+ -activebackground $colours(text_color)
+ .entries.b21 configure -bg $colours(bg_color) \
+ -activebackground $colours(bg_color)
+}
+
+# set everything to reasonable values
+proc load_defaults {} {
+ global prefs
+ # these values must be the same as the defaults that dillo uses
+ array set prefs {
+ geometry 640x550
+ use_dicache NO
+ font_factor 1.0
+ use_oblique NO
+ show_alt NO
+ limit_text_width NO
+ home "http://dillo.sourceforge.net/"
+ http_proxy ""
+ no_proxy ""
+ bg_color 0xd6d6c0
+ text_color 0x000000
+ link_color 0x0000ff
+ visited_color 0x800080
+ allow_white_bg NO
+ force_my_colors NO
+ force_visited_color NO
+ panel_size tiny
+ small_icons NO
+ show_back YES
+ show_forw YES
+ show_home YES
+ show_reload YES
+ show_save YES
+ show_stop YES
+ show_menubar YES
+ show_clear_url YES
+ show_url YES
+ show_progress_box YES
+ transient_dialogs NO
+ }
+ unpack_options
+}
+
+# read from file f, which must be readable
+proc read_a_file {f} {
+ global prefs
+ set fh [open $f "r"]
+ while {![eof $fh]} {
+ gets $fh line
+ # this next line skips comments, and finds options
+ if {![regexp {^[ \t]*\#} $line]
+ && [regexp {([^= \t]+)[ \t]*=[ \t]*(.+)} $line ignore a b]} {
+ set prefs($a) $b
+ }
+ }
+ close $fh
+}
+
+proc read_prefs {} {
+ global prefs oldprefs
+ # this next line makes sure all parameters are set, if not in the file
+ load_defaults
+ if {[file exists "~/.dillo/dillorc"]
+ &&[file readable "~/.dillo/dillorc"]} {
+ read_a_file "~/.dillo/dillorc"
+ } else {
+ # read /etc/dillorc if no per-user config file
+ if {[file exists "/etc/dillorc"]
+ &&[file readable "/etc/dillorc"]} {
+ read_a_file "/etc/dillorc"
+ }
+ }
+ unpack_options
+ array set oldprefs [array get prefs]
+}
+
+proc write_prefs {} {
+ global prefs oldprefs
+ pack_options
+
+ # create the config dir?
+ if {[file exists "~/.dillo"] == 0} {
+ file mkdir "~/.dillo"
+ }
+
+ if {![file exists "~/.dillo/dillorc"]
+ || [file writable "~/.dillo/dillorc"]} {
+ set fh [open "~/.dillo/dillorc" "w"]
+ set keys [array names prefs]
+ foreach k $keys {
+ # only write the line if there is a value
+ if {[regexp {[^ \t]} $prefs($k)]} {
+ puts $fh ${k}=$prefs($k)
+ }
+ }
+ close $fh
+ } else {
+ tk_dialog .broken "ERROR" \
+ "The dillo configuration file \"~/.dillo/dillorc\" is unwritable!"\
+ "" 0 "OK"
+ }
+ array set oldprefs [array get prefs]
+}
+
+# leave, possibly popping up a dialogue asking whether or not to save
+proc quit_save {} {
+ global prefs oldprefs
+ pack_options
+
+ set modified 0
+ foreach {k v} [array get prefs] {
+ if {$v != $oldprefs($k)} {
+ set modified 1
+ break
+ }
+ }
+
+ if {$modified} {
+ set button [tk_dialog .savepopup "SAVE?" \
+ "Save changes before quitting?"\
+ "" 0 "Yes" "No" "Cancel"]
+ if {$button == 0} write_prefs
+ if {$button == 0 || $button == 1} exit
+ } else {
+ exit
+ }
+}
+
+# construct the top-level window
+proc build_window {} {
+ global prefs colours
+ frame .entries
+ frame .urls
+ frame .boxes
+ frame .buttons
+
+ label .entries.l1 -text "Window width"
+ entry .entries.e1 -textvariable width -width 5 \
+ -validate key -vcmd {string is integer %P}
+ label .entries.l2 -text "Window height"
+ entry .entries.e2 -textvariable height -width 5 \
+ -validate key -vcmd {string is integer %P}
+ label .entries.l3 -text "Font scale factor"
+ entry .entries.e3 -textvariable prefs(font_factor) -width 5 \
+ -validate key -vcmd {string is double %P}
+ checkbutton .boxes.c4 -text "Use oblique fonts" -onvalue YES -offvalue NO \
+ -variable prefs(use_oblique)
+ checkbutton .boxes.c5 -text "Pop-up text for images" -onvalue YES \
+ -offvalue NO -variable prefs(show_alt)
+ label .urls.l6 -text "Home page URL"
+ entry .urls.e4 -textvariable prefs(home) -width 64
+ checkbutton .boxes.c7 -text "Allow white backgrounds" -onvalue YES \
+ -offvalue NO -variable prefs(allow_white_bg)
+ checkbutton .boxes.c8 -text "Show \"back\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_back)
+ checkbutton .boxes.c9 -text "Show \"forward\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_forw)
+ checkbutton .boxes.c10 -text "Show \"home\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_home)
+ checkbutton .boxes.c11 -text "Show \"reload\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_reload)
+ checkbutton .boxes.c12 -text "Show \"save\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_save)
+ checkbutton .boxes.c13 -text "Show \"stop\" button" -onvalue YES \
+ -offvalue NO -variable prefs(show_stop)
+ checkbutton .boxes.c14 -text "Show menu bar" -onvalue YES -offvalue NO \
+ -variable prefs(show_menubar)
+ checkbutton .boxes.c15 -text "Show URL bar" -onvalue YES -offvalue NO \
+ -variable prefs(show_url)
+ checkbutton .boxes.c16 -text "Show progress box" -onvalue YES \
+ -offvalue NO -variable prefs(show_progress_box)
+ checkbutton .boxes.c17 -text "Always use default colours" -onvalue YES \
+ -offvalue NO -variable prefs(force_my_colors)
+ checkbutton .boxes.c23 -text "Override visited link colours" -onvalue YES \
+ -offvalue NO -variable prefs(force_visited_color)
+ checkbutton .boxes.c18 -text "Use small icons" -onvalue YES -offvalue NO \
+ -variable prefs(small_icons)
+ checkbutton .boxes.c19 -text "Limit the width of text" -onvalue YES \
+ -offvalue NO -variable prefs(limit_text_width)
+ checkbutton .boxes.c20 -text "Cache decompressed images" -onvalue YES \
+ -offvalue NO -variable prefs(use_dicache)
+ checkbutton .boxes.c21 -text "Show clear URL button" -onvalue YES \
+ -offvalue NO -variable prefs(show_clear_url)
+ checkbutton .boxes.c22 -text "Allow transient dialogs" -onvalue YES \
+ -offvalue NO -variable prefs(transient_dialogs)
+ label .entries.l29 -text "Panel size"
+ tk_optionMenu .entries.o1 prefs(panel_size) tiny medium large
+ label .entries.l22 -text "Link colour"
+ # note that named colours work in tcl/tk; eg. "blue" will not break this
+ button .entries.b18 -bg $colours(link_color) \
+ -activebackground $colours(link_color) \
+ -command {
+ set c [tk_chooseColor -initialcolor $colours(link_color) \
+ -title "Set link colour"]
+ if {$c != ""} {
+ set colours(link_color) $c
+ .entries.b18 configure -bg $c -activebackground $c
+ }
+ }
+ label .entries.l23 -text "Visited link colour"
+ button .entries.b19 -bg $colours(visited_color) -activebackground \
+ $colours(visited_color) \
+ -command {
+ set c [tk_chooseColor -initialcolor $colours(visited_color) \
+ -title "Set visited link colour"]
+ if {$c != ""} {
+ set colours(visited_color) $c
+ .entries.b19 configure -bg $c -activebackground $c
+ }
+ }
+ label .entries.l24 -text "Text colour"
+ button .entries.b20 -bg $colours(text_color) \
+ -activebackground $colours(text_color) \
+ -command {
+ set c [tk_chooseColor -initialcolor $colours(text_color) \
+ -title "Set text colour"]
+ if {$c != ""} {
+ set colours(text_color) $c
+ .entries.b20 configure -bg $c -activebackground $c
+ }
+ }
+ label .entries.l25 -text "Background colour"
+ button .entries.b21 -bg $colours(bg_color) \
+ -activebackground $colours(bg_color) \
+ -command {
+ set c [tk_chooseColor -initialcolor $colours(bg_color) \
+ -title "Set background colour"]
+ if {$c != ""} {
+ set colours(bg_color) $c
+ .entries.b21 configure -bg $c -activebackground $c
+ }
+ }
+ label .urls.l26 -text "Proxy URL"
+ entry .urls.e27 -textvariable prefs(http_proxy) -width 64
+ label .urls.l28 -text "Unproxied domain"
+ entry .urls.e29 -textvariable prefs(no_proxy) -width 64
+
+ button .buttons.b1 -text "Use defaults" -command {
+ load_defaults
+ refresh
+ }
+ button .buttons.b2 -text "Reload" -command {
+ read_prefs
+ refresh
+ }
+ button .buttons.b3 -text "Save" -command write_prefs
+ button .buttons.b4 -text "Quit" -command quit_save
+
+ grid .buttons.b1 -row 0 -column 1
+ grid .buttons.b2 -row 0 -column 2
+ grid .buttons.b3 -row 0 -column 3
+ grid .buttons.b4 -row 0 -column 4
+
+ grid .boxes.c8 -row 0 -column 0 -sticky w
+ grid .boxes.c9 -row 1 -column 0 -sticky w
+ grid .boxes.c10 -row 2 -column 0 -sticky w
+ grid .boxes.c11 -row 3 -column 0 -sticky w
+ grid .boxes.c12 -row 4 -column 0 -sticky w
+ grid .boxes.c13 -row 5 -column 0 -sticky w
+ grid .boxes.c14 -row 6 -column 0 -sticky w
+ grid .boxes.c15 -row 7 -column 0 -sticky w
+ grid .boxes.c21 -row 8 -column 0 -sticky w
+ grid .boxes.c16 -row 9 -column 0 -sticky w
+ grid .boxes.c4 -row 0 -column 1 -sticky w
+ grid .boxes.c5 -row 1 -column 1 -sticky w
+ grid .boxes.c7 -row 2 -column 1 -sticky w
+ grid .boxes.c17 -row 3 -column 1 -sticky w
+ grid .boxes.c23 -row 4 -column 1 -sticky w
+ grid .boxes.c18 -row 5 -column 1 -sticky w
+ grid .boxes.c22 -row 6 -column 1 -sticky w
+ grid .boxes.c19 -row 7 -column 1 -sticky w
+ grid .boxes.c20 -row 8 -column 1 -sticky w
+
+ grid .entries.l1 -row 0 -column 0 -sticky e
+ grid .entries.e1 -row 0 -column 1 -sticky w
+ grid .entries.l2 -row 1 -column 0 -sticky e
+ grid .entries.e2 -row 1 -column 1 -sticky w
+ grid .entries.l3 -row 2 -column 0 -sticky e
+ grid .entries.e3 -row 2 -column 1 -sticky w
+ grid .entries.l22 -row 3 -column 0 -sticky e
+ grid .entries.b18 -row 3 -column 1 -sticky w
+ grid .entries.l23 -row 4 -column 0 -sticky e
+ grid .entries.b19 -row 4 -column 1 -sticky w
+ grid .entries.l24 -row 5 -column 0 -sticky e
+ grid .entries.b20 -row 5 -column 1 -sticky w
+ grid .entries.l25 -row 6 -column 0 -sticky e
+ grid .entries.b21 -row 6 -column 1 -sticky w
+ grid .entries.l29 -row 7 -column 0 -sticky e
+ grid .entries.o1 -row 7 -column 1 -sticky w
+
+ grid .urls.l6 -row 0 -column 0 -sticky e
+ grid .urls.e4 -row 0 -column 1 -sticky "ew"
+ grid .urls.l26 -row 1 -column 0 -sticky e
+ grid .urls.e27 -row 1 -column 1 -sticky "ew"
+ grid .urls.l28 -row 2 -column 0 -sticky e
+ grid .urls.e29 -row 2 -column 1 -sticky "ew"
+
+ grid .buttons -row 2 -column 0 -columnspan 2 -sticky "ew"
+ grid .urls -row 1 -column 0 -columnspan 2 -sticky "ew"
+ grid .boxes -row 0 -column 1 -sticky e
+ grid .entries -row 0 -column 0 -sticky w
+# pack .buttons -side bottom -fill x -expand 1
+# pack .urls -side bottom -fill x -expand 1
+# pack .boxes -side left
+# pack .entries -side right
+
+}
+
+read_prefs
+build_window