Scwm NEWS --- history of user-visible changes. -*- text -*- Copyright (C) 1997, 1998, 1999, 2000 Greg J. Badros and Maciej Stachowiak See the end for copying conditions. Changes for scwm-0.99.6.2 (not yet released) * Bug fixes * New modules ** focus-stack ** where-is * netscape module enhancements ** auto-focus on the find-dialog, and use focus-stack module for easier closing and popping of focus back to the main netscape window * Major cleanup of placement procedures and *-place-window routines * Changed hooks ** window-fully-obscured-hook, window-partially-obscured-hook, window-unobscured-hook Now each of these takes a `resulting-from-viewport-move?' boolean as second argument. This, e.g., lets hooks ignore windows disappearing from a change in the viewport. ** Removed primitives *** `set-smart-placement-is-really-smart!', `smart-placement-is-really-smart?' *** `set-random-placement!', `set-smart-placement!' ** Changed primitives *** `smart-place-window', `clever-place-window', `random-place-window' All take extra optional arguments NO-MOVE SUGGESTED-X SUGGESTED-Y ** Added primitives *** `initial-place-window', `null-place-window' ** Added procedure *** `standard-place-window' ** Added global variables *** default-placement-proc, default-transient-placement-proc Changes for scwm-0.99.6.1 (released 29-January-2000) * Bug fixes ** More robust ** Plugged two small but frequent memory leaks -- the leaks are now gone!!!! * Improved configure option ** --enable-dump now does static linking of the appropriate libraries so dump files are closer to being useful * Changed commands ** show-window-list-matching-interactively Use * on both ends of entered string so the default is a substring search * Updated copyright dates throughout. Changes for scwm-0.99.6 (released 12-January-2000) * Bug fixes ** Button-click position is used as anchor for interactive window moves Fixes a race condition in determining where the user clicked on the window that could have resulted in the window not being under the pointer ** Fixed race condition that caused instability for short-lived windows Paricularly noticeable with the GIMP ** menus popped-up from decorations stay on screen ** visibility change hooks are called properly, and during moves/resizes ** Window minimum/maximum sizes now correct for decorations accurately ** Many more!!! * New modules ** cursor.scm -- fancy resize cursor support * New hooks ** `pre-command-hook', `post-command-hook': pre- uses `this-command' and `this-command-args' variables. ** `X-SelectionNotify-hook' for notification that there is no selection after `X-convert-selection' requests * Interactive specifications are now warned when violated. * Changed behaviours to system.scwmrc ** `load-user-file' written to permit user-customization files at strategic points, including: ~/.scwm/startup ~/.scwm/after-modules ~/.scwm/after-applications ~/.scwm/after-window-styles ~/.scwm/after-menus ~/.scwm/after-bindings ~/.scwm/after-before-preferences ~/.scwm/after-after-preferences ~/.scwm/after-done ** sides of windows do resizes (like Win) instead of moves ** C-S-M now raises the fvwm2 pager (which is no longer always on-top) ** window-configuration.scm *** Now changes in global state animate all windows simultaneously, instead of sequentially ** constraints.scm *** Now moves to new positions/sizes are animated instead of jumped-to ** non-interactive procedures display a warning when invoked interactively * Much Improved GUI for constraints ** toolbar now has a record button, that turns into a stop button ** toolbar now supports animating different pictures of constraints to give a better idea of the utility of a constraint class's button ** constraint-investigator is improved! *** has a new "Delete all" button *** highlights the constraint when hovering over the label, not just when hovering over the checkbox *** nicer-looking alignment into columns ** newly-recorded compositions get added to the toolbar w/ the record-composition.xpm pixmap in the button ** alignment constraints now do nonant-highlighting of whole edges of windows instead of always highlighting just a single corner or side window * Changed procedures ** `window-style' now understands a list for its CONDITION argument to mean '(ClassName ResourceName) ** `maximize' no longer resets the gravity on the maximized window (also some animation maximization bugs were fixed) ** Rename menu-global-theme, menu-window-theme to `make-menu-global-theme' and `make-menu-window-theme' since they are procs that return menus, not bound directly to menus. ** `set-window-highlighted-nonant!' `window-highlighted-nonant' now take symbols for supporting whole-edge highlighting for better constraint interface * New primitives ** `X-get-selection-owner', `X-convert-selection' for managing selections, also `X-SelectionNotify-hook' ** `get-next-event' for getting the next key *or* mouse event ** `call-interactively' (also invoked internally when dispatch key/mouse bindings) ** `window-visibility' for reporting on current visibility state of a window ** `animate-windows' for permitting animations of multiple windows simultaneously ** `cl-resolve-xforms', `cl-reset-dirty-windows' for use in scwm-resolve-hook to permit animation ** `done-startup?' to let us tell whether we're still initializing or not * New procedures ** `show-netscape-window-list-menu' ** `make-menu-focus-options' ** `make-keep-winclass-centered' ** `viewport-center-x', `viewport-center-y' ** `auto-accept-dialog-placement' to permit automating pressing "Return" whenever a dialog returns ** `X-handle-selection-string', `netscape-goto-selection-url', `netscape-google-search-selection-url' ** `describe-event', to complement `describe-{mouse,key}' using new `get-next-event' primitive ** `set-highlight-colors!' convenience procedure. ** `unbind-mouse', `unbind-key' take optional ignored extra arguments used to make their calls be allowed to look just like the bind-mouse, bind-key call that established the binding. * Added -g option to force regular gc-ing at all invoking of Scheme hooks slows stuff down enough for easier debugging, and also finds problems in gcing sooner, rather than later. Changes for scwm-0.99.5.1 (released 26-October-1999) * Bug fixes * RPM built to link against libguile.so.6 (guile-1.3.4) instead of libguile.so.7 (CVS guile) Changes for scwm-0.99.5 (released 24-October-1999) * Bug fixes * Added interactive procedure specifications Used to make clear which procedures should be called interactively via menus or bindings. Right now just used by prompt-binding, but will be required of menuitem actions and binding actions in the next version. * New configure option, --enable-dump Rudimentary, not-state-preserving-yet support for guile-hobbit's unexec capabilities (goal: reduce startup time substantially). -**-> You need to copy Hobbit's libunexec.a to the build directory's src/ subdirectory if you configure with this option! * New preferences options ** *highlight-foreground*, *highlight-background* * SIGINT (Ctrl-C) is now allowed to interrupt and terminate Scwm Unless SCWM_CATCH_SIGINT is defined during compilation * New modules (largely from breaking up flux.scm, factoring system.scwmrc) ** winops-menu.scm ** xlock-menus.scm ** titlebar-buttons.scm ** task-switcher.scm ** synth-events.scm ** shove-window.scm ** session.scm ** rectangle.scm ** lambda-startup-logo.scm ** describe.scm ** basic-styles.scm * Renamed numerous primitives ** Now (un)shade-window, shaded-window? -> was window-(un)shade, window-shaded? ** Standardize on toggle-maximize-{vertical,horizontal,both} instead of random other names ** (de)iconify-window, iconified-window? -> was (de)iconify, iconified? ** focus-window -> was focus ** sticky-window?, (un)stick-window -> was sticky?, (un)stick ** `window-focus-style' -> was get-window-focus ** `send-button', `send-key' -> were send-button-press, send-key-press Changes for scwm-0.99.4 (released 6-October-1999) * scwm/ subdirectory has been renamed to src/. * Bug fixes, including gnome icon placement, animated resize/moves, more! * Minor overhaul of system.scwmrc, rearranged menus, eliminated half-working features, etc. * system.scwmrc by default now uses the guile-gtk error message window in addition to writing errors to stderr (uses changed error-hook) * Motion events were only dispatching after the double-click timeout; now they dispatch as soon as the motion is greater than a threshold. Result is more responsive feel on, e.g., titlebar-based window dragging. * New modules ** last-mapped-window.scm for remembering the last window that got mapped * Changed modules ** window-configuration.scm now has push-window-configuration, pop-window-configuration and window-configuration-menu * Changed procedures ** X-cut-buffer-string now uses X-fetch-bytes primitive ** X-set-cut-buffer-string! now uses X-store-bytes primitive ** Rename copy-window-title-to-cut-buffer0 to copy-window-title-to-cut-buffer ** Rename paste-window-title-from-cut-buffer0 to paste-window-title-from-cut-buffer * New primitives ** `X-fetch-bytes', `X-store-bytes' for better primary cut buffer handling. Thanks E. Jay Berkenbilt! * Changed primitives ** `animated-deiconify-to-last-viewport-position' to `animated-deiconify-to-viewport' ** Drop `animated-deiconify-to-current-viewport' ** Renamed `current-window-with-focus' to `window-with-focus' ** Renamed `current-window-with-pointer' to `window-with-pointer' * New hooks ** X-ConfigureRequest-hook * Changed hooks ** X-DestroyNotify-hook now calls with window ID integer, instead of a window object ** error-hook now calls with a single argument, the string error message Changes for scwm-0.99.3 (released 25-September-1999) * ViaVoice (IBM TM) module for permitting speech recognition actions * Turn on backtraces by default (still permit -n option to disable them) (guile >= 1.3.2 turned this off) * Turn on source code position recording by default for line numbers in error messages (guile >= 1.3.2 turned this off) * Constraint features ** Make animated moves and resizes resolve the system throughout the move/resize so the constraints are always maintained ** Improved visual constraint representations ** Make constraints submenu to root menu ** Bug fixes in the gtk-toggle-menu * Improved preferences dialog support, cleaner internally, too. * New modules ** prompt-binding -- for interrogating and changing key/mouse bindings ** image-path-suggestor -- for using `locate' to find images not in the load-path ** wavplay -- for abstracting different kinds of audio support ** gtk-menu -- for using GTK+'s menus ** prompt-enum -- for choosing among multiple discrete possibilities ** prompting-shell -- factored out top-level window for various prompting code ** animated-edge-moves -- functions for pushing windows to edges of viewport ** viavoice (C) -- speech recognizer * New primitives ** `window-decoration-size' ** `window-decoration-ids', `set-window-id-background!' ** `set-window-highlighted-nonant!', `window-highlighted-nonant' ** `set-nonant-highlight-color!', `nonant-highlight-color' ** `focussable-window?' * Changed primitives ** `lookup-procedure-bindings' takes a new second argument, CONTEXT, to filter returned bindings ** `xlib-set-line-width!' has been replaced by xlib-set-line-attributes! which now takes a width and a line style. ** Renamed `resize-to' to `resize-window', `resize-frame-to' to `resize-frame' and permit each to take X, Y for movement, to. * `popup-menu' takes another argument, permit-alt-release-selection?, and warp-to-first? is now warp-to-index. * Changed procedures ** `interactive-place' renamed to `place-interactively' for consistency (all others start with place-*) Changes for scwm-0.99.2 (released 14-September-1999) * Much improved RPM packaging, cassowary constraint solver included by default in RPMs * an evolved gjb.scwmrc is now system.scwmrc * Added startscwm, scwm-conf scripts * Lots of documentation improvements, revamp of Scwm web page, many, many bug-fixes (compiles warning free with virtually all warnings turned on!), lots of code cleanup (especially primitive argument validation), numerous scwmdoc script fixes and improvements. * Much more consistent argument checking and converting; substantial code simplification, too. * GUI-configurable options support via new define-scwm-option ** Requires guile-gtk-0.15 or better, gtk+-1.2.x * GTk+ windows are not allowed to have destroy action applied by Scwm ** Requires guile-gtk-0.16's `gdk-get-leader-window-id' primitive * Bindings now ignore num lock, scroll lock modifiers ** see also `set-ignore-dubious-modifiers!' and `ignore-dubious-modifiers?' procs * Constraints ** Much, much improved user-interface *** toolbar for adding constraints *** constraint menu, and gtk constraint menu for manipulating existing constraints ** more accessible via (use-modules (app scwm constraints)) ** Requires Cassowary-0.42 or better * KWM Support ** `kwm-emulation-initialize', `kwm-emulation-reset', `kwm-send-window-list' * GNOME Support ** See (app scwm gnome-hints) * Corba Support ** See (app scwm corba), modules/corba/ChangeLog * Alpha version of fvwm2rc-to-scwmrc converter ** utilities/converters/fvwm2rc-to-scwmrc ** handles /etc/X11/system.fvwm2rc * X11 Cursors are now wrapped as SMOBs ** various global variables used for cursors for window decorations ** pixmap cursors can be created with `create-pixmap-cursor' ** New primitive `set-window-cursor!' for attaching a cursor to an arbitrary window * Introduce syntax `use-scwm-modules' to reduce redundancy in module names and handle errors in one module more gracefully (rather than ignoring all the modules in the given list) * IMLib support as a configure-time option (to-replace libXpm, ultimately) ** use imlib_config binary (comes with imlib) to control options ** `clone-scaled-image' for resizing images. ** `window->image' for grabbing a window's contents as an image * ESD Sound support module ** sound-load, sound-play primitives (among others) * libPropList integration support module ** many many `proplist-*' primitives * Themes, Theme Menus (app scwm themes) (app scwm std-menus) ** Various themes in new themes directory ** `theme-names' ** `menu-window-theme', `menu-global-theme', #:use-theme window style option * Snap attraction (app scwm snap) ** `snap-initialize', `snap-reset' * Various improvements to scwm.el Emacs mode ** Display long responses in own window, sized appropriately ** uncommenting evaluation ** scheme-mode compatibility bindings ** scwm-load-file command * message-window objects now support a background image and explicit sizing ** `message-window-set-image!', `message-window-image' ** `message-window-set-size!', `message-window-size' ** Also added `message-window-id' so you can use message-windows for setting X11 properties (e.g., for GNOME button proxying) * ICCCM Group support (app scwm group) ** `group->windows', `interactive-move-group', `lower-group', `raise-group' ** `move-group', `move-group-to-desk', `move-group-relative' * New window style options ** #:squashed-titlebar, #:no-side-decorations, #:use-theme (see Themes, above) ** better drawing of squashed-titlebars * New menu style options ** #:hover-delay, #:popup-delay (in ms) * Better xclients script support ** `run-dot-xclients-at-startup' * Menuitems can have fg/bg colors and fonts set separately ** `set-menuitem-colors!', `set-menuitem-font!' setters ** `menuitem-colors', `menuitem-font' getters ** `menuitem?' * `menu-title' is now a procedure that returns an item using a different font * Added menuitem option #:submenu (like #:action) that forces an item to be interpreted as a menu item; e.g., lambdas can be used here, they will be evaluated and then the result is expected to be a menu -- permits very dynamic menus. * Changed printable format for menu-item objects. * Added #:by-resource window-list menu option for more intelligent splitting of really long window-list menus * Added `make-window-list-menu' separate from `show-window-list-menu' and changed arguments to show-window-list-menu * Added support for handling Scwm events w/o returning to the main loop ** `handle-pending-events' * The highlighted menu item gets its own color-scheme. ** `set-menu-highlight-colors!', `set-menu-highlight-relief!' setters ** `menu-highlight-colors', `menu-highlight-relief?' getters * Added 'frame-corners and 'frame-sides as the supported names for binding contexts, and deprecate 'corners and 'borders as names for them. * Session management changes. Added `SM-register' to register with the SM; deprecated `SM-client-id'. * Simple xlib drawing support w/o gtk ** `xlib-draw-arc', `xlib-draw-line!', `xlib-draw-rectangle!', etc. * Better handling of color allocation failures ** return a closely-matching color or the black color when called by internal functions, instead of returning #f which ultimately would cause an error soewhere * More robust signal handling ** SIGINT now resets to the main loop (in addition to SIGHUP) ** SIGSEGV resets to the main loop by default to try to avoid crashing. ** use sigsetjmp, siglongjmp to maintain the behaviour. ** `set-handle-segv!' for turning on/off handling of segmentation violations ** `set-reset-on-segv!', `reset-on-segv' to set/read the # of remaining segvs that will reset to the main loop * Window property support for dynamic behaviour of windows through window-properties ** `set-window-property!', `window-property' * Change resize-window's message window to use client units * New command line options ** --no-backtrace [-n] ** --segv-cleanup-and-stop [-p] ** --segv-just-stop [-P] (also `set-handle-segv!') * Misc. new primitives not discussed above ** `resent-input-hook!' ** `add-motion-handler!', `remove-motion-handler!', `reset-motion-handlers!' ** `window-creation-time' returns the time that a window was created ** `get-key-event' returns the next arbitrary key w/ modifiers that the user hits ** `get-mouse-event' returns the next arbitrary mouse button w/ modifiers that the user hits ** `lookup-key' returns the procedures bound to a specific key ** `lookup-mouse' returns the procedures bound to a specific mouse event ** `lookup-procedure-bindings' returns the bindings to a procedure, or all bindings ** `window-valid?' for testing if a window object still is valid. ** `id->message-window' -- convert from a window id to a message window object ** `send-client-message' ** `icon-size' ** `force-reset-window-frame!' -- force redraw of frame ** `select-viewport-position' (returns pointer position and selected window) ** `bind-keycode', `unbind-keycode' -- lower level interface to binding keys, allows release procs ** `undo-all-passive-grabs',`redo-all-passive-grabs', `undo-passive-grab', `redo-passive-grab' ** `keymask-keycode->string', `keysym->keycode', `keymask->string' ** `mod-mask-control', `mod-mask-shift', `mod-mask-hyper', `mod-mask-super', `mod-mask-numlock', `mod-mask-scrolllock' ** `set-mod-mask-numlock!', `set-mod-mask-scrolllock!' ** `animated-resize-window', `animated-resize-frame' ** `force_segv_for_testing', `set-reset-on-segv!', `set-handles-segv!' ** `scwm-last-timestamp' ** `set-menu-colors!', `set-menu-font!', `set-menu-side-picture!', ** `set-menu-background-picture!', `set-menu-extra-options!' ** `image-size' for easier access to special case of `image-properties' ** `any-id->win' * Removed primitives ** dangerous and unnecessary `wait-for-window' procedure ** `select-window' is now a proc in base.scm (replaced with `select-viewport-position' * Misc. changed primitives ** `window-class', `window-resource' are now `window-class-hint' and `window-resource-hint'; `window-class' and `window-resource' are now implemented in base.scm ** `bind-mouse' now takes a 4th argument IMMEDIATE-PROC which gets executed right away on first click, and may disable execution of the more general PROC (3rd arg) ** `make-color' returns the closest color (instead of #f) when alloc color fails (only for 8 bit and lower displays now) ** `get-window' and `select-window' have the kill? argument now a cursor object and the order of arguments has been rearranged ** `bind-keycode' allow release procs like new `bind-keycode' ** `hilite' and `hilight' in primitives is now spelled correctly as `highlight' ** `menulook?' is now spelled menu-look? for consistency ** `set-menu-menu-look!' is now set-menu-look! ** `set-menu-menu-title!' is now set-menu-title! ** `select-viewport-position!' now takes a cursor object as third argument; also affects `select-window-interactively', `get-window' ** `send-client-message' now takes a rest argument with up to four long integers, instead of just one * Misc. new procedures ** `make-window-list-menu' ** `center-placement' ** `fold-menu-list-by-group', `rename-window-interactively' ** `netscape-goto-url' ** `output-of-system-command', `read-until-eof', `chop-newline' ** `animated-iconify', `animated-deiconify', `animated-toggle-iconify' ** `delete-multiple-windows-interactively' ** `bind-two-modifier-key-events', `bind-three-modifier-key-events' ** `current-viewport-offset-xx', `current-viewport-offset-yy' ** `intersection-area', `rectangle-overlap' ** `window-center-top', `window-center-bottom', etc. ** `flash-window', `unflash-window', `stop-flashing-window' * New hooks ** `window-focus-lost-hook', `window-focus-change-hook' ** `load-processing-hook' ** `window-unobscured-hook', `window-partially-obscured-hook', `window-unobscured-hook' ** `window-enter-hook', `window-leave-hook' ** `select-window-enter-hook', `select-window-leave-hook', `select-window-done-hook' ** `edge-enter-hook', `edge-leave-hook', `edge-scroll-hook' ** `window-property-change-hook' ** `desk-size-change-hook', `viewport-position-change-hook' ** `close-window-hook' ** `X-MapRequest-hook' * New scheme modules ** reflection.scm: Support for better introspecting on procedures, including C primitives! ** quote.scm: Support for quoting arbitrary keystrokes that might have a scwm binding so that an application can receive any keystroke ** dir-focus.scm: Support for switching to a window that is a certain direction from the pointer ** window-configuration.scm: support for saving and restoring layout properties of windows ** undo.scm: Heavyweight undo support built on saving global configurations ** ui-constraints-gtk-toggle-menu: Persistent constraints menu support ** xprop-extras.scm: Procs moved from flux. ** window-selection.scm: Permit marking windows and then operating on them as a group ** ScwmButtons.scm: button-bar (toolbar) support, including auto-orienting at screen edges (Thanks Glenn Trigg!) ** group.scm: Window group support (both from window hints and the selected-window list) ** gnome-hints.scm: Support GNOME hints ** kde-hints.scm: Support KDE hints ** animated-iconify.scm: Support for (de)iconification animations ** hover-focus.scm: Add delayed mouse-focus when pointer stays in window for a while ** menus-extras.scm: Extra functionality for menus, moved out from base.scm ** snap.scm: Snap attraction when moving windows ** prompt-bool, prompt-string, prompt-font, prompt-color, prompt-range, prompt-proc: Prompting gtk hboxes for various types ** defoption.scm, preferences.scm: GUI configuration support ** primopts.scm: Define options managing properties controlled by primitive procs. ** ScwmBiff.scm, simplebiff.scm: mail notification (and general file-watching) support ** time-convert.scm: Time unit conversions (Moved procs from flux.scm) ** stringops.scm: General string functionality (moved procs from flux.scm) ** send-string.scm: Synthetic event support ** netscape.scm: Netscape communication support ** ScwmClock.scm: Simple clock using Gtk ** edge-ops.scm: Support actions at edges of viewport ** rgb-database.scm: Read X11 colors from /etc/X11/rgb.txt using `rgb-colors' procedure Note: scwm-0.99.1 was never released-- Debian package maintainer packaged up a release from CVS that had that version number, but it was never an official version of Scwm. We skipped the number to avoid confusion with that packaged version. Changes for scwm-0.9 (released 27-Jan-1999) * Numerous documentation fixes. * Changed handling of window placement and desk selection. Placement procedures are now responsible for selecting the window's desktop and virtual position. * First-class message windows - it is now possible to use multiple persistent message windows with individual styling. * high-level interface to backgrounds in (app scwm desk-background) module. * Interactive-move/resize opaqueness handling improved - it is now possible to specify a predicate on a window or a threshold size for * Experimental quality interface with guile-gtk, plus a few incomplete sample modules for using it. * New session-management-related primitives, SM-client-id and SM-error-message. * New virtual desktop utility functions in (app scwm virtual) module. Snap-align desktops, moves window completely inside the current viewport, and more. * Extensive session management support for use with xsm or gnome-session; see doc/session-management. * Much enhanced menu look configurability. Support for different alignments for side images in the basic style, plus three new styles added, pie-menu-look and circle-pie-menu-look in the (app scwm pie-menus) module and xpm-shaped-menu-look in the (app scwm xpm-menus) module. This allows a very great degree of menu look configurability. * The beginnings of theme support. Include the (app scwm themes) module to use themes. Then you can use the following: var: theme-path window-style option: #:use-theme THEME use-theme THEME #&key FOR-WINDOWS FOR-BACKGROUND (app scwm theme-impl) is an aid for theme implementers. fvwm2, mwm and win95 example themes are provided in the themes/ directory; there is also a brief theme-howto in the doc directory. For now themes only support window and background looks, but soon they will support icon and menu setups as well. * New (app scwm background) for setting backgrounds: reset-background! set-background-color! COLOR set-background-image! IMAGE STYLE ;; STYLE is 'tiled or 'centered make-resized-image IMAGE WIDTH HEIGHT BGCOLOR * Allow user to manipulate message window directly, using display-message MSG hide-message message-window-mapped? set-message-window-position! X Y X_ALIGN Y_ALIGN * Tracking of focus order added. The followinf were added: window-last-focus-time #&optional WIN list-focus-order Also, #:by-focus keyword arguments were added to list-windows and show-window-list-menu, and #:show-last-focus-time to show-window-list-menu. * More window information, setting and action primitives: window-frame-size #&optional WIN resize-frame-to WIDTH HEIGHT #&optional WIN window-icon-shaped? #&optional WIN window-shaped? #&optional WIN window-frame-border-width #&optional WIN window-title-size #&optional WIN get-window-colors #&optional WIN get-highlight-window-colors #&optional WIN set-window-highlight-foreground! COLOR #&optional WIN set-window-highlight-background! COLOR #&optional WIN get-window-focus #&optional WIN * New miscellaneous procedures: X-rotate-cut-buffers elapsed-time user-name user-home * Internal position handling changes. New move-window which moves a window in absolute virtual coordinates; move-to reimplemented in terms of move-window in (app scwm base). move-window and move-to both now take #f for X or Y meaning don't move along that coordinate. * Removed: set-menu-mwm-style! menu-mwm-style * Assorted new hooks: change-desk-hook window-focus-change-hook before-place-new-window-hook * Support for hooking into the interactive resize and move loops: interactive-resize-start-hook interactive-resize-new-size-hook interactive-resize-finish-hook interactive-move-start-hook interactive-move-new-position-hook interactive-move-finish-hook * Improved documentation. * Reworked X resource interface. * support fro explicitly managing the window context: set-window-context! WIN window-context macro: with-window WIN STATEMENT ... * Support for grabbing the server from user code (for protocol atomicity, for instance). macro: with-grabbed-server STATEMENT... X-grab-server X-ungrab-server * (app scwm file) and (app scwm listops) modules added to abstract out common file and list operations. * (app scwm tile) module added to support tile rearangement. tile-windows WINDOWS #&key START-POS END-POS RESIZE RAISE MAX-WINDOWS ORDER tile #&key ONLY EXCEPT BY-STACKING BY-FOCUS REVERSE ALL-VIEWPORTS DESK IGNORE-DEFAULT-EXCEPTIONS START-POS END-POS RESIZE RESTACK MAX-WINDOWS ORDER * (app scwm cascade) module added to let you cascade your windows automatically: cascade-windows WINDOWS #&key START-POS MAX-SIZE RESIZE RAISE X-INCREMENT Y-INCREMENT cascade #&key ONLY EXCEPT BY-STACKING BY-FOCUS REVERSE ALL-VIEWPORTS DESK IGNORE-DEFAULT-EXCEPTIONS START-POS MAX-SIZE RESIZE RAISE X-INCREMENT Y-INCREMENT * Addede #:reverse keyword argument to list-windows and show-window-list-menu; Added #:ignore-winlist-skip option to show-window-list-menu. Also added #:unflash-window-proc and #:flash-window-proc so windows can be specially flashed when they are hilighted. * Enhanced (app scwm style)/(app scwm wininfo) package - support more general predicates on windows nicely. The following procedures return predicates on a window (or in a few cases are predicates on a window): title-match?? STRING #&optional TYPE CASE-SENSITIVE class-match?? STRING #&optional TYPE CASE-SENSITIVE resource-match?? STRING #&optional TYPE CASE-SENSITIVE icon-title-match?? STRING #&optional TYPE CASE-SENSITIVE client-hostname-match?? STRING #&optional TYPE CASE-SENSITIVE Each of these returns a predicate which matches an appropriate aspect of a window to the given pattern string; TYPE may be 'exact, 'regexp or 'wildcard; CASE-SENSITIVE may be #t or #f. always? WIN Returns #t for any value of WIN. never? WIN Returns #f for any value of WIN. win-and?? . PREDICATES win-or?? . PREDICATES win-not?? PREDICATE Returns a predicate that, when applied to a window, is the logical and, logical or, or logical not of the application of PREDICATES or PREDICATE. Some simplification is done. window-match?? STRING #&optional TYPE CASE-SENSITIVE Does the logical or of `title-match??', `class-match??' and `resource-match??' on the same arguments. wildcard-matcher should be deprecated in favor of this. (app scwm style) now has a `default-style-condition-handler' public variable and (app scwm wininfo) has `default-matcher-type' and `default-matcher-case-sensitive' so you can tweak how window-style commands are handled. For example, if you wanted window-style string conditions to be interpreted as regexps to match to the window class only, you could (set! default-style-condition-handler class-match??) (set! default-matcher-type 'regexp) * (app scwm report-usage) Undocumented, please do not use for now. * improved optional and keyword argument handling - errors on invalid keyword args. * base.scm: Added `scwm-is-constraint-enabled?' * winops.scm (maximize, unmaximize): Various fixes to not move the window when unmaximizing, if it has been moved since being maximized. * No longer switches to viewport 0,0 and moves all windows there on shutdown; this is now settable using shutdown-options from the (app scwm shutdown-opts) module. * Remove optional arguments for animation and/or moving pointer from move-window, window-shade, un-window-shade; rename un-window-shade to window-unshade; remove set-animation! and extern declarations assorted variables holding animation parameters. The (app scwm animation) module now provides animated- versions of window-shade, window-unshade, move-window and move-to, as well as set-animation!. * Simplified XProperty interface. * Support for interning/looking up X Atoms. * Properly respect window size increments. * Numerous other bug fixes. Changes for scwm-0.8 (released 14-August-1998) * extract-docs documentation extraction system * usage-logging system -- UDP packet gets sent to a counter machine every time scwm starts up. Disable by setting SCWM_DO_NOT_LOG_USAGE environment variable before starting scwm * all primitives have been documented * better standardized names, more symmetric getters and setters throughout the Scwm API * improved, configurable message-display window when doing window moves, resizes; also usable via a string prompt argument to new primitive, select-window-interactively * much improved scwm.el Emacs interaction mode, including apropos and procedure help * multibyte character support (thanks to ITANI Eiichiro) * squashed titlebar style * added mini-icons option to show-window-list, permit using a window list to select a window w/ select-window-from-window-list * improved X synthetic keystroke and string sending * integration with guile-gtk widget bindings * window objects printable form now includes the title of the window * alpha-quality optional integration of Cassowary constraint solver see http://www.cs.washington.edu/research/constraints/cassowary/ * much improved fvwm2 module support (thanks to Danius Michaelides) * Use XmuPrintDefaultErrorMessage instead of ad-hoc format for X11 errors * Provide ability to popup menus in an appropriate position when selected from a titlebar decoration using new args to popup-menu primitive * New primitives to support X-Properties (thanks Robert Bihlmeyer) * Lots of other new primitives: testing mod-mask availability, restacking-windows, listing windows in their stacking order, X resources, window-transient-for, capturing?, set-X-server-synchronize! * Much improved window gravity support * Much improved window placement configurability, including use of placeement-proc and transient-placement-proc object properties * Hooks: invalid-interaction-hook, cannot-grab-hook * Lots of internal rewrites, including making the code type safe by C++'s more strict rules, using init_XXX functions and guile-snarf pervasively, and better modularizing sub-pieces of scwm (especially reducing numbers of exposed prototypes in header files, and making more functions static), cleanup of Screen struct, ScwmWindow struct. Use SCWM_PROC, SCWM_SYMBOL throughout, and fixed lots of bugs that extract-docs found relating to mis-identifier argument requirements. Changes for scwm-0.7 (released 22-June-1998; 0.7a 26-June-1998) * The start of a TexInfo manual. * New (app scwm auto-raise) module. The #:auto-raise, #:auto-raise-delay, #:auto-raise-focus-proc, #:auto-raise-unfocus-proc and #:auto-raise-unfocus-delay window style options added by this module control auto-raise. Still not as general as I'd like (it should be possible to set an arbitrary number of independent focus-unfocus pairs), but will be eventually. See the auto-raise.scm file for exaple usage. * Added kill-all-fvwm-modules to (app scwm fvwm-module which kills all active fvwm modules; add it to the shutdown hook. * Added transient? primitive for checking wether a window is transient. * Removed bind-event; everything it was used for is now provided by the new hook system. * New system for hooks - allows scwm to set up distinguished Scheme variables that contain a list of procedures to be invoked on certain actions, possibly with arguments. Guile's usual add-hook! macro can be used to add hooks, and remove-hook! can be used to remove them. Here is an example (the (app scwm flux) module must be loaded for this to work: (define (message-show-error . args) (message (with-output-to-string (lambda () (display "scwm error: ") (map (lambda (arg) (write arg) (display " ")) args) (newline))))) (add-hook! error-hook message-show-error) (remove-hook! error-hook message-show-error) Available hooks are: error-hook The procedures in this hook are called with the appropriate throw arguments when an uncaught error occurs. broadcast-hook broadcast-config-hook broadcast-name-hook Called when certain actions happen; used by the fvwm module emulation and auto-raise. Usage in code is not reccomended, as the arguments are strange and poorly specified. before-new-window-hook after-new-window-hook Replace the new-window-hint and window-hint `bind-event' arguments. before-new-window-hook is invoked with the window as an argument before the window sturcture is fully well formed; only window hints should be processed at this time. after-new-window-hook is called when the window structure has been processed in order to set style options. Both get the window object as an argument. shutdown-hook Called before scwm shuts down, with no arguments. * Support for timer hooks. The following procedures may be used to set and cancel timer hooks. add-timer-hook! USEC PROC - schedule a call of procedure PROC with no arguments to occur after about USEC microseconds have elapsed (it may take somewhat longer if there are many x evebts to process). Return a handle suitable to be passed to remove-timer-hook! remove-timer-hook! HANDLE - remove the specified timer hook from the hook list, preventing it from being invoked if it hasn't been already. * Support for input hooks. The following procedures may be used to add and remove input hooks. add-input-hook! PORT PROC - schedule a call of procedure PROC with no arguments to occur whenever PORT has input available. PORT must be an open input file port (since internally it's file descriptor is passed to select). Return a handle suitable to be passed to remove-input-hook! remove-input-hook! HANDLE - remove the specified input hook from the hook list. * ICCCM-compliant detection of modifier keys; the keysyms bound to the modifier are actually checked. Also, "s-" is used for the supper modifier, not "P-". * Added X-version-information and X-display-information primitives, which are needed for FvwmM4 module compatibility, but generally useful in their own right; they take no arguements and return lists of useful information about the X server and display. * Added restarted? primitive, which returns true if this is not an original invocation of scwm, but rather one after a restart. * Color handling changed; colors are now cached as fonts and images. Also, set-window-colors! and set-menu-colors! have been removed, and the following procedures have been added: make-color STRING - replaces load-color color-properties COLOR - returns the properties of a color object: currently only name and the X pixel value it uses. clear-color-cache-entry STRING - clears an entry in the color cache; shouldn't be necessary unless you do something really weird to your X server, but provided for consistency. make-relief-color COLOR FACTOR - factor is a floating point number that is multiplied by the color's saturation and luminosity in HLS sppace. This is used with specific factors to set-hilight-foreground! COLOR, set-hilight-background! COLOR - these replace set-hilight-colors! FG BG set-menu-foreground! COLOR, set-menu-background! COLOR, set-menu-stipple! COLOR - replace set-menu-colors! set-hilight-factor! FLOAT - sets the factor that is used by windows with the current decor to generate the relief "hilight" color for the regular and hilight background. set-shadow-factor! FLOAT - sets the factor that is used by windows with the current decor to generate the relief "shadow" color for the regular and hilight background. hilight-factor, shadow-factor - retrieve the settings of the above two factors from the current decor.] set-menu-hilight-factor! FLOAT, set-menu-shadow-factor! FLOAT, menu-hilight-factor, menu-shadow-factor - analogous to the above but for menus, and are global, not decor-specific. All procedures that take a color (except color-properties) will also accept a string that specifies a color. * New procedure scwm-version returns the current scwm version. * Converted build system to automake and libtool; dependencies should work much better now, and a shared library of libscwmexec is built and installed on systems that support it. Also, make uninstall works. * --with-lispdir=DIR option to configure allows you to specify where emacs-lisp files are to be installed; for instance, if you have emacs installed in /usr and are installing scwm in /usr/local, you may want to configure --with-lispdir=/usr/share/emacs/site-lisp * scwm.el Emacs mode for scwm files much improved; provides intelligent tab completion, apropos, font-locking, support for emacs and xemacs 19 or 20, and other good stuff. * Greatly improved error handling; an error should now display the file, column and line number where it occured, as well as giving a detailed message and a backtrace. * scwmexec and scwmrepl programs much improved; errors and output resulting from evaluation of commands are now displayed. * Numerous bug fixes. Changes for scwm-0.6 (released 6-March-1998) * Changes to installation: Scwm no longer installs it's scheme modules in the guile install locations; instead, it installs them in its own prefix and adds it to the guile load path. The environment variable SCWM_LOAD_PATH will override this location. * Support for fvwm2 modules: Scwm can now execute fvwm2 modules, using an interface written almost entirely in Scheme. This is only slightly slower than the native fvwm module support. The new support is mainly in the new (app scwm fvwm-module) module, using the following procedures: run-fvwm-module PATH RC-FILE CONFIGURATION #&optional OTHER-ARGS Runs the specified module. PATH is the full path to the module binary. RC-FILE is the path to the fvwm2rc file, which does not have to actually exist for most modules. CONFIGURATION is a list of strings which are passed as the module as the configuration information. OTHER-ARGS is an optional list of strings to be passed extra command-line arguments to pass to the module. The procedure returns an fvwm-module object which may be passed to kill-fvwm-module. kill-fvwm-module FVWM-MODULE Kills the module. See the fvwm-module.scm file for additional documentation. * New external program protocol: scwm now supports an improved external program protocol which allows other programs to send commands to a running scwm and get the results. Two new programs take advantage of this: `scwmexec' will send scwm an expression passed on the command line, and print the return value. `scwmrepl' gives the user an interactive session with a running scwm. There is also new emacs support based on these programs, in the form of scwm.el. scwm.el allows either evaluation of single expressions or access to the interactive repl from within emacs. See utilities/dev/scwm.el in the distribution for more details. These changes obsolete the old scwmsend program, scwm --interactive mode, and the old emacs interaction mode, all of which will be removed by the next release. * Improvements to images: Support for images (to be used as icons, buttons, tiles, etc) is much improved. - The path for loading images is now an ordinary Scheme variable, image-load-path, which the user may set to a list of string path prefixes. - Multiple requests to load the same image file will return the same object through the use of a cache. - Loaders may be specified for additional image formats. The new procedures are: make-image FILENAME Return a scheme object representing the image from FILENAME; if FILENAME is an absolute path or relative to the current or parent directory (starts with "/", "./" or "../") the image is loaded directly, otherwise the image-load-path is scanned. image? OBJECT A predicate determining if an object is an image object. image-properties IMAGE Returns an asssociation list of several properties of the image. load-xbm PATHNAME Loads a file as an X bitmap directly from PATHNAME, treating it as an absolute path. This procedure is not intended for direct use, but rather to be registered as an image loader. load-xpm PATHNAME Loads a file as an X pixmap directly from PATHNAME, treating it as an absolute path. This procedure is not intended for direct use, but rather to be registered as an image loader. register-image-loader EXTENSION PROC Registers PROC as an image loader for files ending in EXTENSION. EXTENSION should either be a string starting with a dot, or the string "default", which is used to register the default image loader. unregister-mage-loader EXTENSION Unregisters the image loader for the specified extension. clear-image-cache-entry FNAME Clears the appropriate entry in the image cache; this may be necessary if an image is currently loaded, the file is changed, and the user wants to load the updated version. Note that images are cached both by the name passed to make-image and the fully qualified path name, so two clears may be necessary. In addition to X bitmaps and X pixmaps, GNU zipped X pixmap (".xpm.gz") files are now supported automatically; the icons and mini-icons could in theory all be installed gzipped to save space. * Foreign format image loading through conversion: The new (app scwm image-loaders) module supports several image loaders that attempt to convert a variety of formats through external programs to a natively supported format. ImageMagick-loader Tries to convert the image to xpm using the `convert' program from the ImageMagick package. netpbm-loader Tries to convert the image to xpm using the `anytopnm' and `ppmtoxpm' programs from the ImageMagick package. try-everything-loader Tries both ImageMagick-loader and then netpbm loader if the former fails. In the future, it will support any other available conversion loaders. support-image-conversion Installs try-everything-loader as the default loader. * Improvements to fonts: Fonts are now more properly treated as Scheme objects and should be garbage collected more effectively. They are also cached like images, so multiple calls to make-font with the same font name will return the same font object. make-font FONTNAME Renamed from load-font. font-properties? FONT Returns an association list of properties of the font. clear-font-cache-entry FONTNAME Analogous to clear-image-cache-entry * Improvements to menus: Menus have been much improved. They now include support for side pixmaps a la fvwm95, specification of the fonts and colors to use per individual menu, and a nicer interface for specfying menus. The new interface is in the (app scwm base) module and should be used as follows: menu MENUITEMS #&key IMAGE-SIDE COLOR-BG-IMAGE-SIDE IMAGE-BG COLOR-TEXT COLOR-BG FONT Creates a menu object. The list of menuitems is mandatory, all the other keyword arguments are optional settings. menuitem LABEL #&key IMAGE-ABOVE IMAGE-LEFT EXTRA-LABEL ACTION HOVER-ACTION UNHOVER-ACTION Creates a menuitem suitable for inclusion in a menu. The label is the only required part; keywords may specify images to put above or on the left, additional text to right-justify, an action, and hover and unhover actions. The hover and unhover actions are invoked when the cursor lingers over a menu item without clicking, and the unhover action when the mouse cursor leaves a hovered menu item. This is used to implement submenus. However, it need not be used directly. The action may be a procedure of no arguments, a string, or a menu. If it is a procedure, the procedure will be called when the program is selected, if a string, it will be run as a program. If it is a menu, it will be invoked as a submenu, and the hover and unhover actions will automatically be set up properly. menu-sparator This variable should be passed in lieu of a menuitem when a separator is desired. menu-title This variable should be passed below the title entry of a menuitem when a title separator is desired. * Improved icon handling: Several bugs in icon geometry handling have been fixed. Control over the displayed icon has also been enhanced with several new procedures and style options. set-icon! IMAGE #&optional WINDOW Sets the window's icon image to icon. ICON may be an image object, a string specifying an image file, or #f, indicating no image. set-force-icon! BOOLEAN #&optional WINDOW Specifies wether or not to override the application-supplied image. The default is to ignore the setting established by set-icon! for applications that provide an icon bitmap or icon window, and use the app-provided icon instead. This is the case even if the set-icon! setting is #f. However, setting the force-icon setting to #t will make the user-requested icon take precedence. set-icon-title! BOOLEAN #&optional WINDOW Specifies wether or not the icon title is shown. set-show-icon! BOOLEAN #&optional WINDOW Just determines wether or not the whole icon is shown at all, without affecting any other settings (so setting it to #f and then back to #t will hide and then restore all the original icons). The corresponding style options for use with window-style are #:icon, #:force-icon, #:icon-title and #:show-icon. * Improved example scwmrcs: Two new example scwmrc files are available: juhp.scwmrc and sds.scwmrc. These demonstrate usage of some of the new advanced features. * Support for /etc/X11/wmconfig from Red Hat Linux 5.0: The new (app scwm wmconfig) module allows you to create a menu that matches the spec in the /etc/X11/wmconfig directory under Red Hat Linux 5.0. * Several other useful menus: The (app scwm std-menus) module provides convenience procedures to create menus that allow launching xlock in a variety of modes, and telnetting to a set of specified hosts. * Broadcast hooks: intentionally undocumented for now. * Input hooks: intentionally undocumented for now. * The icon distribution is now separate again, and has it's own installation process. It is reccomended that it be installed with the same --prefix passed to configure. * Many bug fixes and general clean-up. Changes for scwm-0.5 (released 18-November-1997) Many bug fixes to the build process and the program itself. Integrated the icon distribution. The documentation has been updated to roughly reflect current reality. Changes to scwm-0.4 (released 4-November-1997) set-xor-value! has been renamed to set-rubber-band-mask!. Window-shades can now optionally be animated. (See gjb.scwmrc for an example.) Images are now Scheme objects. Anything that takes an image filename string can now take either a filename string or an image object. make-image creates an image object. set-icon-path! and set-pixmap-path! are now gone and replaced by set-image-path!. Paths are no longer environment-variable expanded; use the Scheme procedure getenv if you need this. wait-for-window now takes a predicate rather than a wildcard string. You can pass (wildcard-matcher NAME) to get the old effect. Implementation of decors and faces to allow a fair amount of customization of the look. The low-level interface consists of the make-decor, set-current-decor!, set-window-decor!, make-face, set-title-face!, set-button-face!, set-button-mwm-flag! and set-border-face! procedures, but the new (app scwm decor) and (app scwm face) modules provide the friendlier wrappers with-decor, title-style, button-style and border-style. Added support for set-smart-placement-is-really-smart!, set-click-to-focus-passes-click!, set-click-to-focus-raises! and set-mouse-focus-click-raises!. These are obscure, but being able to have click-to-focus without raising the window is nice. New (app scwm fvwm-compat) module with some fvwm-compatability procedures that are otherwise not very useful. Added send-button-press and send-key-press to send synthetic mouse button and keypress events. Added animated moves - move-to can optionally animate the movement of a window. See gjb.scwmrc for examples. Added unbind-key and unbind-mouse - bindings can now be removed. Added a sendscwm program and scwm-buffer.el; allows some interaction with a running scwm, but the interface is not yet two-way. Added sample.scwmrc/gjb.scwmrc, a scwmrc example that has more features and shows off a lot of new functionality. Improvements to the build process to make VPATH and dependencies work correctly. Many bug fixes. Changes for scwm-0.3 (released 18-October-1997) Fixed prev-window and next-window to deal with windows that do not accept the window focus. Fixed the wildcard matching mechanism. Removed much unused C code. Many bug fixes to the distribution and configuration script; libm and libdl are checked for, libguile is checked for more accurately, and the srcdir/VPATH mechanism works. Assorted fixes to the C files, including a fix of the longstanding bug in interactive move that made moves start in the wrong place. Changes for scwm-0.2 (released ?????) Autoconf configurability. No more futzing with imake, now you can just ./configure; make; make install. Command line option support including interactive mode (scwm -i) which reads your .scwrc and then gives you a read-eval-print loop with the window manager. A recent snapshot of guile is needed for this to work (but that should no longer be necessary in the next scwm release). Fvwm2 Style command implemented (in a way that lets you change [almost] any style option dynamically per window). User extensions to the style command are also possible. Several non-fvwm style options (e.g. start-maximize, start-window-shaded) are already available. See the (app scwm style) module. Improvements to the system.scwmrc file enabled by the implementation of styles, and from user suggestions. Changes to scwm-0.1 (released ?????) All fvwm2 functionality except styles, decors and modules is implemented. Many bugs/limitations from the last release were fixed. Scheme modules that provide extra useful operations are now available. Initial release: scwm-0.0.0 (released ????) Nearly all fvwm functionality is available, but a number of useful things are missing. Copyright information: Copyright (C) 1997, 1998, 1999, 2000 Greg J. Badros and Maciej Stachowiak Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. Local variables: mode: outline paragraph-separate: "[ ]*$" end: