Skip to content

Commit a9444ae

Browse files
authored
Show previews in side view for Goto commands with side_by_side (#1982)
Resolves #1980
1 parent f83cb86 commit a9444ae

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

plugin/locationpicker.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ def open_basic_file(
2929
position: Position,
3030
flags: int = 0,
3131
group: Optional[int] = None
32-
) -> None:
32+
) -> sublime.View:
3333
filename = session.config.map_server_uri_to_client_path(uri)
3434
if group is None:
3535
group = session.window.active_group()
36-
session.window.open_file(to_encoded_filename(filename, position), flags=flags, group=group)
36+
return session.window.open_file(to_encoded_filename(filename, position), flags=flags, group=group)
3737

3838

3939
class LocationPicker:
@@ -53,6 +53,7 @@ def __init__(
5353
self._weaksession = weakref.ref(session)
5454
self._side_by_side = side_by_side
5555
self._items = locations
56+
self._highlighted_view = None # type: Optional[sublime.View]
5657
manager = session.manager()
5758
base_dir = manager.get_project_path(view.file_name() or "") if manager else None
5859
self._window.show_quick_panel(
@@ -76,20 +77,35 @@ def _select_entry(self, index: int) -> None:
7677
# otherwise the bevior feels weird. It's the only reason why open_basic_file exists.
7778
if uri.startswith("file:"):
7879
flags = sublime.ENCODED_POSITION
79-
if self._side_by_side:
80-
flags |= sublime.ADD_TO_SELECTION | sublime.SEMI_TRANSIENT
81-
open_basic_file(session, uri, position, flags)
80+
if not self._side_by_side:
81+
open_basic_file(session, uri, position, flags)
8282
else:
8383
sublime.set_timeout_async(functools.partial(open_location_async, session, location, self._side_by_side))
8484
else:
8585
self._window.focus_view(self._view)
86+
# When in side-by-side mode close the current highlighted
87+
# sheet upon canceling if the sheet is semi-transient
88+
if self._side_by_side and self._highlighted_view:
89+
sheet = self._highlighted_view.sheet()
90+
if sheet and sheet.is_semi_transient():
91+
self._highlighted_view.close()
8692

8793
def _highlight_entry(self, index: int) -> None:
8894
session, _, uri, position = self._unpack(index)
8995
if not session:
9096
return
9197
if uri.startswith("file:"):
92-
open_basic_file(session, uri, position, sublime.TRANSIENT | sublime.ENCODED_POSITION)
98+
flags = sublime.ENCODED_POSITION | sublime.FORCE_GROUP
99+
if self._side_by_side:
100+
if self._highlighted_view and self._highlighted_view.is_valid():
101+
# Replacing the MRU is done relative to the current highlighted sheet
102+
self._window.focus_view(self._highlighted_view)
103+
flags |= sublime.REPLACE_MRU | sublime.SEMI_TRANSIENT
104+
else:
105+
flags |= sublime.ADD_TO_SELECTION | sublime.SEMI_TRANSIENT
106+
else:
107+
flags |= sublime.TRANSIENT
108+
self._highlighted_view = open_basic_file(session, uri, position, flags, self._window.active_group())
93109
else:
94110
# TODO: Preview non-file uris?
95111
debug("no preview for", uri)

stubs/sublime.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,9 @@ class Sheet:
649649
def view(self) -> 'Optional[View]':
650650
...
651651

652+
def is_semi_transient(self) -> bool:
653+
...
654+
652655
def is_transient(self) -> bool:
653656
...
654657

0 commit comments

Comments
 (0)