diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-07-23 17:47:08 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-07-23 17:47:08 +0000 |
commit | 93f505942c8091a3ebbf6f08764635f19dc79095 (patch) | |
tree | 70a82c65c774eab5b060e2a2c39b0996d2c1a1cf /lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py | |
parent | ea5c94b497cfc43f9ec513f721e03aa5c669249a (diff) | |
download | bcm5719-llvm-93f505942c8091a3ebbf6f08764635f19dc79095.tar.gz bcm5719-llvm-93f505942c8091a3ebbf6f08764635f19dc79095.zip |
[Utils] Add back utils directory
Due to a bug my earlier commit removed the whole utils directory:
https://reviews.llvm.org/D65123
llvm-svn: 366830
Diffstat (limited to 'lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py')
-rw-r--r-- | lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py b/lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py new file mode 100644 index 00000000000..94f79ecebe8 --- /dev/null +++ b/lldb/utils/vim-lldb/python-vim-lldb/vim_signs.py @@ -0,0 +1,81 @@ + +# Classes responsible for drawing signs in the Vim user interface. + +import vim + + +class VimSign(object): + SIGN_TEXT_BREAKPOINT_RESOLVED = "B>" + SIGN_TEXT_BREAKPOINT_UNRESOLVED = "b>" + SIGN_TEXT_PC = "->" + SIGN_HIGHLIGHT_COLOUR_PC = 'darkblue' + + # unique sign id (for ':[sign/highlight] define) + sign_id = 1 + + # unique name id (for ':sign place') + name_id = 1 + + # Map of {(sign_text, highlight_colour) --> sign_name} + defined_signs = {} + + def __init__(self, sign_text, buffer, line_number, highlight_colour=None): + """ Define the sign and highlight (if applicable) and show the sign. """ + + # Get the sign name, either by defining it, or looking it up in the map + # of defined signs + key = (sign_text, highlight_colour) + if key not in VimSign.defined_signs: + name = self.define(sign_text, highlight_colour) + else: + name = VimSign.defined_signs[key] + + self.show(name, buffer.number, line_number) + pass + + def define(self, sign_text, highlight_colour): + """ Defines sign and highlight (if highlight_colour is not None). """ + sign_name = "sign%d" % VimSign.name_id + if highlight_colour is None: + vim.command("sign define %s text=%s" % (sign_name, sign_text)) + else: + self.highlight_name = "highlight%d" % VimSign.name_id + vim.command( + "highlight %s ctermbg=%s guibg=%s" % + (self.highlight_name, highlight_colour, highlight_colour)) + vim.command( + "sign define %s text=%s linehl=%s texthl=%s" % + (sign_name, sign_text, self.highlight_name, self.highlight_name)) + VimSign.defined_signs[(sign_text, highlight_colour)] = sign_name + VimSign.name_id += 1 + return sign_name + + def show(self, name, buffer_number, line_number): + self.id = VimSign.sign_id + VimSign.sign_id += 1 + vim.command("sign place %d name=%s line=%d buffer=%s" % + (self.id, name, line_number, buffer_number)) + pass + + def hide(self): + vim.command("sign unplace %d" % self.id) + pass + + +class BreakpointSign(VimSign): + + def __init__(self, buffer, line_number, is_resolved): + txt = VimSign.SIGN_TEXT_BREAKPOINT_RESOLVED if is_resolved else VimSign.SIGN_TEXT_BREAKPOINT_UNRESOLVED + super(BreakpointSign, self).__init__(txt, buffer, line_number) + + +class PCSign(VimSign): + + def __init__(self, buffer, line_number, is_selected_thread): + super( + PCSign, + self).__init__( + VimSign.SIGN_TEXT_PC, + buffer, + line_number, + VimSign.SIGN_HIGHLIGHT_COLOUR_PC if is_selected_thread else None) |