;
let output = util.xmlToDom(this._lastMowOutput, doc);
- XML.ignoreWhitespace = true;
// FIXME: need to make sure an open MOW is closed when commands
// that don't generate output are executed
- if (this._outputContainer.collapsed)
+ if (this.widgets.mowContainer.collapsed)
doc.body.innerHTML = "";
doc.body.appendChild(output);
@@ -417,6 +421,8 @@ const CommandLine = Module("commandline", {
this._currentExtendedMode = null;
commandline.triggerCallback("cancel", mode);
+ if (this._completions)
+ this._completions.previewClear();
if (this._history)
this._history.save();
@@ -431,11 +437,11 @@ const CommandLine = Module("commandline", {
this._completionList.hide();
if (!this._keepCommand || this._silent || this._quiet) {
- this._outputContainer.collapsed = true;
+ this.widgets.mowContainer.collapsed = true;
commandline.updateMorePrompt();
this.hide();
}
- if (!this._outputContainer.collapsed) {
+ if (!this.widgets.mowContainer.collapsed) {
modes.set(modes.COMMAND_LINE, modes.OUTPUT_MULTILINE);
commandline.updateMorePrompt();
}
@@ -492,39 +498,42 @@ const CommandLine = Module("commandline", {
if (flags & this.APPEND_TO_MESSAGES) {
let message = isobject(str) ? str : { message: str };
- this._messageHistory.add(update({ highlight: highlightGroup }, str));
+ this._messageHistory.add(update({ highlight: highlightGroup }, message));
str = message.message;
}
+
if ((flags & this.ACTIVE_WINDOW) &&
window != services.get("windowWatcher").activeWindow &&
services.get("windowWatcher").activeWindow.dactyl)
return;
- if ((flags & this.DISALLOW_MULTILINE) && !this._outputContainer.collapsed)
+ if ((flags & this.DISALLOW_MULTILINE) && !this.widgets.mowContainer.collapsed)
return;
let single = flags & (this.FORCE_SINGLELINE | this.DISALLOW_MULTILINE);
let action = this._echoLine;
- // TODO: this is all a bit convoluted - clean up.
- // assume that FORCE_MULTILINE output is fully styled
- if (!(flags & this.FORCE_MULTILINE) && !single && (!this._outputContainer.collapsed || this.widgets.message.value == this._lastEcho)) {
- highlightGroup += " Message";
- action = this._echoMultiline;
- }
-
- if ((flags & this.FORCE_MULTILINE) || (/\n/.test(str) || typeof str == "xml") && !(flags & this.FORCE_SINGLELINE))
- action = this._echoMultiline;
-
if (single)
this._lastEcho = null;
else {
if (this.widgets.message.value == this._lastEcho)
this._echoMultiline({this._lastEcho},
- this.widgets.message.getAttributeNS(NS.uri, "highlight"));
+ this.highlightGroup);
this._lastEcho = (action == this._echoLine) && str;
}
+ // TODO: this is all a bit convoluted - clean up.
+ // assume that FORCE_MULTILINE output is fully styled
+ if (!(flags & this.FORCE_MULTILINE) && !single
+ && (!this.widgets.mowContainer.collapsed || this.widgets.message.value == this._lastEcho)) {
+
+ highlightGroup += " Message";
+ action = this._echoMultiline;
+ }
+
+ if ((flags & this.FORCE_MULTILINE) || (/\n/.test(str) || typeof str == "xml") && !(flags & this.FORCE_SINGLELINE))
+ action = this._echoMultiline;
+
if (action)
action.call(this, str, highlightGroup, single);
}),
@@ -937,7 +946,7 @@ const CommandLine = Module("commandline", {
* and what they do.
*/
updateMorePrompt: function updateMorePrompt(force, showHelp) {
- if (this._outputContainer.collapsed) {
+ if (this.widgets.mowContainer.collapsed) {
this._echoLine("", this.HL_NORMAL);
return;
}
@@ -960,19 +969,25 @@ const CommandLine = Module("commandline", {
* @param {boolean} open If true, the widget will be opened if it's not
* already so.
*/
- updateOutputHeight: function updateOutputHeight(open) {
- if (!open && this._outputContainer.collapsed)
+ updateOutputHeight: function updateOutputHeight(open, extra) {
+ if (!open && this.widgets.mowContainer.collapsed)
return;
let doc = this.widgets.multilineOutput.contentDocument;
let availableHeight = config.outputHeight;
- if (!this._outputContainer.collapsed)
- availableHeight += parseFloat(this._outputContainer.height);
+ if (!this.widgets.mowContainer.collapsed)
+ availableHeight += parseFloat(this.widgets.mowContainer.height);
+ availableHeight -= extra || 0;
+
doc.body.style.minWidth = this.widgets.commandline.scrollWidth + "px";
- this._outputContainer.height = Math.min(doc.height, availableHeight) + "px";
+ this.widgets.mowContainer.height = Math.min(doc.height, availableHeight) + "px";
+ this.timeout(function ()
+ this.widgets.mowContainer.height = Math.min(doc.height, availableHeight) + "px",
+ 0);
+
doc.body.style.minWidth = "";
- this._outputContainer.collapsed = false;
+ this.widgets.mowContainer.collapsed = false;
},
resetCompletions: function resetCompletions() {
@@ -1015,7 +1030,12 @@ const CommandLine = Module("commandline", {
if (/^\s*$/.test(str))
return;
this.store.mutate("filter", function (line) (line.value || line) != str);
- this.store.push({ value: str, timestamp: Date.now()*1000, privateData: this.checkPrivate(str) });
+ try {
+ this.store.push({ value: str, timestamp: Date.now()*1000, privateData: this.checkPrivate(str) });
+ }
+ catch (e) {
+ dactyl.reportError(e);
+ }
this.store.truncate(options["history"], true);
},
/**
@@ -1142,6 +1162,8 @@ const CommandLine = Module("commandline", {
get wildtype() this.wildtypes[this.wildIndex] || "",
+ get wildtypes() this.wildmode.values,
+
complete: function complete(show, tabPressed) {
this.context.reset();
this.context.tabPressed = tabPressed;
@@ -1162,7 +1184,7 @@ const CommandLine = Module("commandline", {
let substring = "";
switch (this.wildtype.replace(/.*:/, "")) {
case "":
- substring = this.items[0].text;
+ substring = this.items[0].result;
break;
case "longest":
if (this.items.length > 1) {
@@ -1173,7 +1195,7 @@ const CommandLine = Module("commandline", {
case "full":
let item = this.items[this.selected != null ? this.selected + 1 : 0];
if (item)
- substring = item.text;
+ substring = item.result;
break;
}
@@ -1227,14 +1249,14 @@ const CommandLine = Module("commandline", {
this.wildIndex = 0;
}
- this.wildtypes = this.wildmode.values;
this.preview();
},
_reset: function _reset() {
- this.prefix = this.context.value.substring(0, this.start);
- this.value = this.context.value.substring(this.start, this.caret);
- this.suffix = this.context.value.substring(this.caret);
+ let value = this.editor.selection.focusNode.textContent;
+ this.prefix = value.substring(0, this.start);
+ this.value = value.substring(this.start, this.caret);
+ this.suffix = value.substring(this.caret);
this.itemList.reset();
this.itemList.selectItem(this.selected);
@@ -1301,7 +1323,7 @@ const CommandLine = Module("commandline", {
return;
this.selected = idx;
- this.completion = this.items[idx].text;
+ this.completion = this.items[idx].result;
}
this.itemList.selectItem(idx);
@@ -1320,6 +1342,8 @@ const CommandLine = Module("commandline", {
return;
while (this.tabs.length) {
+ this.wildIndex = Math.min(this.wildIndex, this.wildtypes.length - 1);
+
reverse = this.tabs.shift();
switch (this.wildtype.replace(/.*:/, "")) {
case "":
@@ -1340,7 +1364,7 @@ const CommandLine = Module("commandline", {
if (this.haveType("list"))
this.itemList.show();
- this.wildIndex = Math.constrain(this.wildIndex + 1, 0, this.wildtypes.length - 1);
+ this.wildIndex++;
this.preview();
commandline._statusTimer.tell();
@@ -1373,7 +1397,7 @@ const CommandLine = Module("commandline", {
if (typeof arg === "object")
arg = util.objectToString(arg, useColor);
- else if (typeof arg == "string" && /\n/.test(arg))
+ else if (typeof arg === "string" && /\n/.test(arg))
arg = {arg};
else
arg = String(arg);
@@ -1533,7 +1557,7 @@ const CommandLine = Module("commandline", {
styles: function () {
let fontSize = util.computedStyle(document.getElementById(config.mainWindowId)).fontSize;
styles.registerSheet("chrome://dactyl/skin/dactyl.css");
- let error = styles.addSheet(true, "font-size", "chrome://dactyl/content/buffer.xhtml",
+ styles.addSheet(true, "font-size", "chrome://dactyl/content/buffer.xhtml",
"body { font-size: " + fontSize + "; }");
}
});
@@ -1542,7 +1566,7 @@ const CommandLine = Module("commandline", {
* The list which is used for the completion box (and QuickFix window in
* future).
*
- * @param {string} id The id of the
]]>)
+:echo dactyl.generateHelp(commands.get(addons), Extra text]]>)
Writing plugins
- Writing &dactyl.appname; plugins is incredibly simple.
- Plugins are simply JavaScript files which run with full chrome
- privileges and have full access to the &dactyl.appname; and
- &dactyl.host; APIs. Each plugin has its own global object,
- which means that the variables and functions that you create
- won't pollute the global window or private
- dactyl namespaces. This means that there's no need
- to wrap your plugin in a closure, as is often the practice in
- JavaScript development. Furthermore, any plugin which is
- installed in your runtimepath/plugin directory
- will find its context stored in
- plugins.<pluginName>, which is often invaluable
- during development and testing.
+ Writing &dactyl.appname; plugins is incredibly simple. Plugins are
+ simply JavaScript files which run with full chrome privileges and
+ have full access to the &dactyl.appname; and &dactyl.host; APIs.
+ Each plugin has its own global object, which means that the
+ variables and functions that you create won't pollute the global
+ window or private dactyl namespaces. This means
+ that there's no need to wrap your plugin in a closure, as is often
+ the practice in JavaScript development. Furthermore, any plugin
+ which is installed in your runtimepath/plugins
+ directory will find its context stored in
+ plugins.<pluginName>, which is often invaluable during
+ development and testing.
+
+
+
+ Plugins are always initialized after the main window is loaded, so
+ there is no need to write load event handlers. Beyond
+ that, what you may do with your plugins is practically limitless.
+ Plugins have full access to all of the chrome resources that
+ ordinary &dactyl.host; do, along with the entire power of the
+ &dactyl.appname; API. If you need a starting point, have a look at some
+ existing plugins or
+ extensions,
+ especially the
+ &dactyl.appname;
+ source.
Plugin documentation
- Plugins may provide inline documentation, which will appear on
- the :help plugins page. The markup for help entries
- is the same as the above, with a few more plugin specific
- entries. Here is an example from the popular
- flashblock extension:
+ Plugins should provide inline documentation, which will appear on the
+ :help plugins page. The markup for help entries is the same
+ as the above, along with a few extra plugin-specific entries. Here is an
+ example from the popular flashblock extension:
This plugin provides the same features as the ever popular FlashBlock
Firefox addon. Flash animations are substituted with place holders which
play the original animation when clicked. Additionally, this plugin provides
options to control which sites can play animations without restrictions, and
triggers to toggle the playing of animation on the current page.
- commandline from the data in a given form.
'flashblock' 'fb'
@@ -206,25 +201,30 @@ var INFO =
holders are substituted for flash animations on untrusted sites.
- ]]>
- …;
-]]>
-
+
+ ...
+</plugin>;
The inline XML is made possible by
E4X.
- It's important that the documentation be assigned to the
+ It is important that the documentation be assigned to the
INFO variable, or &dactyl.appname; will not be able
- to find it. The documentation that you provide behaves exactly
- as other &dactyl.appname; documentation, which means that
- the tags you provide are available via :help with
- full tag completion and cross-referencing support. Although
- documentation is not required, we strongly recommend that all
- plugin authors provide at least basic documentation of the
- functionality of their plugins and of each of the options,
- commands, and especially mappings that they provide.
+ to find it. The XML property changes are not compulsory, but
+ they do prevent certain formatting problems that may occur
+ otherwise. Beginning your file with use strict, while
+ not required, helps to prevent a lot of common errors.
+
+
+
+ The documentation that you provide behaves exactly as other
+ &dactyl.appname; documentation, which means that the tags you
+ provide are available via :help with full tag
+ completion and cross-referencing support. Although documentation
+ is not required, we strongly recommend that all plugin authors
+ provide at least basic documentation of the functionality of
+ their plugins and of each of the options, commands, and
+ especially mappings that they provide.
+ Much of the power of &dactyl.appname; lies in its scriptable expression
+ evaluation. &dactyl.appname; understands two kinds of expressions: ex
+ commands, and JavaScript. Ex commands are simple, easy to type, and
+ readily accessible from the command-line. They form a core part of
+ the user interface. JavaScript, on the other hand, is much less
+ straightforward, but allows for any number of complex actions to be
+ executed, with full access to all of the internals of &dactyl.appname; and
+ &dactyl.host;. Both expression evaluation methods support sophisticated
+ expression completion, including option lists and descriptions thereof.
+
- Echo the expression. Useful for showing informational messages. Multiple lines
- can be separated by \n. expr can either be a quoted string, or any expression
- which can be fed to eval() like 4+5. You can also view the source code of
- objects and functions if the return value of expr is an object or function.
+ Echo a JavaScript expression. expr may be a simple quoted
+ string, in which case it is shown in the statusline, or any
+ arbitrary JavaScript expression. If the expression results in
+ anything other than a string, it is pretty-printed in a multiline
+ frame just above the command-line. The output depends on the type
+ of object. Functions display their source, DOM nodes display the
+ pretty-printed XML of the top-level node, XML literals are
+ rendered as page content, and all other objects display their
+ string representation and all of their enumerable properties.
- Execute the string that results from the evaluation of expr as an Ex command.
- Example: :execute "source " + io.getRCFile().path sources the appropriate
- RC file.
+ Execute the ex command string that results from the evaluation of
+ the JavaScript expression expr. For example,
+
+ :execute "open " + content.location.host
+
+ opens the homepage of the currently opened site.
-
Note: Unlike Vim this currently only supports a single argument.
- Run any JavaScript command through eval(). Acts as a JavaScript interpreter by
- passing the argument to eval().
- :javascript alert(Hello world) shows
- a dialog box with the text "Hello world".
- :javascript <<EOF reads all the lines
- until a line starting with "EOF"
- is found, and interpret them with the JavaScript eval() function.
+ Evaluates the given cmd as JavaScript. Behaves exactly as
+ :echo, except that the result is not printed. Any
+ exception raised by the evaluation will, however, be displayed as
+ an error message and appended to :messages.
+
+
+
+ :javascript alert(Hello world) will open a
+ dialog window with the message Hello world.
+
+
+
+ Moreover, multiline scripts can be executed with shell-like here
+ document syntax. For example, the following,
+
+
+ :jsavascript <<EOF
+for each (var tab in tabs.visibleTabs)
+ tab.linkedBrowser.reload();
+EOF
+
+
+ will reload all visible tabs.
+
+
+
+ Moreover, sophisticated, context-sensitive
+ completion is available for JavaScript code, which extends to
+ property names, object keys, and programmable completion for
+ string function arguments. The completion code is designed to be
+ both as safe and as powerful as possible. Expressions in a given
+ command-line session will only be evaluated once, and, with
+ autocompletion turned on, any completion which requires a function
+ to be executed requires an explicit press to
+ commence.
The special version :javascript! opens the JavaScript console of
&dactyl.host;.
-
-
- completion is available for :javascript cmd (but not
- yet for the :js <<EOF multiline widget). Be aware that &dactyl.appname; needs
- to run cmd through eval() to get the completions, which could have unwanted
- side effects.
-
@@ -104,9 +145,10 @@
:let
- Sets or lists a variable. Sets the variable {var-name} to the value of the
+ Sets or lists a variable. Sets the variable var-name to the value of the
expression expr1. If no expression is given, the value of the variable is
displayed. Without arguments, displays a list of all variables.
+ This functionality has few useful applications and so is deprecated.
- Deletes the variable name. Several variable names can be given. When used
- with ! no error message is output for non-existing variables.
+ Deletes the named variables. When ! is given, no error
+ message is output for non-existing variables.
- Although &dactyl.appname; offers the most frequently used &dactyl.host; functionality via
- Ex and Normal mode commands there may be times when directly accessing the GUI
- is required. There are commands for accessing the menu system, standard dialogs
- and the sidebar.
+ Although &dactyl.appname; offers access to the most frequently used
+ &dactyl.host; functionality via Ex and Normal mode commands, there may be
+ times when direct access to the &dactyl.host; GUI is required. For such
+ eventualities, there there are commands to access menu items and to launch
+ standard &dactyl.host; dialogs.
Execute menu from the command line. This command provides command-line access
to all menu items available from the main &dactyl.host; menubar. menu is a
hierarchical path to the menu item with each submenu separated by a period.
- E.g. :emenu File.Open File…
+ E.g. :emenu File.Open File… launches the standard
+ &dactyl.host; ‘Open File’ dialog.
@@ -38,13 +42,14 @@
:addo :addons
+ :addons
- Show available &dactyl.host; Extensions and Themes.
- You can add/remove/disable browser extensions from this dialog.
- Be aware that not all &dactyl.host; extensions work, because &dactyl.appname; overrides
- some key bindings and changes &dactyl.host;'s GUI.
+ Opens the &dactyl.host; addon manager, where extensions and themes
+ may be installed, removed, disabled, and configured. See also
+ :extenstions, :extinstall, :extoptions,
+ :extenable, :extdisable, and :extdelete.
- Show progress of current downloads. Open the original &dactyl.host; download dialog
- in a new tab. Here, downloads can be paused, canceled and resumed.
+ Show progress of current downloads. Open the standard &dactyl.host;
+ download dialog in a new tab. Here, downloads can be paused,
+ resumed, and canceled.
- URL: The URL of the currently loaded page. While the page is loading
+ URL: The URL of the currently loaded page. While the page is loading
progress messages are also output to this field.
- History and bookmark status ([+-❤]): The position of the current page in
- the tab's session history; + and - indicate that it's possible to move
+ History and bookmark status ([+-❤]): The position of the current page in
+ the tab's session history; + and - indicate that it is possible to move
backwards and forwards through the history respectively. ❤ indicates that
the current page is bookmarked.
- Tab index ([N/M]): N is the index of the currently selected tab and M is
+ Tab index ([N/M]): N is the index of the currently selected tab and M is
the total number of tabs in the current window.
- Vertical scroll: The vertical scroll percentage of the current buffer.
- This is a percentage or Top for 0% and Bot for 100%.
+ Vertical scroll: The vertical scroll percentage of the current buffer,
+ or Top or Bot for the top and bottom of the buffer respectively.
- Security: The security information button is displayed when appropriate
+ Security: The security information button is displayed when appropriate
as per &dactyl.host;. The color of the status bar also changes to reflect the
current security status of the loaded page.
-
-
black – the site's identity is unverified and the connection is unencrypted
-
blue – the site's domain has been verified and the connection is encrypted
-
green – the site's domain and owner have been fully verified via an
-
- Extended Validation certificate and the connection is encrypted
+
+
black
+
The site's identity is unverified and the connection is unencrypted
+
+
red
+
The connection is encrypted, but the site's identity has not been verified or it contains unencrypted content
+
+
blue
+
The site's domain has been verified and the connection is encrypted
+
+
green
+
The site's domain and owner have been fully verified via an Extended Validation certificate and the connection is encrypted
+
- Extensions: Any extension buttons that would normally be installed to the
+ Extensions: Any extension buttons that would normally be installed to the
&dactyl.host; status bar are appended to the end of the status line.
-Hints are the way in which &dactyl.appname; allows you to follow links on a page. By
-providing each link with a suitable hint, you can access all links with a
-similar amount of minimal effort. This contrasts strongly with the traditional
-approaches offered by the mouse, in which you must first find and then aim for
-the link you would like, and by using repeated tabbing which quickly becomes
-tedious unless you always visit the first link on a page.
+
+ Hints are an easy way to interact with web pages without using
+ your mouse. In hint mode, &dactyl.appname; highlights and
+ numbers all clickable elements. The elements can be selected
+ either by typing their numbers, or typing parts of their text to
+ narrow them down. While the default action is to click the
+ selected link, other actions are available, including saving the
+ resulting link, copying its URL, or saving an image. For each
+ of these actions, only the set of applicable elements is
+ highlighted.
+
- Start QuickHint mode. In QuickHint mode, every hintable item
- (according to the hinttags XPath query) is assigned a
- unique number. You can either type this number or type part of the
- link text as specified by the hintmatching option, and it
- is followed as soon as it can be uniquely identified. Often it can
- be useful to combine these techniques to narrow down results with
- some letters, and then typing a single digit to make the match
- unique. Pressing (defaults to
- :let mapleader = "\") toggles "escape-mode", where numbers are
- treated as normal text. stops this mode at any
- time.
+ Start QuickHint mode. In this mode, every clickable
+ element (as definied by the hinttags option) is
+ highlighted and numbered. Elements can be selected
+ either by typing their number, or by typing part of
+ their text to narrow down the result. When an element
+ has been selected, it is automatically clicked and hint
+ mode ends. Additionally, the following keys have
+ special meanings in QuickHint mode:
+
+
+
Selects the first highlighted element, or that
+ fucused by .
- Start QuickHint mode, but open link in a new tab. Like normal QuickHint
- mode (activated with f) but opens the link in a new tab. The new
- tab will be loaded in background according to the
- browser.tabs.loadInBackground &dactyl.host; preference.
+ Start QuickHint mode, but the selected elements
+ are clicked with the key pressed,
+ which has the normal effect of opening it in a new tab
+ (depending on the value of the
+ browser.tabs.loadInBackground preference).
- Start an extended hint mode. ExtendedHint mode is useful for
- performing operations on hinted elements other than the default
- left mouse click. For example, you can yank link locations, open
- them in a new window or save images. If you want to yank the
- location of hint 24, press ;y to start this hint
- mode. Then press 24 to copy the hint location.
+ Start an extended hint mode. ExtendedHint mode is
+ exactly like QuickHint mode, except that each
+ sub-mode highlights a more specialized set of elements,
+ and performs a unique action on the selected link.
+ Because of the panoply of extend hint modes available,
+ after pressing ;, pressing brings
+ up the completion-list with a list of each hint
+ mode and its description.
;?? to show information about the element (incomplete)
-
;ss to save its destination
-
;aa to save its destination (prompting for save location)
-
;ff to focus a frame
-
;oo to open its location in the current tab
-
;tt to open its location in a new tab
-
;bb to open its location in a new background tab
-
;ww to open its destination in a new window
-
;FF to follow a sequence of -delimited hints in background tabs
-
;OO to generate an :open with hint's URL (like O)
-
;TT to generate a :tabopen with hint's URL (like T)
-
;WW to generate a :winopen with hint's URL
-
;vv to view its destination source
-
;VV to view its destination source in the external editor
-
;yy to yank its destination location
-
;YY to yank its text description
-
;cc to open its context menu
-
;ii to open an image
-
;II to open an image in a new tab.
+
; to focus a link and hover it with the mouse
+
? to show information about the element (incomplete)
+
s to save its destination
+
a to save its destination (prompting for save location)
+
f to focus a frame
+
o to open its location in the current tab
+
t to open its location in a new tab
+
b to open its location in a new background tab
+
w to open its destination in a new window
+
F to follow a sequence of -delimited hints in background tabs
+
O to generate an :open with hint's URL (like ;O)
+
T to generate a :tabopen with hint's URL (like ;T)
+
W to generate a :winopen with hint's URL
+
v to view its destination source
+
V to view its destination source in the external editor
+
y to yank its destination location
+
Y to yank its text description
+
c to open its context menu
+
i to open an image
+
I to open an image in a new tab.
+
- Depending on the value of complete, you can get a list of
- extended hint modes by pressing from the ;
- prompt.
-
-
-
- Hintable elements for all extended hint modes can be set in the
- extendedhinttags XPath string.
+ Of the previous modes, the value of the hinttags
+ option os used to choose the highlighted elements for
+ the modes, ;;, ;?, ;w, ;v,
+ ;V, ;Y and ;c. The value of
+ extendedhinttags is used to choose the elements
+ for, ;s, ;a, ;o, ;t,
+ ;b, ;O, ;T, ;W, ;y,
Insert mode is used to enter text in text boxes and text areas. When
- insertmode is set, focusing on a text area immediately switches to
- Insert mode.
+ the insertmode option is set, insert mode is immediately
+ entered when focusing a text area.
i_ii_i
-
+
Starts Insert mode in text areas when insertmode is not set.
@@ -32,7 +34,7 @@
]]><C-i>
-
+
Launch the external editor. See the editor option.
+ &dactyl.appname; provides a number commands to change the
+ behavior of key presses. This can be mean anythong from
+ automatically substituting one key for another, to automatically
+ replacing one typed word for another, to launching a dialog or
+ running a command.
+
+
Key mapping
- The key mapping commands can be used to either redefine the standard key
- bindings or define new ones. A mapping consists of a key, or key-sequence,
- which is translated to a string of characters. Example:
-
-:map :echo new Date().toDateString()
-
- will echo the current date to the command line when is pressed.
+ Key mappings are the most basic means &dactyl.appname; provides
+ for altering the actions of key presses. Each key mapping is
+ associated with a mode, such as insert,
+ normal, or
+ command-line, and only
+ has effect when that mode is active. Although each mode has a
+ full suite of internal mappings, they may be easily augmented,
+ altered, or removed with the :map command and its
+ variants. These commands, in essence, allow the user to quickly
+ substitute one sequence of key presses for another.
+ For instance,
-:map-modes
+:map :echo Date()
- Keys can be mapped in four distinct modes:
+ causes “:echo Date()” to be typed out
+ whenever is pressed, thus echoing the full date
+ to the command-line.
-
-
Normal mode: When browsing normally
-
Visual mode: When selecting text with the cursor keys
-
Insert mode: When interacting with text fields on a website
-
Command-line mode: When typing into the &dactyl.appname; command line
-
+
+ Standard key mapping commands are provided for the four most
+ common modes,
+
+
+
+
n
Normal mode: When browsing normally
+
v
Visual mode: When selecting text with the cursor keys
+
i
Insert mode: When interacting with text fields on a website
+
c
Command-line mode: When typing into the &dactyl.appname; command line
+
+
+
+ The ordinary :map and :noremap commands
+ add mappings for normal and visual mode. In order to map key
+ bindings in a different mode, any of the mapping commands may be
+ prefixed with one of the above letters. For instance,
+ :imap creates a new key mapping in insert mode, while
+ :cunmap removes a key mapping from command-line mode.
+ Although other modes do exist, their mappings may currently only
+ be altered via JavaScript.
+
- Mappings are NOT saved between sessions, make sure you put them in your
- &dactyl.name;rc file!
+ It is important to note that mappings are not
+ automatically saved between sessions. In order to preserve them,
+ they must either be added to your &dactyl.name;rc or
+ saved via the :mk&dactyl.name;rc command.
- Map the key-sequencelhs to rhs for the applicable mode(s). The rhs is
- remapped, allowing for nested and recursive mappings.
+ Map the key-sequencelhs to rhs for
+ the applicable mode(s). The keys of rhs respect
+ user-defined mappings, so the following will result in
+ an infinite loop,
+
+ :map a b
+:map b a
+
+ In order to avoid this shortcoming, the
+ :noremap command may be used.
- Map the key-sequencelhs to rhs for the applicable mode(s). No remapping of
- the rhs is performed.
+ Map the key-sequencelhs to rhs for
+ the applicable mode(s). The keys in rhs do not
+ respect user-defined key mappings, so the following
+ effectively reverses the default meanings of the keys
+ d and D
+ :noremap d D
+:noremap D d
@@ -113,8 +158,7 @@
:cmapclear
- Remove all mappings for the applicable mode(s). All user-defined mappings are
- cleared.
+ Remove all user-defined mappings for the applicable mode(s).
@@ -155,12 +199,12 @@
:map-<silent>
- When the first argument to one of the mapping commands is ,
- rhs is not echoed to the command line, nor, for that matter, anything
- else until the command has completed.
+ When the first argument to one of the mapping commands is
+ , the keys in rhs are not shown in the
+ command line as they are generated. Nor, for that matter, is
+ anything else until the command has completed.
-
Below is an overview of which modes each map command applies to:
- For most keys, the key-sequence is the same as the character you see when you
- type that key, however there are some exceptions which allow for a much larger
- number of keys to be used in mappings.
+ Most keys in key sequences are represented simply by the
+ character that you see on the screen when you type them.
+ However, as a number of these characters have special meanings,
+ and a number of keys have no visual representation, a special
+ notation is required.
-
, <, , \ allow a literal < or space character.
-
', " and \ must be used to avoid escaping issues when mapping a quote or backslash.
-
-
- (for carriage return/enter)
+ The first argument to the :map commands must be
+ quoted if it contains spaces,
+ quotation marks or back-slashes. A space may additionally be
+ typed as .
-
(for a backspace)
+
+ As special key names start with the < character,
+ a literal < must be typed as .
+
+
+ , , ,
+ and represent the standard arrow keys.
+
+
+ , ,
+ , , ,
+ , and work as
+ expected.
+
+
+ or represent the carriage
+ return key.
+
+
represents the backspace key.
through work as expected
+
+ through represent keys on the
+ numeric keypad.
+
- Most keyboards have some modifiers such as the control, alt or meta keys. In
- order to create a mapping that uses these keys the correct prefix must be used
- within the angle brackets.
+ In order to represent key presses using the Control, Alt, Meta,
+ or Shift keys, the following prefixes may be used,
-
: The control or ctrl key.
-
: The alt key.
-
: The meta key, windows key, or command key
-
: The shift key.
+
: The control or ctrl key.
+
: The alt key.
+
: The meta key, windows key, or command key
+
: The shift key.
- These prefixes can be combined however you see fit, though you should note that
- within angle brackets all alphabetic characters are read as lowercase. In order
- to force them to be uppercase, you must specify the S- prefix as well.
- Additionally, you should never use the S- prefix with a number or piece of
- punctuation, even if you require a shift to type that character; doing so will
- give you a mapping that cannot be typed. With non-character keys, tab and
- space, the S- modifier works just like C- A- and M-. Some examples may clarify
- the situation:
+ These prefixes can be combined however you see fit, though you
+ should note that within angle brackets all alphabetic characters
+ are read as lowercase. Uppercase characters can only be
+ specified with the S- modifier. The following key
+ sequences are interperated as described,
-
-
xc: type x, and then type c
-
c: hold control and type x, then type c without control
-
: type 2 while holding control
-
: type @ while holding control
-
: press space while holding shift
-
: press j while holding control and alt
-
: exactly the same as above
-
: press J while holding control and alt
-
+
+
xc
+
Type the ‘X’ key followed by the ‘C’ key
+
+
c
+
+ Type the ‘X’ key while holding the ‘Control’ key, followed
+ by the ‘C’ key.
+
+
+
+
Type the ‘2’ while holding the ‘Control’ key.
+
+
+
Type the ‘2’ key @ while holding the ‘Control’ key.
+
+
+
Press the space bar while holding the ‘Shift’ key.
+
+
+
Type the ‘J’ key while while holding both the ‘Control’ and ‘Alt’ keys.
+
+
+
Exactly the same as above.
+
+
+
Type the ‘J’ key while while holding both the ‘Control’, ‘Alt’, and ‘Shift’ keys.
+
Special characters
]]>
+ <Nop>
- Do nothing. This command is useful for disabling a specific mapping.
- :map will prevent from doing anything.
+ Do nothing. This pseudo-key is useful for disabling a
+ specific builtin mapping. For example,
+ :map will prevent
+ from doing anything.
- Expands to the value of the "mapleader" variable in key mapping. If
- "mapleader" is unset or empty then \ is used. Example:
+ Expands to the value of the ‘mapleader’ variable in key mapping. If
+ ‘mapleader’ is unset or empty then ‘\’ is used. For example, by default,
- &dactyl.appname; can automatically replace words identified as abbreviations,
- which may be used to save typing or to correct commonly misspelled
- words. An abbreviation can be one of three types that are defined by the
- types of constituent characters. Whitespace and quotes are non-keyword
- types, and all other characters are keyword types.
+ In addition to basic mappings, &dactyl.appname; can also
+ automatically replace whole words after they've been typed.
+ These shortcuts are known as abbreviations, and are most often
+ useful for correcting spelling of commonly mistyped words, as
+ well as shortening the typing of oft-typed but long words or
+ phrases. There are three basic types of abbreviations, defined
+ by the types of characters they contain,
-
-
A "full-id" abbreviation consists entirely of keyword characters (e.g., "teh", "msoft").
-
An "end-id" abbreviation ends in keyword character but otherwise contains all non-keyword characters (e.g., "'i").
-
A "non-id" abbreviation ends in a non-keyword character but otherwise contains any non-whitespace character (e.g., "def'").
-
+
+
‘full-id’ abbreviations consist entirely of keyword characters (e.g., ‘teh’, ‘msoft’).
+
‘end-id’ abbreviations end in keyword character but otherwise contains all non-keyword characters (e.g., ‘'i’).
+
‘non-id’ abbreviations end in a non-keyword character but otherwise contains any non-whitespace character (e.g., ‘def'’).
+
Strings which fit none of the above patterns can not be defined as abbreviations (e.g., ‘a'b’ and ‘a b’).
+
- Strings that cannot be abbreviations include "a'b" and "a b".
-
-
-
- An abbreviation is recognized when a space, quote character, or
- is typed after the abbreviation. There are no default
- abbreviations, and abbreviations are never recursive.
+ For the purposes of abbreviations, keyword characters include
+ all non-whitespace characters except for single or double
+ quotation marks. Abbreviations are expanded as soon as any
+ non-keyword character, or the key , is typed.
@@ -309,9 +395,10 @@
:abbreviate
- Abbreviate a key sequence. Abbreviate lhs to rhs. If only lhs is given,
- list all abbreviations that start with lhs. If no arguments are given,
- list all abbreviations.
+ Abbreviate lhs to rhs. If only lhs
+ is given, list all abbreviations that start with
+ lhs. If no arguments are given, list all
+ abbreviations.
@@ -324,8 +411,9 @@
:cabbrev
- Abbreviate a key sequence for Command-line mode. Same as :abbreviate,
- but for Command-line mode only.
+ Abbreviate a key sequence for Command-line mode. Same as
+ :abbreviate, but for
+ command-line mode only.
@@ -338,8 +426,8 @@
:iabbrev
- Abbreviate a key sequence for Insert mode. Same as :abbreviate but
- for Insert mode only.
+ Abbreviate a key sequence for Insert mode. Same as
+ :abbreviate, but for insert mode only.
- Remove an abbreviation for Command-line mode. Same as :unabbreviate,
- but for Command-line mode only.
+ Remove an abbreviation for Command-line mode. Same as
+ :unabbreviate, but for
+ command-line mode only.
- Remove an abbreviation for Insert mode. Same as :unabbreviate but for
- Insert mode only.
+ Remove an abbreviation for Insert mode. Same as
+ :unabbreviate but for Insert mode
+ only.
@@ -381,7 +471,7 @@
:abc :abclear:abclear
-
+
Remove all abbreviations.
@@ -390,8 +480,8 @@
:cabc :cabclear:cabclear
-
-
Remove all abbreviations for Command-line mode.
+
+
Remove all abbreviations for command-line mode.
@@ -399,7 +489,7 @@
:iabc :iabclear:iabclear
-
+
Remove all abbreviations for Insert mode.
@@ -407,10 +497,21 @@
User-defined commands
+
+ Defining new commands is perhaps the most straightforward way of
+ repeating commonly used actions. User-defined commands may be
+ entered from the command-line or scripts exactly like standard
+ commands, and may similarly accept arguments, options, counts,
+ and !s, as well as provide command-line completion.
+ These commands may be defined as either ordinary,
+ macro-interpolated Ex commands, or otherwise as plain
+ JavaScript statements.
+
- Define a new user command. The name of the command is cmd and its replacement
- text is rep. The command's attributes are attr. If a command with this name
- already exists an error is reported unless ! is specified, in which case the
- command is redefined. Unlike Vim, the command may start with a lowercase
- letter.
+ Define a new user command. The name of the command is
+ cmd and its replacement text is rep. If a
+ command with this name already exists, an error is
+ reported unless ! is specified, in which case
+ the command is redefined. Unlike Vim, the command may
+ start with a lowercase letter.
- The command's behavior can be specified by providing attributes when the
- command is defined.
+ The new command is usually defined by a string to be
+ executed as an Ex command. In this case, before
+ execution, strings of the form
+ <var> are interpolated
+ as described below, in order to insert arguments,
+ options, and the like. If the -javascript (short
+ name -js) flag is present, the command is
+ executed as JavaScript, and the arguments are present as
+ variables in its scope instead, and no interpolation is
+ performed.
-
- Argument handling
+
+ The command's behavior can be altered by providing
+ attributes when the command is defined.
+
Argument handling
+
By default user commands accept no arguments. This can be changed by specifying
the -nargs attribute.
@@ -459,9 +572,7 @@
-nargs=+
One or more arguments are allowed
-
- Argument completion
-
+
Argument completion
Completion for arguments to user defined commands is not available by default.
@@ -496,9 +607,7 @@
- &dactyl.appname; supports a number of different marks:
+ &dactyl.appname; supports a number of different methods of
+ marking your place, in order to easily return later,
-
Bookmarks which allow you to mark a web page as one of your favorites for easy access.
-
QuickMarks allow you to define up to 62 (a-zA-Z0-9) web sites (or groups of web sites) which you visit most often.
-
Local marks to store the position within a web page.
-
History is also a special type of marks, as &dactyl.appname; automatically remembers sites which you have visited in the past.
+
Bookmarks are the standard marks of &dactyl.host;, and are fully supported.
+
QuickMarks allow you to quickly save and return as many as 62 (a-zA-Z0-9) different web sites with a quick keyboard shortcut.
+
Local marks allow you to store and return to a position within the current web page.
+
URL marks allow you to store and return to the position and URL of the current web page.
+
History marks every opened page with data on when and how often it has been visited.
-
Bookmarks
-
+
Bookmarks
+
+
+ Bookmarks are the most traditional kind of marks supported by
+ &dactyl.appname;. They are accessible through &dactyl.host;'s
+ bookmark menu, sidebar, and toolbar, in addition to its location
+ bar completion system. &dactyl.appname; makes them accessible
+ not only via several commands and its completion system (see the
+ complete option), but also displays a ❤ in the status bar
+ when a bookmarked page is displayed.
+
a :bma :bmark
- :bma[rk][!] -title=title-keyword=kw-tag=tag1,tag2url
+ :bmark!-title=...-keyword=...-tag=tag,...urla
Add a bookmark.
-
The following options are interpreted:
+
The following options are available,
-
-
-title="custom title" (short option: -t)
-
-tag=comma,separated,tag,list (short option: -T)
-
-keyword=keyword (short option: -k)
-
+
+
-title
+
+ The title of the bookmark.
+ Defaults to the page title, if available, or
+ url otherwise.
+ (short name -t)
+
+
-tag
+
+ Comma-separated list of tags for grouping and later
+ access (short name -T).
+
+
-keyword
+
+ A keyword which may be used to open the bookmark via
+ the URL bar or :open prompt. If the
+ url contains the string %s it is
+ replaced by any text following the keyword when it
+ is opened.
+ (short name -k)
+
+
- If [!] is present, a new bookmark is always added. Otherwise, the first
- bookmark matching url is updated.
+ If url is omitted, the URL currently loaded web
+ page is used.
- When creating a new bookmark, if -title isn't given, either the web
- page's title or URL is used. You can omit the optional url argument, so
- just do :bmark to bookmark the currently loaded web page with a default
- title and without any tags.
+ If ! is present, a new bookmark is always
+ added. Otherwise, the first bookmark matching
+ url is updated.
A
+ A
- Toggle bookmarked state of current URL. Add/remove a bookmark for the current
- location, depending on if it is already bookmarked or not. In contrast to the
- :bmark command, the bookmark is just starred which means it is placed
- in the Unfiled Bookmarks Folder instead of the bookmarks menu.
+ Toggle bookmarked state of current URL. Add/remove a
+ bookmark for the current location, depending on whether
+ it is currently bookmarked. New bookmarks are placed in
+ the Unfiled Bookmarks folder, and don't appear
+ in the bookmarks menu or toolbar, but do appear in
+ location bar and :open completions, as well as
+ the :bmarks list.
:bmarks
- :bmarks[!] filter
+ :bmarks!filter
- List or open multiple bookmarks. Open the message window at the bottom of the
- screen with all bookmarks which match filter either in the title or
- URL. You can then use extended hint commands like ;o to open the desired
- bookmark.
+ List or open multiple bookmarks. Opens the message window
+ at the bottom of the screen with all bookmarks with
+ titles or URLs matching filter. The resulting
+ URLs can be clicked, or accessed via extended hint modes
+ such as ;o.
- The special version :bmarks! works the same as :bmarks except it
- opens all the found bookmarks in new tabs.
+ The special version :bmarks! works the same as
+ :bmarks except that it opens all all matching
+ bookmarks in new tabs rather than listing them.
-
Filter can also contain the following options:
+
The bookmarks may also be filtered via the following options,
-
-
-tag=comma,separated,tag,list (short option: -T)
-
-max=N (short options: -m)
-
+
+
-tag
+
+ A comma-separated list of tags, all of which must be
+ present for a match (short name -T).
+
+
-max
+
+ The maximum number of items to list or open
+ (short name -m).
+
+
@@ -98,43 +140,59 @@
:delbm[arks]!
- Delete a bookmark. Deletes all bookmarks which match the url. If
- omitted, url defaults to the URL of the current buffer. Use
- key on a string to complete the URL which you want to delete.
+ Deletes all bookmarks which match url.
+ If omitted, url defaults to the URL of the
+ current buffer.
-
If ! is specified then all bookmarks will be deleted.
+
If ! is specified then all bookmarks will be deleted.
-
-
History
-
+
+
History
+
+
+ Though not traditionally considered a mark, history behaves very
+ similarly to bookmarks both in &dactyl.host; and
+ &dactyl.appname;. Every visited page is marked and weighted by
+ when and how often it is visited, and can be retrieved both in
+ history list and location completions. Indeed, the ‘frecency’
+ algorithm used to determine the results of location completions
+ (see the complete option) mean that history is often a
+ more effective type of mark than bookmarks themselves.
+
]]>
+ ]]>
- Go to an older position in the jump list. The jump list is just the browser
- history for now. If count is specified go back count pages.
+ Go to an older position in the jump list. This currently
+ entails moving backward in page history, but in the
+ future will take into account page positions as well.
+ If count is specified go back count pages.
]]>
+ ]]>
- Go to a newer position in the jump list. The jump list
- is just the browser history for now. If count
- is specified go forward count pages.
+ Go to an newer position in the jump list. This currently
+ entails moving forward in page history, but in the
+ future will take into account page positions as well.
+ If count is specified go forward count pages.
H]]>
+ [count]H
Go back in the browser history. If count is specified go back count pages.
@@ -143,7 +201,8 @@
L]]>
- [count]L
+
+ countL
Go forward in the browser history. If count is specified go forward count
@@ -154,8 +213,8 @@
:ba :back
- :[count]ba[ck] url
- :[count]ba[ck]!
+ :countbackurl
+ :countback!
Go back in the browser history. If count is specified go back count pages.
@@ -168,8 +227,8 @@
:fw :fo :forward
- :[count]fo[rward] url
- :[count]fo[rward]!
+ :countforwardurl
+ :countforward!
Go forward in the browser history. If count is specified go forward count
@@ -183,78 +242,87 @@
:hs :hist :history
- :hist[ory][!] filter
+ :history!filter
- Show recently visited URLs. Open the message window at the bottom of the screen
- with all history items which match filter either in the title or URL.
+ Show recently visited URLs. Opens the message window at the bottom of the screen
+ with all history items whose page titles or URLs match
+ filter.
- The special version :history! works the same as :history except
- it opens all the found items in new tabs.
+ The special version :history! works the same as
+ :history except that it opens all all matching
+ pages in new tabs rather than listing them.
-
Filter can also contain the following options:
+
The pages may also be filtered via the following options,
-
-
-max=N (short options: -m)
-
+
+
-max
+
+ The maximum number of items to list or open
+ (short name -m).
+
+
-
QuickMarks
-
+
QuickMarks
+
+
+ QuickMarks are bookmarks stripped to the bone for quickly
+ getting to the pages that you visit most. A QuickMark is very
+ simply a URL assigned to a letter or number. They can therefore
+ be saved or opened with only three key presses each.
+
+ Add new QuickMark for current URL. You can later jump to
+ the mark with goa-zA-Z0-9
+ gna-zA-Z0-9. QuickMarks are persistent
+ across browser sessions.
+
- Jump to a QuickMark in the current tab. Open any QuickMark in the current tab.
- You can mark any URLs with Ma-zA-Z0-9. These QuickMarks are
- persistent across browser sessions.
+ Jump to a QuickMark in the current tab. See also
+ M and :qmark.
- Jump to a QuickMark in a new tab. Works like
- goa-zA-Z0-9 but opens the QuickMark in a
- new tab. Whether the new tab is activated or not depends
- on the activate option.
-
-
- Mnemonic: Go in a new tab. gt would make more
- sense but is already taken.
-
-
-
-
-
- M
- a-zA-Z0-9
-
-
- Add new QuickMark for current URL. You can go to a
- marked URL in the current tab with
- goa-zA-Z0-9 or in a new tab with
- gna-zA-Z0-9. These QuickMarks are
- persistent across browser sessions.
+ Jump to a QuickMark in a new tab. The new tab is focused
+ only if activate contains quickmark or
+ all. See also M and :qmark.
- Mark a URL with a letter for quick access. You can also mark whole groups
- like this:
+ Mark url with a letter for quick access. See also
+ go, gn, and M.
- :qmark f http://forum1.com, http://forum2.com, imdb some artist
+ In addition to simple URLs, url may be any string
+ that can be passed to :open, including bookmark
+ and search keywords and comma-separated lists of URLs to
+ be opened in multiple tabs, such as,
+
+ :qmark f http://wwww.pandora.com, google Tim Minchin:qmarks
+ :qmarks arg
- Show all QuickMarks. If arg is specified then
- limit the list to those QuickMarks mentioned.
+ List QuickMarks. If arg is given then limit the
+ list to those QuickMarks mentioned, otherwise list them
+ all.
-
Local marks
-
+
+
Local marks and URL marks
+
+
+ Local and URL marks allow you to mark your position on the
+ current page to quickly return later. Each mark is assigned to a
+ letter. Lowercase letters behave as local marks, while uppercase
+ letters act as URL marks. The difference between the two is
+ that local marks apply uniquely to each page, while URL marks
+ mark a specific position on a specific page. So, while the mark
+ m may take you to the top of the page on Site 1, it may
+ take you to the middle on Site 2. The mark M, on the
+ other hand, will always return you to Site 1, no matter where
+ before hand.
+
Set mark at the cursor position. Marks a-z are local to the buffer, whereas
@@ -307,7 +396,8 @@
` '
- a-zA-Z
+
+ 'a-zA-Z
Jump to the mark. Marks a-z are local to the buffer, whereas A-Z are valid
@@ -318,15 +408,15 @@
:delm :delmarks
- marks
- :delm[arks]!
+ :delmarksarg
+ :delmarks!
-
Delete the specified marks. Marks are presented as a list.
+
Delete the specified marks.
Examples:
-
:delmarks Aa b p deletes marks A, a, b and p
+
:delmarks Aa b p deletes marks A, a, b, and p
:delmarks b-p deletes all marks in the range b to p
:delmarks! deletes all marks for the current buffer
- Show all location marks of the current web page. If
- arg is specified then limit the list to those
- marks mentioned.
+ Show all local marks for the current web page and all
+ URL marks. If arg is specified then limit the
+ list to those marks mentioned.
&dactyl.appname; stores all info and error messages in a message
history. The type of info messages output can be controlled by
- the verbose option. The number of stored messages can be set
- with the messages option.
+ the verbose option. The maximum number of stored messages
+ can be limited with the messages option.
:mes :messages:messages
-
-
Display previously given messages.
+
+
Display previously shown messages.
@@ -32,7 +32,7 @@
:messc :messclear:messclear
-
+
Clear the message history.
@@ -40,6 +40,7 @@
+ g<
@@ -49,34 +50,37 @@
+
+
pager more-prompt
-
+
-- More --
-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit
- This message is given when the message window is filled with messages. It is
- only given when the more option is on. It is highlighted with the MoreMsg
- group.
+ This message is displayed when the message window is filled with
+ messages and the more option is set. It is styled with
+ the MoreMsg:highlight group. When the more
+ message is shown, the following key mappings are available:
A string containing a discrete set of distinct characters
-
stringlist
A comma-separated list of strings
-
stringmap
A comma-separated list of key-value pairs, e.g., key=val,foo=bar
+
charlist
A string containing a discrete set of distinct characters
+
stringlist
A comma-separated list of strings
+
stringmap
A comma-separated list of key-value pairs, e.g., key:val,foo:bar
regexlist
-
+
A comma-separated list of regular expressions. Expressions may be
prefixed with a !, in which case the match will be negated. A
literal ! at the begining of the expression may be matched with
[!]. Generally, the first matching regular expression is used.
regexmap
-
+
A combination of a stringmap and a regexlist. Each key
- in the key=value pair is a regexp. If the regexp begins with a
- !, the sense match is negated, such that a non-matching
+ in the key:value pair is a regexp. If the regexp begins with a
+ !, the sense of the match is negated, such that a non-matching
expression will be considered a match and vice versa.
The first key to match yields value.
@@ -44,14 +53,14 @@
:set :se
- :se[t]
+ :set
-
Show all options that differ from their default value.
+
Show all options which differ from their default values.
The same as :set command, but operates on current tab options
@@ -199,18 +213,18 @@
:setglobal :setg
- :setg[lobal]
- :setg[lobal] all
- :setg[lobal] option?
- :setg[lobal] option
- :setg[lobal] nooption
- :setg[lobal] invoption
- :setg[lobal] option&
- :setg[lobal] all&
- :setg[lobal] option=value
- :setg[lobal] option+=value
- :setg[lobal] option^=value
- :setg[lobal] option-=value
+ :setglobal
+ :setglobal all
+ :setglobaloption?
+ :setglobaloption
+ :setglobal nooption
+ :setglobal invoption
+ :setglobaloption&
+ :setglobal all&
+ :setglobaloption=value
+ :setglobaloption+=value
+ :setglobaloption^=value
+ :setglobaloption-=value
The same as :set command, but operates on global options only.
@@ -219,9 +233,7 @@
-expand-environment-var expand-env :set_env
-
-
+
Environment variables are expanded for path options like cdpath and
runtimepath. The variable notation is $VAR (terminated by a non-word
character) or $VAR. %VAR% is also supported on Windows.
@@ -233,7 +245,7 @@
:prefs :preferences
- :pref[erences]
+ :preferences
Show the &dactyl.host; preferences dialog. You can change the browser
@@ -246,10 +258,10 @@
:prefs! :preferences!
- :pref[erences]!
+ :preferences!
- Opens about:config in the current tab where you can change advanced &dactyl.host;
+ Opens about:config in the current tab, where you can change advanced &dactyl.host;
preferences.
- Change any &dactyl.host; preference (those in the about:config
- window). You can also reset/delete those preferences with
+ Change any &dactyl.host; preference (those on the about:config
+ page). You can also reset/delete these preferences with
:set! preference&.
-overridden-preferences
-
-
- &dactyl.appname; sets several &dactyl.host; preferences at startup. If this is undesirable,
- they can be changed to a different value in your RC file using
- :set! preference=value
+
+ &dactyl.appname; needs to set several &dactyl.host; preferences at
+ startup in order to function properly. If this is unacceptable,
+ they can be changed in your RC file with the :set!
+ command, but beware of unexpected behavior. The affected
+ preferences are:
Define when tabs are automatically activated. Available items:
+
+ A list of items when, when opened in a new tab are
+ automatically focused. Available items are,
+
-
addons
:addo[ns] command
-
downloads
:downl[oads] command
-
extoptions
:exto[ptions] command
-
help
:h[elp] command
+
all
Activate all items.
+
addons
:addons command
+
downloads
:downloads command
+
extoptions
:extoptions command
+
help
:help command
homepage
gH mapping
quickmark
go and gn mappings
-
tabopen
:tabopen[!] command
+
tabopen
:tabopen! command
paste
P and gP mappings
-
@@ -317,13 +329,13 @@
A list of regexps defining which completion contexts should be
- autocompleted. When the value is non-empty, the completion list is
- automatically opened along with the commandline. Thereafter, any key
- press triggers a completion update for the matching contexts.
- Non-matching contexts will only be updated when the tab key is
- pressed. This option is useful for disabling autocompletion for
- computationally intense contexts that don't perform well on your
- system under load.
+ auto-completed. When the value is non-empty, the completion list
+ is automatically when the command-line is focused.
+ Thereafter, any key press triggers a completion update for the
+ matching contexts. Non-matching contexts will only be updated
+ when the key is pressed. This option is useful for
+ disabling auto-completion for computationally intensive contexts
+ that don't perform well when your system is under load.
@@ -333,17 +345,31 @@
- Completion contexts have names very much like Unix path names. This
- denotes the tree in which they're called. A completer will never be
- called unless every completer preceding it in the tree was also
- called. For example, if your completer excludes /ex/, it
- will also exclude /ex/bmarks, and so on.
+ Completion contexts have names very much like Unix path names.
+ These denotes the tree in which they're called. A completer will
+ never be called unless every completer preceding it in the tree
+ was also called. For example, if your completer excludes
+ /ex/, it will also exclude /ex/bmarks, and
+ so on.
Items which are completed at the :open prompts. Available items:
+
Items which are completed at the :open prompts. Available items are,
-
s
Search engines and keyword URLs
-
f
Local files
-
l
&dactyl.host; location bar entries (bookmarks and history sorted in an intelligent way)
-
b
Bookmarks
-
h
History
-
S
Search engine suggestions
-
t
Open tabs
+
s
Search engines and keyword URLs
+
f
Local files
+
l
&dactyl.host; location bar entries (bookmarks and history sorted in an intelligent way)
+
b
Bookmarks
+
h
History
+
S
Search engine suggestions
+
t
Open tabs
- The order is important, so :set complete=bs would list bookmarks first,
- and then any available quick searches.
+ The order is important, such that :set complete=bsf will
+ list bookmarks followed by matching quick searches and then
+ matching files.
- Using b and h can make completion very slow if there are many items.
+ Using b and h can make completion very slow if
+ there are many items.
@@ -397,21 +425,17 @@
google
- Sets the default search engine. The default search engine name is
- used in the :open [arg] command if [arg] neither
- looks like a URL nor like a specified search engine/keyword.
+ Sets the default search engine. The default search engine is
+ used by :open and related commands for arguments which
+ include no search or bookmark keywords and can't otherwise be
+ converted into URLs or existing file names.
- This means that if you set defsearch to youtube,
- then :open arnold schwarzenegger will be exactly the same as
- :open youtube arnold schwarzenegger. Therefore, you need
- to add a keyword or search engine youtube first.
-
-
-
- If defsearch is empty, then &dactyl.host; will always attempt to
- open the raw [arg].
+ This means that with defsearch set to youtube,
+ then :open Tim Minchin behaves exactly as
+ :open youtube Tim Minchin, so long as you don't have a
+ search or bookmark keyword called ‘Tim’.
@@ -425,13 +449,14 @@
Set the external text editor.
- Sets the editor to run when is pressed in Insert and TextArea
- modes.
+ This is the editor used by , gF, and other
+ commands which launch an external text editor.
- &dactyl.appname; will not behave correctly if the editor forks its own
- process, such as with gvim without the -f argument.
+ &dactyl.appname; will not behave correctly if the editor forks its
+ own process, rather than blocking until editing is complete. Gvim
+ invoked without the -f option is one such example.
@@ -446,7 +471,8 @@
Allow reading of an RC file in the current directory. This file is
- sourced in addition to, and after, your default RC file.
+ sourced after the default &dactyl.name;rc file in your
+ home directory.
@@ -455,13 +481,9 @@
'eht' 'extendedhinttags''extendedhinttags' 'eht'
+ string
- //*[@onclick or @onmouseover or @onmousedown or @onmouseup or
- @oncommand or @class='lk' or @role='link'] |
- //input[not(@type='hidden')] | //xhtml:input[not(@type='hidden')] |
- //a | //xhtml:a | //area | //xhtml:area | //iframe | //xhtml:iframe |
- //textarea | //xhtml:textarea | //button | //xhtml:button |
- //select | //xhtml:select
+ &hinttags;
The XPath string of hintable elements activated by ;.
@@ -475,7 +497,10 @@
booleanoff
-
Ring the bell when an error message is displayed.
+
+ Ring the bell when an error message is displayed. See also
+ visualbell.
+
@@ -487,8 +512,9 @@
- A list of autocommand event names which should be ignored. If the list contains
- the value all then all events are ignored.
+ A list of autocommand event names which should be ignored. If the
+ list contains the value all then all events are
+ ignored.
@@ -500,8 +526,8 @@
UTF-8
- Changes the character encoding of the current buffer. Valid only for
- the current page.
+ Changes the character encoding of the current buffer. Valid only
+ until a new page is loaded.
@@ -513,7 +539,10 @@
stringUTF-8
-
Changes the character encoding that &dactyl.appname; uses to read and write files.
+
+ Changes the character encoding that &dactyl.appname; uses to read
+ and write files.
+
@@ -538,7 +567,7 @@
number0
-
Change the behaviour of in Hints mode.
+
Changes how soon matching hints are followed in in Hints mode.
Possible values:
@@ -559,8 +588,8 @@
off
- Show the current window fullscreen. Also hide certain GUI elements like the
- statusline.
+ Show the current window full-screen. Also hide certain GUI elements, such as
+ status-line and tab bar.
Show or hide certain GUI elements like the menu or toolbar.
+
Show or hide certain GUI elements.
Supported characters:
@@ -587,9 +616,10 @@
l
Left scrollbar (l and r are mutually exclusive)
-
You can also hide the tab bar with :set showtabline=0.
+
See also showtabline.
Scrollbar changes require a page reload to take effect.
+ Only one of l or r may be included.
@@ -601,8 +631,8 @@
intro
- Name of the main help file. This is the tail component of the chrome
- URL as displayed in the status line when viewing the page.
+ Name of the main help file. This is that page shown if the
+ :help command is called without any arguments.
@@ -616,9 +646,9 @@
When generating hints for input elements that do not have an
- explicit caption, this specifies the methods to try and generate a
- textual hint. It tries the options in the order that you give, and
- uses the first that it finds.
+ explicit caption, this specifies the methods used to generate a
+ textual hint. The options are attempted in the order they are
+ given, and the first successful value is used.
Change the hint matching algorithm during Hints mode.
@@ -641,10 +671,43 @@
Possible values:
-
contains
The typed characters are split on whitespace, and these character groups have to match anywhere inside the text of the link.
-
wordstartswith
The typed characters are matched with the beginning of the first word (see wordseparators) in the link as long as possible. If no matches occur in the current word, then the matching is continued at the beginning of the next word. The words are worked through in the order they appear in the link. If the typed characters contain spaces, then the characters are split on whitespace. These character groups are then matched with the beginning of the words, beginning at the first one and continuing with the following words in the order they appear in the link.
-
firstletters
Behaves like wordstartswith, but non-matching words aren't overleaped.
-
custom
Delegate to a custom function: dactyl.plugins.customHintMatcher(hintString)
+
contains
+
+ The typed characters are split on whitespace, and
+ these character groups have to match anywhere inside
+ the text of the link.
+
+
wordstartswith
+
+ The typed characters are matched with the beginning
+ of the first word (see wordseparators) in the
+ link as long as possible. If no matches occur in the
+ current word, then the matching is continued at the
+ beginning of the next word. The words are worked
+ through in the order they appear in the link. If the
+ typed characters contain spaces, then the characters
+ are split on whitespace. These character groups are
+ then matched with the beginning of the words,
+ beginning at the first one and continuing with the
+ following words in the order they appear in the
+ link.
+
+
firstletters
+
+ Behaves like wordstartswith, but non-matching words
+ aren't overleaped.
+
+
custom
+
+ Delegate to the function
+ dactyl.plugins.customHintMatcher
+
+
transliterated
+
+ Certain alphanumeric characters are translated into their
+ unaccented equivalents, such that ‘euro’ will match 'æuró',
+ and ‘Ångström’ will match ‘angstrom’.
+
@@ -654,12 +717,7 @@
'ht' 'hinttags''hinttags' 'ht'string
- //*[@onclick or @onmouseover or @onmousedown or @onmouseup or
- @oncommand or @class='lk' or @role='link'] |
- //input[not(@type='hidden')] | //a | //area |
- //iframe | //textarea | //button | //select |
-//xhtml:input[not(@type='hidden')] | //xhtml:a | //xhtml:area |
-//xhtml:iframe | //xhtml:textarea | //xhtml:button | //xhtml:select
+ &hinttags;
XPath string of hintable elements activated by f and F
@@ -673,9 +731,9 @@
0
- Timeout before automatically following a non-unique numerical hint. Set to 0
- (the default) to only follow numeric hints after pressing or
- when the hint is unique.
+ Timeout before automatically following a non-unique numerical
+ hint. Set to 0 (the default) to only follow numeric hints after
+ pressing or when the hint is unique.
@@ -687,7 +745,10 @@
number500
-
Number of Ex commands and search patterns to store in the command-line history.
+
+ Maximum number of Ex commands and search patterns to store in the
+ command-line history.
+
@@ -701,9 +762,10 @@
Set the private browsing option. In private browsing mode
history, cache files, cookies, form data, passwords, download list
- entries, local and URL marks, command-line history and macros are
- available only for the duration of the private browsing session and
- deleted when returning to normal browsing mode.
+ entries, local and URL marks, command-line history
+ and macros are available only for the duration of the private
+ browsing session and deleted when returning to normal browsing
+ mode. See also privacy.
@@ -740,9 +802,7 @@
booleanon
-
Show where the search pattern matches as it is typed.
-
- Incremental searching currently only works in the forward direction.
+
Show the first match for a search pattern as it is typed.
@@ -757,7 +817,7 @@
Use Insert mode as the default for text areas. This is useful if you
want to use the known &dactyl.host; interface for editing text areas.
- Input fields default to this behaviour irrespective of this option's
+ Input fields default to this behavior irrespective of this option's
setting.
Determines when the last window will have a status line.
+
Determines when the status line is shown.
Possible values:
@@ -785,7 +858,7 @@
2
Always
- laststatus=1 not implemented yet.
+ laststatus=1 not implemented.
@@ -798,8 +871,10 @@
off
- Limit the search to hyperlink text. This includes (X)HTML elements
- with an href atrribute and XLink simple links.
+ Limit searches to hyperlink text. This includes all elements
+ matched by the hinttags XPath. This behavior can also be
+ enabled by including \l in the search pattern, and
+ disabled by including \L.
@@ -839,7 +914,7 @@
number100
-
Number of messages to store in the message history.
+
Maximum number of messages to store in the message history.
@@ -850,7 +925,10 @@
booleanon
-
Pause the message list window when more than one screen of listings is displayed.
+
+ Pause the message list window when more than one screen of
+ listings is displayed.
+
- Patterns to use when guessing the next page in a document
- sequence when the user hits ]]. Each pattern, in order, is
- matched against all links in the page with the first match being
- used. The patterns are case insensitive regular expressions and the
- link elements are those defined by hinttags.
+ Patterns to use when guessing the next page in a document
+ sequence after pressing the ]] key. Each pattern is
+ successively tested against each link in the page (as defined by
+ hinttags, starting with the last), and the first link to
+ match is followed.
@@ -879,21 +957,22 @@
- Define which Ex commands output the result in a new tab
- automatically. You can also use :tab command to manually
- output a command in a new tab.
+ Defines which Ex commands open pages in new tabs rather than the
+ current tab by default. This may be overridden with the
+ :tab command, and is usually inverted by affixing a
+ ! to the command in question.
-
The possible values:
+
The possible values are,
all
All commands
-
addons
:addo[ns] command
-
downloads
:downl[oads] command
-
extoptions
:exto[ptions] command
-
help
:h[elp] command
+
addons
:addons command
+
downloads
:downloads command
+
extoptions
:extoptions command
+
help
:help command
javascript
:javascript! or :js! command
-
prefs
:pref[erences]! or :prefs! command
+
prefs
:preferences! or :prefs! command
@@ -906,7 +985,10 @@
booleanon
-
Show and set the 'work offline' behavior.
+
+ Enables or disables ‘offline’ mode, where network access is
+ disabled and all web pages are loaded entirely from cache.
+
@@ -918,9 +1000,9 @@
charlistgfm
-
Desired info in the :pageinfo output.
+
Info shown in in the :pageinfo output.
-
Available items:
+
Items available by default are,
g
General info
@@ -943,26 +1025,30 @@
tab
- Define where to show requested popup windows. Does not apply to
- windows which are opened by middle clicking a link, they always open
- in a new tab.
+ Defines where to show requested pop-up windows. Applies only to
+ links which request to open in a new window. The behavior of
+ middle-, shift-, or control- clicking a link is unaffected by this
+ option.
-
Possible values:
+
Possible values are:
-
tab
Open popups in a new tab
-
window
Open popups in a new window
-
resized
Open resized popups in a new window
+
tab
Open pop-ups in a new tab
+
window
Open pop-ups in a new window
+
resized
Open resized pop-ups in a new window
- If neither tab nor window is provided, all popups open in the current tab.
- tab and window are mutually exclusive, and the last one listed is
- effective.
+ If neither tab nor window is provided, all
+ pop-ups open in the current tab. tab and window
+ are mutually exclusive, and the last one listed is effective.
- This option does not change the popup blocker of &dactyl.host; in any way.
+
+ This option does not alter the behavior pop-up blocker of
+ &dactyl.host; in any way.
+
@@ -974,11 +1060,11 @@
- Patterns to use when guessing the previous page in a document
- sequence when the user hits [[. Each pattern, in order, is
- matched against all links in the page with the first match being
- used. The patterns are case insensitive regular expressions and the
- link elements are those defined by hinttags.
+ Patterns to use when guessing the previous page in a document
+ sequence after pressing the [[ key. Each pattern is
+ successively tested against each link in the page (as defined by
+ hinttags, starting with the last), and the first link to
+ match is followed.
This will search for plugins in both
- ~/my&dactyl.name;/plugin and
- ~/.&dactyl.name;/plugin
+ ~/my&dactyl.name;/plugins and
+ ~/.&dactyl.name;/plugins
The default list of private items to sanitize. See
- :sanitize for a list and explanation of
- possible values.
+ :sanitize for a list and explanation of possible values.
Number of lines to scroll with and
- commands. The number of lines scrolled defaults to half the window
- size. When a [count] is specified to the or
- commands this is used to set the value of
- scroll and also used for the current command. The value can
- be reset to half the window height with :set scroll=0.
+ commands. The number of lines scrolled defaults to half the window
+ size. When a count is specified to the or
+ commands, that value is used instead. When the
+ value is 0, it defaults to half the window height.
@@ -1079,7 +1165,7 @@
'shell' 'sh''shell' 'sh'string
- _$SHELL_ or "sh", Win32: "cmd.exe"
+ $SHELL or sh, Win32: cmd.exe
- Show the destination of the link under the cursor in the status bar.
- Also links which are focused by keyboard commands like
- are shown.
+ When the mouse hovers over a link, or a link is otherwise focused,
+ show its destination in the status bar.
-
Possible values:
+
Possible values are:
-
0
Don't show link destination
-
1
Show the link in the status line
-
2
Show the link in the command line
+
0
Don't show link destination
+
1
Show the link's destination in the status-line
+
2
Show the link's destination in the command-line
@@ -1140,14 +1225,14 @@
number2
-
Control when to show the tab bar of opened web pages.
+
Controls when to the tab line is shown.
-
Possible values:
+
Possible values are:
-
0
Never show tab bar
-
1
Show tab bar only if more than one tab is open
-
2
Always show tab bar
+
0
Never show tab line
+
1
Show tab line only if more than one tab is open
+
2
Always show tab line
@@ -1176,16 +1261,9 @@
google
- Set the search engines which can be used for completion suggestions.
- Add S to the complete option if you want to use
- this feature.
+ Set the search engines which can be used for completion
+ suggestions when complete contains S.
-
-
- This feature could make tab-completion slower because it needs to
- wait for changes, so use it only if you have a fast internet
- connection.
-
@@ -1197,12 +1275,10 @@
&dactyl.appname;
- Change the title of the browser window. &dactyl.appname; changes the
- browser title from Title of web page - Mozilla &dactyl.host;
- to Title of web page - &dactyl.appname;. If you don't like
- that, you can restore it with:
+ Set the application name shown after the current page title in
+ &dactyl.host;'s title bar.
Show current website with a minimal style sheet to make it easily accessible.
-
- This is a local option for now, a global value may be supported in the future.
+
Show current website with minimal styling.
@@ -1228,14 +1302,12 @@
,\s
- Set the separator regex used to separate multiple URL args. Multiple
- arguments can be specified for :open, and similar commands,
- using this regex as the separator. Using whitespace alone is not
- generally useful since it is often contained in a single argument.
- E.g., :open linus torvalds should perform a single search
- for the key words linus and torvalds. If this
- is set to the empty string then these arguments will never be split.
+ The regular expression used to split URL lists in commands
+ including :open. When set to the empty string, URL lists
+ are never split. With the default value, the following will open
+ three URLs in the current tab and two new background tabs,
+ :open google Linux, wikipedia Arch Linux, imdb March of the Penguins
@@ -1247,10 +1319,11 @@
1
- Define which info messages are displayed. When bigger than zero,
- &dactyl.appname; will give messages about what it is doing. These can be
- viewed at any time with the :messages command. The highest
- value is 15, being the most verbose mode.
+ Define which info messages are displayed. As the value increases,
+ &dactyl.appname; will show more messages about its progress.
+ These can be viewed at any time with the :messages
+ command. The highest useful value is 15, being the most verbose
+ mode.
@@ -1265,13 +1338,9 @@
off
- Use visual bell instead of beeping on errors. The visual bell style is
- controlled by :hi Bell.
-
-
-
- To disable both the audible and visual bells use :set visualbell
- and :hi Bell display: none;
+ Use visual bell instead of beeping on errors. The visual bell
+ style is controlled by :highlight Bell. See also
+ errorbells.
@@ -1283,19 +1352,17 @@
smart
- Defines how completions are matched for a given completion context
- with regard to character case.
+ Defines how completions are matched with regard to character case.
+ Keys in the regexmap refer to completion context names (see
+ :contexts) for which the value applies. Possible values
+ are,
-
Possible values:
-
smart
Case is significant when capital letters are typed
match
Case is always significant
ignore
Case is never significant
-
-
See also :contexts
@@ -1306,16 +1373,16 @@
- List of file patterns to ignore when completing files. E.g., to ignore object
- files and Vim swap files
+ List of file patterns to ignore when completing files. For example,
+ the following will ignore object files and Vim swap files:
:set wildignore=\.o$,^\..*\.s[a-z]2$
- Unlike Vim each pattern is a regex rather than a glob.
+ Unlike Vim each pattern is a regular expression rather than a glob.
The only way to include a literal comma in a pattern is with the
- escape \u0044.
+ escape sequence \u0044.
@@ -1327,19 +1394,19 @@
list:full
- Defines how command-line completion works. It is a comma-separated
+ Defines how command-line completion works. It is a comma-separated
list of parts, where each part specifies what to do for each
- consecutive use of the completion key. The first part specifies the
- behavior for the first use of the completion key, the second part
- for the second use, etc.
+ consecutive press of the key. The last element in
+ the list is used for each succeeding after it has
+ been reached.
-
These are the possible values for each part:
+
These are the possible values for each part are,
Complete only the first match.
full
Complete the next full match. After the last, the original string is used.
-
longest
Complete till the longest common string.
+
longest
Complete the longest common substring of all completions.
list
When more than one match, list all matches.
list:full
When more than one match, list all matches and complete the first match.
list:longest
@@ -1361,10 +1428,10 @@
.*
- A list of regexps defining which completion contexts
- should be sorted. The main purpose of this option is to
- prevent sorting of certain completion lists that don't
- perform well under load.
+ A list of regular expressions defining which completion contexts
+ should be sorted. The main purpose of this option is to prevent
+ sorting of certain completion lists that don't perform well under
+ load.
- A regex which defines the word separators which are used for the
- hintmatching types wordstartswith and
- "firstletters" to split the words in the text of a link.
-
- Use javascript debugger service at the completion list.
- More list is shown up when it is on.
+ A regular expression which defines how words are split for the
+ the hintmatching types wordstartswith and
+ firstletters. Words are split on each occurrence of the
+ given pattern.
- &dactyl.appname; provides a Vim-like interface to &dactyl.host;'s standard text search
- functionality. There is no support for using regular expressions in search
- commands as &dactyl.host; does not provide native regex support. It is unlikely that
- this will ever be available.
+ &dactyl.appname; provides a Vim-like incremental search interface to
+ replace &dactyl.host;'s crippled Typeahead Find. Among other improvements,
+ our search service:
+
+
+
+ Starts at the cursor position in the currently selected frame, unlike
+ &dactyl.host;, which always starts at the beginning of the first frame
+ for documents with more than one frame.
+
+
+ Returns the cursor and viewport to their original position on cancel.
+
+
+ Backtracks to the first successful match after pressing backspace,
+ unlike &dactyl.host;, which will always continue from the last match..
+
+
+ Supports reverse incremental search.
+
+
+ Escape sequences to toggle link-only and case-sensitive searching.
+
+
+
+
+ Regular expression search, however, is not currently available unless the
+ /Find Bar/ service is installed, in which case it may be toggled on with
+ a search flag.
- Remove the search highlighting. The document highlighting is turned back on
- when another search command is used or the hlsearch option is set.
+ Remove the search highlighting. The document is highlighted again
+ when another search command is used or the hlsearch option
+ is set.
&dactyl.appname; can repeat a number of commands and record macros.
+
+ &dactyl.appname; can repeat commands in a number of ways, from repeating
+ the last command, to recording and playing macros, to saving its state and
+ executing scripts.
+
Single repeats
.
+ count.
- Repeat the last keyboard mapping count times. Note that, unlike in Vim, this
- does not apply solely to editing commands, mainly because &dactyl.appname; doesn't
- have them.
+ Repeat the last keyboard mapping count times. Note that,
+ unlike in Vim, this does not apply solely to editing commands,
+ mainly because &dactyl.appname; doesn't have them.
- Record a key sequence into a macro.
- Available macros are {0-9a-zA-Z} (uppercase to append).
- Type q to stop recording.
+ Record a key sequence as a macro. Available macros are
+ 0-9a-zA-Z. If the macro is an uppercase letter, the
+ recorded keys are appended to the lowercase macro of the same
+ name. Typing q again stops the recording.
@@ -58,8 +66,8 @@
:macrospat
- List recorded macros matching the optional regular expression pat. If
- no regex is given, list all macros.
+ List recorded macros matching the optional regular expression
+ pat. If no regex is given, list all macros.
- Delete recorded macros matching the regular expression args. If ! is given
- all macros are deleted.
+ Delete recorded macros matching the regular expression
+ pat. If ! is given, all macros are deleted.
- Plays the contents of macro with name argcount times. The @ mapping
- only accepts {0-9a-z} as arg.
+ Plays the contents of macro with name a-z0-9count
+ times.
- Read Ex commands, JavaScript, or CSS from file. You can either source files
- which mostly contain Ex commands like map < gt and put JavaScript code
- within a:
+ Read Ex commands, JavaScript, or CSS from file. Files are
+ interperated based on their extensions. Files when end in
+ .js are executed as JavaScript, while those ending in
+ .css are loaded as Cascading Stylesheets, and anything
+ else is interperated as Ex commands. In normal cases, any errors
+ generated by the execution or non-existence of file are
+ printed to the command-line area. When ! is
+ provided, these are suppressed.
-
+ Environment variables in file are expanded to their current
+ value, and the prefix ~ is replaced with the value of
+ $HOME. See expand-env and initialization
+ for more information.
+
+
+
Cascading Stylesheets
+
+
+ When a CSS file is sourced, its contents are applied to every web
+ page and every chrome document, including all browser windows and
+ dialogs. If the same file is sourced more than once, its previous
+ rules are cleared before it is applied again. Rules can be
+ restricted to specific documents by enclosing them
+ @-moz-document
+ blocks.
+
+
+
JavaScript
+
+
+ JavaScript files are executed with full chrome privileges in their
+ own global namespaces. These namespaces are stored as objects in
+ the plugins object, in the property named for the full
+ path of the sourced file. This means that any variables or
+ functions created by your script are stored as properties of that
+ object. Additionally, all properties of the global window
+ and modules objects are accessible to your script as
+ global variables.
+
+
+
+ Files in ~/.&dactyl.name;/plugins may additionally be
+ accessed in plugins.filename where filename
+ is the last component of the file's path stripped of any
+ extensions, with all hyphens stripped and any letter following a
+ hyphen capitalized. So, the file
+ ~/.&dactyl.name;/plugins/foo-bar.js may be accessed as
+ plugins.fooBar. See also writing-plugins
+
+
+
Ex commands
+
+
+ Ex command files are executed as if each line were entered into
+ the command-line individually. Additionally, certain
+ commands support the same ‘here document’ syntax supported by most
+ Unix shells and by the command-line. So, to execute a
+ JavaScript statement which does not comfortably fit on a single
+ line, you can use,
+
- Or you can alternatively source a file which ends in .js. These files are
- automatically sourced as pure JavaScript files.
-
-
-
- Note: In both cases you must add functions to the global window object like
- shown above, functions written as:
-
-
-
-
are only available within the scope of the script.
-
-
- The .&dactyl.name;rc file in your home directory and any
- files in ~/.&dactyl.name;/plugin/ are always
- sourced at startup. ~ is supported as a
- shortcut for the $HOME directory. If ! is
- specified, errors are not printed.
-
+EOF:lpl :loadplugins
+ :loadplugins
- Load all unloaded plugins immediately. Because plugins are automatically
- loaded after &dactyl.name;rc is sourced, this command must be placed early
- in the &dactyl.name;rc file if &dactyl.name;rc also includes commands that are
- implemented by plugins. Additionally, this command allows for sourcing
- new plugins without restarting &dactyl.appname;.
+ Immediately load all plugins which have yet to be loaded. Because
+ plugins are not automatically loaded until after &dactyl.name;rc
+ is sourced, this command must be placed early in the
+ &dactyl.name;rc file if &dactyl.name;rc uses commands or options
+ which are defined by plugins. Additionally, this command allows
+ newly installed plugins to be easily loaded without restarting
+ &dactyl.appname;.
@@ -169,13 +211,12 @@ function hello2() {
:runtime!file …
- Source the specified file from each directory in runtimepath. Example:
-
- :runtime plugin/foobar.vimp
-
- Only the first found file is sourced. When ! is given, all found files are
- sourced.
+ Source the specified file from the first directory in
+ runtimepath in which it exists. When ! is given,
+ source the specified from all directories in runtimepath in
+ which it exists.
- Stop sourcing a script file. This can only be called from within a &dactyl.appname;
- script file.
+ Stop sourcing a script file. This can only be called from within a
+ &dactyl.appname; script file.
@@ -208,16 +250,17 @@ function hello2() {
:counttime!code|:command
- Profile a piece of code or a command. Run codecount times (default: 1)
- and returns the elapsed time. code is always passed to JavaScript's eval(),
- which might be slow, so take the results with a grain of salt.
+ Profile a piece of JavaScript code or an Ex command. Run
+ codecount times and print the elapsed time.
+ If code begins with a :, it is executed as an Ex
+ command. Otherwise, it is executed as JavaScript, in which case it
+ is evaluated only once and stored as a function which is executed
+ count times.
-
If code starts with a :, it is executed as a &dactyl.appname; command.
-
- Use the special version with ! if you just want to run any command multiple
- times without showing profiling statistics.
+ When ! is given, code is executed count
+ times, but no statistics are printed.
Command-line options can be passed to &dactyl.appname; via the -&dactyl.name; &dactyl.host;
@@ -75,48 +75,64 @@
At startup, &dactyl.appname; completes the following tasks in order.
-
&dactyl.appname; can perform user initialization commands. When
- one of the following is successfully located, it is executed,
- and no further locations are tried.
+
+
+ &dactyl.appname; first searches for user initialization commands in
+ the following locations. The first of these to be found is executed,
+ after which no further locations are searched.
+
- $&dactyl.idname;_INIT — May contain a single Ex command (e.g.,
- ":source file").
+ $&dactyl.idname;_INIT
+
+ May contain a single Ex command (e.g., ":source file").
- ~/&dactyl.name;rc — Windows only. If this file exists, its contents
+ ~/&dactyl.name;rc
+
+ Windows only. If this file exists, its contents
are executed and $MY_&dactyl.idname;RC set to its path.
- ~/.&dactyl.name;rc — If this file exists, its contents are executed.
+ ~/.&dactyl.name;rc
+
+ If this file exists, its contents are executed.
- If exrc is set and the +u command-line option was not
- specified, then any RC file in the current directory is also
- sourced.
+
+ If exrc is set and the +u command-line option was not
+ specified, then any RC file in the current directory is also
+ sourced.
+
- All directories in runtimepath are searched for a
- "plugin" subdirectory and all yet unloaded plugins are loaded.
- For each plugin directory, all *.{js,vimp} files (including
- those in further subdirectories) are sourced alphabetically. No
- plugins will be sourced if:
+
+ All directories in runtimepath are searched for a
+ ‘plugins’ subdirectory and all yet unloaded plugins are loaded.
+ For each plugins directory, all *.{js,vimp} files (including
+ those in further subdirectories) are sourced alphabetically. No
+ plugins will be sourced if,
+
-
noloadplugins is set.
-
the ++noplugin command-line option was specified.
-
the +u=NONE command-line option specified set.
+
noloadplugins is set,
+
the ++noplugin command-line option was specified, or
+
the +u=NONE command-line option was specified.
- Any particular plugin will not be loaded if it has already been
- loaded (e.g., by an earlier :loadplugins command).
+
+ Any plugin which was already loaded (e.g., by an earlier
+ invocation of the :loadplugins command) will be skipped.
+
-The user's ~ (i.e., "home") directory is determined as follows:
+
+ The user's home directory is determined as follows:
+
On Unix and Mac, the environment variable $HOME is used.
@@ -141,10 +157,10 @@ The user's ~ (i.e., "home") directory is determined as follows:
file if it exists.
-
- Warning: this differs from Vim's behavior which defaults to writing the file
- in the current directory.
-
+
+ This behavior differs differs from that of Vim, which defaults to
+ writing the file in the current directory.
+
diff --git a/common/locale/en-US/styling.xml b/common/locale/en-US/styling.xml
index a442114c..401aaa5c 100644
--- a/common/locale/en-US/styling.xml
+++ b/common/locale/en-US/styling.xml
@@ -6,16 +6,17 @@
+ xmlns="&xmlns.dactyl;"
+ xmlns:html="&xmlns.html;">
Styling the GUI and web pages
- &dactyl.appname; allows you to style both the browser and any web pages you view. All
- styling is specified via CSS. Although you may style any user interface element
- via the :style command, most &dactyl.appname; elements can be styled with the
- :highlight command, for convenience.
+ &dactyl.appname; allows you to apply custom CSS styling to the web pages
+ you view as well as to the browser itself. Although it is possible to
+ style any user interface element via the :style command, most
+ &dactyl.appname; elements can be styled more easily by means of the
+ more specialized :highlight command.
@@ -24,7 +25,7 @@
Load a color scheme. name is found by searching the runtimepath for the
- first file matching colors/name.vimp.
+ first file matching colors/name.vimp.
- Highlight group with css. css is one or more comma separated CSS
- declarations (E.g. color: blue; background-color: red). Normally, css is
- checked for valid syntax before it's applied. Once you're certain it's valid,
- ! can be used to skip the check to speed up &dactyl.appname; startup. selector
- can be any valid CSS selector, such as :hover, and, if provided, will
- restrict the match to matching elements.
+ Highlight group with css. css is one or more
+ semicolon-separated CSS declarations (E.g. color: blue;
+ background-color: red). selector, if provided, may
+ be any valid CSS selector (such as :hover or
+ [href]), and will restrict the highlighting to matching
+ elements.
-
Valid groups are:
+
Valid groups include:
Bell
&dactyl.appname;'s visual bell
Boolean
A JavaScript Boolean object
CmdLine
The command line
-
CmdOutput
+
CmdOutput
The output of commands executed by :run
CompDesc
The description column of the completion list
-
CompGroup
+
CompGroup
The top-level container for a group of completion results
CompIcon
The favicon of a completion row
CompItem
A row of completion list
-
CompItem[selected]
A selected row of completion list
-
CompLess
The indicator shown when completions may be scrolled up
+
CompItem[selected]
A selected row of completion list
CompLess::after
The character of indicator shown when completions may be scrolled up
-
CompMore
The indicator shown when completions may be scrolled down
+
CompLess
The indicator shown when completions may be scrolled up
CompMore::after
The character of indicator shown when completions may be scrolled down
-
CompMsg
+
CompMore
The indicator shown when completions may be scrolled down
+
CompMsg
The message which may appear at the top of a group of completion results
CompResult
The result column of the completion list
CompTitle
Completion row titles
+
Disabled
Text indicating disabled status, such as of an extension or style group
+
Enabled
Text indicating enabled status, such as of an extension or style group
ErrorMsg
Error messages
Filter
The matching text in a completion list
FrameIndicator
The indicator shown when a new frame is selected
Function
A JavaScript Function object
-
Gradient
-
GradientLeft
-
GradientRight
+
Gradient
The gradient dividers used in the completion lists
+
GradientLeft
The color to the left of the Gradient
+
GradientRight
The color to the right of the Gradient
Hint
A hint indicator. See :help hints
HintActive
The hint element of link which will be followed by
HintElem
The hintable element
HintImage
The indicator which floats above hinted images
-
Indicator
+
Indicator
The # and % in the :buffers list
InfoMsg
Information messages
+
Key
Generally a keyword used in syntax highlighting.
Keyword
A bookmark keyword for a URL
LineNr
The line number of an error
-
Message
+
Message
A message as displayed in :messages
ModeMsg
The mode indicator in the command line
MoreMsg
The indicator that there is more text to view
-
NonText
+
NonText
The ~ indicators which mark blank lines in the completion list
Normal
Normal text in the command line
Null
A JavaScript Null object
Number
A JavaScript Number object
Object
A JavaScript Object
-
Preview
+
Preview
The completion preview displayed in the command-line
Question
A prompt for a decision
Search
Highlighted search results in a web page
StatusLine
The status bar
StatusLineBroken
The status bar for a broken web page
+
StatusLineExtended
The status bar for a secure web page with an Extended Validation (EV) certificate
StatusLineSecure
The status bar for a secure web page
-
StatusLineExtended
The status bar for a secure web page with an Extended Validation(EV) certificate
String
A JavaScript String object
TabClose
The close button of a browser tab
TabIcon
The icon of a browser tab
@@ -110,10 +115,17 @@
- Every invocation completely replaces the styling of any previous invocation,
- unless -append (short option: -a) is provided, in which case css is
- appended to its current value. If css is not provided, any styles matching
- group are listed, or all styles if no group provided.
+ The help system also has a comprehensive set of styling groups
+ which are not explained here, but many of which are described
+ along with writing-docs.
+
+
+
+ Every invocation completely replaces the styling of any previous
+ invocation, unless -append (short option: -a) is
+ provided, in which case css is appended to its current
+ value. If css is not provided, any styles beginning with
+ group are listed.
- Reset the highlighting for group to its default value. If
- group is not given, reset all highlighting groups.
+ Reset the highlighting for group to its default value. If
+ group is not given, reset all highlighting groups.
Add CSS styles to the browser or to web pages. filter is a comma separated
list of URLs to match. URLs ending with * are matched as prefixes, URLs not
- containing any : or / characters are matched as domains. css is a full
+ containing any : or / characters are matched as domains. css is a full
CSS rule set (e.g., body { color: blue; }).
If name (short option: -n) is provided, any existing style with the same
name is overridden, and the style may later be deleted using name. If
- -append (short option: -a) is provided along with -name, css and
+ -append (short option: -a) is provided along with -name, css and
filter are appended to its current value.
-
If css isn't provided, matching styles are listed.
+
If css isn't provided, matching styles are listed.
- Delete any matching styles. If filter is provided, only matching elements of
- the filter are disabled. For instance, a filter mozilla.org, given a
- style for www.google.com,mozilla.org, will result in a style for
- www.google.com. The available options are:
+ Delete any matching styles. If filter is provided, only
+ matching elements of the filter are disabled. For instance, when
+ run with a filter mozilla.org, an existing style with a
+ filter www.google.com,mozilla.org, will result in a
+ style for www.google.com.
-
-
-name: The name provided to :style (short option: -n)
-
-index: For unnamed styles, the index listed by :style
- (short option: -i)
-
+
The available options are:
+
+
+
-name
The name provided to :style (short option: -n)
+
-index
For unnamed styles, the index listed by :style
+ (short option: -i)
- Tabs are used to be able to view many web pages at the same time. Each tab
- contains exactly one buffer—multiple buffers per tab are not supported. As a
- result many buffer and tab commands are interchangeable.
+ Tabs allow you to keep many web pages open at the same time and to quickly
+ switch between them. Each tab contains exactly one buffer. If your version
+ of &dactyl.host; supports tab groups, only buffers in the active group
+ will be attached to visible tabs. Though all buffers may not always be
+ attached to visible tabs, they are all always accessible via the
+ buffer-centric commands and key bindings. Tab-centric commands and key
+ bindings, however, only operate on the set of visible tabs.
+
+
+
+
Listing tabs
@@ -25,15 +33,16 @@
B
- Show a list of buffers (=tabs) matching filter. Without filter
- list all tabs.
+ Show a list of buffers matching filter. Buffers are
+ listed according to their tab groups, whether they are visible or
+ not.
A buffer may be marked with one of the following indicators:
- Execute cmd and tell it to output in a new tab. Works only for commands that
- support it, currently:
+ Execute cmd, but open any new pages in a new tab rather
+ than the currently focused tab.
- Execute cmd and tell it to output in a new window. See :tab for the
- list of supported commands.
+ Execute cmd, but open any new pages in a new window rather
+ than the currently focused tab.
@@ -89,20 +90,22 @@
:counttabduplicate
- Duplicate the current tab and switch to the duplicate. If count is given,
- duplicate the tab count times.
+ Duplicate the current tab and focus the duplicate. If
+ count is given, duplicate the tab count times.
-
-See opening for other ways to open new tabs.
+
+ See opening for other ways to open new tabs.
+
Changing tabs
gb
+ countgb
@@ -115,11 +118,11 @@ See opening for other ways to open new tabs.
gB
+ countgB
- Repeat last :buffer! command in reverse direction. Just like gb
- but in the other direction.
+ Repeat last :buffer! command in the reverse direction.
@@ -127,10 +130,11 @@ See opening for other ways to open new tabs.
gt
+ countgt
- Go to the next tab. Cycles to the first tab when the last is selected. +
+ Go to the next tab. Cycles to the first tab when the last is selected.
If count is specified go to the countth tab.
@@ -139,10 +143,11 @@ See opening for other ways to open new tabs.
]]>
+ count<C-n>
- Go to the next tab. Cycles to the first tab when the last is selected. +
+ Go to the next tab. Cycles to the first tab when the last is selected.
If count is specified go to the countth next tab.
@@ -151,10 +156,11 @@ See opening for other ways to open new tabs.
gT]]>
+ countgT
- Go to the previous tab. Cycles to the last tab when the first is selected. +
+ Go to the previous tab. Cycles to the last tab when the first is selected.
If count is specified go to the countth previous tab.
@@ -162,9 +168,11 @@ See opening for other ways to open new tabs.
- :bn :bnext :tn :tnext :tabn :tabnext
+ :tabn :tabnext:counttabnextcount
+ :tn :tnext:counttnextcount
+ :bn :bnext:countbnextcount
@@ -176,12 +184,14 @@ See opening for other ways to open new tabs.
- :bN :bNext :bp :bprevious :tN :tNext :tabN :tabNext :tp :tprevious :tabp :tabprevious
- :counttabpreviouscount
- :counttpreviouscount
- :counttabNextcount
+ :bN :bNext :bp :bprevious:countbpreviouscount:countbNextcount
+ :tN :tNext :tabN :tabNext
+ :counttabNextcount
+ :tp :tprevious :tabp :tabprevious
+ :counttabpreviouscount
+ :counttpreviouscount
Switch to the previous tab or go count tabs back. Wraps around from the
@@ -209,8 +219,10 @@ See opening for other ways to open new tabs.
countb
- Go to the specified buffer from the buffer list. Argument can be either the
- buffer index or the full URL. If count is given, go to the countth buffer.
+ Go to the specified buffer from the buffer list. Argument can be
+ either the buffer index or the full URL opened in an existing
+ buffer. If count is given, go to the countth
+ buffer.
@@ -228,13 +240,17 @@ See opening for other ways to open new tabs.
- g^ g0 :bf :bfirst :br :brewind :tabfir :tabfirst :tabr :tabrewind
- :tabrewind
- :tabfirst
- :brewind
- :bfirst
+ g^ g0g0g^
+
+ :bf :bfirst :br :brewind
+ :brewind
+ :bfirst
+
+ :tabfir :tabfirst :tabr :tabrewind
+ :tabrewind
+ :tabfirst
Switch to the first tab.
@@ -254,12 +270,13 @@ See opening for other ways to open new tabs.
:tabde :tabdetach
+ :tabdetach
- Detach the current tab, and open it in its own window. As each window must
- contain at least one tab it is not possible to detach the only tab in a window.
- Use :tabduplicate to copy the tab then call :tabdetach.
+ Detach the current tab, and open it in its own window. As each
+ window must contain at least one buffer, it is not possible to detach
+ the last buffer in a window.
@@ -267,13 +284,14 @@ See opening for other ways to open new tabs.
:taba :tabattach
- :tabattachwindow-indextab-index
+ :tabattachwindow-indexbuffer-index
- Attach the current tab to another window. {window-index} is an index into the
- list of open windows and tab-index is the index at which to insert the
- tab in the other window's tab list. If this is the last tab in a window, the
- window will be closed.
+ Attach the current tab to another window. window-index is
+ an index into the list of open windows and buffer-index
+ is the index at which to insert the tab in the other window's
+ buffer list. If this is the last buffer in a window, the window
+ will be closed.
@@ -289,7 +307,7 @@ See opening for other ways to open new tabs.
Move the current tab to a position after tab N. When N is 0, the
current tab is made the first one. Without N the current tab is made the
- last one. N can also be prefixed with "+" or "-" to indicate a relative
+ last one. N can also be prefixed with ‘+’ or ‘-’ to indicate a relative
movement. If ! is specified the movement wraps around the start or end of the
tab list.
@@ -301,19 +319,21 @@ See opening for other ways to open new tabs.
- Delete current buffer (=tab). If count is specified then count tabs are
- removed. Afterwards, the tab to the right of the deleted tab(s) is selected.
+ Delete current buffer. If count is specified then count tabs are
+ removed. Afterwards, the tab to the right of the deleted tabs is selected.
When used with arg, remove all tabs which contain arg in the
- hostname. ! forces this command to also search for arg in the full
- URL and also the title of the tab. Use with care.
+ currently opened hostname. With !, remove all tabs for which
+ the currently opened page's URL or title contains arg.
@@ -322,8 +342,8 @@ See opening for other ways to open new tabs.
DcountD
-
-
Like d but selects the tab to the left of the deleted tab.
+
+
Like d but selects the tab to the left of the deleted tabs after deletion..
@@ -331,8 +351,8 @@ See opening for other ways to open new tabs.
:tabo :tabonly:tabonly
-
-
Close all other tabs.
+
+
Close all buffers other than the currently visible tab.
@@ -343,8 +363,9 @@ See opening for other ways to open new tabs.
countu
- Undo closing of a tab. If a count is given, don't undo the last but the
- countth last closed tab. With url restores the tab matching the URL.
+ Restore a closed tab. If a count is given, restore the
+ countth closed tab. With url, restores most
+ recently closed tab with a matching URL.
@@ -353,11 +374,8 @@ See opening for other ways to open new tabs.
:undoa :undoall:undoall
-
-
- Undo closing of all closed tabs. &dactyl.host; stores up to 10 closed tabs, even
- after a browser restart.
-
+
+
Restore all closed tabs in the closed tabs list.
@@ -370,8 +388,9 @@ See opening for other ways to open new tabs.
:tabdocmd
- Execute cmd in each tab. cmd is executed in each tab starting with the
- first and ending with the last which becomes the current tab.
+ Execute cmd once in each buffer. Each buffer is focused, in
+ turn, and cmd is executed therein. The last buffer remains
+ focused after execution.
Play a system beep. This should not be used for any purpose other
- than testing the visual bell.
+ than testing the visual bell or annoying your co-workers.
@@ -31,12 +32,13 @@
Lists the completion contexts used during the completion of its
- arguments. These context names are used in options such as
- autocomplete and wildcase. Note that completion must
- be triggered in order for this command to be effective, so if
- autocompletion is not active, you'll need to press the
- key at least once. You should also be aware that
- this command is only useful from the commandline.
+ arguments. These context names may used to tune the function of
+ the completion system via options like autocomplete and
+ wildcase. Note that completion must be triggered in order
+ for this command to be effective, so if autocompletion is not
+ active, you'll need to press the key at least
+ once. You should also be aware that this command is only useful
+ from the commandline.
- Execute Normal mode commands commands. This makes it possible to execute
- Normal mode commands typed on the command line. commands is executed like it
- is typed. If the ! is given, mappings will not be used. commands should be
- a complete command. commands cannot start with a space. Put 1 space before
- it, 1 space is one space.
+ Execute key mappings for keys as if they were typed in
+ Normal mode. If ! is provided, only builtin key mappings
+ are executed. This makes it possible to fake Normal mode key
+ presses from scripts, key mappings, autocommands, and the command
+ line.
- Run a command. Runs cmd through system() and displays its output. Any '!' in
- cmd is replaced with the previous external command, but not when there is a
- backslash before the '!', then the backslash is removed.
-
-
-
- Warning: Input redirection (< foo) not done, also do not run commands which
- require stdin or it will hang &dactyl.host;! It is possible to launch background
- processes, though (e.g. :! xterm &).
+ Run an extenral command command. Runs cmd through system()
+ and displays its output. Any ‘!’ in cmd is replaced with
+ the previous external command, so long as it is not preceded by a
+ backslash and banghist is enabled.
- Execute a command silently. Normal messages and error messages generated by the
- command invocation will not be given and will not be added to the message
- history.
+ Execute a command silently. Normal messages and error messages
+ generated by the command invocation will not be displayed and will
+ not be added to the message history.
- Execute a command with verbose set to count. If count is not specified
- then 1 is used as the value.
+ Execute a command with verbose set to count. If
+ count is not specified then 1 is used.
@@ -121,11 +120,12 @@
:ve :version
+ :version!
- Show version information. You can show the &dactyl.host; version page with
- :version!.
+ Print &dactyl.appname; and &dactyl.host; version information. When
+ ! is provided, show the &dactyl.host; version page.
@@ -134,19 +134,20 @@
Part of &dactyl.appname;'s user efficiency comes at the cost of storing a
- lot of potentially private data, including command-line history, page
- marks, and the like. Because we know that keeping a detailed trail of all
- of your activities isn't always welcome, &dactyl.appname; provides
- comprehensive facilities for erasing potentially sensitive data.
+ lot of potentially private data, including command-line history, page
+ marks, visited page history, and the like. Because we know that keeping a
+ detailed trail of all of your activities isn't always welcome,
+ &dactyl.appname; provides comprehensive facilities for erasing potentially
+ sensitive data.
&dactyl.appname; fully supports &dactyl.host;'s private browsing mode.
- When in private browsing mode, no other than Bookmarks and QuickMarks are
- written to disk. Further, upon exiting private mode, all new data,
- including command-line history, local and URL marks, and macros, are
- purged. For more information, see private.
+ When in private browsing mode, no data other than Bookmarks and QuickMarks
+ are written to disk. Further, upon exiting private mode, all new data,
+ including command-line history, local and URL marks, and macros,
+ are purged. For more information, see private.
@@ -157,7 +158,7 @@
&dactyl.host;'s own sanitization facility, and so automatically clears any
domain data and session history when requested. Further, &dactyl.appname;
provides its own more granular sanitization facility, which allows, e.g.,
- clearing the command-line and macro history for the past ten minutes.
+ clearing only the command-line and macro history for the past ten minutes.
@@ -242,9 +243,10 @@
<F1>
- Open the help page. The default page, as specified by helpfile is shown
- unless subject is specified. If you need help for a specific topic, try
- :help overview.
+ Open a help page for subject. If subject is
+ omitted, open the default pate as specified in helpfile.
+ If you're not sure of the exact topic you need help with, try
+ completion or :help overview.
@@ -300,22 +302,23 @@
42
-What is the meaning of life, the universe and everything?
-Douglas Adams, the only person who knew what this question really was about is
-now dead, unfortunately. So now you might wonder what the meaning of death
-is…
+
+ What is the meaning of life, the universe and everything? Douglas Adams,
+ the only person who knew what this question really was about is now dead,
+ unfortunately. So now you might wonder what the meaning of death is...
+
Uncategorized help
]]>
+ <Esc>
- Focus content. Exits Command-line or Hints mode and returns to Normal
- mode. Also focuses the web page in case a form field has focus and eats
- our key presses.
+ Exits command-line, Insert, or Hints mode and returns to
+ Normal mode. Focuses the content web page.
@@ -323,12 +326,13 @@ is…
i]]>
+ i
- Start caret mode. This mode resembles the Vim's Normal mode where you see a
- text cursor and can move around. If you want to select text in this mode, press
- v to start its Visual mode.
+ Start Caret mode. This mode resembles the Vim's Normal mode where
+ the text cursor is visible on the web page. The v key
+ enters visual mode, where text is selected as the cursor moves.
;
//
},
diff --git a/common/modules/util.jsm b/common/modules/util.jsm
index bc61078e..0675af2d 100644
--- a/common/modules/util.jsm
+++ b/common/modules/util.jsm
@@ -1,6 +1,6 @@
// Copyright (c) 2006-2008 by Martin Stubenschrott
// Copyright (c) 2007-2009 by Doug Kearns
-// Copyright (c) 2008-2009 by Kris Maglione
+// Copyright (c) 2008-2010 by Kris Maglione
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
@@ -10,7 +10,7 @@ Components.utils.import("resource://dactyl/base.jsm");
defmodule("util", this, {
exports: ["Math", "NS", "Util", "XHTML", "XUL", "util"],
require: ["services"],
- use: ["template"]
+ use: ["highlight", "template"]
});
const XHTML = Namespace("html", "http://www.w3.org/1999/xhtml");
@@ -206,7 +206,7 @@ const Util = Module("Util", {
function rec(acc) {
if (acc.length == patterns.length)
res.push(array(substrings).zip(acc).flatten().join(""));
- else
+ else
for (let [, pattern] in Iterator(patterns[acc.length]))
rec(acc.concat(pattern));
}
@@ -295,12 +295,12 @@ const Util = Module("Util", {
null
);
- return {
- __proto__: result,
- __iterator__: asIterator
- ? function () { let elem; while ((elem = this.iterateNext())) yield elem; }
- : function () { for (let i = 0; i < this.snapshotLength; i++) yield this.snapshotItem(i); }
- }
+ return Object.create(result, {
+ __iterator__: {
+ value: asIterator ? function () { let elem; while ((elem = this.iterateNext())) yield elem; }
+ : function () { for (let i = 0; i < this.snapshotLength; i++) yield this.snapshotItem(i); }
+ }
+ });
},
extend: function extend(dest) {
@@ -388,18 +388,17 @@ const Util = Module("Util", {
try {
let xmlhttp = services.create("xmlhttp");
xmlhttp.mozBackgroundRequest = true;
- if (callback) {
+ if (callback)
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4)
callback(xmlhttp);
};
- }
xmlhttp.open("GET", url, !!callback);
xmlhttp.send(null);
return xmlhttp;
}
catch (e) {
- util.dactyl.log("Error opening " + String.quote(url) + ": " + e, 1);
+ util.dactyl.log("Error opening " + String.quote(url) + ": " + e, 1);
return null;
}
},
@@ -460,9 +459,9 @@ const Util = Module("Util", {
* @returns {string}
*/
makeXPath: function makeXPath(nodes) {
- return util.Array(nodes).map(util.debrace).flatten()
- .map(function (node) [node, "xhtml:" + node]).flatten()
- .map(function (node) "//" + node).join(" | ");
+ return array(nodes).map(util.debrace).flatten()
+ .map(function (node) [node, "xhtml:" + node]).flatten()
+ .map(function (node) "//" + node).join(" | ");
},
/**
@@ -480,18 +479,6 @@ const Util = Module("Util", {
return ary;
},
- /**
- * Memoize the lookup of a property in an object.
- *
- * @param {object} obj The object to alter.
- * @param {string} key The name of the property to memoize.
- * @param {function} getter A function of zero to two arguments which
- * will return the property's value. obj is
- * passed as the first argument, key as the
- * second.
- */
- memoize: memoize,
-
newThread: function () services.get("threadManager").newThread(0),
/**
@@ -524,34 +511,47 @@ const Util = Module("Util", {
if (object === null)
return "null\n";
- if (typeof object != "object")
+ if (typeof object !== "object")
return false;
- const NAMESPACES = util.Array.toObject([
- [NS, 'dactyl'],
- [XHTML, 'html'],
- [XUL, 'xul']
- ]);
if (object instanceof Ci.nsIDOMElement) {
+ const NAMESPACES = array.toObject([
+ [NS, "dactyl"],
+ [XHTML, "html"],
+ [XUL, "xul"]
+ ]);
let elem = object;
if (elem.nodeType == elem.TEXT_NODE)
return elem.data;
+
function namespaced(node) {
- var ns = NAMESPACES[node.namespaceURI];
- if (ns)
- return ns + ":" + node.localName;
- return node.localName.toLowerCase();
+ var ns = NAMESPACES[node.namespaceURI] || /^(?:(.*?):)?/.exec(node.name)[0];
+ if (!ns)
+ return node.localName;
+ if (color)
+ return <>{ns}{node.localName}>
+ return ns + ":" + node.localName;
}
try {
+ let hasChildren = elem.firstChild && (!/^\s*$/.test(elem.firstChild) || elem.firstChild.nextSibling)
+ if (color)
+ return <{
+ namespaced(elem)} {
+ template.map(array.itervalues(elem.attributes),
+ function (attr)
+ {namespaced(attr)} +
+ {attr.value},
+ <> >)
+ }{ hasChildren ? "/>" : ">"
+ }{ !hasChildren ? "" :
+ <>...> +
+ <{namespaced(elem)}>
+ };
+
let tag = "<" + [namespaced(elem)].concat(
[namespaced(a) + "=" + template.highlight(a.value, true)
- for ([i, a] in util.Array.iteritems(elem.attributes))]).join(" ");
-
- if (!elem.firstChild || /^\s*$/.test(elem.firstChild) && !elem.firstChild.nextSibling)
- tag += '/>';
- else
- tag += '>...' + namespaced(elem) + '>';
- return tag;
+ for ([i, a] in array.iteritems(elem.attributes))]).join(" ");
+ return tag + (hasChildren ? "/>" : ">..." + namespaced(elem) + ">");
}
catch (e) {
return {}.toString.call(elem);
@@ -562,13 +562,15 @@ const Util = Module("Util", {
var obj = String(object);
}
catch (e) {
- obj = "[Object]";
+ obj = Object.prototype.toString.call(obj);
}
obj = template.highlightFilter(util.clip(obj, 150), "\n", !color ? function () "^J" : function () ^J);
- let string = <>{obj}::
>;
+ let string = <>{obj}::
>;
let keys = [];
- try { // window.content often does not want to be queried with "var i in object"
+
+ // window.content often does not want to be queried with "var i in object"
+ try {
let hasValue = !("__iterator__" in object || isinstance(object, ["Generator", "Iterator"]));
if (object.dactyl && object.modules && object.modules.modules == object.modules) {
object = Iterator(object);
@@ -593,7 +595,7 @@ const Util = Module("Util", {
i = parseInt(i);
else if (/^[A-Z_]+$/.test(i))
i = "";
- keys.push([i, <>{key}{noVal ? "" : <>: {value}>}
>]);
+ keys.push([i, <>{key}{noVal ? "" : <>: {value}>}
>]);
}
}
catch (e) {}
@@ -672,7 +674,6 @@ const Util = Module("Util", {
selectionController: function (win)
win.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShell)
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsISelectionDisplay)
.QueryInterface(Ci.nsISelectionController),
@@ -714,6 +715,7 @@ const Util = Module("Util", {
* string.
*
* util.split("a, b, c, d, e", /, /, 3) -> ["a", "b", "c, d, e"]
+ *
* @param {string} str The string to split.
* @param {RegExp|string} re The regular expression on which to split the string.
* @param {number} limit The maximum number of elements to return.
@@ -775,7 +777,9 @@ const Util = Module("Util", {
},
/**
- * Converts an E4X XML literal to a DOM node.
+ * Converts an E4X XML literal to a DOM node. Any attribute named
+ * highlight is present, it is transformed into dactyl:highlight,
+ * and the named highlight groups are guaranteed to be loaded.
*
* @param {Node} node
* @param {Document} doc
@@ -797,7 +801,14 @@ const Util = Module("Util", {
case "element":
let domnode = doc.createElementNS(node.namespace(), node.localName());
for each (let attr in node.@*)
- domnode.setAttributeNS(attr.name() == "highlight" ? NS.uri : attr.namespace(), attr.name(), String(attr));
+ if (attr.name() != "highlight")
+ domnode.setAttributeNS(attr.namespace(), attr.name(), String(attr));
+ else {
+ domnode.setAttributeNS(NS.uri, "highlight", String(attr));
+ for each (let h in String.split(attr, " "))
+ highlight.loaded[h] = true;
+ }
+
for each (let child in node.*)
domnode.appendChild(xmlToDom(child, doc, nodes));
if (nodes && node.@key)
@@ -816,9 +827,7 @@ const Util = Module("Util", {
* @singleton
*/
const GlobalMath = Math;
-var Math = {
- __proto__: GlobalMath,
-
+var Math = update(Object.create(GlobalMath), {
/**
* Returns the specified value constrained to the range min -
* max.
@@ -829,9 +838,9 @@ var Math = {
* @returns {number}
*/
constrain: function constrain(value, min, max) Math.min(Math.max(min, value), max)
-};
+});
-// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n");}
+// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack);}
endmodule();
diff --git a/common/skin/dactyl.css b/common/skin/dactyl.css
index b7213f3e..40b6fd7f 100644
--- a/common/skin/dactyl.css
+++ b/common/skin/dactyl.css
@@ -156,8 +156,6 @@ statusbarpanel {
margin: 0px;
}
-#dactyl-completions-content *,
-#dactyl-multiline-output-content *,
#dactyl-commandline-prompt *,
#dactyl-commandline-command {
font: inherit;
diff --git a/muttator/chrome.manifest b/muttator/chrome.manifest
deleted file mode 100644
index 15f308fb..00000000
--- a/muttator/chrome.manifest
+++ /dev/null
@@ -1,18 +0,0 @@
-# Thunderbird
-content muttator content/
-skin muttator classic/1.0 skin/
-locale dactyl en-US locale/en-US/
-
-content dactyl ../common/content/
-resource dactyl ../common/modules/
-skin dactyl classic/1.0 ../common/skin/
-
-override chrome://dactyl/content/dactyl.dtd chrome://muttator/content/dactyl.dtd
-override chrome://dactyl/content/config.js chrome://muttator/content/config.js
-
-overlay chrome://messenger/content/messenger.xul chrome://dactyl/content/dactyl.xul
-overlay chrome://messenger/content/messenger.xul chrome://muttator/content/muttator.xul
-
-overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://muttator/content/compose/dactyl.xul
-overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://muttator/content/compose/compose.xul
-
diff --git a/muttator/components/about-handler.js b/muttator/components/about-handler.js
deleted file mode 100644
index 489de20c..00000000
--- a/muttator/components/about-handler.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Header:
-const Name = "Muttator";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/about-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-
-const name = Name.toLowerCase();
-function AboutHandler() {}
-AboutHandler.prototype = {
-
- classDescription: "About " + Name + " Page",
-
- classID: Components.ID("81495d80-89ee-4c36-a88d-ea7c4e5ac63f"),
-
- contractID: "@mozilla.org/network/protocol/about;1?what=" + name,
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
-
- newChannel: function (uri) {
- let channel = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService)
- .newChannel("chrome://" + name + "/content/about.html", null, null);
- channel.originalURI = uri;
- return channel;
- },
-
- getURIFlags: function (uri) Ci.nsIAboutModule.ALLOW_SCRIPT,
-};
-
-function NSGetModule(compMgr, fileSpec) XPCOMUtils.generateModule([AboutHandler])
-
-// vim: set fdm=marker sw=4 ts=4 et:
diff --git a/muttator/components/commandline-handler.js b/muttator/components/commandline-handler.js
deleted file mode 100644
index ec96d315..00000000
--- a/muttator/components/commandline-handler.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Header:
-const Name = "Muttator";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/commandline-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const name = Name.toLowerCase();
-function CommandLineHandler() {
- this.wrappedJSObject = this;
-}
-CommandLineHandler.prototype = {
-
- classDescription: Name + " Command-line Handler",
-
- classID: Components.ID("{16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}"),
-
- contractID: "@mozilla.org/commandlinehandler/general-startup;1?type=" + name,
-
- _xpcom_categories: [{
- category: "command-line-handler",
- entry: "m-" + name
- }],
-
- QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsICommandLineHandler]),
-
- handle: function (commandLine) {
- // TODO: handle remote launches differently?
- try {
- this.optionValue = commandLine.handleFlagWithParam(name, false);
- }
- catch (e) {
- dump(name + ": option '-" + name + "' requires an argument\n");
- }
- }
-};
-
-function NSGetModule(compMgr, fileSpec) XPCOMUtils.generateModule([CommandLineHandler])
-
-// vim: set ft=javascript fdm=marker sw=4 ts=4 et:
diff --git a/muttator/content/logo.png b/muttator/content/logo.png
deleted file mode 100644
index 61abb0ea..00000000
Binary files a/muttator/content/logo.png and /dev/null differ
diff --git a/muttator/content/muttator.svg b/muttator/content/muttator.svg
deleted file mode 100644
index 56df7cdf..00000000
--- a/muttator/content/muttator.svg
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
diff --git a/muttator/locale/en-US/intro.xml b/muttator/locale/en-US/intro.xml
deleted file mode 100644
index f302cfad..00000000
--- a/muttator/locale/en-US/intro.xml
+++ /dev/null
@@ -1,387 +0,0 @@
-
-
-
-
-
-
-
-
-
-
Introduction
-
-&dactyl.appname; is a free browser add-on for &dactyl.host;,
-which makes it look and behave like the
-Vim
-text editor. It has similar key bindings, and you could call it a modal
-web browser, as key bindings differ according to which mode you are in.
-
-
- To provide the most authentic Vim experience, the &dactyl.host; menubar and toolbar are hidden.
-
-
-
If you really need them, type: :set guioptions+=mT to get them back.
-
- If you don't like &dactyl.appname; at all, you can uninstall it by typing
- :extdelete &dactyl.appname; or :extdisable &dactyl.appname; to disable it.
-
-
- If you like it but can't remember the shortcuts, then press
- or :help to get this help window back.
-
-
-author donaton sponsor
-
- &dactyl.appname; was initially written by
- Martin
- Stubenschrott but has found many other
- contributors
- in the meanwhile. If you appreciate the work on &dactyl.appname; and want to
- encourage us working on it more, you can send us greetings, patches, or
- donations (thanks a lot to
- these
- people
- who already did):
-
-
-
-
-
-
-
-
-
- If you prefer getting some nice products for your money, you can also support
- us by buying some cool
- merchandise like
- t-shirts or mugs. Of course, as we believe in free, open source software, only
- support us financially if you really like &dactyl.appname; and the money doesn't hurt
- — otherwise just use it, recommend it, and like it :)
-
-
-
Help topics
-
-
-
- Quick-start tutorial:
- A quick-start tutorial for new users.
-
-
- Starting &dactyl.appname;:
- How &dactyl.appname; starts up, where it reads the config file…
-
-
- Browsing:
- Basic mappings and commands needed for a browsing session (how to open
- a web page or go back in history).
-
-
- Buffer:
- Operations on the current document like scrolling or copying text.
-
-
- Command-line mode:
- Command-line editing.
-
-
- Insert mode:
- Insert-mode editing.
-
-
- Options:
- A description of all options.
-
-
- Text search commands:
- Searching for text in the current buffer.
-
-
- Tabs:
- Managing your tabbed browsing session.
-
-
- Hints:
- Selecting hyperlinks and other page elements.
-
-
- Key mappings, abbreviations, and user-defined commands:
- Defining new key mappings, abbreviations and user commands.
-
Tab completion available for all commands with support for "longest" matching when set in 'wildmode'
-
Hit-a-hint like navigation of links (start with f to follow a link)
-
Advanced completion of bookmark and history URLs (searching also in title, not only URL)
-
Vim-like statusline with a Wget-like progress bar
-
Minimal GUI (easily hide useless menubar and toolbar with :set guioptions=)
-
Ability to :source JavaScript files, and to use a ~/.pentadactylrc file with syntax highlighting if you install pentadactyl.vim
-
Easy quick searches (:open foo will search for "foo" in google, :open ebay terminator will search for "terminator" on ebay) with support for &dactyl.host; keyword bookmarks and search engines
-
Count supported for many commands (3 will go back 3 pages)
-
Beep on errors
-
Marks support (ma to set mark a on a web page, 'a to go there)
-
QuickMarks support (quickly go to previously marked web pages with goa-zA-Z0-9)
-
:map and :command support (and feedkeys() for script writers)
-
:time support for profiling
-
Move the text cursor and select text with Vim keys and a Visual mode
-
External editor support
-
Macros to replay key strokes
-
AutoCommands to execute actions on certain events
-
A comprehensive help system, explaining all commands, mappings and options
-
-
-
Contact
-
-
- Please send comments/bug reports/patches to the mailing list, where we will
- properly answer any questions. You can also join the
- #pentadactyl IRC channel
- on Freenode or check the
- Wiki for
-
- frequently asked questions (FAQ)
- . Make sure, you have read the TODO file first, as we are aware of many
- things which can be improved when we find time for it or receive patches.
-
-
-
-
-
-
-All mail clients suck. Mutt just sucks less. This one just sucks less than
-mutt.
-
-
-
Introduction
-
-http://vimperator.org/muttator[&dactyl.appname;] is a free browser add-on for
-&dactyl.hostapp;, which makes it look and behave like the http://www.vim.org[Vim]
-text editor. It has similar key bindings, and you could call it a modal mail
-client, as key bindings differ according to which mode you are in.
-
-|warning| +
-Warning:
-To provide the most authentic Vim experience, the &dactyl.hostapp; menubar and toolbar were hidden. +
-If you really need them, type: :set guioptions+=mT to get them back. +
-If you don't like &dactyl.appname; at all, you can uninstall it by typing
-:addons and remove/disable it. +
-If you like it, but can't remember the shortcuts, press F1 or
-:help to get this help window back.
-
-|author| |donation| +
-&dactyl.appname; was written by mailto:stubenschrott@vimperator.org[Martin Stubenschrott].
-If you appreciate my work on &dactyl.appname; and want to encourage me working on it
-more, you can either send me greetings, patches or make a donation:
-
-NOTE: If this link does not work, go to http://vimperator.org/muttator and
-click the donation button there, because &dactyl.hostapp; seems to have a problem
-when this link is inside an e-mail (which this help screen actually is).
-
-
-
-Of course as a believer in free open source software, only make a donation
-if you really like &dactyl.appname; and the money doesn't hurt -- otherwise just use
-it, recommend it and like it :)
-
-
Help topics
-
-
-
- Starting &dactyl.appname;:
- How &dactyl.appname; starts up, where it reads the config file…
-
-
- Browsing:
- Basic mappings and commands needed for a browsing session (how to open
- a web page or go back in history).
-
-
- Buffer:
- Operations on the current document like scrolling or copying text.
-
-
- Command-line mode:
- Command-line editing.
-
-
- Insert mode:
- Insert-mode editing.
-
-
- Options:
- A description of all options.
-
-
- Text search commands:
- Searching for text in the current buffer.
-
-
- Tabs:
- Managing your tabbed browsing session.
-
-
- Hints:
- Selecting hyperlinks and other page elements.
-
-
- Key mappings, abbreviations, and user-defined commands:
- Defining new key mappings, abbreviations and user commands.
-
- Marks:
- Using bookmarks, QuickMarks, history and local marks.
-
-
- Repeating commands:
- Using macros to repeat recurring workflows.
-
-
- Automatic commands:
- Automatically executing code on certain events.
-
-
- Printing:
- Printing pages.
-
-
- &dactyl.appname;'s GUI:
- Accessing &dactyl.host; menus, dialogs and the sidebar.
-
-
- Styling the GUI and web pages:
- Changing the styling of content pages and &dactyl.appname; itself.
-
-
- Error and informational messages:
- A description of messages and error messages.
-
-
- Developer information:
- How to write docs or plugins.
-
-
- Various commands:
- Other help which didn't fit into any other category.
-
-
- Index:
- An index of all commands and options.
-
-
-
-
-
-For now use :viusage!, :exusage! and :optionusage! to find
-out about available mappings, commands and options. When in Message mode
-(activated by i), most mappings from &dactyl.appname; are available.
-
-
-You can also jump directly to the help of a specific command with
-:help o or :help :set.
-
-
- Tab completion available for all commands with support for "longest"
- matching when set in 'wildmode'
-
-
Hit-a-hint like navigation of links (start with f to follow a link)
-
- Minimal GUI (easily hide useless menubar and toolbar with :set
- guioptions=f)
-
-
- Ability to :source JavaScript files, and to use a
- [a]~/.muttatorrc[a] file with syntax highlighting if you install
- http://code.google.com/p/pentadactyl-labs/issues/detail?id=51[muttator.vim]
-
-
Count supported for many commands (3 will go back 3 messages)
-
Beep on errors
-
:map support (and feedkeys() for script writers)
-
:time support for profiling
-
Many other pentadactyl features are available when in -- MESSAGE -- mode
-
A comprehensive help file, explaining all commands, mappings and options.
-
-
-
Contact
-
-Please send comments/bug reports/patches to the mailing list, where we will
-properly answer any questions. You can also join the
-#pentadactyl IRC channel
-on Freenode or check the
-Wiki
-for
-
- frequently asked questions (FAQ).
-Make sure, you have read the
-TODO
-file first, as we are aware of many things which can be improved when we find
-time for it or receive patches.
-
-
-
diff --git a/muttator/skin/icon.png b/muttator/skin/icon.png
deleted file mode 100644
index 86376a9b..00000000
Binary files a/muttator/skin/icon.png and /dev/null differ
diff --git a/pentadactyl/NEWS b/pentadactyl/NEWS
index d0b1eb64..843bbdf1 100755
--- a/pentadactyl/NEWS
+++ b/pentadactyl/NEWS
@@ -1,18 +1,40 @@
2009-XX-XX:
- * Use only visible tabs for tab numbering, gt/gn/gN, etc.
- * Group tabs in :buffer completions by panorama groups
+ * Extensive Firefox 4 support, including:
+ - Tabs in :buffer completions and listings are grouped
+ by panorama groups
+ - Only visible tabs are considered in tab numbering,
+ gt/gn/gN, etc.
+ * Greatly improved startup time.
+ * Significant completion speed improvements, especially for
+ JavaScript.
+ * Greatly improved private mode support and :sanitize command.
+ * :extadd now supports URLs.
* Replaced 'focuscontent' with 'strictfocus'
- * Replaced previous incremental search implementation
+ * New and much more powerful incremental search implementation.
+ Improvements over the standard Firefox find include.
+ - Starts at the cursor position in the currently selected
+ frame, unlike Firefox, which always starts at the start of
+ the first frame.
+ - Returns the cursor and viewport to their original position
+ on cancel.
+ - Backtracks to the first successful match after pressing
+ backspace.
+ - Supports reverse incremental search.
* gf now toggles between source and content view.
- '|' key binding has been removed.
- * :open now only opens files begining with /, ./, or ~/
- * Page zoom information is now shown in the status bar
+ The | key binding has been removed.
+ * :open now only opens files begining with /, ./, ../, or ~/
+ * 'complete' now defaults to ‘slf’ but file completion only
+ triggers when the URL begins as above.
+ * Page zoom information is now shown in the status bar, and
+ change in zoom status no longer appears in :messages.
* Added ZO, ZI, ZM, and ZR as aliases for zO, zI, zM, and zR
- * Add basic plugin authorship documentation
- * Plugins may now provide full-fleged ':help' documentation
- * The help system is newly modularized
- * Asciidoc is no longer for building
- * Remove [c]:edit[c], [c]:tabedit[c], and [c]:winedit[c]
+ * Major help system improvements:
+ - Plugins may now provide full-fleged ':help' documentation
+ - Add basic plugin authorship documentation
+ - The help system is newly modularized and features significant
+ updates, rewrites, and formatting improvements.
+ - Asciidoc is no longer for building
+ * Remove :edit, :tabedit, and :winedit aliases.
* Add 'jsdebugger' option - switch on/off javascript debugger service
* Add "addons", "downloads", "extoptions" and "help" to the 'activate' option.
@@ -22,17 +44,6 @@
tri-license to the MIT license.
* IMPORTANT: Map.flags has been replaced with individual properties.
Mappings defined in plugins with mappings.add will need to be updated.
-...................................
- E.g.
- mappings.add(...,
- { flags: Mappings.flags.ARGUMENT |
- Mappings.flags.COUNT |
- Mappings.flags.MOTION |
- Mappings.flags.ALLOW_EVENT_ROUTING });
- is now
- mappings.add(...,
- { arg: true, count: true, motion: true, route: true });
-...................................
* IMPORTANT: shifted key notation now matches Vim's behaviour. E.g.
and are equivalent, to map the uppercase character use .
* IMPORTANT: 'popups' now takes a stringlist rather than a number.
diff --git a/pentadactyl/TODO b/pentadactyl/TODO
index 433cab04..8e824f37 100644
--- a/pentadactyl/TODO
+++ b/pentadactyl/TODO
@@ -41,6 +41,11 @@ BUGS:
- The MOW shouldn't close when executing hints and ;F isn't working.
FEATURES:
+9 Add quoting help tag
+9 Add altwildmode
+9 JavaScript completer: show function parameter spec
+9 Fix the arbitrary distinction between 'hinttags' and
+ 'extendedhinttags'
9 Support multiple bookmarks, -keyword, -tags in :delbmarks
8 Document Textarea, Caret and Visual modes.
8 Replace config.name tests in dactyl with more specific feature
diff --git a/pentadactyl/chrome.manifest b/pentadactyl/chrome.manifest
index 63e863c7..576e4d0d 100644
--- a/pentadactyl/chrome.manifest
+++ b/pentadactyl/chrome.manifest
@@ -14,15 +14,19 @@ override chrome://dactyl/content/config.js chrome://pentadactyl/content/config
overlay chrome://browser/content/browser.xul chrome://dactyl/content/dactyl.xul
overlay chrome://browser/content/browser.xul chrome://pentadactyl/content/pentadactyl.xul
-component {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} components/about-handler.js
-contract @mozilla.org/network/protocol/about;1?what=pentadactyl {81495d80-89ee-4c36-a88d-ea7c4e5ac63f}
+component {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468} components/dactyl.js
+contract @dactyl.googlecode.com/base/dactyl {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468}
component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js
contract @mozilla.org/commandlinehandler/general-startup;1?type=pentadactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}
category command-line-handler m-pentadactyl @mozilla.org/commandlinehandler/general-startup;1?type=pentadactyl
-component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js
+component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js
contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d}
-component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js
-contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44}
+component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js
+contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44}
+component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js
+contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388}
+component {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} components/protocols.js
+contract @mozilla.org/network/protocol/about;1?what=pentadactyl {81495d80-89ee-4c36-a88d-ea7c4e5ac63f}
diff --git a/pentadactyl/components/about-handler.js b/pentadactyl/components/about-handler.js
deleted file mode 100644
index 1653861a..00000000
--- a/pentadactyl/components/about-handler.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// Header:
-"use strict";
-const Name = "Pentadactyl";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/about-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-
-const name = Name.toLowerCase();
-function AboutHandler() {}
-AboutHandler.prototype = {
-
- classDescription: "About " + Name + " Page",
-
- classID: Components.ID("81495d80-89ee-4c36-a88d-ea7c4e5ac63f"),
-
- contractID: "@mozilla.org/network/protocol/about;1?what=" + name,
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
-
- newChannel: function (uri) {
- let channel = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService)
- .newChannel("chrome://" + name + "/content/about.html", null, null);
- channel.originalURI = uri;
- return channel;
- },
-
- getURIFlags: function (uri) Ci.nsIAboutModule.ALLOW_SCRIPT,
-};
-
-if (XPCOMUtils.generateNSGetFactory)
- const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutHandler]);
-else
- const NSGetModule = XPCOMUtils.generateNSGetModule([AboutHandler]);
-
-// vim: set fdm=marker sw=4 ts=4 et:
diff --git a/pentadactyl/components/commandline-handler.js b/pentadactyl/components/commandline-handler.js
deleted file mode 100644
index c0507687..00000000
--- a/pentadactyl/components/commandline-handler.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// Header:
-"use strict";
-const Name = "Pentadactyl";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/commandline-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const name = Name.toLowerCase();
-function CommandLineHandler() {
- this.wrappedJSObject = this;
-}
-CommandLineHandler.prototype = {
-
- classDescription: Name + " Command-line Handler",
-
- classID: Components.ID("{16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}"),
-
- contractID: "@mozilla.org/commandlinehandler/general-startup;1?type=" + name,
-
- _xpcom_categories: [{
- category: "command-line-handler",
- entry: "m-" + name
- }],
-
- QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsICommandLineHandler]),
-
- handle: function (commandLine) {
- // TODO: handle remote launches differently?
- try {
- this.optionValue = commandLine.handleFlagWithParam(name, false);
- }
- catch (e) {
- dump(name + ": option '-" + name + "' requires an argument\n");
- }
- }
-};
-
-if (XPCOMUtils.generateNSGetFactory)
- const NSGetFactory = XPCOMUtils.generateNSGetFactory([CommandLineHandler]);
-else
- const NSGetModule = XPCOMUtils.generateNSGetModule([CommandLineHandler]);
-
-// vim: set ft=javascript fdm=marker sw=4 ts=4 et:
diff --git a/pentadactyl/components/commandline-handler.js b/pentadactyl/components/commandline-handler.js
new file mode 120000
index 00000000..aa8427b9
--- /dev/null
+++ b/pentadactyl/components/commandline-handler.js
@@ -0,0 +1 @@
+../../common/components/commandline-handler.js
\ No newline at end of file
diff --git a/pentadactyl/content/about.html b/pentadactyl/content/about.html
deleted file mode 100644
index 50b333c3..00000000
--- a/pentadactyl/content/about.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
- About:Pentadactyl
-
-
-
-
-
-
-
-
-
-version ###VERSION###
-by Kris Maglione et al.
-Pentadactyl is open source and freely distributable
-
-type :q<Enter> to exit
-type :help<Enter> or <F1> for on-line help
-type :help version-2.1<Enter> for version info
-
-
-
-
-
-
-
-
diff --git a/pentadactyl/content/about_background.png b/pentadactyl/content/about_background.png
deleted file mode 100644
index 94c11925..00000000
Binary files a/pentadactyl/content/about_background.png and /dev/null differ
diff --git a/pentadactyl/content/config.js b/pentadactyl/content/config.js
index 336a0ea0..a2ccc48f 100644
--- a/pentadactyl/content/config.js
+++ b/pentadactyl/content/config.js
@@ -1,14 +1,11 @@
// Copyright (c) 2006-2009 by Martin Stubenschrott
// Copyright (c) 2007-2009 by Doug Kearns
-// Copyright (c) 2008-2009 by Kris Maglione
+// Copyright (c) 2008-2010 by Kris Maglione
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
const Config = Module("config", ConfigBase, {
- name: "Pentadactyl",
- hostApplication: "Firefox",
-
get visualbellWindow() getBrowser().mPanelContainer,
styleableChrome: ["chrome://browser/content/browser.xul"],
@@ -150,7 +147,7 @@ const Config = Module("config", ConfigBase, {
{ argCount: "0" });
commands.add(["pref[erences]", "prefs"],
- "Show " + config.hostApplication + " preferences",
+ "Show " + config.host + " preferences",
function (args) {
if (args.bang) { // open Firefox settings GUI dialog
dactyl.open("about:config",
@@ -242,6 +239,7 @@ const Config = Module("config", ConfigBase, {
});
},
completion: function () {
+ dactyl.dump("Load completion\n");
var searchRunning = false; // only until Firefox fixes https://bugzilla.mozilla.org/show_bug.cgi?id=510589
completion.location = function location(context) {
if (!services.get("autoCompleteSearch"))
diff --git a/pentadactyl/content/dactyl.dtd b/pentadactyl/content/dactyl.dtd
index dff1ecf0..0663dd69 100644
--- a/pentadactyl/content/dactyl.dtd
+++ b/pentadactyl/content/dactyl.dtd
@@ -4,12 +4,19 @@
+
-
+
+
+
+
+
+
+
diff --git a/pentadactyl/content/logo.png b/pentadactyl/content/logo.png
index 52ff0c8d..f023912c 100644
Binary files a/pentadactyl/content/logo.png and b/pentadactyl/content/logo.png differ
diff --git a/pentadactyl/content/pentadactyl.svg b/pentadactyl/content/pentadactyl.svg
deleted file mode 100644
index 9681d492..00000000
--- a/pentadactyl/content/pentadactyl.svg
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
diff --git a/pentadactyl/install.rdf b/pentadactyl/install.rdf
index e5c747c5..1c72f7ed 100644
--- a/pentadactyl/install.rdf
+++ b/pentadactyl/install.rdf
@@ -5,21 +5,16 @@
pentadactyl@dactyl.googlecode.comPentadactyl@VERSION@
- Make Firefox behave like Vim
+ Firefox for Vim and Links addictsKris Maglione
- http://dactyl.sf.net/
+ http://dactyl.sf.net/Pentadactylchrome://pentadactyl/skin/icon.pngchrome://dactyl/content/preferences.xul
-
-
- content/dactyl/
-
- {ec8030f7-c20a-464f-9b0e-13a3a9e97384}3.5
- 4.0b5pre
+ 4.0b7pre
-&dactyl.appname; is a free browser add-on for &dactyl.host;,
-which makes it look and behave like the
-Vim
-text editor.
+
+ &dactyl.appname; is a
+ free browser add-on for &dactyl.host;, designed to make browsing more
+ efficient and especially more keyboard accessible. Largely inspired by the
+ Vim text editor, the appearance
+ and finger feel should be familiar to Vim users.
+
-
- To provide the most authentic Vim experience, the &dactyl.host;
- menubar and toolbar are hidden.
-
-
- If you really need them, type: :set guioptions+=mT to
- get them back.
-
-
-
- If you don't like &dactyl.appname; at all, you can uninstall it
- by typing :extdelete &dactyl.appname; or disable it
- with :extdisable &dactyl.appname;
-
-
-
- If you like it but can't remember the shortcuts, then type
- or :help to get this help window back.
-
-
+
+ If this is your first time running &dactyl.appname;, you may need some
+ time to adjust to the standard interface, which hides the menu,
+ navigation, and tool bars by default. If you find it uncomfortable to work
+ without them, you can re-enable them by typing,
+
+:setguioptions+=mT
+
+ If you have trouble remembering commands or keyboard shortcuts, you can
+ bring up this help page at any time by typing :help or the
+ . If you find that you don't like &dactyl.appname; at all,
+ you can disable it by typing :extdisable &dactyl.appname; or
+ delete it entirely by typing :extdelete &dactyl.appname;
+
Help topics
@@ -46,16 +45,17 @@ text editor.
Starting &dactyl.appname;:
- How &dactyl.appname; starts up, where it reads the config file…
+ How &dactyl.appname; starts up, where it reads the config file, etc.
Browsing:
- Basic mappings and commands needed for a browsing session (how to open
- a web page or go back in history).
+ Basic key mappings and commands needed for a browsing
+ session (how to open a web page, go back in history, etc.)
Buffer:
- Operations on the current document like scrolling or copying text.
+ Operations on the current document (scrolling, copying text,
+ etc.)
Command-line mode:
@@ -82,7 +82,7 @@ text editor.
Selecting hyperlinks and other page elements.
- Key mappings, abbreviations, and user-defined commands:
+ Keyboard shorcuts and commands:
Defining new key mappings, abbreviations and user commands.
@@ -115,19 +115,19 @@ text editor.
Error and informational messages:
- A description of messages and error messages.
+ A description of informational and error messages.
Developer information:
- How to write docs or plugins.
+ How to write plugins and documentation.
Various commands:
- Other help which didn't fit into any other category.
+ Other help which doesn't readily fit into any other category.
Plugins:
- Documentation for any plugins you may have installed.
+ Documentation for any plugins you have installed.
Index:
@@ -136,7 +136,8 @@ text editor.
- You can also jump directly to the help of a specific command via the :help command.
+ You can also jump directly to the help of a specific command,
+ key mapping, or topic via the :help command.
Tab completion available for all commands with support for "longest" matching when set in 'wildmode'
+
Tab completion for all commands, highliy configurable via wildmode and wildoptions
Hit-a-hint like navigation of links (start with f to follow a link)
-
Advanced completion of bookmark and history URLs (searching also in title, not only URL)
-
Vim-like statusline with a Wget-like progress bar
-
Minimal GUI (easily hide useless menubar and toolbar with :set guioptions=)
-
Ability to :source JavaScript files, and to use a ~/.pentadactylrc file with syntax highlighting if you install pentadactyl.vim
-
Easy quick searches (:open foo will search for "foo" in google, :open ebay terminator will search for "terminator" on ebay) with support for &dactyl.host; keyword bookmarks and search engines
+
Advanced completion of bookmark and history URLs
+
Vim-like status line with a Wget-like progress bar
+
Minimal GUI (easily hide superfluous menubar and toolbar with :set guioptions=)
+
Ability to :source JavaScript, CSS, and &dactyl.appname; command files.
+
Easy quick searches (see :open)
Count supported for many commands (3 will go back 3 pages)
-
Beep on errors
-
Marks support (ma to set mark a on a web page, 'a to go there)
-
QuickMarks support (quickly go to previously marked web pages with goa-zA-Z0-9)
-
:map and :command support (and feedkeys() for script writers)
-
:time support for profiling
-
Move the text cursor and select text with Vim keys and a Visual mode
-
External editor support
-
Macros to replay key strokes
+
Visual bell for errors (visualbell)
+
Marks support (ma to set mark a, 'a to jump to it)
+
QuickMark support
+
:map, :command, :feedkeys, and macros
+
Editing of text fields with an external editor
AutoCommands to execute actions on certain events
-
A comprehensive help system, explaining all commands, mappings and options
+
A comprehensive help system, explaining all commands, mappings, options, and plugins
diff --git a/pentadactyl/skin/icon.png b/pentadactyl/skin/icon.png
index a8ae786c..bdd74b76 100644
Binary files a/pentadactyl/skin/icon.png and b/pentadactyl/skin/icon.png differ
diff --git a/muttator/AUTHORS b/teledactyl/AUTHORS
similarity index 100%
rename from muttator/AUTHORS
rename to teledactyl/AUTHORS
diff --git a/muttator/Donors b/teledactyl/Donors
similarity index 100%
rename from muttator/Donors
rename to teledactyl/Donors
diff --git a/muttator/Makefile b/teledactyl/Makefile
similarity index 100%
rename from muttator/Makefile
rename to teledactyl/Makefile
diff --git a/muttator/NEWS b/teledactyl/NEWS
similarity index 100%
rename from muttator/NEWS
rename to teledactyl/NEWS
diff --git a/muttator/TODO b/teledactyl/TODO
similarity index 100%
rename from muttator/TODO
rename to teledactyl/TODO
diff --git a/teledactyl/chrome.manifest b/teledactyl/chrome.manifest
new file mode 100644
index 00000000..9e3bbe93
--- /dev/null
+++ b/teledactyl/chrome.manifest
@@ -0,0 +1,34 @@
+# Thunderbird
+content teledactyl content/
+skin teledactyl classic/1.0 skin/
+locale dactyl en-US locale/en-US/
+
+content dactyl ../common/content/
+resource dactyl ../common/modules/
+skin dactyl classic/1.0 ../common/skin/
+
+override chrome://dactyl/content/dactyl.dtd chrome://teledactyl/content/dactyl.dtd
+override chrome://dactyl/content/config.js chrome://teledactyl/content/config.js
+
+overlay chrome://messenger/content/messenger.xul chrome://dactyl/content/dactyl.xul
+overlay chrome://messenger/content/messenger.xul chrome://teledactyl/content/teledactyl.xul
+
+overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://teledactyl/content/compose/dactyl.xul
+overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://teledactyl/content/compose/compose.xul
+
+component {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468} components/dactyl.js
+contract @dactyl.googlecode.com/base/dactyl {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468}
+
+component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js
+contract @mozilla.org/commandlinehandler/general-startup;1?type=teledactyl {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}
+category command-line-handler m-teledactyl @mozilla.org/commandlinehandler/general-startup;1?type=pentadactyl
+
+component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js
+contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d}
+component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js
+contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44}
+component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js
+contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388}
+component {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} components/protocols.js
+contract @mozilla.org/network/protocol/about;1?what=teledactyl {81495d80-89ee-4c36-a88d-ea7c4e5ac63f}
+
diff --git a/teledactyl/components/commandline-handler.js b/teledactyl/components/commandline-handler.js
new file mode 120000
index 00000000..aa8427b9
--- /dev/null
+++ b/teledactyl/components/commandline-handler.js
@@ -0,0 +1 @@
+../../common/components/commandline-handler.js
\ No newline at end of file
diff --git a/muttator/components/protocols.js b/teledactyl/components/protocols.js
similarity index 100%
rename from muttator/components/protocols.js
rename to teledactyl/components/protocols.js
diff --git a/muttator/content/addressbook.js b/teledactyl/content/addressbook.js
similarity index 100%
rename from muttator/content/addressbook.js
rename to teledactyl/content/addressbook.js
diff --git a/muttator/content/compose/compose.js b/teledactyl/content/compose/compose.js
similarity index 100%
rename from muttator/content/compose/compose.js
rename to teledactyl/content/compose/compose.js
diff --git a/muttator/content/compose/compose.xul b/teledactyl/content/compose/compose.xul
similarity index 100%
rename from muttator/content/compose/compose.xul
rename to teledactyl/content/compose/compose.xul
diff --git a/muttator/content/compose/dactyl.dtd b/teledactyl/content/compose/dactyl.dtd
similarity index 100%
rename from muttator/content/compose/dactyl.dtd
rename to teledactyl/content/compose/dactyl.dtd
diff --git a/muttator/content/compose/dactyl.xul b/teledactyl/content/compose/dactyl.xul
similarity index 100%
rename from muttator/content/compose/dactyl.xul
rename to teledactyl/content/compose/dactyl.xul
diff --git a/muttator/content/config.js b/teledactyl/content/config.js
similarity index 91%
rename from muttator/content/config.js
rename to teledactyl/content/config.js
index b2ed159c..d2183827 100644
--- a/muttator/content/config.js
+++ b/teledactyl/content/config.js
@@ -4,16 +4,12 @@
// given in the LICENSE.txt file included with this file.
const Config = Module("config", ConfigBase, {
- init: function () {
+ init: function init() {
+ init.supercall(this);
// don't wait too long when selecting new messages
// GetThreadTree()._selectDelay = 300; // TODO: make configurable
},
- /*** required options, no checks done if they really exist, so be careful ***/
- name: "Muttator",
- hostApplication: "Thunderbird", // TODO: can this be found out otherwise? gBrandBundle.getString("brandShortName");
- // Yes, but it will be localized unlike all other strings. So, it's best left until we i18n dactyl. --djk
-
autocommands: {
DOMLoad: "Triggered when a page's DOM content has fully loaded",
FolderLoad: "Triggered after switching folders in Thunderbird",
@@ -56,14 +52,14 @@ const Config = Module("config", ConfigBase, {
defaults: {
guioptions: "frb",
showtabline: 1,
- titlestring: "Muttator"
+ titlestring: "Teledactyl"
},
/*** optional options, there are checked for existence and a fallback provided ***/
features: ["hints", "mail", "marks", "addressbook", "tabs"],
focusChange: function (win) {
- // we switch to -- MESSAGE -- mode for Muttator, when the main HTML widget gets focus
+ // we switch to -- MESSAGE -- mode for Teledactyl when the main HTML widget gets focus
if (win && win.document instanceof HTMLDocument || dactyl.focus instanceof HTMLAnchorElement) {
if (config.isComposeWindow)
modes.set(modes.INSERT, modes.TEXTAREA);
@@ -120,9 +116,9 @@ const Config = Module("config", ConfigBase, {
},
get scripts() this.isComposeWindow ? ["compose/compose.js"] : [
- "addressbook.js",
- "mail.js",
- "tabs.js",
+ "addressbook",
+ "mail",
+ "tabs",
],
styleableChrome: ["chrome://messenger/content/messenger.xul",
@@ -145,7 +141,7 @@ const Config = Module("config", ConfigBase, {
}, {
commands: function () {
commands.add(["pref[erences]", "prefs"],
- "Show " + config.hostApplication + " preferences",
+ "Show " + config.host + " preferences",
function () { window.openOptionsDialog(); },
{ argCount: "0" });
},
diff --git a/muttator/content/dactyl.dtd b/teledactyl/content/dactyl.dtd
similarity index 72%
rename from muttator/content/dactyl.dtd
rename to teledactyl/content/dactyl.dtd
index 5c60353e..e4211b7c 100644
--- a/muttator/content/dactyl.dtd
+++ b/teledactyl/content/dactyl.dtd
@@ -3,9 +3,9 @@
%dactylBranding;
-
-
-
+
+
+
diff --git a/teledactyl/content/logo.png b/teledactyl/content/logo.png
new file mode 100644
index 00000000..a3934366
Binary files /dev/null and b/teledactyl/content/logo.png differ
diff --git a/muttator/content/mail.js b/teledactyl/content/mail.js
similarity index 100%
rename from muttator/content/mail.js
rename to teledactyl/content/mail.js
diff --git a/muttator/content/muttator.xul b/teledactyl/content/pentadactyl.xul
similarity index 96%
rename from muttator/content/muttator.xul
rename to teledactyl/content/pentadactyl.xul
index 13151dcd..dff68d5a 100644
--- a/muttator/content/muttator.xul
+++ b/teledactyl/content/pentadactyl.xul
@@ -9,7 +9,7 @@
-
- muttator@mozdev.org
- Muttator
+ teledactyl@dactyl.googlecode.com
+ Teledactyl###VERSION###
- Make Thunderbird behave like Vim
- Martin Stubenschrott
- http://vimperator.org/
+ Thunderbird for Mutt and Vim addicts
+ Kris Maglione
+ http://dactyl.sf.net/Teledactylchrome://muttator/skin/icon.pngchrome://dactyl/content/preferences.xul
-
- content/muttator/
+
+ content/teledactyl/{3550f703-e582-4d05-9a08-453d09bdfdc6}3.0b3
- 3.0
+ 3.2
diff --git a/muttator/locale/en-US/Makefile b/teledactyl/locale/en-US/Makefile
similarity index 100%
rename from muttator/locale/en-US/Makefile
rename to teledactyl/locale/en-US/Makefile
diff --git a/muttator/locale/en-US/all.xml b/teledactyl/locale/en-US/all.xml
similarity index 100%
rename from muttator/locale/en-US/all.xml
rename to teledactyl/locale/en-US/all.xml
diff --git a/muttator/locale/en-US/autocommands.xml b/teledactyl/locale/en-US/autocommands.xml
similarity index 100%
rename from muttator/locale/en-US/autocommands.xml
rename to teledactyl/locale/en-US/autocommands.xml
diff --git a/muttator/locale/en-US/gui.xml b/teledactyl/locale/en-US/gui.xml
similarity index 100%
rename from muttator/locale/en-US/gui.xml
rename to teledactyl/locale/en-US/gui.xml
diff --git a/teledactyl/locale/en-US/intro.xml b/teledactyl/locale/en-US/intro.xml
new file mode 100644
index 00000000..552eaac9
--- /dev/null
+++ b/teledactyl/locale/en-US/intro.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
Introduction
+
+
+ &dactyl.appname; is a free
+ browser add-on for &dactyl.host;, which makes it look and behave
+ like the Vim text
+ editor. It has similar key bindings, and you could call it a
+ modal web browser, as key bindings differ according to which
+ mode you are in.
+
+
+
+ If this is your first time running &dactyl.appname;, you may need some
+ time to adjust to the standard interface, which hides the menu,
+ navigation, and tool bars by default. If you find it uncomfortable to work
+ without them, you can re-enable them by typing,
+
+:setguioptions+=mT
+
+ If you have trouble remembering commands or keyboard shortcuts, you can
+ bring up this help page at any time by typing :help or the
+ . If you find that you don't like &dactyl.appname; at all,
+ you can disable it by typing :extdisable &dactyl.appname; or
+ delete it entirely by typing :extdelete &dactyl.appname;
+
+
+
Help topics
+
+
+
+ Quick-start tutorial:
+ A quick-start tutorial for new users.
+
+
+ Starting &dactyl.appname;:
+ How &dactyl.appname; starts up, where it reads the config file…
+
+
+ Browsing:
+ Basic mappings and commands needed for a browsing session (how to open
+ a web page or go back in history).
+
+
+ Buffer:
+ Operations on the current document like scrolling or copying text.
+
+
+ Command-line mode:
+ Command-line editing.
+
+
+ Insert mode:
+ Insert-mode editing.
+
+
+ Options:
+ A description of all options.
+
+
+ Text search commands:
+ Searching for text in the current buffer.
+
+
+ Tabs:
+ Managing your tabbed browsing session.
+
+
+ Hints:
+ Selecting hyperlinks and other page elements.
+
+
+ Key mappings, abbreviations, and user-defined commands:
+ Defining new key mappings, abbreviations and user commands.
+
Tab completion available for all commands with support for "longest" matching when set in 'wildmode'
+
Hit-a-hint like navigation of links (start with f to follow a link)
+
Advanced completion of bookmark and history URLs (searching also in title, not only URL)
+
Vim-like statusline with a Wget-like progress bar
+
Minimal GUI (easily hide useless menubar and toolbar with :set guioptions=)
+
Ability to :source JavaScript files, and to use a ~/.pentadactylrc file with syntax highlighting if you install pentadactyl.vim
+
Easy quick searches (:open foo will search for "foo" in google, :open ebay terminator will search for "terminator" on ebay) with support for &dactyl.host; keyword bookmarks and search engines
+
Count supported for many commands (3 will go back 3 pages)
+
Beep on errors
+
Marks support (ma to set mark a on a web page, 'a to go there)
+
QuickMarks support (quickly go to previously marked web pages with goa-zA-Z0-9)
+
:map and :command support (and feedkeys() for script writers)
+
:time support for profiling
+
Move the text cursor and select text with Vim keys and a Visual mode
+
External editor support
+
Macros to replay key strokes
+
AutoCommands to execute actions on certain events
+
A comprehensive help system, explaining all commands, mappings and options
+
+
+
Contact
+
+
+ Please send comments, questions, or patches to the
+ mailing list,
+ where we will do our best to answer any questions. You can also
+ check the
+ wiki for
+ FAQ.
+ Issue reports can be entered in the
+ issue tracker.
+
+
+
+
+
diff --git a/teledactyl/skin/icon.png b/teledactyl/skin/icon.png
new file mode 100644
index 00000000..d07edc6d
Binary files /dev/null and b/teledactyl/skin/icon.png differ
diff --git a/xulmus/chrome.manifest b/xulmus/chrome.manifest
index 92c2bbda..ea07f1b5 100644
--- a/xulmus/chrome.manifest
+++ b/xulmus/chrome.manifest
@@ -14,6 +14,21 @@ override chrome://dactyl/content/config.js chrome://xulmus/content/config.js
overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://xulmus/content/xulmus.xul
overlay chrome://songbird/content/xul/layoutBaseOverlay.xul chrome://dactyl/content/dactyl.xul
+component {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468} components/dactyl.js
+contract @dactyl.googlecode.com/base/dactyl {8e4a8e2f-95a0-4d8f-90ac-fc9d7d8f5468}
+
+component {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69} components/commandline-handler.js
+contract @mozilla.org/commandlinehandler/general-startup;1?type=xulmus {16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}
+category command-line-handler m-xulmus @mozilla.org/commandlinehandler/general-startup;1?type=pentadactyl
+
+component {c1b67a07-18f7-4e13-b361-2edcc35a5a0d} components/protocols.js
+contract @mozilla.org/network/protocol;1?name=chrome-data {c1b67a07-18f7-4e13-b361-2edcc35a5a0d}
+component {9c8f2530-51c8-4d41-b356-319e0b155c44} components/protocols.js
+contract @mozilla.org/network/protocol;1?name=dactyl {9c8f2530-51c8-4d41-b356-319e0b155c44}
+component {f4506a17-5b4d-4cd9-92d4-2eb4630dc388} components/protocols.js
+contract @dactyl.googlecode.com/base/xpc-interface-shim {f4506a17-5b4d-4cd9-92d4-2eb4630dc388}
+component {81495d80-89ee-4c36-a88d-ea7c4e5ac63f} components/protocols.js
+contract @mozilla.org/network/protocol/about;1?what=xulmus {81495d80-89ee-4c36-a88d-ea7c4e5ac63f}
#overlay chrome://songbird/content/xul/layoutWithBrowserOverlay.xul chrome://xulmus/content/xulmus.xul
#overlay chrome://songbird/content/xul/layoutWithBrowserOverlay.xul chrome://dactyl/content/dactyl.xul
diff --git a/xulmus/components/about-handler.js b/xulmus/components/about-handler.js
deleted file mode 100644
index 89f418d5..00000000
--- a/xulmus/components/about-handler.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Header:
-const Name = "Xulmus";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/about-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-
-const name = Name.toLowerCase();
-function AboutHandler() {}
-AboutHandler.prototype = {
-
- classDescription: "About " + Name + " Page",
-
- classID: Components.ID("81495d80-89ee-4c36-a88d-ea7c4e5ac63f"),
-
- contractID: "@mozilla.org/network/protocol/about;1?what=" + name,
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
-
- newChannel: function (uri) {
- let channel = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService)
- .newChannel("chrome://" + name + "/content/about.html", null, null);
- channel.originalURI = uri;
- return channel;
- },
-
- getURIFlags: function (uri) Ci.nsIAboutModule.ALLOW_SCRIPT,
-};
-
-function NSGetModule(compMgr, fileSpec) XPCOMUtils.generateModule([AboutHandler])
-
-// vim: set fdm=marker sw=4 ts=4 et:
diff --git a/xulmus/components/commandline-handler.js b/xulmus/components/commandline-handler.js
index 29478706..aa8427b9 100644
--- a/xulmus/components/commandline-handler.js
+++ b/xulmus/components/commandline-handler.js
@@ -1,48 +1 @@
-// Header:
-const Name = "Xulmus";
-/*
- * We can't load our modules here, so the following code is sadly
- * duplicated: .w !sh
-vimdiff ../../*'/components/commandline-handler.js'
- */
-
-// Copyright (c) 2009 by Doug Kearns
-//
-// This work is licensed for reuse under an MIT license. Details are
-// given in the LICENSE.txt file included with this file.
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const name = Name.toLowerCase();
-function CommandLineHandler() {
- this.wrappedJSObject = this;
-}
-CommandLineHandler.prototype = {
-
- classDescription: Name + " Command-line Handler",
-
- classID: Components.ID("{16dc34f7-6d22-4aa4-a67f-2921fb5dcb69}"),
-
- contractID: "@mozilla.org/commandlinehandler/general-startup;1?type=" + name,
-
- _xpcom_categories: [{
- category: "command-line-handler",
- entry: "m-" + name
- }],
-
- QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsICommandLineHandler]),
-
- handle: function (commandLine) {
- // TODO: handle remote launches differently?
- try {
- this.optionValue = commandLine.handleFlagWithParam(name, false);
- }
- catch (e) {
- dump(name + ": option '-" + name + "' requires an argument\n");
- }
- }
-};
-
-function NSGetModule(compMgr, fileSpec) XPCOMUtils.generateModule([CommandLineHandler])
-
-// vim: set ft=javascript fdm=marker sw=4 ts=4 et:
+../../common/components/commandline-handler.js
\ No newline at end of file
diff --git a/xulmus/content/config.js b/xulmus/content/config.js
index 6eee5298..eae72d82 100644
--- a/xulmus/content/config.js
+++ b/xulmus/content/config.js
@@ -9,7 +9,9 @@
Components.utils.import("resource://gre/modules/utils.js"); // XXX
const Config = Module("config", ConfigBase, {
- init: function () {
+ init: function init() {
+ init.supercall(this);
+
// TODO: mention this to SB devs, they seem keen to provide these
// functions to make porting from FF as simple as possible.
window.toJavaScriptConsole = function () {
@@ -250,7 +252,7 @@ const Config = Module("config", ConfigBase, {
});
commands.add(["pref[erences]", "prefs"],
- "Show " + config.hostApplication + " preferences",
+ "Show " + config.host + " preferences",
function (args) {
if (args.bang) { // open Songbird settings GUI dialog
dactyl.open("about:config",