2023年政策修订增补工作正在进行中,欢迎参与!
Module:Key
跳转到导航
跳转到搜索
此模块使用Lua語言: |
通常用于指示游戏中的操作按键。
基本使用
单一按键
一般按键
{{keypress|A}}
,效果为A;{{keypress|1}}
,效果为1;{{keypress|;}}
,效果为;;{{keypress|F1}}
,效果为F1;{{keypress|Ctrl}}
,效果为Ctrl。
- 注意:对于按键“|”和“=”,因为它们同时作为Wiki语言标记符号,若需要使用该模板显示这些符号,有以下解决方法:
特殊按键
{{keypress|Tab}}
,效果为Tab ↹;{{keypress|Caps Lock}}
,效果为⇪ Caps Lock;{{keypress|Shift}}
,效果为⇧ Shift;{{keypress|Backspace}}
,效果为← Backspace;{{keypress|Enter}}
,效果为↵ Enter;{{keypress|Up}}
,效果为↑;{{keypress|Down}}
,效果为↓;{{keypress|Left}}
,效果为←;{{keypress|Right}}
,效果为→;{{keypress|Win}}
,效果为⊞ Win;{{keypress|Menu}}
,效果为≣ Menu;{{keypress|Cmd}}
,效果为⌘ Cmd;{{keypress|Opt}}
,效果为⌥ Opt。
按键组合
用|
将各按键隔开即可表示组合键,如:
{{keypress|Ctrl|V}}
,效果为Ctrl+V;{{keypress|Win|Tab}}
,效果为⊞ Win+Tab ↹;{{keypress|Win|Ctrl|F}}
,效果为⊞ Win+Ctrl+F。
使用chain
参数可自定义各按键间分隔符(默认为“+”),如:
{{keypress|Ctrl|F|chain=&}}
,效果为Ctrl&F;{{keypress|Win|Shift|S|chain=,}}
,效果为⊞ Win,⇧ Shift,S。
类似地,有chain first
、chain second
、chain third
等参数用于单独更换特定位置的分隔符,如:
{{keypress|Alt|Shift|Del|chain first=,}}
,效果为Alt,⇧ Shift+Del;{{keypress|Alt|Shift|Del|chain second=?}}
,效果为Alt+⇧ Shift?Del;{{keypress|Ctrl|Alt|Shift|D|chain first=或|chain second=按住|chain third=+}}
,效果为Ctrl或Alt按住⇧ Shift+D。
混合使用:
{{keypress|Ctrl|0}}{{keypress|1}}{{keypress|2}}{{keypress|3}}
,效果为Ctrl+0123。
其他按键
用于特殊设备按键。
{{keypress|l-down}}
,效果为L↓;{{keypress|c-left}}
,效果为C←;{{keypress|r-up}}
,效果为R↑;{{keypress|l-nw}}
,效果为L↖;{{keypress|c-se}}
,效果为C↘;{{keypress|r-ne}}
,效果为R↗;{{keypress|ex}}
,效果为×;{{keypress|circle}}
,效果为○;{{keypress|triangle}}
,效果为△;{{keypress|square}}
,效果为□。
其他用途
该模板支持添加链接,如:
{{keypress|[[0]]}}
,效果为0;{{keypress|[[No.7|7]]}}
,效果为7;{{keypress|[https://zh.moegirl.org.cn/Mainpage 主页]}}
,效果为主页。
与其他模板混用,如:
{{keypress|{{color|orange|测试文字}}}}
,效果为测试文字。
-- This module implements {{key press}}.
local kbdPrefix =
'<kbd class=' ..
'"keyboard-key nowrap" ' ..
'style="border: 1px solid #aaa; ' ..
-- The following is an expansion of {{border-radius|0.2em}}
'-moz-border-radius: 0.2em; -webkit-border-radius: 0.2em; border-radius: 0.2em; ' ..
-- The following is an expansion of {{box-shadow|0.1em|0.1em|0.2em|rgba(0,0,0,0.1)}}
'-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); ' ..
'background-color: #f9f9f9; ' ..
-- The following is an expansion of {{linear-gradient|top|#eee, #f9f9f9, #eee}}
'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); ' ..
-- Force black color to fix [[phab:T200258]]
'color: #000; ' ..
'padding: 0.1em 0.3em; ' ..
'font-family: inherit; ' ..
'font-size: 0.85em;">'
local kbdSuffix = '</kbd>'
local keyText = {
['caps lock'] = '⇪ Caps Lock',
['[[caps lock]]'] = '⇪ [[Caps Lock]]',
['shift'] = '⇧ Shift',
['[[shift key|shift]]'] = '⇧ [[Shift key|Shift]]',
['enter'] = '↵ Enter',
['[[enter key|enter]]'] = '↵ [[Enter key|Enter]]',
['cmd'] = '⌘ Cmd',
['[[command key|cmd]]'] = '⌘ [[Command key|Cmd]]',
['command'] = '⌘ Command',
['[[command key|command]]'] = '⌘ [[Command key|Command]]',
['opt'] = '⌥ Opt',
['[[option key|opt]]'] = '⌥ [[Option key|Opt]]',
['option'] = '⌥ Option',
['[[option key|option]]'] = '⌥ [[Option key|Option]]',
['tab'] = 'Tab ↹',
['[[tab key|tab]]'] = '[[Tab key|Tab]] ↹',
['backspace'] = '← Backspace',
['[[backspace]]'] = '← [[Backspace]]',
['win'] = '⊞ Win',
['[[windows key|win]]'] = '⊞ [[Windows key|Win]]',
['menu'] = '≣ Menu',
['[[menu key|menu]]'] = '≣ [[Menu key|Menu]]',
['up'] = '↑',
['[[arrow keys|up]]'] = '[[Arrow keys|↑]]',
['down'] = '↓',
['[[arrow keys|down]]'] = '[[Arrow keys|↓]]',
['left'] = '←',
['[[arrow keys|left]]'] = '[[Arrow keys|←]]',
['right'] = '→',
['[[arrow keys|right]]'] = '[[Arrow keys|→]]',
['asterisk'] = '*',
['hash'] = '#',
['[[#]]'] = '[[Number sign|#]]',
['colon'] = ':',
['[[:]]'] = '[[Colon (punctuation)|:]]',
['pipe'] = '|',
['[[|]]'] = '[[Pipe symbol||]]',
['semicolon'] = ';',
['[[;]]'] = '[[Semi-colon|;]]',
['equals'] = '=',
-- Left & right analog sticks.
['l up'] = 'L↑',
['l down'] = 'L↓',
['l left'] = 'L←',
['l right'] = 'L→',
['l ne'] = 'L↗',
['l se'] = 'L↘',
['l nw'] = 'L↖',
['l sw'] = 'L↙',
['r up'] = 'R↑',
['r down'] = 'R↓',
['r left'] = 'R←',
['r right'] = 'R→',
['r ne'] = 'R↗',
['r se'] = 'R↘',
['r nw'] = 'R↖',
['r sw'] = 'R↙',
-- PlayStation.
['ex'] = '×',
['circle'] = '○',
['square'] = '□',
['triangle'] = '△',
-- Nintendo 64 and GameCube.
['c up'] = 'C↑',
['c down'] = 'C↓',
['c left'] = 'C←',
['c right'] = 'C→',
['c ne'] = 'C↗',
['c se'] = 'C↘',
['c nw'] = 'C↖',
['c sw'] = 'C↙',
}
local keyAlias = {
-- ['alternate name for key (alias)'] = 'name for key used in key table'
['[[cmd key|cmd]]'] = '[[command key|cmd]]',
['[[cmd key|command]]'] = '[[command key|command]]',
['[[opt key|opt]]'] = '[[option key|opt]]',
['[[option key]]'] = '[[option key|option]]',
['[[opt key|option]]'] = '[[option key|option]]',
['[[win key|win]]'] = '[[windows key|win]]',
['*'] = 'asterisk',
['#'] = 'hash',
[':'] = 'colon',
[';'] = 'semicolon',
['l-up'] = 'l up',
['l-down'] = 'l down',
['l-left'] = 'l left',
['l-right'] = 'l right',
['l-ne'] = 'l ne',
['l-se'] = 'l se',
['l-nw'] = 'l nw',
['l-sw'] = 'l sw',
['r-up'] = 'r up',
['r-down'] = 'r down',
['r-left'] = 'r left',
['r-right'] = 'r right',
['r-ne'] = 'r ne',
['r-se'] = 'r se',
['r-nw'] = 'r nw',
['r-sw'] = 'r sw',
['ps x'] = 'ex',
['ps c'] = 'circle',
['ps s'] = 'square',
['ps t'] = 'triangle',
['c-up'] = 'c up',
['c-down'] = 'c down',
['c-left'] = 'c left',
['c-right'] = 'c right',
['c-ne'] = 'c ne',
['c-se'] = 'c se',
['c-nw'] = 'c nw',
['c-sw'] = 'c sw',
}
local Collection = {}
Collection.__index = Collection
do
function Collection:add(item)
if item ~= nil then
self.n = self.n + 1
self[self.n] = item
end
end
function Collection:join(sep)
return table.concat(self, sep)
end
function Collection:sort(comp)
table.sort(self, comp)
end
function Collection.new()
return setmetatable({n = 0}, Collection)
end
end
local function keyPress(args)
local chainNames = {
'chain first',
'chain second',
'chain third',
'chain fourth',
'chain fifth',
'chain sixth',
'chain seventh',
'chain eighth',
'chain ninth',
}
local result = Collection.new()
local chainDefault = args.chain or '+'
for i, id in ipairs(args) do
if i > 1 then
result:add(args[chainNames[i - 1]] or chainDefault)
end
local lc = id:lower()
local text = keyText[lc] or keyText[keyAlias[lc]] or id
result:add(kbdPrefix .. text .. kbdSuffix)
end
return result:join()
end
local function keypress(frame)
-- Called by "{{key press|...}}".
-- Using the template doubles the post‐expand include size.
return keyPress(frame:getParent().args)
end
local function press(frame)
-- Called by "{{#invoke:key|press|...}}".
return keyPress(frame.args)
end
return {
keypress = keypress,
press = press,
}