本文整理汇总了Python中view_collection.ViewCollection.diff_line_change方法的典型用法代码示例。如果您正苦于以下问题:Python ViewCollection.diff_line_change方法的具体用法?Python ViewCollection.diff_line_change怎么用?Python ViewCollection.diff_line_change使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类view_collection.ViewCollection
的用法示例。
在下文中一共展示了ViewCollection.diff_line_change方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: show_diff_popup
# 需要导入模块: from view_collection import ViewCollection [as 别名]
# 或者: from view_collection.ViewCollection import diff_line_change [as 别名]
def show_diff_popup(view, point, flags=0):
if not _MDPOPUPS_INSTALLED:
return
line = view.rowcol(point)[0] + 1
lines, start, size, meta = ViewCollection.diff_line_change(view, line)
if start == -1:
return
# extract the type of the hunk: removed, modified, (x)or added
is_removed = size == 0
is_modified = not is_removed and bool(lines)
is_added = not is_removed and not is_modified
def navigate(href):
if href == "hide":
view.hide_popup()
elif href == "revert":
new_text = "\n".join(lines)
# (removed) if there is no text to remove, set the
# region to the end of the line, where the hunk starts
# and add a new line to the start of the text
if is_removed:
if start != 0:
# set the start and the end to the end of the start line
start_point = end_point = view.text_point(start, 0) - 1
# add a leading newline before inserting the text
new_text = "\n" + new_text
else:
# (special handling for deleted at the start of the file)
# if we are before the start we need to set the start
# to 0 and add the newline behind the text
start_point = end_point = 0
new_text = new_text + "\n"
# (modified/added)
# set the start point to the start of the hunk
# and the end point to the end of the hunk
else:
start_point = view.text_point(start - 1, 0)
end_point = view.text_point(start + size - 1, 0)
# (modified) if there is text to insert, we
# don't want to capture the trailing newline,
# because we insert lines without a trailing newline
if is_modified and end_point != view.size():
end_point -= 1
replace_param = {
"a": start_point,
"b": end_point,
"text": new_text
}
view.run_command("git_gutter_replace_text", replace_param)
# hide the popup and update the gutter
view.hide_popup()
view.window().run_command("git_gutter")
elif href == "copy":
sublime.set_clipboard("\n".join(lines))
copy_message = " ".join(l.strip() for l in lines)
sublime.status_message("Copied: " + copy_message)
elif href in ["next_change", "prev_change", "first_change"]:
next_line = meta.get(href, line)
pt = view.text_point(next_line - 1, 0)
def show_new_popup():
if view.visible_region().contains(pt):
show_diff_popup(view, pt, flags=flags)
else:
sublime.set_timeout(show_new_popup, 10)
view.show_at_center(pt)
show_new_popup()
# write the symbols/text for each button
use_icons = settings.get("diff_popup_use_icon_buttons")
# the buttons as a map from the href to the caption/icon
button_descriptions = {
"hide": chr(0x00D7) if use_icons else "(close)",
"copy": chr(0x2398) if use_icons else "(copy)",
"revert": chr(0x27F2) if use_icons else "(revert)",
"first_change": chr(0x2912) if use_icons else "(first)",
"prev_change": chr(0x2191) if use_icons else "(previous)",
"next_change": chr(0x2193) if use_icons else "(next)"
}
def is_button_enabled(k):
if k in ["first_change", "next_change", "prev_change"]:
return meta.get(k, start) != start
return True
buttons = {}
for k, v in button_descriptions.items():
if is_button_enabled(k):
buttons[k] = '[{0}]({1})'.format(v, k)
else:
buttons[k] = v
if not is_added:
# (modified/removed) show the button line above the content,
# which in git
lang = mdpopups.get_language_from_view(view) or ""
# strip the indent to the minimal indentation
is_tab_indent = any(l.startswith("\t") for l in lines)
#.........这里部分代码省略.........