summaryrefslogtreecommitdiff
path: root/alternative_wmiircs/ruby/config.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'alternative_wmiircs/ruby/config.yaml')
-rw-r--r--alternative_wmiircs/ruby/config.yaml536
1 files changed, 536 insertions, 0 deletions
diff --git a/alternative_wmiircs/ruby/config.yaml b/alternative_wmiircs/ruby/config.yaml
new file mode 100644
index 0000000..60065b3
--- /dev/null
+++ b/alternative_wmiircs/ruby/config.yaml
@@ -0,0 +1,536 @@
+#
+# High-level wmii configuration.
+#
+# Ruby code in this file has access
+# to a CONFIG constant which contains
+# the data in this configuration file.
+#
+#--
+# Copyright protects this work.
+# See LICENSE file for details.
+#++
+
+
+##
+# Program preferences.
+#
+program:
+ terminal: @TERMINAL@
+ browser: firefox
+ editor: mousepad
+ filer: thunar
+
+
+##
+# Appearance settings.
+#
+display:
+
+ ##
+ # Where to display the horizontal status bar?
+ #
+ # Possible choices are "top" and "bottom".
+ #
+ bar: bottom
+
+ ##
+ # The font to use in all text drawn by wmii.
+ #
+ font: -*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*
+
+ ##
+ # Thickness of client border (measured in pixels).
+ #
+ border: 1
+
+ ##
+ # Number of seconds a notice should be displayed.
+ #
+ notice: 5
+
+ ##
+ # Color schemes for everything drawn by wmii.
+ #
+ # <scheme>: "<text> <background> <border>"
+ #
+ # You can find more color schemes here:
+ #
+ # http://wmii.suckless.org/scripts_n_snips/themes
+ #
+ color:
+ normal: "#000000 #c1c48b #81654f"
+ focus: "#000000 #81654f #000000"
+ error: "#000000 #81654f #000000"
+ notice: "#000000 #a1956d #413328"
+ success: "#000000 #c1c48b #81654f"
+
+ ##
+ # Color of desktop background.
+ #
+ background: "#333333"
+
+ ##
+ # Settings for columns drawn by wmii.
+ #
+ # mode: <the wmii "colmode" setting>
+ # rule: <the wmii "colrules" setting>
+ #
+ column:
+ mode: default
+ rule: |
+ /gimp/ -> 17+83+41
+ /.*/ -> 62+38 # Golden Ratio
+
+ ##
+ # Mapping of clients to views they must appear on.
+ #
+ # - <client props regular expression> : <tags to apply>
+ #
+ # These mappings are processed in top-to-bottom order.
+ # Processing stops after the first matching mapping is applied.
+ #
+ client:
+ - /MPlayer|VLC/ : ~
+
+ ##
+ # Self-refreshing buttons on the status bar.
+ #
+ # - <button name>:
+ # refresh: <number of seconds to wait before refreshing the content>
+ # content: <Ruby code whose result is displayed as the content>
+ # click: <Ruby code to handle mouse clicks on the status button.
+ # This code has access to a "mouse_button" variable which is
+ # an integer representing the mouse button that was clicked.>
+ #
+ # You can refresh a particular status button in Ruby using:
+ #
+ # status "your button name"
+ #
+ # The horizontal order in which these buttons appear on the status
+ # bar reflects the vertical order in which they are defined below.
+ #
+ status:
+ - system_load:
+ refresh: 10
+ content: |
+ load_averages = File.read('/proc/loadavg').split.first(3)
+ current_load = load_averages.first.to_f
+
+ # visually indicate the intensity of system load
+ color = case
+ when current_load > 3.0 then CONFIG['display']['color']['error']
+ when current_load > 1.5 then CONFIG['display']['color']['notice']
+ end
+
+ [color, *load_averages]
+
+ - clock:
+ refresh: 5
+ content: Time.now.to_s
+
+
+##
+# Interaction settings.
+#
+control:
+
+ ##
+ # The wmii "grabmod" setting.
+ #
+ grab: Mod4
+
+ ##
+ # Key sequence prefixes.
+ #
+ mod: Mod4
+ move: Mod4-Shift
+ swap: Mod4-w
+ view: Mod4-v
+ group: Mod4-g
+
+ ##
+ # Direction keys.
+ #
+ up: k
+ down: j
+ left: h
+ right: l
+
+ ##
+ # Sequence keys.
+ #
+ prev: b
+ next: n
+
+ ##
+ # Key bindings.
+ #
+ # <key sequence>: <Ruby code to execute>
+ #
+ # A key sequence may contain ${...} expressions which
+ # are replaced with the value corresponding to '...'
+ # in the 'control' section of this configuration file.
+ #
+ # For example, if the 'control' section of
+ # this configuration file appeared like this:
+ #
+ # control:
+ # foo: Mod4
+ # bar: y
+ #
+ # and the following key sequence was used:
+ #
+ # ${foo}-${bar},${bar}
+ #
+ # then after ${...} expression replacement,
+ # that key sequence would appear like this:
+ #
+ # Mod4-y,y
+ #
+ key:
+ #---------------------------------------------------------------------------
+ # focus
+ #---------------------------------------------------------------------------
+
+ ${mod}-${up}: | # focus above client
+ curr_view.select(:up) rescue nil
+
+ ${mod}-${down}: | # focus below client
+ curr_view.select(:down) rescue nil
+
+ ${mod}-${left}: | # focus left client
+ curr_view.select(:left) rescue nil
+
+ ${mod}-${right}: | # focus right client
+ curr_view.select(:right) rescue nil
+
+ ${mod}-space: | # focus floating area (toggle)
+ curr_view.select(:toggle)
+
+ ${mod}-${prev}: | # focus previous view
+ prev_view.focus
+
+ ${mod}-${next}: | # focus next view
+ next_view.focus
+
+ # focus the view whose index or name equals the pressed number
+ ${mod}-1: focus_view tags[0] || 1
+ ${mod}-2: focus_view tags[1] || 2
+ ${mod}-3: focus_view tags[2] || 3
+ ${mod}-4: focus_view tags[3] || 4
+ ${mod}-5: focus_view tags[4] || 5
+ ${mod}-6: focus_view tags[5] || 6
+ ${mod}-7: focus_view tags[6] || 7
+ ${mod}-8: focus_view tags[7] || 8
+ ${mod}-9: focus_view tags[8] || 9
+ ${mod}-0: focus_view tags[9] || 10
+
+ # focus the view whose name begins with the pressed alphabet
+ ${view},a: t = tags.grep(/^a/i).first and focus_view(t)
+ ${view},b: t = tags.grep(/^b/i).first and focus_view(t)
+ ${view},c: t = tags.grep(/^c/i).first and focus_view(t)
+ ${view},d: t = tags.grep(/^d/i).first and focus_view(t)
+ ${view},e: t = tags.grep(/^e/i).first and focus_view(t)
+ ${view},f: t = tags.grep(/^f/i).first and focus_view(t)
+ ${view},g: t = tags.grep(/^g/i).first and focus_view(t)
+ ${view},h: t = tags.grep(/^h/i).first and focus_view(t)
+ ${view},i: t = tags.grep(/^i/i).first and focus_view(t)
+ ${view},j: t = tags.grep(/^j/i).first and focus_view(t)
+ ${view},k: t = tags.grep(/^k/i).first and focus_view(t)
+ ${view},l: t = tags.grep(/^l/i).first and focus_view(t)
+ ${view},m: t = tags.grep(/^m/i).first and focus_view(t)
+ ${view},n: t = tags.grep(/^n/i).first and focus_view(t)
+ ${view},o: t = tags.grep(/^o/i).first and focus_view(t)
+ ${view},p: t = tags.grep(/^p/i).first and focus_view(t)
+ ${view},q: t = tags.grep(/^q/i).first and focus_view(t)
+ ${view},r: t = tags.grep(/^r/i).first and focus_view(t)
+ ${view},s: t = tags.grep(/^s/i).first and focus_view(t)
+ ${view},t: t = tags.grep(/^t/i).first and focus_view(t)
+ ${view},u: t = tags.grep(/^u/i).first and focus_view(t)
+ ${view},v: t = tags.grep(/^v/i).first and focus_view(t)
+ ${view},w: t = tags.grep(/^w/i).first and focus_view(t)
+ ${view},x: t = tags.grep(/^x/i).first and focus_view(t)
+ ${view},y: t = tags.grep(/^y/i).first and focus_view(t)
+ ${view},z: t = tags.grep(/^z/i).first and focus_view(t)
+
+ #---------------------------------------------------------------------------
+ # move
+ #---------------------------------------------------------------------------
+
+ ${move}-${up}: | # move grouping toward the top
+ grouping.each {|c| c.send(:up) rescue nil }
+
+ ${move}-${down}: | # move grouping toward the bottom
+ grouping.each {|c| c.send(:down) rescue nil }
+
+ ${move}-${left}: | # move grouping toward the left
+ grouping.each {|c| c.send(:left) rescue nil }
+
+ ${move}-${right}: | # move grouping toward the right
+ grouping.each {|c| c.send(:right) rescue nil }
+
+ ${move}-space: | # move grouping to floating area (toggle)
+ grouping.each {|c| c.send(:toggle) rescue nil }
+
+ ${move}-t: | # move grouping to chosen view
+ #
+ # Changes the tag (according to a menu choice) of
+ # each grouped client and returns the chosen tag.
+ #
+ # The +tag -tag idea is from Jonas Pfenniger:
+ #
+ # http://zimbatm.oree.ch/articles/2006/06/15/wmii-3-and-ruby
+ #
+ choices = tags.map {|t| [t, "+#{t}", "-#{t}"] }.flatten
+
+ if target = key_menu(choices, 'tag as:')
+ grouping.each {|c| c.tags = target }
+ end
+
+ # move grouping to the view whose index or name equals the pressed number
+ ${move}-1: grouping.each {|c| c.tags = tags[0] || 1 }
+ ${move}-2: grouping.each {|c| c.tags = tags[1] || 2 }
+ ${move}-3: grouping.each {|c| c.tags = tags[2] || 3 }
+ ${move}-4: grouping.each {|c| c.tags = tags[3] || 4 }
+ ${move}-5: grouping.each {|c| c.tags = tags[4] || 5 }
+ ${move}-6: grouping.each {|c| c.tags = tags[5] || 6 }
+ ${move}-7: grouping.each {|c| c.tags = tags[6] || 7 }
+ ${move}-8: grouping.each {|c| c.tags = tags[7] || 8 }
+ ${move}-9: grouping.each {|c| c.tags = tags[8] || 9 }
+ ${move}-0: grouping.each {|c| c.tags = tags[9] || 10 }
+
+ #---------------------------------------------------------------------------
+ # group
+ #---------------------------------------------------------------------------
+
+ ${group},g: | # toggle current client from grouping
+ curr_client.group!
+
+ ${group},c: | # add clients in current area to grouping
+ curr_area.group
+
+ ${group},Shift-c: | # remove clients in current area from grouping
+ curr_area.ungroup
+
+ ${group},f: | # add clients in floating area to grouping
+ Area.floating.group
+
+ ${group},Shift-f: | # remove clients in floating area from grouping
+ Area.floating.ungroup
+
+ ${group},m: | # add clients in managed areas to grouping
+ curr_view.managed_areas.each {|a| a.group }
+
+ ${group},Shift-m: | # remove clients in managed areas from grouping
+ curr_view.managed_areas.each {|a| a.ungroup }
+
+ ${group},v: | # add clients in current view to grouping
+ curr_view.group
+
+ ${group},Shift-v: | # remove clients in current view from grouping
+ curr_view.ungroup
+
+ ${group},i: | # invert the grouping in the current view
+ curr_view.group!
+
+ ${group},Shift-i: | # invert the grouping in all views
+ Rumai.group!
+
+ ${group},n: | # remove all clients everywhere from grouping
+ Rumai.ungroup
+
+ #---------------------------------------------------------------------------
+ # swap
+ #---------------------------------------------------------------------------
+
+ ${swap},${up}: | # swap with above client
+ curr_client.swap(:up) rescue nil
+
+ ${swap},${down}: | # swap with below client
+ curr_client.swap(:down) rescue nil
+
+ ${swap},${left}: | # swap with left client
+ curr_client.swap(:left) rescue nil
+
+ ${swap},${right}: | # swap with right client
+ curr_client.swap(:right) rescue nil
+
+ # swap current client with the column whose index equals the pressed number
+ ${swap},1: curr_client.swap 1
+ ${swap},2: curr_client.swap 2
+ ${swap},3: curr_client.swap 3
+ ${swap},4: curr_client.swap 4
+ ${swap},5: curr_client.swap 5
+ ${swap},6: curr_client.swap 6
+ ${swap},7: curr_client.swap 7
+ ${swap},8: curr_client.swap 8
+ ${swap},9: curr_client.swap 9
+ ${swap},0: curr_client.swap 10
+
+ #---------------------------------------------------------------------------
+ # client
+ #---------------------------------------------------------------------------
+
+ ${mod}-f: | # zoom client to fullscreen (toggle)
+ curr_client.fullscreen!
+
+ ${mod}-Shift-c: | # kill the current client
+ curr_client.kill
+
+ #---------------------------------------------------------------------------
+ # column
+ #---------------------------------------------------------------------------
+
+ ${mod}-d: | # apply equal-spacing layout to current column
+ curr_area.layout = 'default-max'
+
+ ${mod}-s: | # apply stacked layout to current column
+ curr_area.layout = 'stack-max'
+
+ ${mod}-m: | # apply maximized layout to current column
+ curr_area.layout = 'stack+max'
+
+ #---------------------------------------------------------------------------
+ # menu
+ #---------------------------------------------------------------------------
+
+ ${mod}-a: | # run internal action chosen from a menu
+ if choice = key_menu(actions, 'run action:')
+ action choice
+ end
+
+ ${mod}-p: | # run external program chosen from a menu
+ if choice = key_menu(@programs, 'run program:')
+ launch choice
+ end
+
+ ${mod}-t: | # focus view chosen from a menu
+ if choice = key_menu(tags, 'show view:')
+ focus_view choice
+ end
+
+ #---------------------------------------------------------------------------
+ # launcher
+ #---------------------------------------------------------------------------
+
+ ${mod}-Return: | # launch a terminal
+ #
+ # Launch a new terminal and set its
+ # working directory to be the same
+ # as the currently focused terminal.
+ #
+ work = ENV['HOME']
+
+ label = curr_client.label.read rescue ''
+
+ # iterate in reverse order because
+ # paths are usually at end of label
+ label.split(' ').reverse_each do |s|
+ path = File.expand_path(s)
+
+ if File.exist? path
+ unless File.directory? path
+ path = File.dirname(path)
+ end
+
+ work = path
+ break
+ end
+ end
+
+ require 'fileutils'
+ FileUtils.cd work do
+ launch CONFIG['program']['terminal']
+ end
+
+ ##
+ # Event handlers.
+ #
+ # <event name>: <Ruby code to execute>
+ #
+ # The Ruby code has access to an "argv" variable which
+ # is a list of arguments that were passed to the event.
+ #
+ event:
+ CreateTag: |
+ tag = argv[0]
+ but = fs.lbar[tag]
+ but.create unless but.exist?
+ but.write "#{CONFIG['display']['color']['normal']} #{tag}"
+
+ DestroyTag: |
+ tag = argv[0]
+ but = fs.lbar[tag]
+ but.remove if but.exist?
+
+ FocusTag: |
+ tag = argv[0]
+ but = fs.lbar[tag]
+ but.write "#{CONFIG['display']['color']['focus']} #{tag}" if but.exist?
+
+ UnfocusTag: |
+ tag = argv[0]
+ but = fs.lbar[tag]
+ but.write "#{CONFIG['display']['color']['normal']} #{tag}" if but.exist?
+
+ UrgentTag: |
+ tag = argv[1]
+ but = fs.lbar[tag]
+ but.write "#{CONFIG['display']['color']['notice']} #{tag}" if but.exist?
+
+ NotUrgentTag: |
+ tag = argv[1]
+ but = fs.lbar[tag]
+ color = curr_view.id == tag ? 'focus' : 'normal'
+ but.write "#{CONFIG['display']['color'][color]} #{tag}" if but.exist?
+
+ LeftBarClick: &LeftBarClick |
+ mouse_button, view_id = argv
+
+ if mouse_button == '1' # primary button
+ focus_view view_id
+ end
+
+ ##
+ # allows the user to drag a file over a
+ # view button and activate that view while
+ # still holding on to their dragged file!
+ #
+ LeftBarDND: *LeftBarClick
+
+ RightBarClick: |
+ status_click *argv.reverse
+
+ ClientMouseDown: |
+ client_id, mouse_button = argv
+
+ if mouse_button == '3' # secondary button
+ client = Client.new(client_id)
+
+ case click_menu %w[stick group fullscreen kill slay], 'client'
+ when 'stick' then client.stick!
+ when 'group' then client.group!
+ when 'fullscreen' then client.fullscreen!
+ when 'kill' then client.kill
+ when 'slay' then client.slay
+ end
+ end
+
+ ##
+ # Internal scripts.
+ #
+ # <action name>: <Ruby code to execute>
+ #
+ action:
+
+
+##
+# Arbitrary logic.
+#
+# script:
+# before: <Ruby code to execute before processing this file>
+# after: <Ruby code to execute after processing this file>
+#
+script:
+ before:
+ after: