New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reverse delete consumes too many characters #4026

Open
ghost opened this Issue Nov 1, 2014 · 78 comments

Comments

Projects
None yet
@ghost

ghost commented Nov 1, 2014

rev-del-bug

Atom 0.141.0, Mac OS 10.9.5. When using alt-delete to delete to end of word, I feel like the natural thing should be to erase all the whitespace in one stop, without removing any visible characters. As you can see above, if I wanted to eliminate a bunch of whitespace by hitting alt-delete, it eats up some of the code in the process.

@benogle benogle added the enhancement label Nov 4, 2014

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

This has the same behavior as editor:mode-to-end-of-word (option-right) which is similar to most text boxes on your system. There is a editor:move-to-next-word-boundary that does what you want when moving already in core, but no equivalent delete command.

Contributor

benogle commented Nov 4, 2014

This has the same behavior as editor:mode-to-end-of-word (option-right) which is similar to most text boxes on your system. There is a editor:move-to-next-word-boundary that does what you want when moving already in core, but no equivalent delete command.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Yes, but general text boxes != code editor. Even vim's dw command will delete the whitespace properly and leave the text intact. This is the standard in code editors since they deal with symbols as well as text, not just text like my system text boxes usually do.

But that's fine, after all this is the hackable editor. :) I assume there's a way I can make a package that overrides editor:delete-to-end-of-word and editor:move-to-end-of-word?

This is Sublime Text, BTW:

st2

ghost commented Nov 4, 2014

Yes, but general text boxes != code editor. Even vim's dw command will delete the whitespace properly and leave the text intact. This is the standard in code editors since they deal with symbols as well as text, not just text like my system text boxes usually do.

But that's fine, after all this is the hackable editor. :) I assume there's a way I can make a package that overrides editor:delete-to-end-of-word and editor:move-to-end-of-word?

This is Sublime Text, BTW:

st2

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Or I can fork, and edit the core and do a PR.

ghost commented Nov 4, 2014

Or I can fork, and edit the core and do a PR.

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

What I would do is: fork core and make a PR for editor:delete-to-next-word-boundary, and editor:delete-to-previous-word-boundary. You can see the move and select for reference. Then we can merge them, and talk about making them the default for the delete operations.

Contributor

benogle commented Nov 4, 2014

What I would do is: fork core and make a PR for editor:delete-to-next-word-boundary, and editor:delete-to-previous-word-boundary. You can see the move and select for reference. Then we can merge them, and talk about making them the default for the delete operations.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Don't get me wrong, I don't think Atom should always copy what Sublime does, or mimic OS text boxes, or anything else. I just think things like this should be carefully considered without looking at what other editors are doing. Analyze the user experience itself, not the "competitors."

Thanks for the advice. I have zero experience hacking Atom, so if there are any quickstart guides I should look at, let me know!

ghost commented Nov 4, 2014

Don't get me wrong, I don't think Atom should always copy what Sublime does, or mimic OS text boxes, or anything else. I just think things like this should be carefully considered without looking at what other editors are doing. Analyze the user experience itself, not the "competitors."

Thanks for the advice. I have zero experience hacking Atom, so if there are any quickstart guides I should look at, let me know!

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

PS: Wouldn't it make more sense to look at the code for delete-to-end-of-word for reference? And make a new binding, but modify the code?

ghost commented Nov 4, 2014

PS: Wouldn't it make more sense to look at the code for delete-to-end-of-word for reference? And make a new binding, but modify the code?

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

It's going to be a combination of the two: delete-to-end-of-word and select-to-next-word-boundary.

You should basically be able to copy this
https://github.com/atom/atom/blob/master/src/selection.coffee#L434-L436

Then call selectToNextWordBoundary instead of selectToEndOfWord:
https://github.com/atom/atom/blob/master/src/selection.coffee#L289

Then there is a little plumbing.

Add a method similar to this to TextEditor:
https://github.com/atom/atom/blob/master/src/text-editor.coffee#L1061-L1062

And add your command(s) here:
https://github.com/atom/atom/blob/master/src/text-editor-element.coffee#L130

Be sure to add specs! https://github.com/atom/atom/blob/master/spec/text-editor-spec.coffee#L1218

Contributor

benogle commented Nov 4, 2014

It's going to be a combination of the two: delete-to-end-of-word and select-to-next-word-boundary.

You should basically be able to copy this
https://github.com/atom/atom/blob/master/src/selection.coffee#L434-L436

Then call selectToNextWordBoundary instead of selectToEndOfWord:
https://github.com/atom/atom/blob/master/src/selection.coffee#L289

Then there is a little plumbing.

Add a method similar to this to TextEditor:
https://github.com/atom/atom/blob/master/src/text-editor.coffee#L1061-L1062

And add your command(s) here:
https://github.com/atom/atom/blob/master/src/text-editor-element.coffee#L130

Be sure to add specs! https://github.com/atom/atom/blob/master/spec/text-editor-spec.coffee#L1218

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Hmm, I did all of the above (except adding specs, don't understand that). I ran script/build, and for some reason editor:delete-to-next-word-boundary is not recognized. It's not listed in the keybindings in preferences. Do I have to add it to keymaps/darwin.cson or menus/darwin.cson for it to be available?

ghost commented Nov 4, 2014

Hmm, I did all of the above (except adding specs, don't understand that). I ran script/build, and for some reason editor:delete-to-next-word-boundary is not recognized. It's not listed in the keybindings in preferences. Do I have to add it to keymaps/darwin.cson or menus/darwin.cson for it to be available?

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

You can add it to you keymap file. Open it via command palette, the type open keymap. Bind it to something.

Specs are tests. We will not accept untested code.

You dont need to run script/build for each change. You can run atom in a dev window: atom -d, then just reload that window when there is new code.

Contributor

benogle commented Nov 4, 2014

You can add it to you keymap file. Open it via command palette, the type open keymap. Bind it to something.

Specs are tests. We will not accept untested code.

You dont need to run script/build for each change. You can run atom in a dev window: atom -d, then just reload that window when there is new code.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

I did add it to my keymap:

'alt-delete': 'editor:delete-to-next-word-boundary'

It ignores this and uses editor:delete-to-end-of-word when I hit alt-delete. And my new editor command is not listed in the preferences keybindings, which makes me think I'm missing something.

As for atom -d, do I need to run that while in the directory of my forked copy? In other words, how does atom -d know where to find my cloned copy of the repo?

ghost commented Nov 4, 2014

I did add it to my keymap:

'alt-delete': 'editor:delete-to-next-word-boundary'

It ignores this and uses editor:delete-to-end-of-word when I hit alt-delete. And my new editor command is not listed in the preferences keybindings, which makes me think I'm missing something.

As for atom -d, do I need to run that while in the directory of my forked copy? In other words, how does atom -d know where to find my cloned copy of the repo?

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

So I added this:

--- a/menus/darwin.cson
+++ b/menus/darwin.cson
@@ -78,7 +78,8 @@
           { label: 'Upper Case', command: 'editor:upper-case' }
           { label: 'Lower Case', command: 'editor:lower-case' }
           { type: 'separator' }
-          { label: 'Delete to End of Word', command: 'editor:delete-to-end-of-word' }
+          { label: 'Delete to End of Word', command: 'editor:delete-to-end-of-word' },
+          { label: 'Delete to Next Word Boundary', command: 'editor:delete-to-next-word-boundary' },
           { label: 'Delete Line', command: 'editor:delete-line' }
           { type: 'separator' }
           { label: 'Transpose', command: 'editor:transpose' }

And ran atom -d in my fork directory. I don't see the new menu item.

I appreciate the help! I'm brand new to working on Atom.

ghost commented Nov 4, 2014

So I added this:

--- a/menus/darwin.cson
+++ b/menus/darwin.cson
@@ -78,7 +78,8 @@
           { label: 'Upper Case', command: 'editor:upper-case' }
           { label: 'Lower Case', command: 'editor:lower-case' }
           { type: 'separator' }
-          { label: 'Delete to End of Word', command: 'editor:delete-to-end-of-word' }
+          { label: 'Delete to End of Word', command: 'editor:delete-to-end-of-word' },
+          { label: 'Delete to Next Word Boundary', command: 'editor:delete-to-next-word-boundary' },
           { label: 'Delete Line', command: 'editor:delete-line' }
           { type: 'separator' }
           { label: 'Transpose', command: 'editor:transpose' }

And ran atom -d in my fork directory. I don't see the new menu item.

I appreciate the help! I'm brand new to working on Atom.

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

You can run atom -d in any directory, and it should pick up the new code.

Open the keybinding resolver (cmd-.) and see if your command is even in the list. Your keybinding might not be specific enough.

Contributor

benogle commented Nov 4, 2014

You can run atom -d in any directory, and it should pick up the new code.

Open the keybinding resolver (cmd-.) and see if your command is even in the list. Your keybinding might not be specific enough.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

But how does Atom in dev mode know where to magically find my fork? It's definitely not picking up my code. What if I had two forks? There must be some way for me to tell Atom where to find my fork, and use that code. Now, I'd expect something like atom -d /path/to/my/fork to work.

Still no luck on the key binding. I tried an unused key combo:

'alt-pagedown': 'editor:delete-to-next-word-boundary'

And the keybinding resolver shows nothing when I hit alt+pgdown.

ghost commented Nov 4, 2014

But how does Atom in dev mode know where to magically find my fork? It's definitely not picking up my code. What if I had two forks? There must be some way for me to tell Atom where to find my fork, and use that code. Now, I'd expect something like atom -d /path/to/my/fork to work.

Still no luck on the key binding. I tried an unused key combo:

'alt-pagedown': 'editor:delete-to-next-word-boundary'

And the keybinding resolver shows nothing when I hit alt+pgdown.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

(BTW, I can move to another thread if that's appropriate, since we're getting into troubleshooting dev stuff)

ghost commented Nov 4, 2014

(BTW, I can move to another thread if that's appropriate, since we're getting into troubleshooting dev stuff)

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

For now, move your fork to ~/github/atom, and try again.

Contributor

benogle commented Nov 4, 2014

For now, move your fork to ~/github/atom, and try again.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Aha! My GitHub folder was in ~/Documents so it could be backed up. I guess I'll create a symlink or something.

ghost commented Nov 4, 2014

Aha! My GitHub folder was in ~/Documents so it could be backed up. I guess I'll create a symlink or something.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Great! So the menu item Edit > Text > Delete To Next Word Boundary works great. Found a syntax error in the keymap file.

In the mean time, I need to edit the specs. Can you direct me to somewhere I can read up on that? I have zero familiarity that code.

ghost commented Nov 4, 2014

Great! So the menu item Edit > Text > Delete To Next Word Boundary works great. Found a syntax error in the keymap file.

In the mean time, I need to edit the specs. Can you direct me to somewhere I can read up on that? I have zero familiarity that code.

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

There is https://atom.io/docs/v0.141.0/writing-specs which will be of some use.

You can run the atom core specs via window:run-package-specs command or via apm test on the command line.

Do this: add an f in front of the describe I linked to above, then run window:run-package-specs. It should only run the tests under the focused describe. Then you can add your own specs for your new methods.

Contributor

benogle commented Nov 4, 2014

There is https://atom.io/docs/v0.141.0/writing-specs which will be of some use.

You can run the atom core specs via window:run-package-specs command or via apm test on the command line.

Do this: add an f in front of the describe I linked to above, then run window:run-package-specs. It should only run the tests under the focused describe. Then you can add your own specs for your new methods.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 4, 2014

Do I need to install something in order to run the package specs? I get a ton of errors:

Error: Module did not self-register.
  at Error (native)
  at Object.module.(anonymous function) [as .node] (/Applications/Atom.app/Contents/Resources/atom/common/lib/asar.js:422:20)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:6:13)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:207:4)
  at Module._compile (module.js:468:26)
  at Object.Module._extensions..js (module.js:486:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:6:10)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:5:16)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at requireSpecs (/Users/bob/github/atom/spec/spec-suite.coffee:8:5)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:52:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at module.exports.runSpecSuite (/Users/bob/github/atom/spec/jasmine-helper.coffee:33:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:24:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:2:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at window.onload (file:///Users/bob/github/atom/static/index.js:41:25)

ghost commented Nov 4, 2014

Do I need to install something in order to run the package specs? I get a ton of errors:

Error: Module did not self-register.
  at Error (native)
  at Object.module.(anonymous function) [as .node] (/Applications/Atom.app/Contents/Resources/atom/common/lib/asar.js:422:20)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:6:13)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:207:4)
  at Module._compile (module.js:468:26)
  at Object.Module._extensions..js (module.js:486:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:6:10)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:5:16)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at requireSpecs (/Users/bob/github/atom/spec/spec-suite.coffee:8:5)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:52:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at module.exports.runSpecSuite (/Users/bob/github/atom/spec/jasmine-helper.coffee:33:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:24:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:2:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at window.onload (file:///Users/bob/github/atom/static/index.js:41:25)
@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 4, 2014

Contributor

Does apm test in the project root work? Same error?

Contributor

benogle commented Nov 4, 2014

Does apm test in the project root work? Same error?

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 7, 2014

Contributor

@CaptSaltyJack Did you get this working? You should make a PR.

Contributor

benogle commented Nov 7, 2014

@CaptSaltyJack Did you get this working? You should make a PR.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 7, 2014

Sorry, got caught up in some stuff. apm test shows the same error.

ghost commented Nov 7, 2014

Sorry, got caught up in some stuff. apm test shows the same error.

@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 10, 2014

Contributor

@CaptSaltyJack Can you pull master and run script/build, then run npm test again? Do you have any node modules linked (like npm link)?

Contributor

benogle commented Nov 10, 2014

@CaptSaltyJack Can you pull master and run script/build, then run npm test again? Do you have any node modules linked (like npm link)?

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 11, 2014

I ran a git pull and it said it's up to date. Which seems strange, because I know there have been updates since I cloned this. And the results of npm test:

/bin/sh: node_modules/.bin/grunt: No such file or directory
npm ERR! Test failed.  See above for more details.

ghost commented Nov 11, 2014

I ran a git pull and it said it's up to date. Which seems strange, because I know there have been updates since I cloned this. And the results of npm test:

/bin/sh: node_modules/.bin/grunt: No such file or directory
npm ERR! Test failed.  See above for more details.
@benogle

This comment has been minimized.

Show comment
Hide comment
@benogle

benogle Nov 11, 2014

Contributor

Def strange. Are you on a branch? What is your remote from .git/config? Did you fork it or pull from our fork?

Contributor

benogle commented Nov 11, 2014

Def strange. Are you on a branch? What is your remote from .git/config? Did you fork it or pull from our fork?

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 11, 2014

Oops. Yes, right. Ok, I merged upstream into my work and tried again.

> atom@0.146.0 test /Users/bob/GitHub/atom
> node script/test

Node: v0.10.32
npm: v1.4.28
Installing build modules...
Installing apm...
npm WARN package.json github-url-from-git@1.1.1 No repository field.
Installing modules ✓
Installing atom-dark-syntax@0.21.0 ✓
Installing autocomplete@0.33.0 ✓
Installing bookmarks@0.30.0 ✓
Installing encoding-selector@0.7.0 ✓
Installing find-and-replace@0.146.0 ✓
Installing git-diff@0.43.0 ✓
Installing markdown-preview@0.110.0 ✓
Installing metrics@0.38.0 ✓
Installing package-generator@0.32.0 ✓
Installing settings-view@0.158.0 ✓
Installing symbols-view@0.68.0 ✓
Installing language-css@0.23.0 ✓
Installing language-python@0.23.0 ✓
Installing language-sass@0.25.0 ✓
Installing language-shellscript@0.10.0 ✓
Deduping modules ✓
/bin/sh: node_modules/.bin/grunt: No such file or directory
npm ERR! Test failed.  See above for more details.

I didn't run script/build as I don't really want to compile and install it into my /Applications folder. Is that step necessary?

ghost commented Nov 11, 2014

Oops. Yes, right. Ok, I merged upstream into my work and tried again.

> atom@0.146.0 test /Users/bob/GitHub/atom
> node script/test

Node: v0.10.32
npm: v1.4.28
Installing build modules...
Installing apm...
npm WARN package.json github-url-from-git@1.1.1 No repository field.
Installing modules ✓
Installing atom-dark-syntax@0.21.0 ✓
Installing autocomplete@0.33.0 ✓
Installing bookmarks@0.30.0 ✓
Installing encoding-selector@0.7.0 ✓
Installing find-and-replace@0.146.0 ✓
Installing git-diff@0.43.0 ✓
Installing markdown-preview@0.110.0 ✓
Installing metrics@0.38.0 ✓
Installing package-generator@0.32.0 ✓
Installing settings-view@0.158.0 ✓
Installing symbols-view@0.68.0 ✓
Installing language-css@0.23.0 ✓
Installing language-python@0.23.0 ✓
Installing language-sass@0.25.0 ✓
Installing language-shellscript@0.10.0 ✓
Deduping modules ✓
/bin/sh: node_modules/.bin/grunt: No such file or directory
npm ERR! Test failed.  See above for more details.

I didn't run script/build as I don't really want to compile and install it into my /Applications folder. Is that step necessary?

@kevinsawicki

This comment has been minimized.

Show comment
Hide comment
@kevinsawicki

kevinsawicki Nov 11, 2014

Member

@CaptSaltyJack Are you still seeing Error: Module did not self-register. when running the package specs from inside Atom?

Can you try running:

apm/node_modules/atom-package-manager/bin/apm rebuild

From the root of the Atom repo, then try running the window:run-package-specs command again from within Atom.

Member

kevinsawicki commented Nov 11, 2014

@CaptSaltyJack Are you still seeing Error: Module did not self-register. when running the package specs from inside Atom?

Can you try running:

apm/node_modules/atom-package-manager/bin/apm rebuild

From the root of the Atom repo, then try running the window:run-package-specs command again from within Atom.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 11, 2014

Ran the command above, executed without errors. Then ran package specs from within Atom (atom -d) and I get this:

Error: Module did not self-register.
  at Error (native)
  at Object.module.(anonymous function) [as .node] (/Applications/Atom.app/Contents/Resources/atom/common/lib/asar.js:422:20)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:6:13)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:207:4)
  at Module._compile (module.js:468:26)
  at Object.Module._extensions..js (module.js:486:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:6:10)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:5:16)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at requireSpecs (/Users/bob/github/atom/spec/spec-suite.coffee:8:5)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:52:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at module.exports.runSpecSuite (/Users/bob/github/atom/spec/jasmine-helper.coffee:33:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:24:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:2:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at window.onload (file:///Users/bob/github/atom/static/index.js:41:25)

ghost commented Nov 11, 2014

Ran the command above, executed without errors. Then ran package specs from within Atom (atom -d) and I get this:

Error: Module did not self-register.
  at Error (native)
  at Object.module.(anonymous function) [as .node] (/Applications/Atom.app/Contents/Resources/atom/common/lib/asar.js:422:20)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:6:13)
  at Object.<anonymous> (/Users/bob/GitHub/atom/node_modules/pathwatcher/lib/main.js:207:4)
  at Module._compile (module.js:468:26)
  at Object.Module._extensions..js (module.js:486:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:6:10)
  at Object.<anonymous> (/Users/bob/GitHub/atom/src/theme-manager.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:5:16)
  at Object.<anonymous> (/Users/bob/GitHub/atom/spec/atom-spec.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at requireSpecs (/Users/bob/github/atom/spec/spec-suite.coffee:8:5)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:52:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-suite.coffee:1:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at module.exports.runSpecSuite (/Users/bob/github/atom/spec/jasmine-helper.coffee:33:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:24:3)
  at Object.<anonymous> (/Users/bob/github/atom/spec/spec-bootstrap.coffee:2:1)
  at Module._compile (module.js:468:26)
  at Object.requireCoffeeScript [as .coffee] (/Users/bob/github/atom/src/coffee-cache.coffee:39:10)
  at Module.load (/Users/bob/github/atom/node_modules/coffee-script/lib/coffee-script/register.js:45:36)
  at Function.Module._load (module.js:318:12)
  at Module.require (module.js:373:17)
  at require (module.js:392:17)
  at window.onload (file:///Users/bob/github/atom/static/index.js:41:25)
@kevinsawicki

This comment has been minimized.

Show comment
Hide comment
@kevinsawicki

kevinsawicki Nov 11, 2014

Member

What version of Atom do you have installed?

Member

kevinsawicki commented Nov 11, 2014

What version of Atom do you have installed?

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Nov 24, 2014

Ok, finally have some breathing room.

So, totally fresh fork and clone of atom. Ran script/clean followed by script/build, ran Atom, and ran the package specs. I get the same error as mentioned above in #4026 (comment).

How can I help target the problem here? It seems strange that after a fresh clone, this is happening. Is it looking for something on my system that doesn't exist, maybe?

ghost commented Nov 24, 2014

Ok, finally have some breathing room.

So, totally fresh fork and clone of atom. Ran script/clean followed by script/build, ran Atom, and ran the package specs. I get the same error as mentioned above in #4026 (comment).

How can I help target the problem here? It seems strange that after a fresh clone, this is happening. Is it looking for something on my system that doesn't exist, maybe?

@curio77

This comment has been minimized.

Show comment
Hide comment
@curio77

curio77 Jan 15, 2015

Any news on this topic? I, too, am in the crowd of people annoyed by the default Ctrl+Del behavior.

curio77 commented Jan 15, 2015

Any news on this topic? I, too, am in the crowd of people annoyed by the default Ctrl+Del behavior.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Jan 15, 2015

I was working on a fix but I haven't had time lately. I hope to hop back on it soon, next month maybe. Unless someone beats me to it.

ghost commented Jan 15, 2015

I was working on a fix but I haven't had time lately. I hope to hop back on it soon, next month maybe. Unless someone beats me to it.

@dogancelik

This comment has been minimized.

Show comment
Hide comment
@dogancelik

dogancelik Apr 29, 2015

Please someone fix this.

dogancelik commented Apr 29, 2015

Please someone fix this.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Apr 29, 2015

I fixed it and put in a pull request which is getting rather dusty. Anyone here can feel free to go to the PR and apply a little pressure. :) #6086

ghost commented Apr 29, 2015

I fixed it and put in a pull request which is getting rather dusty. Anyone here can feel free to go to the PR and apply a little pressure. :) #6086

@jhasse

This comment has been minimized.

Show comment
Hide comment
@jhasse

jhasse Jun 2, 2015

Contributor

Is it correct that the current situation is that your PR has been merged but the default keybinding hasn't changed yet?

Contributor

jhasse commented Jun 2, 2015

Is it correct that the current situation is that your PR has been merged but the default keybinding hasn't changed yet?

@dwelle

This comment has been minimized.

Show comment
Hide comment
@dwelle

dwelle Jul 2, 2015

@jhasse Yes, it has been merged. The default keybinding probably won't change, though, but you can do so yourself:

'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
'ctrl-delete': 'editor:delete-to-next-word-boundary'

dwelle commented Jul 2, 2015

@jhasse Yes, it has been merged. The default keybinding probably won't change, though, but you can do so yourself:

'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
'ctrl-delete': 'editor:delete-to-next-word-boundary'
@jhasse

This comment has been minimized.

Show comment
Hide comment
@jhasse

jhasse Jul 3, 2015

Contributor

Thanks for the info. Why won't the default keybinding change though?

Also adding those lines to my keymap.cson doesn't work somehow. Selecting "Delete To Previous Word Boundary" from the command palette does though.

Contributor

jhasse commented Jul 3, 2015

Thanks for the info. Why won't the default keybinding change though?

Also adding those lines to my keymap.cson doesn't work somehow. Selecting "Delete To Previous Word Boundary" from the command palette does though.

@dwelle

This comment has been minimized.

Show comment
Hide comment
@dwelle

dwelle Jul 3, 2015

EDIT: wrong, see below for corrections.

Forgot to mention you need to namespace them to .editor, if you didn't

'.atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'

As for why it most likely won't replace the default - because it would break the behavior most current users learned to expect (why they put up with it is another matter).

dwelle commented Jul 3, 2015

EDIT: wrong, see below for corrections.

Forgot to mention you need to namespace them to .editor, if you didn't

'.atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'

As for why it most likely won't replace the default - because it would break the behavior most current users learned to expect (why they put up with it is another matter).

@jhasse

This comment has been minimized.

Show comment
Hide comment
@jhasse

jhasse Jul 3, 2015

Contributor

Thanks, this works :)

I see. I guess it's just an annoyance for us former Sublime Text users ;)
Btw: There's still a tiny difference left: Sublime Text apparently only deletes whitespace if it's more than one character. But I can live with Atom's behavior now.

Contributor

jhasse commented Jul 3, 2015

Thanks, this works :)

I see. I guess it's just an annoyance for us former Sublime Text users ;)
Btw: There's still a tiny difference left: Sublime Text apparently only deletes whitespace if it's more than one character. But I can live with Atom's behavior now.

@dwelle

This comment has been minimized.

Show comment
Hide comment
@dwelle

dwelle Jul 3, 2015

Also it seems .editor selector is deprecated, so use .atom-text-editor (I edited the comment above).

dwelle commented Jul 3, 2015

Also it seems .editor selector is deprecated, so use .atom-text-editor (I edited the comment above).

@mnquintana

This comment has been minimized.

Show comment
Hide comment
@mnquintana

mnquintana Jul 3, 2015

Member

@dwelle There is no .atom-text-editor - it's a custom element, not a class. So it should be:

'atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'
Member

mnquintana commented Jul 3, 2015

@dwelle There is no .atom-text-editor - it's a custom element, not a class. So it should be:

'atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'
@dwelle

This comment has been minimized.

Show comment
Hide comment
@dwelle

dwelle Jul 3, 2015

Didn't notice, my bad. Although you need to also namespace to atom-workspace for the keybindings to overwrite the default.

'atom-workspace atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'

dwelle commented Jul 3, 2015

Didn't notice, my bad. Although you need to also namespace to atom-workspace for the keybindings to overwrite the default.

'atom-workspace atom-text-editor':
    'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
    'ctrl-delete': 'editor:delete-to-next-word-boundary'
@Laufire

This comment has been minimized.

Show comment
Hide comment
@Laufire

Laufire Sep 1, 2015

I guess the issue is no just with the deletions, but with the way atom handles the selection. especially the non-word-characters and white-spaces.

But this doesn't seem to be recognized as bug as per the Issue 8410.

Laufire commented Sep 1, 2015

I guess the issue is no just with the deletions, but with the way atom handles the selection. especially the non-word-characters and white-spaces.

But this doesn't seem to be recognized as bug as per the Issue 8410.

@tylerb

This comment has been minimized.

Show comment
Hide comment
@tylerb

tylerb Sep 5, 2015

Is there a list of bindings somewhere that will give me my ctrl-* movements/deletions/etc? Such as ctrl-left and all the others?

Also, 'ctrl-backspace': 'editor:delete-to-previous-word-boundary' simply doesn't do anything for me. It only deletes one character. Anyone else having this issue? I'm on Mac.

tylerb commented Sep 5, 2015

Is there a list of bindings somewhere that will give me my ctrl-* movements/deletions/etc? Such as ctrl-left and all the others?

Also, 'ctrl-backspace': 'editor:delete-to-previous-word-boundary' simply doesn't do anything for me. It only deletes one character. Anyone else having this issue? I'm on Mac.

@tylerb

This comment has been minimized.

Show comment
Hide comment
@tylerb

tylerb Sep 5, 2015

Figured it out. Thanks for the replies in here. If anyone is interested, I am using:

'.platform-darwin atom-workspace atom-text-editor':
  'ctrl-left': 'editor:move-to-previous-word-boundary'
  'ctrl-right': 'editor:move-to-next-word-boundary'
  'ctrl-shift-left': 'editor:select-to-previous-word-boundary'
  'ctrl-shift-right': 'editor:select-to-next-word-boundary'
  'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
  'ctrl-delete': 'editor:delete-to-next-word-boundary'

tylerb commented Sep 5, 2015

Figured it out. Thanks for the replies in here. If anyone is interested, I am using:

'.platform-darwin atom-workspace atom-text-editor':
  'ctrl-left': 'editor:move-to-previous-word-boundary'
  'ctrl-right': 'editor:move-to-next-word-boundary'
  'ctrl-shift-left': 'editor:select-to-previous-word-boundary'
  'ctrl-shift-right': 'editor:select-to-next-word-boundary'
  'ctrl-backspace': 'editor:delete-to-previous-word-boundary'
  'ctrl-delete': 'editor:delete-to-next-word-boundary'
@gustavompo

This comment has been minimized.

Show comment
Hide comment
@gustavompo

gustavompo Dec 10, 2015

Nice to have a "solution". This behavior should be the default.
Sublime, Eclipse, Visual Studio/Code are just some examples of IDEs/editors that work this way.

gustavompo commented Dec 10, 2015

Nice to have a "solution". This behavior should be the default.
Sublime, Eclipse, Visual Studio/Code are just some examples of IDEs/editors that work this way.

@PhiLhoSoft

This comment has been minimized.

Show comment
Hide comment
@PhiLhoSoft

PhiLhoSoft Dec 30, 2015

OK, looks like I found the bug I wanted to report.
Indeed, I am used, in lot of different editors (including the one where I type this, in Firefox), to have Ctrl+Delete, when caret is at the start of an indented line (or before spaces in the middle of a line) to delete all whitespace characters up to the first non-whitespace char, not to eat also the word (or characters) after them. The current behavior is neither logical nor practical, and breaks with existing practices.
I suggest to make this a default, with some note to indicate how to go back to old behavior for those wanting it...

PhiLhoSoft commented Dec 30, 2015

OK, looks like I found the bug I wanted to report.
Indeed, I am used, in lot of different editors (including the one where I type this, in Firefox), to have Ctrl+Delete, when caret is at the start of an indented line (or before spaces in the middle of a line) to delete all whitespace characters up to the first non-whitespace char, not to eat also the word (or characters) after them. The current behavior is neither logical nor practical, and breaks with existing practices.
I suggest to make this a default, with some note to indicate how to go back to old behavior for those wanting it...

@efkan

This comment has been minimized.

Show comment
Hide comment
@efkan

efkan Jan 23, 2016

@tylerb really thank you! 👍

efkan commented Jan 23, 2016

@tylerb really thank you! 👍

@pvorona

This comment has been minimized.

Show comment
Hide comment
@pvorona

pvorona Jan 23, 2016

I'm confused with the default behavior aswell, probably it's a good idea to change it.

pvorona commented Jan 23, 2016

I'm confused with the default behavior aswell, probably it's a good idea to change it.

@zachsteffens

This comment has been minimized.

Show comment
Hide comment
@zachsteffens

zachsteffens May 17, 2016

The keymap fix still doesn't fully solve my problem.

'ctrl-delete': 'editor:delete-to-next-word-boundary'

does not remove new lines. Any one else think this is an issue?

zachsteffens commented May 17, 2016

The keymap fix still doesn't fully solve my problem.

'ctrl-delete': 'editor:delete-to-next-word-boundary'

does not remove new lines. Any one else think this is an issue?

@PhiLhoSoft

This comment has been minimized.

Show comment
Hide comment
@PhiLhoSoft

PhiLhoSoft May 17, 2016

@zachsteffens Yes! When I am at the end of the line, and hit Ctrl+Del, I expect, with this key-binding, to delete EOL and next indentation, up to the significant start of the next line. In other words, it should properly join the two lines...

But maybe this belongs to a different issue, about this verb.

PhiLhoSoft commented May 17, 2016

@zachsteffens Yes! When I am at the end of the line, and hit Ctrl+Del, I expect, with this key-binding, to delete EOL and next indentation, up to the significant start of the next line. In other words, it should properly join the two lines...

But maybe this belongs to a different issue, about this verb.

@fwuensche

This comment has been minimized.

Show comment
Hide comment
@fwuensche

fwuensche Nov 6, 2016

Yay! Thanks a lot! I was going crazy with this weird behaviour.

Below is my config. It just seemed more intuitive to me on a Mac:

'.platform-darwin atom-workspace atom-text-editor':
  'alt-left': 'editor:move-to-previous-word-boundary'
  'alt-right': 'editor:move-to-next-word-boundary'
  'alt-shift-left': 'editor:select-to-previous-word-boundary'
  'alt-shift-right': 'editor:select-to-next-word-boundary'
  'alt-backspace': 'editor:delete-to-previous-word-boundary'
  'alt-delete': 'editor:delete-to-next-word-boundary'

fwuensche commented Nov 6, 2016

Yay! Thanks a lot! I was going crazy with this weird behaviour.

Below is my config. It just seemed more intuitive to me on a Mac:

'.platform-darwin atom-workspace atom-text-editor':
  'alt-left': 'editor:move-to-previous-word-boundary'
  'alt-right': 'editor:move-to-next-word-boundary'
  'alt-shift-left': 'editor:select-to-previous-word-boundary'
  'alt-shift-right': 'editor:select-to-next-word-boundary'
  'alt-backspace': 'editor:delete-to-previous-word-boundary'
  'alt-delete': 'editor:delete-to-next-word-boundary'
@bcorcoran

This comment has been minimized.

Show comment
Hide comment
@bcorcoran

bcorcoran Oct 24, 2017

Over a year later and editor:delete-to-previous-word-boundary still does not delete past new lines. Any progress?

bcorcoran commented Oct 24, 2017

Over a year later and editor:delete-to-previous-word-boundary still does not delete past new lines. Any progress?

@redonwhite

This comment has been minimized.

Show comment
Hide comment
@redonwhite

redonwhite Nov 2, 2017

Just my 0.02 - this needs to be the default behavior! (and please fix the newline thing too).

It's hard for me to imagine a viable use case for the default behavior - delete all white space and one more word? Meanwhile, the alternative is super-useful for formatting, a staple tool for many, and all the other majors editors seem to be aware of.

redonwhite commented Nov 2, 2017

Just my 0.02 - this needs to be the default behavior! (and please fix the newline thing too).

It's hard for me to imagine a viable use case for the default behavior - delete all white space and one more word? Meanwhile, the alternative is super-useful for formatting, a staple tool for many, and all the other majors editors seem to be aware of.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment