aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content_scripts/marks.coffee13
1 files changed, 8 insertions, 5 deletions
diff --git a/content_scripts/marks.coffee b/content_scripts/marks.coffee
index f569e1ea..067d05a8 100644
--- a/content_scripts/marks.coffee
+++ b/content_scripts/marks.coffee
@@ -23,6 +23,12 @@ Marks =
showMessage: (message, keyChar) ->
HUD.showForDuration "#{message} \"#{keyChar}\".", 1000
+ # If <Shift> is depressed, then it's a global mark, otherwise it's a local mark. This is consistent
+ # vim's [A-Z] for global marks and [a-z] for local marks. However, it also admits other non-Latin
+ # characters. The exceptions are "`" and "'", which are always considered local marks.
+ isGlobalMark: (event, keyChar) ->
+ event.shiftKey and keyChar not in @previousPositionRegisters
+
activateCreateMode: ->
@mode = new Mode
name: "create-mark"
@@ -31,11 +37,8 @@ Marks =
suppressAllKeyboardEvents: true
keypress: (event) =>
keyChar = String.fromCharCode event.charCode
- # If <Shift> is depressed, then it's a global mark, otherwise it's a local mark. This is consistent
- # vim's [A-Z] for global marks, [a-z] for local marks. However, it also admits other non-Latin
- # characters.
@exit =>
- if event.shiftKey
+ if @isGlobalMark event, keyChar
# We record the current scroll position, but only if this is the top frame within the tab.
# Otherwise, we'll fetch the scroll position of the top frame from the background page later.
[ scrollX, scrollY ] = [ window.scrollX, window.scrollY ] if DomUtils.isTopFrame()
@@ -58,7 +61,7 @@ Marks =
keypress: (event) =>
@exit =>
keyChar = String.fromCharCode event.charCode
- if event.shiftKey
+ if @isGlobalMark event, keyChar
chrome.runtime.sendMessage
handler: 'gotoMark'
markName: keyChar