msiniscalchi / atom-latextools

Port of the LaTeXTools package to the Atom editor
MIT License
58 stars 21 forks source link

Uncaught TypeError: Cannot create property 'reversed' on string '' #176

Open ekoepplin opened 6 years ago

ekoepplin commented 6 years ago

[Enter steps to reproduce:]

I just wanted, as I did in the past, to put $ $ around some mathematical notation. Basically I can put $ $ and then add some content $A_1$ or I can A_1 and then put $A_1$ using, as usual, SHIFT 4. The second approach returns an error.

Atom: 1.23.1 x64 Electron: 1.6.15 OS: Mac OS X 10.12.5 Thrown From: latextools package 0.8.5

Stack Trace

Uncaught TypeError: Cannot create property 'reversed' on string ''

At /Applications/Atom.app/Contents/Resources/app/src/selection.js:94

TypeError: Cannot create property 'reversed' on string ''
    at Selection.setBufferRange (/Applications/Atom.app/Contents/Resources/app/src/selection.js:94:58)
    at mergeIntersectingSelections (/Applications/Atom.app/Contents/Resources/app/src/text-editor.js:2766:31)
    at TextEditor.mergeSelections (/Applications/Atom.app/Contents/Resources/app/src/text-editor.js:3191:53)
    at TextEditor.mergeIntersectingSelections (/Applications/Atom.app/Contents/Resources/app/src/text-editor.js:3165:42)
    at TextEditor.setSelectedBufferRanges (/Applications/Atom.app/Contents/Resources/app/src/text-editor.js:2761:16)
    at TextEditor.setSelectedBufferRange (/Applications/Atom.app/Contents/Resources/app/src/text-editor.js:2741:23)
    at SnippetManager.module.exports.SnippetManager.dollarSign (/packages/latextools/lib/snippet-manager.coffee:157:10)
    at /packages/latextools/lib/latextools.coffee:274:23)
    at CommandRegistry.handleCommandEvent (/Applications/Atom.app/Contents/Resources/app/src/command-registry.js:388:36)
    at KeymapManager.module.exports.KeymapManager.dispatchCommandEvent (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:621:22)
    at KeymapManager.module.exports.KeymapManager.handleKeyboardEvent (/Applications/Atom.app/Contents/Resources/app/node_modules/atom-keymap/lib/keymap-manager.js:412:28)
    at WindowEventHandler.handleDocumentKeyEvent (/Applications/Atom.app/Contents/Resources/app/src/window-event-handler.js:108:40)

Commands

     -0:56.8.0 latextools:dollar-sign (input.hidden-input)
 19x -0:55.2.0 core:move-right (input.hidden-input)
  2x -0:51.7.0 core:backspace (input.hidden-input)
     -0:50.7.0 latextools:dollar-sign (input.hidden-input)
     -0:41.4.0 core:backspace (input.hidden-input)
  2x -0:40.8.0 core:move-right (input.hidden-input)
     -0:40 core:backspace (input.hidden-input)
     -0:35 latextools:dollar-sign (input.hidden-input)
     -0:29.6.0 core:cut (input.hidden-input)
     -0:28.8.0 core:paste (input.hidden-input)
     -0:27.5.0 core:backspace (input.hidden-input)
  9x -0:25.5.0 core:move-right (input.hidden-input)
  2x -0:23.6.0 core:move-left (input.hidden-input)
     -0:15.1.0 latextools:ref-cite-keypress (input.hidden-input)
  3x -0:11.3.0 core:backspace (input.hidden-input)
     -0:04.8.0 latextools:dollar-sign (input.hidden-input)

Non-Core Packages

advanced-open-file 0.16.7 
ask-stack 2.2.0 
atom-beautify 0.30.9 
atom-python-run 0.9.5 
auto-encoding 0.7.0 
auto-update-packages 1.0.1 
autocomplete-paths 2.12.1 
autocomplete-python 1.10.5 
browser-plus 0.0.98 
build 0.69.0 
build-rscript 0.6.2 
busy 0.7.0 
busy-signal 1.4.3 
data-atom 0.26.2 
Ensime 0.41.0 
gist 1.1.0 
git-projects 1.17.0 
git-time-machine 1.5.9 
highlight-selected 0.13.1 
Hydrogen 2.1.1 
hyperclick 0.1.5 
intentions 1.1.5 
keybinding-cheatsheet 0.1.1 
kite 0.58.0 
language-latex 1.1.1 
language-markdown 0.25.1 
language-mongodb 0.3.1 
language-pgsql 0.2.3 
language-r 0.4.2 
language-scala 1.1.9 
language-sql-mysql 0.3.1 
latex 0.49.0 
latex-autocomplete 1.1.1 
latextools 0.8.5 
linter 2.2.0 
linter-ui-default 1.6.10 
MagicPython 1.0.12 
markdown-pdf 2.1.0 
markdown-preview-plus 2.4.16 
markdown-writer 2.7.3 
minimap-highlight-selected 4.6.1 
open-html-in-browser 0.2.1 
open-recent 5.0.0 
pandoc 0.2.2 
pdf-view 0.61.0 
platformio-ide-terminal 2.7.0 
pretty-json 1.6.4 
project-manager 3.3.5 
python-debugger 0.2.0 
python-indent 1.1.4 
python-tools 0.6.9 
qolor 0.4.2 
quick-query 0.12.2 
r-exec 0.5.0 
sbt 0.13.0 
scala-format 0.1.8 
script 3.17.3 
sync-settings 0.8.3 
tasks 2.9.1 
todo-show 2.1.0 
nicola-gigante commented 6 years ago

To me it also happens where doing CMD+L+E to start an environment.

sheljohn commented 6 years ago

+1: Similar thing (quotes) started happening to me on OSX Sierra (10.12.6) using Atom 1.23.1 x86 with LatexTools 0.8.5.

Steps to reproduce:

Happy to provide more details if needed (eg package-list, console log, etc).

gmendesb commented 6 years ago

Same here. Not sure how to fix that

contefranz commented 6 years ago

I can confirm that the bug is still there. I am using Atom 1.23.3 on High Sierra 10.13.3. It affects the dollars $, as well as single quote ', double quote ", two single quotes '' and the backtick `. It is getting frustrating now...any ideas on how to fix it?

nicola-gigante commented 6 years ago

This bug is nearly a showstopper for the plugin and has been open for months. It's getting embarrassing on top of frustrating...

af-ayala commented 6 years ago

It is the same for Atom 1.24.0, I've tried reinstalling, however the problem is still there.. and it's been there since late 2017... really frustrating..

findlayjy commented 6 years ago

Still here in April, with Atom 1.25.0. Really frustrating!

nicola-gigante commented 6 years ago

Still here in May, with Atom 1.26. Is this plugin maintained at all? If authors do not care about fixing embarrassing bugs they could just flag the package as unmaintained or deprecated so we can move on.

oaroldan commented 6 years ago

I found a workaround.

case 1: for the $-matcher, find and comment the code:

    if text =  te.getSelect edText()
      text = text.replace(/\\/g, "\\\\")
      range = te.getSelectedBufferRange()
      te.setSelectedBufferRange(range, '')
      @snippetService.insertSnippet("\$#{text}\$")
      return

replace it by:

    range = te.getSelectedBufferRange()
    text = te.getTextInBufferRange(range)
    text = text.replace(/\\/g, "\\\\")
    if text
      @snippetService.insertSnippet("\$#{text}\$")
      return

case 2: for the ' and "-matcher, find and comment the code:

    if text =  te.getSelectedText()
      text = text.replace(/\\/g, "\\\\")
      range = te.getSelectedBufferRange()
      te.setSelectedBufferRange(range, '')
      # Use snippet to leave selection on (same as ST)
      @snippetService.insertSnippet("#{left}${1:#{text}}#{right}")
      return

replace it by:

    range = te.getSelectedBufferRange()
    text = te.getTextInBufferRange(range)
    text = text.replace(/\\/g, "\\\\")
    if text
      @snippetService.insertSnippet("#{left}${1:#{text}}#{right}")
      return

Caveats

any update of the latextools package will delete your editings

findlayjy commented 6 years ago

What a hero! This is working for me, but I had issues with indenting to start with, so make sure it all matches up if you're having trouble.

Thank you, oaroldan! <3

oaroldan commented 6 years ago

@findlayjy Nice to know that it helped you! Thanks for let me know about the indenting issue (I updated my post to include this)

contefranz commented 6 years ago

@oaroldan Thank you so much! It worked for me too! Shall we close the issue or leave it open hoping that someone fix this thing once and for all?