Initial commit

master
Mid Favila 2 years ago
parent b1b4102bfc
commit c30eac9c0e
  1. 1
      .fvwm2rc
  2. 9
      NEWS
  3. 29
      README
  4. 3
      README.md
  5. 38
      docs/Color Conventions.txt
  6. 78
      docs/Goals
  7. 5
      infra/cosmrc
  8. 75
      infra/funcrc
  9. 31
      infra/kbindrc
  10. 72
      infra/menurc
  11. 6
      infra/varrc
  12. 19
      infra/windrc
  13. 25
      mainrc
  14. 13
      modules/events
  15. 12
      modules/pager
  16. 62
      modules/shelf
  17. 53
      modules/taskbar
  18. 207
      scripts/fvwmscript/FvwmScript-ConfirmQuit
  19. 34
      scripts/fvwmscript/FvwmScript-Execute
  20. 799
      scripts/fvwmscript/FvwmScript-Quit
  21. 541
      scripts/fvwmscript/FvwmScript-Sysinfo
  22. 545
      scripts/fvwmscript/Sysinfo-Backup
  23. 23
      scripts/posix/bach
  24. 10
      scripts/posix/batman
  25. 50
      scripts/posix/hunter
  26. 9
      scripts/posix/janitor
  27. 11
      scripts/posix/paperboy
  28. 13
      scripts/posix/weatherman

@ -0,0 +1 @@
mainrc

@ -0,0 +1,9 @@
6/2/2021: Initial git push to SDF. Split logic and assets.
1/2/2021: Cosmetics engine partially implemented, resolution independent
GUI partially implemented, batman improved. Github repo coming soon.
11/1/2021: README is updated, NEWS is created. This will serve as an
overview of what and when things change, and any plans for the future.

@ -0,0 +1,29 @@
####################################################################
## Favila's X Desktop Environment ##
####################################################################
Hello! Thanks for trying out my FVWM configuration. Included in this
repo is all of my scripts and dotfiles, laid out in self explanatory
format (for the most part).
I've tried to keep the dotfiles readable and the overall system clean,
but this is the first "large" project I've ever worked on, so it might
be a little (or a lot) bit messy.
I recommend you use the following software if you want an experience
with minimal tinkering out of the box;
*xset for triggering screen locking
*xssstart for automatically locking the screen
*slock (or your preferred screen locker...)
*scrot, for screenshot functionality
*stalonetray, for the shelf's tray
*libxpm, for rendering window decorations
*xcompmgr, for lightweight and simple compositing (optional)
*xclock, for the system clock
*xosview, for system monitors
*xcalendar, for a lightweight scheduling system
Any rights to the assets that are distributed with this tarball or
recommended for use are reserved by their original authors. If you
like them, please support their work.

@ -1,3 +0,0 @@
# fxde-core
The base configuration for my FVWM setup. Includes core modules, logic, and functionality.

@ -0,0 +1,38 @@
Colorset N | Meaning | Usage Examples
-----------+----------------------------+-------------------------------------
0 | default | feedback windows, FvwmScroll
1 | inactive window | window/icon titles, windows in Pager
2 | active window | window/icon titles, windows in Pager
3 | inactive borders | window borders (may copy 1)
4 | active borders | window borders (may copy 2)
5 | inactive menu item | menus (may have pixmap or gradient)
6 | active menu item | menus (only bg/fg used)
7 | greyed menu item | menus (only fg used)
9 | modules, default | Button Bar, Pager, other modules
10 | modules, default hilight | Button Bar
11 | modules, special | gradient for IconMan/IconBox
12 | modules, swallowed apps | bg, fg, sh, hi for xclock/xload etc.
13 | modules, default #2 | alternative for Pager, Button Bar
14 | modules, default hilight #2| alternative for Pager
15 | modules, balloons | TaskBar, Pager
16 | modules, winlist, standard | item of IconMan, WinList, TaskBar
17 | modules, winlist, active | --.--
18 | modules, winlist, iconified| --.--
19 | modules, winlist, pointed | --.--
20 | modules, ident | FvwmIdent
21 | modules, console | FvwmConsole
22 | modules, transparent | Button Bar
23 | regular terminal | xterm/rxvt or any other terminal
24 | admin terminal | terminal for root (su)
25 | remote terminal | terminal with ssh/rsh/telnet
26 | viewer terminal | man, less, tail -f
27 | console application | top, editor
28 | dialog main area | FvwmScript, FvwmForm, xmessage
29 | dialog text area | FvwmScript, FvwmForm, xmessage
30-40 | Reserved for use as needed | Anything

@ -0,0 +1,78 @@
Goals for the next release
·> Provide a simple graphical utility for persistent configuration
·> Add an initial configuration dialog that runs on first start
·> Further modularization of the design (and make the grouping more consistent) [IN PROGRESS]
·> Proper code style (indentation, etc) [SO FAR SO GOOD]
·> Attempt to reduce depedence on external programs further, where possible [IN PROGRESS]
·> Increase portability through the use of "which" when executing programs [USING IF [ -x ] INSTEAD]
·> Refine the aesthetic [LOOKING GOOD SO FAR]
·> Implement a proper mechanism for switching themes on the fly [LOOKING GOOD SO FAR - PAPE WORKS]
·> FIX THE UI SCALING ISSUES!!! [SHOULD BE WORKING - TEST]
·> Implement rudimentary keyboard-based window management including tiling
·> Dialog system to replace XMessage?
·> Try to write a POSIX script to generate automatic menus, instead of using
XDG Menu Maker. Requiring Python for a lightweight "DE" is stupid.
[EDIT] Scheme would be better for this
·> Write a script for automating the process of theme creation? Would be nice.
Maybe try to use Scheme for this.
·> Write wrapper scripts using FvwmButtons for MPV, FFPlay, MPlayer, etc that
otherwise can't open on their own. Maybe implement a file-chooser and such?
·> Convert all included graphics to png, to reduce library requirements.
·> Attempt to make features useable with other tools, like
ImageMagick's "import" instead of scrot [LOOKING GOOD SO FAR]
·> Use POSIX shell for simple calculations, and Scheme for more complex tasks
such as generating program lists [LOOKING GOOD SO FAR]
·> Write a screenshot function and add wide-area or specific-area flags to
Hunter
·> Write the "Waiter" script in Scheme, to automatically generate valid FVWM
menus using the XDG specification.
Overall structure will be the following
mainrc
/ | \
/ | \
.prefs infra/ modules/
/ | | |
/ progs/ * *
assets |
/ | \ *
widgets audio colors
main will read the preferences file, which will tell it what colorset,
soundfont, and widgets to load from assets (plus stuff like wallpaper).
it will also be responsible for reading in the preferred programs,
listed under the progs directory.
main will then read in all files under the infra/ directory; this will
be responsible for defining the functions, window management, and misc
details of the inner workings of things. they will be broken up by category;
windrc for window management, funcrc for functions, menurc for menus, cosmrc
for cosmetics (i.e the assignment of colors and widgets to objects)
lastly, main will read in all relevant modules; at a bare minimum, this
includes the Shelf, the Taskbar, and the Command modules. It will also
execute the StartFunction and DaemonFunction, to initialize FXDE.

@ -0,0 +1,5 @@
# Set the standard font for elements.
Style * Font $[infostore.std_font]
# Load theme settings.
Read $[infostore.theme]

@ -0,0 +1,75 @@
# Test function. You shouldn't be seeing this.
DestroyFunc TestScrotFunc
AddToFunc TestScrotFunc
+ I Exec exec $[infostore.posix]/hunter -g
# Load and restore preferences.
DestroyFunc PrefFunc
AddToFunc PrefFunc
+ I Read $[FVWM_USERDIR]/.data/prefrc
+ I Function PaperBoy $[infostore.papedir]/$[infostore.pape]
# Start daemons.
DestroyFunc DaemonFunc
AddToFunc DaemonFunc
+ I Exec exec $[infostore.compositor]
+ I Exec exec /usr/bin/xssstart $[infostore.locker]
+ I Exec exec $[infostore.notifs]
+ I Exec exec $[infostore.posix]/batman
+ I Exec exec emacs --daemon
# Spawn modules and whatnot.
AddToFunc ModuleFunc
+ I Module FvwmEvent AudioEvents
+ I Module FvwmButtons TaskBar
+ I Schedule 5 Module FvwmButtons Shelf
+ I Schedule 10 Module FvwmPager ShelfPager
# Define how to handle task switching.
DestroyFunc TaskSwitchFunc
AddToFunc TaskSwitchFunc
+ I Iconify off
+ I Focus
+ I Raise
+ I WarpToWindow !raise 5 5
# Define the "Show Desktop" feature
DestroyFunc ShowDeskFunc
AddToFunc ShowDeskFunc
+ I All (CurrentDesk, Iconic, State 1) HideDeskFunc
+ I TestRc (Match) Break
+ I All (CurrentDesk, !Iconic, !State 1) ThisWindow State 1 True
+ I All (CurrentDesk, !Iconic, State 1) Iconify
DestroyFunc HideDeskFunc
AddToFunc HideDeskFunc
+ I All (CurrentDesk, Iconic, State 1) Iconify off
+ I All (CurrentDesk, State1) ThisWindow State 1 False
# Remove widgets and set window dimensions to the size of the screen minus the
# UI elements. This simulates "full screen" without covering stuff.
DestroyFunc LargeifyFunc
AddToFunc LargeifyFunc
+ I PipeRead ""
# A simple function to set the wallpaper.
DestroyFunc PaperBoy
AddToFunc PaperBoy
+ I InfoStoreAdd pape /home/midfavila/.config/fvwm/.data/prefs/cosmetics/pape
+ I Exec exec $[infostore.posix]/paperboy $[infostore.papedir]/`cat $[infostore.pape]`

@ -0,0 +1,31 @@
# Ignore num/caps/scroll lock
IgnoreModifiers L25
# Disable the root menu
Mouse 1 R A
# Bind the session manager and execute dialog
Key Delete A CM Module FvwmScript $[infostore.fscript]/FvwmScript-ConfirmQuit
Key Return A C Module FvwmScript $[infostore.fscript]/FvwmScript-Execute
# Program shortcuts
Key T A CM Exec exec $[infostore.term]
Key E A CM Exec exec $[infostore.editor]
Key F A CM Exec exec $[infostore.filer]
Key B A CM Exec exec $[infostore.lbrowse]
Key M A CM Exec exec $[infostore.mail]
Key N A CM Exec exec $[infostore.news]
Key I A CM Exec exec $[infostore.im]
Key C A CM Exec exec $[infostore.calc]
# Shortcut for killing stuff
Key Q A CM Close
# Window focus
Key Tab A M Next (CurrentDesk, AcceptsFocus) FocusFunc
Key Tab A SM Prev (CurrentDesk, AcceptsFocus) FocusFunc
# Maximize
Key F11 A A Maximize

@ -0,0 +1,72 @@
# The first section of the document defines the look and feel of menus.
MenuStyle * PopupDelayed, PopupDelay 300, PopupAsSubmenu, HoldSubmenus \
PopupOffset 1 100, PopdownImmediately,
# The second section describes their contents.
DestroyMenu WindowOps
AddToMenu WindowOps "$[gt. Window Operations ]" Title
+ "Iconify" Iconify
+ "Maximize" Maximize
+ "" Nop
+ "Close" Close
+ "Kill" Destroy
+ "" Nop
+ "Scrape" Exec exec $[infostore.posix]/hunter -s
DestroyMenu EditMenu
AddToMenu EditMenu "$[gt. Editors ]" Title
+ "Docs" Exec exec $[infostore.deditor]
+ "IDE" Exec exec $[infostore.ide]
+ "Text" Exec exec $[infostore.editor]
DestroyMenu BrowseMenu
AddToMenu BrowseMenu "$[gt. Browsers ]" Title
+ "Full" Exec exec $[infostore.fbrowse]
+ "Lite" Exec exec $[infostore.lbrowse]
DestroyMenu CommsMenu
AddToMenu CommsMenu "$[gt. Comms ]" Title
+ "Mail" Exec exec $[infostore.mail]
+ "News" Exec exec $[infostore.news]
+ "IM" Exec exec $[infostore.im]
DestroyMenu MediaMenu
AddToMenu MediaMenu "$[gt. Media ]" Title
+ "Video Player" Exec exec $[infostore.vplay]
+ "Music Player" Exec exec $[infostore.mplay]
+ "Image Viewer" Exec exec $[infostore.iview]
+ "Image Editor" Exec exec $[infostore.iedit]
DestroyMenu UtilMenu
AddToMenu UtilMenu "$[gt. Utilities ]"
+ "Calculator" Exec exec $[infostore.calc]
+ "Doc Viewer" Exec exec $[infostore.dview]
+ "Torrents" Exec exec $[infostore.torrent]
+ "" Nop
+ "Screenshot" Exec exec $[infostore.posix]/hunter -g
+ "Identify" Module FvwmIdent
+ "" Nop
+ "Manual" Exec exec $[infostore.man]
DestroyMenu InfoMenu
AddToMenu InfoMenu "$[gt. Sysinfo ]"
+ "Task Manager" Exec exec $[infostore.pmon]
+ "Systems Check" Module FvwmScript $[infostore.fscript]/FXDE-SystemsCheck

@ -0,0 +1,6 @@
# Define variables via infostore.
InfoStoreAdd posix $[FVWM_USERDIR]/scripts/posix
InfoStoreAdd fscript $[FVWM_USERDIR]/scripts/fvwmscript
InfoStoreAdd sdir $[FVWM_USERDIR]/assets/audio
InfoStoreAdd papedir $[FVWM_USERDIR]/assets/wallpaper

@ -0,0 +1,19 @@
# Define how to handle windows in general.
EwmhBaseStruts 0 136 32 0
ClickTime 250
MoveThreshold 2
Style * SloppyFocus
Style * TileCascadePlacement
# Define how to handle system windows
Style Session GrabFocus,WindowListSkip,StaysOnTop,Sticky,PositionPlacement Center
Style Run... GrabFocus,WindowListSkip,StaysOnTop,Sticky,PositionPlacement Center
# Define how to handle application windows
Style XCalendar !Title,!Borders,!Handles,Sticky,StaysOnTop,WindowListSkip
Style svkbd !Title,!Borders,!Handles,Sticky,StaysOnTop,WindowListSkip,NeverFocus
Style XVkbd !Title,!Borders,!Handles,Sticky,StaysOnTop,WindowListSkip,NeverFocus
# This is an icon-free zone, ma'am.
Style * NoIcon

@ -0,0 +1,25 @@
# StartFunction executes every time FVWM executes.
# Load in necessary data.
Read modules/shelf
Read modules/taskbar
Read modules/pager
Read modules/events
Read .data/prefrc
Read infra/funcrc
Read infra/varrc
Read infra/cosmrc
Read infra/kbindrc
Read infra/menurc
Read infra/windrc
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec exec $[infostore.posix]/janitor
+ I Function PrefFunc
+ I Function ModuleFunc
+ I Schedule 250 Function DaemonFunc

@ -0,0 +1,13 @@
DestroyModuleConf AudioEvents
*AudioEvents: Cmd "Exec exec /usr/bin/aplay"
*AudioEvents: StartDelay 2.5
*AudioEvents: startup $[FVWM_USERDIR]/assets/audio/Login.wav
*AudioEvents: shutdown $[FVWM_USERDIR]/assets/audio/Logout.wav
*AudioEvents: unknown $[FVWM_USERDIR]/assets/audio/Chirp.wav
*AudioEvents: destroy_window $[FVWM_USERDIR]/assets/audio/WindowDestroyed.wav
*AudioEvents: error $[FVWM_USERDIR]/assets/audio/BadNotif.wav
*AudioEvents: add_window $[FVWM_USERDIR]/assets/audio/MenuOpen.wav
*AudioEvents: windowshade $[FVWM_USERDIR]/assets/audio/WindowShaded.wav
*AudioEvents: dewindowshade $[FVWM_USERDIR]/assets/audio/WindowUnshaded.wav

@ -0,0 +1,12 @@
Style "ShelfPager" NoTitle, !Handles, !Borders, Sticky, WindowListSkip, \
CirculateSkip, StaysOnBottom, FixedPosition, FixedSize, !Iconifiable
DestroyModuleConfig ShelfPager
*ShelfPager: Geometry 100+100
*ShelfPager: Font "xft:Cozette:Medium:Roman:size=8"
*ShelfPager: Rows 1
*ShelfPager: Columns 1
*ShelfPager: Colorset * 9
*ShelfPager: HilightColorset * 10
*ShelfPager: WindowColorsets 13 14
*ShelfPager: SolidSeparators

@ -0,0 +1,62 @@
#Define the shelf.
Style "Shelf" NoTitle, !Handles, !Borders, Sticky, WindowListSkip, \
CirculateSkip, StaysOnBottom, FixedPosition, FixedSize, !Iconifiable, NeverFocus
DestroyModuleConfig Shelf
*Shelf: Geometry 136x$[vp.height]-0-0@g
*Shelf: Columns 136
*Shelf: Rows $[vp.height]
*Shelf: Frame 2
*Shelf: Padding 2 2
*Shelf: Colorset 10
*Shelf: BoxSize fixed
*Shelf: Font $[infostore.font_ui]
*Shelf: Colorset 9
*Shelf: PressColorset 10
# Columns are X, rows are Y
*Shelf: (Size 5x$[vp.height])
*Shelf: (Size 131x5, ActiveColorset 10, PressColorset 10)
*Shelf: (Size 131x30, Title (Right) Terminal, Action Exec exec $[infostore.term]
*Shelf: (Size 131x30, Title (Right) Editors , Action Menu EditMenu)
*Shelf: (Size 131x30, Title (Right) Files , Action Exec exec $[infostore.filer])
*Shelf: (Size 131x30, Title (Right) Browsers , Action Menu BrowseMenu)
*Shelf: (Size 131x30, Title (Right) Comms , Action Menu CommsMenu)
*Shelf: (Size 131x30, Title (Right) Media , Action Menu MediaMenu)
*Shelf: (Size 131x30, Title (Right) Utilities , Action Menu UtilMenu)
*Shelf: (Size 131x15, Frame 0)
*Shelf: (Size 131x30, Title (Right) Run , Action Module FvwmScript $[infostore.fscript]/FvwmScript-Execute)
*Shelf: (Size 131x30, Title (Right) Configure , Action Module FvwmScript $[infostore.fscript]/FXDE-ControlPanel)
*Shelf: (Size 131x30, Title (Right) Sysinfo , Action Menu InfoMenu)
*Shelf: (Size 131x30, Title (Right) Hide , Action Function ShowDeskFunc)
*Shelf: (Size 131x30, Title (Right) Lock , Action Exec exec xset s activate)
*Shelf: (Size 131x30, Title (Right) Logout , Action Module FvwmScript $[infostore.fscript]/FvwmScript-ConfirmQuit)
#PipeRead 'echo "*Shelf: (Size 131x$(((($[vp.height]/53)*10)))), Frame 0)"'
#*Shelf: (Size 64x64, Frame 0, Swallow wmifs, 'Exec exec wmifs', Frame 1)
#*Shelf: (Size 64x64, Frame 0, Swallow wmix, 'Exec exec wmix', Frame 1)
#*Shelf: (Size 64x64, Frame 0, Swallow wmmon, 'Exec exec wmmon -l', Frame 1)
#*Shelf: (Size 64x64, Frame 0, Swallow wmmon, 'Exec exec wmmon -l -s -b', Frame 1)
#*Shelf: (Size 64x64, Frame 0, Swallow wmcalc, 'Exec exec wmcalc', Frame 1)
#*Shelf: (Size 64x64, Frame 0, Swallow wmmoonclock, 'Exec exec wmmoonclock', Frame 1)
PipeRead 'echo "*Shelf: (Size 131x$(((($[vp.height]/53)*6)))), Frame 0, Swallow xosview" ", \'Exec exec xosview\')"'
PipeRead 'echo "*Shelf: (Size 131x$(((($[vp.height]/53)*5)))), Frame 0)"'
*Shelf: (Size 131x60, Frame 0, Swallow stalonetray, 'Exec exec stalonetray --kludges force_icons_size --icon-size 32 --icon-gravity SE --geometry 4x2 --background "#BEBEBE"')
*Shelf: (Size 131x5, Frame 0)
*Shelf: (Action Exec exec xcalendar, Size 131x30, Frame 0, Swallow xclock, 'Exec exec /usr/bin/xclock -digital -strftime "%a %H:%M:%S" -update 1 -bg "#BEBEBE" -sharp -face "xft:Cozette:Medium:Roman:size=13"')
*Shelf: (Size 131x130, Frame 0, Swallow ShelfPager)

@ -0,0 +1,53 @@
# Define the taskbar.
DestroyModuleConfig TaskBar
Style "TaskBar" NoTitle, !Handles, !Borders, Sticky, WindowListSkip, \
CirculateSkip, StaysOnBottom, FixedPosition, FixedSize, \
!Iconifiable, NeverFocus
*TaskBarButtons: Font "xft:Cozette:Medium:Roman:size=8"
PipeRead 'echo "*TaskBar: Geometry $(($[vp.width]-136))x32-136@g)"'
*TaskBar: Columns $[vp.width]
*TaskBar: Rows 32
*TaskBar: Frame 0
*TaskBar: Colorset 9
# Swallow the buttonbar.
*TaskBar: (Size $[vp.width]x28, Swallow TaskBarButtons 'Module FvwmIconMan TaskBarButtons')'"
# Define the buttonbar.
DestroyModuleConfig TaskBarButtons
*TaskBarButtons: UseWinList true
*TaskBarButtons: Resolution page
*TaskBarButtons: Tips needed
*TaskBarButtons: ButtonGeometry 125x26
*TaskBarButtons: MaxButtonWidth $[vp.width]
*TaskBarButtons: ManagerGeometry 1x1+100+0@g
*TaskBarButtons: DrawIcons always
*TaskBarButtons: ReliefThickness 2
*TaskBarButtons: IconButton down
*TaskBarButtons: IconAndSelectButton down
*TaskBarButtons: SelectButton up
*TaskBarButtons: Colorset 16
*TaskBarButtons: FocusAndSelectColorset 17
*TaskBarButtons: Shape true
# Button actions.
*TaskBarButtons: Action Mouse 1 A sendcommand Iconify
*TaskBarButtons: Action Mouse 3 A sendcommand "Menu WindowOps Mouse 0 o100"
# Button logic.
*TaskBarButtons: Sort id
# Provide a simple bevel effect.
*TaskBar: (Size $[vp.width]x4, Frame 2)

@ -0,0 +1,207 @@
WindowTitle {Session}
WindowSize 375 185
Colorset 10
Init
Begin
End
Widget 1
Property
Title {Please select an option.}
Size 200 30
Position 75 10
Type ItemDraw
Flags NoReliefString NoFocus
Main
Case message of
SingleClic :
Begin
End
End
Widget 2
Property
Title {}
Size 0 0
Position 115 55
Flags NoReliefString
Colorset 10
Type RadioButton
Value 1
Main
Case message of
SingleClic :
Begin
ChangeValue 2 1
ChangeValue 3 0
ChangeValue 4 0
ChangeValue 5 0
End
End
Widget 3
Property
Title {}
Size 0 0
Position 115 75
Flags NoReliefString
Colorset 15
Type RadioButton
Value 0
Main
Case message of
SingleClic :
Begin
ChangeValue 2 0
ChangeValue 3 1
ChangeValue 4 0
ChangeValue 5 0
End
End
Widget 4
Property
Title {}
Size 0 0
Position 115 95
Flags NoReliefString
Colorset 15
Type RadioButton
Value 0
Main
Case message of
SingleClic :
Begin
ChangeValue 2 0
ChangeValue 3 0
ChangeValue 4 1
ChangeValue 5 0
End
End
Widget 5
Property
Title {}
Size 0 0
Position 115 115
Flags NoReliefString
Colorset 15
Type RadioButton
Value 0
Main
Case message of
SingleClic :
Begin
ChangeValue 2 0
ChangeValue 3 0
ChangeValue 4 0
ChangeValue 5 1
End
End
Widget 6
Property
Title {Cancel}
Size 71 28
Position 285 140
Flags NoReliefString
Colorset 12
Type PushButton
Main
Case message of
SingleClic :
Begin
Quit
End
End
Widget 20
Property
Title {Restart FXDE Session}
Size 100 15
Position 130 54
Flags NoReliefString
Colorset 0
Type ItemDraw
End
Widget 30
Property
Title {Halt FXDE Session}
Size 100 15
Position 130 74
Flags NoReliefString
Colorset 0
Type ItemDraw
End
Widget 40
Property
Title {Restart System}
Size 100 15
Position 130 94
Flags NoReliefString
Colorset 0
Type ItemDraw
End
Widget 50
Property
Title {Halt System}
Size 80 15
Position 130 114
Flags NoReliefString
Colorset 0
Type ItemDraw
End
Widget 7
Property
Title {Ok}
Size 71 28
Colorset 12
Position 215 140
Flags NoReliefString
Type PushButton
Main
Case message of
SingleClic :
Begin
If (GetValue 2) == 1 Then
Begin
Do {Restart}
Quit
End
Else
Begin
If (GetValue 3) == 1 Then
Begin
Do {Quit}
Quit
End
Else
Begin
If (GetValue 4) == 1 Then
Begin
Do {Exec exec /bin/sls /bin/reboot}
Quit
End
Else
Begin
If (GetValue 5) == 1 Then
Begin
Do {Exec exec /bin/sls /bin/shutdown}
Quit
End
End
End
End
End

@ -0,0 +1,34 @@
WindowTitle {Run...}
WindowSize 512 64
Widget 1
Property
Title {}
Size 496 24
Position 8 4
Flags NoReliefString
Type TextField
Value 1
Main
Case message of
SingleClic :
Begin
End
End
Widget 2
Property
Size 70 18
Position 410 35
Flags NoReliefString
Type PushButton
Title {Execute...}
Main
Case message of
SingleClic :
Begin
Do {Exec exec sh -c '} (GetTitle 1) {' &}
Quit
End
End

@ -0,0 +1,799 @@
#
# This file is a part of the NsCDE - Not so Common Desktop Environment
# Author: Hegel3DReloaded
# Licence: GPLv3
#
UseGettext {$NSCDE_ROOT/share/locale;NsCDE-Occupy}
WindowLocaleTitle {Occupy}
WindowSize 302 302
Colorset 22
Init
Begin
# Pick mode out of window context initially
If $WinName == {} Then
Begin
ChangeLocaleTitle 2 {Select Workspace, pick a Window.}
End
Else
Begin
ChangeTitle 2 $WinName
End
# Mode of operation
Set $OpModeArg = (GetScriptArgument 1)
# Dynamic current values
Set $DeskNo = (Add (GetScriptArgument 2) 1)
Set $PageX = (GetScriptArgument 3)
Set $PageY = (GetScriptArgument 4)
# Configured workspaces and pages static arguments
Set $DesksNo = (Add (GetScriptArgument 5) -1)
Set $PageMatrixX = (GetScriptArgument 6)
Set $PageMatrixY = (GetScriptArgument 7)
Set $PagesNo = (Mult $PageMatrixX $PageMatrixY)
# OpMode 1 is workspaces operation, OpMode 2 is pages mode of operation
If $OpModeArg == {pg} Then
Begin
Set $OpMode = 2
ChangeWindowTitle (Gettext {Occupy Page})
End
Else
Begin
Set $OpMode = 1
ChangeWindowTitle (Gettext {Occupy Workspace})
ChangeValue 5 $DeskNo
End
# Keyboard shortcuts for navigation, toggling and action
Key Escape A 10 1 {Quit}
Key H A 11 1 {DisplayHelp}
Key Help A 11 1 {DisplayHelp}
Key F1 A 11 1 {DisplayHelp}
Key A A 6 1 {AllToggle}
Key Return A 1 6 {Move}
Key Return C 1 6 {MoveGo}
Key Down A 5 1 {Down}
Key Up A 5 1 {Up}
Key Space A 1 5 {ChangeOpMode}
Set $BtnFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s medium -Z 14} 1 -1)
ChangeFont 9 $BtnFont
ChangeFont 11 $BtnFont
ChangeFont 10 $BtnFont
Set $LabelFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s medium -Z 11.5} 1 -1)
ChangeFont 1 $LabelFont
ChangeFont 5 $LabelFont
ChangeFont 3 $LabelFont
ChangeFont 4 $LabelFont
Set $SmallFont = (GetOutput {$NSCDE_ROOT/bin/getfont -v -t normal -s small -Z 10.5} 1 -1)
ChangeFont 6 $SmallFont
ChangeFont 7 $SmallFont
ChangeFont 2 $SmallFont
#
# Defaults for variables during initialization
#
# Do not go with window
Set $GoWithWindow = 0
# Not sticky
Set $AllPages = 0
Set $AllWorkspaces = 0
Set $WorkspacesMode = {normal}
Set $PagesMode = {normal}
# Starred states of Workspaces and Pages radio buttons
Set $StarredWspSet = 0
Set $StarredPgSet = 0
Set $InitialDeskNo = $DeskNo
Set $InitialPageNoSet = 0
# This takes care of handling sticky windows across workspaces as well as pages
If $OpMode == 1 Then
Begin
Do {WindowId $[w.id] (StickyAcrossDesks) SendToModule Occupy SendString 6 1 AllToggle}
End
If $OpMode == 2 Then
Begin
Do {WindowId $[w.id] (StickyAcrossPages) SendToModule Occupy SendString 6 1 AllToggle}
End
Do {WindowId $[w.id] (StickyAcrossDesks) SendToModule Occupy SendString 6 2 Run}
Do {WindowId $[w.id] (StickyAcrossPages) SendToModule Occupy SendString 6 3 Run}
# Locale stuff: Hack to keep leading or ending space(s)
# which will be trimmed by LocaleTitle Widget directive.
ChangeLocaleTitle 6 (GetTitle 6)
ChangeLocaleTitle 7 (GetTitle 7)
End
# Upper Left static "Window" label. Serves as execution and message passing
# widget under the hood.
Widget 1
Property
Size 4 20
Position 4 10
Type ItemDraw
Flags NoReliefString NoFocus Right
LocaleTitle {Window:}
Font "xft:::pixelsize=15"
Colorset 22
Main
Case message of
# Accept list of workspaces in FvwmScript List menu format
# send signal to workspaces radio button if mode of operation
# is workspaces
1 :
Begin
Set $WorkSpaces = (LastString)
If $OpMode == 1 Then
Begin
SendSignal 3 1
End
End
# Same as "1 :" but for pages
2 :
Begin
Set $Pages = (LastString)
If $OpMode == 2 Then
Begin
SendSignal 4 1
End
End
# Accept $[w.id] from f_SendToOccupy, send it to "4 :" that will obtain
# window name from it.
3 :
Begin
Set $WinId = (LastString)
Do {Current WindowId } $WinId { SendToModule Occupy SendString 1 4 $[w.name]}
End
# Get window name from "3 :", set it on widget 2
4 :
Begin
Set $WinName = (LastString)
If $WinId == {$[w.id]} Then
Begin
Set $WinId = {}
Set $WinName = {}
End
Else
Begin
Set $WinNameRest = (StrCopy $WinName 30 31)
If $WinNameRest <> {} Then
Begin
Set $WinName = (StrCopy $WinName 1 29) {...'}
End
ChangeTitle 2 $WinName
End
End
# Accept keyboard shortcut SPACE to change mode of operation
# between workspaces (1) and pages (2) ...
5 :
Begin
If (LastString) == {ChangeOpMode} Then
Begin
If $OpMode == 1 Then
Begin
SendSignal 4 1
End
Else
Begin
SendSignal 3 1
End
End
End
# Accept action to finally move the window or to move it and go
# with it on that workspace and/or page
6 :
Begin
If (LastString) == {Move} Then
Begin
SendSignal 9 1
End
If (LastString) == {MoveGo} Then
Begin
SendSignal 7 1
SendSignal 9 1
End
End
End
# Window name from "1 4" goes here
Widget 2
Property
Size 218 20
Position 74 10
Type ItemDraw
Flags NoReliefString Left
Title {}
Colorset 22
Font "xft:::pixelsize=14"
End
# Toggle workspaces mode of operation
Widget 3
Property
Size 100 0
Position 4 38
Type RadioButton
Flags NoReliefString Right
LocaleTitle {Workspaces:}
Font "xft:::pixelsize=15"
Colorset 22
Value 1
Main
Case message of
SingleClic :
Begin
SendSignal 3 1
End
1 :
Begin
ChangeValue 4 0
ChangeValue 3 1
ChangeValue 6 $AllWorkspaces
Set $PagesListValue = (GetValue 5)
# This block takes care for putting (*) at the end of
# Pages: label on its radio button when something is
# changed from the initial default. Special case is 999
# which represents sticky state. There is also procedure
# for removing (*) when settings are put back as it was
# initially.
If $OpMode == 2 Then
Begin
If $PageNo <> {} Then
Begin
If $StarredPgSet <> 1 Then
Begin
If $PageNo == 999 Then
Begin
Set $InitialPageNo = 999
End
Else
Begin
Set $OrigPgTitle = (GetTitle 4)
Set $StarredPgTitle = $OrigPgTitle {*}
ChangeTitle 4 $StarredPgTitle
Set $StarredPgSet = 1
End
End
Else
Begin
If $PageNo == 999 Then
Begin
Set $InitialPageNo = 999
End
Do {Echo NNNNNNNNNNNNNNNNNNNNN: } $PageNo { --- } $InitialPageNo
If $PageNo == $InitialPageNo Then
Begin
ChangeTitle 4 $OrigPgTitle
Set $StarredPgSet = 0
End
End
End
End
# Normal is non-sticky, allworkspaces is sticky
# allworkspaces DeskNo value is virtual place holder 999
# $WorkspacesListValue puts back saved value when changing
# mode of operation
If $WorkspacesMode == {normal} Then
Begin
ChangeTitle 5 $WorkSpaces
If $WorkspacesListValue == {} Then
Begin
Set $WorkspacesListValue = (GetValue 5)
End
ChangeValue 5 $WorkspacesListValue
End
Else
Begin
ChangeValue 6 1
Set $DeskNo = 999
ChangeLocaleTitle 5 { All Workspaces}
ChangeValue 5 1
End
ChangeWindowTitle (Gettext {Occupy Workspace})
ChangeLocaleTitle 6 { All Workspaces}
Set $OpMode = 1
End
End
# Toggle pages mode of operation
Widget 4
Property
Size 100 0
Position 4 68
Type RadioButton
Flags NoReliefString Right
LocaleTitle {Pages:}
Font "xft:::pixelsize=15"
Colorset 22
Value 0
Main
Case message of
SingleClic :
Begin
SendSignal 4 1
End
1 :
Begin
ChangeValue 3 0
ChangeValue 4 1
ChangeValue 6 $AllPages
Set $WorkspacesListValue = (GetValue 5)
# This block takes care for putting (*) at the end of
# Workspaces: label on its radio button when something is
# changed from the initial default. Special case is 999
# which represents sticky state. There is also procedure
# for removing (*) when settings are put back as it was
# initially.
If $OpMode == 1 Then
Begin
If $DeskNo == 999 Then
Begin
Set $InitialDeskNo = $DeskNo
End
If $StarredWspSet <> 1 Then
Begin
If $DeskNo <> $InitialDeskNo Then
Begin
Set $OrigWspTitle = (GetTitle 3)
Set $StarredWspTitle = $OrigWspTitle {*}
ChangeTitle 3 $StarredWspTitle
Set $StarredWspSet = 1
End
End
Else
Begin
If $DeskNo == $InitialDeskNo Then
Begin
ChangeTitle 3 $OrigWspTitle
Set $StarredWspSet = 0
End
End
End
# Normal is non-sticky, allpages is sticky
# allpages PageNo value is virtual place holder 999
# $PagesListValue puts back saved value when changing
# mode of operation
If $PagesMode == {normal} Then
Begin
ChangeTitle 5 $Pages
If $CurrentPageNum == {} Then
Begin
Set $CurrentPageNumCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | grep ' } $PageX { } $PageY {$'}
Set $CurrentPageNum = (GetOutput $CurrentPageNumCmd 1 1)
ChangeValue 5 $CurrentPageNum
End
Else
Begin
If $PagesListValue > 0 Then
Begin
ChangeValue 5 $PagesListValue
End
End
End
Else
Begin
ChangeValue 6 1
Set $PageNo = 999
ChangeLocaleTitle 5 { All Pages }
ChangeValue 5 1
End
ChangeWindowTitle (Gettext {Occupy Page})
ChangeLocaleTitle 6 { All Pages }
Set $OpMode = 2
End
End
# List of workspaces and/or pages
Widget 5
Property
Size 178 134
Position 116 42
Type List
Flags NoReliefString
Title {}
Colorset 22
Main
Case message of
SingleClic :
Begin
If $OpMode == 1 Then
Begin
# Set DeskNo for further processing
Set $DeskNo = (GetValue 5)
# Save selected item for putting it back when
# mode is changed and then changed back
Set $WorkspacesListValue = (GetValue 5)
End
If $OpMode == 2 Then
Begin
# Set PageNo for further processing
Set $PageNo = (GetValue 5)
# Set default here if $InitialPageNo was empty
# $InitialPageNoSet serves as break
If $InitialPageNoSet <> 1 Then
Begin
Set $InitialPageNo = $CurrentPageNum
Set $InitialPageNoSet = 1
End
# Save selected item for putting it back when
# mode is changed and then changed back
Set $PagesListValue = (GetValue 5)
End
# Main pick mode
If $WinName == {} Then
Begin
Do {Pick () SendToModule Occupy SendString 1 3 $[w.id]}
End
End
# Dispatcher for Up and Down on the list in workspaces and pages mode
1 :
Begin
If $OpMode == 1 Then
Begin
SendSignal 5 2
End
If $OpMode == 2 Then
Begin
SendSignal 5 3
End
End
# Up and Down on the list in workspaces mode
2 :
Begin
If (LastString) == {Down} Then
Begin
If (GetValue 5) <= $DesksNo Then
Begin
Set $NextValue = (Add (GetValue 5) 1)
ChangeValue 5 $NextValue
Set $DeskNo = $NextValue
End
Else
Begin
ChangeValue 5 1
Set $DeskNo = 1
End
End
If (LastString) == {Up} Then
Begin
Set $PrevValue = (Add (GetValue 5) -1)
If $PrevValue >= 1 Then
Begin
ChangeValue 5 $PrevValue
Set $DeskNo = $PrevValue
End
Else
Begin
Set $MaxDesksNoFromOne = (Add $DesksNo 1)
ChangeValue 5 $MaxDesksNoFromOne
Set $DeskNo = $MaxDesksNoFromOne
End
End
End
# Up and Down on the list in pages mode
3 :
Begin
If (LastString) == {Down} Then
Begin
If (GetValue 5) <= (Add $PagesNo -1) Then
Begin
Set $NextValue = (Add (GetValue 5) 1)
ChangeValue 5 $NextValue
Set $PageNo = $NextValue
End
Else
Begin
ChangeValue 5 1
Set $PageNo = 1
End
End
If (LastString) == {Up} Then
Begin
Set $PrevValue = (Add (GetValue 5) -1)
If $PrevValue >= 1 Then
Begin
ChangeValue 5 $PrevValue
Set $PageNo = $PrevValue
End
Else
Begin
ChangeValue 5 $PagesNo
Set $PageNo = $PagesNo
End
End
End
End
# All Workspaces / All Pages stickyness control
Widget 6
Property
Size 100 20
Position 116 184
Type CheckBox
Value 0
Flags NoReliefString
Title { All Workspaces}
Font "xft:::pixelsize=15"
Main
Case message of
SingleClic :
Begin
SendSignal 6 1
End
1 :
Begin
# Keyboard "A" handling
# Workspaces mode
If $OpMode == 1 Then
Begin
If (LastString) == {AllToggle} Then
Begin
If (GetValue 6) == 0 Then
Begin
Set $AllWorkspaces = 1
End
Else
Begin
Set $AllWorkspaces = 0
End
ChangeValue 6 $AllWorkspaces
End
# Called with click
If (GetValue 6) == 1 Then
Begin
If $WinName == {} Then
Begin
Do {Pick () SendToModule Occupy SendString 1 3 $[w.id]}
End
# Set DeskNo to 999 for sticky state, save old DeskNo into
# OldDeskNo to get it back
Set $OldDeskNo = $DeskNo
Set $DeskNo = 999
ChangeLocaleTitle 5 { All Workspaces}
ChangeValue 5 1
Set $WorkspacesMode = {allworkspaces}
End
# Restore workspace states if sticky all workspaces is turned off
If (GetValue 6) == 0 Then
Begin
ChangeTitle 5 $WorkSpaces
ChangeValue 5 $OldDeskNo
Set $DeskNo = $OldDeskNo
Set $WorkspacesMode = {normal}
End
Set $AllWorkspaces = (GetValue 6)
End
# Keyboard "A" handling
# Pages mode
If $OpMode == 2 Then
Begin
If (LastString) == {AllToggle} Then
Begin
If (GetValue 6) == 0 Then
Begin
Set $AllPages = 1
End
Else
Begin
Set $AllPages = 0
End
ChangeValue 6 $AllPages
End
# Called with click
If (GetValue 6) == 1 Then
Begin
If $WinName == {} Then
Begin
Do {Pick () SendToModule Occupy SendString 1 3 $[w.id]}
End
# Set PageNo to 999 for sticky state, save old PageNo into
# OldPageNo to get it back
Set $OldPageNo = $PageNo
Set $PageNo = 999
ChangeLocaleTitle 5 { All Pages }
ChangeValue 5 1
Set $PagesMode = {allpages}
End
# Restore page states if sticky all workspaces is turned off
If (GetValue 6) == 0 Then
Begin
ChangeTitle 5 $Pages
If $OldPageNo <> {} Then
Begin
ChangeValue 5 $OldPageNo
End
Else
Begin
Set $CurrentPageNumCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | grep ' } $PageX { } $PageY {$'}
Set $CurrentPageNum = (GetOutput $CurrentPageNumCmd 1 1)
ChangeValue 5 $CurrentPageNum
End
Set $PageNo = $OldPageNo
Set $PagesMode = {normal}
End
Set $AllPages = (GetValue 6)
End
End
# Small helpers for accepting internal SendToModule from Init for
# sticky states handling
2 :
Begin
Set $WorkspacesMode = {allworkspaces}
End
3 :
Begin
Set $PagesMode = {allpages}
End
End
# Set "Go with the Window" property for OK button
Widget 7
Property
Size 100 20
Position 116 214
Type CheckBox
Value 0
Flags NoReliefString
Title { Go with the Window}
Font "xft:::pixelsize=15"
Main
Case message of
SingleClic :
Begin
SendSignal 7 1
End
1 :
Begin
Set $GoWithWindow = 1
End
End
Widget 8
Property
Size 298 1
Position 2 248
Type Rectangle
End
# Main action starter
Widget 9
Property
Size 80 20
Position 8 262
Type PushButton
Flags NoReliefString
LocaleTitle {OK}
Font "xft:::pixelsize=15"
Main
Case message of
SingleClic :
Begin
SendSignal 9 1
End
1 :
Begin
# If pages are not sticky ...
If $PageNo <> 999 Then
Begin
Set $CurrentPageCmd = {$NSCDE_ROOT/bin/mkpagemenu } $PageMatrixX { } $PageMatrixY { pgnum_pgid | grep '^} $PageNo { '}
Set $CurrentPage = (GetOutput $CurrentPageCmd 1 -1)
Set $CurrentPageX = (StrCopy $CurrentPage 3 3)
Set $CurrentPageY = (StrCopy $CurrentPage 5 5)
If $CurrentPageX == { } Then
Begin
Set $CurrentPageX = (StrCopy $CurrentPage 4 4)
End
If $CurrentPageY == { } Then
Begin
Set $CurrentPageY = (StrCopy $CurrentPage 6 6)
End
If $GoWithWindow == 0 Then
Begin
Do {f_Occupy } $WinId { MoveToPage } $CurrentPageX { } $CurrentPageY { Nop }
End
Else
Begin
Do {f_Occupy } $WinId { MoveToPage } $CurrentPageX { } $CurrentPageY { GoToPage }
End
End
# If workspaces are not sticky
If $DeskNo <> 999 Then
Begin
If $GoWithWindow == 0 Then
Begin
Do {f_Occupy } $WinId { MoveToDesk 0 } (Add $DeskNo -1) { Nop }
End
Else
Begin
Do {f_Occupy } $WinId { MoveToDesk 0 } (Add $DeskNo -1) { GoToDesk }
End
End
# If desks are sticky
If $DeskNo == 999 Then
Begin
Do {WindowId } $WinId { StickAcrossDesks True}
End
# If pages are sticky
If $PageNo == 999 Then
Begin
Do {WindowId } $WinId { StickAcrossPages True}
End
Quit
End
End
# Quit button
Widget 10
Property
Size 80 20
Position 110 262
Type PushButton
LocaleTitle {Dismiss}
Font "xft:::pixelsize=15"
Flags NoReliefString
Main
Case message of
SingleClic :
Begin
Quit
End
1 :
Begin
Set $qstr = (LastString)
If $qstr == {Quit} Then
Begin
Quit
End
End
End
# Help button
Widget 11
Property
Size 80 20
Position 212 262
Type PushButton
LocaleTitle {Help}
Font "xft:::pixelsize=15"
Flags NoReliefString
Main
Case message of
SingleClic :
Begin
SendSignal 11 1
End
1 :
Begin
Do {f_DisplayURL "$[gt.Occupy Workspace]" $[NSCDE_ROOT]/share/doc/html/NsCDE-Occupy.html}
End
End

@ -0,0 +1,541 @@
WindowLocaleTitle {Workstation Information}
WindowSize 486 352
Font "xft::Regular:pixelsize=12"
Colorset 22
Init
Begin
Key Escape A 36 1 {Quit}
Key Return A 36 1 {Quit}
Set $WidgetFont = (GetOutput {} 1 -1)
ChangeFont 36 $WidgetFont
ChangeFont 1 $TextFont
ChangeFont 2 $TextFont
ChangeFont 3 $TextFont
ChangeFont 4 $TextFont
ChangeFont 5 $TextFont
ChangeFont 6 $TextFont
ChangeFont 7 $TextFont
ChangeFont 8 $TextFont
ChangeFont 9 $TextFont
ChangeFont 10 $TextFont
ChangeFont 11 $TextFont
ChangeFont 12 $TextFont
ChangeFont 13 $TextFont
ChangeFont 14 $TextFont
ChangeFont 19 $TextFont
ChangeFont 20 $TextFont
ChangeFont 21 $TextFont
ChangeFont 22 $TextFont
ChangeFont 23 $TextFont
ChangeFont 24 $TextFont
ChangeFont 25 $TextFont
ChangeFont 26 $TextFont
ChangeFont 27 $TextFont
ChangeFont 28 $TextFont
ChangeFont 29 $TextFont
ChangeFont 30 $TextFont
ChangeFont 31 $TextFont
ChangeFont 32 $TextFont
ChangeFont 33 $TextFont
ChangeFont 34 $TextFont
Set $username = { } (GetOutput {id -un} 1 -1)
Set $hostname = { } (GetOutput {uname -n} 1 1)
Set $machtype = { } (GetOutput {uname -mpi} 1 -1)
Set $ipaddr = { } (GetOutput {$NSCDE_ROOT/bin/sysinfo.py} 4 -1)
Set $hostid = { } (GetOutput {hostid} 1 -1)
Set $domainname = { } (GetOutput {domainname} 1 -1)
Set $inetdomain = { } (GetOutput {$NSCDE_ROOT/bin/sysinfo.py} 5 -1)
Set $mem = { } (GetOutput {$HOME/.fvwm/scripts/posix/memmb} 0 -1) { MB}
Set $mempct = { } (GetOutput {$HOME/.fvwm/scripts/posix/memusemb} 0 -1)
Set $swapinfo = { } (GetOutput {$HOME/.fvwm/scripts/posix/memfree} 0 -1) {MB Available}
Set $swap = { } (GetOutput {$HOME/.fvwm/scripts/posix/swapmb} 0 -1) { MB}
Set $swappct = { } (GetOutput {$HOME/.fvwm/scripts/posix/} 0 -1)
Set $swapinfo = { } (GetOutput {$HOME/.fvwm/scripts/posix/swapfree} 0 -1) { MB Available}
Set $sysname = (GetOutput {uname -s} 1 -1)
Set $osname = (GetOutput {uname -o} 1 -1)
Set $osver = (GetOutput {uname -r} 1 -1)