diff --git a/CHANGELOG.md b/CHANGELOG.md index 30a0532..41dfadf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,5 @@ ## (unpublished) -* Fix `:enew` not working ([#215](https://github.com/lloeki/ex-mode/pull/215)) - ## 0.18.0 * Add Gdefault support ([#191](https://github.com/lloeki/ex-mode/pull/191)) diff --git a/README.md b/README.md old mode 100755 new mode 100644 index ea4a068..3f247de --- a/README.md +++ b/README.md @@ -30,34 +30,7 @@ atom.packages.onDidActivatePackage (pack) -> Ex.registerAlias 'Wq', 'wq' ``` -## Existing commands - -This is the baseline list of commands supported in `ex-mode`. - -| Command | Operation | -| --------------------------------------- | ---------------------------------- | -| `q/quit/tabc/tabclose` | Close active tab | -| `qall/quitall` | Close all tabs | -| `tabe/tabedit/tabnew` | Open new tab | -| `e/edit/tabe/tabedit/tabnew ` | Edit given file | -| `tabn/tabnext` | Go to next tab | -| `tabp/tabprevious` | Go to previous tab | -| `tabo/tabonly` | Close other tabs | -| `w/write` | Save active tab | -| `w/write/saveas ` | Save as | -| `wall/wa` | Save all tabs | -| `sp/split` | Split window | -| `sp/split ` | Open file in split window | -| `s/substitute` | Substitute regular expression in active line | -| `vsp/vsplit` | Vertical split window | -| `vsp/vsplit ` | Open file in vertical split window | -| `delete` | Cut active line | -| `yank` | Copy active line | -| `set ` | Set options | -| `sort` | Sort all lines in file | -| `sort ` | Sort lines in line range | - -See `lib/ex.coffee` for the implementations of these commands. Contributions are very welcome! +See `lib/ex.coffee` for some examples commands. Contributions are very welcome! ## Status diff --git a/keymaps/ex-mode.cson b/keymaps/ex-mode.cson index a071efd..6191513 100644 --- a/keymaps/ex-mode.cson +++ b/keymaps/ex-mode.cson @@ -11,6 +11,5 @@ ':': 'ex-mode:open' 'atom-text-editor.ex-mode-editor': 'ctrl-c': 'ex-mode:close' - 'ctrl-[': 'ex-mode:close' 'atom-text-editor.vim-mode:not(.insert-mode)': ':': 'ex-mode:open' diff --git a/lib/ex-mode.coffee b/lib/ex-mode.coffee index d8fc766..c627483 100644 --- a/lib/ex-mode.coffee +++ b/lib/ex-mode.coffee @@ -55,8 +55,3 @@ module.exports = ExMode = description: 'When on, the ":substitute" flag \'g\' is default on' type: 'boolean' default: 'false' - onlyCloseBuffers: - title: 'Only close buffers' - description: 'When on, quitall only closes all buffers, not entire Atom instance' - type: 'boolean' - default: 'false' diff --git a/lib/ex.coffee b/lib/ex.coffee index b262023..cbc7857 100644 --- a/lib/ex.coffee +++ b/lib/ex.coffee @@ -3,7 +3,6 @@ CommandError = require './command-error' fs = require 'fs-plus' VimOption = require './vim-option' _ = require 'underscore-plus' -atom defer = () -> deferred = {} @@ -133,11 +132,7 @@ class Ex atom.workspace.getActivePane().destroyActiveItem() quitall: -> - if !atom.config.get('ex-mode.onlyCloseBuffers') - atom.close() - else - atom.workspace.getTextEditors().forEach (editor) -> - editor.destroy() + atom.close() q: => @quit() @@ -211,7 +206,9 @@ class Ex e: (args) => @edit(args) enew: -> - atom.workspace.open() + buffer = atom.workspace.getActiveTextEditor().buffer + buffer.setPath(undefined) + buffer.load() write: ({ range, args, editor, saveas }) -> saveas ?= false @@ -229,30 +226,29 @@ class Ex deferred = defer() editor = atom.workspace.getActiveTextEditor() - - # Case 1; path is provided + saved = false if filePath.length isnt 0 - fullPath = getFullPath filePath + fullPath = getFullPath(filePath) + if editor.getPath()? and (not fullPath? or editor.getPath() == fullPath) + if saveas + throw new CommandError("Argument required") + else + # Use editor.save when no path is given or the path to the file is given + trySave(-> editor.save()).then(deferred.resolve) + saved = true + else if not fullPath? + fullPath = atom.showSaveDialogSync() - # Only write when it does not exist or we have a force flag set. - if force or not fs.existsSync(fullPath) - editor.saveAs(fullPath) - return deferred.promise + if not saved and fullPath? + if not force and fs.existsSync(fullPath) + throw new CommandError("File exists (add ! to override)") + if saveas or editor.getFileName() == null + editor = atom.workspace.getActiveTextEditor() + trySave(-> editor.saveAs(fullPath, editor)).then(deferred.resolve) + else + trySave(-> saveAs(fullPath, editor)).then(deferred.resolve) - throw new CommandError("File exists (add ! to override)") - - # Case 2; no path provided, call editor save. - editor = atom.workspace.getActiveTextEditor() - - # Does the current buffer exist? - if editor.getPath()? and fs.existsSync(editor.getPath()) - trySave(-> editor.save()).then(deferred.promise) - else - # Cant see what the better API is but Pane.saveActiveItemAs() is the only call - # I could find that states it will ask the user. - trySave(-> atom.workspace.getActivePane().saveActiveItemAs()).then(deferred.promise) - - return deferred.promise + deferred.promise wall: -> atom.workspace.saveAll()