From 16a3c6ce13ccec58d6ebeafe236626d8008896fb Mon Sep 17 00:00:00 2001 From: jking-bro Date: Mon, 7 Jun 2021 21:44:49 -0700 Subject: [PATCH 1/3] adding crosshair and logic options adding two settings options. One to enable/disable switching the cursor to crosshair during selections. The other allows the user to choose to trigger column selection using EITHER (new "feature") or BOTH (old behavior) the selected mouse button/key. --- README.md | 20 ++++++++++++++------ lib/editor-handler.coffee | 16 ++++++++++++---- lib/sublime-select.coffee | 21 +++++++++++++++++++++ 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c97f066..74b5b49 100644 --- a/README.md +++ b/README.md @@ -21,16 +21,24 @@ Default key combinations are: The modifier key and mouse button can both be configured from the package's settings page. Available options: ### Mouse Button -- Left +- Left (default) - Middle - Right -### Key Trigger -- Shift -- Alt/Option +### Key Trigger (default selected based on platform) +- Shift (default on linux) +- Alt/Option (default on win/mac) - Ctrl - None -To use middle mouse selection working since version 1.4.0 please use the following settings. +You can require both a certain key & modifier, or trigger on either one. -![](https://cloud.githubusercontent.com/assets/633193/12469581/e829bcd0-c027-11e5-8104-901fc0ff4a73.png) +### Logic Operator +- And (default) +- Or + +Optionally change cursor to crosshair when selecting. + +### Change Cursor to Crosshair +- true (default) +- false diff --git a/lib/editor-handler.coffee b/lib/editor-handler.coffee index 7e32443..1ae02ca 100644 --- a/lib/editor-handler.coffee +++ b/lib/editor-handler.coffee @@ -38,8 +38,11 @@ module.exports = e.preventDefault() return false - if @_mainMouseAndKeyDown(e) + if @_mainMouseAndOrKeyDown(e) @_resetState() + if @inputCfg.cursorToCrosshair + @editorElement.shadowRoot.querySelector( + '.lines').style.cursor = 'crosshair' @mouseStartPos = @_screenPositionForMouseEvent(e) @mouseEndPos = @mouseStartPos e.preventDefault() @@ -48,7 +51,7 @@ module.exports = onMouseMove: (e) => if @mouseStartPos e.preventDefault() - if @_mainMouseDown(e) + if @_mainMouseAndOrKeyDown(e) @mouseEndPos = @_screenPositionForMouseEvent(e) return if @mouseEndPos.isEqual @mouseEndPosPrev @_selectBoxAroundCursors() @@ -76,6 +79,9 @@ module.exports = # ------- _resetState: -> + if @inputCfg.cursorToCrosshair + @editorElement?.shadowRoot.querySelector( + '.lines').style.cursor = '' @mouseStartPos = null @mouseEndPos = null @@ -101,8 +107,10 @@ module.exports = _mainMouseDown: (e) -> e.which is @inputCfg.mouseNum - _mainMouseAndKeyDown: (e) -> - if @inputCfg.selectKey + _mainMouseAndOrKeyDown: (e) -> + if @inputCfg.selectKey && (@inputCfg.mouseKeyLogicOperator == "Or") + @_mainMouseDown(e) or e[@inputCfg.selectKey] + else if @inputCfg.selectKey @_mainMouseDown(e) and e[@inputCfg.selectKey] else @_mainMouseDown(e) diff --git a/lib/sublime-select.coffee b/lib/sublime-select.coffee index bfa785d..dc94781 100644 --- a/lib/sublime-select.coffee +++ b/lib/sublime-select.coffee @@ -44,6 +44,13 @@ inputCfg = defaultCfg module.exports = config: + cursorToCrosshair: + title: "Change Cursor to Crosshair" + description: "The mouse cursor will change to crosshair during column selection. + IF empty, the default will be used \"true\"." + type:'boolean' + default: true + mouseButtonTrigger: title: "Mouse Button" description: "The mouse button that will trigger column selection. @@ -52,6 +59,14 @@ module.exports = enum: (key for key, value of mouseNumMap) default: defaultCfg.mouseName + mouseKeyLogicOperator: + title: "Logic Operator" + description: "Should BOTH/EITHER \"Mouse Button\" And/Or \"Key\" trigger column selection? + If empty or \"Select Key\" is set to empty or none, the default will be used \"And\"." + type: 'string', + enum: ['And','Or'] + default: 'And' + selectKeyTrigger: title: "Select Key" description: "The key that will trigger column selection. @@ -64,10 +79,16 @@ module.exports = @observers = [] @editor_handler = null + @observers.push atom.config.observe "#{packageName}.cursorToCrosshair", (newValue) => + inputCfg.cursorToCrosshair = newValue + @observers.push atom.config.observe "#{packageName}.mouseButtonTrigger", (newValue) => inputCfg.mouseName = newValue inputCfg.mouseNum = mouseNumMap[newValue] + @observers.push atom.config.observe "#{packageName}.mouseKeyLogicOperator", (newValue) => + inputCfg.mouseKeyLogicOperator = newValue + @observers.push atom.config.observe "#{packageName}.selectKeyTrigger", (newValue) => inputCfg.selectKeyName = newValue inputCfg.selectKey = selectKeyMap[newValue] From d7c530f659d852026e1cc5e936eaf39e0e081ced Mon Sep 17 00:00:00 2001 From: jking-bro Date: Mon, 7 Jun 2021 21:59:23 -0700 Subject: [PATCH 2/3] Update sublime-select.coffee changing crosshair default to "false" since Sublime doesn't do it. --- lib/sublime-select.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/sublime-select.coffee b/lib/sublime-select.coffee index dc94781..17b6684 100644 --- a/lib/sublime-select.coffee +++ b/lib/sublime-select.coffee @@ -47,9 +47,9 @@ module.exports = cursorToCrosshair: title: "Change Cursor to Crosshair" description: "The mouse cursor will change to crosshair during column selection. - IF empty, the default will be used \"true\"." + IF empty, the default will be used \"false\"." type:'boolean' - default: true + default: false mouseButtonTrigger: title: "Mouse Button" From aab6fa7a1b0a5907e7004768ed8ffa2f9b945128 Mon Sep 17 00:00:00 2001 From: jking-bro Date: Mon, 7 Jun 2021 22:07:25 -0700 Subject: [PATCH 3/3] Update README.md better update the default in the readme, too :P oops! --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74b5b49..1f05efb 100644 --- a/README.md +++ b/README.md @@ -40,5 +40,5 @@ You can require both a certain key & modifier, or trigger on either one. Optionally change cursor to crosshair when selecting. ### Change Cursor to Crosshair -- true (default) -- false +- true +- false (default)