LINUX.ORG.RU

универсальный wm-независимый именованный scratchpad...

 , , , ,


0

1

Вобщем написал вот такую штуку:

#!/bin/bash

X=200
Y=200
W=100
H=30
COMMAND="$SHELL"

if [ -n "$1" ]
then
    SNAME="$1";

    if [ -n "$2" ]
    then
        COMMAND="$2";
        
        if [ -n "$3" ]
        then
            X="$3";

            if [ -n "$4" ]
            then
                Y="$4";
                
                if [ -n "$5" ]
                then
                    W="$5";

                    if [ -n "$6" ]
                    then
                        H="$6";
                    fi
                fi
            fi
        fi
    fi
else
    SNAME="";
fi

PATNAME="'\*-scratch-${SNAME}\*'";
TERMNAME="'*-scratch-${SNAME}*'";

SW=`xdotool search --classname ${PATNAME}`;
if [ -z "$SW" ]
then
    urxvtc -name ${TERMNAME} -g "${W}x${H}+${X}+${Y}" -e "${COMMAND}";
    wmctrl -x -r ${TERMNAME} -b toggle,above
else

    SWN=`xdotool search --onlyvisible --classname ${PATNAME}`;
    if [ -n "$SWN" ]
    then
        xdotool windowminimize "$SWN";
        xdotool windowunmap "$SWN";
        xdotool getactivewindow windowraise
    else
        xdotool windowmap "$SW";
        xdotool windowraise "$SW" windowsize --usehints "$SW" "$W" "$H" windowmove "$SW" "$X" "$Y";
    fi

fi
Использовать так:
scratch.sh NAME [command] [X] [Y] [WIDTH] [HEIGHT] 
Можно повесить на хоткей в вашем любимом WM. Требует wmctrl и xdotool.
Критика, замечания, фичреквесты, исправления, патчи ??? :)

// Хотя не, наврал. В тайловых WM не будет работать( у меня в xmonad окно всёравно разворачивается на весь экран)... Надо что-то придумать по этому поводу. Хотя чё тут придумывать пользователи тайлинга пусть в конфигах флоат прописывают.

★★★★★

Последнее исправление: Bad_ptr (всего исправлений: 8)

Блин, я всё понимаю: Ъ читают сорцы вместо манов. Но всё-таки.

geekless ★★
()

У меня искаропки, но применения так и не нашёл.

Dragon59 ★★
()

Немного доработал :). + wmctrl теперь не нужен.

#!/bin/bash

X=200
Y=200
W=100
H=30
COMMAND="$SHELL"

if [ -n "$1" ]
then
    SNAME="$1";

    if [ -n "$2" ]
    then
        COMMAND="$2";
        
        if [ -n "$3" ]
        then
            X="$3";

            if [ -n "$4" ]
            then
                Y="$4";
                
                if [ -n "$5" ]
                then
                    W="$5";

                    if [ -n "$6" ]
                    then
                        H="$6";
                    fi
                fi
            fi
        fi
    fi
else
    SNAME="";
fi

PATNAME="'\*-scratch-${SNAME}\*'";
TERMNAME="'*-scratch-${SNAME}*'";

SW=`xdotool search --classname ${PATNAME}`;
if [ -z "$SW" ]
then
    urxvtc -name ${TERMNAME} -g "${W}x${H}+${X}+${Y}" -e "${COMMAND}";
    SW=`xdotool search --classname ${PATNAME}`;
    xdotool windowunmap "$SW";
    xprop -id "$SW" -f _NET_WM_WINDOW_TYPE 32a -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_DIALOG
    xprop -id "$SW" -f WM_WINDOW_ROLE 8s -set WM_WINDOW_ROLE '*-scratch-*'
    xprop -id "$SW" -f _NET_WM_STATE 32a -set _NET_WM_STATE _NET_WM_STATE_ABOVE
    #wmctrl -x -r ${TERMNAME} -b toggle,above
    #wmctrl -x -r ${TERMNAME} -b remove,maximized_vert,maximized_horz
    xdotool windowraise "$SW" windowsize --usehints "$SW" "$W" "$H" windowmove "$SW" "$X" "$Y";
    xdotool windowmap "$SW";
    #wmctrl -x -r ${TERMNAME} -e 0,"$X,$Y,$W,$H";
else

    SWN=`xdotool search --onlyvisible --classname ${PATNAME}`;
    if [ -n "$SWN" ]
    then
        xdotool windowminimize "$SWN";
        xdotool windowunmap "$SWN";
        xdotool getactivewindow windowraise
    else
        xdotool windowmap "$SW";
        xdotool windowraise "$SW" windowsize --usehints "$SW" "$W" "$H" windowmove "$SW" "$X" "$Y";
    fi

fi

Bad_ptr ★★★★★
() автор топика

В тайловых WM не будет работать

ага, только хотел написать об этом

Хотя чё тут придумывать пользователи тайлинга пусть в конфигах флоат прописывают.

есть wm, в которых float только для отдельных воркспейсов :)

lazyklimm ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.