@@ -29,11 +29,11 @@ def open_basic_file(
29
29
position : Position ,
30
30
flags : int = 0 ,
31
31
group : Optional [int ] = None
32
- ) -> None :
32
+ ) -> sublime . View :
33
33
filename = session .config .map_server_uri_to_client_path (uri )
34
34
if group is None :
35
35
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 )
37
37
38
38
39
39
class LocationPicker :
@@ -53,6 +53,7 @@ def __init__(
53
53
self ._weaksession = weakref .ref (session )
54
54
self ._side_by_side = side_by_side
55
55
self ._items = locations
56
+ self ._highlighted_view = None # type: Optional[sublime.View]
56
57
manager = session .manager ()
57
58
base_dir = manager .get_project_path (view .file_name () or "" ) if manager else None
58
59
self ._window .show_quick_panel (
@@ -76,20 +77,35 @@ def _select_entry(self, index: int) -> None:
76
77
# otherwise the bevior feels weird. It's the only reason why open_basic_file exists.
77
78
if uri .startswith ("file:" ):
78
79
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 )
82
82
else :
83
83
sublime .set_timeout_async (functools .partial (open_location_async , session , location , self ._side_by_side ))
84
84
else :
85
85
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 ()
86
92
87
93
def _highlight_entry (self , index : int ) -> None :
88
94
session , _ , uri , position = self ._unpack (index )
89
95
if not session :
90
96
return
91
97
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 ())
93
109
else :
94
110
# TODO: Preview non-file uris?
95
111
debug ("no preview for" , uri )
0 commit comments