diff --git a/Makefile b/Makefile index e44d7b9c..c0c3842b 100644 --- a/Makefile +++ b/Makefile @@ -9,5 +9,6 @@ $(TARGETS:%=\%.%): echo MAKE $@ $(MAKE) -C $* $(@:$*.%=%) -$(TARGETS): %: $(DIRS:%=%.%) +$(TARGETS): + $(MAKE) $(DIRS:%=%.$@) diff --git a/common/content/commands.js b/common/content/commands.js index 170568b1..d6417a23 100644 --- a/common/content/commands.js +++ b/common/content/commands.js @@ -573,7 +573,7 @@ function Commands() //{{{ count++; // to compensate the "=" character } - else if (!/\s/.test(sep)) // this isn't really an option as it has trailing characters, parse it as an argument + else if (!/\s/.test(sep) && sep != undefined) // this isn't really an option as it has trailing characters, parse it as an argument { invalid = true; } diff --git a/common/content/hints.js b/common/content/hints.js index 12f0ac57..d349ce58 100644 --- a/common/content/hints.js +++ b/common/content/hints.js @@ -399,87 +399,51 @@ function Hints() //{{{ let wordSplitRegex = RegExp(options["wordseparators"]); // What the **** does this do? --Kris + // + // This function matches hintStrings like 'hekho' to links like 'Hey Kris, how are you?' -> [HE]y [K]ris [HO]w are you --Daniel function charsAtBeginningOfWords(chars, words, allowWordOverleaping) { - let charIdx = 0; - let numMatchedWords = 0; - for (let [,word] in Iterator(words)) + function charMatches(charIdx, chars, wordIdx, words, inWordIdx, allowWordOverleaping) { - if (word.length == 0) - continue; - - let wcIdx = 0; - // Check if the current word matches same characters as the previous word. - // Each already matched word has matched at least one character. - if (charIdx > numMatchedWords) + let matches = (chars[charIdx] == words[wordIdx][inWordIdx]); + if ((matches == false && allowWordOverleaping) || words[wordIdx].length == 0) { - let matchingStarted = false; - for (let i in util.range(numMatchedWords, charIdx)) - { - if (chars[i] == word[wcIdx]) - { - matchingStarted = true; - wcIdx++; - } - else if (matchingStarted) - { - wcIdx = 0; - break; - } - } + let nextWordIdx = wordIdx + 1; + if (nextWordIdx == words.length) + return false; + + return charMatches(charIdx, chars, nextWordIdx, words, 0, allowWordOverleaping); } - // the current word matches same characters as the previous word - let prevCharIdx; - if (wcIdx > 0) + if (matches) { - prevCharIdx = charIdx; - // now check if it matches additional characters - for (; wcIdx < word.length && charIdx < chars.length; wcIdx++, charIdx++) - { - if (word[wcIdx] != chars[charIdx]) - break; - } + let nextCharIdx = charIdx + 1; + if (nextCharIdx == chars.length) + return true; - // the word doesn't match additional characters, now check if the - // already matched characters are equal to the next characters for matching, - // if yes, then consume them - if (prevCharIdx == charIdx) - { - for (let i = 0; i < wcIdx && charIdx < chars.length; i++, charIdx++) - { - if (word[i] != chars[charIdx]) - break; - } - } + let nextWordIdx = wordIdx + 1; + let beyondLastWord = (nextWordIdx == words.length); + let charMatched = false; + if (beyondLastWord == false) + charMatched = charMatches(nextCharIdx, chars, nextWordIdx, words, 0, allowWordOverleaping) - numMatchedWords++; - } - // the current word doesn't match same characters as the previous word, just - // try to match the next characters - else - { - prevCharIdx = charIdx; - for (let i = 0; i < word.length && charIdx < chars.length; i++, charIdx++) - { - if (word[i] != chars[charIdx]) - break; - } + if (charMatched) + return true; - if (prevCharIdx == charIdx) + if (charMatched == false || beyondLastWord == true) { - if (!allowWordOverleaping) + let nextInWordIdx = inWordIdx + 1; + if (nextInWordIdx == words[wordIdx].length) return false; + + return charMatches(nextCharIdx, chars, wordIdx, words, nextInWordIdx, allowWordOverleaping); } - else - numMatchedWords++; } - if (charIdx == chars.length) - return true; + return false; } - return (charIdx == chars.length); + return charMatches(0, chars, 0, words, 0, allowWordOverleaping); } function stringsAtBeginningOfWords(strings, words, allowWordOverleaping) diff --git a/common/content/ui.js b/common/content/ui.js index 622fb6ac..9e3112ca 100644 --- a/common/content/ui.js +++ b/common/content/ui.js @@ -1274,7 +1274,8 @@ function CommandLine() //{{{ } else if (event.type == "input") { - //this.resetCompletions(); -> already handled by "keypress" below (hopefully), so don't do it twice + //liberator.dump("input: " + command); + this.resetCompletions(); liberator.triggerCallback("change", currentExtendedMode, command); } else if (event.type == "keypress") @@ -1322,7 +1323,7 @@ function CommandLine() //{{{ else if (key == "") { // reset the tab completion - this.resetCompletions(); + //this.resetCompletions(); // and blur the command line if there is no text left if (command.length == 0) @@ -1333,7 +1334,7 @@ function CommandLine() //{{{ } else // any other key { - this.resetCompletions(); + //this.resetCompletions(); } return true; // allow this event to be handled by Firefox } @@ -1758,7 +1759,7 @@ function ItemList(id) //{{{ , divNodes); doc.body.replaceChild(div, doc.body.firstChild); - div.scrollIntoView(true); + //div.scrollIntoView(true); items.contextList.forEach(function init_eachContext(context) { delete context.cache.nodes; @@ -1941,7 +1942,7 @@ function ItemList(id) //{{{ if (index >= 0) { getCompletion(index).setAttribute("selected", "true"); - getCompletion(index).scrollIntoView(false); + //getCompletion(index).scrollIntoView(false); } //if (index == 0) diff --git a/muttator/content/mail.js b/muttator/content/mail.js index 61242230..1e523167 100644 --- a/muttator/content/mail.js +++ b/muttator/content/mail.js @@ -995,12 +995,13 @@ function Mail() //{{{ // TODO: find out why, and solve the problem try { - var msgs = folder.getMessages(msgWindow); + var msgs = folder.messages; } catch (e) { - liberator.dump("ERROR: " + folder.prettyName + " failed to getMessages\n"); - continue; + var msgs = folder.getMessages(msgWindow); // for older thunderbirds + liberator.dump("WARNING: " + folder.prettyName + " failed to getMessages, trying old API"); + //continue; } while (msgs.hasMoreElements()) diff --git a/muttator/install.rdf b/muttator/install.rdf index e02650d2..3785bda0 100644 --- a/muttator/install.rdf +++ b/muttator/install.rdf @@ -1,28 +1,28 @@ - - - - - - muttator@mozdev.org - Muttator - ###VERSION### - Make Thunderbird behave like Vim - Martin Stubenschrott - http://vimperator.org/ - chrome://muttator/skin/icon.png - - - content/muttator/ - - - - - - {3550f703-e582-4d05-9a08-453d09bdfdc6} - 3.0a1pre - 3.0b2pre - - - - - + + + + + + muttator@mozdev.org + Muttator + ###VERSION### + Make Thunderbird behave like Vim + Martin Stubenschrott + http://vimperator.org/ + chrome://muttator/skin/icon.png + + + content/muttator/ + + + + + + {3550f703-e582-4d05-9a08-453d09bdfdc6} + 3.0b2pre + 3.0b2 + + + + + diff --git a/vimperator/Donors b/vimperator/Donors index ec93f6f7..9a96542d 100644 --- a/vimperator/Donors +++ b/vimperator/Donors @@ -2,6 +2,11 @@ Contiuous donations: * Daniel Bainton (web hosting) 2009: +* David C Foor +* Oliver Schaefer +* Paul Moss +* Yongji Zhang +* Brian Peiris * Peleg Michaeli ("Every hand revealed" from my amazon.de wishlist) * InspireFocus * Michael Fremont diff --git a/vimperator/TODO b/vimperator/TODO index 7ee8644c..f743c6e3 100644 --- a/vimperator/TODO +++ b/vimperator/TODO @@ -18,6 +18,10 @@ BUGS: - :sidebar improvements (:sidebar! Downloads while downloads is open should refocus the sidebar) - ;s saves the page rather than the image - http://cgiirc.blitzed.org?chan=%23debug is unusable after login in +- "g<" fails without a trailing escape because both "g<" and "g" + are mapped. Vimp should recognize "" as an atom that should not + be matched literally. In fact, typing "g" out literally is + equivalent to typing "g" and then . (recent CVS regressions): - :set noflashblock seems broken (= :set fb? afterwards says "fb"), let's see if that's a @@ -29,10 +33,15 @@ BUGS: => it often overwrites the open command line while editing etc. - and autocmd 'keywords' are not available when adding a bookmark - they're being set after the observer triggers the autocmd event. -- MOW is broken for multiple commands when open E.g. :ls | ls +- MOW rendering is broken for multiple commands when open E.g. :ls | ls - completion height is broken, try :a...., when it wraps it's totally off. and even if it is not totally off, i had it jump by one pixel when wrapping around. If that's unfixable, i propose reverting the new completion height stuff. +- Windows paths have escaped backslashes in messages - presumably due to + String#quote change. +- :messages is _very_ slow for message history of several thousand lines -> + Unresponsive Script: util.js:79 (sometimes xmlToDom() and elsewhere) +- :hardcopy! seems to be broken for me FEATURES: 9 finish :help TODOs @@ -40,6 +49,8 @@ FEATURES: 9 adaptive timeout for auto-completions, :set completions can be updated more often than :open foo 9 use the storage module for autocommands +9 the NEWS file should be more easily available for users, via :help news or something + at the moment you need to unzip the xpi or check the sources to view it, which isn't user friendly 8 support 'activate' in buffer.followLink? Leave this to the bookmarks.tabs.loadInBackground. Hint activation should be nearly equivalent to the corresponding mouse motion, and that @@ -69,7 +80,7 @@ FEATURES: google to another page and click 10 links there, [d would take me back to the google page opera's fast forward does something like this 7 make an option to disable session saving by default when you close Firefox -7 The output of the pageinfo-command sould contain the security-information of ssl-encrypted sites +7 The output of the pageinfo-command should contain the security-information of ssl-encrypted sites 7 Add :every command 6 support private mode (and :set [no]private): http://ehsanakhgari.org/blog/2008-11-08/prepare-your-add-private-browsing 6 add [count] support to :b* and :tab* commands where missing