lee wrote: > Michael Großer <michael.gros...@gmx.de> 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