Repository: spyder-ide/spyder

Issue:
Go to previous cursor position not working
<!--- **PLEASE READ:** When submitting here, please ensure you've completed the following checklist and checked the boxes to confirm. Issue reports without it may be closed. Thanks! --->

## Problem Description
Go to previous/next cursor position is not working.  I assigned the short cut Alt + <-  for go to previous cursor position and Alt + -> for go to next cursor position (it is also not working if I use the default settings). Like you can see in the giff I can just not go to the previous edited line. I also added a giff that shows the behavior in an other IDE (Qt Creator):

![spyder_ide](https://user-images.githubusercontent.com/5442389/75668256-55e39d80-5c79-11ea-99c5-66120035f9a9.gif)

![qt_creator](https://user-images.githubusercontent.com/5442389/75668263-57ad6100-5c79-11ea-922c-55303effff57.gif)

This bug/behavior is annoying me since a long time. I would really appreciate a better navigation behavior. I would really recommend to checkout Qt Creator for good navigation practice. If you fix it you will make me very happ and  I will increase my donations to spyder :D 


## Versions
Ubuntu 18.04.3 LTS

<details>
  <summary>conda list:</summary>
  
  ##  Name                    Version                   Build  Channel
_anaconda_depends         2019.03                  py37_0  
_ipyw_jlab_nb_ext_conf    0.1.0                    py37_0  
_libgcc_mutex             0.1                        main  
alabaster                 0.7.12                   py37_0  
anaconda                  custom                   py37_1  
anaconda-client           1.7.2                    py37_0  
anaconda-navigator        1.9.7                    py37_0  
anaconda-project          0.8.4                      py_0  
argh                      0.26.2                   py37_0  
asn1crypto                1.3.0                    py37_0  
astroid                   2.3.3                    py37_0  
astropy                   4.0              py37h7b6447c_0  
atomicwrites              1.3.0                    py37_1  
attrs                     19.3.0                     py_0  
autopep8                  1.4.4                      py_0  
babel                     2.8.0                      py_0  
backcall                  0.1.0                    py37_0  
backports                 1.0                        py_2  
backports.functools_lru_cache 1.6.1                      py_0  
backports.os              0.1.1                    py37_0  
backports.shutil_get_terminal_size 1.0.0                    py37_2  
backports.tempfile        1.0                        py_1  
backports.weakref         1.0.post1                  py_1  
beautifulsoup4            4.8.2                    py37_0  
bitarray                  1.2.1            py37h7b6447c_0  
bkcharts                  0.2                      py37_0  
blas                      1.0                         mkl  
bleach                    3.1.0                    py37_0  
blosc                     1.16.3               hd408876_0  
bokeh                     1.4.0                    py37_0  
boto                      2.49.0                   py37_0  
bottleneck                1.3.1            py37hdd07704_0  
bzip2                     1.0.8                h7b6447c_0  
ca-certificates           2020.1.1                      0  
cairo                     1.14.12              h8948797_3  
certifi                   2019.11.28               py37_0  
cffi                      1.13.2           py37h2e261b9_0  
chardet                   3.0.4                 py37_1003  
click                     7.0                      py37_0  
cloudpickle               1.2.2                      py_0  
clyent                    1.2.2                    py37_1  
colorama                  0.4.3                      py_0  
conda                     4.8.2                    py37_0  
conda-build               3.18.9                   py37_3  
conda-env                 2.6.0                         1  
conda-package-handling    1.6.0            py37h7b6447c_0  
conda-verify              3.4.2                      py_1  
contextlib2               0.6.0.post1                py_0  
cryptography              2.8              py37h1ba5d50_0  
curl                      7.68.0               hbc83047_0  
cycler                    0.10.0                   py37_0  
cython                    0.29.14          py37he6710b0_0  
cytoolz                   0.10.1           py37h7b6447c_0  
dask                      2.10.1                     py_0  
dask-core                 2.10.1                     py_0  
dbus                      1.13.12              h746ee38_0  
decorator                 4.4.1                      py_0  
defusedxml                0.6.0                      py_0  
diff-match-patch          20181111                   py_0  
distributed               2.10.0                     py_0  
docutils                  0.16                     py37_0  
entrypoints               0.3                      py37_0  
et_xmlfile                1.0.1                    py37_0  
expat                     2.2.6                he6710b0_0  
fastcache                 1.1.0            py37h7b6447c_0  
filelock                  3.0.12                     py_0  
flake8                    3.7.9                    py37_0  
flask                     1.1.1                      py_0  
fontconfig                2.13.0               h9420a91_0  
freetype                  2.9.1                h8a8886c_1  
fribidi                   1.0.5                h7b6447c_0  
fsspec                    0.6.2                      py_0  
future                    0.18.2                   py37_0  
get_terminal_size         1.0.0                haa9412d_0  
gevent                    1.4.0            py37h7b6447c_0  
glib                      2.63.1               h5a9c865_0  
glob2                     0.7                        py_0  
gmp                       6.1.2                h6c8ec71_1  
gmpy2                     2.0.8            py37h10f8cd9_2  
graphite2                 1.3.13               h23475e2_0  
greenlet                  0.4.15           py37h7b6447c_0  
gst-plugins-base          1.14.0               hbbd80ab_1  
gstreamer                 1.14.0               hb453b48_1  
h5py                      2.10.0           py37h7918eee_0  
harfbuzz                  1.8.8                hffaf4a1_0  
hdf5                      1.10.4               hb1b8bf9_0  
heapdict                  1.0.1                      py_0  
html5lib                  1.0.1                    py37_0  
hypothesis                5.4.1                      py_0  
icu                       58.2                 h9c2bf20_1  
idna                      2.8                      py37_0  
imageio                   2.6.1                    py37_0  
imagesize                 1.2.0                      py_0  
importlib_metadata        1.5.0                    py37_0  
inflect                   4.1.0                    py37_0  
intel-openmp              2020.0                      166  
intervaltree              3.0.2                      py_0  
ipykernel                 5.1.4            py37h39e3cac_0  
ipython                   7.12.0           py37h5ca1d4c_0  
ipython_genutils          0.2.0                    py37_0  
ipywidgets                7.5.1                      py_0  
isort                     4.3.21                   py37_0  
itsdangerous              1.1.0                    py37_0  
jaraco.itertools          5.0.0                      py_0  
jbig                      2.1                  hdba287a_0  
jdcal                     1.4.1                      py_0  
jedi                      0.14.1                   py37_0  
jeepney                   0.4.2                      py_0  
jinja2                    2.11.1                     py_0  
joblib                    0.14.1                     py_0  
jpeg                      9b                   h024ee3a_2  
json5                     0.9.0                      py_0  
jsonschema                3.2.0                    py37_0  
jupyter                   1.0.0                    py37_7  
jupyter_client            5.3.4                    py37_0  
jupyter_console           6.1.0                      py_0  
jupyter_core              4.6.1                    py37_0  
jupyterlab                1.2.6              pyhf63ae98_0  
jupyterlab_server         1.0.6                      py_0  
keyring                   21.1.0                   py37_0  
kiwisolver                1.1.0            py37he6710b0_0  
krb5                      1.17.1               h173b8e3_0  
lazy-object-proxy         1.4.3            py37h7b6447c_0  
libarchive                3.3.3                h5d8350f_5  
libcurl                   7.68.0               h20c2e04_0  
libedit                   3.1.20181209         hc058e9b_0  
libffi                    3.2.1                hd88cf55_4  
libgcc-ng                 9.1.0                hdf63c60_0  
libgfortran-ng            7.3.0                hdf63c60_0  
liblief                   0.9.0                h7725739_2  
libpng                    1.6.37               hbc83047_0  
libsodium                 1.0.16               h1bed415_0  
libspatialindex           1.9.3                he6710b0_0  
libssh2                   1.8.2                h1ba5d50_0  
libstdcxx-ng              9.1.0                hdf63c60_0  
libtiff                   4.1.0                h2733197_0  
libtool                   2.4.6                h7b6447c_5  
libuuid                   1.0.3                h1bed415_2  
libxcb                    1.13                 h1bed415_1  
libxml2                   2.9.9                hea5a465_1  
libxslt                   1.1.33               h7d1a2b0_0  
llvmlite                  0.31.0           py37hd408876_0  
locket                    0.2.0                    py37_1  
lxml                      4.5.0            py37hefd8a0e_0  
lz4-c                     1.8.1.2              h14c3975_0  
lzo                       2.10                 h49e0be7_2  
markupsafe                1.1.1            py37h7b6447c_0  
matplotlib                3.1.3                    py37_0  
matplotlib-base           3.1.3            py37hef1b27d_0  
mccabe                    0.6.1                    py37_1  
mistune                   0.8.4            py37h7b6447c_0  
mkl                       2020.0                      166  
mkl-service               2.3.0            py37he904b0f_0  
mkl_fft                   1.0.15           py37ha843d7b_0  
mkl_random                1.1.0            py37hd6b4f25_0  
mock                      3.0.5                    py37_0  
more-itertools            8.2.0                      py_0  
mpc                       1.1.0                h10f8cd9_1  
mpfr                      4.0.1                hdf1c602_3  
mpmath                    1.1.0                    py37_0  
msgpack-python            0.6.1            py37hfd86e86_1  
multipledispatch          0.6.0                    py37_0  
navigator-updater         0.2.1                    py37_0  
nbconvert                 5.6.1                    py37_0  
nbformat                  5.0.4                      py_0  
ncurses                   6.1                  he6710b0_1  
networkx                  2.4                        py_0  
nltk                      3.4.5                    py37_0  
nose                      1.3.7                    py37_2  
notebook                  6.0.3                    py37_0  
numba                     0.48.0           py37h0573a6f_0  
numexpr                   2.7.1            py37h423224d_0  
numpy                     1.18.1           py37h4f9e942_0  
numpy-base                1.18.1           py37hde5b4d6_1  
numpydoc                  0.9.2                      py_0  
olefile                   0.46                     py37_0  
openpyxl                  3.0.3                      py_0  
openssl                   1.1.1d               h7b6447c_4  
packaging                 20.1                       py_0  
pandas                    0.25.1           py37he6710b0_0  
pandoc                    2.2.3.2                       0  
pandocfilters             1.4.2                    py37_1  
pango                     1.42.4               h049681c_0  
parso                     0.5.2                      py_0  
partd                     1.1.0                      py_0  
patchelf                  0.10                 he6710b0_0  
path                      13.1.0                   py37_0  
path.py                   12.4.0                        0  
pathlib2                  2.3.5                    py37_0  
pathtools                 0.1.2                      py_1  
patsy                     0.5.1                    py37_0  
pcre                      8.43                 he6710b0_0  
pep8                      1.7.1                    py37_0  
pexpect                   4.8.0                    py37_0  
pickleshare               0.7.5                    py37_0  
pillow                    7.0.0            py37hb39fc2d_0  
pip                       20.0.2                   py37_1  
pixman                    0.38.0               h7b6447c_0  
pkginfo                   1.5.0.1                  py37_0  
pluggy                    0.13.1                   py37_0  
ply                       3.11                     py37_0  
prometheus_client         0.7.1                      py_0  
prompt_toolkit            3.0.3                      py_0  
psutil                    5.6.7            py37h7b6447c_0  
ptyprocess                0.6.0                    py37_0  
py                        1.8.1                      py_0  
py-lief                   0.9.0            py37h7725739_2  
pycodestyle               2.5.0                    py37_0  
pycosat                   0.6.3            py37h7b6447c_0  
pycparser                 2.19                     py37_0  
pycrypto                  2.6.1            py37h14c3975_9  
pycurl                    7.43.0.5         py37h1ba5d50_0  
pydocstyle                4.0.1                      py_0  
pyflakes                  2.1.1                    py37_0  
pygments                  2.5.2                      py_0  
pylint                    2.4.4                    py37_0  
pyodbc                    4.0.28           py37he6710b0_0  
pyopenssl                 19.1.0                   py37_0  
pyparsing                 2.4.6                      py_0  
pyqt                      5.9.2            py37h05f1152_2  
pyqtgraph                 0.10.0           py37h28b3542_3    anaconda
pyrsistent                0.15.7           py37h7b6447c_0  
pysocks                   1.7.1                    py37_0  
pytables                  3.6.1            py37h71ec239_0  
pytest                    5.3.5                    py37_0  
pytest-arraydiff          0.3              py37h39e3cac_0  
pytest-astropy            0.7.0                      py_0  
pytest-astropy-header     0.1.2                      py_0  
pytest-doctestplus        0.5.0                      py_0  
pytest-openfiles          0.4.0                      py_0  
pytest-remotedata         0.3.2                    py37_0  
python                    3.7.4                h265db76_1  
python-dateutil           2.8.1                      py_0  
python-jsonrpc-server     0.3.4                      py_0  
python-language-server    0.31.7                   py37_0  
python-libarchive-c       2.8                     py37_13  
pytz                      2019.3                     py_0  
pywavelets                1.1.1            py37h7b6447c_0  
pyxdg                     0.26                       py_0  
pyyaml                    5.3              py37h7b6447c_0  
pyzmq                     18.1.1           py37he6710b0_0  
qdarkstyle                2.8                        py_0  
qt                        5.9.7                h5867ecd_1  
qtawesome                 0.6.1                      py_0  
qtconsole                 4.6.0                      py_1  
qtpy                      1.9.0                      py_0  
readline                  7.0                  h7b6447c_5  
requests                  2.22.0                   py37_1  
ripgrep                   11.0.2               he32d670_0  
rope                      0.16.0                     py_0  
rtree                     0.9.3                    py37_0  
ruamel_yaml               0.15.87          py37h7b6447c_0  
scikit-image              0.16.2           py37h0573a6f_0  
scikit-learn              0.22.1           py37hd81dba3_0  
scipy                     1.4.1            py37h0b6359f_0  
seaborn                   0.10.0                     py_0  
secretstorage             3.1.2                    py37_0  
send2trash                1.5.0                    py37_0  
setuptools                45.1.0                   py37_0  
simplegeneric             0.8.1                    py37_2  
singledispatch            3.4.0.3                  py37_0  
sip                       4.19.8           py37hf484d3e_0  
six                       1.14.0                   py37_0  
snappy                    1.1.7                hbae5bb6_3  
snowballstemmer           2.0.0                      py_0  
sortedcollections         1.1.2                    py37_0  
sortedcontainers          2.1.0                    py37_0  
soupsieve                 1.9.5                    py37_0  
sphinx                    2.3.1                      py_0  
sphinxcontrib             1.0                      py37_1  
sphinxcontrib-applehelp   1.0.1                      py_0  
sphinxcontrib-devhelp     1.0.1                      py_0  
sphinxcontrib-htmlhelp    1.0.2                      py_0  
sphinxcontrib-jsmath      1.0.1                      py_0  
sphinxcontrib-qthelp      1.0.2                      py_0  
sphinxcontrib-serializinghtml 1.1.3                      py_0  
sphinxcontrib-websupport  1.1.2                      py_0  
spyder                    4.0.1                    py37_0  
spyder-kernels            1.8.1                    py37_0  
sqlalchemy                1.3.13           py37h7b6447c_0  
sqlite                    3.31.1               h7b6447c_0  
statsmodels               0.11.0           py37h7b6447c_0  
sympy                     1.5.1                    py37_0  
tbb                       2020.0               hfd86e86_0  
tblib                     1.6.0                      py_0  
terminado                 0.8.3                    py37_0  
testpath                  0.4.4                      py_0  
tk                        8.6.8                hbc83047_0  
toolz                     0.10.0                     py_0  
tornado                   6.0.3            py37h7b6447c_0  
tqdm                      4.42.0                     py_0  
traitlets                 4.3.3                    py37_0  
ttictoc                   0.4.1                    pypi_0    pypi
ujson                     1.35             py37h14c3975_0  
unicodecsv                0.14.1                   py37_0  
unixodbc                  2.3.7                h14c3975_0  
urllib3                   1.25.8                   py37_0  
watchdog                  0.10.1                   py37_0  
wcwidth                   0.1.8                      py_0  
webencodings              0.5.1                    py37_1  
werkzeug                  0.16.1                     py_0  
wheel                     0.34.2                   py37_0  
widgetsnbextension        3.5.1                    py37_0  
wrapt                     1.11.2           py37h7b6447c_0  
wurlitzer                 2.0.0                    py37_0  
xlrd                      1.2.0                    py37_0  
xlsxwriter                1.2.7                      py_0  
xlwt                      1.3.0                    py37_0  
xz                        5.2.4                h14c3975_4  
yaml                      0.1.7                had09818_2  
yapf                      0.28.0                     py_0  
zeromq                    4.3.1                he6710b0_3  
zict                      1.0.0                      py_0  
zipp                      2.1.0                      py_0  
zlib                      1.2.11               h7b6447c_3  
zstd                      1.3.7                h0b5b093_0

</details>

### Dependencies

<details>
  <summary>dependencies list</summary>

atomicwrites >=1.2.0         :  1.3.0 (OK)
chardet >=2.0.0              :  3.0.4 (OK)
cloudpickle >=0.5.0          :  1.2.2 (OK)
diff_match_patch >=20181111  :  20181111 (OK)
intervaltree                 :  None (OK)
IPython >=4.0                :  7.12.0 (OK)
jedi =0.14.1                 :  0.14.1 (OK)
keyring                      :  None (OK)
nbconvert >=4.0              :  5.6.1 (OK)
numpydoc >=0.6.0             :  0.9.2 (OK)
pexpect >=4.4.0              :  4.8.0 (OK)
pickleshare >=0.4            :  0.7.5 (OK)
psutil >=0.3                 :  5.6.7 (OK)
pygments >=2.0               :  2.5.2 (OK)
pylint >=0.25                :  2.4.4 (OK)
pyls >=0.31.2;<0.32.0        :  0.31.7 (OK)
xdg >=0.26                   :  0.26 (OK)
zmq >=17                     :  18.1.1 (OK)
qdarkstyle >=2.7             :  2.8 (OK)
qtawesome >=0.5.7            :  0.6.1 (OK)
qtconsole >=4.6.0            :  4.6.0 (OK)
qtpy >=1.5.0                 :  1.9.0 (OK)
rtree >=0.8.3                :  0.9.3 (OK)
sphinx >=0.6.6               :  2.3.1 (OK)
spyder_kernels >=1.8.1;<2.0.0:  1.8.1 (OK)
watchdog                     :  None (OK)
cython >=0.21                :  0.29.14 (OK)
matplotlib >=2.0.0           :  3.1.3 (OK)
numpy >=1.7                  :  1.18.1 (OK)
pandas >=0.13.1              :  0.25.1 (OK)
scipy >=0.17.0               :  1.4.1 (OK)
sympy >=0.7.3                :  1.5.1 (OK)
</details>



Discussion:
@steff456, please take a look at this one.
I'm able to reproduce this issue by changing the shortcut sequence for the previous/next cursor position position.
Great! Please start working on solving this for 4.2
Hi @ccordoba12  why did you remove the v4.2.0 label an did not assign a new one? There are actually more things not working with the navigation. I wanted to start with the simplest case... 

Could you give me a hint how the editor navigation is working / what files to look at / where too start? Maybe I can solve things myself and thereby contribute. 

That whole  thing drives me crazy since years, and apart from that spyder is really cool. 
Sorry, I forgot to assign it to 4.1.3. Thanks for the reminder.

@steff456 (a member of our team) is working on this right now, but thanks a lot for your offer to help!

Resolving patch:
diff --git a/spyder/config/main.py b/spyder/config/main.py
--- a/spyder/config/main.py
+++ b/spyder/config/main.py
@@ -425,8 +425,8 @@
               'editor/save as': 'Ctrl+Shift+S',
               'editor/close all': "Ctrl+Shift+W",
               'editor/last edit location': "Ctrl+Alt+Shift+Left",
-              'editor/previous cursor position': "Ctrl+Alt+Left",
-              'editor/next cursor position': "Ctrl+Alt+Right",
+              'editor/previous cursor position': "Alt+Left",
+              'editor/next cursor position': "Alt+Right",
               'editor/previous warning': "Ctrl+Alt+Shift+,",
               'editor/next warning': "Ctrl+Alt+Shift+.",
               'editor/zoom in 1': "Ctrl++",
@@ -625,4 +625,4 @@
 #    or if you want to *rename* options, then you need to do a MAJOR update in
 #    version, e.g. from 3.0.0 to 4.0.0
 # 3. You don't need to touch this value if you're just adding a new option
-CONF_VERSION = '57.1.0'
+CONF_VERSION = '57.2.0'
diff --git a/spyder/plugins/editor/plugin.py b/spyder/plugins/editor/plugin.py
--- a/spyder/plugins/editor/plugin.py
+++ b/spyder/plugins/editor/plugin.py
@@ -222,7 +222,9 @@ def __init__(self, parent, ignore_last_opened_files=False):
         if current_editor is not None:
             filename = self.get_current_filename()
             position = current_editor.get_position('cursor')
-            self.add_cursor_position_to_history(filename, position)
+            line, column = current_editor.get_cursor_line_column()
+            self.add_cursor_position_to_history(filename, position, line,
+                                                column)
         self.update_cursorpos_actions()
         self.set_path()
 
@@ -1260,6 +1262,8 @@ def register_editorstack(self, editorstack):
                                          self.encoding_status.update_encoding)
             editorstack.sig_editor_cursor_position_changed.connect(
                                  self.cursorpos_status.update_cursor_position)
+            editorstack.sig_editor_cursor_position_changed.connect(
+                self.current_editor_cursor_changed)
             editorstack.sig_refresh_eol_chars.connect(
                 self.eol_status.update_eol)
             editorstack.current_file_changed.connect(
@@ -1353,6 +1357,7 @@ def register_editorstack(self, editorstack):
         editorstack.sig_new_file.connect(lambda s: self.new(text=s))
         editorstack.sig_new_file[()].connect(self.new)
         editorstack.sig_close_file.connect(self.close_file_in_all_editorstacks)
+        editorstack.sig_close_file.connect(self.remove_file_cursor_history)
         editorstack.file_saved.connect(self.file_saved_in_editorstack)
         editorstack.file_renamed_in_data.connect(
                                       self.file_renamed_in_data_in_editorstack)
@@ -1996,8 +2001,6 @@ def _convert(fname):
             if goto is not None: # 'word' is assumed to be None as well
                 current_editor.go_to_line(goto[index], word=word,
                                           start_column=start_column)
-                position = current_editor.get_position('cursor')
-                self.cursor_moved(filename0, position0, filename, position)
             current_editor.clearFocus()
             current_editor.setFocus()
             current_editor.window().raise_()
@@ -2240,7 +2243,8 @@ def go_to_next_todo(self):
         editor = self.get_current_editor()
         position = editor.go_to_next_todo()
         filename = self.get_current_filename()
-        self.add_cursor_position_to_history(filename, position)
+        line, column = editor.get_cursor_line_column()
+        self.add_cursor_position_to_history(filename, position, line, column)
 
     @Slot()
     def go_to_next_warning(self):
@@ -2248,7 +2252,8 @@ def go_to_next_warning(self):
         editor = self.get_current_editor()
         position = editor.go_to_next_warning()
         filename = self.get_current_filename()
-        self.add_cursor_position_to_history(filename, position)
+        line, column = editor.get_cursor_line_column()
+        self.add_cursor_position_to_history(filename, position, line, column)
 
     @Slot()
     def go_to_previous_warning(self):
@@ -2256,7 +2261,8 @@ def go_to_previous_warning(self):
         editor = self.get_current_editor()
         position = editor.go_to_previous_warning()
         filename = self.get_current_filename()
-        self.add_cursor_position_to_history(filename, position)
+        line, column = editor.get_cursor_line_column()
+        self.add_cursor_position_to_history(filename, position, line, column)
 
     @Slot()
     def run_winpdb(self):
@@ -2304,14 +2310,17 @@ def update_cursorpos_actions(self):
         self.next_cursor_action.setEnabled(self.cursor_pos_index is not None \
                     and self.cursor_pos_index < len(self.cursor_pos_history)-1)
 
-    def add_cursor_position_to_history(self, filename, position, fc=False):
+    def add_cursor_position_to_history(self, filename, position, line, column,
+                                       fc=False):
         if self.__ignore_cursor_position:
             return
-        for index, (fname, pos) in enumerate(self.cursor_pos_history[:]):
+        for index, (fname, pos, c_line, c_col) in enumerate(
+                self.cursor_pos_history):
             if fname == filename:
-                if pos == position or pos == 0:
+                if pos == position or pos == 0 or line == c_line:
                     if fc:
-                        self.cursor_pos_history[index] = (filename, position)
+                        self.cursor_pos_history[index] = (filename, position,
+                                                          line, column)
                         self.cursor_pos_index = index
                         self.update_cursorpos_actions()
                         return
@@ -2323,22 +2332,18 @@ def add_cursor_position_to_history(self, filename, position, fc=False):
         if self.cursor_pos_index is not None:
             self.cursor_pos_history = \
                         self.cursor_pos_history[:self.cursor_pos_index+1]
-        self.cursor_pos_history.append((filename, position))
+        self.cursor_pos_history.append((filename, position, line, column))
         self.cursor_pos_index = len(self.cursor_pos_history)-1
         self.update_cursorpos_actions()
 
-    def cursor_moved(self, filename0, position0, filename1, position1):
-        """Cursor was just moved: 'go to'"""
-        if position0 is not None:
-            self.add_cursor_position_to_history(filename0, position0)
-        self.add_cursor_position_to_history(filename1, position1)
 
     def text_changed_at(self, filename, position):
         self.last_edit_cursor_pos = (to_text_string(filename), position)
 
-    def current_file_changed(self, filename, position):
+    def current_file_changed(self, filename, position, line, column):
         self.add_cursor_position_to_history(to_text_string(filename), position,
-                                            fc=True)
+                                            line, column, fc=True)
+
         # Hide any open tooltips
         current_stack = self.get_current_editorstack()
         if current_stack is not None:
@@ -2350,6 +2355,27 @@ def current_file_changed(self, filename, position):
             pdb_last_step = self.main.ipyconsole.get_pdb_last_step()
             self.update_pdb_state(pdb_state, pdb_last_step)
 
+    def current_editor_cursor_changed(self, line, column):
+        """Handles the change of the cursor inside the current editor."""
+        code_editor = self.get_current_editor()
+        filename = code_editor.filename
+        position = code_editor.get_position('cursor')
+        line, column = code_editor.get_cursor_line_column()
+        self.add_cursor_position_to_history(
+            to_text_string(filename), position, line, column, fc=True)
+
+    def remove_file_cursor_history(self, id, filename):
+        """Remove the cursor history of a file if the file is closed."""
+        new_history = []
+        for i, (cur_filename, pos, line, column) in enumerate(
+                self.cursor_pos_history):
+            if cur_filename == filename:
+                if i < self.cursor_pos_index:
+                    self.cursor_pos_index = self.cursor_pos_index - 1
+            else:
+                new_history.append((cur_filename, pos, line, column))
+        self.cursor_pos_history = new_history
+
     @Slot()
     def go_to_last_edit_location(self):
         if self.last_edit_cursor_pos is not None:
@@ -2370,14 +2396,18 @@ def __move_cursor_position(self, index_move):
         """
         if self.cursor_pos_index is None:
             return
-        filename, _position = self.cursor_pos_history[self.cursor_pos_index]
+        filename, _position, _line, _column = (
+            self.cursor_pos_history[self.cursor_pos_index])
+        cur_line, cur_col = self.get_current_editor().get_cursor_line_column()
         self.cursor_pos_history[self.cursor_pos_index] = (
-            filename, self.get_current_editor().get_position('cursor'))
+            filename, self.get_current_editor().get_position('cursor'),
+            cur_line, cur_col)
         self.__ignore_cursor_position = True
         old_index = self.cursor_pos_index
         self.cursor_pos_index = min(len(self.cursor_pos_history) - 1,
                                     max(0, self.cursor_pos_index + index_move))
-        filename, position = self.cursor_pos_history[self.cursor_pos_index]
+        filename, position, line, col = (
+            self.cursor_pos_history[self.cursor_pos_index])
         filenames = self.get_current_editorstack().get_filenames()
         if not osp.isfile(filename) and filename not in filenames:
             self.cursor_pos_history.pop(self.cursor_pos_index)
diff --git a/spyder/plugins/editor/widgets/editor.py b/spyder/plugins/editor/widgets/editor.py
--- a/spyder/plugins/editor/widgets/editor.py
+++ b/spyder/plugins/editor/widgets/editor.py
@@ -437,7 +437,7 @@ class EditorStack(QWidget):
     refresh_save_all_action = Signal()
     sig_breakpoints_saved = Signal()
     text_changed_at = Signal(str, int)
-    current_file_changed = Signal(str, int)
+    current_file_changed = Signal(str, int, int, int)
     plugin_load = Signal((str,), ())
     edit_goto = Signal(str, int, str)
     sig_split_vertically = Signal()
@@ -2210,7 +2210,6 @@ def current_changed(self, index):
 #        count = self.get_stack_count()
 #        for btn in (self.filelist_btn, self.previous_btn, self.next_btn):
 #            btn.setEnabled(count > 1)
-
         editor = self.get_current_editor()
         if editor.completions_available and not editor.document_opened:
             editor.document_did_open()
@@ -2242,8 +2241,10 @@ def current_changed(self, index):
             # Needed in order to handle the close of files open in a directory
             # that has been renamed. See spyder-ide/spyder#5157.
             try:
+                line, col = editor.get_cursor_line_column()
                 self.current_file_changed.emit(self.data[index].filename,
-                                               editor.get_position('cursor'))
+                                               editor.get_position('cursor'),
+                                               line, col)
             except IndexError:
                 pass
 


Test patch:
diff --git a/spyder/plugins/editor/tests/test_plugin.py b/spyder/plugins/editor/tests/test_plugin.py
--- a/spyder/plugins/editor/tests/test_plugin.py
+++ b/spyder/plugins/editor/tests/test_plugin.py
@@ -230,19 +230,21 @@ def test_go_to_prev_next_cursor_position(editor_plugin, python_files):
     # Open a new file.
     editor_plugin.new()
     # Go to the third file.
+    cur_editor = editorstack.get_current_editor()
+    cur_line, cur_col = cur_editor.get_cursor_line_column()
     editorstack.set_stack_index(2)
     # Move the cursor within the third file. Note that this new position is
     # not added to the cursor position history.
     editorstack.get_current_editor().set_cursor_position(5)
-
     # Note that we use the filenames from the editor to define the expected
     # results because those returned by the python_files fixture are
     # normalized, so this would cause issues when assessing the results.
     filenames = editor_plugin.get_filenames()
     expected_cursor_pos_history = [
-        (filenames[0], 0),
-        (filenames[-1], len(editorstack.data[-1].get_source_code())),
-        (filenames[2], 0)
+        (filenames[0], 0, 0, 0),
+        (filenames[-1], len(editorstack.data[-1].get_source_code()),
+         cur_line, cur_col),
+        (filenames[2], 5, 0, 5)
         ]
     assert editor_plugin.cursor_pos_history == expected_cursor_pos_history
 
@@ -251,7 +253,7 @@ def test_go_to_prev_next_cursor_position(editor_plugin, python_files):
     # The last entry in the cursor position history is overriden by the
     # current cursor position when going to previous or next cursor position,
     # so we need to update the last item of the expected_cursor_pos_history.
-    expected_cursor_pos_history[-1] = (filenames[2], 5)
+    expected_cursor_pos_history[-1] = (filenames[2], 5, 0, 5)
 
     cursor_index_moves = [-1, 1, 1, -1, -1, -1, 1, -1]
     expected_cursor_pos_indexes = [1, 2, 2, 1, 0, 0, 1, 0]
@@ -262,8 +264,11 @@ def test_go_to_prev_next_cursor_position(editor_plugin, python_files):
             editor_plugin.go_to_next_cursor_position()
 
         assert editor_plugin.cursor_pos_index == index
+        cur_line, cur_col = (
+            editorstack.get_current_editor().get_cursor_line_column())
         assert (editor_plugin.get_current_filename(),
-                editor_plugin.get_current_editor().get_position('cursor')
+                editor_plugin.get_current_editor().get_position('cursor'),
+                cur_line, cur_col
                 ) == expected_cursor_pos_history[index]
     assert editor_plugin.cursor_pos_history == expected_cursor_pos_history
 
@@ -275,7 +280,7 @@ def test_go_to_prev_next_cursor_position(editor_plugin, python_files):
     # be stripped from the current cursor position index and that the
     # new cursor position is added at the end of the cursor position history.
     expected_cursor_pos_history = expected_cursor_pos_history[:1]
-    expected_cursor_pos_history.append((filenames[3], 0))
+    expected_cursor_pos_history.append((filenames[3], 0, 0, 0))
     assert editor_plugin.cursor_pos_history == expected_cursor_pos_history