1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-03-03 18:35:46 +01:00

- Made ? work much better now

- backspacing over the prompt works again
This commit is contained in:
Martin Stubenschrott
2007-09-02 02:27:20 +00:00
parent 3a2ca780f2
commit c4758302aa
2 changed files with 27 additions and 18 deletions

View File

@@ -32,8 +32,10 @@ the terms of any one of the MPL, the GPL or the LGPL.
function Search() //{{{ function Search() //{{{
{ {
var self = this; // needed for callbacks since "this" is the "vimperator" object in a callback var self = this; // needed for callbacks since "this" is the "vimperator" object in a callback
var lastsearch = ""; // keep track of the last searched string
var found = false; // true if the last search was successful var found = false; // true if the last search was successful
var backwards = false;
var lastsearch = ""; // keep track of the last searched string
var lastsearch_backwards = false; // like "backwards", but for the last search, so if you cancel a search with <esc> this is not set
// Event handlers for search - closure is needed // Event handlers for search - closure is needed
vimperator.registerCallback("change", vimperator.modes.SEARCH_FORWARD, function(command){ self.searchKeyPressed(command); }); vimperator.registerCallback("change", vimperator.modes.SEARCH_FORWARD, function(command){ self.searchKeyPressed(command); });
@@ -49,9 +51,15 @@ function Search() //{{{
this.openSearchDialog = function(mode) this.openSearchDialog = function(mode)
{ {
if (mode == vimperator.modes.SEARCH_BACKWARD) if (mode == vimperator.modes.SEARCH_BACKWARD)
{
vimperator.commandline.open('?', '', vimperator.modes.SEARCH_BACKWARD); vimperator.commandline.open('?', '', vimperator.modes.SEARCH_BACKWARD);
backwards = true;
}
else else
{
vimperator.commandline.open('/', '', vimperator.modes.SEARCH_FORWARD); vimperator.commandline.open('/', '', vimperator.modes.SEARCH_FORWARD);
backwards = false;
}
// TODO: focus the top of the currently visible screen // TODO: focus the top of the currently visible screen
} }
@@ -64,9 +72,9 @@ function Search() //{{{
const FIND_TYPEAHEAD = 1; const FIND_TYPEAHEAD = 1;
const FIND_LINKS = 2; const FIND_LINKS = 2;
getBrowser().fastFind.find(str, false); found = getBrowser().fastFind.find(str, false) != Components.interfaces.nsITypeAheadFind.FIND_NOTFOUND;
return Components.interfaces.nsITypeAheadFind.FIND_FOUND ? true : false; return found;
} }
// Called when the current search needs to be repeated // Called when the current search needs to be repeated
@@ -75,10 +83,13 @@ function Search() //{{{
// this hack is needed to make n/N work with the correct string, if // this hack is needed to make n/N work with the correct string, if
// we typed /foo<esc> after the original search // we typed /foo<esc> after the original search
if (getBrowser().fastFind.searchString != lastsearch) if (getBrowser().fastFind.searchString != lastsearch)
{
this.clear();
this.find(lastsearch, false); this.find(lastsearch, false);
gFindBar._highlightDoc("yellow", "black", lastsearch);
}
var backward = vimperator.hasMode(vimperator.modes.SEARCH_BACKWARD); var up = reverse ? !lastsearch_backwards : lastsearch_backwards;
var up = reverse ? !backward : backward;
var result = getBrowser().fastFind.findAgain(up, false); var result = getBrowser().fastFind.findAgain(up, false);
if (result == Components.interfaces.nsITypeAheadFind.FIND_NOTFOUND) if (result == Components.interfaces.nsITypeAheadFind.FIND_NOTFOUND)
@@ -94,6 +105,8 @@ function Search() //{{{
vimperator.echoerr("search hit BOTTOM, continuing at TOP"); vimperator.echoerr("search hit BOTTOM, continuing at TOP");
}, 10); }, 10);
} }
else // just clear the command line if something has been found
vimperator.echo("");
} }
// Called when the user types a key in the search dialog. Triggers a find attempt // Called when the user types a key in the search dialog. Triggers a find attempt
@@ -107,24 +120,19 @@ function Search() //{{{
// Called when the enter key is pressed to trigger a search // Called when the enter key is pressed to trigger a search
this.searchSubmitted = function(command) this.searchSubmitted = function(command)
{ {
this.clear();
gFindBar._highlightDoc("yellow", "black", command); gFindBar._highlightDoc("yellow", "black", command);
// need to find again to draw the highlight of the current search // need to find again to draw the highlight of the current search
// result over the "highlight all" search results // result over the "highlight all" search results
if (found) // very hacky, but seem to work
{ setTimeout(function() { self.findAgain(false); }, 10);
// XXX: still not really working everywhere, inspite of this
setTimeout(function() { lastsearch_backwards = backwards;
var backward = vimperator.hasMode(vimperator.modes.SEARCH_BACKWARD); lastsearch = command;
this.find(command, backward);
}, 100);
}
//removeMode(MODE_SEARCH);
vimperator.setMode(vimperator.modes.NORMAL); vimperator.setMode(vimperator.modes.NORMAL);
vimperator.focusContent(); vimperator.focusContent();
lastsearch = command;
} }
// Called when the search is cancelled - for example if someone presses // Called when the search is cancelled - for example if someone presses
@@ -133,7 +141,6 @@ function Search() //{{{
{ {
//removeMode(MODE_SEARCH); //removeMode(MODE_SEARCH);
vimperator.setMode(vimperator.modes.NORMAL); vimperator.setMode(vimperator.modes.NORMAL);
//gFindBar._highlightDoc();
this.clear(); this.clear();
vimperator.focusContent(); vimperator.focusContent();
} }

View File

@@ -528,8 +528,10 @@ function CommandLine() //{{{
// and blur the command line if there is no text left // and blur the command line if there is no text left
if (command.length == 0) if (command.length == 0)
{ {
this.clear(); vimperator.triggerCallback("cancel", cur_extended_mode);
vimperator.setMode(old_mode, old_extended_mode);
vimperator.focusContent(); vimperator.focusContent();
this.clear();
} }
} }
else // any other key else // any other key