126 lines
No EOL
18 KiB
HTML
126 lines
No EOL
18 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<title>CLiki: tinywm-lisp</title>
|
|
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
|
|
href="https://www.cliki.net/site/feed/article.atom?title=tinywm-lisp">
|
|
<link rel="stylesheet" href="static/css/style.css">
|
|
<link rel="stylesheet" href="static/css/colorize.css">
|
|
</head>
|
|
|
|
<body>
|
|
<span class="hidden">CLiki - tinywm-lisp</span>
|
|
<div id="content"><div id="content-area"><div id="article-title">tinywm-lisp</div><div id="article">tinywm-lisp is a Common Lisp port of the <a href="http://incise.org/tinywm.html">TinyWM</a> <a href="X11.html" class="category">X11</a> <a href="window manager.html" class="category">window manager</a>.<p><div class="code"><span class="nonparen"><span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_shadow.html" class="symbol">shadow</a> 'char-width</span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_use-package.html" class="symbol">use-package</a> <span class="keyword">:xlib</span></span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*mods*</span> '<span class="paren2">(<span class="nonparen"><span class="keyword">:mod-1</span></span>)</span></span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*move*</span> 1</span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*resize*</span> 3</span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*lower*</span> 4</span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*raise*</span> 5</span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*display*</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span> <span class="comment">; set this to an integer to do testing with xnest
|
|
</span>
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defun.html" class="symbol"><i><span class="symbol">defun</span></i></a> open-default-display <span class="paren2">(<span class="nonparen">&optional display-name</span>)</span>
|
|
<span class="string">"Open a connection to DISPLAY-NAME if supplied, or to the appropriate
|
|
default display as given by GET-DEFAULT-DISPLAY otherwise.
|
|
|
|
OPEN-DISPLAY-NAME always attempts to do display authorization. The
|
|
hostname is resolved to an address, then authorization data for the
|
|
(protocol, host-address, displaynumber) triple is looked up in the
|
|
file given by AUTHORITY_PATHNAME (typically $HOME/.Xauthority). If
|
|
the protocol is :local, or if the hostname resolves to the local host,
|
|
authority data for the local machine's actual hostname - as returned by
|
|
gethostname(3) - is used instead."</span>
|
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_destructuring-bind.html" class="symbol">destructuring-bind</a> <span class="paren3">(<span class="nonparen">host display screen protocol</span>)</span>
|
|
<span class="paren3">(<span class="nonparen">get-default-display display-name</span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignore</a> screen</span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen">open-display host <span class="keyword">:display</span> display <span class="keyword">:protocol</span> protocol</span>)</span></span>)</span></span>)</span>
|
|
|
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defun.html" class="symbol"><i><span class="symbol">defun</span></i></a> main <span class="paren2">(<span class="nonparen"></span>)</span>
|
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let*</span></i></a> <span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">display <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="special">*display*</span>
|
|
<span class="paren6">(<span class="nonparen">open-display <span class="string">""</span> <span class="keyword">:display</span> <span class="special">*display*</span></span>)</span>
|
|
<span class="paren6">(<span class="nonparen">open-default-display</span>)</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">screen <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">first</a> <span class="paren6">(<span class="nonparen">display-roots display</span>)</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">root <span class="paren5">(<span class="nonparen">screen-root screen</span>)</span></span>)</span></span>)</span>
|
|
|
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren4">(<span class="nonparen">button <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="special">*move*</span> <span class="special">*resize*</span> <span class="special">*lower*</span> <span class="special">*raise*</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">grab-button root button '<span class="paren5">(<span class="nonparen"><span class="keyword">:button-press</span></span>)</span> <span class="keyword">:modifiers</span> <span class="special">*mods*</span></span>)</span></span>)</span>
|
|
|
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_unwind-protect.html" class="symbol"><i><span class="symbol">unwind-protect</span></i></a>
|
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let</span></i></a> <span class="paren5">(<span class="nonparen">last-button last-x last-y</span>)</span>
|
|
<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_docm_dost.html" class="symbol">do</a> <span class="paren6">(<span class="nonparen"></span>)</span> <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span> <span class="comment">; infinite loop
|
|
</span> <span class="paren6">(<span class="nonparen">event-case <span class="paren1">(<span class="nonparen">display <span class="keyword">:discard-p</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
|
<span class="comment">;; for key-press and key-release, code is the keycode
|
|
</span> <span class="comment">;; for button-press and button-release, code is the button number
|
|
</span> <span class="paren1">(<span class="nonparen"><span class="keyword">:button-press</span> <span class="paren2">(<span class="nonparen">code child event-window</span>)</span>
|
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_cond.html" class="symbol"><i><span class="symbol">cond</span></i></a> <span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">= code <span class="special">*raise*</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">circulate-window-up root</span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">= code <span class="special">*lower*</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">circulate-window-down root</span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> <span class="paren5">(<span class="nonparen">= code <span class="special">*move*</span></span>)</span>
|
|
<span class="paren5">(<span class="nonparen">= code <span class="special">*resize*</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> child <span class="comment">; do nothing if we're not over a window
|
|
</span> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> last-button code</span>)</span>
|
|
<span class="paren5">(<span class="nonparen">grab-pointer child '<span class="paren6">(<span class="nonparen"><span class="keyword">:pointer-motion</span> <span class="keyword">:button-release</span></span>)</span></span>)</span>
|
|
<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let</span></i></a> <span class="paren6">(<span class="nonparen"><span class="paren1">(<span class="nonparen">lst <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_multiple-value-list.html" class="symbol">multiple-value-list</a> <span class="paren3">(<span class="nonparen">query-pointer root</span>)</span></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> last-x <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">sixth</a> lst</span>)</span>
|
|
last-y <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">seventh</a> lst</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><span class="keyword">:motion-notify</span>
|
|
<span class="paren2">(<span class="nonparen">event-window root-x root-y</span>)</span>
|
|
<span class="comment">;; while(XCheckTypedEvent(display, MotionNotify, &ev));
|
|
</span> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let</span></i></a> <span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">delta-x <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_-.html" class="symbol">-</a> root-x last-x</span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">delta-y <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_-.html" class="symbol">-</a> root-y last-y</span>)</span></span>)</span></span>)</span>
|
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_cond.html" class="symbol"><i><span class="symbol">cond</span></i></a> <span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">= last-button <span class="special">*move*</span></span>)</span>
|
|
<span class="comment">;; (incf (drawable-x event-window) delta-x)
|
|
</span> <span class="comment">;; (incf (drawable-y event-window) delta-y)
|
|
</span> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren6">(<span class="nonparen">drawable-x event-window</span>)</span> root-x
|
|
<span class="paren6">(<span class="nonparen">drawable-y event-window</span>)</span> root-y</span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">= last-button <span class="special">*resize*</span></span>)</span>
|
|
<span class="comment">;; (incf (drawable-width event-window) delta-x)
|
|
</span> <span class="comment">;; (incf (drawable-height event-window) delta-y)
|
|
</span> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren6">(<span class="nonparen">drawable-width event-window</span>)</span>
|
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_maxcm_min.html" class="symbol">max</a> 1 <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_-.html" class="symbol">-</a> root-x <span class="paren2">(<span class="nonparen">drawable-x event-window</span>)</span></span>)</span></span>)</span>
|
|
<span class="paren6">(<span class="nonparen">drawable-height event-window</span>)</span>
|
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_maxcm_min.html" class="symbol">max</a> 1 <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_-.html" class="symbol">-</a> root-y <span class="paren2">(<span class="nonparen">drawable-y event-window</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren1">(<span class="nonparen"><span class="keyword">:button-release</span> <span class="paren2">(<span class="nonparen"></span>)</span>
|
|
<span class="paren2">(<span class="nonparen">ungrab-pointer display</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren5">(<span class="nonparen">button <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="special">*move*</span> <span class="special">*resize*</span> <span class="special">*lower*</span> <span class="special">*raise*</span></span>)</span></span>)</span>
|
|
<span class="paren5">(<span class="nonparen">ungrab-button root button <span class="keyword">:modifiers</span> <span class="special">*mods*</span></span>)</span></span>)</span>
|
|
<span class="paren4">(<span class="nonparen">close-display display</span>)</span></span>)</span></span>)</span></span>)</span></span></div></div></div>
|
|
<div id="footer" class="buttonbar"><ul><li><a href="tinywm-lisp.html">Current version</a></li>
|
|
<li><a href="https://www.cliki.net/site/history?article=tinywm-lisp">History</a></li>
|
|
<li><a href="https://www.cliki.net/site/backlinks?article=tinywm-lisp">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=tinywm-lisp&from-revision=3803591607">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
|
|
</div>
|
|
<div id="header-buttons" class="buttonbar">
|
|
<ul>
|
|
<li><a href="https://www.cliki.net/">Home</a></li>
|
|
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
|
|
<li><a href="CLiki.html">About</a></li>
|
|
<li><a href="Text Formatting.html">Text Formatting</a></li>
|
|
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
|
|
</ul>
|
|
<div id="search">
|
|
<form action="https://www.cliki.net/site/search">
|
|
<label for="search_query" class="hidden">Search CLiki</label>
|
|
<input type="text" name="query" id="search_query" value="" />
|
|
<input type="submit" value="search" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div id="pageheader">
|
|
<div id="header">
|
|
<span id="logo">CLiki</span>
|
|
<span id="slogan">the common lisp wiki</span>
|
|
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
|
|
<label for="login_name" class="hidden">Account name</label>
|
|
<input type="text" name="name" id="login_name" class="login_input" />
|
|
<label for= "login_password" class="hidden">Password</label>
|
|
<input type="password" name="password" id="login_password" class="login_input" />
|
|
<input type="submit" name="login" value="login" id="login_submit" /><br />
|
|
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
|
|
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body></html> |