1

Я пытаюсь привязать оболочку к ключу на моем gentoo fluxbox. Идея состоит в том, чтобы иметь оболочку, которая бы показывала или скрывала каждый раз, когда я F11 , но сохраняла одну и ту же оболочку, а не создавала новую каждый раз.

На данный момент мне как-то удалось это сделать.

Я вставил свои .fluxbox/keys :

F11 :ExecCommand /home/me/script/toogle-sticky-shell

где вызываемый скрипт просто:

##!/bin/sh
pid=$(ps -ef | grep surxv | head -n -1 | head -c 14 | tail -c 5)
if [ $pid ]
    kill $pid
else
    urxvt -name surxvt -e screen -RD StickyShell &
fi

И адаптировал мои .fluxbox/apps с помощью:

[app] (name=surxvt)
  [Hidden]  {yes}
  [Layer]   {2}
  [Position]    (WINCENTER) {0 0}
  [Deco]    {BORDER}
  [Tab]     {no}
  [FocusNewWindow] {yes}
  [Sticky]  {yes}
[end]

Таким образом, в основном, чтобы сохранить мою оболочку, я использую screen . Но я чувствую, что это не «чистое» решение.

Итак, мой вопрос: есть ли более чистый способ добиться этого?

Например, возможно ли выборочно скрыть / показать окно с Fluxbox нажатием клавиши?

1 ответ1

2
  1. Установить wmctrl

    x11-misc/wmctrl
      Homepage:     http://tomas.styblo.name/wmctrl/
      Description:  command line tool to interact with an EWMH/NetWM compatible
                    X Window Manager
    
  2. Запустите "именованный" терминал

    urxvt -name moo

  3. Напишите свой скрипт для минимизации, используя

    wmctrl -x -r moo.URxvt -b toggle,hidden

  4. и позвоните, если из файла ключей.

    F11 :ExecCommand /home/me/script/toogle-hidden moo

Если вам нужны дополнительные советы, я буду рад помочь.


Кстати, я не думаю, что ваш предыдущий подход плох. Помимо того, как вы находите pid и некоторые предупреждения (некритические), в этом нет ничего плохого.


Обновить:

Отказ от экрана на самом деле не является проблемой, потому что вы можете сделать прокрутку (в режиме копирования, нажав ^ A + [) и потому что X может быть достигнуто путем установки DISPLAY. Некоторые люди заставят вас поверить, что tmux - следующая лучшая вещь для просветления, но я склонен списывать их, как я делаю с фанатами Zsh ...

Другое дело несостоятельно, потому что вы ищете pid с определенными смещениями строк (head -c) и потому что ключевое слово grep обязательно даст вам неправильный pid (несколько строк) в какой-то момент. например:

$ ps -ef | grep moo
jaroslav 20089     1  0 Jul23 ?       00:00:00 SCREEN -dR moo
jaroslav 26545 26420  0 08:21 pts/10  00:00:01 rxvt-unicode -name moo
jaroslav 27702 26981  0 08:52 pts/12  00:00:00 /usr/bin/perl /usr/bin/cowsay moo
jaroslav 27704 26771  0 08:52 pts/7   00:00:00 grep --colour=auto moo

Это убило бы экран, а не эмулятор терминала. "Небезопасно" предполагать, что ps производит определенное количество строк или что некоторые столбцы имеют заданную ширину (я думаю, что вы предполагали 3 строки с заголовками и 14 символов для первых двух столбцов).

Я бы пошел с чем-то вроде этого вместо:

ps `pidof rxvt-unicode` | grep -m1 -e '-nam[e] moo' | awk '{ print $1 }'

или же

ps ax  | awk '$0 ~ /rxvt-unicode.*-nam[e] moo/ {print $1; exit}'

С обоими из них, по крайней мере, я вполне уверен, что pid принадлежит терминалу rxvt, который был запущен с -name moo в качестве двух аргументов. И абсолютно уверен, что на выходе будет максимум один пид. -Nam [e] - старый трюк, чтобы избежать совпадения с ps | grep Команда grep в выводе.

Все это придирки ... Эмпирические правила есть.

  1. не допускайте, чтобы выходные данные программы имели ширину x символов или длину y строк.
  2. длинные регулярные выражения (более строгие) почти всегда лучше коротких.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .