键盘控件
键盘控件
键盘控件和键盘设备允许你使用(显示器)上的常见按钮,像是上,下,左,右,确定,取消等。该功能于2006年2月添加到CVS/SVN版本中,现在仍在发展。它只在少数几个显示器设备上可用:~Crystalfontz~ 635, ~LCD2USB~ 和 ~LW_ABP~。LCD4Linux-0.10.1-RC1版本同时还支持~CwLinux~。
键盘控件是唯一一个不用用到 update 参数的控件。它在按钮按下或者释放的时候刷新,而不是事先设定一个时间间隔来刷新。刷新时表达式 expression 被重新赋值。你可以通过它来~执行一些外部程序~(像是reboot之类的)。或者简单地改变一个变量的值(它可能在另一个控件里被用到)。
键盘控件与输出线的对应关系写在布局类的节里:就像你用Row*.Col*放置其它控件一样。你可以用 'Keypad#' 这么一行来说明键盘控件与输出线的对应关系。注意:在布局类的节里’#’的取值并不重要,只要保证它不与其它键的取值冲突就行。
定义一个键盘控件的方法如下:
Widget <name> { # 控件名class 'Keypad' # 控件类型position <confirm|cancel|up|down|left|right> # 身份state <pressed|released> # 触发状态expression <string> # 表达式}
参数
| 参数 | 含义 | 说明 |
|---|---|---|
| position | 身份 | (控件)绑定的按钮是什么,默认绑定确定键(confirm)。 |
| state | 触发状态 | 是在按钮按下时触发还是释放时触发,默认是按下(pressed)时触发 |
| expression | 表达式 | 控件绑定的表达式(它将在触发后执行)。 |
例子:
下面是一个 ‘用按键来增加显示的变量值’ 的例子:
Widget mytext {class 'Text'expression fooupdate 100}Widget keyok {class 'Keypad'position 'confirm'expression foo = foo + 1}Variable {foo 1}Layout demokeypad {Row1.Col1 'mytext'Keypad1 'keyok'}
一个更加复杂的例子,用按键来滚动输出的启动信息(dmesg):
Widget dmesg1 {class 'Text'expression file::readline('/var/log/dmesg',currline)width 20update tick}Widget dmesg2 {class 'Text'expression file::readline('/var/log/dmesg',currline+1)width 20update tick}Widget dmesg3 {class 'Text'expression file::readline('/var/log/dmesg',currline+2)width 20update tick}Widget dmesg4 {class 'Text'expression file::readline('/var/log/dmesg',currline+3)width 20update tick}Widget keyup {class 'Keypad'position 'up'state 'pressed'expression currline = currline-1}Widget keydown {class 'Keypad'position 'down'state 'pressed'expression currline = currline+1}Layout showdmesg {Row1 {Col1 'dmesg1'}Row2 {Col1 'dmesg2'}Row3 {Col1 'dmesg3'}Row4 {Col1 'dmesg4'}Keypad1 'keyup'Keypad2 'keydown'}Variables {tick 100currline 1}
一个 ‘用按键确认重新启动’ 的例子,(右按键用于确认重启,左按键用于取消,重启用到了exec命令):
widget keyRight{class 'Keypad'position 'right'state 'pressed'expression msg = 'Reboot? OK to confirm' ; rebootmenu = 1}widget keyConfirm{class 'Keypad'position 'confirm'state 'pressed'expression msg = rebootmenu == 1 ? exec('/sbin/shutdown -r now',1000000) : 'Right arrow to reboot'exec('/sbin/shutdown -r now', 1000000);}widget keyLeft{class 'Keypad'position 'left'state 'pressed'expression msg = 'Right arrow to reboot' ; rebootmenu = 0}widget msgtxt {class 'Text'expression msgwidth 20update 100}Layout Default {Row1.Col1 'msgtxt'Row2.Col1 rebootmenuKeypad1 'keyRight'Keypad2 'keyConfirm'Keypad3 'keyLeft'}Variables {tick 500msg 'Right arrow to reboot'rebootmenu 0}
