Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # Author:: Christoph Kappel <unexist@dorfelite.net>
- # Version:: $Id: contrib/subtle.rb,v 2264 2010/11/08 23:03:50 unexist $
- # License:: GNU GPL
- #
- # = Subtle example configuration
- #
- # This file will be installed as default and can also be used as a starter for
- # an own custom configuration file. The system wide config usually resides in
- # +/etc/xdg/subtle+ and the user config in +HOME/.config/subtle+, both locations
- # are dependent on the locations specified by +XDG_CONFIG_DIRS+ and
- # +XDG_CONFIG_HOME+.
- #
- # == Options {{{
- #
- # Following options change behaviour and sizes of the window manager:
- #
- # Border size in pixel of the windows
- set :border, 1
- # Window move/resize steps in pixel per keypress
- set :step, 5
- # Window screen border snapping
- set :snap, 10
- # Default starting gravity for windows (0 = gravity of last client)
- set :gravity, :center
- # Make transient windows urgent
- set :urgent, false
- # Enable respecting of size hints globally
- set :resize, false
- # Screen size padding (left, right, top, bottom)
- set :padding, [ 0, 0, 1, 0 ]
- # Font string either take from e.g. xfontsel or use xft
- set :font, "-*-clean-medium-*-*-*-12-*-*-*-*-*-*-*"
- #set :font, "xft:sans-8"
- # Space around windows
- set :gap, 0
- # Separator between sublets
- set :separator, " "
- # Outline border size in pixel of panel items
- set :outline, 0
- # == Options }}}
- # == Screen {{{
- #
- # Generally subtle comes with two panels per screen, one on the top and one at
- # the bottom. Each panel can be configured with different panel items and sublets
- # screen wise. Per default only the top panel on the first screen is used, it's
- # up to the user to enable the bottom panel or disable either one or both.
- #
- # Empty panels are hidden.
- #
- # Following items are available:
- #
- # [*:views*] List of views with buttons
- # [*:title*] Title of the current active window
- # [*:tray*] Systray icons (Can be used once)
- # [*:sublets*] Catch-all for installed sublets
- # [*:sublet*] Name of a sublet for direct placement
- # [*:spacer*] Variable spacer (free width / count of spacers)
- # [*:center*] Enclose items with :center to center them on the panel
- # [*:separator*] Insert separator
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Panel
- #
- screen 1 do
- # Add stipple to panels
- stipple false
- # Content of the top panel
- top [ :clock, :wifi, :spacer, :battery, :temp, :mpd ]
- # Content of the bottom panel
- bottom [ :views, :task,
- :spacer, :separator,
- :gmail, :separator,
- :battery, :separator,
- :spacer, :temp,
- :volume, :tray
- ]
- end
- # == Screen }}}
- # == Colors {{{
- #
- # Colors directly define the look of subtle, valid values are:
- #
- # [*hexadecimal*] #0000ff
- # [*decimal*] (0, 0, 255)
- # [*names*] blue
- #
- # Whenever there is no valid value for a color set - subtle will use a default
- # one. There is only one exception to this: If no background color is given no
- # color will be set. This will ensure a custom background pixmap won't be
- # overwritten.
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Themes
- #
- # Colors {{{
- color :title_fg, "#ffffff"
- color :title_bg, "#1a1a1a"
- color :title_border, "#1a1a1a"
- color :focus_fg, "#ffffff"
- color :focus_bg, "#595959"
- color :focus_border, "#1a1a1a"
- color :urgent_fg, "#850000"
- #color :urgent_bg, "#404040"
- #color :urgent_border, "#1a1a1a"
- color :occupied_fg, "#777777"
- color :occupied_bg, "#404040"
- color :occupied_border, "#1a1a1a"
- color :views_fg, "#a8a8a8"
- color :views_bg, "#1a1a1a"
- color :views_border, "#1a1a1a"
- color :sublets_fg, "#595959"
- color :sublets_bg, "#1a1a1a"
- color :sublets_border, "#1a1a1a"
- color :client_active, "#595959"
- color :client_inactive, "#404040"
- color :panel, "#1a1a1a"
- #color :background, "#404040"
- color :stipple, "#595959"
- color :separator, "#850000"
- # }}}
- # == Gravities {{{
- #
- # Gravities are predefined sizes a window can be set to. There are several ways
- # to set a certain gravity, most convenient is to define a gravity via a tag or
- # change them during runtime via grab. Subtler and subtlext can also modify
- # gravities.
- #
- # A gravity consists of four values which are a percentage value of the screen
- # size. The first two values are x and y starting at the center of the screen
- # and he last two values are the width and height.
- #
- # === Example
- #
- # Following defines a gravity for a window with 100% width and height:
- #
- # gravity :example, [ 0, 0, 100, 100 ]
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Gravity
- #
- # Top left
- gravity :top_left, [ 0, 0, 59, 50 ]
- gravity :top_left66, [ 0, 0, 59, 66 ]
- gravity :top_left33, [ 0, 0, 59, 34 ]
- # Top
- gravity :top, [ 0, 0, 100, 50 ]
- gravity :top66, [ 0, 0, 100, 66 ]
- gravity :top33, [ 0, 0, 100, 34 ]
- # Top right
- gravity :top_right, [ 100, 0, 41, 50 ]
- gravity :top_right66, [ 100, 0, 41, 66 ]
- gravity :top_right33, [ 100, 0, 41, 34 ]
- # Left
- gravity :left, [ 0, 0, 59, 100 ]
- gravity :left66, [ 0, 50, 59, 34 ]
- gravity :left33, [ 0, 50, 30, 34 ]
- # Center
- gravity :center, [ 0, 0, 100, 100 ]
- gravity :center66, [ 0, 50, 100, 34 ]
- gravity :center33, [ 50, 50, 50, 34 ]
- # Right
- gravity :right, [ 100, 0, 41, 100 ]
- gravity :right66, [ 100, 50, 41, 34 ]
- gravity :right33, [ 100, 50, 20, 34 ]
- # Bottom left
- gravity :bottom_left, [ 0, 100, 59, 50 ]
- gravity :bottom_left66, [ 0, 100, 59, 66 ]
- gravity :bottom_left33, [ 0, 100, 59, 34 ]
- # Bottom
- gravity :bottom, [ 0, 100, 100, 50 ]
- gravity :bottom66, [ 0, 100, 100, 66 ]
- gravity :bottom33, [ 0, 100, 100, 34 ]
- # Bottom right
- gravity :bottom_right, [ 100, 100, 41, 50 ]
- gravity :bottom_right66, [ 100, 100, 41, 66 ]
- gravity :bottom_right33, [ 100, 100, 41, 34 ]
- # Gimp
- gravity :gimp_image, [ 50, 50, 80, 100 ]
- gravity :gimp_toolbox, [ 0, 0, 10, 100 ]
- gravity :gimp_dock, [ 100, 0, 10, 100 ]
- # == Gravities }}}
- # == Grabs {{{
- #
- # Grabs are keyboard and mouse actions within subtle, every grab can be
- # assigned either to a key and/or to a mouse button combination. A grab
- # consists of a chain and an action.
- #
- # === Finding keys
- #
- # The best resource for getting the correct key names is
- # */usr/include/X11/keysymdef.h*, but to make life easier here are some hints
- # about it:
- #
- # * Numbers and letters keep their names, so *a* is *a* and *0* is *0*
- # * Keypad keys need *KP_* as prefix, so *KP_1* is *1* on the keypad
- # * Strip the *XK_* from the key names if looked up in
- # /usr/include/X11/keysymdef.h
- # * Keys usually have meaningful english names
- # * Modifier keys have special meaning (Alt (A), Control (C), Meta (M),
- # Shift (S), Super (W))
- #
- # === Chaining
- #
- # Chains are a combination of keys and modifiers to one key and can be used in
- # various ways to trigger an action. In subtle there are two ways to define
- # chains for grabs:
- #
- # 1. Default way*: Add modifiers to a key and use it for a grab
- #
- # *Example*: grab "W-Return", "urxvt"
- #
- # 2. *Escape way*: Define an escape grab that needs to be pressed before
- # *any* other grab can be used like in screen/tmux.
- #
- # *Example*: grab "C-y", :SubtleEscape
- # grab "Return", "urxvt"
- #
- # ==== Mouse buttons
- #
- # [*B1*] = Button1 (Left mouse button)
- # [*B2*] = Button2 (Middle mouse button)
- # [*B3*] = Button3 (Right mouse button)
- # [*B4*] = Button4 (Mouse wheel up)
- # [*B5*] = Button5 (Mouse wheel down)
- #
- # ==== Modifiers
- #
- # [*A*] = Alt key
- # [*C*] = Control key
- # [*M*] = Meta key
- # [*S*] = Shift key
- # [*W*] = Super (Windows) key
- #
- # === Action
- #
- # An action is something that happens when a grab is activated, this can be one
- # of the following:
- #
- # [*symbol*] Run a subtle action
- # [*string*] Start a certain program
- # [*array*] Cycle through gravities
- # [*lambda*] Run a Ruby proc
- #
- # === Example
- #
- # This will create a grab that starts a urxvt when Alt+Enter are pressed:
- #
- # grab "A-Return", "urxvt"
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Grabs
- #
- # Escape grab
- # grab "C-y", :SubtleEscape
- # Jump to view1, view2, ...
- grab "W-S-1", :ViewJump1
- grab "W-S-2", :ViewJump2
- grab "W-S-3", :ViewJump3
- grab "W-S-4", :ViewJump4
- # Switch current view
- grab "W-1", :ViewSwitch1
- grab "W-2", :ViewSwitch2
- grab "W-3", :ViewSwitch3
- grab "W-4", :ViewSwitch4
- # Select next and prev view */
- grab "KP_Add", :ViewNext
- grab "KP_Subtract", :ViewPrev
- # Move mouse to screen1, screen2, ...
- grab "W-A-1", :ScreenJump1
- grab "W-A-2", :ScreenJump2
- grab "W-A-3", :ScreenJump3
- grab "W-A-4", :ScreenJump4
- # Force reload of config and sublets
- grab "W-C-r", :SubtleReload
- # Force restart of subtle
- grab "W-C-S-r", :SubtleRestart
- # Quit subtle
- grab "W-S-q", :SubtleQuit
- # Move current window
- grab "W-B1", :WindowMove
- # Resize current window
- grab "W-B3", :WindowResize
- # Toggle floating mode of window
- grab "W-f", :WindowFloat
- # Toggle fullscreen mode of window
- grab "W-space", :WindowFull
- # Toggle sticky mode of window (will be visible on all views)
- grab "W-v", :WindowStick
- # Raise window
- grab "W-r", :WindowRaise
- # Lower window
- grab "W-l", :WindowLower
- # Select next windows
- grab "W-Left", :WindowLeft
- grab "W-Down", :WindowDown
- grab "W-Up", :WindowUp
- grab "W-Right", :WindowRight
- grab "A-S-Tab", :WindowLeft
- grab "A-Tab", :WindowRight
- grab "W-S-Tab", :WindowUp
- grab "W-Tab", :WindowDown
- # Kill current window
- grab "A-F4", :WindowKill
- # Cycle between given gravities
- grab "W-KP_7", [ :top_left, :top_left66, :top_left33 ]
- grab "W-KP_8", [ :top, :top66, :top33 ]
- grab "W-KP_9", [ :top_right, :top_right66, :top_right33 ]
- grab "W-KP_4", [ :left, :left66, :left33 ]
- grab "W-KP_5", [ :center, :center66, :center33 ]
- grab "W-KP_6", [ :right, :right66, :right33 ]
- grab "W-KP_1", [ :bottom_left, :bottom_left66, :bottom_left33 ]
- grab "W-KP_2", [ :bottom, :bottom66, :bottom33 ]
- grab "W-KP_3", [ :bottom_right, :bottom_right66, :bottom_right33 ]
- grab "W-q", [ :top_left, :top_left66, :top_left33 ]
- grab "W-w", [ :top, :top66, :top33 ]
- grab "W-e", [ :top_right, :top_right66, :top_right33 ]
- grab "W-a", [ :left, :left66, :left33 ]
- grab "W-s", [ :center, :center66, :center33 ]
- grab "W-d", [ :right, :right66, :right33 ]
- grab "W-z", [ :bottom_left, :bottom_left66, :bottom_left33 ]
- grab "W-x", [ :bottom, :bottom66, :bottom33 ]
- grab "W-c", [ :bottom_right, :bottom_right66, :bottom_right33 ]
- # Exec programs
- grab "A-F2", 'dmenu_run -nb "#908884" -nf "#000" -sb "#22211f" -sf "#908884" -p "Launch:" -i'
- grab "W-Return", "urxvtc"
- # Run Ruby lambdas
- grab "S-F2" do |c|
- puts c.name
- end
- grab "S-F3" do
- puts Subtlext::VERSION
- end
- # == Grabs }}}
- # == Tags {{{
- #
- # Tags are generally used in subtle for placement of windows. This placement is
- # strict, that means that - aside from other tiling window managers - windows
- # must have a matching tag to be on a certain view. This also includes that
- # windows that are started on a certain view will not automatically be placed
- # there.
- #
- # There are to ways to define a tag:
- #
- # [*string*] With a WM_CLASS/WM_NAME
- # [*hash*] With a hash of properties
- #
- # === Default
- #
- # Whenever a window has no tag it will get the default tag and be placed on the
- # default view. The default view can either be set by the user with adding the
- # default tag to a view by choice or otherwise the first defined view will be
- # chosen automatically.
- #
- # === Properties
- #
- # Additionally tags can do a lot more then just control the placement - they
- # also have properties than can define and control some aspects of a window
- # like the default gravity or the default screen per view.
- #
- # [*float*] This property either sets the tagged client floating or prevents
- # it from being floating depending on the value.
- #
- # Example: float true
- #
- # [*full*] This property either sets the tagged client to fullscreen or
- # prevents it from being set to fullscreen depending on the value.
- #
- # Example: full true
- #
- # [*gravity*] This property sets a certain to gravity to the tagged client,
- # but only on views that have this tag too.
- #
- # Example: gravity :center
- #
- # [*match*] This property adds matching patterns to a tag, a tag can have
- # more than one. Matching works either via plaintext, regex
- # (see man regex(7)) or window id. Per default tags will only
- # match the WM_NAME and the WM_CLASS portion of a client, this
- # can be changed with following possible values:
- #
- # [*:name*] Match the WM_NAME
- # [*:instance*] Match the first (instance) part from WM_CLASS
- # [*:class*] Match the second (class) part from WM_CLASS
- # [*:role*] Match the window role
- #
- # Example: match :instance => "urxvt"
- # match [:role, :class] => "test"
- # match "[xa]+term"
- #
- # [*exclude*] This property works exactly the same way as *match*, but it
- # excludes clients that match from this tag. That can be helpful
- # with catch-all tags e.g. for console apps.
- #
- # Example: exclude :instance => "irssi"
- #
- # [*resize*] This property either enables or disables honoring of client
- # resize hints and is independent of the global option.
- #
- # Example: resize true
- #
- # [*size*] This property sets a certain to size as well as floating to the
- # tagged client, but only on views that have this tag too. It
- # expects an array with x, y, width and height values.
- #
- # Example: size [100, 100, 50, 50]
- #
- # [*stick*] This property either sets the tagged client to stick or prevents
- # it from being set to stick depending on the value. Stick clients
- # are visible on every view.
- #
- # Example: stick true
- #
- # [*type*] This property sets the [[Tagging|tagged]] client to be treated
- # as a specific window type though as the window sets the type
- # itself. Following types are possible:
- #
- # [*:desktop*] Treat as desktop window (_NET_WM_WINDOW_TYPE_DESKTOP)
- # [*:dock*] Treat as dock window (_NET_WM_WINDOW_TYPE_DOCK)
- # [*:toolbar*] Treat as toolbar windows (_NET_WM_WINDOW_TYPE_TOOLBAR)
- # [*:splash*] Treat as splash window (_NET_WM_WINDOW_TYPE_SPLASH)
- # [*:dialog*] Treat as dialog window (_NET_WM_WINDOW_TYPE_DIALOG)
- #
- # Example: type :desktop
- #
- # [*urgent*] This property either sets the tagged client to be urgent or
- # prevents it from being urgent depending on the value. Urgent
- # clients will get keyboard and mouse focus automatically.
- #
- # Example: urgent true
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Tagging
- #
- # Simple tags
- tag "terms", "xterm|[u]?rxvt[c]?"
- tag "browser", "chromium|firefox|navigator"
- tag "office"
- # Placement
- tag "office" do
- match "[g]?vim"
- resize true
- end
- tag "office" do
- match "VirtualBox"
- float true
- resize true
- end
- tag "fixed" do
- geometry [ 10, 10, 100, 100 ]
- stick true
- end
- tag "resize" do
- match "sakura|gvim"
- resize true
- end
- tag "gravity" do
- gravity :center
- end
- # Modes
- tag "stick" do
- match "mplayer"
- float true
- # stick true
- end
- tag "float" do
- match "display"
- float true
- end
- # Gimp
- tag "gimp_image" do
- match :role => "gimp-image-window"
- gravity :gimp_image
- end
- tag "gimp_toolbox" do
- match :role => "gimp-toolbox$"
- gravity :gimp_toolbox
- end
- tag "gimp_dock" do
- match :role => "gimp-dock"
- gravity :gimp_dock
- end
- # == Tags }}}
- # == Views {{{
- #
- # Views are the virtual desktops in subtle, they show all windows that share a
- # tag with them. Windows that have no tag will be visible on the default view
- # which is the view with the default tag or the first defined view when this
- # tag isn't set.
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Tagging
- #
- view " sys ", "terms|default"
- view " web ", "browser"
- view " fun ", "gimp_.*"
- view " stuff ", "office"
- # == Views }}}
- # == Sublets {{{
- #
- # Sublets are Ruby scripts that provide data for the panel and can be managed
- # with the sur script that comes with subtle.
- #
- # Follwing properties can be changed directly:
- #
- # [*interval*] Update interval of the sublet
- # [*foreground*] Default foreground color
- # [*background*] Default background color
- #
- # === Example
- #
- # sublet :clock do
- # interval 30
- # foreground "#eeeeee"
- # background "#000000"
- # format_string "%H:%M:%S"
- # end
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Sublets#Configuration
- #
- sublet :clock do
- interval 60
- format_date "%a %m/%d"
- format_time "@ %I:%M %p"
- end
- sublet :gmail do
- user "nedam.nedam@gmail.co"
- password "986320035"
- foreground "#555753"
- urgent "#ffc400"
- normal "#eeeeee"
- end
- sublet :wifi do
- foreground "#ffc123"
- end
- sublet :battery do
- foreground "#f57900"
- end
- sublet :mpd do
- foreground "#46a4ff"
- format_string "%note% %artist% - %album% - %title%"
- end
- # == Sublets }}}
- # == Hooks {{{
- #
- # And finally hooks are a way to bind Ruby scripts to a certain event.
- #
- # Following hooks exist so far:
- #
- # [*:client_create*] Called whenever a window is created
- # [*:client_configure*] Called whenever a window is configured
- # [*:client_focus*] Called whenever a window gets focus
- # [*:client_kill*] Called whenever a window is killed
- #
- # [*:tag_create*] Called whenever a tag is created
- # [*:tag_kill*] Called whenever a tag is killed
- #
- # [*:view_create*] Called whenever a view is created
- # [*:view_configure*] Called whenever a view is configured
- # [*:view_jump*] Called whenever the view is switched
- # [*:view_kill*] Called whenever a view is killed
- #
- # [*:tile*] Called on whenever tiling would be needed
- # [*:reload*] Called on reload
- # [*:start*] Called on start
- # [*:exit*] Called on exit
- #
- # === Example
- #
- # This hook will print the name of the window that gets the focus:
- #
- # on :client_focus do |c|
- # puts c.name
- # end
- #
- # === Link
- #
- # http://subforge.org/wiki/subtle/Hooks
- # == Hooks }}}
- # == Snippets {{{
- #
- ### # Current-view
- ### on :start do
- ### # Create missing tags
- ### views = Subtlext::View.all.map {|v| v.name }
- ### tags = Subtlext::Tag.all.map {|t| t.name }
- ###
- ### views.each do |v|
- ### unless(tags.include?(v))
- ### t = Subtlext::Tag.new(v)
- ### t.save
- ### end
- ### end
- ### end
- ###
- ### # Assign tags to clients
- ### on :client_create do |c|
- ### view = Subtlext::View.current
- ### tags = c.tags.map {|t| t.name }
- ###
- ### # Add tag to view
- ### view.tag(view.name) unless(view.tags.include?(view.name))
- ###
- ### # Exclusive for clients with default tag only
- ### if(tags.include?("default") and 1 == tags.size)
- ### c.tags = [ view.name ]
- ### end
- ### end
- #on :start do
- # Subtlext::Subtle.spawn "nitrogen --restore"
- # Subtlext::Subtle.spawn "xsetroot -cursor_name left_ptr"
- #end
- #begin
- # require "#{ENV["HOME"]}/bin/launcher/launcher.rb"
- # # Set fonts
- # Subtle::Contrib::Launcher.fonts = [
- # "xft:Envy Code R:pixelsize=80:antialias=true",
- # "xft:Envy Code R:pixelsize=12:antialias=true"
- # ]
- #rescue LoadError => err
- # p err
- #end
- #grab "W-grave" do
- # Subtle::Contrib::Launcher.run
- #end
- # == Snippets }}}
- # vim:ts=2:bs=2:sw=2:et:fdm=marker
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement