1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-06 18:24:11 +01:00

First commit of caret mode, many things work, some bugs of course, not sure if we can fix them since

we heavily rely on the firefox interface for it.
This commit is contained in:
Martin Stubenschrott
2007-09-06 16:10:25 +00:00
parent 5f6958521e
commit d9888288f3
3 changed files with 214 additions and 49 deletions

View File

@@ -1208,7 +1208,7 @@ function Mappings() //{{{
always_active: true
}
));
addDefaultMap(new Map(vimperator.modes.HINTS, ["<Esc>"],
addDefaultMap(new Map(vimperator.modes.HINTS, ["<Esc>", "<C-[>", "<C-c>"],
function() { ; },
{
cancel_mode: true,
@@ -1217,6 +1217,166 @@ function Mappings() //{{{
));
//}}}
//}}}
// Caret mode
function getSelectionController()
{
return getBrowser().docShell
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsISelectionDisplay)
.QueryInterface(Components.interfaces.nsISelectionController);
}
// prevent beeping on esc, should unify
addDefaultMap(new Map(vimperator.modes.CARET, ["<Esc>", "<C-[>", "<C-c>"],
function()
{
if (!vimperator.hasMode(vimperator.modes.VISUAL))
vimperator.onEscape();
else
{
vimperator.removeMode(null, vimperator.modes.VISUAL);
// clear any selection made
// FIXME: need to make more general to allow caret/visual mode also for text fields
var selection = window.content.getSelection();
selection.collapseToStart();
}
},
{ }
));
addDefaultMap(new Map(vimperator.modes.CARET, ["v"],
function(count)
{
vimperator.addMode(null, vimperator.modes.VISUAL);
},
{
short_help: "Start visual mode",
help: "Must be in caret mode for now, later also for text fields"
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["j", "<Down>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().lineMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["k", "<Up>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().lineMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["h", "<Left>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().characterMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["l", "<Right>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().characterMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["b", "B"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().wordMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["w", "W"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().wordMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["<C-f>", "<PageDown>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().pageMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["<C-b>", "<PageUp>"],
function(count)
{
if (count < 1) count = 1;
while(count--)
getSelectionController().pageMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{
flags: Mappings.flags.COUNT
}
));
addDefaultMap(new Map(vimperator.modes.CARET, ["gg", "<C-Home>"],
function(count)
{
getSelectionController().completeMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{ }
));
addDefaultMap(new Map(vimperator.modes.CARET, ["G", "<C-End>"],
function(count)
{
// no count support for now
getSelectionController().completeMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{ }
));
addDefaultMap(new Map(vimperator.modes.CARET, ["0", "^"],
function(count)
{
getSelectionController().intraLineMove(false, vimperator.hasMode(vimperator.modes.VISUAL));
},
{ }
));
addDefaultMap(new Map(vimperator.modes.CARET, ["$"],
function(count)
{
getSelectionController().intraLineMove(true, vimperator.hasMode(vimperator.modes.VISUAL));
},
{ }
));
} //}}}
// vim: set fdm=marker sw=4 ts=4 et: