def on_post_text_command(self, view, command_name, args):
window = view.window()
env = Env.For(window)
if not env or view != env.terminal:
# Not a console window - nothing to do
return
selected_line = view.substr(view.line(view.sel()[0]))
cp_error_pattern = re.compile(self.CLICKABLE_CP_ERROR_PATTERN)
rt_error_pattern = re.compile(self.CLICKABLE_RT_ERROR_PATTERN)
orig_file = None
orig_line = None
cp_match = cp_error_pattern.match(selected_line)
if cp_match: # Compilation error message
orig_file = cp_match.group(1)
orig_line = int(cp_match.group(2)) - 1
else:
rt_match = rt_error_pattern.match(selected_line)
if rt_match: # Runtime error message
orig_file = rt_match.group(1)
orig_line = int(rt_match.group(2)) - 1
log_debug("Selected line: " + selected_line + ", original file name: " +
str(orig_file) + " orig_line: " + str(orig_line))
if orig_file is not None and orig_line is not None:
source_dir = os.path.join(os.path.dirname(window.project_file_name()), PR_SOURCE_DIRECTORY)
file_name = os.path.join(source_dir, orig_file)
if not os.path.exists(file_name):
return
file_view = window.open_file(file_name)
def select_region():
if file_view.is_loading():
sublime.set_timeout_async(select_region, 0)
return
# First, erase all previous error marks
file_view.erase_regions(PL_ERROR_REGION_KEY)
# Create a new error mark
pt = file_view.text_point(orig_line, 0)
error_region = sublime.Region(pt)
file_view.add_regions(PL_ERROR_REGION_KEY,
[error_region],
scope="keyword",
icon="circle",
flags=sublime.DRAW_SOLID_UNDERLINE)
file_view.show(error_region)
attempt = 0
max_attempts = 3
while attempt < max_attempts:
attempt += 1
sublime.set_timeout(select_region, 100)
if not file_view.is_loading():
break
评论列表
文章目录