示例#1
0
    def synctex(self, obj, event):
        click_x = event.x + self.scroll.get_hscrollbar().get_value()
        click_y = event.y + self.scroll.get_vscrollbar().get_value()
        for idx in range(self.doc.get_n_pages()):
            page_rect = Gdk.Rectangle()
            page_border = Gtk.Border()
            self.doc_view.get_page_extents(idx, page_rect, page_border)
            if (page_rect.x < click_x < (page_rect.x + page_rect.width)
                    and page_rect.y < click_y <
                (page_rect.y + page_rect.height)):
                page_size = self.doc.get_page_size(idx)
                page_x = (page_size.width / page_rect.width) * (click_x -
                                                                page_rect.x)
                page_y = (page_size.height / page_rect.height) * (click_y -
                                                                  page_rect.y)
                page_idx = idx
                break
        else:  # clicked outside page
            return

        # print(f'clicked on page {page_idx} at page coordinates {page_x}, {page_y}')

        result = self.doc.synctex_backward_search(page_idx, page_x, page_y)
        if result is not None:
            filename = realpath(result.filename)
            if not isfile(filename): return
            self.nvim.command(f'edit {filename}')
            self.nvim.command(f'{result.line}')