diff options
| author | Stephen Blott | 2015-02-03 15:32:00 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2015-02-03 15:32:00 +0000 | 
| commit | d22a66f91a12aef832a87f39a1376b2f97fcfe94 (patch) | |
| tree | 999e83ab6e65710f3a00c41b651625b262411a8d | |
| parent | 71b609e5e23a894a551884f118d3625251c7aad3 (diff) | |
| parent | b082b11942dac88cff4ddb22ae0bc4426cf98bf5 (diff) | |
| download | vimium-d22a66f91a12aef832a87f39a1376b2f97fcfe94.tar.bz2 | |
Merge branch 'find-mode-history'
Conflicts:
	content_scripts/vimium_frontend.coffee
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 69 | ||||
| -rw-r--r-- | lib/keyboard_utils.coffee | 2 | 
2 files changed, 56 insertions, 15 deletions
| diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 56aabdca..a9e44ed2 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -48,7 +48,7 @@ settings =    values: {}    loadedValues: 0    valuesToLoad: ["scrollStepSize", "linkHintCharacters", "linkHintNumbers", "filterLinkHints", "hideHud", -    "previousPatterns", "nextPatterns", "findModeRawQuery", "regexFindMode", "userDefinedLinkHintCss", +    "previousPatterns", "nextPatterns", "findModeRawQuery", "findModeRawQueryList", "regexFindMode", "userDefinedLinkHintCss",      "helpDialog_showAdvancedCommands", "smoothScroll"]    isLoaded: false    eventListeners: {} @@ -666,6 +666,28 @@ exitInsertMode = (target) ->  isInsertMode = ->    return false # Disabled. +# This implements a find-mode query history (using the "findModeRawQueryList" setting) as a list of raw +# queries, most recent first. +FindModeHistory = +  getQuery: (index = 0) -> +    @migration() +    recentQueries = settings.get "findModeRawQueryList" +    if index < recentQueries.length then recentQueries[index] else "" + +  recordQuery: (query) -> +    @migration() +    if 0 < query.length +      recentQueries = settings.get "findModeRawQueryList" +      settings.set "findModeRawQueryList", ([ query ].concat recentQueries.filter (q) -> q != query)[0..50] + +  # Migration (from 1.49, 2015/2/1). +  # Legacy setting: findModeRawQuery (a string). +  # New setting: findModeRawQueryList (a list of strings). +  migration: -> +    unless settings.get "findModeRawQueryList" +      rawQuery = settings.get "findModeRawQuery" +      settings.set "findModeRawQueryList", (if rawQuery then [ rawQuery ] else []) +  # should be called whenever rawQuery is modified.  updateFindModeQuery = ->    # the query can be treated differently (e.g. as a plain string versus regex depending on the presence of @@ -692,6 +714,9 @@ updateFindModeQuery = ->    # default to 'smartcase' mode, unless noIgnoreCase is explicitly specified    findModeQuery.ignoreCase = !hasNoIgnoreCaseFlag && !Utils.hasUpperCase(findModeQuery.parsedQuery) +  # Don't count matches in the HUD. +  HUD.hide(true) +    # if we are dealing with a regex, grep for all matches in the text, and then call window.find() on them    # sequentially so the browser handles the scrolling / text selection.    if findModeQuery.isRegex @@ -717,12 +742,15 @@ updateFindModeQuery = ->      text = document.body.innerText      findModeQuery.matchCount = text.match(pattern)?.length -handleKeyCharForFindMode = (keyChar) -> -  findModeQuery.rawQuery += keyChar +updateQueryForFindMode = (rawQuery) -> +  findModeQuery.rawQuery = rawQuery    updateFindModeQuery()    performFindInPlace()    showFindModeHUDForQuery() +handleKeyCharForFindMode = (keyChar) -> +  updateQueryForFindMode findModeQuery.rawQuery + keyChar +  handleEscapeForFindMode = ->    exitFindMode()    document.body.classList.remove("vimiumFindMode") @@ -735,17 +763,14 @@ handleEscapeForFindMode = ->      window.getSelection().addRange(range)    focusFoundLink() || selectFoundInputElement() -# Return if character deleted, false otherwise. +# Return true if character deleted, false otherwise.  handleDeleteForFindMode = -> -  if (findModeQuery.rawQuery.length == 0) +  if findModeQuery.rawQuery.length == 0      exitFindMode()      performFindInPlace()      false    else -    findModeQuery.rawQuery = findModeQuery.rawQuery.substring(0, findModeQuery.rawQuery.length - 1) -    updateFindModeQuery() -    performFindInPlace() -    showFindModeHUDForQuery() +    updateQueryForFindMode findModeQuery.rawQuery.substring(0, findModeQuery.rawQuery.length - 1)      true  # <esc> sends us into insert mode if possible, but <cr> does not. @@ -755,10 +780,12 @@ handleEnterForFindMode = ->    exitFindMode()    focusFoundLink()    document.body.classList.add("vimiumFindMode") -  settings.set("findModeRawQuery", findModeQuery.rawQuery) +  FindModeHistory.recordQuery findModeQuery.rawQuery  class FindMode extends Mode    constructor: -> +    @historyIndex = -1 +    @partialQuery = ""      super        name: "find"        badge: "/" @@ -773,6 +800,17 @@ class FindMode extends Mode            handleEnterForFindMode()            @exit()            @suppressEvent +        else if event.keyCode == keyCodes.upArrow +          if rawQuery = FindModeHistory.getQuery @historyIndex + 1 +            @historyIndex += 1 +            @partialQuery = findModeQuery.rawQuery if @historyIndex == 0 +            updateQueryForFindMode rawQuery +          @suppressEvent +        else if event.keyCode == keyCodes.downArrow +          @historyIndex = Math.max -1, @historyIndex - 1 +          rawQuery = if 0 <= @historyIndex then FindModeHistory.getQuery @historyIndex else @partialQuery +          updateQueryForFindMode rawQuery +          @suppressEvent          else            DomUtils.suppressPropagation(event)            handlerStack.stopBubblingAndFalse @@ -858,7 +896,7 @@ getNextQueryFromRegexMatches = (stepSize) ->  findAndFocus = (backwards) ->    # check if the query has been changed by a script in another frame -  mostRecentQuery = settings.get("findModeRawQuery") || "" +  mostRecentQuery = FindModeHistory.getQuery()    if (mostRecentQuery != findModeQuery.rawQuery)      findModeQuery.rawQuery = mostRecentQuery      updateFindModeQuery() @@ -984,10 +1022,13 @@ window.goNext = ->    findAndFollowRel("next") || findAndFollowLink(nextStrings)  showFindModeHUDForQuery = -> -  if (findModeQueryHasResults || findModeQuery.parsedQuery.length == 0) -    HUD.show("/" + findModeQuery.rawQuery + " (" + findModeQuery.matchCount + " Matches)") -  else +  if findModeQuery.rawQuery and (findModeQueryHasResults || findModeQuery.parsedQuery.length == 0) +    plural = if findModeQuery.matchCount == 1 then "" else "es" +    HUD.show("/" + findModeQuery.rawQuery + " (" + findModeQuery.matchCount + " Match#{plural})") +  else if findModeQuery.rawQuery      HUD.show("/" + findModeQuery.rawQuery + " (No Matches)") +  else +    HUD.show("/")  getCurrentRange = ->    selection = getSelection() diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 30d99656..693c9b1c 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -1,7 +1,7 @@  KeyboardUtils =    keyCodes:      { ESC: 27, backspace: 8, deleteKey: 46, enter: 13, space: 32, shiftKey: 16, ctrlKey: 17, f1: 112, -    f12: 123, tab: 9 } +    f12: 123, tab: 9, downArrow: 40, upArrow: 38 }    keyNames:      { 37: "left", 38: "up", 39: "right", 40: "down" } | 
