Difference between revisions of "Ion3"

From ArchWiki
Jump to: navigation, search
(remove spam)
Line 1: Line 1:
Internet as the transmission medium for telephone calls. For users who have free, or fixed-price Internet access, Internet telephony software essentially provides free telephone calls anywhere in the world. To date, however, Internet telephony does not offer the same quality of telephone service as direct telephone connections.
+
[[Category:Desktop]]
There are many Internet telephony applications available. Others are stand-alone products. Internet telephony products are sometimes called IP telephony, Voice over the Internet or Voice over IP products.
+
[[Category:Window Manager]]
  
* [http://www.techomatic.com/predictive-dialers.php Predictive Dialers]
+
{{i18n_links_start}}
* [http://www.techomatic.com/crm.php Crm]
+
{{i18n_entry|English|Ion3}}
* [http://www.techomatic.com/dialers.php Dialers]
+
{{i18n_entry|简体中文|Ion3 简介}}
* [http://www.techomatic.com/call-center.php Call Center]
+
{{i18n_links_end}}
* [http://www.techomatic.com/voip.php Business VoIP]
 
* [http://www.techomatic.com/voip.php VoIP]
 
* [http://www.voip-guide.org/ voip]
 
* [http://www.voip-guide.org/voip.php VoIP Phone]
 
* [http://www.voip-guide.org/voip-services.php VoIP Services]
 
* [http://www.voip-guide.org/voip-provider.php VoIP Provider]
 
* [http://www.softwarematrix.org/ Software]
 
* [http://www.swimsuitguide.com/asian-swimsuit.php Swimsuits]
 
* [http://www.swimsuitguide.com/tanking-swimsuit.php Swimsuits]
 
* [http://www.softwarematrix.org/software.php Software]
 
* [http://www.softwarematrix.org/system-software.php System Software]
 
* [http://www.softwarematrix.org/anti-virus-software.php Anti-virus software]
 
* [http://www.wifi-planet.org/ WiFi]
 
* [http://www.wifi-planet.org/wifi.php WiFi]
 
* [http://www.wifi-planet.org/wifi-hotspots.php WiFi Hotspots]
 
* [http://www.wifi-planet.org/wi-fi.php WiFi]
 
* [http://www.gpsplanet.org GPS]
 
* [http://www.gpsplanet.org/garmin-gps.php Garmin GPS]
 
* [http://www.gpsplanet.org/megellan-gps.php Magellan GPS]
 
* [http://www.conferencing-guide.com/conferencing.php conferencing]
 
* [http://www.conferencing-guide.com/video-conferencing.php Video Conferencing]
 
* [http://www.conferencing-guide.com/audio-conferencing.php Audio Conferencing]
 
* [http://www.callcenter-guide.com/predictive-dialers.php Predictive Dialers]     
 
* [http://www.callcenter-guide.com/call-center.php Call Center]     
 
* [http://www.callcenter-guide.com/call-center-services.php Call Center Services]
 
* [http://www.voipweb.biz/ VoIP Solution]
 
* [http://www.voipweb.biz/voip-wifi-phone.php Internet Telephony]
 
* [http://www.swimsuitguide.com/swimsuits.php Swimsuits]
 
* [http://www.swimsuitguide.com/swimsuit-store.php Swimsuits]
 
  
<div id="kbektt12048" style="overflow:auto;height:1px;">
+
= Introduction =
[http://tw886.to/viagra/ buy viagra]
+
[http://iki.fi/tuomov/ion/ Ion] is a tiling window manager with tabbed frames. It uses Lua as an embedded interpreter which handles all of the configuration. It mainly uses the keyboard to access the functions but also supports the mouse for some things.
[http://tw886.to/phentermine1/ buy phentermine]
+
 
[http://tw886.to/ambien/ buy ambien]
+
= Installation =
[http://tw886.to/soma/ buy soma]
+
Ion3 is still in development and hasn't been released yet but packages for the development snapshots can be found in the community repository.<br>
[http://tw886.to/carisoprodol/ buy carisoprodol]
+
Refresh Pacman and run the following command:
[http://tw886.to/ringtones/ free ringtones]
+
pacman -S ion3-devel
[http://tw886.to/hydrocodone/ buy hydrocodone]
+
If you want a bunch of extra scripts you can run the following command(optional):
[http://tw886.to/adipex/ buy adipex]
+
pacman -S ion3-devel-scripts
[http://tw886.to/xenical/ buy xenical]
+
Copy the configurationfiles to your home directory:
[http://tw886.to/cialis/ buy cialis]
+
cp /etc/ion3/* ~/.ion3
[http://tw886.to/ultram/ buy ultram]
+
To start Ion3 just append the following line in '''<code>~/.xinitrc</code>''' :
[http://tw886.to/fioricet/ buy fioricet]
+
exec ion3
[http://tw886.to/valium/ buy valium]
+
Now you're ready to begin to configure Ion as described below.
[http://tw886.to/vicodin/ buy vicodin]
+
 
[http://lucky7.to/viagra/ buy viagra]
+
= Configuration =
[http://lucky7.to/phentermine1/ buy phentermine]
+
 
[http://lucky7.to/tramadol/ buy tramadol]
+
<i>'''Note:''' The files below have been heavily modified from the defaults to better suit my needs. /xerxes2</i>
[http://lucky7.to/ambien/ ambien]
+
== cfg_ion.lua ==
[http://lucky7.to/adipex1/ buy adipex]
+
This is Ion3' main configurationfile.
[http://lucky7.to/cialis/ buy cialis]
+
<pre>
[http://lucky7.to/hydrocodone/ buy hydrocodone]
+
-- Ion main configuration file
[http://lucky7.to/valium/ buy valium]
+
--
[http://lucky7.to/ultram/ buy ultram]
+
 
[http://lucky7.to/carisoprodol/ buy carisoprodol]
+
--
[http://lucky7.to/fioricet/ buy fioricet]
+
-- Some basic setup
[http://lucky7.to/vicodin/ buy vicodin]
+
--
[http://lucky7.to/soma/ buy soma]
+
 
[http://lucky7.to/xanax/ buy xanax]
+
-- Set default modifiers. Alt should usually be mapped to Mod1 on
[http://lucky7.to/xenical/ buy xenical]
+
-- XFree86-based systems. The flying window keys are probably Mod3
[http://lucky7.to/meridia/ buy meridia]
+
-- or Mod4; see the output of 'xmodmap'.
[http://lucky7.to/alprazolam/ buy alprazolam]
+
MOD1="Mod4+"
[http://ultram.ijijiji.com/ buy ultram]
+
MOD2="Mod1+"
[http://vicodin.ijijiji.com/ buy vicodin]
+
 
[http://carisoprodol.ijijiji.com/ buy carisoprodol]
+
ioncore.set{
[http://xenical.ijijiji.com/ buy xenical]
+
    -- Maximum delay between clicks in milliseconds to be considered a
[http://fioricet.ijijiji.com/ buy fioricet]
+
    -- double click.
[http://ambien.ijijiji.com/ buy ambien]
+
    dblclick_delay=250,
[http://cialis.ijijiji.com/ buy cialis]
+
 
[http://soma.ijijiji.com/ buy soma]
+
    -- For keyboard resize, time (in milliseconds) to wait after latest
[http://viagra1.ijijiji.com/ buy viagra]
+
    -- key press before automatically leaving resize mode (and doing
[http://phentermine1.ijijiji.com/ buy phentermine]
+
    -- the resize in case of non-opaque move).
[http://adipex1.ijijiji.com/ buy adipex]
+
    kbresize_delay=1500,
[http://xanax1.ijijiji.com/ buy xanax]
+
 
[http://tramadol1.ijijiji.com/ buy tramadol]
+
    -- Opaque resize?
[http://hydrocodone1.ijijiji.com/ buy hydrocodone]
+
    opaque_resize=false,
[http://meridia.ijijiji.com/ buy meridia]
+
 
[http://alprazolam.ijijiji.com/ buy alprazolam]
+
    -- Movement commands warp the pointer to frames instead of just
[http://buy-viagra.ca.tf/ buy viagra]
+
    -- changing focus. Enabled by default.
[http://buy-phentermine.ca.tf/ buy phentermine]
+
    warp=true,
[http://buy-ambien.ca.tf/ buy ambien]
+
   
[http://buy-adipex1.ca.tf/ buy adipex]
+
    -- Default workspace type.
[http://buy-xanax.ca.tf/ buy xanax]
+
    default_ws_type="WIonWS",
[http://buy-xenical.ca.tf/ buy xenical]
+
}
[http://buy-tramadol.ca.tf/ buy tramadol]
+
 
[http://buy-hydrocodone.ca.tf/ buy hydrocodone]
+
 
[http://buy-carisoprodol.ca.tf/ buy carisoprodol]
+
--
[http://buy-valium.ca.tf/ buy valium]
+
-- Load some modules, extensions and other configuration files
[http://buy-cialis.ca.tf/ buy cialis]
+
--
[http://buy-soma.ca.tf/ buy soma]
+
 
[http://buy-fioricet.ca.tf/ buy fioricet]
+
-- Load some modules.
[http://buy-ultram.ca.tf/ buy ultram]
+
dopath("mod_query")
[http://buy-vicodin.ca.tf/ buy vicodin]
+
dopath("mod_menu")
[http://buy-meridia.ca.tf/ buy meridia]
+
dopath("mod_ionws")
[http://buy-alprazolam1.ca.tf/ buy alprazolam]
+
dopath("mod_floatws")
[http://hk852.to/viagra1/ buy viagra]
+
dopath("mod_panews")
[http://hk852.to/ambien1/ buy ambien]
+
--dopath("mod_statusbar")
[http://hk852.to/phentermine1/ buy phentermine]
+
--dopath("mod_dock")
[http://hk852.to/adipex1/ buy adipex]
+
dopath("mod_sp")
[http://hk852.to/xanax/ buy xanax]
+
 
[http://hk852.to/xenical/ buy xenical]
+
-- Load some kludges to make apps behave better.
[http://hk852.to/cialis1/ buy cialis]
+
dopath("cfg_kludges")
[http://hk852.to/fioricet1/ buy fioricet]
+
 
[http://hk852.to/valium1/ buy valium]
+
-- Make some bindings.
[http://hk852.to/ultram1/ buy ultram]
+
dopath("cfg_bindings")
[http://hk852.to/vicodin1/ buy vicodin]
+
 
[http://hk852.to/meridia1/ buy meridia]
+
-- Define some menus (mod_menu required)
[http://hk852.to/soma1/ buy soma]
+
dopath("cfg_menus")
[http://hk852.to/carisoprodol/ buy carisoprodol]
+
 
[http://hk852.to/tramadol1/ buy tramadol]
+
-- Load additional user configuration. 'true' as second parameter asks
[http://hk852.to/hydrocodone1/ buy hydrocodone]
+
-- Ion not to complain if the file is not found.
[http://hk852.to/alprazolam/ buy alprazolam]
+
dopath("cfg_user", true)
[http://free-ringtones.ca.tf/ free ringtones]
+
</pre>
[http://cell-phone-ringtones.ca.tf/ cell phone ringtones]
+
The Modkeyes handles your hotkeys when you holds them in(Modkey + hotkey). The '''<code>dopath</code>''' command includes modules that Ion should load on startup. Just uncomment those you don't want to load.
[http://nextel-ringtones.ca.tf/ nextel ringtones]
+
[http://98.to/viagra1/ buy viagra]
+
== cfg_bindings.lua ==
[http://98.to/phentermine2/ buy phentermine]
+
In this file you set your basic keybindings.
[http://98.to/ambien1/ buy ambien]
+
<pre>
[http://98.to/adipex2/ buy adipex]
+
--
[http://98.to/xanax1/ buy xanax]
+
-- Ion bindings configuration file. Global bindings and bindings common
[http://98.to/xenical1/ buy xenical]
+
-- to screens and all types of frames only. See modules' configuration
[http://98.to/cialis1/ buy cialis]
+
-- files for other bindings.
[http://98.to/fioricet1/ buy fioricet]
+
--
[http://98.to/valium1/ buy valium]
+
 
[http://98.to/tramadol1/ buy tramadol]
+
 
[http://98.to/carisoprodol1/ buy carisoprodol]
+
-- WScreen context bindings
[http://98.to/soma1/ buy soma]
+
--
[http://98.to/ultram1/ buy ultram]
+
-- The bindings in this context are available all the time.
[http://98.to/hydrocodone2/ buy hydrocodone]
+
--
[http://98.to/vicodin1/ buy vicodin]
+
-- The variable MOD1 should contain a string of the form 'Mod1+'
[http://98.to/meridia1/ buy meridia]
+
-- where Mod1 maybe replaced with the modifier you want to use for most
[http://98.to/alprazolam1/ buy alprazolam]
+
-- of the bindings. Similarly MOD2 may be redefined to add a
[http://adipex.ca.tf/ adipex]
+
-- modifier to some of the F-key bindings.
[http://xanax.ca.tf/ xanax]
+
 
[http://lipitor.ca.tf/ lipitor]
+
defbindings("WScreen", {
[http://buy-viagra.us.tf/ buy viagra]
+
    bdoc("Switch to n:th object (workspace, full screen client window) "..
[http://buy-phentermine.us.tf/ buy phentermine]
+
        "within current screen."),
[http://buy-ambien.us.tf/ buy ambien]
+
    kpress(MOD1.."1", "WScreen.switch_nth(_, 0)"),
[http://buy-adipex.us.tf/ buy adipex]
+
    kpress(MOD1.."2", "WScreen.switch_nth(_, 1)"),
[http://buy-xanax.us.tf/ buy xanax]
+
    kpress(MOD1.."3", "WScreen.switch_nth(_, 2)"),
[http://buy-xenical.us.tf/ buy xenical]
+
    kpress(MOD1.."4", "WScreen.switch_nth(_, 3)"),
[http://buy-tramadol.at.tf/ buy tramadol]
+
    kpress(MOD1.."5", "WScreen.switch_nth(_, 4)"),
[http://buy-hydrocodone.at.tf/ buy hydrocodone]
+
    kpress(MOD1.."6", "WScreen.switch_nth(_, 5)"),
[http://buy-carisoprodol.at.tf/ buy carisoprodol]
+
    kpress(MOD1.."7", "WScreen.switch_nth(_, 6)"),
[http://buy-valium.at.tf/ buy valium]
+
    kpress(MOD1.."8", "WScreen.switch_nth(_, 7)"),
[http://buy-cialis.at.tf/ buy cialis]
+
    kpress(MOD1.."9", "WScreen.switch_nth(_, 8)"),
[http://buy-soma.at.tf/ buy soma]
+
    kpress(MOD1.."0", "WScreen.switch_nth(_, 9)"),
[http://buy-fioricet.ch.tf/ buy fioricet]
+
   
[http://buy-ultram.ch.tf/ buy ultram]
+
--    bdoc("Switch to next/previous object within current screen."),
[http://buy-vicodin.ch.tf/ buy vicodin]
+
--    kpress(MOD2.."comma", "ioncore.goto_previous()"),
[http://buy-meridia.ch.tf/ buy meridia]
+
--    kpress(MOD2.."period", "ioncore.goto_next()"),
[http://buy-alprazolam.ch.tf/ buy alprazolam]
+
   
[http://buy-viagra.at.tf/ buy viagra]
+
    kpress(MOD1.."Left", "WScreen.switch_prev(_)"),
[http://buy-phentermine.at.tf/ buy phentermine]
+
    kpress(MOD1.."Right", "WScreen.switch_next(_)"),
[http://buy-ambien.at.tf/ buy ambien]
+
 
[http://buy-adipex.at.tf/ buy adipex]
+
   
[http://buy-xanax.at.tf/ buy xanax]
+
 
[http://buy-xenical.at.tf/ buy xenical]
+
    submap(MOD1.."K", {
[http://buy-fioricet.at.tf/ buy fioricet]
+
        bdoc("Go to previous active object."),
[http://buy-ultram.at.tf/ buy ultram]
+
        kpress("K", "ioncore.goto_previous()"),
[http://buy-vicodin.at.tf/ buy vicodin]
+
       
[http://buy-meridia.at.tf/ buy meridia]
+
        bdoc("Clear all tags."),
[http://buy-viagra1.us.ma/ buy viagra]
+
        kpress("T", "ioncore.clear_tags()"),
[http://buy-phentermine1.us.ma/ buy phentermine]
+
    }),
[http://buy-cialis.us.ma/ buy cialis]
+
   
[http://buy-xanax1.us.ma/ buy xanax]
+
    bdoc("Go to n:th screen on multihead setup."),
[http://buy-tramadol1.us.ma/ buy tramadol]
+
    kpress(MOD1.."Shift+1", "ioncore.goto_nth_screen(0)"),
[http://buy-xenical.us.ma/ buy xenical]
+
    kpress(MOD1.."Shift+2", "ioncore.goto_nth_screen(1)"),
[http://buy-soma.us.ma/ buy soma]
+
   
[http://buy-valium.us.ma/ buy valium]
+
    bdoc("Go to next/previous screen on multihead setup."),
[http://buy-ambien2.us.ma/ buy ambien]
+
    kpress(MOD1.."Shift+Left", "ioncore.goto_next_screen()"),
[http://buy-carisoprodol.us.ma/ buy carisoprodol]
+
    kpress(MOD1.."Shift+Right", "ioncore.goto_prev_screen()"),
[http://buy-hydrocodone1.us.ma/ buy hydrocodone]
+
   
[http://buy-fioricet.us.ma/ buy fioricet]
+
    bdoc("Create a new workspace of chosen default type."),
[http://buy-adipex.us.ma/ buy adipex]
+
    kpress(MOD1.."F9", "ioncore.create_ws(_)"),
[http://buy-vicodin.us.ma/ buy vicodin]
+
   
[http://buy-alprazolam.us.ma/ buy alprazolam]
+
    bdoc("Display the main menu."),
[http://buy-ultram.us.ma/ buy ultram]
+
    kpress(MOD1.."F12", "mod_menu.bigmenu(_, _sub, 'mainmenu')"),
[http://buy-meridia.us.ma/ buy meridia]
+
    mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"),
[http://buy-viagra.be.ma/ buy viagra]
+
   
[http://buy-phentermine.be.ma/ buy phentermine]
+
    bdoc("Display the window list menu."),
[http://buy-adipex.be.ma/ buy adipex]
+
    mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"),
[http://buy-ambien.be.ma/ buy ambien]
+
})
[http://buy-xenical.be.ma/ buy xenical]
+
 
[http://buy-cialis.be.ma/ buy cialis]
+
 
[http://buy-valium.be.ma/ buy valium]
+
-- WMPlex context bindings
[http://buy-viagra.ca.tt/ buy viagra]
+
--
[http://buy-phentermine.ca.tt/ buy phentermine]
+
-- These bindings work in frames and on screens. The innermost of such
[http://buy-ambien.ca.tt/ buy ambien]
+
-- contexts/objects always gets to handle the key press. Most of these
[http://buy-adipex.ca.tt/ buy adipex]
+
-- bindings define actions on client windows. (Remember that client windows
[http://buy-xanax.ca.tt/ buy xanax]
+
-- can be put in fullscreen mode and therefore may not have a frame.)
[http://buy-xenical.ca.tt/ buy xenical]
+
--
[http://buy-cialis.ca.tt/ buy cialis]
+
-- The "_sub:WClientWin" guards are used to ensure that _sub is a client
[http://buy-valium.ca.tt/ buy valium]
+
-- window in order to stop Ion from executing the callback with an invalid
[http://buy-fioricet.ca.tt/ buy fioricet]
+
-- parameter if it is not and then complaining.
[http://buy-tramadol.ca.tt/ buy tramadol]
+
 
[http://buy-carisoprodol.ca.tt/ buy carisoprodol]
+
defbindings("WMPlex", {
[http://buy-soma.ca.tt/ buy soma]
+
    bdoc("Close current object."),
[http://buy-hydrocodone.ca.tt/ buy hydrocodone]
+
    kpress_wait(MOD1.."C", "WRegion.rqclose_propagate(_, _sub)"),
[http://buy-ultram.ca.tt/ buy ultram]
+
   
[http://buy-vicodin.ca.tt/ buy vicodin]
+
    bdoc("Nudge current client window. This might help with some "..
[http://buy-meridia.ca.tt/ buy meridia]
+
        "programs' resizing problems."),
[http://buy-alprazolam.ca.tt/ buy alprazolam]
+
    kpress_wait(MOD1.."L",
[http://viagra1.ca.tt/ viagra]
+
                "WClientWin.nudge(_sub)", "_sub:WClientWin"),
[http://hydrocodone1.ca.tt/ hydrocodone]
+
 
[http://phentermine1.ca.tt/ phentermine]
+
    bdoc("Toggle fullscreen mode of current client window."),
[http://ambien1.ca.tt/ ambien]
+
    kpress_wait(MOD1.."Return",
[http://buy-viagra1.1stOK.com/ buy viagra]
+
                "WClientWin.set_fullscreen(_sub, 'toggle')",
[http://buy-phentermine.1stOK.com/ buy phentermine]
+
                "_sub:WClientWin"),
[http://buy-ambien.1stOK.com/ buy ambien]
+
 
[http://buy-adipex.1stOK.com/ buy adipex]
+
    submap(MOD1.."K", {
[http://buy-xanax.1stOK.com/ buy xanax]
+
      bdoc("Kill client owning current client window."),
[http://buy-xenical.1stOK.com/ buy xenical]
+
      kpress("C", "WClientWin.kill(_sub)", "_sub:WClientWin"),
[http://buy-cialis.1stOK.com/ buy cialis]
+
                               
[http://buy-valium.1stOK.com/ buy valium]
+
      bdoc("Send next key press to current client window. "..
[http://buy-fioricet.1stOK.com/ buy fioricet]
+
            "Some programs may not allow this by default."),
[http://buy-tramadol.1stOK.com/ buy tramadol]
+
      kpress("Q", "WClientWin.quote_next(_sub)", "_sub:WClientWin"),
[http://buy-carisoprodol.1stOK.com/ buy carisoprodol]
+
    }),
[http://buy-soma.1stOK.com/ buy soma]
+
 
[http://buy-hydrocodone.1stOK.com/ buy hydrocodone]
+
    bdoc("Query for manual page to be displayed."),
[http://buy-ultram.1stOK.com/ buy ultram]
+
    kpress(MOD2.."F1", "mod_query.query_man(_, ':man')"),
[http://buy-vicodin.1stOK.com/ buy vicodin]
+
 
[http://buy-meridia.1stOK.com/ buy meridia]
+
    bdoc("Show the Ion manual page."),
[http://buy-alprazolam.1stOK.com/ buy alprazolam]
+
    kpress(MOD1.."F1", "ioncore.exec_on(_, ':man ion3')"),
[http://diazepam.1stOK.com/ diazepam]
+
 
[http://levitra.1stOK.com/ levitra]
+
    bdoc("Run a terminal emulator."),
[http://propecia.1stOK.com/ propecia]
+
    kpress(MOD1.."F2", "ioncore.exec_on(_, 'urxvt')"),
[http://didrex.1stOK.com/ didrex]
+
   
[http://zoloft.1stOK.com/ zoloft]
+
    bdoc("Query for command line to execute."),
[http://ultram.1stOK.com/ ultram]
+
    kpress(MOD2.."F3", "mod_query.query_exec(_)"),
[http://lipitor.1stOK.com/ lipitor]
+
 
[http://hydrocodone.1stOK.com/ hydrocodone]
+
    bdoc("Query for Lua code to execute."),
[http://ambien.1stOK.com/ ambien]
+
    kpress(MOD1.."F3", "mod_query.query_lua(_)"),
[http://adipex.1stOK.com/ adipex]
+
 
[http://xanax.1stOK.com/ xanax]
+
    bdoc("Query for host to connect to with SSH."),
[http://viagra1.1stOK.com/ viagra]
+
    kpress(MOD2.."F4", "mod_query.query_ssh(_, ':ssh')"),
[http://xenical.1stOK.com/ xenical]
+
 
[http://cialis.1stOK.com/ cialis]
+
    bdoc("Query for file to edit."),
[http://valium.1stOK.com/ valium]
+
    kpress(MOD2.."F5",
[http://tramadol.1stOK.com/ tramadol]
+
          "mod_query.query_editfile(_, 'run-mailcap --action=edit')"),
[http://carisoprodol1.1stOK.com/ carisoprodol]
+
 
[http://free-ringtones.1stOK.com/ free ringtones]
+
    bdoc("Query for file to view."),
[http://cell-phone-ringtones.1stOK.com/ cell phone ringtones]
+
    kpress(MOD2.."F6",
[http://nextel-ringtones.1stOK.com/ nextel ringtones]
+
          "mod_query.query_runfile(_, 'run-mailcap --action=view')"),
[http://viagra.torontonian.com/ viagra]
+
 
[http://buy-viagra.torontonian.com/ buy viagra]
+
    bdoc("Query for workspace to go to or create a new one."),
[http://buy-ambien.torontonian.com/ buy ambien]
+
    kpress(MOD2.."F9", "mod_query.query_workspace(_)"),
[http://buy-adipex.torontonian.com/ buy adipex]
+
   
[http://buy-phentermine1.torontonian.com/ buy phentermine]
+
    bdoc("Query for a client window to go to."),
[http://buy-xanax.torontonian.com/ buy xanax]
+
    kpress(MOD1.."G", "mod_query.query_gotoclient(_)"),
[http://buy-xenical.torontonian.com/ buy xenical]
+
})
[http://buy-tramadol.torontonian.com/ buy tramadol]
+
 
[http://buy-carisoprodol.torontonian.com/ buy carisoprodol]
+
 
[http://buy-cialis.torontonian.com/ buy cialis]
+
-- WFrame context bindings
[http://buy-valium.torontonian.com/ buy valium]
+
--
[http://buy-fioricet.torontonian.com/ buy fioricet]
+
-- These bindings are common to all types of frames. The rest of frame
[http://buy-hydrocodone.torontonian.com/ buy hydrocodone]
+
-- bindings that differ between frame types are defined in the modules'
[http://buy-ultram.torontonian.com/ buy ultram]
+
-- configuration files.
[http://buy-vicodin.torontonian.com/ buy vicodin]
+
 
[http://ambien.torontonian.com/ ambien]
+
defbindings("WFrame", {
[http://adipex.torontonian.com/ adipex]
+
    bdoc("Tag current object within the frame."),
[http://xanax1.torontonian.com/ xanax]
+
    kpress(MOD1.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"),
[http://tramadol.torontonian.com/ tramadol]
+
 
[http://diazepam.torontonian.com/ diazepam]
+
    submap(MOD1.."K", {
[http://levitra.torontonian.com/ levitra]
+
        bdoc("Switch to n:th object within the frame."),
[http://propecia.torontonian.com/ propecia]
+
        kpress("1", "WFrame.switch_nth(_, 0)"),
[http://didrex.torontonian.com/ didrex]
+
        kpress("2", "WFrame.switch_nth(_, 1)"),
[http://zoloft.torontonian.com/ zoloft]
+
        kpress("3", "WFrame.switch_nth(_, 2)"),
[http://xenical.torontonian.com/ xenical]
+
        kpress("4", "WFrame.switch_nth(_, 3)"),
[http://valium.torontonian.com/ valium]
+
        kpress("5", "WFrame.switch_nth(_, 4)"),
[http://carisoprodol.torontonian.com/ carisoprodol]
+
        kpress("6", "WFrame.switch_nth(_, 5)"),
[http://hydrocodone.torontonian.com/ hydrocodone]
+
        kpress("7", "WFrame.switch_nth(_, 6)"),
[http://xanax.ca.tt/ xanax]
+
        kpress("8", "WFrame.switch_nth(_, 7)"),
[http://xenical.ca.tt/ xenical]
+
        kpress("9", "WFrame.switch_nth(_, 8)"),
[http://didrex.ca.tt/ didrex]
+
        kpress("0", "WFrame.switch_nth(_, 9)"),
[http://zoloft.ca.tt/ zoloft]
+
       
[http://lipitor.ca.tt/ lipitor]
+
        bdoc("Switch to next/previous object within the frame."),
[http://ambien.es.tt/ ambien]
+
        kpress("N", "WFrame.switch_next(_)"),
</div>
+
        kpress("P", "WFrame.switch_prev(_)"),
 +
       
 +
        bdoc("Move current object within the frame left/right."),
 +
        kpress("comma", "WFrame.dec_index(_, _sub)", "_sub:non-nil"),
 +
        kpress("period", "WFrame.inc_index(_, _sub)", "_sub:non-nil"),
 +
             
 +
        bdoc("Maximize the frame horizontally/vertically."),
 +
        kpress("H", "WFrame.maximize_horiz(_)"),
 +
        kpress("V", "WFrame.maximize_vert(_)"),
 +
 
 +
        bdoc("Attach tagged objects to this frame."),
 +
        kpress("A", "WFrame.attach_tagged(_)"),
 +
    }),
 +
 
 +
    kpress(MOD1.."comma", "WFrame.switch_prev(_)"),
 +
    kpress(MOD1.."period", "WFrame.switch_next(_)"),
 +
 
 +
    bdoc("Query for a client window to attach to active frame."),
 +
    kpress(MOD1.."A", "mod_query.query_attachclient(_)"),
 +
 
 +
    bdoc("Display frame context menu."),
 +
    kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
 +
    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
 +
   
 +
    bdoc("Begin move/resize mode."),
 +
    kpress(MOD1.."R", "WFrame.begin_kbresize(_)"),
 +
   
 +
    bdoc("Switch the frame to display the object indicated by the tab."),
 +
    mclick("Button1@tab", "WFrame.p_switch_tab(_)"),
 +
    mclick("Button2@tab", "WFrame.p_switch_tab(_)"),
 +
   
 +
    bdoc("Resize the frame."),
 +
    mdrag("Button1@border", "WFrame.p_resize(_)"),
 +
    mdrag(MOD1.."Button3", "WFrame.p_resize(_)"),
 +
   
 +
    bdoc("Move the frame."),
 +
    mdrag(MOD1.."Button1", "WFrame.p_move(_)"),
 +
   
 +
    bdoc("Move objects between frames by dragging and dropping the tab."),
 +
    mdrag("Button1@tab", "WFrame.p_tabdrag(_)"),
 +
    mdrag("Button2@tab", "WFrame.p_tabdrag(_)"),
 +
         
 +
})
 +
 
 +
 
 +
-- WMoveresMode context bindings
 +
--
 +
-- These bindings are available keyboard move/resize mode. The mode
 +
-- is activated on frames with the command begin_kbresize (bound to
 +
-- MOD1.."R" above by default).
 +
 
 +
defbindings("WMoveresMode", {
 +
    bdoc("Cancel the resize mode."),
 +
    kpress("AnyModifier+Escape","WMoveresMode.cancel(_)"),
 +
 
 +
    bdoc("End the resize mode."),
 +
    kpress("AnyModifier+Return","WMoveresMode.finish(_)"),
 +
 
 +
    bdoc("Grow in specified direction."),
 +
    kpress("Left",  "WMoveresMode.resize(_, 1, 0, 0, 0)"),
 +
    kpress("Right", "WMoveresMode.resize(_, 0, 1, 0, 0)"),
 +
    kpress("Up",    "WMoveresMode.resize(_, 0, 0, 1, 0)"),
 +
    kpress("Down",  "WMoveresMode.resize(_, 0, 0, 0, 1)"),
 +
    kpress("F",    "WMoveresMode.resize(_, 1, 0, 0, 0)"),
 +
    kpress("B",    "WMoveresMode.resize(_, 0, 1, 0, 0)"),
 +
    kpress("P",    "WMoveresMode.resize(_, 0, 0, 1, 0)"),
 +
    kpress("N",    "WMoveresMode.resize(_, 0, 0, 0, 1)"),
 +
   
 +
    bdoc("Shrink in specified direction."),
 +
    kpress("Shift+Left",  "WMoveresMode.resize(_,-1, 0, 0, 0)"),
 +
    kpress("Shift+Right", "WMoveresMode.resize(_, 0,-1, 0, 0)"),
 +
    kpress("Shift+Up",    "WMoveresMode.resize(_, 0, 0,-1, 0)"),
 +
    kpress("Shift+Down",  "WMoveresMode.resize(_, 0, 0, 0,-1)"),
 +
    kpress("Shift+F",    "WMoveresMode.resize(_,-1, 0, 0, 0)"),
 +
    kpress("Shift+B",    "WMoveresMode.resize(_, 0,-1, 0, 0)"),
 +
    kpress("Shift+P",    "WMoveresMode.resize(_, 0, 0,-1, 0)"),
 +
    kpress("Shift+N",    "WMoveresMode.resize(_, 0, 0, 0,-1)"),
 +
   
 +
    bdoc("Move in specified direction."),
 +
    kpress(MOD1.."Left",  "WMoveresMode.move(_,-1, 0)"),
 +
    kpress(MOD1.."Right", "WMoveresMode.move(_, 1, 0)"),
 +
    kpress(MOD1.."Up",    "WMoveresMode.move(_, 0,-1)"),
 +
    kpress(MOD1.."Down",  "WMoveresMode.move(_, 0, 1)"),
 +
    kpress(MOD1.."F",    "WMoveresMode.move(_,-1, 0)"),
 +
    kpress(MOD1.."B",    "WMoveresMode.move(_, 1, 0)"),
 +
    kpress(MOD1.."P",    "WMoveresMode.move(_, 0,-1)"),
 +
    kpress(MOD1.."N",    "WMoveresMode.move(_, 0, 1)"),
 +
})
 +
</pre>
 +
 
 +
== cfg_menus.lua ==
 +
In this file you configure your main menu.
 +
<pre>
 +
--
 +
-- Ion menu definitions
 +
--
 +
 
 +
 
 +
-- Main menu
 +
defmenu("mainmenu", {
 +
    submenu("Programs",        "appmenu"),
 +
    menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
 +
    menuentry("Help",          "mod_query.query_man(_)"),
 +
    menuentry("About Ion",      "mod_query.show_about_ion(_)"),
 +
    submenu("Styles",          "stylemenu"),
 +
    submenu("Session",          "sessionmenu"),
 +
})
 +
 
 +
 
 +
-- Application menu
 +
defmenu("appmenu", {
 +
    menuentry("Firefox","ioncore.exec_on(_, 'firefox')"),
 +
    menuentry("Thunderbird","ioncore.exec_on(_, 'thunderbird')"),
 +
    menuentry("Editor","ioncore.exec_on(_, 'lazy-edit')"),
 +
    menuentry("Player","ioncore.exec_on(_, 'lazy-player')"),
 +
    menuentry("FTP","ioncore.exec_on(_, 'lazy-ftp')"),
 +
    menuentry("GVim","ioncore.exec_on(_, 'gvim')"),
 +
    menuentry("Run...", "mod_query.query_exec(_)"),
 +
})
 +
 
 +
 
 +
-- Session control menu
 +
defmenu("sessionmenu", {
 +
    menuentry("Save",          "ioncore.snapshot()"),
 +
    menuentry("Restart",        "ioncore.restart()"),
 +
    menuentry("Restart PWM",    "ioncore.restart_other('pwm')"),
 +
    menuentry("Restart TWM",    "ioncore.restart_other('twm')"),
 +
    menuentry("Exit",          "ioncore.shutdown()"),
 +
})
 +
 
 +
 
 +
-- Context menu (frame/client window actions)
 +
defctxmenu("WFrame", {
 +
    menuentry("Close",          "WRegion.rqclose_propagate(_, _sub)"),
 +
    menuentry("Kill",          "WClientWin.kill(_sub)",
 +
                                "_sub:WClientWin"),
 +
    menuentry("(Un)tag",        "WRegion.set_tagged(_sub, 'toggle')",
 +
                                "_sub:non-nil"),
 +
    menuentry("Attach tagged",  "WFrame.attach_tagged(_)"),
 +
    menuentry("Clear tags",    "ioncore.clear_tags()"),
 +
    menuentry("Window info",    "mod_query.show_clientwin(_, _sub)",
 +
                                "_sub:WClientWin"),
 +
})
 +
</pre>
 +
 
 +
== cfg_ionws.lua ==
 +
In this file you configure your ion workspaces.
 +
<pre>
 +
--
 +
-- Ion ionws module configuration file
 +
--
 +
 
 +
-- Bindings for the tiled workspaces (ionws). These should work on any
 +
-- object on the workspace.
 +
 
 +
defbindings("WIonWS", {
 +
    bdoc("Split current frame vertically."),
 +
    kpress(MOD1.."V", "WIonWS.split_at(_, _sub, 'bottom', true)"),
 +
 
 +
    bdoc("Split current frame horizontally."),
 +
    kpress(MOD1.."H", "WIonWS.split_at(_, _sub, 'right', true)"),
 +
   
 +
    bdoc("Destroy current frame."),
 +
    kpress(MOD1.."Tab", "WIonWS.unsplit_at(_, _sub)"),
 +
 
 +
    bdoc("Go to frame above/below/right/left of current frame."),
 +
    kpress(MOD2.."Up", "WIonWS.goto_dir(_, 'above')"),
 +
    kpress(MOD2.."Down", "WIonWS.goto_dir(_, 'below')"),
 +
    kpress(MOD2.."Right", "WIonWS.goto_dir(_, 'right')"),
 +
    kpress(MOD2.."Left", "WIonWS.goto_dir(_, 'left')"),
 +
    submap(MOD1.."K", {
 +
        bdoc("Split current frame horizontally."),
 +
        kpress("S", "WIonWS.split_at(_, _sub, 'right', true)"),
 +
       
 +
        bdoc("Destroy current frame."),
 +
        kpress("X", "WIonWS.unsplit_at(_, _sub)"),
 +
    }),
 +
})
 +
 
 +
 
 +
-- Frame bindings. These work in (Ion/tiled-style) frames. Some bindings
 +
-- that are common to all frame types and multiplexes are defined in
 +
-- ion-bindings.lua.
 +
 
 +
--defbindings("WFrame-on-WIonWS", {
 +
--})
 +
 
 +
-- WFloatFrame context menu extras
 +
 
 +
if mod_menu then
 +
    defctxmenu("WIonWS", {
 +
        menuentry("Destroy frame",
 +
                  "WIonWS.unsplit_at(_, _sub)"),
 +
        menuentry("Split vertically",
 +
                  "WIonWS.split_at(_, _sub, 'bottom', true)"),
 +
        menuentry("Split horizontally",
 +
                  "WIonWS.split_at(_, _sub, 'right', true)"),
 +
        menuentry("Flip", "WIonWS.flip_at(_, _sub)"),
 +
        menuentry("Transpose", "WIonWS.transpose_at(_, _sub)"),
 +
        submenu("Float split", {
 +
            menuentry("At left",
 +
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'left')"),
 +
            menuentry("At right",
 +
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'right')"),
 +
            menuentry("Above",
 +
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'up')"),
 +
            menuentry("Below",
 +
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'down')"),
 +
        }),
 +
        submenu("At root", {
 +
            menuentry("Split vertically",
 +
                      "WIonWS.split_top(_, 'bottom')"),
 +
            menuentry("Split horizontally",
 +
                      "WIonWS.split_top(_, 'right')"),
 +
            menuentry("Flip", "WIonWS.flip_at(_)"),
 +
            menuentry("Transpose", "WIonWS.transpose_at(_)"),
 +
        }),
 +
    })
 +
end
 +
</pre>
 +
 
 +
== look.lua ==
 +
In this file you set your theme. Your default theme is set on the bottom:
 +
dopath("look_xerxes")
 +
The themes are called '''<code>look_<name>.lua</code>''' and you can make your own by switching the name.

Revision as of 01:12, 23 December 2005

Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n links end

Introduction

Ion is a tiling window manager with tabbed frames. It uses Lua as an embedded interpreter which handles all of the configuration. It mainly uses the keyboard to access the functions but also supports the mouse for some things.

Installation

Ion3 is still in development and hasn't been released yet but packages for the development snapshots can be found in the community repository.
Refresh Pacman and run the following command:

pacman -S ion3-devel

If you want a bunch of extra scripts you can run the following command(optional):

pacman -S ion3-devel-scripts

Copy the configurationfiles to your home directory:

cp /etc/ion3/* ~/.ion3

To start Ion3 just append the following line in ~/.xinitrc :

exec ion3

Now you're ready to begin to configure Ion as described below.

Configuration

Note: The files below have been heavily modified from the defaults to better suit my needs. /xerxes2

cfg_ion.lua

This is Ion3' main configurationfile.

-- Ion main configuration file
--

--
-- Some basic setup
--

-- Set default modifiers. Alt should usually be mapped to Mod1 on
-- XFree86-based systems. The flying window keys are probably Mod3
-- or Mod4; see the output of 'xmodmap'.
MOD1="Mod4+"
MOD2="Mod1+"

ioncore.set{
    -- Maximum delay between clicks in milliseconds to be considered a
    -- double click.
    dblclick_delay=250,

    -- For keyboard resize, time (in milliseconds) to wait after latest
    -- key press before automatically leaving resize mode (and doing
    -- the resize in case of non-opaque move).
    kbresize_delay=1500,

    -- Opaque resize?
    opaque_resize=false,

    -- Movement commands warp the pointer to frames instead of just
    -- changing focus. Enabled by default.
    warp=true,
    
    -- Default workspace type.
    default_ws_type="WIonWS",
}


--
-- Load some modules, extensions and other configuration files
--

-- Load some modules.
dopath("mod_query")
dopath("mod_menu")
dopath("mod_ionws")
dopath("mod_floatws")
dopath("mod_panews")
--dopath("mod_statusbar")
--dopath("mod_dock")
dopath("mod_sp")

-- Load some kludges to make apps behave better.
dopath("cfg_kludges")

-- Make some bindings.
dopath("cfg_bindings")

-- Define some menus (mod_menu required)
dopath("cfg_menus")

-- Load additional user configuration. 'true' as second parameter asks
-- Ion not to complain if the file is not found.
dopath("cfg_user", true)

The Modkeyes handles your hotkeys when you holds them in(Modkey + hotkey). The dopath command includes modules that Ion should load on startup. Just uncomment those you don't want to load.

cfg_bindings.lua

In this file you set your basic keybindings.

-- 
-- Ion bindings configuration file. Global bindings and bindings common 
-- to screens and all types of frames only. See modules' configuration 
-- files for other bindings.
--


-- WScreen context bindings
--
-- The bindings in this context are available all the time.
--
-- The variable MOD1 should contain a string of the form 'Mod1+'
-- where Mod1 maybe replaced with the modifier you want to use for most
-- of the bindings. Similarly MOD2 may be redefined to add a 
-- modifier to some of the F-key bindings.

defbindings("WScreen", {
    bdoc("Switch to n:th object (workspace, full screen client window) "..
         "within current screen."),
    kpress(MOD1.."1", "WScreen.switch_nth(_, 0)"),
    kpress(MOD1.."2", "WScreen.switch_nth(_, 1)"),
    kpress(MOD1.."3", "WScreen.switch_nth(_, 2)"),
    kpress(MOD1.."4", "WScreen.switch_nth(_, 3)"),
    kpress(MOD1.."5", "WScreen.switch_nth(_, 4)"),
    kpress(MOD1.."6", "WScreen.switch_nth(_, 5)"),
    kpress(MOD1.."7", "WScreen.switch_nth(_, 6)"),
    kpress(MOD1.."8", "WScreen.switch_nth(_, 7)"),
    kpress(MOD1.."9", "WScreen.switch_nth(_, 8)"),
    kpress(MOD1.."0", "WScreen.switch_nth(_, 9)"),
    
--    bdoc("Switch to next/previous object within current screen."),
--    kpress(MOD2.."comma", "ioncore.goto_previous()"),
--    kpress(MOD2.."period", "ioncore.goto_next()"),
    
    kpress(MOD1.."Left", "WScreen.switch_prev(_)"),
    kpress(MOD1.."Right", "WScreen.switch_next(_)"),

    

    submap(MOD1.."K", {
        bdoc("Go to previous active object."),
        kpress("K", "ioncore.goto_previous()"),
        
        bdoc("Clear all tags."),
        kpress("T", "ioncore.clear_tags()"),
    }),
    
    bdoc("Go to n:th screen on multihead setup."),
    kpress(MOD1.."Shift+1", "ioncore.goto_nth_screen(0)"),
    kpress(MOD1.."Shift+2", "ioncore.goto_nth_screen(1)"),
    
    bdoc("Go to next/previous screen on multihead setup."),
    kpress(MOD1.."Shift+Left", "ioncore.goto_next_screen()"),
    kpress(MOD1.."Shift+Right", "ioncore.goto_prev_screen()"),
    
    bdoc("Create a new workspace of chosen default type."),
    kpress(MOD1.."F9", "ioncore.create_ws(_)"),
    
    bdoc("Display the main menu."),
    kpress(MOD1.."F12", "mod_menu.bigmenu(_, _sub, 'mainmenu')"),
    mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"),
    
    bdoc("Display the window list menu."),
    mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"),
})


-- WMPlex context bindings
--
-- These bindings work in frames and on screens. The innermost of such
-- contexts/objects always gets to handle the key press. Most of these 
-- bindings define actions on client windows. (Remember that client windows 
-- can be put in fullscreen mode and therefore may not have a frame.)
-- 
-- The "_sub:WClientWin" guards are used to ensure that _sub is a client
-- window in order to stop Ion from executing the callback with an invalid
-- parameter if it is not and then complaining.

defbindings("WMPlex", {
    bdoc("Close current object."),
    kpress_wait(MOD1.."C", "WRegion.rqclose_propagate(_, _sub)"),
    
    bdoc("Nudge current client window. This might help with some "..
         "programs' resizing problems."),
    kpress_wait(MOD1.."L", 
                "WClientWin.nudge(_sub)", "_sub:WClientWin"),

    bdoc("Toggle fullscreen mode of current client window."),
    kpress_wait(MOD1.."Return", 
                "WClientWin.set_fullscreen(_sub, 'toggle')", 
                "_sub:WClientWin"),

    submap(MOD1.."K", {
       bdoc("Kill client owning current client window."),
       kpress("C", "WClientWin.kill(_sub)", "_sub:WClientWin"),
                                
       bdoc("Send next key press to current client window. "..
            "Some programs may not allow this by default."),
       kpress("Q", "WClientWin.quote_next(_sub)", "_sub:WClientWin"),
    }),

    bdoc("Query for manual page to be displayed."),
    kpress(MOD2.."F1", "mod_query.query_man(_, ':man')"),

    bdoc("Show the Ion manual page."),
    kpress(MOD1.."F1", "ioncore.exec_on(_, ':man ion3')"),

    bdoc("Run a terminal emulator."),
    kpress(MOD1.."F2", "ioncore.exec_on(_, 'urxvt')"),
    
    bdoc("Query for command line to execute."),
    kpress(MOD2.."F3", "mod_query.query_exec(_)"),

    bdoc("Query for Lua code to execute."),
    kpress(MOD1.."F3", "mod_query.query_lua(_)"),

    bdoc("Query for host to connect to with SSH."),
    kpress(MOD2.."F4", "mod_query.query_ssh(_, ':ssh')"),

    bdoc("Query for file to edit."),
    kpress(MOD2.."F5", 
           "mod_query.query_editfile(_, 'run-mailcap --action=edit')"),

    bdoc("Query for file to view."),
    kpress(MOD2.."F6", 
           "mod_query.query_runfile(_, 'run-mailcap --action=view')"),

    bdoc("Query for workspace to go to or create a new one."),
    kpress(MOD2.."F9", "mod_query.query_workspace(_)"),
    
    bdoc("Query for a client window to go to."),
    kpress(MOD1.."G", "mod_query.query_gotoclient(_)"),
})


-- WFrame context bindings
--
-- These bindings are common to all types of frames. The rest of frame
-- bindings that differ between frame types are defined in the modules' 
-- configuration files.

defbindings("WFrame", {
    bdoc("Tag current object within the frame."),
    kpress(MOD1.."T", "WRegion.set_tagged(_sub, 'toggle')", "_sub:non-nil"),

    submap(MOD1.."K", {
        bdoc("Switch to n:th object within the frame."),
        kpress("1", "WFrame.switch_nth(_, 0)"),
        kpress("2", "WFrame.switch_nth(_, 1)"),
        kpress("3", "WFrame.switch_nth(_, 2)"),
        kpress("4", "WFrame.switch_nth(_, 3)"),
        kpress("5", "WFrame.switch_nth(_, 4)"),
        kpress("6", "WFrame.switch_nth(_, 5)"),
        kpress("7", "WFrame.switch_nth(_, 6)"),
        kpress("8", "WFrame.switch_nth(_, 7)"),
        kpress("9", "WFrame.switch_nth(_, 8)"),
        kpress("0", "WFrame.switch_nth(_, 9)"),
        
        bdoc("Switch to next/previous object within the frame."),
        kpress("N", "WFrame.switch_next(_)"),
        kpress("P", "WFrame.switch_prev(_)"),
        
        bdoc("Move current object within the frame left/right."),
        kpress("comma", "WFrame.dec_index(_, _sub)", "_sub:non-nil"),
        kpress("period", "WFrame.inc_index(_, _sub)", "_sub:non-nil"),
               
        bdoc("Maximize the frame horizontally/vertically."),
        kpress("H", "WFrame.maximize_horiz(_)"),
        kpress("V", "WFrame.maximize_vert(_)"),

        bdoc("Attach tagged objects to this frame."),
        kpress("A", "WFrame.attach_tagged(_)"),
    }),

    kpress(MOD1.."comma", "WFrame.switch_prev(_)"),
    kpress(MOD1.."period", "WFrame.switch_next(_)"),

    bdoc("Query for a client window to attach to active frame."),
    kpress(MOD1.."A", "mod_query.query_attachclient(_)"),

    bdoc("Display frame context menu."),
    kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
    mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
    
    bdoc("Begin move/resize mode."),
    kpress(MOD1.."R", "WFrame.begin_kbresize(_)"),
    
    bdoc("Switch the frame to display the object indicated by the tab."),
    mclick("Button1@tab", "WFrame.p_switch_tab(_)"),
    mclick("Button2@tab", "WFrame.p_switch_tab(_)"),
    
    bdoc("Resize the frame."),
    mdrag("Button1@border", "WFrame.p_resize(_)"),
    mdrag(MOD1.."Button3", "WFrame.p_resize(_)"),
    
    bdoc("Move the frame."),
    mdrag(MOD1.."Button1", "WFrame.p_move(_)"),
    
    bdoc("Move objects between frames by dragging and dropping the tab."),
    mdrag("Button1@tab", "WFrame.p_tabdrag(_)"),
    mdrag("Button2@tab", "WFrame.p_tabdrag(_)"),
           
})


-- WMoveresMode context bindings
-- 
-- These bindings are available keyboard move/resize mode. The mode
-- is activated on frames with the command begin_kbresize (bound to
-- MOD1.."R" above by default).

defbindings("WMoveresMode", {
    bdoc("Cancel the resize mode."),
    kpress("AnyModifier+Escape","WMoveresMode.cancel(_)"),

    bdoc("End the resize mode."),
    kpress("AnyModifier+Return","WMoveresMode.finish(_)"),

    bdoc("Grow in specified direction."),
    kpress("Left",  "WMoveresMode.resize(_, 1, 0, 0, 0)"),
    kpress("Right", "WMoveresMode.resize(_, 0, 1, 0, 0)"),
    kpress("Up",    "WMoveresMode.resize(_, 0, 0, 1, 0)"),
    kpress("Down",  "WMoveresMode.resize(_, 0, 0, 0, 1)"),
    kpress("F",     "WMoveresMode.resize(_, 1, 0, 0, 0)"),
    kpress("B",     "WMoveresMode.resize(_, 0, 1, 0, 0)"),
    kpress("P",     "WMoveresMode.resize(_, 0, 0, 1, 0)"),
    kpress("N",     "WMoveresMode.resize(_, 0, 0, 0, 1)"),
    
    bdoc("Shrink in specified direction."),
    kpress("Shift+Left",  "WMoveresMode.resize(_,-1, 0, 0, 0)"),
    kpress("Shift+Right", "WMoveresMode.resize(_, 0,-1, 0, 0)"),
    kpress("Shift+Up",    "WMoveresMode.resize(_, 0, 0,-1, 0)"),
    kpress("Shift+Down",  "WMoveresMode.resize(_, 0, 0, 0,-1)"),
    kpress("Shift+F",     "WMoveresMode.resize(_,-1, 0, 0, 0)"),
    kpress("Shift+B",     "WMoveresMode.resize(_, 0,-1, 0, 0)"),
    kpress("Shift+P",     "WMoveresMode.resize(_, 0, 0,-1, 0)"),
    kpress("Shift+N",     "WMoveresMode.resize(_, 0, 0, 0,-1)"),
    
    bdoc("Move in specified direction."),
    kpress(MOD1.."Left",  "WMoveresMode.move(_,-1, 0)"),
    kpress(MOD1.."Right", "WMoveresMode.move(_, 1, 0)"),
    kpress(MOD1.."Up",    "WMoveresMode.move(_, 0,-1)"),
    kpress(MOD1.."Down",  "WMoveresMode.move(_, 0, 1)"),
    kpress(MOD1.."F",     "WMoveresMode.move(_,-1, 0)"),
    kpress(MOD1.."B",     "WMoveresMode.move(_, 1, 0)"),
    kpress(MOD1.."P",     "WMoveresMode.move(_, 0,-1)"),
    kpress(MOD1.."N",     "WMoveresMode.move(_, 0, 1)"),
})

cfg_menus.lua

In this file you configure your main menu.

--
-- Ion menu definitions
--


-- Main menu
defmenu("mainmenu", {
    submenu("Programs",         "appmenu"),
    menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
    menuentry("Help",           "mod_query.query_man(_)"),
    menuentry("About Ion",      "mod_query.show_about_ion(_)"),
    submenu("Styles",           "stylemenu"),
    submenu("Session",          "sessionmenu"),
})


-- Application menu
defmenu("appmenu", {
    menuentry("Firefox","ioncore.exec_on(_, 'firefox')"),
    menuentry("Thunderbird","ioncore.exec_on(_, 'thunderbird')"),
    menuentry("Editor","ioncore.exec_on(_, 'lazy-edit')"),
    menuentry("Player","ioncore.exec_on(_, 'lazy-player')"),
    menuentry("FTP","ioncore.exec_on(_, 'lazy-ftp')"),
    menuentry("GVim","ioncore.exec_on(_, 'gvim')"),
    menuentry("Run...", "mod_query.query_exec(_)"),
})


-- Session control menu
defmenu("sessionmenu", {
    menuentry("Save",           "ioncore.snapshot()"),
    menuentry("Restart",        "ioncore.restart()"),
    menuentry("Restart PWM",    "ioncore.restart_other('pwm')"),
    menuentry("Restart TWM",    "ioncore.restart_other('twm')"),
    menuentry("Exit",           "ioncore.shutdown()"),
})


-- Context menu (frame/client window actions)
defctxmenu("WFrame", {
    menuentry("Close",          "WRegion.rqclose_propagate(_, _sub)"),
    menuentry("Kill",           "WClientWin.kill(_sub)",
                                "_sub:WClientWin"),
    menuentry("(Un)tag",        "WRegion.set_tagged(_sub, 'toggle')",
                                "_sub:non-nil"),
    menuentry("Attach tagged",  "WFrame.attach_tagged(_)"),
    menuentry("Clear tags",     "ioncore.clear_tags()"),
    menuentry("Window info",    "mod_query.show_clientwin(_, _sub)",
                                "_sub:WClientWin"),
})

cfg_ionws.lua

In this file you configure your ion workspaces.

--
-- Ion ionws module configuration file
--

-- Bindings for the tiled workspaces (ionws). These should work on any 
-- object on the workspace.

defbindings("WIonWS", {
    bdoc("Split current frame vertically."),
    kpress(MOD1.."V", "WIonWS.split_at(_, _sub, 'bottom', true)"),

    bdoc("Split current frame horizontally."),
    kpress(MOD1.."H", "WIonWS.split_at(_, _sub, 'right', true)"),
    
    bdoc("Destroy current frame."),
    kpress(MOD1.."Tab", "WIonWS.unsplit_at(_, _sub)"),

    bdoc("Go to frame above/below/right/left of current frame."),
    kpress(MOD2.."Up", "WIonWS.goto_dir(_, 'above')"),
    kpress(MOD2.."Down", "WIonWS.goto_dir(_, 'below')"),
    kpress(MOD2.."Right", "WIonWS.goto_dir(_, 'right')"),
    kpress(MOD2.."Left", "WIonWS.goto_dir(_, 'left')"),
    submap(MOD1.."K", {
        bdoc("Split current frame horizontally."),
        kpress("S", "WIonWS.split_at(_, _sub, 'right', true)"),
        
        bdoc("Destroy current frame."),
        kpress("X", "WIonWS.unsplit_at(_, _sub)"),
    }),
})


-- Frame bindings. These work in (Ion/tiled-style) frames. Some bindings
-- that are common to all frame types and multiplexes are defined in
-- ion-bindings.lua.

--defbindings("WFrame-on-WIonWS", {
--})

-- WFloatFrame context menu extras

if mod_menu then
    defctxmenu("WIonWS", {
        menuentry("Destroy frame", 
                  "WIonWS.unsplit_at(_, _sub)"),
        menuentry("Split vertically", 
                  "WIonWS.split_at(_, _sub, 'bottom', true)"),
        menuentry("Split horizontally", 
                  "WIonWS.split_at(_, _sub, 'right', true)"),
        menuentry("Flip", "WIonWS.flip_at(_, _sub)"),
        menuentry("Transpose", "WIonWS.transpose_at(_, _sub)"),
        submenu("Float split", {
            menuentry("At left", 
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'left')"),
            menuentry("At right", 
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'right')"),
            menuentry("Above",
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'up')"),
            menuentry("Below",
                      "WIonWS.set_floating_at(_, _sub, 'toggle', 'down')"),
        }),
        submenu("At root", {
            menuentry("Split vertically", 
                      "WIonWS.split_top(_, 'bottom')"),
            menuentry("Split horizontally", 
                      "WIonWS.split_top(_, 'right')"),
            menuentry("Flip", "WIonWS.flip_at(_)"),
            menuentry("Transpose", "WIonWS.transpose_at(_)"),
        }),
    })
end

look.lua

In this file you set your theme. Your default theme is set on the bottom:

dopath("look_xerxes") 

The themes are called look_<name>.lua and you can make your own by switching the name.