用于扩展 Gnome-Classic 14.04 版应用程序菜单的键?

用于扩展 Gnome-Classic 14.04 版应用程序菜单的键?
  1. 在 14.04 版的 Gnome-Classic (metacity) 中,

    • 是否有一个键可以调用应用程序菜单?
    • 是否有一个键可以在顶部面板上的项目之间切换,例如应用程序菜单、位置、无线图标、电池、时间、关机/暂停/注销/锁定菜单等?
  2. 如果可能的话,我该如何添加应用程序菜单的键?

    要添加一个用于调出应用程序菜单的键,执行该操作的命令是什么?

  3. 不同于https://askubuntu.com/a/133915/1471,就我的情况而言,没有应用程序菜单的键。

    我的 14.04 附带 compiz+unity,然后我安装了 metacity+gnomeclassic。它们是否共享相同的键盘设置?这就是我没有应用程序菜单键的原因吗?

    在此处输入图片描述

谢谢!

答案1

使用一个粗略的解决方法,它可以做得很好。使用xdotool,您可以让它将鼠标移动到应用程序菜单的位置,打开它并自动移回其原始位置。

由于一切都发生得非常快鼠标移回原来的位置,你不会注意到它。

在此处输入图片描述

脚本假设您的应用程序菜单位于左上角,如上图所示。如果不是这样,则cmd1必须更改坐标。

#!/usr/bin/env python3
import subprocess
import time

cursordata = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()
loc = [d.split(":")[1] for d in cursordata[:2]]
cmd1 = "xdotool mousemove 10 5"; cmd2 = "xdotool click 1"; cmd3 = "xdotool mousemove "+(" ").join(loc)
for cmd in [cmd1, cmd2, cmd3]:
    subprocess.Popen(["/bin/bash", "-c", cmd])
    time.sleep(0.05)

详细地:

获取当前鼠标位置:

cursordata = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()

将输出 (x/y) 解析为坐标:

loc = [d.split(":")[1] for d in cursordata[:2]]

[cmd1, cmd2, cmd3]随后运行命令:

  • 将鼠标移到应用程序菜单
  • 点击
  • 将鼠标移回原来的位置
for cmd in [cmd1, cmd2, cmd3]:
    subprocess.Popen(["/bin/bash", "-c", cmd])
    time.sleep(0.05)

如何使用脚本

  1. 安装xdotool

    sudo apt-get install xdotool
    
  2. 将脚本粘贴到空文件中,另存为open_appmenu.py

  3. 使用以下命令进行测试运行:

    python3 /path/to/open_appmenu.py
    
  4. 如果一切正常,将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/open_appmenu.py
    

移至其他项目

打开应用程序菜单后,您只需使用箭头键切换到下一个项目。


编辑:通用版本

下面是一个可以灵活使用的脚本版本,点击屏幕上任何位置,可以轻松更改。该脚本可以使用两个选项运行:

  1. (记住)当前鼠标的位置:

    run_click -set
    
  2. 点击最后记住的位置:

    run_click -run
    

如果未设置位置,则会出现 zenity 消息,邀请设置位置:

在此处输入图片描述

该脚本创建一个隐藏文件;~/.run_click其中存储最新记住的坐标。

作为测试,我将两个命令都放在组合键下:Ctrl+ Alt+RCtrl+ Alt+ A,这样可以轻松地当场更改点击位置。

如何设置

  1. 像第一个脚本一样,安装xdotool

    sudo apt-get install xdotool
    
  2. 将下面的脚本复制到一个空文件中,将其保存为run_click(无扩展名)~/bin(如有必要,请创建目录)并使脚本可执行

  3. 如果您刚刚创建~/bin,请运行source ~/.profile
  4. 首先测试两个命令,run_click -set然后run_click -run查看是否一切按预期工作。
  5. 将两个命令添加到两个不同的组合键中:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令。

剧本

#!/usr/bin/env python3
import subprocess
import time
import sys
import os

option = sys.argv[1]
datafile = os.path.join(os.environ["HOME"], ".run_click")

def get_mousepos():
    cursordata = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()
    return [d.split(":")[1] for d in cursordata[:2]]

if option == "-run":
    try:
        data = open(datafile).read()
        coords = (" ").join([l for l in data.splitlines()])
    except FileNotFoundError:
        message = "Please run the command: 'run_click -set' first, to set the click position"
        subprocess.Popen(["zenity", "--info", "--text", message])
    else:
        cmd1 = "xdotool mousemove "+coords; cmd2 = "xdotool click 1"; cmd3 = "xdotool mousemove "+(" ").join(get_mousepos())
        for cmd in [cmd1, cmd2, cmd3]:
            subprocess.Popen(["/bin/bash", "-c", cmd])
            time.sleep(0.05)
elif option == "-set":
    open(datafile, "wt").write(("\n").join(get_mousepos()))

相关内容