1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-05 21:25:46 +01:00
Ted Pavlic 4884f5defc Fixes <C-[>, <C-\\>, <C-]>, <C-^>, and <C-_> on Mac OS/X.
On Mac OS/X, control characters 27 through 31 pass charCode=CONTROL_CHAR
rather than charCode=KEY. For example, when a user wants <C-[>
Vimperator sees <C-Esc>. Most people view this as a bug in FirefOS/X.

The following patch tests for has("MacUnix"), then checks to see if the
control character is within this buggy range. If so, it shifts the
charCode up by 64 (there is a special case for Escape where the CTRL key
is relaxed and key is set to "Esc").

For more information, see:
    [*] Vimp FAQ: http://vimperator.org/trac/wiki/Vimperator/FAQ#WhydoesntC-workforEscMacOSX
    [*] Referenced mailing list msg: http://www.mozdev.org/pipermail/vimperator/2008-May/001548.html
    [*] Mozilla bug 416227: event.charCode in keypress handler has unexpected values on Mac for Ctrl with chars in "[ ] _ \"
        https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=416227
    [*] Mozilla bug 432951: Ctrl+'foo' doesn't seem same charCode as Meta+'foo' on Cocoa
        https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=432951
2009-01-23 10:05:14 -05:00
2008-12-07 13:55:40 +01:00
2009-01-12 15:32:53 +11:00
2009-01-12 15:32:52 +11:00

               A terse introduction to E4X
                      Public Domain

The inline XML literals in this code are part of E4X, a standard
XML processing interface for ECMAScript. In addition to syntax
for XML literals, E4X provides a new kind of native object,
"xml", and a syntax, similar to XPath, for accessing and
modifying the tree. Here is a brief synopsis of the kind of
usage you'll see herein:

> let xml =
        <foo bar="baz" baz="qux">
            <bar>
                <baz id="1"/>
            </bar>
            <baz id="2"/>
        </foo>;

 // Select all bar elements of the root foo element
> xml.bar
 <bar><baz id="1"/></bar>

 // Select all baz elements anywhere beneath the root
> xml..baz
 <baz id="1"/>
 <baz id="2"/>

 // Select all of the immediate children of the root
> xml.*
 <bar><baz id="1"/></bar>
 <baz id="2"/>

 // Select the bar attribute of the root node
> xml.@bar
 baz

 // Select all id attributes in the tree
> xml..@id
 1
 2

 // Select all attributes of the root node
> xml.@*
 baz
 quz

// Add a quux elemend beneath the first baz
> xml..baz[0] += <quux/>
  <baz id="1"/>
  <quux/>
> xml
  <foo bar="baz" baz="qux">
      <bar>
          <baz id="1"/>
          <quux/>
      </bar>
      <baz id="2"/>
  </foo>

  // and beneath the second
> xml.baz[1] = <quux id="1"/>
> xml
  <foo bar="baz" baz="qux">
      <bar>
          <baz id="1"/>
          <quux/>
      </bar>
      <baz id="2"/>
      <quux id="1"/>
  </foo>

  // Replace bar's subtree with a foo element
> xml.bar.* = <foo id="1"/>
> xml
  <foo bar="baz" baz="qux">
      <bar>
          <foo id="1"/>
      </bar>
      <baz id="2"/>
      <quux id="1"/>
  </foo>

  // Add a bar below bar
> xml.bar.* += <bar id="1"/>
  <foo id="1"/>
  <bar id="1"/>
> xml
  <foo bar="baz" baz="qux">
      <bar>
          <foo id="1"/>
          <bar id="1"/>
      </bar>
      <baz id="2"/>
      <quux id="1"/>
  </foo>

  // Adding a quux attribute to the root
> xml.@quux = "foo"
  foo
> xml
  <foo bar="baz" baz="qux" quux="foo">
      <bar>
          <foo id="1"/>
          <bar id="1"/>
      </bar>
      <baz id="2"/>
      <quux id="1"/>
  </foo>

> xml.bar.@id = "0"
> xml..foo[0] = "Foo"
  Foo
> xml..bar[1] = "Bar"
  Bar
> xml
js> xml
<foo bar="baz" baz="qux" quux="foo" id="0">
    <bar id="0">
        <foo id="1">Foo</foo>
        <bar id="1">Bar</bar>
    </bar>
    <baz id="2"/>
    <quux id="1"/>
</foo>

  // Selecting all bar elements where id="1"
> xml..bar.(@id == 1)
  Bar

  // Literals:
  // XMLList literal. No root node.
> <>Foo<br/>Baz</>
  Foo
  <br/>
  Baz

// Interpolation.
> let x = "<foo/>"
> <foo bar={x}>{x + "<?>"}</foo>
  <foo/><?>
> <foo bar={x}>{x + "<?>"}</foo>.toXMLString()
  <foo bar="&lt;foo/>">&lt;foo/&gt;&lt;?&gt;</foo>

> let x = <foo/>
> <foo bar={x}>{x}</foo>.toXMLString()
  <foo bar="">
      <foo/>
  </foo>

Description
Pentadactyl for Pale Moon
Readme 139 MiB
Languages
JavaScript 93.7%
C++ 1.8%
CSS 1.6%
XSLT 1.3%
Vim script 0.8%
Other 0.6%