2
2
# License: GPLv3 Copyright: 2020, Kovid Goyal <kovid at kovidgoyal.net>
3
3
4
4
import json
5
- import os
6
5
from collections .abc import Callable
7
- from typing import TYPE_CHECKING , Sequence
6
+ from typing import TYPE_CHECKING
8
7
9
8
from kitty .constants import appname
10
9
11
10
from .base import MATCH_TAB_OPTION , MATCH_WINDOW_OPTION , ArgsType , Boss , PayloadGetType , PayloadType , RCOptions , RemoteCommand , ResponseType , Tab , Window
12
- from ..boss import OSWindowDict
13
- from ..child import ProcessDesc
14
- from ..launch import is_excluded_env_var
15
11
16
12
if TYPE_CHECKING :
17
13
from kitty .cli_stub import LSRCOptions as CLIOptions
@@ -52,7 +48,7 @@ class LS(RemoteCommand):
52
48
type=choices
53
49
choices=json,session
54
50
default=json
55
- Output in json or session format
51
+ Output in JSON or kitty session format
56
52
''' + '\n \n ' + MATCH_WINDOW_OPTION + '\n \n ' + MATCH_TAB_OPTION .replace ('--match -m' , '--match-tab -t' , 1 )
57
53
58
54
def message_to_kitty (self , global_opts : RCOptions , opts : 'CLIOptions' , args : ArgsType ) -> PayloadType :
@@ -61,7 +57,6 @@ def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: Arg
61
57
def response_from_kitty (self , boss : Boss , window : Window | None , payload_get : PayloadGetType ) -> ResponseType :
62
58
tab_filter : Callable [[Tab ], bool ] | None = None
63
59
window_filter : Callable [[Window ], bool ] | None = None
64
- output_session : bool = False
65
60
66
61
if payload_get ('self' ):
67
62
def wf (w : Window ) -> bool :
@@ -73,31 +68,28 @@ def wf(w: Window) -> bool:
73
68
return w .id in window_ids
74
69
window_filter = wf
75
70
elif payload_get ('output_format' ) == 'session' :
76
- output_session = True
77
-
78
- if not output_session :
79
- data = list (boss .list_os_windows (window , tab_filter , window_filter ))
80
- if not payload_get ('all_env_vars' ):
81
- all_env_blocks : list [dict [str , str ]] = []
82
- common_env_vars : set [tuple [str , str ]] = set ()
83
- for osw in data :
84
- for tab in osw .get ('tabs' , ()):
85
- for w in tab .get ('windows' , ()):
86
- env : dict [str , str ] = w .get ('env' , {})
87
- frozen_env = set (env .items ())
88
- if all_env_blocks :
89
- common_env_vars &= frozen_env
90
- else :
91
- common_env_vars = frozen_env
92
- all_env_blocks .append (env )
93
- if common_env_vars and len (all_env_blocks ) > 1 :
94
- remove_env_vars = {k for k , v in common_env_vars }
95
- for env in all_env_blocks :
96
- for r in remove_env_vars :
97
- env .pop (r , None )
98
- return json .dumps (data , indent = 2 , sort_keys = True )
99
- else :
100
71
return "\n " .join (boss .serialize_state_as_session ())
101
72
73
+ data = list (boss .list_os_windows (window , tab_filter , window_filter ))
74
+ if not payload_get ('all_env_vars' ):
75
+ all_env_blocks : list [dict [str , str ]] = []
76
+ common_env_vars : set [tuple [str , str ]] = set ()
77
+ for osw in data :
78
+ for tab in osw .get ('tabs' , ()):
79
+ for w in tab .get ('windows' , ()):
80
+ env : dict [str , str ] = w .get ('env' , {})
81
+ frozen_env = set (env .items ())
82
+ if all_env_blocks :
83
+ common_env_vars &= frozen_env
84
+ else :
85
+ common_env_vars = frozen_env
86
+ all_env_blocks .append (env )
87
+ if common_env_vars and len (all_env_blocks ) > 1 :
88
+ remove_env_vars = {k for k , v in common_env_vars }
89
+ for env in all_env_blocks :
90
+ for r in remove_env_vars :
91
+ env .pop (r , None )
92
+ return json .dumps (data , indent = 2 , sort_keys = True )
93
+
102
94
103
95
ls = LS ()
0 commit comments