   # 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.
+  # The "swap" command option inverts global and local marks.
   isGlobalMark: (event, keyChar) ->
-    event.shiftKey and keyChar not in @previousPositionRegisters
+    shiftKey = event.shiftKey
+    shiftKey = not shiftKey if @currentRegistryEntry.options.swap
+    shiftKey and keyChar not in @previousPositionRegisters
 
-  activateCreateMode: ->
+  activateCreateMode: (count, {registryEntry}) ->
+    @currentRegistryEntry = registryEntry
     @mode = new Mode
       name: "create-mark"
       indicator: "Create mark..."

Marks =
  previousPositionRegisters: [ "`", "'" ]
  localRegisters: {}
  mode: null

  exit: (continuation = null) ->

            localStorage[@getLocationKey keyChar] = @getMarkString()
            @showMessage "Created local mark", keyChar

  activateGotoMode: (count, {registryEntry}) ->
    @currentRegistryEntry = registryEntry
    @mode = new Mode
      name: "goto-mark"
      indicator: "Go to mark..."
