new editor option: selectByTokens

implements #361 except for toggling via Ctrl
This commit is contained in:
tophf 2018-04-18 19:33:36 +03:00
parent f7f679bbf9
commit 0614aa2eee
4 changed files with 29 additions and 1 deletions

View File

@ -139,6 +139,13 @@
"message": "Colorpickers for CSS colors", "message": "Colorpickers for CSS colors",
"description": "Label for the checkbox controlling colorpicker option for the style editor." "description": "Label for the checkbox controlling colorpicker option for the style editor."
}, },
"cm_selectByTokens": {
"message": "Double-clicking selects tokens",
"description": "Label for the checkbox in the editor."
},
"cm_selectByTokensTooltip": {
"message": "Examples of tokens: .foo-bar-2 #aabbcc 0.32 !important\nWhen disabled: punctuation-delimited words are selected."
},
"cm_indentWithTabs": { "cm_indentWithTabs": {
"message": "Use tabs with smart indentation", "message": "Use tabs with smart indentation",
"description": "Label for the checkbox controlling tabs with smart indentation option for the style editor." "description": "Label for the checkbox controlling tabs with smart indentation option for the style editor."

View File

@ -311,6 +311,13 @@
<svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg> <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
</label> </label>
</div> </div>
<div class="option">
<label i18n-text="cm_selectByTokens"
i18n-title="cm_selectByTokensTooltip">
<input id="editor.selectByTokens" type="checkbox">
<svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
</label>
</div>
<div class="option"> <div class="option">
<label i18n-text="cm_colorpicker"> <label i18n-text="cm_colorpicker">
<input id="editor.colorpicker" type="checkbox"> <input id="editor.colorpicker" type="checkbox">

View File

@ -33,7 +33,6 @@
'Ctrl-Pause': 'toggleEditorFocus', 'Ctrl-Pause': 'toggleEditorFocus',
}), }),
maxHighlightLength: 100e3, maxHighlightLength: 100e3,
configureMouse: (cm, repeat) => repeat === 'double' ? {unit: selectTokenOnDoubleclick} : {},
}; };
Object.assign(CodeMirror.defaults, defaults, prefs.get('editor.options')); Object.assign(CodeMirror.defaults, defaults, prefs.get('editor.options'));
@ -157,6 +156,20 @@
return isBlank; return isBlank;
}); });
// doubleclick option
{
const fn = (cm, repeat) =>
repeat === 'double' ?
{unit: selectTokenOnDoubleclick} :
{};
const configure = (_, enabled) => {
editors.forEach(cm => cm.setOption('configureMouse', enabled ? fn : null));
CodeMirror.defaults.configureMouse = enabled ? fn : null;
};
configure(null, prefs.get('editor.selectByTokens'));
prefs.subscribe(['editor.selectByTokens'], configure);
}
function selectTokenOnDoubleclick(cm, pos) { function selectTokenOnDoubleclick(cm, pos) {
let {ch} = pos; let {ch} = pos;
const {line, sticky} = pos; const {line, sticky} = pos;

View File

@ -66,6 +66,7 @@ var prefs = new function Prefs() {
'editor.autoCloseBrackets': true, // auto-add a closing pair when typing an opening one of ()[]{}''"" 'editor.autoCloseBrackets': true, // auto-add a closing pair when typing an opening one of ()[]{}''""
'editor.autocompleteOnTyping': false, // show autocomplete dropdown on typing a word token 'editor.autocompleteOnTyping': false, // show autocomplete dropdown on typing a word token
'editor.contextDelete': contextDeleteMissing(), // "Delete" item in context menu 'editor.contextDelete': contextDeleteMissing(), // "Delete" item in context menu
'editor.selectByTokens': true,
'editor.appliesToLineWidget': true, // show applies-to line widget on the editor 'editor.appliesToLineWidget': true, // show applies-to line widget on the editor
'editor.livePreview': true, 'editor.livePreview': true,