1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-22 06:08:02 +01:00

add Vim modeline and whitespace formatting

This commit is contained in:
Doug Kearns
2007-09-16 17:11:40 +00:00
parent 112877f340
commit 7ce12b3a87

View File

@@ -28,187 +28,187 @@ the terms of any one of the MPL, the GPL or the LGPL.
vimperator.modes = (function() vimperator.modes = (function()
{ {
var main = 1; // NORMAL var main = 1; // NORMAL
var extended = 0; // NONE var extended = 0; // NONE
var passNextKey = false; var passNextKey = false;
var passAllKeys = false; var passAllKeys = false;
function getModeMessage() function getModeMessage()
{ {
if (passNextKey && !passAllKeys) if (passNextKey && !passAllKeys)
return "PASS THROUGH (next)"; return "PASS THROUGH (next)";
else if (passAllKeys && !passNextKey) else if (passAllKeys && !passNextKey)
return "PASS THROUGH"; return "PASS THROUGH";
var ext = ""; var ext = "";
switch (extended) switch (extended)
{ {
case vimperator.modes.QUICK_HINT: case vimperator.modes.QUICK_HINT:
ext = " (quick)"; break; ext = " (quick)"; break;
case vimperator.modes.EXTENDED_HINT: case vimperator.modes.EXTENDED_HINT:
ext = " (extended)"; break; ext = " (extended)"; break;
case vimperator.modes.ALWAYS_HINT: case vimperator.modes.ALWAYS_HINT:
ext = " (always)"; break; ext = " (always)"; break;
case vimperator.modes.MENU: // TODO: desirable? case vimperator.modes.MENU: // TODO: desirable?
ext = " (menu)"; break; ext = " (menu)"; break;
} }
switch (main)
{
case vimperator.modes.INSERT:
return "INSERT" + ext;
case vimperator.modes.VISUAL:
return (extended & vimperator.modes.LINE) ? "VISUAL LINE" + ext : "VISUAL" + ext;
case vimperator.modes.HINTS:
return "HINTS" + ext;
case vimperator.modes.CARET:
return "CARET" + ext;
case vimperator.modes.TEXTAREA:
return "TEXTAREA" + ext;
default:
return null;
}
}
function handleModeChange(oldmode, newmode) switch (main)
{ {
vimperator.log("switching from mode " + oldmode + " to mode " + newmode, 7); case vimperator.modes.INSERT:
return "INSERT" + ext;
case vimperator.modes.VISUAL:
return (extended & vimperator.modes.LINE) ? "VISUAL LINE" + ext : "VISUAL" + ext;
case vimperator.modes.HINTS:
return "HINTS" + ext;
case vimperator.modes.CARET:
return "CARET" + ext;
case vimperator.modes.TEXTAREA:
return "TEXTAREA" + ext;
default:
return null;
}
}
switch (oldmode) function handleModeChange(oldmode, newmode)
{ {
case vimperator.modes.TEXTAREA: vimperator.log("switching from mode " + oldmode + " to mode " + newmode, 7);
case vimperator.modes.INSERT:
vimperator.editor.unselectText();
break;
case vimperator.modes.VISUAL: switch (oldmode)
if (newmode == vimperator.modes.CARET) {
{ case vimperator.modes.TEXTAREA:
case vimperator.modes.INSERT:
vimperator.editor.unselectText();
break;
case vimperator.modes.VISUAL:
if (newmode == vimperator.modes.CARET)
{
// clear any selection made // clear any selection made
var selection = window.content.getSelection(); var selection = window.content.getSelection();
if (selection) if (selection)
selection.collapseToStart(); selection.collapseToStart();
} }
else else
vimperator.editor.unselectText(); vimperator.editor.unselectText();
break; break;
case vimperator.modes.HINTS: case vimperator.modes.HINTS:
// XXX: for now this does not work, but later it should be here // XXX: for now this does not work, but later it should be here
// vimperator.hints.disableHahMode(); // vimperator.hints.disableHahMode();
break; break;
} }
if (newmode == vimperator.modes.NORMAL) if (newmode == vimperator.modes.NORMAL)
{ {
var value = Options.getFirefoxPref("accessibility.browsewithcaret", false); var value = Options.getFirefoxPref("accessibility.browsewithcaret", false);
if (value) if (value)
Options.setFirefoxPref("accessibility.browsewithcaret", false); Options.setFirefoxPref("accessibility.browsewithcaret", false);
vimperator.statusline.updateUrl(); vimperator.statusline.updateUrl();
vimperator.focusContent(); vimperator.focusContent();
} }
} }
return { return {
// main modes, only one should ever be active // main modes, only one should ever be active
NONE: 0, NONE: 0,
NORMAL: 1 << 0, NORMAL: 1 << 0,
INSERT: 1 << 1, INSERT: 1 << 1,
VISUAL: 1 << 2, VISUAL: 1 << 2,
HINTS: 1 << 3, HINTS: 1 << 3,
COMMAND_LINE: 1 << 4, COMMAND_LINE: 1 << 4,
CARET: 1 << 5, // text cursor is visible CARET: 1 << 5, // text cursor is visible
TEXTAREA: 1 << 6, // text cursor is in a HTMLTextAreaElement TEXTAREA: 1 << 6, // text cursor is in a HTMLTextAreaElement
// extended modes, can include multiple modes, and even main modes // extended modes, can include multiple modes, and even main modes
EX: 1 << 10, EX: 1 << 10,
INPUT_MULTILINE: 1 << 11, INPUT_MULTILINE: 1 << 11,
OUTPUT_MULTILINE: 1 << 12, OUTPUT_MULTILINE: 1 << 12,
SEARCH_FORWARD: 1 << 13, SEARCH_FORWARD: 1 << 13,
SEARCH_BACKWARD: 1 << 14, SEARCH_BACKWARD: 1 << 14,
QUICK_HINT: 1 << 15, QUICK_HINT: 1 << 15,
EXTENDED_HINT: 1 << 16, EXTENDED_HINT: 1 << 16,
ALWAYS_HINT: 1 << 17, ALWAYS_HINT: 1 << 17,
MENU: 1 << 18, // a popupmenu is active MENU: 1 << 18, // a popupmenu is active
LINE: 1 << 19, // linewise visual mode LINE: 1 << 19, // linewise visual mode
reset: function(silent) reset: function(silent)
{ {
this.set(vimperator.modes.NORMAL, vimperator.modes.NONE, silent); this.set(vimperator.modes.NORMAL, vimperator.modes.NONE, silent);
}, },
show: function() show: function()
{ {
if (!vimperator.options["showmode"]) if (!vimperator.options["showmode"])
return; return;
// never show mode messages if we are in command line mode // never show mode messages if we are in command line mode
if (main == vimperator.modes.COMMAND_LINE) if (main == vimperator.modes.COMMAND_LINE)
return; return;
var msg = getModeMessage(); var msg = getModeMessage();
if (msg) if (msg)
vimperator.commandline.echo("-- " + getModeMessage() + " --"); vimperator.commandline.echo("-- " + getModeMessage() + " --");
else else
vimperator.commandline.echo(""); vimperator.commandline.echo("");
}, },
// helper function to set both modes in one go // helper function to set both modes in one go
set: function(main_mode, extended_mode, silent) set: function(main_mode, extended_mode, silent)
{ {
// if a main mode is set, the extended is always cleared // if a main mode is set, the extended is always cleared
if (typeof main_mode === "number") if (typeof main_mode === "number")
{ {
if (main_mode != main) if (main_mode != main)
handleModeChange(main, main_mode); handleModeChange(main, main_mode);
main = main_mode; main = main_mode;
if (!extended_mode) if (!extended_mode)
extended = vimperator.modes.NONE; extended = vimperator.modes.NONE;
} }
if (typeof extended_mode === "number") if (typeof extended_mode === "number")
extended = extended_mode; extended = extended_mode;
if (!silent) if (!silent)
this.show(); this.show();
}, },
// add/remove always work on the extended mode only // add/remove always work on the extended mode only
add: function(mode) add: function(mode)
{ {
extended |= mode; extended |= mode;
this.show(); this.show();
}, },
remove: function(mode) remove: function(mode)
{ {
extended = (extended | mode) ^ mode; extended = (extended | mode) ^ mode;
this.show(); this.show();
}, },
get passNextKey() { return passNextKey; }, get passNextKey() { return passNextKey; },
set passNextKey(value) { passNextKey = value; this.show(); }, set passNextKey(value) { passNextKey = value; this.show(); },
get passAllKeys() { return passAllKeys; }, get passAllKeys() { return passAllKeys; },
set passAllKeys(value) { passAllKeys = value; this.show(); }, set passAllKeys(value) { passAllKeys = value; this.show(); },
get main() { return main; },
set main(value) {
if (value != main)
handleModeChange(main, value);
main = value; get main() { return main; },
// setting the main mode always resets any extended mode set main(value) {
extended = vimperator.modes.NONE; if (value != main)
this.show(); handleModeChange(main, value);
},
get extended() { return extended; }, main = value;
set extended(value) { // setting the main mode always resets any extended mode
extended = value; this.show(); extended = vimperator.modes.NONE;
} this.show();
} },
get extended() { return extended; },
set extended(value) {
extended = value; this.show();
}
}
})(); })();
// vim: set fdm=marker sw=4 ts=4 et: