highlight tabs and double-spaces, modify default settings
This commit is contained in:
parent
b20299a0ea
commit
af12f19988
|
@ -1,20 +1,24 @@
|
||||||
'''
|
'''
|
||||||
Provides both a trailing spaces highlighter and a deletion command.
|
Marks all tabs and two or more spaces in each line with separate colors
|
||||||
|
|
||||||
Config summary (see README.md for details):
|
Config summary (see README.md for details):
|
||||||
|
|
||||||
# key binding
|
# key binding
|
||||||
{ "keys": ["ctrl+shift+t"], "command": "delete_trailing_spaces" }
|
{ "keys": ["ctrl+alt+w"], "command": "hws_toggle_whitespaces" }
|
||||||
|
|
||||||
# file settings
|
# file settings
|
||||||
{
|
{
|
||||||
"trailing_spaces_highlight_color": "invalid",
|
"highlight_whitespaces_space_highlight_scope_name": "invalid",
|
||||||
"trailing_spaces_file_max_size": 1000
|
"highlight_whitespaces_tab_highlight_scope_name": "invalid",
|
||||||
|
"highlight_whitespaces_file_max_size": 1048576,
|
||||||
|
"highlight_whitespaces_enabled": true
|
||||||
}
|
}
|
||||||
|
|
||||||
@author: 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>
|
||||||
|
|
||||||
|
@author: Kemal Hadimli <disq@sf.net>
|
||||||
@license: MIT (http://www.opensource.org/licenses/mit-license.php)
|
@license: MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||||
@since: 2011-02-25
|
@since: 2012-10-05
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import sublime
|
import sublime
|
||||||
|
@ -25,86 +29,86 @@ DEFAULT_COLOR_SCOPE_NAME = "invalid"
|
||||||
DEFAULT_IS_ENABLED = True
|
DEFAULT_IS_ENABLED = True
|
||||||
|
|
||||||
#Set whether the plugin is on or off
|
#Set whether the plugin is on or off
|
||||||
ts_settings = sublime.load_settings('trailing_spaces.sublime-settings')
|
hws_settings = sublime.load_settings('highlight_whitespaces.sublime-settings')
|
||||||
trailing_spaces_enabled = bool(ts_settings.get('trailing_spaces_enabled',
|
hws_enabled = bool(hws_settings.get('highlight_whitespaces_enabled',
|
||||||
DEFAULT_IS_ENABLED))
|
DEFAULT_IS_ENABLED))
|
||||||
|
|
||||||
# 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 trailing spaces.
|
# Return an array of regions matching whitespaces.
|
||||||
def find_trailing_spaces(view):
|
def find_whitespaces_spaces(view):
|
||||||
include_empty_lines = bool(ts_settings.get('trailing_spaces_include_empty_lines',
|
return view.find_all(' {2,}')
|
||||||
DEFAULT_IS_ENABLED))
|
|
||||||
return view.find_all('[ \t]+$' if include_empty_lines else '(?<=\S)[\t ]+$')
|
def find_whitespaces_tabs(view):
|
||||||
|
return view.find_all('\t+')
|
||||||
|
|
||||||
|
|
||||||
# Highlight trailing spaces
|
# Highlight whitespaces
|
||||||
def highlight_trailing_spaces(view):
|
def highlight_whitespaces(view):
|
||||||
max_size = ts_settings.get('trailing_spaces_file_max_size',
|
max_size = hws_settings.get('highlight_whitespaces_file_max_size',
|
||||||
DEFAULT_MAX_FILE_SIZE)
|
DEFAULT_MAX_FILE_SIZE)
|
||||||
color_scope_name = ts_settings.get('trailing_spaces_highlight_color',
|
space_scope_name = hws_settings.get('highlight_whitespaces_space_highlight_scope_name',
|
||||||
|
DEFAULT_COLOR_SCOPE_NAME)
|
||||||
|
tab_scope_name = hws_settings.get('highlight_whitespaces_tab_highlight_scope_name',
|
||||||
DEFAULT_COLOR_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):
|
||||||
regions = find_trailing_spaces(view)
|
space_regions = find_whitespaces_spaces(view)
|
||||||
view.add_regions('TrailingSpacesHighlightListener',
|
view.add_regions('WhitespacesHighlightListener',
|
||||||
regions, color_scope_name,
|
space_regions, space_scope_name,
|
||||||
|
sublime.DRAW_EMPTY)
|
||||||
|
tab_regions = find_whitespaces_tabs(view)
|
||||||
|
view.add_regions('WhitespacesHighlightListener2',
|
||||||
|
tab_regions, tab_scope_name,
|
||||||
sublime.DRAW_EMPTY)
|
sublime.DRAW_EMPTY)
|
||||||
|
|
||||||
|
|
||||||
# Clear all trailing spaces
|
# Clear all white spaces
|
||||||
def clear_trailing_spaces_highlight(window):
|
def clear_whitespaces_highlight(window):
|
||||||
for view in window.views():
|
for view in window.views():
|
||||||
view.erase_regions('TrailingSpacesHighlightListener')
|
view.erase_regions('WhitespacesHighlightListener')
|
||||||
|
view.erase_regions('WhitespacesHighlightListener2')
|
||||||
|
|
||||||
|
|
||||||
# Toggle the event listner on or off
|
# Toggle the event listner on or off
|
||||||
class ToggleTrailingSpacesCommand(sublime_plugin.WindowCommand):
|
class HwsToggleWhitespacesCommand(sublime_plugin.WindowCommand):
|
||||||
def run(self):
|
def run(self):
|
||||||
global trailing_spaces_enabled
|
global hws_enabled
|
||||||
trailing_spaces_enabled = False if trailing_spaces_enabled else True
|
hws_enabled = False if hws_enabled else True
|
||||||
|
|
||||||
# If toggling on, go ahead and perform a pass,
|
# If toggling on, go ahead and perform a pass,
|
||||||
# else clear the highlighting in all views
|
# else clear the highlighting in all views
|
||||||
if trailing_spaces_enabled:
|
if hws_enabled:
|
||||||
highlight_trailing_spaces(self.window.active_view())
|
highlight_whitespaces(self.window.active_view())
|
||||||
else:
|
else:
|
||||||
clear_trailing_spaces_highlight(self.window)
|
clear_whitespaces_highlight(self.window)
|
||||||
|
|
||||||
|
|
||||||
# Highlight matching regions.
|
# Highlight matching regions.
|
||||||
class TrailingSpacesHighlightListener(sublime_plugin.EventListener):
|
class WhitespacesHighlightListener(sublime_plugin.EventListener):
|
||||||
def on_modified(self, view):
|
def on_modified(self, view):
|
||||||
if trailing_spaces_enabled:
|
if hws_enabled:
|
||||||
highlight_trailing_spaces(view)
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
def on_activated(self, view):
|
def on_activated(self, view):
|
||||||
if trailing_spaces_enabled:
|
if hws_enabled:
|
||||||
highlight_trailing_spaces(view)
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
def on_load(self, view):
|
def on_load(self, view):
|
||||||
if trailing_spaces_enabled:
|
if hws_enabled:
|
||||||
highlight_trailing_spaces(view)
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
|
class WhitespacesHighlightListener2(sublime_plugin.EventListener):
|
||||||
|
def on_modified(self, view):
|
||||||
|
if hws_enabled:
|
||||||
|
highlight_whitespaces(view)
|
||||||
|
|
||||||
# Allows to erase matching regions.
|
def on_activated(self, view):
|
||||||
class DeleteTrailingSpacesCommand(sublime_plugin.TextCommand):
|
if hws_enabled:
|
||||||
def run(self, edit):
|
highlight_whitespaces(view)
|
||||||
regions = find_trailing_spaces(self.view)
|
|
||||||
if regions:
|
|
||||||
# deleting a region changes the other regions positions, so we
|
|
||||||
# handle this maintaining an offset
|
|
||||||
offset = 0
|
|
||||||
for region in regions:
|
|
||||||
r = sublime.Region(region.a + offset, region.b + offset)
|
|
||||||
self.view.erase(edit, sublime.Region(r.a, r.b))
|
|
||||||
offset -= r.size()
|
|
||||||
|
|
||||||
msg_parts = {"nbRegions": len(regions),
|
def on_load(self, view):
|
||||||
"plural": 's' if len(regions) > 1 else ''}
|
if hws_enabled:
|
||||||
msg = "Deleted %(nbRegions)s trailing spaces region%(plural)s" % msg_parts
|
highlight_whitespaces(view)
|
||||||
else:
|
|
||||||
msg = "No trailing spaces to delete!"
|
|
||||||
|
|
||||||
sublime.status_message(msg)
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
{
|
{
|
||||||
// Color is determined by scope
|
// Spaces color is determined by scope (default, "invalid")
|
||||||
"trailing_spaces_highlight_color" : "invalid",
|
// "highlight_whitespaces_space_highlight_scope_name": "Whitespaces.space.highlight",
|
||||||
|
|
||||||
|
// Tabs color is determined by scope (default, "invalid")
|
||||||
|
// "highlight_whitespaces_tab_highlight_scope_name": "Whitespaces.tab.highlight",
|
||||||
|
|
||||||
// Max file size to search
|
// Max file size to search
|
||||||
"trailing_spaces_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)
|
||||||
"trailing_spaces_enabled" : true,
|
"highlight_whitespaces_enabled": true
|
||||||
|
|
||||||
// By default empty lines are cleared
|
|
||||||
"trailing_spaces_include_empty_lines" : true
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user