From 2a15363dc7fd2e03bcfeeecd6a2c90f4b547bfcd Mon Sep 17 00:00:00 2001 From: Dmitry Sadovnychyi Date: Tue, 25 Aug 2015 14:13:06 +0800 Subject: [PATCH 1/3] Change cursor style on crosshair while selecting #12 --- lib/sublime-select.coffee | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/sublime-select.coffee b/lib/sublime-select.coffee index 6577dde..4db72dc 100644 --- a/lib/sublime-select.coffee +++ b/lib/sublime-select.coffee @@ -3,21 +3,25 @@ os = require 'os' inputCfg = switch os.platform() when 'win32' selectKey: 'altKey' + selectIdentifier: 'Alt' mainMouseNum: 1 middleMouseNum: 2 enableMiddleMouse: true when 'darwin' selectKey: 'altKey' + selectIdentifier: 'Alt' mainMouseNum: 1 middleMouseNum: 2 enableMiddleMouse: true when 'linux' selectKey: 'shiftKey' + selectIdentifier: 'Shift' mainMouseNum: 2 middleMouseNum: 2 enableMiddleMouse: false else selectKey: 'shiftKey' + selectIdentifier: 'Shift' mainMouseNum: 2 middleMouseNum: 2 enableMiddleMouse: false @@ -65,6 +69,15 @@ module.exports = if e.which == 0 resetState() + onKeyDown = (e) -> + if e['keyIdentifier'] == inputCfg.selectIdentifier and e['type'] == 'keydown' + editorElement.shadowRoot.querySelector( + '.lines').style.cursor = 'crosshair' + + onKeyUp = (e) -> + if e['keyIdentifier'] == inputCfg.selectIdentifier and e['type'] == 'keyup' + editorElement.shadowRoot.querySelector('.lines').style.cursor = '' + # Hijack all the mouse events while selecting hijackMouseEvent = (e) -> if mouseStartPos @@ -100,9 +113,6 @@ module.exports = _mainMouseDown = (e) -> e.which is inputCfg.mainMouseNum - _keyDown = (e) -> - e[inputCfg.selectKey] - _mainMouseAndKeyDown = (e) -> _mainMouseDown(e) and e[inputCfg.selectKey] @@ -132,6 +142,8 @@ module.exports = editor.onDidChangeSelectionRange onRangeChange editorElement.onmousedown = onMouseDown editorElement.onmousemove = onMouseMove + editorElement.onkeydown = onKeyDown + editorElement.onkeyup = onKeyUp editorElement.onmouseup = hijackMouseEvent editorElement.onmouseleave = hijackMouseEvent editorElement.onmouseenter = hijackMouseEvent From 1f629024a4f0d650e862bc77b36008a5c4c2723d Mon Sep 17 00:00:00 2001 From: Dmitry Sadovnychyi Date: Fri, 15 Jan 2016 10:40:33 +0800 Subject: [PATCH 2/3] Merge remote-tracking branch 'bigfive/master' into patch-1 --- lib/sublime-select.coffee | 84 +++++++++++++++++++++++++++------------ package.json | 4 +- 2 files changed, 61 insertions(+), 27 deletions(-) diff --git a/lib/sublime-select.coffee b/lib/sublime-select.coffee index 4db72dc..249f1be 100644 --- a/lib/sublime-select.coffee +++ b/lib/sublime-select.coffee @@ -1,34 +1,68 @@ os = require 'os' -inputCfg = switch os.platform() +packageName = "Sublime-Style-Column-Selection" + +defaultCfg = switch os.platform() when 'win32' selectKey: 'altKey' - selectIdentifier: 'Alt' - mainMouseNum: 1 - middleMouseNum: 2 - enableMiddleMouse: true + selectKeyName: 'Alt' + mouseNum: 1 + mouseName: "Left" when 'darwin' selectKey: 'altKey' - selectIdentifier: 'Alt' - mainMouseNum: 1 - middleMouseNum: 2 - enableMiddleMouse: true + selectKeyName: 'Alt' + mouseNum: 1 + mouseName: "Left" when 'linux' selectKey: 'shiftKey' - selectIdentifier: 'Shift' - mainMouseNum: 2 - middleMouseNum: 2 - enableMiddleMouse: false + selectKeyName: 'Shift' + mouseNum: 1 + mouseName: "Left" else selectKey: 'shiftKey' - selectIdentifier: 'Shift' - mainMouseNum: 2 - middleMouseNum: 2 - enableMiddleMouse: false + selectKeyName: 'Shift' + mouseNum: 1 + mouseName: "Left" + +mouseNumMap = + Left: 1, + Middle: 2, + Right: 3 + +selectKeyMap = + Shift: 'shiftKey', + Alt: 'altKey', + Ctrl: 'ctrlKey' + +inputCfg = defaultCfg +# >>>>>>> bigfive/master module.exports = + config: + mouseButtonTrigger: + title: "Mouse Button" + description: "The mouse button that will trigger column selection. + If empty, the default will be used #{defaultCfg.mouseName} mouse button." + type: 'string' + enum: ['Left', 'Middle', 'Right'] + default: defaultCfg.mouseName + selectKeyTrigger: + ttile: "Select Key" + description: "The key that will trigger column selection. + If empty, the default will be used #{defaultCfg.selectKeyName} key." + type: 'string' + enum: ['Alt', 'Shift', 'Ctrl'] + default: defaultCfg.selectKeyName activate: (state) -> + atom.config.observe "#{packageName}.mouseButtonTrigger", (newValue) => + inputCfg.mouseName = newValue + inputCfg.mouseNum = mouseNumMap[newValue] + + atom.config.observe "#{packageName}.selectKeyTrigger", (newValue) => + inputCfg.selectKeyName = newValue + inputCfg.selectKey = selectKeyMap[newValue] + atom.workspace.observeTextEditors (editor) => @_handleLoad editor @@ -52,7 +86,7 @@ module.exports = e.preventDefault() return false - if _middleMouseDown(e) or _mainMouseAndKeyDown(e) + if _mainMouseAndKeyDown(e) resetState() mouseStartPos = _screenPositionForMouseEvent(e) mouseEndPos = mouseStartPos @@ -62,7 +96,7 @@ module.exports = onMouseMove = (e) -> if mouseStartPos e.preventDefault() - if _middleMouseDown(e) or _mainMouseDown(e) + if _mainMouseDown(e) mouseEndPos = _screenPositionForMouseEvent(e) _selectBoxAroundCursors() return false @@ -70,12 +104,12 @@ module.exports = resetState() onKeyDown = (e) -> - if e['keyIdentifier'] == inputCfg.selectIdentifier and e['type'] == 'keydown' + if e['keyIdentifier'] == inputCfg.selectKeyName and e['type'] == 'keydown' editorElement.shadowRoot.querySelector( '.lines').style.cursor = 'crosshair' onKeyUp = (e) -> - if e['keyIdentifier'] == inputCfg.selectIdentifier and e['type'] == 'keyup' + if e['keyIdentifier'] == inputCfg.selectKeyName and e['type'] == 'keyup' editorElement.shadowRoot.querySelector('.lines').style.cursor = '' # Hijack all the mouse events while selecting @@ -95,6 +129,9 @@ module.exports = # I had to create my own version of editorComponent.screenPositionFromMouseEvent # The editorBuffer one doesnt quite do what I need _screenPositionForMouseEvent = (e) -> + if editorComponent is null + editorComponent = atom.views.getView(editor).component + pixelPosition = editorComponent.pixelPositionForMouseEvent(e) targetTop = pixelPosition.top targetLeft = pixelPosition.left @@ -107,11 +144,8 @@ module.exports = return {row: row, column: column} # methods for checking mouse/key state against config - _middleMouseDown = (e) -> - inputCfg.enableMiddleMouse and e.which is inputCfg.middleMouseNum - _mainMouseDown = (e) -> - e.which is inputCfg.mainMouseNum + e.which is inputCfg.mouseNum _mainMouseAndKeyDown = (e) -> _mainMouseDown(e) and e[inputCfg.selectKey] diff --git a/package.json b/package.json index 4a68981..585e56b 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "Sublime-Style-Column-Selection", "main": "./lib/sublime-select", - "version": "1.3.0", - "description": "Enable Sublime style 'Column Selection'. Just hold 'alt' while you select. Also similar to Texmate's 'Multiple Carets', or BBEdit's 'Block Select'", + "version": "1.4.0", + "description": "Enable Sublime style 'Column Selection'. Just hold 'alt' while you select, or select using your middle mouse button. Also similar to Texmate's 'Multiple Carets', or BBEdit's 'Block Select'", "repository": "https://github.com/bigfive/atom-sublime-select", "license": "MIT", "engines": { From d437bf1b9b56a9c7ef21a6a8496a5bf341f83309 Mon Sep 17 00:00:00 2001 From: Dmitry Sadovnychyi Date: Fri, 15 Jan 2016 10:42:41 +0800 Subject: [PATCH 3/3] Remove merge comment --- lib/sublime-select.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/sublime-select.coffee b/lib/sublime-select.coffee index 249f1be..0fe34a2 100644 --- a/lib/sublime-select.coffee +++ b/lib/sublime-select.coffee @@ -35,7 +35,6 @@ selectKeyMap = Ctrl: 'ctrlKey' inputCfg = defaultCfg -# >>>>>>> bigfive/master module.exports = config: