From 4f1ebf8a1a8d5e2e32d099c54656867cd42938af Mon Sep 17 00:00:00 2001 From: Bernard Laveaux Date: Tue, 17 Oct 2017 16:31:54 -0400 Subject: [PATCH 1/6] Support Ctrl-[ to close ex-mode This is merely a suggestion to also default the `ctrl-[` keymap to close ex-mode. This behaviour is very similar to vim's default behaviour: ``` CTRL-[ *c_CTRL-[* *c_* *c_Esc* When typed and 'x' not present in 'cpoptions', quit Command-line mode without executing. In macros or when 'x' present in 'cpoptions', start entered command. Note: If your key is hard to hit on your keyboard, train yourself to use CTRL-[. ``` Is very similar to the currently supported `ctrl-c` ``` CTRL-C *c_CTRL-C* quit command-line without executing ``` --- keymaps/ex-mode.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/keymaps/ex-mode.cson b/keymaps/ex-mode.cson index 6191513..a071efd 100644 --- a/keymaps/ex-mode.cson +++ b/keymaps/ex-mode.cson @@ -11,5 +11,6 @@ ':': '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' From 15038d7b0cf9cea653d5ed1a04eb2cfe23106dd6 Mon Sep 17 00:00:00 2001 From: Adrian Wilkins Date: Mon, 26 Mar 2018 13:24:05 +0100 Subject: [PATCH 2/6] Only close buffers on quitall --- lib/ex-mode.coffee | 5 +++++ lib/ex.coffee | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/ex-mode.coffee b/lib/ex-mode.coffee index c627483..d8fc766 100644 --- a/lib/ex-mode.coffee +++ b/lib/ex-mode.coffee @@ -55,3 +55,8 @@ 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 cbc7857..a266afb 100644 --- a/lib/ex.coffee +++ b/lib/ex.coffee @@ -132,7 +132,11 @@ class Ex atom.workspace.getActivePane().destroyActiveItem() quitall: -> - atom.close() + if !atom.config.get('ex-mode.onlyCloseBuffers') + atom.close() + else + atom.workspace.getTextEditors().forEach (editor) -> + editor.destroy() q: => @quit() From a33959f82996617f10afac096120d842d04035f2 Mon Sep 17 00:00:00 2001 From: Edvin Hultberg Date: Tue, 29 May 2018 23:09:45 +0200 Subject: [PATCH 3/6] Fix :enew not working Fixes #214 --- lib/ex.coffee | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/ex.coffee b/lib/ex.coffee index a266afb..58b0ebb 100644 --- a/lib/ex.coffee +++ b/lib/ex.coffee @@ -3,6 +3,7 @@ CommandError = require './command-error' fs = require 'fs-plus' VimOption = require './vim-option' _ = require 'underscore-plus' +atom defer = () -> deferred = {} @@ -210,9 +211,7 @@ class Ex e: (args) => @edit(args) enew: -> - buffer = atom.workspace.getActiveTextEditor().buffer - buffer.setPath(undefined) - buffer.load() + atom.workspace.open() write: ({ range, args, editor, saveas }) -> saveas ?= false From 23dde8c7ee9b778d75deaf33ac0fe3449b68f8b7 Mon Sep 17 00:00:00 2001 From: Edvin Hultberg Date: Tue, 29 May 2018 23:14:45 +0200 Subject: [PATCH 4/6] :memo: update CHANGELOG [ci skip] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41dfadf..30a0532 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## (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)) From 744ec7351e5a27991d44db38918210d32c50d964 Mon Sep 17 00:00:00 2001 From: Edvin Hultberg Date: Tue, 29 May 2018 23:55:46 +0200 Subject: [PATCH 5/6] Refactor :write command Update the logic to simplify it. Also fix #208 --- lib/ex.coffee | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/ex.coffee b/lib/ex.coffee index 58b0ebb..b262023 100644 --- a/lib/ex.coffee +++ b/lib/ex.coffee @@ -229,29 +229,30 @@ class Ex deferred = defer() editor = atom.workspace.getActiveTextEditor() - saved = false + + # Case 1; path is provided if filePath.length isnt 0 - 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() + fullPath = getFullPath filePath - 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) + # 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 - deferred.promise + 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 wall: -> atom.workspace.saveAll() From 59cafd6b994467c91ed7004a40b3cd743f472474 Mon Sep 17 00:00:00 2001 From: Sarang Joshi Date: Thu, 13 Dec 2018 14:39:51 -0800 Subject: [PATCH 6/6] Add existing command information to README --- README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) mode change 100644 => 100755 README.md diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 3f247de..ea4a068 --- a/README.md +++ b/README.md @@ -30,7 +30,34 @@ atom.packages.onDidActivatePackage (pack) -> Ex.registerAlias 'Wq', 'wq' ``` -See `lib/ex.coffee` for some examples commands. Contributions are very welcome! +## 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! ## Status