窗口平铺的按键绑定

窗口平铺的按键绑定

我的意思是,就像在 Unity 中,当你拖动一个窗口并将其粘贴到“正确的”,它首先显示一个阴影覆盖桌面的右半部分,然后当鼠标释放时窗口会覆盖该半部分。

在 LXDE 上可以做到这一点吗?不一定非要通过拖动窗口;键盘快捷键就更好了!无论如何都很好。

答案1

如果您使用的是 LXDE,则仍然取决于窗口管理器。通常的默认窗口管理器是 Openbox。Openbox 键盘技巧列在此处: http://openbox.org/wiki/Help:Actions

每个提供 LXDE 的发行版都有自己的操作列表。在 Lubuntu 13.10 中,它是使用 Openbox 作为窗口管理器的 LXDE 版本,您可以在此处进行设置:
/home/用户/.config/openbox/lubuntu-rc.xml

其中一部分可能与你相关:

<!-- Keybindings for window tiling -->
<keybind key="W-Left">        # HalfLeftScreen
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
    <x>0</x><y>0</y>
    <height>97%</height>
    <width>50%</width>
  </action>
</keybind>
<keybind key="W-Right">        # HalfRightScreen
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
    <x>-0</x><y>0</y>
    <height>97%</height>
    <width>50%</width>
  </action>
</keybind>
<keybind key="W-Up">        # HalfUpperScreen
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
    <x>0</x><y>0</y>
    <width>100%</width>
    <height>50%</height>
    </action>
</keybind>
<keybind key="W-Down">        # HalfLowerScreen
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
    <x>0</x><y>-0</y>
    <width>100%</width>
    <height>50%</height>
    </action>
</keybind>

还有一种基于鼠标的方法,但我认为默认情况下它不可用。你需要Opensnap ppa. 检查它是否适用于您的 *buntu 版本。

我不知道阴影效果。

答案2

我正在使用 LXDE,并且成功更改了〜/ .config / openbox / lxde-rc.xml使用下面的 xml。这会使半最大化(左/右)并排排列,就像在 Ms Windows 中一样。

<keybind key="W-Left">
   <action name="UnmaximizeFull"/>
   <action name="MaximizeVert"/>     
   <action name="MoveResizeTo">
      <x>0</x>
      <y>0</y>
      <width client="yes">1/2</width>
   </action>
</keybind>
<keybind key="W-Right">
   <action name="UnmaximizeFull"/>
   <action name="MaximizeVert"/>     
   <action name="MoveResizeTo">
      <x>-0</x>
      <y>0</y>
      <width client="yes">1/2</width>
   </action>
</keybind>

答案3

我创建了这个东西,它是半最大化左/右/上/下的一个更高级版本。也可以在此处查看 Gisthttps://gist.github.com/zrajm/3621cc90d9bc30d06bbe926fc8b2692a

窗口平铺的按键绑定

为了使以下代码正常工作,请将其插入到 Openbox 配置部分。在 Lubuntu 上,它被称为~/.config/openbox/lubuntu-rc.xml。要在修改配置后重新加载配置,您可以注销并再次登录,或运行以下命令:

openbox --reconfigure

如何使用它

Windows 键 + 箭头:将窗口调整为半屏。组合键(例如 Windows-Up 后跟 Windows-Left)可用于将窗口调整为四分之一屏。同方向按两次(例如 Windows-Right + Windows-Right)可最大化窗口。

窗口空间:切换窗口装饰/边框(即打开/关闭标题栏、关闭按钮等)。为了真正实现屏幕最大化,您可能还想删除每个窗口周围的一个像素边框,但这只能通过将其放入您的 openbox 配置<keepBorder>no</keepBorder>中来实现<theme>。(遗憾的是,它无法为每个单独的窗口切换,至少在 Openbox 3.6.1 上不行。)即使关闭装饰,通常的键绑定 Alt-F4 关闭,Alt + 鼠标拖动等仍然有效。

怪癖

终端(或许还有其他?)窗口会逐步调整大小(步长取决于窗口中使用的字体大小)。这些窗口可能无法完全填满屏幕的预期部分,从而在窗口之间留下空隙。以下代码尝试通过两种方式最小化此问题:

首先:我将终端窗口缩放到屏幕的 50.5%,而不是预期的 50%。(实际上,出于语法原因,我使用分数“101/200”,但您明白我的意思。)这似乎对我有用(导致我的终端有时会稍微超出屏幕范围)。在下面搜索“x-terminal-emulator”以了解如何完成此操作。

第二:为了减少窗口之间间隙带来的烦恼,我将窗口放置在屏幕边缘,而不是窗口之间。如果您已将窗口管理器设置为在鼠标指针进入窗口时升起窗口,那么希望这样做会造成最小的干扰。由于窗口之间没有间隙,因此在将指针移动到窗口之间时,您不会意外进入背景窗口(导致背景窗口突然升到顶部)。(缺点是,如果您习惯将指针推到屏幕边缘以使其不碍事,那么您可能会以这种方式意外升起背景窗口。)实际上没有办法解决这个问题,只能权衡利弊。如果您不喜欢我喜欢的行为,下面的代码中有注释可以帮助您更改它。只需搜索包含“在屏幕边缘”的注释,然后启用之前带注释的代码(需要在四个地方进行更改,每个箭头键一个)。

    <!-- Windows-Space: Toggle window decorations. -->
    <keybind key="W-space">
      <action name="ToggleDecorations"/>
    </keybind>
    <!-- Windows-Left: Left half of screen. -->
    <keybind key="W-Left">
      <action name="Raise"/>
      <action name="If"><query target="default">
        <maximized>no</maximized>
        <maximizedvertical>yes</maximizedvertical>
      </query><then>
        <!-- Only vertically maximized: Maximize completely. -->
        <action name="Maximize"/>
      </then><else>
        <action name="If"><query target="default">
          <maximizedhorizontal>no</maximizedhorizontal>
        </query><then>
          <!-- Not horizontally maximized: Maximize vertically. -->
          <action name="Maximize"><direction>vertical</direction></action>
        </then></action>
        <!-- Halve window width. -->
        <action name="Unmaximize"><direction>horizontal</direction></action>
        <action name="If">
          <query target="default"><name>x-terminal-emulator</name></query>
          <then><action name="MoveResizeTo"><width client="yes">101/200</width></action></then>
          <else><action name="MoveResizeTo"><width client="yes">1/2</width></action></else>
        </action>
        <!-- Put on left half of screen. -->
        <action name="MoveResizeTo">
          <x client="yes">-50%</x>     <!-- right edge at screen midpoint -->
          <!--x client="yes">0</x-->   <!-- left  edge at screen edge     -->
        </action>
      </else></action>
    </keybind>
    <!-- Windows-Right: Right half screen. -->
    <keybind key="W-Right">
      <action name="Raise"/>
      <action name="If"><query target="default">
        <maximized>no</maximized>
        <maximizedvertical>yes</maximizedvertical>
      </query><then>
        <!-- Only vertically maximized: Maximize completely. -->
        <action name="Maximize"/>
      </then><else>
        <action name="If"><query target="default">
          <maximizedhorizontal>no</maximizedhorizontal>
        </query><then>
          <!-- Not horizontally maximized: Maximize vertically. -->
          <action name="Maximize"><direction>vertical</direction></action>
        </then></action>
        <!-- Halve window width. -->
        <action name="Unmaximize"><direction>horizontal</direction></action>
        <action name="If">
          <query target="default"><name>x-terminal-emulator</name></query>
          <then><action name="MoveResizeTo"><width client="yes">101/200</width></action></then>
          <else><action name="MoveResizeTo"><width client="yes">1/2</width></action></else>
        </action>
        <!-- Put on right half of screen. -->
        <action name="MoveResizeTo">
          <x client="yes">50%</x>      <!-- left  edge at screen midpoint -->
          <!--x client="yes">-0</x-->  <!-- right edge at screen edge     -->
        </action>
      </else></action>
    </keybind>
    <!-- Windows-Up: Upper half of screen. -->
    <keybind key="W-Up">
      <action name="Raise"/>
      <action name="If"><query target="default">
        <maximized>no</maximized>
        <maximizedhorizontal>yes</maximizedhorizontal>
      </query><then>
        <!-- Only horizontally maximized: Maximize completely. -->
        <action name="Maximize"/>
      </then><else>
        <action name="If"><query target="default">
          <maximizedvertical>no</maximizedvertical>
        </query><then>
          <!-- Not vertically maximized: Maximize horizontally. -->
          <action name="Maximize"><direction>horizontal</direction></action>
        </then></action>
        <!-- Halve window height. -->
        <action name="Unmaximize"><direction>vertical</direction></action>
        <action name="If">
          <query target="default"><name>x-terminal-emulator</name></query>
          <then><action name="MoveResizeTo"><height client="yes">101/200</height></action></then>
          <else><action name="MoveResizeTo"><height client="yes">1/2</height></action></else>
        </action>
        <!-- Put on upper half of screen. -->
        <action name="MoveResizeTo">
          <y client="yes">-50%</y>     <!-- bottom edge at screen midpoint -->
          <!--x client="yes">0</x-->   <!-- top    edge at screen edge     -->
        </action>
      </else></action>
    </keybind>
    <!-- Windows-Down: Lower half of screen. -->
    <keybind key="W-Down">
      <action name="Raise"/>
      <action name="If"><query target="default">
        <maximized>no</maximized>
        <maximizedhorizontal>yes</maximizedhorizontal>
      </query><then>
        <!-- Only horizontally maximized: Maximize completely. -->
        <action name="Maximize"/>
      </then><else>
        <action name="If"><query target="default">
          <maximizedvertical>no</maximizedvertical>
        </query><then>
          <!-- Not vertically maximized: Maximize horizontally. -->
          <action name="Maximize"><direction>horizontal</direction></action>
        </then></action>
        <!-- Halve window height. -->
        <action name="Unmaximize"><direction>vertical</direction></action>
        <action name="If">
          <query target="default"><name>x-terminal-emulator</name></query>
          <then><action name="MoveResizeTo"><height client="yes">101/200</height></action></then>
          <else><action name="MoveResizeTo"><height client="yes">1/2</height></action></else>
        </action>
        <!-- Put on lower half of screen. -->
        <action name="MoveResizeTo">
          <y client="yes">50%</y>      <!-- top    edge at screen midpoint -->
          <!--x client="yes">-0</x-->  <!-- bottom edge at screen edge     -->
        </action>
      </else></action>
    </keybind>

相关内容