Deploying to gh-pages from @ Aire-One/awesome-slot@cd600b0b01 🚀
This commit is contained in:
parent
76b73a8f46
commit
38dadae59a
|
@ -0,0 +1,364 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<head>
|
||||
<title>A declarative API to connect signals for the AwesomeWM</title>
|
||||
<link rel="stylesheet" href="ldoc.css" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="container">
|
||||
|
||||
<div id="product">
|
||||
<div id="product_logo"></div>
|
||||
<div id="product_name"><big><b></b></big></div>
|
||||
<div id="product_description"></div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
|
||||
<div id="main">
|
||||
|
||||
|
||||
<!-- Menu -->
|
||||
|
||||
<div id="navigation">
|
||||
<br/>
|
||||
<h1>awesome-slot</h1>
|
||||
|
||||
|
||||
<h2>Contents</h2>
|
||||
<ul>
|
||||
<li><a href="#Constructor">Constructor</a></li>
|
||||
<li><a href="#Static_functions">Static functions</a></li>
|
||||
<li><a href="#Tables">Tables</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Modules</h2>
|
||||
<ul class="nowrap">
|
||||
<li><strong>init</strong></li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
|
||||
<h1>Module <code>init</code></h1>
|
||||
<p>AwesomeWM - Slot</p>
|
||||
|
||||
<p> A declarative API to connect signals for the AwesomeWM.</p>
|
||||
<p>
|
||||
|
||||
<p> It completes the native <code>gears.signal</code> module to make signal connection
|
||||
easier to manage.</p>
|
||||
|
||||
<h2> Usage example</h2>
|
||||
|
||||
<p> Tis module allows to create Slot objects. These object can connect to any
|
||||
signals from Awesome WM's <code>gears.object</code>s and module level signals.</p>
|
||||
|
||||
<p> In the following example, we create a slot that connects to the <code>client</code>
|
||||
global <code>"request::default_keybindings"</code> signal to attach keybindings to
|
||||
clients.</p>
|
||||
|
||||
<p> The <code>slot.slots.client.append_keybindings</code> function is part of this module
|
||||
and is defined as a function iterating over the <code>keybindings</code> parameter to
|
||||
register all defined keybindings with the <code>awful.keyboard.append_client_keybindings</code>
|
||||
function.</p>
|
||||
|
||||
|
||||
<pre>
|
||||
<span class="keyword">local</span> client_keybinding = slot {
|
||||
id = <span class="string">"CLIENT_KEY_BINDINGS"</span>,
|
||||
connect = <span class="keyword">true</span>,
|
||||
target = capi.client,
|
||||
signal = <span class="string">"request::default_keybindings"</span>,
|
||||
slot = slot.slots.client.append_keybindings,
|
||||
slot_params = {
|
||||
keybindings = {
|
||||
awful.key({ <span class="string">"Mod4"</span> }, <span class="string">"f"</span>,
|
||||
<span class="keyword">function</span>(client)
|
||||
client.fullscreen = <span class="keyword">not</span> client.fullscreen
|
||||
client:raise()
|
||||
<span class="keyword">end</span>,
|
||||
{ description = <span class="string">"toggle fullscreen"</span>, group = <span class="string">"client"</span> }),
|
||||
},
|
||||
<span class="comment">-- ...
|
||||
</span> },
|
||||
}
|
||||
</pre>
|
||||
|
||||
</p>
|
||||
<h3>Info:</h3>
|
||||
<ul>
|
||||
<li><strong>Copyright</strong>: 2021 Aire-One <a href="mailto:aireone@aireone.xyz">aireone@aireone.xyz</a></li>
|
||||
<li><strong>Author</strong>: Aire-One</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2><a href="#Constructor">Constructor</a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot">awesome_slot</a></td>
|
||||
<td class="summary">Create a new Slot instance.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2><a href="#Static_functions">Static functions</a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.get_slot">awesome_slot.get_slot</a></td>
|
||||
<td class="summary">Find a previously registered slot.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.remove">awesome_slot.remove</a></td>
|
||||
<td class="summary">Remove a registered slot and disconnect it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.connect">awesome_slot.connect</a></td>
|
||||
<td class="summary">Connect a slot to its signal.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.disconnect">awesome_slot.disconnect</a></td>
|
||||
<td class="summary">Disconnect a slot from its signal.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2><a href="#Tables">Tables</a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.slots">awesome_slot.slots</a></td>
|
||||
<td class="summary">Slots defined by this module.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" ><a href="#awesome_slot.static_connect">awesome_slot.static_connect</a></td>
|
||||
<td class="summary">Special objects that require a static connection instead of object level connection.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
|
||||
<h2 class="section-header "><a name="Constructor"></a>Constructor</h2>
|
||||
|
||||
<dl class="function">
|
||||
<dt>
|
||||
<a name = "awesome_slot"></a>
|
||||
<strong>awesome_slot</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#116">line 116</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Create a new Slot instance.
|
||||
|
||||
|
||||
<h3>Parameters:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">params</span>
|
||||
|
||||
|
||||
<ul>
|
||||
<li><span class="parameter">id</span>
|
||||
<span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
|
||||
The slot ID.
|
||||
(<em>optional</em>)
|
||||
</li>
|
||||
<li><span class="parameter">target</span>
|
||||
<span class="types"><span class="type">any</span></span>
|
||||
The slot target object.
|
||||
</li>
|
||||
<li><span class="parameter">signal</span>
|
||||
<span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
|
||||
The signal the slot connects to.
|
||||
</li>
|
||||
<li><span class="parameter">slot</span>
|
||||
<span class="types"><span class="type">function</span></span>
|
||||
The callback function to connect to the signal.
|
||||
</li>
|
||||
<li><span class="parameter">slot_params</span>
|
||||
<span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
|
||||
The parameters to pass to the callback
|
||||
function. (The signal will invok the callback function with this table as
|
||||
parameter)
|
||||
</li>
|
||||
<li><span class="parameter">connect</span>
|
||||
<span class="types"><span class="type">boolean</span></span>
|
||||
Connect the slot now.
|
||||
(<em>default</em> false)
|
||||
</li>
|
||||
</li></ul>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<h2 class="section-header "><a name="Static_functions"></a>Static functions</h2>
|
||||
|
||||
<dl class="function">
|
||||
<dt>
|
||||
<a name = "awesome_slot.get_slot"></a>
|
||||
<strong>awesome_slot.get_slot</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#95">line 95</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Find a previously registered slot. </p>
|
||||
|
||||
<p> If the slot asked doesn't exist, the function will fail and throw an error.
|
||||
|
||||
|
||||
<h3>Parameters:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">slot</span>
|
||||
<span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a> or <span class="type">Slot</span></span>
|
||||
The slot id or instance to find.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
<dt>
|
||||
<a name = "awesome_slot.remove"></a>
|
||||
<strong>awesome_slot.remove</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#147">line 147</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Remove a registered slot and disconnect it.
|
||||
|
||||
|
||||
<h3>Parameters:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">slot</span>
|
||||
<span class="types"><span class="type">Slot</span></span>
|
||||
The slot to remove.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
<dt>
|
||||
<a name = "awesome_slot.connect"></a>
|
||||
<strong>awesome_slot.connect</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#162">line 162</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Connect a slot to its signal.
|
||||
|
||||
|
||||
<h3>Parameters:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">slot</span>
|
||||
<span class="types"><span class="type">Slot</span></span>
|
||||
The slot to connect.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
<dt>
|
||||
<a name = "awesome_slot.disconnect"></a>
|
||||
<strong>awesome_slot.disconnect</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#184">line 184</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Disconnect a slot from its signal.
|
||||
|
||||
|
||||
<h3>Parameters:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">slot</span>
|
||||
<span class="types"><span class="type">Slot</span></span>
|
||||
The slot to disconnect.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<h2 class="section-header "><a name="Tables"></a>Tables</h2>
|
||||
|
||||
<dl class="function">
|
||||
<dt>
|
||||
<a name = "awesome_slot.slots"></a>
|
||||
<strong>awesome_slot.slots</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#59">line 59</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Slots defined by this module.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
<dt>
|
||||
<a name = "awesome_slot.static_connect"></a>
|
||||
<strong>awesome_slot.static_connect</strong>
|
||||
<a style="float:right;" href="source/init.lua.html#63">line 63</a>
|
||||
</dt>
|
||||
<dd>
|
||||
Special objects that require a static connection instead of object level connection.
|
||||
|
||||
|
||||
<h3>Fields:</h3>
|
||||
<ul>
|
||||
<li><span class="parameter">client</span>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
<li><span class="parameter">screen</span>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
<li><span class="parameter">tag</span>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
<li><span class="parameter">ruled_client</span>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
<li><span class="parameter">ruled_notification</span>
|
||||
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
</div> <!-- id="content" -->
|
||||
</div> <!-- id="main" -->
|
||||
<div id="about">
|
||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||
<i style="float:right;">Last updated 2021-10-21 17:48:08 </i>
|
||||
</div> <!-- id="about" -->
|
||||
</div> <!-- id="container" -->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,303 @@
|
|||
/* BEGIN RESET
|
||||
|
||||
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.com/yui/license.html
|
||||
version: 2.8.2r1
|
||||
*/
|
||||
html {
|
||||
color: #000;
|
||||
background: #FFF;
|
||||
}
|
||||
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
fieldset,img {
|
||||
border: 0;
|
||||
}
|
||||
address,caption,cite,code,dfn,em,strong,th,var,optgroup {
|
||||
font-style: inherit;
|
||||
font-weight: inherit;
|
||||
}
|
||||
del,ins {
|
||||
text-decoration: none;
|
||||
}
|
||||
li {
|
||||
margin-left: 20px;
|
||||
}
|
||||
caption,th {
|
||||
text-align: left;
|
||||
}
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
font-size: 100%;
|
||||
font-weight: bold;
|
||||
}
|
||||
q:before,q:after {
|
||||
content: '';
|
||||
}
|
||||
abbr,acronym {
|
||||
border: 0;
|
||||
font-variant: normal;
|
||||
}
|
||||
sup {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
sub {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
legend {
|
||||
color: #000;
|
||||
}
|
||||
input,button,textarea,select,optgroup,option {
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
font-style: inherit;
|
||||
font-weight: inherit;
|
||||
}
|
||||
input,button,textarea,select {*font-size:100%;
|
||||
}
|
||||
/* END RESET */
|
||||
|
||||
body {
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
font-family: arial, helvetica, geneva, sans-serif;
|
||||
background-color: #ffffff; margin: 0px;
|
||||
}
|
||||
|
||||
code, tt { font-family: monospace; font-size: 1.1em; }
|
||||
span.parameter { font-family:monospace; }
|
||||
span.parameter:after { content:":"; }
|
||||
span.types:before { content:"("; }
|
||||
span.types:after { content:")"; }
|
||||
.type { font-weight: bold; font-style:italic }
|
||||
|
||||
body, p, td, th { font-size: .95em; line-height: 1.2em;}
|
||||
|
||||
p, ul { margin: 10px 0 0 0px;}
|
||||
|
||||
strong { font-weight: bold;}
|
||||
|
||||
em { font-style: italic;}
|
||||
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
margin: 20px 0 20px 0;
|
||||
}
|
||||
h2, h3, h4 { margin: 15px 0 10px 0; }
|
||||
h2 { font-size: 1.25em; }
|
||||
h3 { font-size: 1.15em; }
|
||||
h4 { font-size: 1.06em; }
|
||||
|
||||
a:link { font-weight: bold; color: #004080; text-decoration: none; }
|
||||
a:visited { font-weight: bold; color: #006699; text-decoration: none; }
|
||||
a:link:hover { text-decoration: underline; }
|
||||
|
||||
hr {
|
||||
color:#cccccc;
|
||||
background: #00007f;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
blockquote { margin-left: 3em; }
|
||||
|
||||
ul { list-style-type: disc; }
|
||||
|
||||
p.name {
|
||||
font-family: "Andale Mono", monospace;
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: rgb(245, 245, 245);
|
||||
border: 1px solid #C0C0C0; /* silver */
|
||||
padding: 10px;
|
||||
margin: 10px 0 10px 0;
|
||||
overflow: auto;
|
||||
font-family: "Andale Mono", monospace;
|
||||
}
|
||||
|
||||
pre.example {
|
||||
font-size: .85em;
|
||||
}
|
||||
|
||||
table.index { border: 1px #00007f; }
|
||||
table.index td { text-align: left; vertical-align: top; }
|
||||
|
||||
#container {
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
#product {
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#product big {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
#main {
|
||||
background-color: #f0f0f0;
|
||||
border-left: 2px solid #cccccc;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
float: left;
|
||||
width: 14em;
|
||||
vertical-align: top;
|
||||
background-color: #f0f0f0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
#navigation h2 {
|
||||
background-color:#e7e7e7;
|
||||
font-size:1.1em;
|
||||
color:#000000;
|
||||
text-align: left;
|
||||
padding:0.2em;
|
||||
border-top:1px solid #dddddd;
|
||||
border-bottom:1px solid #dddddd;
|
||||
}
|
||||
|
||||
#navigation ul
|
||||
{
|
||||
font-size:1em;
|
||||
list-style-type: none;
|
||||
margin: 1px 1px 10px 1px;
|
||||
}
|
||||
|
||||
#navigation li {
|
||||
text-indent: -1em;
|
||||
display: block;
|
||||
margin: 3px 0px 0px 22px;
|
||||
}
|
||||
|
||||
#navigation li li a {
|
||||
margin: 0px 3px 0px -1em;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin-left: 14em;
|
||||
padding: 1em;
|
||||
width: 700px;
|
||||
border-left: 2px solid #cccccc;
|
||||
border-right: 2px solid #cccccc;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#about {
|
||||
clear: both;
|
||||
padding: 5px;
|
||||
border-top: 2px solid #cccccc;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
font: 12pt "Times New Roman", "TimeNR", Times, serif;
|
||||
}
|
||||
a { font-weight: bold; color: #004080; text-decoration: underline; }
|
||||
|
||||
#main {
|
||||
background-color: #ffffff;
|
||||
border-left: 0px;
|
||||
}
|
||||
|
||||
#container {
|
||||
margin-left: 2%;
|
||||
margin-right: 2%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#content {
|
||||
padding: 1em;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
display: none;
|
||||
}
|
||||
pre.example {
|
||||
font-family: "Andale Mono", monospace;
|
||||
font-size: 10pt;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
}
|
||||
|
||||
table.module_list {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #cccccc;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.module_list td {
|
||||
border-width: 1px;
|
||||
padding: 3px;
|
||||
border-style: solid;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
table.module_list td.name { background-color: #f0f0f0; min-width: 200px; }
|
||||
table.module_list td.summary { width: 100%; }
|
||||
|
||||
|
||||
table.function_list {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #cccccc;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.function_list td {
|
||||
border-width: 1px;
|
||||
padding: 3px;
|
||||
border-style: solid;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
table.function_list td.name { background-color: #f0f0f0; min-width: 200px; }
|
||||
table.function_list td.summary { width: 100%; }
|
||||
|
||||
ul.nowrap {
|
||||
overflow:auto;
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;}
|
||||
dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;}
|
||||
dl.table h3, dl.function h3 {font-size: .95em;}
|
||||
|
||||
/* stop sublists from having initial vertical space */
|
||||
ul ul { margin-top: 0px; }
|
||||
ol ul { margin-top: 0px; }
|
||||
ol ol { margin-top: 0px; }
|
||||
ul ol { margin-top: 0px; }
|
||||
|
||||
/* make the target distinct; helps when we're navigating to a function */
|
||||
a:target + * {
|
||||
background-color: #FF9;
|
||||
}
|
||||
|
||||
|
||||
/* styles for prettification of source */
|
||||
pre .comment { color: #558817; }
|
||||
pre .constant { color: #a8660d; }
|
||||
pre .escape { color: #844631; }
|
||||
pre .keyword { color: #aa5050; font-weight: bold; }
|
||||
pre .library { color: #0e7c6b; }
|
||||
pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
|
||||
pre .string { color: #8080ff; }
|
||||
pre .number { color: #f8660d; }
|
||||
pre .operator { color: #2239a8; font-weight: bold; }
|
||||
pre .preprocessor, pre .prepro { color: #a33243; }
|
||||
pre .global { color: #800080; }
|
||||
pre .user-keyword { color: #800080; }
|
||||
pre .prompt { color: #558817; }
|
||||
pre .url { color: #272fc2; text-decoration: underline; }
|
||||
|
|
@ -0,0 +1,262 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<head>
|
||||
<title>A declarative API to connect signals for the AwesomeWM</title>
|
||||
<link rel="stylesheet" href="../ldoc.css" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="container">
|
||||
|
||||
<div id="product">
|
||||
<div id="product_logo"></div>
|
||||
<div id="product_name"><big><b></b></big></div>
|
||||
<div id="product_description"></div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
|
||||
<div id="main">
|
||||
|
||||
|
||||
<!-- Menu -->
|
||||
|
||||
<div id="navigation">
|
||||
<br/>
|
||||
<h1>awesome-slot</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>Source</h2>
|
||||
<ul class="nowrap">
|
||||
<li><strong>init.lua</strong></li>
|
||||
</ul>
|
||||
<h2>Modules</h2>
|
||||
<ul class="nowrap">
|
||||
<li><a href="../index.html">init</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="content">
|
||||
|
||||
<h2>init.lua</h2>
|
||||
<pre>
|
||||
<span class="comment">-----
|
||||
</span><span class="comment">-- AwesomeWM - Slot
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- A declarative API to connect signals for the AwesomeWM.
|
||||
</span><span class="comment">-- It completes the native <code>gears.signal</code> module to make signal connection
|
||||
</span><span class="comment">-- easier to manage.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- Usage example
|
||||
</span><span class="comment">-- ---
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- Tis module allows to create Slot objects. These object can connect to any
|
||||
</span><span class="comment">-- signals from Awesome WM's <code>gears.object</code>s and module level signals.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- In the following example, we create a slot that connects to the <code>client</code>
|
||||
</span><span class="comment">-- global <code>"request::default_keybindings"</code> signal to attach keybindings to
|
||||
</span><span class="comment">-- clients.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- The <code>slot.slots.client.append_keybindings</code> function is part of this module
|
||||
</span><span class="comment">-- and is defined as a function iterating over the <code>keybindings</code> parameter to
|
||||
</span><span class="comment">-- register all defined keybindings with the <code>awful.keyboard.append_client_keybindings</code>
|
||||
</span><span class="comment">-- function.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- local client_keybinding = slot {
|
||||
</span><span class="comment">-- id = "CLIENT_KEY_BINDINGS",
|
||||
</span><span class="comment">-- connect = true,
|
||||
</span><span class="comment">-- target = capi.client,
|
||||
</span><span class="comment">-- signal = "request::default_keybindings",
|
||||
</span><span class="comment">-- slot = slot.slots.client.append_keybindings,
|
||||
</span><span class="comment">-- slot_params = {
|
||||
</span><span class="comment">-- keybindings = {
|
||||
</span><span class="comment">-- awful.key({ "Mod4" }, "f",
|
||||
</span><span class="comment">-- function(client)
|
||||
</span><span class="comment">-- client.fullscreen = not client.fullscreen
|
||||
</span><span class="comment">-- client:raise()
|
||||
</span><span class="comment">-- end,
|
||||
</span><span class="comment">-- { description = "toggle fullscreen", group = "client" }),
|
||||
</span><span class="comment">-- },
|
||||
</span><span class="comment">-- -- ...
|
||||
</span><span class="comment">-- },
|
||||
</span><span class="comment">-- }
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @author Aire-One
|
||||
</span><span class="comment">-- @copyright 2021 Aire-One <aireone@aireone.xyz>
|
||||
</span><span class="comment">-----
|
||||
</span>
|
||||
<span class="keyword">local</span> gtable = <span class="global">require</span> <span class="string">"gears.table"</span>
|
||||
|
||||
<span class="keyword">local</span> capi = {
|
||||
client = _G.client,
|
||||
screen = _G.screen,
|
||||
tag = _G.tag,
|
||||
}
|
||||
|
||||
<span class="keyword">local</span> awesome_slot = {
|
||||
mt = {},
|
||||
|
||||
<span class="comment">--- Slots defined by this module.
|
||||
</span> <a id="59"></a><span class="comment">-- @table awesome_slot.slots
|
||||
</span> slots = <span class="global">require</span> <span class="string">"awesome-slot.slots"</span>,
|
||||
|
||||
<span class="comment">--- Special objects that require a static connection instead of object level connection.
|
||||
</span> <a id="63"></a><span class="comment">-- @table awesome_slot.static_connect
|
||||
</span> static_connect = {
|
||||
client = capi.client,
|
||||
screen = capi.screen,
|
||||
tag = capi.tag,
|
||||
ruled_client = <span class="global">require</span> <span class="string">"ruled.client"</span>,
|
||||
ruled_notification = <span class="global">require</span> <span class="string">"ruled.notification"</span>,
|
||||
},
|
||||
|
||||
_private = {
|
||||
registered_slots = {},
|
||||
},
|
||||
}
|
||||
|
||||
<span class="keyword">local</span> <span class="keyword">function</span> generate_id(base_id)
|
||||
<span class="keyword">local</span> id = base_id
|
||||
<span class="keyword">local</span> n = <span class="number">0</span>
|
||||
|
||||
<span class="keyword">while</span> awesome_slot.slots[id] ~= <span class="keyword">nil</span> <span class="keyword">do</span>
|
||||
n = n + <span class="number">1</span>
|
||||
id = base_id .. <span class="string">"_#"</span> .. n
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="keyword">return</span> id
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">--- Find a previously registered slot.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- If the slot asked doesn't exist, the function will fail and throw an error.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @tparam string|Slot slot The slot id or instance to find.
|
||||
</span><span class="comment">-- @treturn Slot The slot.
|
||||
</span><a id="95"></a><span class="comment">-- @staticfct awesome_slot.get_slot
|
||||
</span><span class="keyword">function</span> awesome_slot.get_slot(slot)
|
||||
<span class="global">assert</span>(slot)
|
||||
<span class="keyword">local</span> id = <span class="global">type</span>(slot) == <span class="string">"string"</span> <span class="keyword">and</span> slot <span class="keyword">or</span> slot.id
|
||||
<span class="global">assert</span>(id, <span class="string">"Slot not found!"</span>)
|
||||
|
||||
<span class="keyword">return</span> awesome_slot._private.registered_slots[id]
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">--- Create a new Slot instance.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @tparam table params
|
||||
</span><span class="comment">-- @tparam[opt] string params.id The slot ID.
|
||||
</span><span class="comment">-- @tparam any params.target The slot target object.
|
||||
</span><span class="comment">-- @tparam string params.signal The signal the slot connects to.
|
||||
</span><span class="comment">-- @tparam function params.slot The callback function to connect to the signal.
|
||||
</span><span class="comment">-- @tparam table params.slot_params The parameters to pass to the callback
|
||||
</span><span class="comment">-- function. (The signal will invok the callback function with this table as
|
||||
</span><span class="comment">-- parameter)
|
||||
</span><span class="comment">-- @tparam[opt=false] boolean params.connect Connect the slot now.
|
||||
</span><span class="comment">-- @treturn Slot The created Slot instance.
|
||||
</span><a id="116"></a><span class="comment">-- @constructorfct awesome_slot
|
||||
</span><span class="keyword">function</span> awesome_slot.create(params)
|
||||
<span class="keyword">local</span> slot = {}
|
||||
|
||||
slot.id = generate_id(params.id <span class="keyword">or</span> <span class="string">"UNNAMED_SLOT"</span>)
|
||||
slot.target = params.target
|
||||
slot.signal = params.signal
|
||||
slot.connected = <span class="keyword">false</span>
|
||||
|
||||
<span class="keyword">if</span> params.slot_params <span class="keyword">then</span>
|
||||
slot.params = params.slot_params
|
||||
slot.callback = <span class="keyword">function</span>()
|
||||
params.slot(slot.params)
|
||||
<span class="keyword">end</span>
|
||||
<span class="keyword">else</span>
|
||||
slot.callback = params.slot
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">-- Insert the new slot into the slots list
|
||||
</span> awesome_slot._private.registered_slots[slot.id] = slot
|
||||
|
||||
<span class="keyword">if</span> params.connect <span class="keyword">then</span>
|
||||
awesome_slot.connect(slot)
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="keyword">return</span> slot
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">--- Remove a registered slot and disconnect it.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @tparam Slot slot The slot to remove.
|
||||
</span><a id="147"></a><span class="comment">-- @staticfct awesome_slot.remove
|
||||
</span><span class="keyword">function</span> awesome_slot.remove(slot)
|
||||
<span class="keyword">local</span> s = awesome_slot.get_slot(slot)
|
||||
|
||||
<span class="keyword">if</span> s.connected <span class="keyword">then</span>
|
||||
awesome_slot.disconnect_slot(s)
|
||||
<span class="keyword">end</span>
|
||||
|
||||
awesome_slot._private.registered_slots[s.id] = <span class="keyword">nil</span>
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">--- Connect a slot to its signal.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @tparam Slot slot The slot to connect.
|
||||
</span><span class="comment">-- @treturn Slot The slot.
|
||||
</span><a id="162"></a><span class="comment">-- @staticfct awesome_slot.connect
|
||||
</span><span class="keyword">function</span> awesome_slot.connect(slot)
|
||||
<span class="keyword">local</span> s = awesome_slot.get_slot(slot)
|
||||
|
||||
<span class="comment">-- Some modules expose a static connect_signals function
|
||||
</span> <span class="comment">-- at the module level, while other tables/objects inheriting from
|
||||
</span> <span class="comment">-- gears.object implement the signal connection API at the instance level.
|
||||
</span> <span class="keyword">if</span> gtable.hasitem(awesome_slot.static_connect, s.target) <span class="keyword">then</span>
|
||||
s.target.connect_signal(s.signal, s.callback)
|
||||
<span class="keyword">else</span>
|
||||
s.target:connect_signal(s.signal, s.callback)
|
||||
<span class="keyword">end</span>
|
||||
|
||||
s.connected = <span class="keyword">true</span>
|
||||
|
||||
<span class="keyword">return</span> s
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="comment">--- Disconnect a slot from its signal.
|
||||
</span><span class="comment">--
|
||||
</span><span class="comment">-- @tparam Slot slot The slot to disconnect.
|
||||
</span><span class="comment">-- @treturn Slot The slot.
|
||||
</span><a id="184"></a><span class="comment">-- @staticfct awesome_slot.disconnect
|
||||
</span><span class="keyword">function</span> awesome_slot.disconnect(slot)
|
||||
<span class="keyword">local</span> s = awesome_slot.get_slot(slot)
|
||||
|
||||
<span class="comment">-- Please check the <code>:connect_slot</code> method to understand why we do this.
|
||||
</span> <span class="keyword">if</span> gtable.hasitem(awesome_slot.static_connect, s.target) <span class="keyword">then</span>
|
||||
s.target.disconnect_slot(s.signal, s.callback)
|
||||
<span class="keyword">else</span>
|
||||
s.target:disconnect_slot(s.signal, s.callback)
|
||||
<span class="keyword">end</span>
|
||||
|
||||
s.connected = <span class="keyword">false</span>
|
||||
|
||||
<span class="keyword">return</span> s
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="keyword">function</span> awesome_slot.mt:__call(...) <span class="comment">-- luacheck: ignore unused argument self
|
||||
</span> <span class="keyword">return</span> awesome_slot.create(...)
|
||||
<span class="keyword">end</span>
|
||||
|
||||
<span class="keyword">return</span> <span class="global">setmetatable</span>(awesome_slot, awesome_slot.mt)
|
||||
|
||||
<span class="comment">-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80</span></pre>
|
||||
|
||||
|
||||
</div> <!-- id="content" -->
|
||||
</div> <!-- id="main" -->
|
||||
<div id="about">
|
||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||
<i style="float:right;">Last updated 2021-10-21 17:48:08 </i>
|
||||
</div> <!-- id="about" -->
|
||||
</div> <!-- id="container" -->
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue