LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1014|回复: 1

Ion3 - 基于键盘使用的WM

[复制链接]
发表于 2005-8-26 09:32:39 | 显示全部楼层 |阅读模式
简介

Ion (http://iki.fi/tuomov/ion/) 是一个有着标签(tab)框架的风格的,平铺的窗体管理器。它的配置文件以Lua语言作为内嵌的释译器。它的功能主要使用键盘来控制,同时也支持鼠标。

安装

我只有ArchLinux,在这里只简介ArchLinux下的安装。
Ion3还处于开发阶段,并未正式发布。但它的开发版本可以从community库中得到。
先更新pacman的包管理数据库,然后运行以下命令来安装它:

pacman -S ion3-devel

你还可以运行下面的命令(可选的),得到一些额外的脚本文件:

pacman -S ion3-devel-scripts

把配置文件拷贝到你的主目录下:

cp /etc/ion3/* ~/.ion3

要启用Ion3,需把下面这一行加到 ~/.xinitrc 中来 :

exec ion3

现在你可以按下面配置文件所述,来配置Ion。

配置

注意: 相比原有的配置文件,我已经对这些文件基于我自己喜好进行了很大的改动。/xerxes2

cfg_ion.lua


Ion3的主配置文件。

  1. -- Ion main configuration file
  2. --
  3. -- Ion主配置文件
  4. --

  5. --
  6. -- Some basic setup
  7. --
  8. -- 一些基本的设置
  9. --

  10. -- Set default modifiers. Alt should usually be mapped to Mod1 on
  11. -- XFree86-based systems. The flying window keys are probably Mod3
  12. -- or Mod4; see the output of 'xmodmap'.
  13. --
  14. -- 设置默认功能键(modifiers)。在基于XFree86的X系统中,Alt键通常被映射为Mod1,
  15. -- Win键常被映射为Mod3或是Mod4,详见 'xmodmap' 命令的输出。
  16. --
  17. MOD1="Mod4+"
  18. MOD2="Mod1+"

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

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

  27.     -- Opaque resize?
  28.     opaque_resize=false,

  29.     -- Movement commands warp the pointer to frames instead of just
  30.     -- changing focus. Enabled by default.
  31.     warp=true,
  32.    
  33.     -- Default workspace type.
  34.     default_ws_type="WIonWS",
  35. }


  36. --
  37. -- Load some modules, extensions and other configuration files
  38. --
  39. -- 加载一些模块,扩展功能,以及其它配置文件

  40. -- Load some modules.
  41. dopath("mod_query")
  42. dopath("mod_menu")
  43. dopath("mod_ionws")
  44. dopath("mod_floatws")
  45. dopath("mod_panews")
  46. --dopath("mod_statusbar")
  47. --dopath("mod_dock")
  48. dopath("mod_sp")

  49. -- Load some kludges to make apps behave better.
  50. -- 加载一些补充程序(kludges),以使程序有更好的外观。
  51. dopath("cfg_kludges")

  52. -- Make some bindings.
  53. -- 完成热键绑定
  54. dopath("cfg_bindings")

  55. -- Define some menus (mod_menu required)
  56. -- 定义一些菜单(需要用到mod_menu)
  57. dopath("cfg_menus")

  58. -- Load additional user configuration. 'true' as second parameter asks
  59. -- Ion not to complain if the file is not found.
  60. -- 加载用户自定义的配置。第二个参数 'ture' 告诉Ion被抱怨找不到该文件。
  61. dopath("cfg_user", true)
复制代码

要使用热键,按住功能键的同时按下热键(Modkey + hotkey)。 dopath 命令能配置Ion启动时加载的模块。如果你不想启动某个模块,把它所在的那一行注释即可。

cfg_bindings.lua

这个文件配置键盘上的控制热键。

  1. --
  2. -- Ion bindings configuration file. Global bindings and bindings common
  3. -- to screens and all types of frames only. See modules' configuration
  4. -- files for other bindings.
  5. --
  6. --
  7. -- 此配置文件只用于Ion全局、screan,以及各种frame的热键绑定。
  8. -- 想了解配置的细节,参见各模块的配置文件。
  9. --


  10. -- WScreen context bindings
  11. --
  12. -- WScreen 事件的热键绑定
  13. --
  14. -- The bindings in this context are available all the time.
  15. --
  16. -- 此文中的各种热键绑定将一直生效。
  17. --
  18. -- The variable MOD1 should contain a string of the form 'Mod1+'
  19. -- where Mod1 maybe replaced with the modifier you want to use for most
  20. -- of the bindings. Similarly MOD2 may be redefined to add a
  21. -- modifier to some of the F-key bindings.
  22. --
  23. -- MOD1变量将赋于一个字符串,该字符串以 'Mod1+'的形式表征。
  24. -- 此Mod1可以为任何一个你想使用的modifier,用于绝大多数的热键绑定。
  25. -- 和MOD1相似地,MOD2也可以被重新定义。由此添加一个用于F-key绑定的modifier。
  26. --
  27. defbindings("WScreen", {
  28.     bdoc("Switch to n:th object (workspace, full screen client window) "..
  29.          "within current screen."),
  30.     kpress(MOD1.."1", "WScreen.switch_nth(_, 0)"),
  31.     kpress(MOD1.."2", "WScreen.switch_nth(_, 1)"),
  32.     kpress(MOD1.."3", "WScreen.switch_nth(_, 2)"),
  33.     kpress(MOD1.."4", "WScreen.switch_nth(_, 3)"),
  34.     kpress(MOD1.."5", "WScreen.switch_nth(_, 4)"),
  35.     kpress(MOD1.."6", "WScreen.switch_nth(_, 5)"),
  36.     kpress(MOD1.."7", "WScreen.switch_nth(_, 6)"),
  37.     kpress(MOD1.."8", "WScreen.switch_nth(_, 7)"),
  38.     kpress(MOD1.."9", "WScreen.switch_nth(_, 8)"),
  39.     kpress(MOD1.."0", "WScreen.switch_nth(_, 9)"),
  40.    
  41. --    bdoc("Switch to next/previous object within current screen."),
  42. --    kpress(MOD2.."comma", "ioncore.goto_previous()"),
  43. --    kpress(MOD2.."period", "ioncore.goto_next()"),
  44.    
  45.     kpress(MOD1.."Left", "WScreen.switch_prev(_)"),
  46.     kpress(MOD1.."Right", "WScreen.switch_next(_)"),

  47.    

  48.     submap(MOD1.."K", {
  49.         bdoc("Go to previous active object."),
  50.         kpress("K", "ioncore.goto_previous()"),
  51.         
  52.         bdoc("Clear all tags."),
  53.         kpress("T", "ioncore.clear_tags()"),
  54.     }),
  55.    
  56.     bdoc("Go to n:th screen on multihead setup."),
  57.     kpress(MOD1.."Shift+1", "ioncore.goto_nth_screen(0)"),
  58.     kpress(MOD1.."Shift+2", "ioncore.goto_nth_screen(1)"),
  59.    
  60.     bdoc("Go to next/previous screen on multihead setup."),
  61.     kpress(MOD1.."Shift+Left", "ioncore.goto_next_screen()"),
  62.     kpress(MOD1.."Shift+Right", "ioncore.goto_prev_screen()"),
  63.    
  64.     bdoc("Create a new workspace of chosen default type."),
  65.     kpress(MOD1.."F9", "ioncore.create_ws(_)"),
  66.    
  67.     bdoc("Display the main menu."),
  68.     kpress(MOD1.."F12", "mod_menu.bigmenu(_, _sub, 'mainmenu')"),
  69.     mpress("Button3", "mod_menu.pmenu(_, _sub, 'mainmenu')"),
  70.    
  71.     bdoc("Display the window list menu."),
  72.     mpress("Button2", "mod_menu.pmenu(_, _sub, 'windowlist')"),
  73. })


  74. -- WMPlex context bindings
  75. --
  76. -- WMPlex 事件的热键绑定
  77. --
  78. -- These bindings work in frames and on screens. The innermost of such
  79. -- contexts/objects always gets to handle the key press. Most of these
  80. -- bindings define actions on client windows. (Remember that client windows
  81. -- can be put in fullscreen mode and therefore may not have a frame.)
  82. --
  83. -- 这些热键绑定在各个frame和screan中生效。这些事件/实体会一直在你按下按键时生效。
  84. -- 它们所定义的,大多是控制窗体的动作。
  85. -- (记得当窗体(client window)处于全屏模式时,它们不会表现为一个个的框(frame)。)
  86. --
  87. -- The "_sub:WClientWin" guards are used to ensure that _sub is a client
  88. -- window in order to stop Ion from executing the callback with an invalid
  89. -- parameter if it is not and then complaining.
  90. -- 守卫进程 "_sub:WClientWin" 用于保证 _sub 为一个窗体(client window),以便于当Ion
  91. -- 在执行收回函数时接收到一个非法参数而抱怨。(此处可能有翻译不当)

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

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

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

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

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

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

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

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

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

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

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


  137. -- WFrame context bindings
  138. --
  139. -- WFrame 事件的热键绑定
  140. --
  141. -- These bindings are common to all types of frames. The rest of frame
  142. -- bindings that differ between frame types are defined in the modules'
  143. -- configuration files.
  144. --
  145. -- 这些热键绑定用于各种框体(frame)。其它框体的配置在模块配置文件中定义。
  146. --

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

  150.     submap(MOD1.."K", {
  151.         bdoc("Switch to n:th object within the frame."),
  152.         kpress("1", "WFrame.switch_nth(_, 0)"),
  153.         kpress("2", "WFrame.switch_nth(_, 1)"),
  154.         kpress("3", "WFrame.switch_nth(_, 2)"),
  155.         kpress("4", "WFrame.switch_nth(_, 3)"),
  156.         kpress("5", "WFrame.switch_nth(_, 4)"),
  157.         kpress("6", "WFrame.switch_nth(_, 5)"),
  158.         kpress("7", "WFrame.switch_nth(_, 6)"),
  159.         kpress("8", "WFrame.switch_nth(_, 7)"),
  160.         kpress("9", "WFrame.switch_nth(_, 8)"),
  161.         kpress("0", "WFrame.switch_nth(_, 9)"),
  162.         
  163.         bdoc("Switch to next/previous object within the frame."),
  164.         kpress("N", "WFrame.switch_next(_)"),
  165.         kpress("P", "WFrame.switch_prev(_)"),
  166.         
  167.         bdoc("Move current object within the frame left/right."),
  168.         kpress("comma", "WFrame.dec_index(_, _sub)", "_sub:non-nil"),
  169.         kpress("period", "WFrame.inc_index(_, _sub)", "_sub:non-nil"),
  170.                
  171.         bdoc("Maximize the frame horizontally/vertically."),
  172.         kpress("H", "WFrame.maximize_horiz(_)"),
  173.         kpress("V", "WFrame.maximize_vert(_)"),

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

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

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

  181.     bdoc("Display frame context menu."),
  182.     kpress(MOD1.."M", "mod_menu.menu(_, _sub, 'ctxmenu')"),
  183.     mpress("Button3", "mod_menu.pmenu(_, _sub, 'ctxmenu')"),
  184.    
  185.     bdoc("Begin move/resize mode."),
  186.     kpress(MOD1.."R", "WFrame.begin_kbresize(_)"),
  187.    
  188.     bdoc("Switch the frame to display the object indicated by the tab."),
  189.     mclick("Button1@tab", "WFrame.p_switch_tab(_)"),
  190.     mclick("Button2@tab", "WFrame.p_switch_tab(_)"),
  191.    
  192.     bdoc("Resize the frame."),
  193.     mdrag("Button1@border", "WFrame.p_resize(_)"),
  194.     mdrag(MOD1.."Button3", "WFrame.p_resize(_)"),
  195.    
  196.     bdoc("Move the frame."),
  197.     mdrag(MOD1.."Button1", "WFrame.p_move(_)"),
  198.    
  199.     bdoc("Move objects between frames by dragging and dropping the tab."),
  200.     mdrag("Button1@tab", "WFrame.p_tabdrag(_)"),
  201.     mdrag("Button2@tab", "WFrame.p_tabdrag(_)"),
  202.            
  203. })


  204. -- WMoveresMode context bindings
  205. --
  206. -- WMoveresMode 事件的绑定
  207. --
  208. -- These bindings are available keyboard move/resize mode. The mode
  209. -- is activated on frames with the command begin_kbresize (bound to
  210. -- MOD1.."R" above by default).
  211. --
  212. -- 这些绑定让你可以使用键盘来移动和改变框体的大小(move/resize mode)。
  213. -- 你可以用begin_kbresize命令来进入这个移动和改变框体大小的状态。
  214. -- (默认是绑定于上面的MOD1.."R")

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

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

  220.     bdoc("Grow in specified direction."),
  221.     kpress("Left",  "WMoveresMode.resize(_, 1, 0, 0, 0)"),
  222.     kpress("Right", "WMoveresMode.resize(_, 0, 1, 0, 0)"),
  223.     kpress("Up",    "WMoveresMode.resize(_, 0, 0, 1, 0)"),
  224.     kpress("Down",  "WMoveresMode.resize(_, 0, 0, 0, 1)"),
  225.     kpress("F",     "WMoveresMode.resize(_, 1, 0, 0, 0)"),
  226.     kpress("B",     "WMoveresMode.resize(_, 0, 1, 0, 0)"),
  227.     kpress("P",     "WMoveresMode.resize(_, 0, 0, 1, 0)"),
  228.     kpress("N",     "WMoveresMode.resize(_, 0, 0, 0, 1)"),
  229.    
  230.     bdoc("Shrink in specified direction."),
  231.     kpress("Shift+Left",  "WMoveresMode.resize(_,-1, 0, 0, 0)"),
  232.     kpress("Shift+Right", "WMoveresMode.resize(_, 0,-1, 0, 0)"),
  233.     kpress("Shift+Up",    "WMoveresMode.resize(_, 0, 0,-1, 0)"),
  234.     kpress("Shift+Down",  "WMoveresMode.resize(_, 0, 0, 0,-1)"),
  235.     kpress("Shift+F",     "WMoveresMode.resize(_,-1, 0, 0, 0)"),
  236.     kpress("Shift+B",     "WMoveresMode.resize(_, 0,-1, 0, 0)"),
  237.     kpress("Shift+P",     "WMoveresMode.resize(_, 0, 0,-1, 0)"),
  238.     kpress("Shift+N",     "WMoveresMode.resize(_, 0, 0, 0,-1)"),
  239.    
  240.     bdoc("Move in specified direction."),
  241.     kpress(MOD1.."Left",  "WMoveresMode.move(_,-1, 0)"),
  242.     kpress(MOD1.."Right", "WMoveresMode.move(_, 1, 0)"),
  243.     kpress(MOD1.."Up",    "WMoveresMode.move(_, 0,-1)"),
  244.     kpress(MOD1.."Down",  "WMoveresMode.move(_, 0, 1)"),
  245.     kpress(MOD1.."F",     "WMoveresMode.move(_,-1, 0)"),
  246.     kpress(MOD1.."B",     "WMoveresMode.move(_, 1, 0)"),
  247.     kpress(MOD1.."P",     "WMoveresMode.move(_, 0,-1)"),
  248.     kpress(MOD1.."N",     "WMoveresMode.move(_, 0, 1)"),
  249. })
复制代码



cfg_menus.lua

cfg_menus.lua配置你的主菜单。

  1. --
  2. -- Ion menu definitions
  3. --
  4. -- Ion 菜单定义
  5. --


  6. -- Main menu
  7. -- 主菜单
  8. defmenu("mainmenu", {
  9.     submenu("Programs",         "appmenu"),
  10.     menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
  11.     menuentry("Help",           "mod_query.query_man(_)"),
  12.     menuentry("About Ion",      "mod_query.show_about_ion(_)"),
  13.     submenu("Styles",           "stylemenu"),
  14.     submenu("Session",          "sessionmenu"),
  15. })


  16. -- Application menu
  17. -- 程序菜单
  18. defmenu("appmenu", {
  19.     menuentry("Firefox","ioncore.exec_on(_, 'firefox')"),
  20.     menuentry("Thunderbird","ioncore.exec_on(_, 'thunderbird')"),
  21.     menuentry("Editor","ioncore.exec_on(_, 'lazy-edit')"),
  22.     menuentry("Player","ioncore.exec_on(_, 'lazy-player')"),
  23.     menuentry("FTP","ioncore.exec_on(_, 'lazy-ftp')"),
  24.     menuentry("GVim","ioncore.exec_on(_, 'gvim')"),
  25.     menuentry("Run...", "mod_query.query_exec(_)"),
  26. })


  27. -- Session control menu
  28. -- Session 控制菜单
  29. defmenu("sessionmenu", {
  30.     menuentry("Save",           "ioncore.snapshot()"),
  31.     menuentry("Restart",        "ioncore.restart()"),
  32.     menuentry("Restart PWM",    "ioncore.restart_other('pwm')"),
  33.     menuentry("Restart TWM",    "ioncore.restart_other('twm')"),
  34.     menuentry("Exit",           "ioncore.shutdown()"),
  35. })


  36. -- Context menu (frame/client window actions)
  37. -- 事件菜单 (作用于框体/窗体)
  38. defctxmenu("WFrame", {
  39.     menuentry("Close",          "WRegion.rqclose_propagate(_, _sub)"),
  40.     menuentry("Kill",           "WClientWin.kill(_sub)",
  41.                                 "_sub:WClientWin"),
  42.     menuentry("(Un)tag",        "WRegion.set_tagged(_sub, 'toggle')",
  43.                                 "_sub:non-nil"),
  44.     menuentry("Attach tagged",  "WFrame.attach_tagged(_)"),
  45.     menuentry("Clear tags",     "ioncore.clear_tags()"),
  46.     menuentry("Window info",    "mod_query.show_clientwin(_, _sub)",
  47.                                 "_sub:WClientWin"),
  48. })
复制代码


cfg_ionws.lua

cfg_ionws.lua配置工作区。

  1. --
  2. -- Ion ionws module configuration file
  3. --
  4. -- Ion的ionws模块配置文件
  5. --

  6. -- Bindings for the tiled workspaces (ionws). These should work on any
  7. -- object on the workspace.
  8. -- 用于叠覆的工作区(ionws)的热键绑定。将用于工作区中的所有实体。

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

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

  17.     bdoc("Go to frame above/below/right/left of current frame."),
  18.     kpress(MOD2.."Up", "WIonWS.goto_dir(_, 'above')"),
  19.     kpress(MOD2.."Down", "WIonWS.goto_dir(_, 'below')"),
  20.     kpress(MOD2.."Right", "WIonWS.goto_dir(_, 'right')"),
  21.     kpress(MOD2.."Left", "WIonWS.goto_dir(_, 'left')"),
  22.     submap(MOD1.."K", {
  23.         bdoc("Split current frame horizontally."),
  24.         kpress("S", "WIonWS.split_at(_, _sub, 'right', true)"),
  25.         
  26.         bdoc("Destroy current frame."),
  27.         kpress("X", "WIonWS.unsplit_at(_, _sub)"),
  28.     }),
  29. })


  30. -- Frame bindings. These work in (Ion/tiled-style) frames. Some bindings
  31. -- that are common to all frame types and multiplexes are defined in
  32. -- ion-bindings.lua.
  33. --
  34. -- 框体的热键绑定。用于(Ion/叠覆风格的)框体。
  35. -- 一些对所有框体皆用的绑定,定义于ion-bindings.lua。
  36. --

  37. --defbindings("WFrame-on-WIonWS", {
  38. --})

  39. -- WFloatFrame context menu extras
  40. -- 额外的 WFloatFrame 事件菜单

  41. if mod_menu then
  42.     defctxmenu("WIonWS", {
  43.         menuentry("Destroy frame",
  44.                   "WIonWS.unsplit_at(_, _sub)"),
  45.         menuentry("Split vertically",
  46.                   "WIonWS.split_at(_, _sub, 'bottom', true)"),
  47.         menuentry("Split horizontally",
  48.                   "WIonWS.split_at(_, _sub, 'right', true)"),
  49.         menuentry("Flip", "WIonWS.flip_at(_, _sub)"),
  50.         menuentry("Transpose", "WIonWS.transpose_at(_, _sub)"),
  51.         submenu("Float split", {
  52.             menuentry("At left",
  53.                       "WIonWS.set_floating_at(_, _sub, 'toggle', 'left')"),
  54.             menuentry("At right",
  55.                       "WIonWS.set_floating_at(_, _sub, 'toggle', 'right')"),
  56.             menuentry("Above",
  57.                       "WIonWS.set_floating_at(_, _sub, 'toggle', 'up')"),
  58.             menuentry("Below",
  59.                       "WIonWS.set_floating_at(_, _sub, 'toggle', 'down')"),
  60.         }),
  61.         submenu("At root", {
  62.             menuentry("Split vertically",
  63.                       "WIonWS.split_top(_, 'bottom')"),
  64.             menuentry("Split horizontally",
  65.                       "WIonWS.split_top(_, 'right')"),
  66.             menuentry("Flip", "WIonWS.flip_at(_)"),
  67.             menuentry("Transpose", "WIonWS.transpose_at(_)"),
  68.         }),
  69.     })
  70. end
复制代码



look.lua

look.lua设置窗体的主题。在文件末端,默认的主题被设置为:

dopath("look_xerxes")

主题的命名规则为: look_<主题名>.lua 。修改主题名,即可得到相应的主题。
发表于 2005-9-5 19:58:19 | 显示全部楼层
好东西啊,试用了以下,太好了,可能是唯一能够取代 fvwm的东西了,而且我猜想所有喜爱fvwm的朋友可能也会喜欢这个东西的,好东西要推荐给大家,建议版主置顶  :)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表