lee wrote:
> Michael Großer <[email protected]> writes:
>> When I switch to another cluster, desk or page, I usually use the keybord.
>> Rarely, I click with the mouse into the second pager to go to another
>> page, but 99,9% of my time I use the keyboard.
>>
>> Often, I use <Win>+<Space> to pin a window to be able to move it to
>> another cluster, desk or page.
>>
>> When I debug a test session, I can use a desk bookmark. Mostly,
>> I bookmark cluster 6, desk 1, page 3 to the minus key of the numeric keypad
>> and cluster 6, desk 8, any page to the plus key of the numeric keypad.
>> Then, I press minus to step to the next test step and I press plus
>> to step to the source code that controls the automated test.
>
> Oh, how do you do that? I'd find that very useful because MOTT, I'm
> switching back and forth between two particular pages.
This is the include file that manages the plus / minus key feature:
0022_plus_minus.fvwm
It comes without any comments.
I wrote it in March 2016.
It uses a function named 'GotoPageExtra', which you can find here:
0006b_desktop_switching.fvwm
My two pagers are defined here:
0006_pagers.fvwm
If you still want to study something of my config,
here are my keyboard bindings:
0003_simple_keyboard_bindings.fvwm
And here are the mouse bindings:
0004_simple_mouse_bindings.fvwm
For more stuff, please ask.
Best regards,
Michael
# Bookmarks via <plus> and <minus>
Key KP_Multiply A 4 enable_plus_minus_bookmarks_soft
DestroyFunc enable_plus_minus_bookmarks_soft
AddToFunc enable_plus_minus_bookmarks_soft
+ I Key KP_Add A N use_bookmark_plus_soft
+ I Key KP_Subtract A N use_bookmark_minus_soft
Key KP_Multiply A S4 enable_plus_minus_bookmarks_hard
DestroyFunc enable_plus_minus_bookmarks_hard
AddToFunc enable_plus_minus_bookmarks_hard
+ I Key KP_Add A N use_bookmark_plus_hard
+ I Key KP_Subtract A N use_bookmark_minus_hard
Key KP_Divide A 4 disable_plus_minus_bookmarks
DestroyFunc disable_plus_minus_bookmarks
AddToFunc disable_plus_minus_bookmarks
+ I Key KP_Add A N -
+ I Key KP_Subtract A N -
DestroyFunc use_bookmark_plus_soft
AddToFunc use_bookmark_plus_soft
+ I GotoDeskAndPageExtraAbsolute $[PLUS_MINUS_BOOKMARK_PLUS_DESK]
DestroyFunc use_bookmark_plus_hard
AddToFunc use_bookmark_plus_hard
+ I GotoDeskAndPageExtraAbsolute $[PLUS_MINUS_BOOKMARK_PLUS_DESK]
+ I GotoPageExtra $[PLUS_MINUS_BOOKMARK_PLUS_PAGE_X]
$[PLUS_MINUS_BOOKMARK_PLUS_PAGE_Y]
DestroyFunc use_bookmark_minus_soft
AddToFunc use_bookmark_minus_soft
+ I GotoDeskAndPageExtraAbsolute $[PLUS_MINUS_BOOKMARK_MINUS_DESK]
DestroyFunc use_bookmark_minus_hard
AddToFunc use_bookmark_minus_hard
+ I GotoDeskAndPageExtraAbsolute $[PLUS_MINUS_BOOKMARK_MINUS_DESK]
+ I GotoPageExtra $[PLUS_MINUS_BOOKMARK_MINUS_PAGE_X]
$[PLUS_MINUS_BOOKMARK_MINUS_PAGE_Y]
Key KP_Add A 4 set_bookmark_plus
DestroyFunc set_bookmark_plus
AddToFunc set_bookmark_plus
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_DESK $[desk.n]
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_PAGE_X $[page.nx]
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_PAGE_Y $[page.ny]
Key KP_Subtract A 4 set_bookmark_minus
DestroyFunc set_bookmark_minus
AddToFunc set_bookmark_minus
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_DESK $[desk.n]
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_PAGE_X $[page.nx]
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_PAGE_Y $[page.ny]
AddToFunc StartFunction
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_DESK 0
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_PAGE_X 0
+ I SetEnv PLUS_MINUS_BOOKMARK_PLUS_PAGE_Y 0
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_DESK 0
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_PAGE_X 0
+ I SetEnv PLUS_MINUS_BOOKMARK_MINUS_PAGE_Y 0
# direct jump to a viewport
Key F1 A 4 GotoPageExtra 0 0
Key F2 A 4 GotoPageExtra 1 0
Key F3 A 4 GotoPageExtra 2 0
Key F4 A 4 GotoPageExtra 3 0
Key F5 A 4 GotoPageExtra 0 1
Key F6 A 4 GotoPageExtra 1 1
Key F7 A 4 GotoPageExtra 2 1
Key F8 A 4 GotoPageExtra 3 1
Key F9 A 4 GotoPageExtra 0 2
Key F10 A 4 GotoPageExtra 1 2
Key F11 A 4 GotoPageExtra 2 2
Key F12 A 4 GotoPageExtra 3 2
# direct jump to a desktop
Key F1 A S4 GotoDeskAndPageExtraRelative 0
Key F2 A S4 GotoDeskAndPageExtraRelative 1
Key F3 A S4 GotoDeskAndPageExtraRelative 2
Key F4 A S4 GotoDeskAndPageExtraRelative 3
Key F5 A S4 GotoDeskAndPageExtraRelative 4
Key F6 A S4 GotoDeskAndPageExtraRelative 5
Key F7 A S4 GotoDeskAndPageExtraRelative 6
Key F8 A S4 GotoDeskAndPageExtraRelative 7
Key F9 A S4 GotoDeskAndPageExtraRelative 8
Key F10 A S4 GotoDeskAndPageExtraRelative 9
Key F11 A S4 GotoDeskAndPageExtraRelative 10
Key F12 A S4 GotoDeskAndPageExtraRelative 11
# direct jump to a layer
Key F1 A S4M GotoLayerExtraAbsoluteExpand 0
Key F2 A S4M GotoLayerExtraAbsoluteExpand 1
Key F3 A S4M GotoLayerExtraAbsoluteExpand 2
Key F4 A S4M GotoLayerExtraAbsoluteExpand 3
Key F5 A S4M GotoLayerExtraAbsoluteExpand 4
Key F6 A S4M GotoLayerExtraAbsoluteExpand 5
# relative jump to a viewport
Key Left A 4 GotoPage wrapx wrapy -1p 0p
Key Right A 4 GotoPage wrapx wrapy +1p 0p
Key Up A 4 GotoPage wrapx wrapy 0p -1p
Key Down A 4 GotoPage wrapx wrapy 0p +1p
# relative jump to a viewport (second alternative)
Key Left A C4 Scroll -100000 +0
Key Right A C4 Scroll +100000 +0
Key Up A C4 Scroll +0 -100000
Key Down A C4 Scroll +0 +100000
# relative jump to a desktop
Key Left A S4 GotoDeskExtraRelative -1
Key Right A S4 GotoDeskExtraRelative 1
Key Up A S4 GotoRowExtraRelative -1
Key Down A S4 GotoRowExtraRelative 1
# relative jump to a desktop (second alternative)
Key Left A SC4 GotoDeskExtraRelativeControl -1
Key Right A SC4 GotoDeskExtraRelativeControl 1
Key Up A SC4 GotoDeskExtraRelativeControl -4
Key Down A SC4 GotoDeskExtraRelativeControl 4
# jump between layer 1 (1-12), layer 2 (13-24) and layer 3 (25-36)
Key Page_Up A S4 GotoLayerExtraRelative -1
Key Page_Down A S4 GotoLayerExtraRelative 1
Key Home A S4 GotoLayerExtraAbsolute 0
Key End A S4 GotoLayerExtraAbsolute 100
# initialize the page memory of the desktops
AddToFunc StartFunction
+ I PipeRead 'for LOOP in `seq 0 71`;\
do\
if [ "$LOOP" -lt "10" ];\
then LOOP="0${LOOP}";\
fi;\
echo "SetEnv VP_Desk${LOOP}_X 0";\
echo "SetEnv VP_Desk${LOOP}_Y 0";\
done'
### Exceptions:
+ I SetEnv VP_Desk11_X 3
+ I SetEnv VP_Desk11_Y 2
+ I SetEnv VP_Desk23_X 3
+ I SetEnv VP_Desk23_Y 2
+ I SetEnv VP_Desk35_X 3
+ I SetEnv VP_Desk35_Y 2
### Remainder:
+ I SetEnv VP_Current_X 0
+ I SetEnv VP_Current_Y 0
+ I SetEnv VP_TIME_ELAPSED_FOR_DESKTOP 0
# initialize the desktop memory of the rows
AddToFunc StartFunction
# official rows
+ I SetEnv Desk_Row0 0
+ I SetEnv Desk_Row1 4
+ I SetEnv Desk_Row2 11
+ I SetEnv Desk_Row3 12
+ I SetEnv Desk_Row4 16
+ I SetEnv Desk_Row5 23
+ I SetEnv Desk_Row6 24
+ I SetEnv Desk_Row7 28
+ I SetEnv Desk_Row8 35
# hidden rows
+ I SetEnv Desk_Row9 36
+ I SetEnv Desk_Row10 40
+ I SetEnv Desk_Row11 44
+ I SetEnv Desk_Row12 48
+ I SetEnv Desk_Row13 52
+ I SetEnv Desk_Row14 56
+ I SetEnv Desk_Row15 60
+ I SetEnv Desk_Row16 64
+ I SetEnv Desk_Row17 68
# current
+ I SetEnv Desk_Current 0
# initialize the row memory of the layers
AddToFunc StartFunction
+ I SetEnv Row_Layer0 0
+ I SetEnv Row_Layer1 3
+ I SetEnv Row_Layer2 8
+ I SetEnv Row_Layer3 9
+ I SetEnv Row_Layer4 12
+ I SetEnv Row_Layer5 15
+ I SetEnv Row_Current 0
# initialize the current layer
+ I SetEnv CURRENT_LAYER 0
+ I SetEnv LAYER_MAX 2
DestroyFunc GotoPageExtra
AddToFunc GotoPageExtra
+ I GotoPage $0 $1
DestroyFunc GotoDeskExtraRelative
AddToFunc GotoDeskExtraRelative
+ I SetEnv SUMMAND $0
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I detect_current_layer
+ I PipeRead 'RESULT=`echo "scale=0; ((${CURRENT_DESKTOP}+${SUMMAND}+4)%4) +
${Row_Current}*4" | bc`;\
echo "SetEnv DESTINATION_DESKTOP ${RESULT}"'
+ I read_page $[DESTINATION_DESKTOP]
+ I GotoDeskAndPage $[DESTINATION_DESKTOP] $[VP_Current_X] $[VP_Current_Y]
DestroyFunc GotoDeskExtraRelativeControl
AddToFunc GotoDeskExtraRelativeControl
+ I SetEnv SUMMAND $0
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I detect_current_layer
+ I PipeRead 'RESULT=`echo "scale=0; ((${CURRENT_DESKTOP}+${SUMMAND}+12)%12) +
${CURRENT_LAYER}*12" | bc`;\
echo "SetEnv DESTINATION_DESKTOP ${RESULT}"'
+ I read_page $[DESTINATION_DESKTOP]
+ I GotoDeskAndPage $[DESTINATION_DESKTOP] $[VP_Current_X] $[VP_Current_Y]
DestroyFunc GotoRowExtraRelative
AddToFunc GotoRowExtraRelative
+ I SetEnv SUMMAND $0
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I detect_current_layer
+ I PipeRead 'RESULT=`echo "scale=0; ((${CURRENT_DESKTOP}/4+${SUMMAND}+3)%3) +
${CURRENT_LAYER}*3" | bc`;\
echo "SetEnv DESTINATION_ROW ${RESULT}"'
+ I read_desk $[DESTINATION_ROW]
+ I GotoDeskAndPageExtraAbsolute $[Desk_Current]
DestroyFunc GotoLayerExtraRelative
AddToFunc GotoLayerExtraRelative
+ I SetEnv SUMMAND $0
+ I detect_current_layer
+ I PipeRead 'RESULT=`echo "scale=0; ${CURRENT_LAYER}+${SUMMAND}" | bc`;\
if [ "$RESULT" -lt "0" ];\
then RESULT="0";\
fi;\
if [ "$RESULT" -gt "${LAYER_MAX}" ];\
then RESULT="${LAYER_MAX}";\
fi;\
echo "SetEnv DESTINATION_LAYER ${RESULT}"'
+ I read_row $[DESTINATION_LAYER]
+ I read_desk $[Row_Current]
+ I GotoDeskAndPageExtraAbsolute $[Desk_Current]
DestroyFunc GotoLayerExtraAbsolute
AddToFunc GotoLayerExtraAbsolute
+ I SetEnv GIVEN_LAYER $0
+ I PipeRead 'if [ "$GIVEN_LAYER" -lt "0" ];\
then GIVEN_LAYER="0";\
fi;\
if [ "$GIVEN_LAYER" -gt "${LAYER_MAX}" ];\
then GIVEN_LAYER="${LAYER_MAX}";\
fi;\
echo "SetEnv DESTINATION_LAYER ${GIVEN_LAYER}"'
+ I read_row $[DESTINATION_LAYER]
+ I read_desk $[Row_Current]
+ I GotoDeskAndPageExtraAbsolute $[Desk_Current]
DestroyFunc GotoLayerExtraAbsoluteExpand
AddToFunc GotoLayerExtraAbsoluteExpand
+ I SetEnv TARGET_LAYER $0
+ I PipeRead 'if [ "$TARGET_LAYER" -gt "$LAYER_MAX" ];\
then echo "SetEnv LAYER_MAX ${TARGET_LAYER}";\
fi'
+ I GotoLayerExtraAbsolute $[TARGET_LAYER]
DestroyFunc GotoDeskAndPageExtraRelative
AddToFunc GotoDeskAndPageExtraRelative
+ I SetEnv DESTINATION_DESKTOP $0
+ I detect_current_layer
+ I PipeRead 'RESULT=`echo "scale=0;
${CURRENT_LAYER}*12+${DESTINATION_DESKTOP}" | bc`;\
echo "SetEnv DESTINATION_DESKTOP ${RESULT}"'
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I read_page $[DESTINATION_DESKTOP]
+ I GotoDeskAndPage $[DESTINATION_DESKTOP] $[VP_Current_X] $[VP_Current_Y]
DestroyFunc GotoDeskAndPageExtraAbsolute
AddToFunc GotoDeskAndPageExtraAbsolute
+ I SetEnv DESTINATION_DESKTOP $0
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I read_page $[DESTINATION_DESKTOP]
+ I GotoDeskAndPage $[DESTINATION_DESKTOP] $[VP_Current_X] $[VP_Current_Y]
# save the current page
AddToFunc FvwmEvent_new_page
#+ I Test (EnvMatch VP_TIME_ELAPSED_FOR_DESKTOP 1) rollback_viewpoint
+ I write_page $[page.nx] $[page.ny]
# load the current page
AddToFunc FvwmEvent_new_desk
+ I write_desk $[desk.n]
#+ I write_page $[page.nx] $[page.ny] ###### nachtraeglich rausgenommen, da
eigentlich sinnlos
#+ I read_page $[desk.n]
#+ I Test (EnvMatch VP_Current_X $[page.nx], EnvMatch VP_Current_Y $[page.ny])
Break
#+ I Schedule 300 time_elapsed_for_desktop
#DestroyFunc time_elapsed_for_desktop
#AddToFunc time_elapsed_for_desktop
#+ I SetEnv VP_PRESERVED_X $[page.nx]
#+ I SetEnv VP_PRESERVED_Y $[page.ny]
#+ I GotoPageExtra $[VP_Current_X] $[VP_Current_Y]
#+ I SetEnv VP_TIME_ELAPSED_FOR_DESKTOP 1
#DestroyFunc rollback_viewpoint
#AddToFunc rollback_viewpoint
#+ I GotoPageExtra $[VP_PRESERVED_X] $[VP_PRESERVED_Y]
#+ I SetEnv VP_TIME_ELAPSED_FOR_DESKTOP 0
# memorize the page of the current desktop
DestroyFunc write_page
AddToFunc write_page
+ I SetEnv VP_Current_X $0
+ I SetEnv VP_Current_Y $1
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I PipeRead 'if [ "$CURRENT_DESKTOP" -lt "10" ];\
then CURRENT_DESKTOP="0${CURRENT_DESKTOP}";\
fi;\
echo "SetEnv VP_Desk${CURRENT_DESKTOP}_X $[VP_Current_X]";\
echo "SetEnv VP_Desk${CURRENT_DESKTOP}_Y $[VP_Current_Y]"'
# remember the page of the current desktop
DestroyFunc read_page
AddToFunc read_page
+ I SetEnv CURRENT_DESKTOP $0
+ I PipeRead 'if [ "$CURRENT_DESKTOP" -lt "10" ];\
then CURRENT_DESKTOP="0${CURRENT_DESKTOP}";\
fi;\
echo "SetEnv VP_Current_X $[VP_Desk${CURRENT_DESKTOP}_X]";\
echo "SetEnv VP_Current_Y $[VP_Desk${CURRENT_DESKTOP}_Y]"'
# memorize the desktop of the current row
DestroyFunc write_desk
AddToFunc write_desk
+ I SetEnv Desk_Current $0
+ I PipeRead 'RESULT=`echo "scale=0; ${Desk_Current}/4" | bc`;\
echo "SetEnv CURRENT_ROW ${RESULT}"'
+ I Test (EnvMatch CURRENT_ROW 0) SetEnv Desk_Row0 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 1) SetEnv Desk_Row1 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 2) SetEnv Desk_Row2 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 3) SetEnv Desk_Row3 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 4) SetEnv Desk_Row4 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 5) SetEnv Desk_Row5 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 6) SetEnv Desk_Row6 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 7) SetEnv Desk_Row7 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 8) SetEnv Desk_Row8 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 9) SetEnv Desk_Row9 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 10) SetEnv Desk_Row10 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 11) SetEnv Desk_Row11 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 12) SetEnv Desk_Row12 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 13) SetEnv Desk_Row13 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 14) SetEnv Desk_Row14 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 15) SetEnv Desk_Row15 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 16) SetEnv Desk_Row16 $[Desk_Current]
+ I Test (EnvMatch CURRENT_ROW 17) SetEnv Desk_Row17 $[Desk_Current]
+ I write_row $[CURRENT_ROW]
# remember the desktop of the current row
DestroyFunc read_desk
AddToFunc read_desk
+ I SetEnv CURRENT_ROW $0
+ I Test (EnvMatch CURRENT_ROW 0) SetEnv Desk_Current $[Desk_Row0]
+ I Test (EnvMatch CURRENT_ROW 1) SetEnv Desk_Current $[Desk_Row1]
+ I Test (EnvMatch CURRENT_ROW 2) SetEnv Desk_Current $[Desk_Row2]
+ I Test (EnvMatch CURRENT_ROW 3) SetEnv Desk_Current $[Desk_Row3]
+ I Test (EnvMatch CURRENT_ROW 4) SetEnv Desk_Current $[Desk_Row4]
+ I Test (EnvMatch CURRENT_ROW 5) SetEnv Desk_Current $[Desk_Row5]
+ I Test (EnvMatch CURRENT_ROW 6) SetEnv Desk_Current $[Desk_Row6]
+ I Test (EnvMatch CURRENT_ROW 7) SetEnv Desk_Current $[Desk_Row7]
+ I Test (EnvMatch CURRENT_ROW 8) SetEnv Desk_Current $[Desk_Row8]
+ I Test (EnvMatch CURRENT_ROW 9) SetEnv Desk_Current $[Desk_Row9]
+ I Test (EnvMatch CURRENT_ROW 10) SetEnv Desk_Current $[Desk_Row10]
+ I Test (EnvMatch CURRENT_ROW 11) SetEnv Desk_Current $[Desk_Row11]
+ I Test (EnvMatch CURRENT_ROW 12) SetEnv Desk_Current $[Desk_Row12]
+ I Test (EnvMatch CURRENT_ROW 13) SetEnv Desk_Current $[Desk_Row13]
+ I Test (EnvMatch CURRENT_ROW 14) SetEnv Desk_Current $[Desk_Row14]
+ I Test (EnvMatch CURRENT_ROW 15) SetEnv Desk_Current $[Desk_Row15]
+ I Test (EnvMatch CURRENT_ROW 16) SetEnv Desk_Current $[Desk_Row16]
+ I Test (EnvMatch CURRENT_ROW 17) SetEnv Desk_Current $[Desk_Row17]
# memorize the row of the current layer
DestroyFunc write_row
AddToFunc write_row
+ I SetEnv Row_Current $0
+ I PipeRead 'RESULT=`echo "scale=0; ${Row_Current}/3" | bc`;\
echo "SetEnv CURRENT_LAYER ${RESULT}"'
+ I Test (EnvMatch CURRENT_LAYER 0) SetEnv Row_Layer0 $[Row_Current]
+ I Test (EnvMatch CURRENT_LAYER 1) SetEnv Row_Layer1 $[Row_Current]
+ I Test (EnvMatch CURRENT_LAYER 2) SetEnv Row_Layer2 $[Row_Current]
+ I Test (EnvMatch CURRENT_LAYER 3) SetEnv Row_Layer3 $[Row_Current]
+ I Test (EnvMatch CURRENT_LAYER 4) SetEnv Row_Layer4 $[Row_Current]
+ I Test (EnvMatch CURRENT_LAYER 5) SetEnv Row_Layer5 $[Row_Current]
# remember the row of the current layer
DestroyFunc read_row
AddToFunc read_row
+ I SetEnv CURRENT_LAYER $0
+ I Test (EnvMatch CURRENT_LAYER 0) SetEnv Row_Current $[Row_Layer0]
+ I Test (EnvMatch CURRENT_LAYER 1) SetEnv Row_Current $[Row_Layer1]
+ I Test (EnvMatch CURRENT_LAYER 2) SetEnv Row_Current $[Row_Layer2]
+ I Test (EnvMatch CURRENT_LAYER 3) SetEnv Row_Current $[Row_Layer3]
+ I Test (EnvMatch CURRENT_LAYER 4) SetEnv Row_Current $[Row_Layer4]
+ I Test (EnvMatch CURRENT_LAYER 5) SetEnv Row_Current $[Row_Layer5]
# detect the current layer
DestroyFunc detect_current_layer
AddToFunc detect_current_layer
+ I SetEnv CURRENT_DESKTOP $[desk.n]
+ I PipeRead 'RESULT=`echo "scale=0; ${CURRENT_DESKTOP}/4/3" | bc`;\
echo "SetEnv CURRENT_LAYER ${RESULT}"'
DestroyFunc paintPagerLarge
DestroyFunc paintMinipager
# start several pagers
AddToFunc StartFunction
+ I SetEnv SAVED_DESKTOP_NUMBER_MINI 999
+ I SetEnv SAVED_DESKTOP_NUMBER_LARGE 999
# + I FvwmPager minipager 0 11
+ I paintMinipager
+ I paintPagerLarge
# the pagers get styles
Style pagerLarge Sticky, NoTitle, HandleWidth 0, StaysOnBottom, SkipMapping
Style minipager Sticky, NoTitle, HandleWidth 0, StaysOnBottom, SkipMapping
# set the number of the viewports
DeskTopSize 4x3
# set the geometry of the pager
*pagerLarge: Geometry 400x64+100-0
*pagerLarge: Label 0 "Desk 1"
*pagerLarge: Label 1 "Desk 2"
*pagerLarge: Label 2 "Desk 3"
*pagerLarge: Label 3 "Desk 4"
*pagerLarge: Label 4 "Desk 5"
*pagerLarge: Label 5 "Desk 6"
*pagerLarge: Label 6 "Desk 7"
*pagerLarge: Label 7 "Desk 8"
*pagerLarge: Label 8 "Desk 9"
*pagerLarge: Label 9 "Desk 10"
*pagerLarge: Label 10 "Desk 11"
*pagerLarge: Label 11 "Desk 12"
*pagerLarge: Label 12 "Desk 13"
*pagerLarge: Label 13 "Desk 14"
*pagerLarge: Label 14 "Desk 15"
*pagerLarge: Label 15 "Desk 16"
*pagerLarge: Label 16 "Desk 17"
*pagerLarge: Label 17 "Desk 18"
*pagerLarge: Label 18 "Desk 19"
*pagerLarge: Label 19 "Desk 20"
*pagerLarge: Label 20 "Desk 21"
*pagerLarge: Label 21 "Desk 22"
*pagerLarge: Label 22 "Desk 23"
*pagerLarge: Label 23 "Desk 24"
*pagerLarge: Label 24 "Desk 25"
*pagerLarge: Label 25 "Desk 26"
*pagerLarge: Label 26 "Desk 27"
*pagerLarge: Label 27 "Desk 28"
*pagerLarge: Label 28 "Desk 29"
*pagerLarge: Label 29 "Desk 30"
*pagerLarge: Label 30 "Desk 31"
*pagerLarge: Label 31 "Desk 32"
*pagerLarge: Label 32 "Desk 33"
*pagerLarge: Label 33 "Desk 34"
*pagerLarge: Label 34 "Desk 35"
*pagerLarge: Label 35 "Desk 36"
*pagerLarge: Label 36 "Desk 37"
*pagerLarge: Label 37 "Desk 38"
*pagerLarge: Label 38 "Desk 39"
*pagerLarge: Label 39 "Desk 40"
*pagerLarge: Label 40 "Desk 41"
*pagerLarge: Label 41 "Desk 42"
*pagerLarge: Label 42 "Desk 43"
*pagerLarge: Label 43 "Desk 44"
*pagerLarge: Label 44 "Desk 45"
*pagerLarge: Label 45 "Desk 46"
*pagerLarge: Label 46 "Desk 47"
*pagerLarge: Label 47 "Desk 48"
*pagerLarge: Label 48 "Desk 49"
*pagerLarge: Label 49 "Desk 50"
*pagerLarge: Label 50 "Desk 51"
*pagerLarge: Label 51 "Desk 52"
*pagerLarge: Label 52 "Desk 53"
*pagerLarge: Label 53 "Desk 54"
*pagerLarge: Label 54 "Desk 55"
*pagerLarge: Label 55 "Desk 56"
*pagerLarge: Label 56 "Desk 57"
*pagerLarge: Label 57 "Desk 58"
*pagerLarge: Label 58 "Desk 59"
*pagerLarge: Label 59 "Desk 60"
*pagerLarge: Label 60 "Desk 61"
*pagerLarge: Label 61 "Desk 62"
*pagerLarge: Label 62 "Desk 63"
*pagerLarge: Label 63 "Desk 64"
*pagerLarge: Label 64 "Desk 65"
*pagerLarge: Label 65 "Desk 66"
*pagerLarge: Label 66 "Desk 67"
*pagerLarge: Label 67 "Desk 68"
*pagerLarge: Label 68 "Desk 69"
*pagerLarge: Label 69 "Desk 70"
*pagerLarge: Label 70 "Desk 71"
*pagerLarge: Label 71 "Desk 72"
#*pagerLarge: Pixmap /root/.fvwm/5_pixmaps/pager001.xpm
# set the geometry of the minipager
# *minipager: Geometry 110x44+2-0
*minipager: Geometry 110x70+2-0
*minipager: Rows 3
*minipager: NoSeparators
*minipager: Label 0 "1"
*minipager: Label 1 "2"
*minipager: Label 2 "3"
*minipager: Label 3 "4"
*minipager: Label 4 "5"
*minipager: Label 5 "6"
*minipager: Label 6 "7"
*minipager: Label 7 "8"
*minipager: Label 8 "9"
*minipager: Label 9 "10"
*minipager: Label 10 "11"
*minipager: Label 11 "12"
*minipager: Label 12 "13"
*minipager: Label 13 "14"
*minipager: Label 14 "15"
*minipager: Label 15 "16"
*minipager: Label 16 "17"
*minipager: Label 17 "18"
*minipager: Label 18 "19"
*minipager: Label 19 "20"
*minipager: Label 20 "21"
*minipager: Label 21 "22"
*minipager: Label 22 "23"
*minipager: Label 23 "24"
*minipager: Label 24 "25"
*minipager: Label 25 "26"
*minipager: Label 26 "27"
*minipager: Label 27 "28"
*minipager: Label 28 "29"
*minipager: Label 29 "30"
*minipager: Label 30 "31"
*minipager: Label 31 "32"
*minipager: Label 32 "33"
*minipager: Label 33 "34"
*minipager: Label 34 "35"
*minipager: Label 35 "36"
*minipager: Label 36 "37"
*minipager: Label 37 "38"
*minipager: Label 38 "39"
*minipager: Label 39 "40"
*minipager: Label 40 "41"
*minipager: Label 41 "42"
*minipager: Label 42 "43"
*minipager: Label 43 "44"
*minipager: Label 44 "45"
*minipager: Label 45 "46"
*minipager: Label 46 "47"
*minipager: Label 47 "48"
*minipager: Label 48 "49"
*minipager: Label 49 "50"
*minipager: Label 50 "51"
*minipager: Label 51 "52"
*minipager: Label 52 "53"
*minipager: Label 53 "54"
*minipager: Label 54 "55"
*minipager: Label 55 "56"
*minipager: Label 56 "57"
*minipager: Label 57 "58"
*minipager: Label 58 "59"
*minipager: Label 59 "60"
*minipager: Label 60 "61"
*minipager: Label 61 "62"
*minipager: Label 62 "63"
*minipager: Label 63 "64"
*minipager: Label 64 "65"
*minipager: Label 65 "66"
*minipager: Label 66 "67"
*minipager: Label 67 "68"
*minipager: Label 68 "69"
*minipager: Label 69 "70"
*minipager: Label 70 "71"
*minipager: Label 71 "72"
# define reasonable colors
*pagerLarge: Hilight #ffcc00
*pagerLarge: WindowColors #000000 #888888 #000000 #ff0000
*minipager: Hilight #ffcc00
# use skip list
*pagerLarge: UseSkipList
*minipager: UseSkipList
AddToFunc FvwmEvent_new_desk
+ I paintMinipager
+ I paintPagerLarge
AddToFunc paintMinipager
+ I PipeRead 'A=$[desk.n];\
B=$(( A-(A%12) ));\
C=$(( A-(A%12)+11 ));\
if [ $SAVED_DESKTOP_NUMBER_MINI -lt $B -o
$SAVED_DESKTOP_NUMBER_MINI -gt $C ];\
then\
echo "KillModule FvwmPager minipager";\
echo "FvwmPager minipager $B $C";\
echo "SetEnv SAVED_DESKTOP_NUMBER_MINI $A";\
fi'
AddToFunc paintPagerLarge
+ I PipeRead 'A=$[desk.n];\
B=$(( A-(A%4) ));\
C=$(( A-(A%4)+3 ));\
if [ $SAVED_DESKTOP_NUMBER_LARGE -lt $B -o
$SAVED_DESKTOP_NUMBER_LARGE -gt $C ];\
then\
echo "KillModule FvwmPager pagerLarge";\
echo "FvwmPager pagerLarge $B $C";\
echo "SetEnv SAVED_DESKTOP_NUMBER_LARGE $A";\
fi'
AddToFunc StartFunction
+ I Schedule Periodic 2000 crashGuardPager
DestroyFunc crashGuardPager
AddToFunc crashGuardPager
+ I All ("minipager") Nop
+ I TestRc (NoMatch) crashHandlerPager
DestroyFunc crashHandlerPager
AddToFunc crashHandlerPager
+ I SetEnv SAVED_DESKTOP_NUMBER_MINI 9999
+ I paintMinipager
# To ignore:
# L = Caps-Lock
# 2 = Num Lock
IgnoreModifiers L2
# Sets a reasonable keyboard rate
AddToFunc StartFunction I Exec exec xset r rate 250 25
# Repeats it every 10 minutes as a workaround for Debian Squeeze host systems
that run VirtualBox guests
# and haphazardly make the keyboard slow every 1 hour or so
AddToFunc StartFunction I Schedule Periodic 600000 Exec exec xset r rate 250 25
# Maximize
Key Return WTSF123456789 4 Maximize 100 -62p
Key KP_Enter WTSF123456789 4 Maximize 100 -62p
Key KP_End A SC4 Maximize TRUE 800p 538p
Key KP_Down A SC4 Maximize TRUE 1024p 706p
Key KP_Page_Down A SC4 Maximize TRUE 1280p 962p
Key KP_Left A SC4 Maximize TRUE 1920p 1138p
# Sticky
Key Space WTSF123456789 4 Stick
Key Space WTSF123456789 S4 StickAcrossPages
Key Space WTSF123456789 C4 StickAcrossDesks
# Sets some layers
Key Plus WTSF123456789 S4 Function "raise-to-top"
Key Numbersign WTSF123456789 S4 Function "set-to-put"
Key Minus WTSF123456789 S4 Function "lower-to-bottom"
# This is useful to debug to see whether the keys work at all
#Key Plus WTSF123456789 N Exec exec xterm
#Key Numbersign WTSF123456789 N Exec exec xterm
#Key Minus WTSF123456789 N Exec exec xterm
# Shade
Key Return WTSF123456789 C4 WindowShade
Key KP_Enter WTSF123456789 C4 WindowShade
Key Return WTSF123456789 SC4 WindowShade South
Key KP_Enter WTSF123456789 SC4 WindowShade South
# Iconify
Key Return WTSF123456789 S4 Iconify
Key KP_Enter WTSF123456789 S4 Iconify
# close window
Key F4 WTSF123456789 M Delete
# function to move windows around
DestroyFunc moveTheWindow
AddToFunc moveTheWindow
+ I SetEnv BOOKMARKED_WINDOW $[w.id]
+ I Move $0 $1
+ I WindowId $[BOOKMARKED_WINDOW] WarpToWindow 50 50
# bump window to the edge
Key Left WTSF123456789 CM moveTheWindow +0 keep
Key Right WTSF123456789 CM moveTheWindow -0 keep
Key Up WTSF123456789 CM moveTheWindow keep +0
Key Down WTSF123456789 CM moveTheWindow keep -62p
# move window relatively
Key Left WTSF123456789 CM4 moveTheWindow w-10p keep
Key Right WTSF123456789 CM4 moveTheWindow w+10p keep
Key Up WTSF123456789 CM4 moveTheWindow keep w-10p
Key Down WTSF123456789 CM4 moveTheWindow keep w+10p
# resize window to the edge
Key Left WTSF123456789 SCM Maximize 100 0
Key Right WTSF123456789 SCM Maximize 100 0
Key Up WTSF123456789 SCM Maximize 0 -62p
Key Down WTSF123456789 SCM Maximize 0 100
# move mouse
Key Left A 5 CursorMove -1p 0p
Key Right A 5 CursorMove +1p 0p
Key Up A 5 CursorMove 0p -1p
Key Down A 5 CursorMove 0p +1p
Key Left A 45 CursorMove -100p 0p
Key Right A 45 CursorMove +100p 0p
Key Up A 45 CursorMove 0p -100p
Key Down A 45 CursorMove 0p +100p
# define some layer functions:
## the bottom layer is 2
## the put layer is 4
## the top layer is 6
AddToFunc lower-to-bottom
+ I Layer 0 2
+ I Lower
+ I Stick
+ I Stick
AddToFunc set-to-put
+ I Layer 0 4
+ I Stick
+ I Stick
+ I Raise
AddToFunc raise-to-top
+ I Layer 0 6
+ I Stick
+ I Stick
+ I Raise
# simple volume control (Master)
Key KP_Insert A 4 Exec exec amixer set Master 0%
Key KP_End A 4 Exec exec amixer set Master 10%
Key KP_Down A 4 Exec exec amixer set Master 20%
Key KP_Page_Down A 4 Exec exec amixer set Master 30%
Key KP_Left A 4 Exec exec amixer set Master 40%
Key KP_Begin A 4 Exec exec amixer set Master 50%
Key KP_Right A 4 Exec exec amixer set Master 60%
Key KP_Home A 4 Exec exec amixer set Master 70%
Key KP_Up A 4 Exec exec amixer set Master 80%
Key KP_Page_Up A 4 Exec exec amixer set Master 90%
Key KP_Delete A 4 Exec exec amixer set Master 100%
# simple volume control (PCM)
Key KP_Insert A S4 Exec exec amixer set PCM 0%
Key KP_End A S4 Exec exec amixer set PCM 10%
Key KP_Down A S4 Exec exec amixer set PCM 20%
Key KP_Page_Down A S4 Exec exec amixer set PCM 30%
Key KP_Left A S4 Exec exec amixer set PCM 40%
Key KP_Begin A S4 Exec exec amixer set PCM 50%
Key KP_Right A S4 Exec exec amixer set PCM 60%
Key KP_Home A S4 Exec exec amixer set PCM 70%
Key KP_Up A S4 Exec exec amixer set PCM 80%
Key KP_Page_Up A S4 Exec exec amixer set PCM 90%
Key KP_Delete A S4 Exec exec amixer set PCM 100%
# The functionality of the icons of the windows
Mouse 1 3 A Stick
Mouse 2 3 A StickAcrossDesks
Mouse 3 3 A StickAcrossPages
Mouse 1 5 A Function "raise-to-top"
Mouse 1 7 A Function "set-to-put"
Mouse 1 9 A Function "lower-to-bottom"
Mouse 1 8 A WindowShade
Mouse 3 8 A WindowShade South
Mouse 2 8 A FuncShadeToCorner
Mouse 1 6 A Iconify
Mouse 1 4 A Maximize 100 -62p
Mouse 2 4 A Maximize 0 -62p
Mouse 3 4 A Maximize 100 0
Mouse 1 2 A Delete
# move a window with the left mouse button
Mouse 1 WTSF123456789 4 FuncFvwmRaiseLowerExtra Move
# resize a window with the middle mouse button
Mouse 2 WTSF123456789 4 Resize
# raise a window with the right mouse button
Mouse 3 WTSF123456789 4 Raise
# tatsaechlicher Befehl wird ueber $0 weitergereicht
# "motion" (M) sorgt dafür, dass sich das Fenster nur mit
# gedrueckter Maustaste verschieben laesst
#
# actual command is passed via $0
# "motion" (M) makes sure that the window can be moved
# only with pressed mouse button
DestroyFunc FuncFvwmRaiseLowerExtra
AddToFunc FuncFvwmRaiseLowerExtra
+ M $0
DestroyFunc FuncShadeToCorner
AddToFunc FuncShadeToCorner
+ I WindowShade SouthEast
+ I StickEast
+ I Raise