4 # A nice interface to "xset" to change X server settings
27 # apply is just "writesettings"
31 # Read current settings
34 xfd = open("|xset q", 'r')
35 xfd.readlines.each{|line|
36 fields = line.chomp.strip.split(/\s+/)
39 if fields[1] == 'repeat:'
41 @w_kbdrep.set(@kbdrep)
58 @screenbla = 'noblank'
60 @w_screenbla.set(@screenbla)
63 @screentim = fields[1]
64 @screencyc = fields[3]
73 # Write settings into the X server
76 @bellvol = @w_bellvol.get
77 @bellpit = @w_bellpit.get
78 @belldur = @w_belldur.get
80 @kbdrep = @w_kbdrep.get
82 @kbdcli = @w_kbdcli.get
87 @mouseacc = @w_mouseacc.get
88 @mousethr = @w_mousethr.get
90 @screentim = @w_screentim.get
91 @screencyc = @w_screencyc.get
92 @screenbla = @w_screenbla.get
95 b #{@bellvol} #{@bellpit} #{@belldur} \
98 m #{@mouseacc} #{@mousethr} \
99 s #{@screentim} #{@screencyc} \
104 # Sends all settings to the window
107 @w_bellvol.set(@bellvol)
108 @w_bellpit.set(@bellpit)
109 @w_belldur.set(@belldur)
111 @w_kbdonoff.set(@w_kbdrep.get)
112 @w_kbdcli.set(@kbdcli)
114 @w_mouseacc.set(@mouseacc)
115 @w_mousethr.set(@mousethr)
117 @w_screenblank.set(@w_screenbla.get)
118 @w_screenpat.set(@w_screenbla.get)
120 @w_screentim.set(@screentim)
121 @w_screencyc.set(@screencyc)
125 # Create all windows, and pack them
128 def initialize(parent, text, length)
129 @frame = TkFrame.new(parent)
130 TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y')
131 @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') {
132 pack('side'=>'left','expand'=>'y')
142 @entry.delete(0,'end')
143 @entry.insert(0, value)
153 buttons = TkFrame.new(@root) {|f|
154 [ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'),
155 TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'),
156 TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'),
157 TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b|
158 b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5)
165 bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
166 l = TkLabel.new(bell, 'text'=>'Bell Settings')
167 @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200,
168 'tickinterval'=>20, 'orient'=>'horizontal',
169 'label'=>"Volume (%)")
171 f = TkFrame.new(bell)
172 @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6)
173 @w_bellpit.pack('side'=>'left', 'padx'=>5)
174 @w_belldur = LabelEntry.new(f, "Duration (ms)", 6)
175 @w_belldur.pack('side'=>'right', 'padx'=>5)
177 l.pack('side'=>'top', 'expand'=>'yes')
178 @w_bellvol.pack('side'=>'top', 'expand'=>'yes')
179 f.pack('side'=>'top', 'expand'=>'yes')
186 kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
187 l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings')
189 @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat',
190 'onvalue'=>'on', 'offvalue'=>'off',
191 'variable'=>@w_kbdrep ) {
199 pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both')
201 @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200,
202 'tickinterval'=>20, 'orient'=>'horizontal',
203 'label'=>'Click Volume (%)')
204 @w_kbdcli.pack('side'=>'left', 'expand'=>'yes')
205 l.pack('side'=>'top', 'expand'=>'yes')
206 f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x')
211 mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
212 l = TkLabel.new(mouse, 'text'=>'Mouse Settings')
213 f = TkFrame.new(mouse)
214 @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3)
215 @w_mouseacc.pack('side'=>'left')
216 @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3)
217 @w_mousethr.pack('side'=>'right')
218 l.pack('side'=>'top')
219 f.pack('side'=>'top', 'expand'=>'yes')
222 # Screen Saver settings
224 screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
225 l = TkLabel.new(screen, 'text'=>'Screen-saver Settings')
226 f = TkFrame.new(screen)
228 [ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank',
230 'variable'=>@w_screenbla,
240 @w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern',
242 'variable'=>@w_screenbla,
243 'value'=>'noblank') {
252 ].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') }
255 [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5),
256 @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w|
257 w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e')
260 ff1.pack('side'=>'left')
261 ff2.pack('side'=>'left')
263 l.pack('side'=>'top')
264 f.pack('side'=>'top', 'expand'=>'yes')
269 buttons.pack('side'=>'top', 'fill'=>'both')
270 bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
271 kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
272 mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
273 screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
276 # Let the user resize our window
285 @w_kbdrep = TkVariable.new(@kbdrep)
289 def @w_kbdrep.set(val)
303 @w_screenbla = TkVariable.new(@screenbla)
307 def @w_screenbla.set(val)
315 # Listen what "xset" tells us...
325 # Write xset parameters