Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bb0207c1e7 | |||
| 6cfb029215 | |||
|
|
42b9b62842 | ||
|
|
e363121abb | ||
|
|
0060617485 | ||
|
|
1df06d1ada | ||
|
|
1067d50461 | ||
|
|
7c8152b0d6 | ||
|
|
148ad95966 | ||
|
|
dc3c860a25 | ||
|
|
551cf1e378 | ||
|
|
e9d8a6dd6e | ||
|
|
87141119fa | ||
|
|
17ca7f2616 | ||
|
|
04b88f15bd | ||
|
|
36f90560f4 |
12
README.md
12
README.md
@@ -1,6 +1,6 @@
|
|||||||
## Synopsis
|
## Synopsis
|
||||||
|
|
||||||
This is a [Sublime Text 2](http://www.sublimetext.com/2) plugin.
|
This is a plugin for [Sublime Text 2](http://www.sublimetext.com/2) and [3](http://www.sublimetext.com/3).
|
||||||
|
|
||||||
**Highlight whitespaces in documents**
|
**Highlight whitespaces in documents**
|
||||||
|
|
||||||
@@ -21,6 +21,8 @@ Then clone this repository:
|
|||||||
|
|
||||||
That's it!
|
That's it!
|
||||||
|
|
||||||
|
Note for ST3 users: For Sublime Text 3, replace "2" with "3" in path names. (`%APPDATA%\Sublime Text 3` and so on)
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
Several options are available to customize the plugin look 'n feel. The
|
Several options are available to customize the plugin look 'n feel. The
|
||||||
@@ -31,6 +33,10 @@ menu.
|
|||||||
|
|
||||||
The default toggle highlight shortcut is ```ctrl+alt+w``` (```cmd+alt+w``` for OS X)
|
The default toggle highlight shortcut is ```ctrl+alt+w``` (```cmd+alt+w``` for OS X)
|
||||||
|
|
||||||
|
### Disable highlighting when Sublime Text starts up
|
||||||
|
|
||||||
|
Change `highlight_whitespaces_enabled` from the default of `true` to `false`.
|
||||||
|
|
||||||
### Change the highlighting color
|
### Change the highlighting color
|
||||||
|
|
||||||
One may also change the highlighting color, providing a scope name such
|
One may also change the highlighting color, providing a scope name such
|
||||||
@@ -39,7 +45,9 @@ as "invalid", "comment"... in "File Settings - User":
|
|||||||
```
|
```
|
||||||
{
|
{
|
||||||
"highlight_whitespaces_space_highlight_scope_name": "invalid",
|
"highlight_whitespaces_space_highlight_scope_name": "invalid",
|
||||||
"highlight_whitespaces_tab_highlight_scope_name": "invalid"
|
"highlight_whitespaces_tab_highlight_scope_name": "invalid",
|
||||||
|
"highlight_whitespaces_eol_highlight_scope_name": "invalid",
|
||||||
|
"highlight_whitespaces_mixed_highlight_scope_name": "invalid"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,16 @@ Config summary (see README.md for details):
|
|||||||
{
|
{
|
||||||
"highlight_whitespaces_space_highlight_scope_name": "invalid",
|
"highlight_whitespaces_space_highlight_scope_name": "invalid",
|
||||||
"highlight_whitespaces_tab_highlight_scope_name": "invalid",
|
"highlight_whitespaces_tab_highlight_scope_name": "invalid",
|
||||||
|
"highlight_whitespaces_eol_highlight_scope_name": "invalid",
|
||||||
|
"highlight_whitespaces_mixed_highlight_scope_name": "invalid",
|
||||||
"highlight_whitespaces_file_max_size": 1048576,
|
"highlight_whitespaces_file_max_size": 1048576,
|
||||||
"highlight_whitespaces_enabled": true
|
"highlight_whitespaces_enabled": true,
|
||||||
|
"highlight_whitespaces_check_spaces": true,
|
||||||
|
"highlight_whitespaces_check_tabs": true,
|
||||||
|
"highlight_whitespaces_check_eol": true,
|
||||||
|
"highlight_whitespaces_check_mixed": false,
|
||||||
|
"highlight_whitespaces_single_space": false,
|
||||||
|
"highlight_last_whitespace": true
|
||||||
}
|
}
|
||||||
|
|
||||||
Forked from https://github.com/SublimeText/TrailingSpaces/ by Jean-Denis Vauguet <jd@vauguet.fr>, Oktay Acikalin <ok@ryotic.de>
|
Forked from https://github.com/SublimeText/TrailingSpaces/ by Jean-Denis Vauguet <jd@vauguet.fr>, Oktay Acikalin <ok@ryotic.de>
|
||||||
@@ -27,41 +35,85 @@ import sublime_plugin
|
|||||||
DEFAULT_MAX_FILE_SIZE = 1048576
|
DEFAULT_MAX_FILE_SIZE = 1048576
|
||||||
DEFAULT_COLOR_SCOPE_NAME = "invalid"
|
DEFAULT_COLOR_SCOPE_NAME = "invalid"
|
||||||
DEFAULT_IS_ENABLED = True
|
DEFAULT_IS_ENABLED = True
|
||||||
|
DEFAULT_CHECK_SPACES = True
|
||||||
|
DEFAULT_SINGLE_SPACE = False
|
||||||
|
DEFAULT_CHECK_EOL = True
|
||||||
|
DEFAULT_CHECK_TABS = True
|
||||||
|
DEFAULT_CHECK_MIXED = True
|
||||||
|
DEFAULT_LAST_WHITESPACE = False
|
||||||
|
|
||||||
#Set whether the plugin is on or off
|
#Set whether the plugin is on or off
|
||||||
hws_settings = sublime.load_settings('highlight_whitespaces.sublime-settings')
|
hws_settings = sublime.load_settings('highlight_whitespaces.sublime-settings')
|
||||||
hws_enabled = bool(hws_settings.get('highlight_whitespaces_enabled',
|
hws_enabled = bool(hws_settings.get('highlight_whitespaces_enabled',
|
||||||
DEFAULT_IS_ENABLED))
|
DEFAULT_IS_ENABLED))
|
||||||
|
|
||||||
|
def get_settings():
|
||||||
|
s = sublime.load_settings('highlight_whitespaces.sublime-settings')
|
||||||
|
return s
|
||||||
|
|
||||||
# Determine if the view is a find results view
|
# Determine if the view is a find results view
|
||||||
def is_find_results(view):
|
def is_find_results(view):
|
||||||
return view.settings().get('syntax') and "Find Results" in view.settings().get('syntax')
|
return view.settings().get('syntax') and "Find Results" in view.settings().get('syntax')
|
||||||
|
|
||||||
# Return an array of regions matching whitespaces.
|
# Return an array of regions matching whitespaces.
|
||||||
def find_whitespaces_spaces(view):
|
def find_whitespaces_spaces(view):
|
||||||
return view.find_all(' {2,}')
|
hws_settings = get_settings()
|
||||||
|
last_whitespace = bool(hws_settings.get('highlight_last_whitespace',DEFAULT_LAST_WHITESPACE))
|
||||||
|
single_space = bool(hws_settings.get('highlight_whitespaces_single_space',DEFAULT_SINGLE_SPACE))
|
||||||
|
if single_space:
|
||||||
|
regex = ' +'
|
||||||
|
else:
|
||||||
|
regex = ' {2,}|\t | \t'
|
||||||
|
if last_whitespace:
|
||||||
|
regex += '| {1,}$'
|
||||||
|
|
||||||
|
return view.find_all(regex)
|
||||||
|
|
||||||
def find_whitespaces_tabs(view):
|
def find_whitespaces_tabs(view):
|
||||||
return view.find_all('\t+')
|
return view.find_all('\t+')
|
||||||
|
|
||||||
|
def find_whitespaces_eol(view):
|
||||||
|
return view.find_all('[\t ]+$')
|
||||||
|
|
||||||
|
def find_whitespaces_mixed(view):
|
||||||
|
return view.find_all('(\t )|( \t)')
|
||||||
|
|
||||||
|
|
||||||
# Highlight whitespaces
|
# Highlight whitespaces
|
||||||
def highlight_whitespaces(view):
|
def highlight_whitespaces(view):
|
||||||
|
hws_settings = get_settings()
|
||||||
|
|
||||||
max_size = hws_settings.get('highlight_whitespaces_file_max_size',
|
max_size = hws_settings.get('highlight_whitespaces_file_max_size',
|
||||||
DEFAULT_MAX_FILE_SIZE)
|
DEFAULT_MAX_FILE_SIZE)
|
||||||
space_scope_name = hws_settings.get('highlight_whitespaces_space_highlight_scope_name',
|
space_scope_name = hws_settings.get('highlight_whitespaces_space_highlight_scope_name',
|
||||||
DEFAULT_COLOR_SCOPE_NAME)
|
DEFAULT_COLOR_SCOPE_NAME)
|
||||||
tab_scope_name = hws_settings.get('highlight_whitespaces_tab_highlight_scope_name',
|
tab_scope_name = hws_settings.get('highlight_whitespaces_tab_highlight_scope_name',
|
||||||
DEFAULT_COLOR_SCOPE_NAME)
|
DEFAULT_COLOR_SCOPE_NAME)
|
||||||
|
eol_scope_name = hws_settings.get('highlight_whitespaces_eol_highlight_scope_name',
|
||||||
|
DEFAULT_COLOR_SCOPE_NAME)
|
||||||
|
mixed_scope_name = hws_settings.get('highlight_whitespaces_mixed_highlight_scope_name',
|
||||||
|
DEFAULT_COLOR_SCOPE_NAME)
|
||||||
if view.size() <= max_size and not is_find_results(view):
|
if view.size() <= max_size and not is_find_results(view):
|
||||||
space_regions = find_whitespaces_spaces(view)
|
if hws_settings.get('highlight_whitespaces_check_spaces', DEFAULT_CHECK_SPACES):
|
||||||
view.add_regions('WhitespacesHighlightListener',
|
space_regions = find_whitespaces_spaces(view)
|
||||||
space_regions, space_scope_name,
|
view.add_regions('WhitespacesHighlightListener',
|
||||||
sublime.DRAW_EMPTY)
|
space_regions, space_scope_name, '',
|
||||||
tab_regions = find_whitespaces_tabs(view)
|
sublime.DRAW_EMPTY)
|
||||||
view.add_regions('WhitespacesHighlightListener2',
|
if hws_settings.get('highlight_whitespaces_check_tabs', DEFAULT_CHECK_TABS):
|
||||||
tab_regions, tab_scope_name,
|
tab_regions = find_whitespaces_tabs(view)
|
||||||
sublime.DRAW_EMPTY)
|
view.add_regions('WhitespacesHighlightListener2',
|
||||||
|
tab_regions, tab_scope_name, '',
|
||||||
|
sublime.DRAW_EMPTY)
|
||||||
|
if hws_settings.get('highlight_whitespaces_check_eol', DEFAULT_CHECK_EOL):
|
||||||
|
eol_regions = find_whitespaces_eol(view)
|
||||||
|
view.add_regions('WhitespacesHighlightListener3',
|
||||||
|
eol_regions, eol_scope_name, '',
|
||||||
|
sublime.DRAW_EMPTY)
|
||||||
|
if hws_settings.get('highlight_whitespaces_check_mixed', DEFAULT_CHECK_MIXED):
|
||||||
|
mixed_regions = find_whitespaces_mixed(view)
|
||||||
|
view.add_regions('WhitespacesHighlightListener4',
|
||||||
|
mixed_regions, mixed_scope_name, '',
|
||||||
|
sublime.DRAW_EMPTY)
|
||||||
|
|
||||||
|
|
||||||
# Clear all white spaces
|
# Clear all white spaces
|
||||||
@@ -69,6 +121,8 @@ def clear_whitespaces_highlight(window):
|
|||||||
for view in window.views():
|
for view in window.views():
|
||||||
view.erase_regions('WhitespacesHighlightListener')
|
view.erase_regions('WhitespacesHighlightListener')
|
||||||
view.erase_regions('WhitespacesHighlightListener2')
|
view.erase_regions('WhitespacesHighlightListener2')
|
||||||
|
view.erase_regions('WhitespacesHighlightListener3')
|
||||||
|
view.erase_regions('WhitespacesHighlightListener4')
|
||||||
|
|
||||||
|
|
||||||
# Toggle the event listner on or off
|
# Toggle the event listner on or off
|
||||||
@@ -112,3 +166,28 @@ class WhitespacesHighlightListener2(sublime_plugin.EventListener):
|
|||||||
if hws_enabled:
|
if hws_enabled:
|
||||||
highlight_whitespaces(view)
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
class WhitespacesHighlightListener3(sublime_plugin.EventListener):
|
||||||
|
def on_modified(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
def on_activated(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
def on_load(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
class WhitespacesHighlightListener4(sublime_plugin.EventListener):
|
||||||
|
def on_modified(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
def on_activated(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
def on_load(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|||||||
@@ -1,13 +1,35 @@
|
|||||||
{
|
{
|
||||||
// Spaces color is determined by scope (default, "invalid")
|
// Spaces color is determined by scope (default, "invalid")
|
||||||
// "highlight_whitespaces_space_highlight_scope_name": "Whitespaces.space.highlight",
|
// "highlight_whitespaces_space_highlight_scope_name": "Whitespaces.space.highlight",
|
||||||
|
|
||||||
// Tabs color is determined by scope (default, "invalid")
|
// Tabs color is determined by scope (default, "invalid")
|
||||||
// "highlight_whitespaces_tab_highlight_scope_name": "Whitespaces.tab.highlight",
|
// "highlight_whitespaces_tab_highlight_scope_name": "Whitespaces.tab.highlight",
|
||||||
|
|
||||||
// Max file size to search
|
// End-of-line color is determined by scope (default, "invalid")
|
||||||
|
// "highlight_whitespaces_eol_highlight_scope_name": "Whitespaces.eol.highlight",
|
||||||
|
|
||||||
|
// End-of-line color is determined by scope (default, "invalid")
|
||||||
|
// "highlight_whitespaces_mixed_highlight_scope_name": "Whitespaces.eol.highlight",
|
||||||
|
|
||||||
|
|
||||||
|
// Max file size to search
|
||||||
"highlight_whitespaces_file_max_size": 1048576,
|
"highlight_whitespaces_file_max_size": 1048576,
|
||||||
|
|
||||||
// By default plugin is enabled or disabled (true|false)
|
// By default plugin is enabled or disabled (true|false)
|
||||||
"highlight_whitespaces_enabled": true
|
"highlight_whitespaces_enabled": true,
|
||||||
|
|
||||||
|
// Whether to check for spaces
|
||||||
|
"highlight_whitespaces_check_spaces": true,
|
||||||
|
|
||||||
|
// Whether to check for tabs
|
||||||
|
"highlight_whitespaces_check_tabs": true,
|
||||||
|
|
||||||
|
// Whether to check for end-of-line whitespace
|
||||||
|
"highlight_whitespaces_check_eol": true,
|
||||||
|
|
||||||
|
// Whether to check for mixed tabs and spaces
|
||||||
|
"highlight_whitespaces_check_mixed": false,
|
||||||
|
|
||||||
|
// Allow the highlighting of the last whitespace, one or more time
|
||||||
|
"highlight_last_whitespace": true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user