Python sublime 模块,Phantom() 实例源码

我们从Python开源项目中,提取了以下14个代码示例,用于说明如何使用sublime.Phantom()

项目:Sublime-minihtml-Preview    作者:ehuss    | 项目源码 | 文件源码
def on_modified_async(self):
        output_id = self.view.settings().get('minihtml_preview_output_view_id')
        output_view = next(view for view in self.view.window().views()
            if view.id() == output_id)
        content = self.view.substr(sublime.Region(0, self.view.size()))

        buffer_id = output_view.buffer_id()
        if buffer_id in self.phantom_sets:
            ps = self.phantom_sets[buffer_id]
        else:
            ps = sublime.PhantomSet(output_view, 'minihtml_preview_phantom')
            self.phantom_sets[buffer_id] = ps

        p = sublime.Phantom(sublime.Region(0), content,
                            sublime.LAYOUT_BLOCK, _on_navigate)
        ps.update([p])
项目:MarkdownLivePreview    作者:math2001    | 项目源码 | 文件源码
def show_html(md_view, preview):
    global windows_phantom_set
    html = markdown2html(get_view_content(md_view), os.path.dirname(md_view.file_name()), md_view.settings().get('color_scheme'))

    phantom_set = windows_phantom_set.setdefault(preview.window().id(),
                                             sublime.PhantomSet(preview, 'markdown_live_preview'))
    phantom_set.update([sublime.Phantom(sublime.Region(0), html, sublime.LAYOUT_BLOCK,
                                    lambda href: sublime.run_command('open_url', {'url': href}))])

    # lambda href: sublime.run_command('open_url', {'url': href})
    # get the "ratio" of the markdown view's position.
    # 0 < y < 1
    y = md_view.text_to_layout(md_view.sel()[0].begin())[1] / md_view.layout_extent()[1]
    # set the vector (position) for the preview
    vector = [0, y * preview.layout_extent()[1]]
    # remove half of the viewport_extent.y to center it on the screen (verticaly)
    vector[1] -= preview.viewport_extent()[1] / 2
    # make sure the minimum is 0
    vector[1] = 0 if vector[1] < 0 else vector[1]
    # the hide the first line
    vector[1] += preview.line_height()
    preview.set_viewport_position(vector, animate=False)
项目:EasyClangComplete    作者:niosus    | 项目源码 | 文件源码
def show_phantoms(self, view):
        """Show phantoms for compilation errors.

        Args:
            view (sublime.View): current view
        """
        view.erase_phantoms(PopupErrorVis._TAG)
        if view.buffer_id() not in self.phantom_sets:
            phantom_set = sublime.PhantomSet(view, PopupErrorVis._TAG)
            self.phantom_sets[view.buffer_id()] = phantom_set
        else:
            phantom_set = self.phantom_sets[view.buffer_id()]
        phantoms = []
        current_error_dict = self.err_regions[view.buffer_id()]
        for err in current_error_dict:
            errors_dict = current_error_dict[err]
            errors_html = PhantomErrorVis._as_html(errors_dict)
            pt = view.text_point(err - 1, 1)
            phantoms.append(sublime.Phantom(
                sublime.Region(pt, view.line(pt).b),
                errors_html,
                sublime.LAYOUT_BELOW,
                on_navigate=self._on_phantom_navigate))
        phantom_set.update(phantoms)
项目:RemoteTree    作者:deNULL    | 项目源码 | 文件源码
def anim_loading(self):
        if self.loading > 0:
            self.loading_anim = (self.loading_anim + 1) % 8
            char = '????????'[self.loading_anim]
            html = '''<body id="loader">
<style>
    .spinner {
        display: inline;
        color: var(--redish);
    }
</style>
Loading <span class="spinner">%s</span></body>''' % char
            self.loader = sublime.Phantom(sublime.Region(len(self.server['remote_path'])), html, sublime.LAYOUT_INLINE)
            self.phantom_set.update([self.loader, self.phantom] if self.phantom else [self.loader])
            sublime.set_timeout(self.anim_loading, 100)
        else:
            print('removing anim')
            self.phantom_set.update([self.phantom] if self.phantom else [])
项目:imagepaste    作者:robinchenyu    | 项目源码 | 文件源码
def run(self, edit):
        print("run phantom")
        view = self.view
        dirname = os.path.dirname(__file__)
        for tp, line in self.get_line():
            m=re.search(r'!\[([^\]]*)\]\(([^)]*)\)', line)
            if m:
                name, file1 = m.group(1), m.group(2)
                message = ""
                file2 = os.path.join(os.path.dirname(view.file_name()), file1)
                # print("%s = %s" % (name, file1))
                region = tp

                command = ['/usr/bin/python3', os.path.join(dirname, 'bin/imageutil.py'), 'size']
                command.append(file2)

                out = self.run_command(" ".join(command))
                widthstr, heightstr = out.split(',')
                # with Image.open(file2) as im:
                # print("file: %s with size: %d %d" % (file1, im.width, im.height))
                message = '''<body>
                <img width="%s" height="%s" src="file://%s"></img>
                </body>''' % (widthstr, heightstr, file2)
                if len(name) == 0:
                    name = file1

        # phantom = sublime.Phantom(region, messag e, sublime.LAYOUT_BLOCK)
                print("message %s" % message)
                if not self.displayed:
                    self.view.add_phantom(name, region, message, sublime.LAYOUT_BLOCK)
                else:
                    self.view.erase_phantoms(name)
        # self.phantom_set.update([phantom])
        # view.show_popup('<img src="file://c://msys64/home/chenyu/diary/diary/diary8.jpg">')
        self.displayed = not self.displayed
项目:RelativeLineNumbers    作者:francescarpi    | 项目源码 | 文件源码
def _render(self):

        settings = self.view.settings()
        enabled = settings.get(OPT_ENABLED, True)

        self._clear()
        if not enabled:
            return

        phantoms = []
        current_line = self.view.rowcol(self.view.sel()[0].begin())[0]
        current_line_char = settings.get(OPT_CURRENT_CHAR, "0")
        lines = self.view.lines(self.view.visible_region())

        for line in lines:
            line_number = self.view.rowcol(line.a)[0]
            value = self._value(
                line_number, current_line, current_line_char)

            phantoms.append(
                sublime.Phantom(
                    line, self._tpl(value, line_number == current_line),
                    sublime.LAYOUT_INLINE))

        self._phantoms.update(phantoms)
        self.view.set_viewport_position(
            (0, self.view.viewport_position()[1]), False)
        sublime.set_timeout(self._clear, settings.get(OPT_CLEAR_TIMEOUT, 1000))
项目:LSP    作者:tomv564    | 项目源码 | 文件源码
def create_phantom(view: sublime.View, diagnostic: Diagnostic) -> sublime.Phantom:
    region = diagnostic.range.to_region(view)
    # TODO: hook up hide phantom (if keeping them)
    content = create_phantom_html(diagnostic.message)
    return sublime.Phantom(
        region,
        '<p>' + content + '</p>',
        sublime.LAYOUT_BELOW,
        lambda href: on_phantom_navigate(view, href, region.begin())
    )
项目:PyTest    作者:kaste    | 项目源码 | 文件源码
def build_phantoms(view, errs, formatter):
    phantoms = []

    show_focus_links = len(errs) > 1
    for tbck in errs:
        line = tbck['line']
        text = tbck['text']
        testcase = tbck.get('testcase')

        if text == '':
            continue

        pt = view.text_point(line - 1, 0)
        indentation = get_indentation_at(view, pt)
        text = formatter.format_text(text, indentation)

        if show_focus_links and testcase:
            focus_link = (
                ' <a href="focus:{}">focus test</a>'.format(testcase))

            lines = text.split('<br />')
            text = '<br />'.join([lines[0] + focus_link] + lines[1:])

        phantoms.append(sublime.Phantom(
            sublime.Region(pt, view.line(pt).b),
            ('<body id=inline-error>' + STYLESHEET +
                '<div class="error">' +
                '<span class="message">' + text + '</span>' +
                '</div>' +
                '</body>'),
            sublime.LAYOUT_BELOW, _on_navigate))

    return phantoms
项目:ChromiumXRefs    作者:karlinjf    | 项目源码 | 文件源码
def createPhantom(self, doc, view):
    xref_data = self.data[view.window().id()];
    loc = sublime.Region(0,0);
    return sublime.Phantom(loc, doc, sublime.LAYOUT_BELOW, lambda link: self.processLink(link, self.callers, view));
项目:RemoteTree    作者:deNULL    | 项目源码 | 文件源码
def rebuild_phantom(self):
        html = '''<body id="tree">
<style>
    body {
        font-size: 12px;
        line-height: 16px;
    }
    .file a, .dir a {
        display: block;
        padding-left: 4px;
    }
    .dir a {
        padding-top: 1px;
        padding-bottom: 2px;
    }
    .dir a {
        text-decoration: none;
    }
    .file.active {
        background-color: color(var(--background) blend(var(--foreground) 80%));
        border-radius: 3px;
    }
    .file span {
        font-size: 7px; 
    }
    .file a {
        text-decoration: none;
        color: var(--foreground);
    }
</style>''' + ''.join(self.render_subtree(self.tree, [])) + '</body>'
        self.phantom = sublime.Phantom(sublime.Region(0), html, sublime.LAYOUT_BLOCK, on_navigate=self.on_click)
        self.phantom_set.update([self.phantom])
项目:sublime-text-3-packages    作者:nickjj    | 项目源码 | 文件源码
def update(self, new_phantoms):
            """Update the list of phantoms that exist in the text buffer with their current location."""

            regions = query_phantoms(self.view, [p.id for p in self.phantoms])
            for i in range(len(regions)):
                self.phantoms[i].region = regions[i]

            count = 0
            for p in new_phantoms:
                if not isinstance(p, Phantom):
                    # Convert sublime.Phantom to mdpopups.Phantom
                    p = Phantom(
                        p.region, p.content, p.layout,
                        md=False, css=None, on_navigate=p.on_navigate, wrapper_class=None,
                        template_vars=None, template_env_options=None, nl2br=False
                    )
                    new_phantoms[count] = p
                try:
                    # Phantom already exists, copy the id from the current one
                    idx = self.phantoms.index(p)
                    p.id = self.phantoms[idx].id
                except ValueError:
                    p.id = add_phantom(
                        self.view,
                        self.key,
                        p.region,
                        p.content,
                        p.layout,
                        p.md,
                        p.css,
                        p.on_navigate,
                        p.wrapper_class,
                        p.template_vars,
                        p.template_env_options,
                        p.nl2br
                    )
                count += 1

            for p in self.phantoms:
                # if the region is -1, then it's already been deleted, no need to call erase
                if p not in new_phantoms and p.region != sublime.Region(-1):
                    erase_phantom_by_id(self.view, p.id)

            self.phantoms = new_phantoms
项目:macos-st-packages    作者:zce    | 项目源码 | 文件源码
def update(self, new_phantoms):
            """Update the list of phantoms that exist in the text buffer with their current location."""

            regions = query_phantoms(self.view, [p.id for p in self.phantoms])
            for i in range(len(regions)):
                self.phantoms[i].region = regions[i]

            count = 0
            for p in new_phantoms:
                if not isinstance(p, Phantom):
                    # Convert sublime.Phantom to mdpopups.Phantom
                    p = Phantom(
                        p.region, p.content, p.layout,
                        md=False, css=None, on_navigate=p.on_navigate, wrapper_class=None,
                        template_vars=None, template_env_options=None, nl2br=False
                    )
                    new_phantoms[count] = p
                try:
                    # Phantom already exists, copy the id from the current one
                    idx = self.phantoms.index(p)
                    p.id = self.phantoms[idx].id
                except ValueError:
                    p.id = add_phantom(
                        self.view,
                        self.key,
                        p.region,
                        p.content,
                        p.layout,
                        p.md,
                        p.css,
                        p.on_navigate,
                        p.wrapper_class,
                        p.template_vars,
                        p.template_env_options,
                        p.nl2br
                    )
                count += 1

            for p in self.phantoms:
                # if the region is -1, then it's already been deleted, no need to call erase
                if p not in new_phantoms and p.region != sublime.Region(-1):
                    erase_phantom_by_id(self.view, p.id)

            self.phantoms = new_phantoms
项目:sublimeplugins    作者:ktuan89    | 项目源码 | 文件源码
def run(self, edit):
        (viewport_x, viewport_y) = self.view.viewport_position()
        path = gitPath(self.view.window())
        current_path = self.view.file_name()
        if current_path is not None and current_path.startswith(path):
            remaining_path = current_path[len(path):]
            command = ("cd '{0}';git blame --show-email '{1}'").format(path, remaining_path)

            output, _ = run_bash_for_output(command)
            lines = output.split('\n')

            line_count = 0

            regions = self.view.lines(sublime.Region(0, self.view.size()))
            phantoms = []

            last_hash = None

            for line in lines:
                matches = re.search(r'^([0-9a-z]+).*?\(<(.*?)>', line)
                # print(line, ' ', matches)
                if matches is not None and line_count < len(regions):
                    hash = matches.group(1)
                    email = matches.group(2)
                    at_position = email.find("@")
                    if at_position != -1:
                        email = email[:at_position]
                    if len(email) > 10:
                        email = email[:10]
                    email = "{:*>10}".format(email)

                    if hash == last_hash:
                        email = "." * 10
                        html = "<b>{0}</b>".format(email)
                    else:
                        html = "<a href='{0}'>{1}</a>".format(hash, email)

                    last_hash = hash

                    r = regions[line_count]
                    phantom = Phantom(sublime.Region(r.begin(), r.begin()), html, sublime.LAYOUT_INLINE, lambda link: self.click(link) )
                    phantoms.append(phantom)

                line_count = line_count + 1
            global phantomSet
            phantomSet = PhantomSet(self.view, 'git_blame')
            phantomSet.update(phantoms)
            global viewIdToPhantomSet
            viewIdToPhantomSet[self.view.id()] = phantomSet
            self.view.set_viewport_position((0, viewport_y))
项目:sublimeTextConfig    作者:luoye-fe    | 项目源码 | 文件源码
def update(self, new_phantoms):
            """Update the list of phantoms that exist in the text buffer with their current location."""

            regions = query_phantoms(self.view, [p.id for p in self.phantoms])
            for i in range(len(regions)):
                self.phantoms[i].region = regions[i]

            count = 0
            for p in new_phantoms:
                if not isinstance(p, Phantom):
                    # Convert sublime.Phantom to mdpopups.Phantom
                    p = Phantom(
                        p.region, p.content, p.layout,
                        md=False, css=None, on_navigate=p.on_navigate, wrapper_class=None,
                        template_vars=None, template_env_options=None, nl2br=False
                    )
                    new_phantoms[count] = p
                try:
                    # Phantom already exists, copy the id from the current one
                    idx = self.phantoms.index(p)
                    p.id = self.phantoms[idx].id
                except ValueError:
                    p.id = add_phantom(
                        self.view,
                        self.key,
                        p.region,
                        p.content,
                        p.layout,
                        p.md,
                        p.css,
                        p.on_navigate,
                        p.wrapper_class,
                        p.template_vars,
                        p.template_env_options,
                        p.nl2br
                    )
                count += 1

            for p in self.phantoms:
                # if the region is -1, then it's already been deleted, no need to call erase
                if p not in new_phantoms and p.region != sublime.Region(-1):
                    erase_phantom_by_id(self.view, p.id)

            self.phantoms = new_phantoms