Имеете urxvt «липкую оболочку» с fluxbox?

610
Levans

Я пытаюсь привязать оболочку к ключу на моем 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]  [Layer]  [Position] (WINCENTER)  [Deco]  [Tab]  [FocusNewWindow]  [Sticky]  [end] 

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

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

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

1
Вы хотите спросить, можно ли свернуть окно с помощью команды fluxbox из сценария оболочки (или ~ / .fluxbox / keys)? Что-то более экзотическое? Вам нужен снаряд, чтобы остаться в живых после смерти Fluxbox? Ярослав Рахматуллин 11 лет назад 0
@ ЯрославРахматуллин, если команда fluxbox в `.fluxbox / keys` может свернуть или развернуть конкретное окно, это будет именно то, что я ищу, и пока не нашла. Мне все равно, умирает ли оболочка с Fluxbox. Levans 11 лет назад 0

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/ ' 

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

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

  1. не допускайте, чтобы выходные данные программы имели ширину x символов или длину y строк.
  2. длинные регулярные выражения (более строгие) почти всегда лучше коротких.
Спасибо, я попробую это. Я думаю, с помощью `wmctrl -l` я смогу справиться с ситуациями, когда я по ошибке убил оболочку (` ^ D` получается так легко ..). Просто будучи любопытным, как вещи, которые ты упоминаешь, могут быть улучшены в моем подходе? Levans 11 лет назад 0

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