From debb609882e96590f309daf49b5b3cb4b0d0baf7 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Sun, 1 Sep 2013 01:16:48 +0200 Subject: [PATCH] Fix a likely future bug Now passing an array of arguments to the `enter` method of modes, instead of using splats, in order not to destroy the `this` context of the `enter` methods. --- extension/packages/commands.coffee | 8 ++++---- extension/packages/modes.coffee | 10 +++++----- extension/packages/vim.coffee | 6 ++++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/extension/packages/commands.coffee b/extension/packages/commands.coffee index 68bc84c..1e53f77 100644 --- a/extension/packages/commands.coffee +++ b/extension/packages/commands.coffee @@ -66,13 +66,13 @@ command_marker_yank = (vim) -> else if utils.isTextInputElement(marker.element) utils.writeToClipboard(vim.window, marker.element.value) - vim.enterMode('hints', markers, cb) + vim.enterMode('hints', [markers, cb]) # Focus element command_marker_focus = (vim) -> markers = hints.injectHints(vim.window.document) if markers.length > 0 - vim.enterMode('hints', markers, (marker) -> marker.element.focus()) + vim.enterMode('hints', [markers, (marker) -> marker.element.focus()]) # Copy current URL to the clipboard command_yank = (vim) -> @@ -211,7 +211,7 @@ command_follow = (vim) -> marker.element.focus() utils.simulateClick(marker.element) - vim.enterMode('hints', markers, cb) + vim.enterMode('hints', [markers, cb]) # Follow links in a new Tab with hint markers command_follow_in_tab = (vim) -> @@ -222,7 +222,7 @@ command_follow_in_tab = (vim) -> marker.element.focus() utils.simulateClick(marker.element, { metaKey: true, ctrlKey: true }) - vim.enterMode('hints', markers, cb) + vim.enterMode('hints', [markers, cb]) # Move current tab to the left command_tab_move_left = (vim) -> diff --git a/extension/packages/modes.coffee b/extension/packages/modes.coffee index ff5ea94..8f670d7 100644 --- a/extension/packages/modes.coffee +++ b/extension/packages/modes.coffee @@ -2,7 +2,7 @@ utils = require 'utils' hints = require 'hints' mode_hints = - enter: (vim, storage, markers, cb) -> + enter: (vim, storage, [ markers, cb ]) -> storage.markers = markers storage.cb = cb @@ -11,6 +11,10 @@ mode_hints = @hintCharHandler(vim, storage, keyStr) return true + onEnterNormalMode: (vim, storage) -> + hints.removeHints(vim.window.document) + storage.markers = storage.cb = undefined + # Processes the char, updates and hides/shows markers hintCharHandler: (vim, storage, keyStr) -> if keyStr @@ -31,10 +35,6 @@ mode_hints = vim.enterNormalMode() break - onEnterNormalMode: (vim, storage) -> - hints.removeHints(vim.window.document) - storage.markers = storage.cb = undefined - modes = hints: mode_hints diff --git a/extension/packages/vim.coffee b/extension/packages/vim.coffee index d61dfe3..201151e 100644 --- a/extension/packages/vim.coffee +++ b/extension/packages/vim.coffee @@ -17,9 +17,11 @@ class Vim for name of @modes @storage.modes[name] = {} - enterMode: (mode, args...) -> + enterMode: (mode, args) -> + # Note: `args` is an array of arguments to be passed to the mode's `enter` method. We cannot use + # `args...`, since that destroys the `this` context for the mode's `enter` method. @mode = mode - @modes[mode].enter(this, @storage.modes[mode], args...) + @modes[mode].enter(this, @storage.modes[mode], args) enterNormalMode: -> for name, mode of @modes -- 2.39.3