<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=Module%3AKey</id>
	<title>Module:Key - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pool.calebcooper.ie/index.php?action=history&amp;feed=atom&amp;title=Module%3AKey"/>
	<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=Module:Key&amp;action=history"/>
	<updated>2026-04-08T00:58:39Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://pool.calebcooper.ie/index.php?title=Module:Key&amp;diff=12451&amp;oldid=prev</id>
		<title>Caleb Cooper: Created page with &quot;-- This module implements {{key press}}.  local kbdPrefix = 	&#039;&lt;kbd class=&#039; .. 	&#039;&quot;keyboard-key nowrap&quot; &#039; .. 	&#039;style=&quot;border: 1px solid #aaa; &#039; .. 	-- The following is an expans...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pool.calebcooper.ie/index.php?title=Module:Key&amp;diff=12451&amp;oldid=prev"/>
		<updated>2020-10-19T11:19:20Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- This module implements {{key press}}.  local kbdPrefix = 	&amp;#039;&amp;lt;kbd class=&amp;#039; .. 	&amp;#039;&amp;quot;keyboard-key nowrap&amp;quot; &amp;#039; .. 	&amp;#039;style=&amp;quot;border: 1px solid #aaa; &amp;#039; .. 	-- The following is an expans...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements {{key press}}.&lt;br /&gt;
&lt;br /&gt;
local kbdPrefix =&lt;br /&gt;
	&amp;#039;&amp;lt;kbd class=&amp;#039; ..&lt;br /&gt;
	&amp;#039;&amp;quot;keyboard-key nowrap&amp;quot; &amp;#039; ..&lt;br /&gt;
	&amp;#039;style=&amp;quot;border: 1px solid #aaa; &amp;#039; ..&lt;br /&gt;
	-- The following is an expansion of {{border-radius|0.2em}}&lt;br /&gt;
	&amp;#039;-moz-border-radius: 0.2em; -webkit-border-radius: 0.2em; border-radius: 0.2em; &amp;#039; ..&lt;br /&gt;
	-- The following is an expansion of {{box-shadow|0.1em|0.1em|0.2em|rgba(0,0,0,0.1)}}&lt;br /&gt;
	&amp;#039;-moz-box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); -webkit-box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); box-shadow: 0.1em 0.1em 0.2em rgba(0,0,0,0.1); &amp;#039; ..&lt;br /&gt;
	&amp;#039;background-color: #f9f9f9; &amp;#039; ..&lt;br /&gt;
	-- The following is an expansion of {{linear-gradient|top|#eee, #f9f9f9, #eee}}&lt;br /&gt;
	&amp;#039;background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); &amp;#039; ..&lt;br /&gt;
	-- Force black color to fix [[phab:T200258]]&lt;br /&gt;
	&amp;#039;color: #000; &amp;#039; ..&lt;br /&gt;
	&amp;#039;padding: 0.1em 0.3em; &amp;#039; ..&lt;br /&gt;
	&amp;#039;font-family: inherit; &amp;#039; ..&lt;br /&gt;
	&amp;#039;font-size: 0.85em;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local kbdSuffix = &amp;#039;&amp;lt;/kbd&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local keyText = {&lt;br /&gt;
	[&amp;#039;caps lock&amp;#039;] = &amp;#039;⇪ Caps Lock&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[caps lock]]&amp;#039;] = &amp;#039;⇪ [[Caps Lock]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;shift&amp;#039;] = &amp;#039;⇧ Shift&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[shift key|shift]]&amp;#039;] = &amp;#039;⇧ [[Shift key|Shift]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;enter&amp;#039;] = &amp;#039;↵ Enter&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[enter key|enter]]&amp;#039;] = &amp;#039;↵ [[Enter key|Enter]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;cmd&amp;#039;] = &amp;#039;⌘ Cmd&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[command key|cmd]]&amp;#039;] = &amp;#039;⌘ [[Command key|Cmd]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;command&amp;#039;] = &amp;#039;⌘ Command&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[command key|command]]&amp;#039;] = &amp;#039;⌘ [[Command key|Command]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;opt&amp;#039;] = &amp;#039;⌥ Opt&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[option key|opt]]&amp;#039;] = &amp;#039;⌥ [[Option key|Opt]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;option&amp;#039;] = &amp;#039;⌥ Option&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[option key|option]]&amp;#039;] = &amp;#039;⌥ [[Option key|Option]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;tab&amp;#039;] = &amp;#039;Tab ↹&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[tab key|tab]]&amp;#039;] = &amp;#039;[[Tab key|Tab]] ↹&amp;#039;,&lt;br /&gt;
	[&amp;#039;backspace&amp;#039;] = &amp;#039;← Backspace&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[backspace]]&amp;#039;] = &amp;#039;← [[Backspace]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;win&amp;#039;] = &amp;#039;⊞ Win&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[windows key|win]]&amp;#039;] = &amp;#039;⊞ [[Windows key|Win]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;menu&amp;#039;] = &amp;#039;≣ Menu&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[menu key|menu]]&amp;#039;] = &amp;#039;≣ [[Menu key|Menu]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;up&amp;#039;] = &amp;#039;↑&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[arrow keys|up]]&amp;#039;] = &amp;#039;[[Arrow keys|↑]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;down&amp;#039;] = &amp;#039;↓&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[arrow keys|down]]&amp;#039;] = &amp;#039;[[Arrow keys|↓]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;left&amp;#039;] = &amp;#039;←&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[arrow keys|left]]&amp;#039;] = &amp;#039;[[Arrow keys|←]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;right&amp;#039;] = &amp;#039;→&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[arrow keys|right]]&amp;#039;] = &amp;#039;[[Arrow keys|→]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;asterisk&amp;#039;] = &amp;#039;&amp;amp;#42;&amp;#039;,&lt;br /&gt;
	[&amp;#039;hash&amp;#039;] = &amp;#039;&amp;amp;#35;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[#]]&amp;#039;] = &amp;#039;[[Number sign|#]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;colon&amp;#039;] = &amp;#039;&amp;amp;#58;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[:]]&amp;#039;] = &amp;#039;[[Colon (punctuation)|:]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;pipe&amp;#039;] = &amp;#039;&amp;amp;#124;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[|]]&amp;#039;] = &amp;#039;[[Pipe symbol|&amp;amp;#124;]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;semicolon&amp;#039;] = &amp;#039;&amp;amp;#59;&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[;]]&amp;#039;] = &amp;#039;[[Semi-colon|&amp;amp;#59;]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;equals&amp;#039;] = &amp;#039;&amp;amp;#61;&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	-- Left &amp;amp; right analog sticks.&lt;br /&gt;
	[&amp;#039;l up&amp;#039;] = &amp;#039;L↑&amp;#039;,&lt;br /&gt;
	[&amp;#039;l down&amp;#039;] = &amp;#039;L↓&amp;#039;,&lt;br /&gt;
	[&amp;#039;l left&amp;#039;] = &amp;#039;L←&amp;#039;,&lt;br /&gt;
	[&amp;#039;l right&amp;#039;] = &amp;#039;L→&amp;#039;,&lt;br /&gt;
	[&amp;#039;l ne&amp;#039;] = &amp;#039;L↗&amp;#039;,&lt;br /&gt;
	[&amp;#039;l se&amp;#039;] = &amp;#039;L↘&amp;#039;,&lt;br /&gt;
	[&amp;#039;l nw&amp;#039;] = &amp;#039;L↖&amp;#039;,&lt;br /&gt;
	[&amp;#039;l sw&amp;#039;] = &amp;#039;L↙&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	[&amp;#039;r up&amp;#039;] = &amp;#039;R↑&amp;#039;,&lt;br /&gt;
	[&amp;#039;r down&amp;#039;] = &amp;#039;R↓&amp;#039;,&lt;br /&gt;
	[&amp;#039;r left&amp;#039;] = &amp;#039;R←&amp;#039;,&lt;br /&gt;
	[&amp;#039;r right&amp;#039;] = &amp;#039;R→&amp;#039;,&lt;br /&gt;
	[&amp;#039;r ne&amp;#039;] = &amp;#039;R↗&amp;#039;,&lt;br /&gt;
	[&amp;#039;r se&amp;#039;] = &amp;#039;R↘&amp;#039;,&lt;br /&gt;
	[&amp;#039;r nw&amp;#039;] = &amp;#039;R↖&amp;#039;,&lt;br /&gt;
	[&amp;#039;r sw&amp;#039;] = &amp;#039;R↙&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	-- PlayStation.&lt;br /&gt;
	[&amp;#039;ex&amp;#039;] = &amp;#039;×&amp;#039;,&lt;br /&gt;
	[&amp;#039;circle&amp;#039;] = &amp;#039;○&amp;#039;,&lt;br /&gt;
	[&amp;#039;square&amp;#039;] = &amp;#039;□&amp;#039;,&lt;br /&gt;
	[&amp;#039;triangle&amp;#039;] = &amp;#039;△&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	-- Nintendo 64 and GameCube.&lt;br /&gt;
	[&amp;#039;c up&amp;#039;] = &amp;#039;C↑&amp;#039;,&lt;br /&gt;
	[&amp;#039;c down&amp;#039;] = &amp;#039;C↓&amp;#039;,&lt;br /&gt;
	[&amp;#039;c left&amp;#039;] = &amp;#039;C←&amp;#039;,&lt;br /&gt;
	[&amp;#039;c right&amp;#039;] = &amp;#039;C→&amp;#039;,&lt;br /&gt;
	[&amp;#039;c ne&amp;#039;] = &amp;#039;C↗&amp;#039;,&lt;br /&gt;
	[&amp;#039;c se&amp;#039;] = &amp;#039;C↘&amp;#039;,&lt;br /&gt;
	[&amp;#039;c nw&amp;#039;] = &amp;#039;C↖&amp;#039;,&lt;br /&gt;
	[&amp;#039;c sw&amp;#039;] = &amp;#039;C↙&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local keyAlias = {&lt;br /&gt;
	-- [&amp;#039;alternate name for key (alias)&amp;#039;] = &amp;#039;name for key used in key table&amp;#039;&lt;br /&gt;
	[&amp;#039;[[cmd key|cmd]]&amp;#039;] = &amp;#039;[[command key|cmd]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[cmd key|command]]&amp;#039;] = &amp;#039;[[command key|command]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[opt key|opt]]&amp;#039;] = &amp;#039;[[option key|opt]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[option key]]&amp;#039;] = &amp;#039;[[option key|option]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[opt key|option]]&amp;#039;] = &amp;#039;[[option key|option]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;[[win key|win]]&amp;#039;] = &amp;#039;[[windows key|win]]&amp;#039;,&lt;br /&gt;
	[&amp;#039;*&amp;#039;] = &amp;#039;asterisk&amp;#039;,&lt;br /&gt;
	[&amp;#039;#&amp;#039;] = &amp;#039;hash&amp;#039;,&lt;br /&gt;
	[&amp;#039;:&amp;#039;] = &amp;#039;colon&amp;#039;,&lt;br /&gt;
	[&amp;#039;;&amp;#039;] = &amp;#039;semicolon&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-up&amp;#039;] = &amp;#039;l up&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-down&amp;#039;] = &amp;#039;l down&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-left&amp;#039;] = &amp;#039;l left&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-right&amp;#039;] = &amp;#039;l right&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-ne&amp;#039;] = &amp;#039;l ne&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-se&amp;#039;] = &amp;#039;l se&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-nw&amp;#039;] = &amp;#039;l nw&amp;#039;,&lt;br /&gt;
	[&amp;#039;l-sw&amp;#039;] = &amp;#039;l sw&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-up&amp;#039;] = &amp;#039;r up&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-down&amp;#039;] = &amp;#039;r down&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-left&amp;#039;] = &amp;#039;r left&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-right&amp;#039;] = &amp;#039;r right&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-ne&amp;#039;] = &amp;#039;r ne&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-se&amp;#039;] = &amp;#039;r se&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-nw&amp;#039;] = &amp;#039;r nw&amp;#039;,&lt;br /&gt;
	[&amp;#039;r-sw&amp;#039;] = &amp;#039;r sw&amp;#039;,&lt;br /&gt;
	[&amp;#039;ps x&amp;#039;] = &amp;#039;ex&amp;#039;,&lt;br /&gt;
	[&amp;#039;ps c&amp;#039;] = &amp;#039;circle&amp;#039;,&lt;br /&gt;
	[&amp;#039;ps s&amp;#039;] = &amp;#039;square&amp;#039;,&lt;br /&gt;
	[&amp;#039;ps t&amp;#039;] = &amp;#039;triangle&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-up&amp;#039;] = &amp;#039;c up&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-down&amp;#039;] = &amp;#039;c down&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-left&amp;#039;] = &amp;#039;c left&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-right&amp;#039;] = &amp;#039;c right&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-ne&amp;#039;] = &amp;#039;c ne&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-se&amp;#039;] = &amp;#039;c se&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-nw&amp;#039;] = &amp;#039;c nw&amp;#039;,&lt;br /&gt;
	[&amp;#039;c-sw&amp;#039;] = &amp;#039;c sw&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local Collection = {}&lt;br /&gt;
Collection.__index = Collection&lt;br /&gt;
do&lt;br /&gt;
	function Collection:add(item)&lt;br /&gt;
		if item ~= nil then&lt;br /&gt;
			self.n = self.n + 1&lt;br /&gt;
			self[self.n] = item&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	function Collection:join(sep)&lt;br /&gt;
		return table.concat(self, sep)&lt;br /&gt;
	end&lt;br /&gt;
	function Collection:sort(comp)&lt;br /&gt;
		table.sort(self, comp)&lt;br /&gt;
	end&lt;br /&gt;
	function Collection.new()&lt;br /&gt;
		return setmetatable({n = 0}, Collection)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function keyPress(args)&lt;br /&gt;
	local chainNames = {&lt;br /&gt;
		&amp;#039;chain first&amp;#039;,&lt;br /&gt;
		&amp;#039;chain second&amp;#039;,&lt;br /&gt;
		&amp;#039;chain third&amp;#039;,&lt;br /&gt;
		&amp;#039;chain fourth&amp;#039;,&lt;br /&gt;
		&amp;#039;chain fifth&amp;#039;,&lt;br /&gt;
		&amp;#039;chain sixth&amp;#039;,&lt;br /&gt;
		&amp;#039;chain seventh&amp;#039;,&lt;br /&gt;
		&amp;#039;chain eighth&amp;#039;,&lt;br /&gt;
		&amp;#039;chain ninth&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	local result = Collection.new()&lt;br /&gt;
	local chainDefault = args.chain or &amp;#039;+&amp;#039;&lt;br /&gt;
	for i, id in ipairs(args) do&lt;br /&gt;
		if i &amp;gt; 1 then&lt;br /&gt;
			result:add(args[chainNames[i - 1]] or chainDefault)&lt;br /&gt;
		end&lt;br /&gt;
		local lc = id:lower()&lt;br /&gt;
		local text = keyText[lc] or keyText[keyAlias[lc]] or id&lt;br /&gt;
		result:add(kbdPrefix .. text .. kbdSuffix)&lt;br /&gt;
	end&lt;br /&gt;
	return result:join()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function keypress(frame)&lt;br /&gt;
	-- Called by &amp;quot;{{key press|...}}&amp;quot;.&lt;br /&gt;
	-- Using the template doubles the post‐expand include size.&lt;br /&gt;
	return keyPress(frame:getParent().args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function press(frame)&lt;br /&gt;
	-- Called by &amp;quot;{{#invoke:key|press|...}}&amp;quot;.&lt;br /&gt;
	return keyPress(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	keypress = keypress,&lt;br /&gt;
	press = press,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Caleb Cooper</name></author>
	</entry>
</feed>