WMLIB(2) WMLIB(2) NAME wmlib: titlebar, titlectl, taskbar, unhide, geom, snarfput, snarfget, tkquote, tkcmds, dialog, getstring, filename, mktabs, tabsctl - window manager toolkit SYNOPSIS include "wmlib.m"; wmlib := load Wmlib Wmlib->PATH; Resize, Hide, Help, OK: con 1 << iota; Appl: con Resize | Hide; init: fn(); titlebar: fn(scr: ref Draw->Screen, where, title: string, buts: int): (ref Tk->Toplevel, chan of string); titlectl: fn(t: ref Tk->Toplevel, request: string); taskbar: fn(t: ref Tk->Toplevel, name: string): string; unhide: fn(); geom: fn(t: ref Tk->Toplevel): string; snarfput: fn(buf: string); snarfget: fn(): string; tkquote: fn(s: string): string; tkcmds: fn(t: ref Tk->Toplevel, cmds: array of string); dialog: fn(p: ref Tk->Toplevel, icon, title, msg: string, dflt: int, labs: list of string): int; getstring: fn(p: ref Tk->Toplevel, s: string): string; filename: fn(scr: ref Draw->Screen, t: ref Tk->Toplevel, title: string, pat: list of string, dir: string): string; mktabs: fn(p: ref Tk->Toplevel, book: string, tabs: array of (string, string), dflt: int): chan of string; tabsctl: fn(p: ref Tk->Toplevel, book: string, tabs: array of (string, string), curid: int, newid: string): int; DESCRIPTION The Wmlib module provides routines for making and updating windows controlled by wm(1). Init should be called once to initialize the internal state of wmlib. Page 1 Plan 9 (printed 12/21/24) WMLIB(2) WMLIB(2) Titlebar creates a collection of Tk widgets on Screen scr, rooted at .Wm_t, using the Tk geometry specification given in where. Additionally where may also contain other required characteristics (such as a font specification) by simply adding them to any geometry specification. The widgets have been packed in the Toplevel returned by titlebar to create a managed titlebar. The title bar consists of a label, .Wm_t.title, and the buttons specified by the bit mask buts. .Wm_t.title is initialized with the string title, and can be reconfigured to change the title of the window. An exit button is always created in the title bar; the buttons defined by the constants Resize, Hide, Help, and OK are optional. Most applications should use the buttons defined by the constant Appl, which is Resize|Hide. A tk(2) event channel is returned by titlebar. Messages received on it should be processed by the application or passed to the titlectl function. The messages include exit The window should be closed. Titlectl will terminate the current process and all members of its process group. ok The OK button was activated. The window should be closed. help The Help button was activated. task The Hide button was activated. Titlectl will unmap the Toplevel, make an entry in the task bar, and suspend the current process. Selecting the task bar entry will remap the Toplevel and allow the process to resume. The simplest well-behaved wm (1) client will therefore con- tain: (t, titlec) := wmlib->titlebar(ctxt.screen, "", "My Program", Wmlib->Appl); # ... for(;;){ alt{ s := <-titlec => wmlib->titlectl(t, s); # handle any other channels } } An application can assign a separate process to handle titlectl, so that only that process will block on Hide, allowing the rest of the application to proceed in the back- ground. Unhide can be called from another process in the same application to unblock the process executing titlectl, Page 2 Plan 9 (printed 12/21/24) WMLIB(2) WMLIB(2) and remap the Toplevel as if by selecting the taskbar entry. Taskbar changes the name displayed in the title bar and the window's name when it is in the task bar. Geom returns a string with the coordinates for a child win- dow. Snarfget and snarfput retrieve and replace the contents of the window manager's snarf buffer. The remaining functions build on the Tk module to provide some common user interface functions. Filename makes a dialog panel for selecting a file. It is displayed on screen near parent. Dir gives the directory where the file search should begin. Only files that match pat are displayed. The returned string is the name of the selected file, or the empty string if no file was selected. Tkquote returns a string that is the same as its arguments, but enclosed in curly braces and with internal curly braces escaped. This can be used to make an arbitrary string into a word suitable as an argument to a Tk function. Tkcmds executes tkcmd on all strings in the argument array, using top for the first argument of Tkcmd. It does not check for error returns. Dialog pops up a dialog box, with the given title and an optional icon, near the corner of the parent top level wid- get, p. It displays the given msg and a number of buttons, labelled with the strings in labs. The dialog box waits for the user to push a button, and then returns the index of the button pushed (the first element of labs is index 0). If the user types a newline, the dflt value is returned. The button with the dflt index is specially outlined in the dia- log box. Getstring pops up a dialog box near the corner of the parent top level widget, p. The box contains the msg and an entry widget. It waits for the user to type a string and a new- line, and then returns the typed string, without the new- line. Mktabs creates a tabbed notebook pseudo widget, book, for insertion into widget p. Once created, book can be packed like any other Tk widget. Information for specific tab pages is contained in the tabs array. For each page, tabs contains the name displayed in the tab and a Tk widget name. Whenever a page is selected, its widget is packed in book and displayed. The notebook will initially display the page Page 3 Plan 9 (printed 12/21/24) WMLIB(2) WMLIB(2) indexed by dflt. Mktabs returns a Tk event channel. Mes- sages received on this channel should be passed as the newid argument to tabsctl. Tabsctl controls a tabbed notebook. Curid is the index of the page currently selected in the notebook. Newid is a string containing the index of the new page to be displayed; this is usually the information received on the tabs chan- nel. The index of the newly selected page is returned. FILES /chan/snarf snarf buffer maintained by wm(1) /chan/wm channel for interaction with wm(1) SOURCE /appl/lib/wmlib.b SEE ALSO draw-context(2), tk(2) Page 4 Plan 9 (printed 12/21/24)