2 # the next line restarts using wish \
3 exec wish
"$0" ${1+"$@"}
6 # A nice interface to "xset" to change X server settings
9 # 91/11/23 : pda@masi.ibp.fr, jt@ratp.fr : design
10 # 92/08/01 : pda@masi.ibp.fr : cleaning
12 # RCS: @(#) $Id: ixset,v 1.5 2003/09/30 14:54:30 dkf Exp $
14 package require Tcl
8.4
33 .buttons.apply configure
-state disabled
34 .buttons.cancel configure
-state disabled
39 .buttons.apply configure
-state disabled
40 .buttons.cancel configure
-state disabled
44 # Read current settings
47 proc readsettings
{} {
48 global kbdrep
; set kbdrep
"on"
49 global kbdcli
; set kbdcli
0
50 global bellvol
; set bellvol
100
51 global bellpit
; set bellpit
440
52 global belldur
; set belldur
100
53 global mouseacc
; set mouseacc
"3/1"
54 global mousethr
; set mousethr
4
55 global screenbla
; set screenbla
"blank"
56 global screentim
; set screentim
600
57 global screencyc
; set screencyc
600
59 set xfd
[open
"|xset q" r
]
60 while {[gets
$xfd line
] > -1} {
61 switch
-- [lindex
$line 0] {
63 set rpt
[lindex
$line 1]
64 if {$rpt eq
"repeat:"} {
65 set kbdrep
[lindex
$line 2]
66 set kbdcli
[lindex
$line 6]
70 set bellvol
[lindex
$line 2]
71 set bellpit
[lindex
$line 5]
72 set belldur
[lindex
$line 8]
75 set mouseacc
[lindex
$line 1]
76 set mousethr
[lindex
$line 3]
79 set bla
[lindex
$line 2]
80 set screenbla
[expr {$bla eq
"yes" ?
"blank" : "noblank"}]
83 set screentim
[lindex
$line 1]
84 set screencyc
[lindex
$line 3]
90 # puts stdout [format "Key REPEAT = %s\n" $kbdrep]
91 # puts stdout [format "Key CLICK = %s\n" $kbdcli]
92 # puts stdout [format "Bell VOLUME = %s\n" $bellvol]
93 # puts stdout [format "Bell PITCH = %s\n" $bellpit]
94 # puts stdout [format "Bell DURATION = %s\n" $belldur]
95 # puts stdout [format "Mouse ACCELERATION = %s\n" $mouseacc]
96 # puts stdout [format "Mouse THRESHOLD = %s\n" $mousethr]
97 # puts stdout [format "Screen BLANCK = %s\n" $screenbla]
98 # puts stdout [format "Screen TIMEOUT = %s\n" $screentim]
99 # puts stdout [format "Screen CYCLE = %s\n" $screencyc]
104 # Write settings into the X server
107 proc writesettings
{} {
108 global kbdrep kbdcli bellvol bellpit belldur
109 global mouseacc mousethr screenbla screentim screencyc
111 set bellvol
[.bell.vol get
]
112 set bellpit
[.bell.val.pit.entry get
]
113 set belldur
[.bell.val.dur.entry get
]
115 if {$kbdrep eq
"on"} {
116 set kbdcli
[.kbd.val.cli get
]
121 set mouseacc
[.mouse.hor.acc.entry get
]
122 set mousethr
[.mouse.hor.thr.entry get
]
124 set screentim
[.screen.tim.entry get
]
125 set screencyc
[.screen.cyc.entry get
]
128 b
$bellvol $bellpit $belldur \
131 m
$mouseacc $mousethr \
132 s
$screentim $screencyc \
138 # Sends all settings to the window
141 proc dispsettings
{} {
142 global kbdrep kbdcli bellvol bellpit belldur
143 global mouseacc mousethr screenbla screentim screencyc
145 .bell.vol
set $bellvol
146 .bell.val.pit.entry delete
0 end
147 .bell.val.pit.entry insert
0 $bellpit
148 .bell.val.dur.entry delete
0 end
149 .bell.val.dur.entry insert
0 $belldur
151 .kbd.val.onoff
[expr {$kbdrep eq
"on" ?
"select" : "deselect"}]
152 .kbd.val.cli
set $kbdcli
154 .mouse.hor.acc.entry delete
0 end
155 .mouse.hor.acc.entry insert
0 $mouseacc
156 .mouse.hor.thr.entry delete
0 end
157 .mouse.hor.thr.entry insert
0 $mousethr
159 .screen.blank
[expr {$screenbla eq
"blank" ?
"select" : "deselect"}]
160 .screen.pat
[expr {$screenbla ne
"blank" ?
"select" : "deselect"}]
161 .screen.tim.entry delete
0 end
162 .screen.tim.entry insert
0 $screentim
163 .screen.cyc.entry delete
0 end
164 .screen.cyc.entry insert
0 $screencyc
169 # Create all windows, and pack them
172 proc labelentry
{path text length
{range
{}}} {
174 label
$path.label
-text $text
175 if {[llength
$range]} {
176 spinbox
$path.entry
-width $length -relief sunken \
177 -from [lindex
$range 0] -to [lindex
$range 1]
179 entry
$path.entry
-width $length -relief sunken
181 pack
$path.label
-side left
182 pack
$path.entry
-side right
-expand y
-fill x
185 proc createwindows
{} {
191 button .buttons.ok
-default active
-command ok
-text "Ok"
192 button .buttons.apply
-default normal
-command apply
-text "Apply" \
194 button .buttons.cancel
-default normal
-command cancel
-text "Cancel" \
196 button .buttons.quit
-default normal
-command quit
-text "Quit"
198 pack .buttons.ok .buttons.apply .buttons.cancel .buttons.quit \
199 -side left
-expand yes -pady 5
201 bind .
<Return
> {.buttons.ok flash
; .buttons.ok invoke
}
202 bind .
<Escape
> {.buttons.quit flash
; .buttons.quit invoke
}
204 if {![string match .buttons
* %W
]} {
205 .buttons.apply configure
-state normal
206 .buttons.cancel configure
-state normal
210 if {![string match .buttons
* %W
]} {
212 Return
- Escape
- Tab
- *Shift
* {}
214 .buttons.apply configure
-state normal
215 .buttons.cancel configure
-state normal
225 labelframe .bell
-text "Bell Settings" -padx 1.5m
-pady 1.5m
227 -from 0 -to 100 -length 200 -tickinterval 20 \
228 -label "Volume (%)" -orient horizontal
231 labelentry .bell.val.pit
"Pitch (Hz)" 6 {25 20000}
232 labelentry .bell.val.dur
"Duration (ms)" 6 {1 10000}
233 pack .bell.val.pit
-side left
-padx 5
234 pack .bell.val.dur
-side right
-padx 5
235 pack .bell.vol .bell.val
-side top
-expand yes
241 labelframe .kbd
-text "Keyboard Repeat Settings" -padx 1.5m
-pady 1.5m
244 checkbutton .kbd.val.onoff \
246 -onvalue "on" -offvalue "off" -variable kbdrep \
249 -from 0 -to 100 -length 200 -tickinterval 20 \
250 -label "Click Volume (%)" -orient horizontal
251 pack .kbd.val.onoff
-side left
-fill x
-expand yes -padx {0 1m
}
252 pack .kbd.val.cli
-side left
-expand yes -fill x
-padx {1m
0}
254 pack .kbd.val
-side top
-expand yes -pady 2 -fill x
260 labelframe .mouse
-text "Mouse Settings" -padx 1.5m
-pady 1.5m
263 labelentry .mouse.hor.acc
"Acceleration" 5
264 labelentry .mouse.hor.thr
"Threshold (pixels)" 3 {1 2000}
266 pack .mouse.hor.acc
-side left
-padx {0 1m
}
267 pack .mouse.hor.thr
-side right
-padx {1m
0}
269 pack .mouse.hor
-side top
-expand yes
272 # Screen Saver settings
275 labelframe .screen
-text "Screen-saver Settings" -padx 1.5m
-pady 1.5m
277 radiobutton .screen.blank \
278 -variable screenblank
-text "Blank" -relief flat \
279 -value "blank" -variable screenbla
-anchor w
280 radiobutton .screen.pat \
281 -variable screenblank
-text "Pattern" -relief flat \
282 -value "noblank" -variable screenbla
-anchor w
283 labelentry .screen.tim
"Timeout (s)" 5 {1 100000}
284 labelentry .screen.cyc
"Cycle (s)" 5 {1 100000}
286 grid .screen.blank .screen.tim
-sticky e
287 grid .screen.pat .screen.cyc
-sticky e
288 grid configure .screen.blank .screen.pat
-sticky ew
294 pack .buttons
-side top
-fill both
295 pack .bell .kbd .mouse .screen
-side top
-fill both
-expand yes \
299 # Let the user resize our window
304 ##############################################################################
308 # Listen what "xset" tells us...
320 # Write xset parameters
326 # Now, wait for user actions...