- From: Etan Wexler <ewexler@stickdog.com>
- Date: Tue, 23 Sep 2003 05:46:35 -0700
- To: Tantek Çelik <tantek@cs.stanford.edu>, www-style@w3.org
- Cc: David Baron <dbaron@dbaron.org>
Following are substantive comments on the 'key-equivalent' property and its definition in section 8.2.1 of the Working Draft of "CSS3 Basic User Interface Module", dated 3 July 2003 (<http://www.w3.org/TR/2003/WD-css3-ui-20030703#key-equivalent>). I preemptively acknowledge the deadline for comments of 31 July 2003. To a large degree and for private reasons my tardiness was unavoidable. I humbly request that www-style readers, especially Tantek, consider my comments. "Value: none | (<key-press-combination> )+ | <system-key-equivalent> | list-item-marker | inherit" "(<key-press-combination> )+ "One or more <key-press-combination>s separated by spaces." According to the CSS3 syntax draft [SYN], square brackets represent grouping. Parentheses are not mentioned in the syntax draft. However, we already have a precedent, the form attr(<attribute>), where the parentheses are literal. Rather than replace the parentheses in the 'key-equivalent' definition with brackets, simply remove them: <key-press-combination>+ "<key-press-combination> = <key> ('-' <key>)*" Here square brackets should replace the parentheses to indicate grouping in the established CSS property-definition notation. The use of the hyphen-minus ("-", U+002D, informally "dash") as a separator character raises problems. This use prevents the inclusion of a hyphen-minus in key names, so we get, for example, 'phoneend' instead of 'phone-end'. And how do we represent the hyphen-minus as a key in its own right, rather than as a separator? Do we escape it, as in what follows? cmd-\-; That requires parsers to distinguish between forms that are equivalent in all other cases. To address this problem, we could introduce a keyword for the hyphen-minus, something like 'dash': cmd-dash; We also have the issue of distinguishing special keys (cmd, opt, ctrl, and so on) from "normal" keys (A, B, C, and so on). The current approach, "Each [normal-key] character must be specified in uppercase or as an escaped character", is fragile and likely to be ignored by authors. And function keys (F1..F15) are typically identified with upper-case "F", yes? Let's make use of the lexical types available in CSS and define a normal key specification as a string: <key> = space | <normal-key> | <special-key> | attr(<attribute>) <normal-key> = <string> ... (Are there keyboards which yield more than one character per keystroke? The string syntax would have an advantage in clearly representing those keys.) The <system-key-equivalent> and 'list-item-marker' values should be allowed like <key-press-combination>. For example, it should be legal to declare key-equivalent: system-cancel cmd-\.; This provides a useful backup when a user agent's system has no convention for the <system-key-equivalent>. In fact, we should allow <system-key-equivalent> and 'list-item-marker' like <key>. This allowance would require a revision of the use of hyphen-minus as a separator. Imagine for a moment that the new separator is a plus sign; it should be legal to declare key-equivalent: shift+system-save; Tantek rejected the plus sign based on the legacy of the hyphen-minus (also called "dash") [KSPS]. I acknowledge and respect that legacy. The convention of human-interface literature, however, is not a universal convention in deployed applications or in casual usage. Even Apple, whose human-interface guidelines Tantek cited, does not use the hyphen-minus as a separator. (Mac OS 9 and Mac OS X don't use a separator at all.) Anecdotally, I can attest that the plus sign as a separator is common. I was just using Microsoft Excel 2001 for Mac OS; during an operation it displayed "Press command+. to cancel". (The words are paraphrased, but the plus sign is transcribed directly.) There are several factors to consider. How well does the new syntax fit with existing practice from outside of CSS? How well does the new syntax fit with existing and emerging CSS? How easy is interpreting the new syntax? How easy is misinterpreting the new syntax? The plus sign fits well with some existing practice from outside of CSS and fits poorly with some other existing practice. The plus sign fits perfectly with existing and emerging CSS. It is quite easy to interpret the plus sign. It is difficult to misinterpret the plus sign. Given these factors, the plus sign is a good choice. Using a plus sign (or anything other than hyphen-minus) allows the hyphen-minus in key names. So: accesskey becomes access-key, namemenu becomes name-menu, volumeup becomes volume-up volumedown becomes volume-down phoneend becomes phone-end phonesend becomes phone-send phoneaccept becomes phone-accept todo becomes to-do. Another syntax that avoids the hyphen-minus as separator is to parenthesize key press combinations: Value: none | <key-press-combination>+ | inherit <key-press-combination> = <key> | (<key>+) This yields declarations like the following. key-equivalent: system-cancel (cmd "."); key-equivalent: (shift system-save); key-equivalent: space; key-equivalent: (opt down) space pgdn; I previously suggested a syntax [UIC] using commas as separators between <key-press-combination> and space between <key>: Value: none | <key-press-combination> [, <key-press-combination>]+ | inherit <key-press-combination> = <key>+ This yields declarations like the following. key-equivalent: system-cancel, cmd "."; key-equivalent: shift system-save; key-equivalent: space; key-equivalent: opt down, space, pgdn; Maybe the best syntax of all uses commas as separators between <key-press-combination> and plus sign between <key>: Value: none | <key-press-combination> [, <key-press-combination>]+ | inherit <key-press-combination> = <key> ['+' <key>]* This yields declarations like the following. key-equivalent: system-cancel, cmd + "."; key-equivalent: shift + system-save; key-equivalent: space; key-equivalent: opt + down, space, pgdn; A summary of suggested changes follows. Value: none | <key-press-combination>+ | inherit <key-press-combination> = <key> ['+' <key>]* <key> = space | <normal-key> | <special-key> | attr(<attribute>) | <system-key> | list-item-marker <normal-key> = <string> <special-key> = <modifier-key> | <function-key> | <navigation-key> | <edit-key> | <misc-key> | <volume-control-key> | <phone-key> | <application-key> <modifier-key> = access-key | <cmd-key> | <opt-key> | <ctrl-key> | <shift-key> | <alt-key> | <win-key> | <meta-key> | fn | fcn | caps <cmd-key> = cmd | rcmd | lcmd <opt-key> = opt | ropt | lopt <ctrl-key> = ctrl | rctrl | lctrl <shift-key> = shift | rshift | lshift <alt-key> = alt | ralt | lalt <win-key> = win | rwin | lwin <meta-key> = meta | rmeta | lmeta <function-key> = F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | F14 | F15 <navigation-key> = tab | esc | enter | return | menu | help | name-menu | rcl | snd | <arrow-key> | <page-key> <arrow-key> = up | down | left | right <page-key> = home | end | pgup | pgdn <edit-key> = bs | del | ins | undo | cut | copy | paste | clr | sto <misc-key> = prtsc | sysrq | scrlock | pause | brk | numlock | pwr <volume-control-key> = volume-up | volume-down <phone-key> = phone-end | phone-send | phone-accept <application-key> = memo | to-do | calendar | mail | address <attribute> = <identifier> <system-key> = system-new | system-open | system-close | system-save | system-print | system-quit | system-terminate-operation | system-undo | system-redo | system-cut | system-copy | system-paste | system-clear | system-duplicate | system-select-all | system-find | system-find-again | system-ok | system-cancel | system-apply - - - References - - - [SYN] L. David Baron (editor). "Value", section 10.1 in "CSS3 module: Syntax". 13 August 2003. W3C Working Draft. <http://www.w3.org/TR/2003/WD-css3-syntax-20030813/#property-def-value>. [KSPS] Tantek Çelik. "Re: [css3-ui] Last? Call". 11 July 2003. Message to <mailto:www-style@w3.org>. <mid:BB344AF4.2AACC%25tantek@cs.stanford.edu> / <http://lists.w3.org/Archives/Public/www-style/2003Jul/0137.html>. "User interface / human interface literature has used the dash '-' as the separator character in this context consistently throughout history and therefore we have adopted the same industry convention rather than invent a new one." [UIC] Etan Wexler. "WD-css3-ui-20020802 comments". 7 October 2002. Message to <mailto:www-style@w3.org>. <mid:comments-WD-css3-ui-20020802@d20021007.etan.wexler> / <http://lists.w3.org/Archives/Public/www-style/2002Oct/0013.html>.
Received on Tuesday, 23 September 2003 08:51:17 UTC