Как изменить имя рабочей области Compiz из командной строки?

Я использую плагин Именования Рабочей области Compiz, и я могу изменить имена рабочей области через ccsm очень хорошо прямо сейчас. Однако я хотел бы смочь изменить имя активной рабочей области из командной строки, не имея необходимость запускать ccsm и перемещаться по меню.

Я раньше мог сделать это использование wnck и эту функцию в моем bashrc:

function wsname {
  python -c "import wnck; s = wnck.screen_get_default(); s.force_update();\
    s.get_active_workspace().change_name('$*')"
}
1
задан 22 May 2014 в 23:57

1 ответ

Я выяснил, что имена могут быть определены с помощью

gsettings set org.compiz.workspacenames:/org/compiz/profiles/unity/plugins/workspacenames/ names [\"Name1\",\"Name3\"]
gsettings set org.compiz.workspacenames:/org/compiz/profiles/unity/plugins/workspacenames/ viewports [1,3]

Таким образом, я записал сценарий Python, чтобы сделать то, что я хотел:

#!/usr/bin/python
import sys
from subprocess import Popen, PIPE

getoutput = lambda x: Popen(x, stdout=PIPE).communicate()[0]
listIntOutput = lambda x: "[%s]" % ",".join([str(i) for i in x])
listStrOutput = lambda x: "[%s]" % ",".join(["\"%s\"" % s for s in x])
SCHEMA = \
  "org.compiz.workspacenames:/org/compiz/profiles/unity/plugins/workspacenames/"

if len(sys.argv) < 2:
  name = ""
else:
  name = " ".join(sys.argv[1:])

# get the position of the current workspace
ws = list(int(i.strip(",")) for i in  getoutput(("xprop", "-root",
    "-notype", "_NET_DESKTOP_VIEWPORT")).split()[-2:])
# get the number of horizontal and vertical workspaces
hsize = int(getoutput(("gconftool",
    "--get", "/apps/compiz-1/general/screen0/options/hsize")))
vsize = int(getoutput(("gconftool",
    "--get", "/apps/compiz-1/general/screen0/options/vsize")))
# get the dimentions of a single workspace
x, y = list(int(i) for i in getoutput(("xwininfo", "-root",
    "-stats", )).split("geometry ")[1].split("+")[0].split("x"))
# enumerate workspaces
workspaces, n = [], 0
for j in range(vsize):
    for i in range(hsize):
        workspaces.append([n, [x*i, y*j, ], ])
        n += 1
# Get the (1-indexed) viewport #
vp = list(i for i in workspaces if i[1] == ws)[0][0] + 1

# Get the current named viewports
vps = eval(getoutput(("gsettings", "get", SCHEMA, "viewports")));
names = eval(getoutput(("gsettings", "get", SCHEMA, "names")));

if vp not in vps:
  # If this viewport is not yet named, then just append it.
  vps.append(vp)
  names.append(name)
  getoutput(("gsettings", "set", SCHEMA, "viewports", listIntOutput(vps)));
  getoutput(("gsettings", "set", SCHEMA, "names", listStrOutput(names)));
else:
  # Rename the viewport.
  index = vps.index(vp)
  names[index] = name
  getoutput(("gsettings", "set", SCHEMA, "names", listStrOutput(names)));

Базирующийся прочь этого сценария: https://askubuntu.com/a/17492/284331

Один протест, с которым я столкнулся, является этим

gconftool --get /apps/compiz-1/general/screen0/options/hsize # and vsize

не возвращал правильные значения, которые я установил в ccsm, таким образом, я должен был вручную установить их отдельно для сценария для работы.

gconftool --set /apps/compiz-1/general/screen0/options/hsize #
gconftool --set /apps/compiz-1/general/screen0/options/vsize #
2
ответ дан 11 November 2019 в 09:37

Другие вопросы по тегам:

Похожие вопросы: