         LastEditor.saveDestroyedEditor item
 
   needRemember: (oldBufferPosition, newBufferPosition) ->
-    # console.log [oldBufferPosition, newBufferPosition]
     # Line number delata exceeds or not.
     Math.abs(oldBufferPosition.row - newBufferPosition.row) > @rowDeltaToRemember
 
   # Helpers
   #-----------------
-  withPanel: (panel, {onShow, onHide}) ->
-    [oldEditor, oldPoint, newEditor, newPoint] = []
-    panelSubscription = panel.onDidChangeVisible (visible) =>
-      if visible
-        @lock panel.getItem().constructor.name
-        {editor: oldEditor, point: oldPoint} = onShow()
-      else
-        # ProjectView delayed changing cursor position after panel hidden(),
-        setTimeout =>
-          {editor: newEditor, point: newPoint} = onHide()
-
-          # FIXME: oldPoint sometimes became undefined, so need to guard
-          if oldPoint and newPoint and @needRemember(oldPoint, newPoint)
-            @history.add oldEditor, oldPoint, oldEditor.getURI(), dumpMessage: "[Cursor moved] save history"
-          @unLock()
-        , 300
-
-    @subscriptions.add panel.onDidDestroy ->
-      panelSubscription.dispose()
-
   lock:     -> @locked = true
   unLock:   -> @locked = false
   isLocked: -> @locked
 
   jump: (direction) ->
     # Settings tab is not TextEditor instance.
-    return unless activeEditor = @getEditor()
-    return unless entry = @history["get#{direction}"]()
+    return unless editor = @getEditor()
+    return unless entry  = @history["get#{direction}"]()
 
     if direction is 'Prev' and @history.isNewest()
-      point = activeEditor.getCursorBufferPosition()
-      URI   = activeEditor.getURI()
-      @history.pushToHead activeEditor, point, URI
+      point = @getPosition()
+      URI   = editor.getURI()
+      @history.pushToHead editor, point, URI
 
     @lock()
 
     {URI, point} = entry
-
-    if activeEditor.getURI() is URI # Same pane.
+    if editor.getURI() is URI # Same pane.
       # Intentionally disable `autoscroll` to set cursor position middle of
       # screen afterward.
-      activeEditor.setCursorBufferPosition point, autoscroll: false
+      editor.setCursorBufferPosition point, autoscroll: false
       # Adjust cursor position to middle of screen.
-      activeEditor.scrollToCursorPosition()
+      editor.scrollToCursorPosition()
       @land direction
     else
       # Jump to different pane

    @subscriptions.add @observeTextEditors()
    @subscriptions.add @observeActivePaneItem()
    @subscriptions.add @observeOnWillDestroyPaneItem()
    # @subscriptions.add @extendSymbolsView()

  deactivate: ->
    for editorID, disposables of @editorSubscriptions

  getEditor: ->
    atom.workspace.getActiveTextEditor()

  getPosition: (editor=@getEditor())->
    editor.getCursorBufferPosition()

  dump: ->
    console.log @isLocked()
    @history.dump '', true
