Add search namespaces function
This commit is contained in:
parent
b7c3c105b5
commit
fd1d1150ac
65
kls
65
kls
|
@ -4,6 +4,10 @@ import subprocess
|
||||||
|
|
||||||
stdscr = None
|
stdscr = None
|
||||||
|
|
||||||
|
def filter_words(words, start):
|
||||||
|
return list(filter(lambda s: s.startswith(start), words))
|
||||||
|
|
||||||
|
# я не знаю, что делается в этой функции.
|
||||||
def init_screen():
|
def init_screen():
|
||||||
global stdscr
|
global stdscr
|
||||||
stdscr = curses.initscr()
|
stdscr = curses.initscr()
|
||||||
|
@ -18,14 +22,14 @@ init_screen()
|
||||||
class Menu:
|
class Menu:
|
||||||
def __init__(self, name, rows, begin_x):
|
def __init__(self, name, rows, begin_x):
|
||||||
self.name = name # заголовок окна
|
self.name = name # заголовок окна
|
||||||
self.rows = rows
|
self.rows = rows # строки окна
|
||||||
self.begin_x = begin_x
|
self.begin_x = begin_x # где начинается окно по х?
|
||||||
self.win = curses.newwin(curses.LINES, curses.COLS // 3, 0, begin_x)
|
self.win = curses.newwin(curses.LINES, curses.COLS // 3, 0, begin_x) # окно с высотой во весь экран, шириной экран / 3, и началом по х в точке begin_x
|
||||||
self.win.box()
|
self.win.box() # ?
|
||||||
self.win.addstr(1, 2, self.name)
|
self.win.addstr(1, 2, self.name) # рисуем заголовок
|
||||||
for index, row in enumerate(self.rows):
|
for index, row in enumerate(self.rows): # рисуем строки
|
||||||
self.win.addstr(index + 3, 2, row)
|
self.win.addstr(index + 3, 2, row) # + 3 потому что я хочу чтобы строки оборажались ниже заголовка на три строки
|
||||||
self.row = 0
|
self.row = 0 # выбранная строка
|
||||||
|
|
||||||
|
|
||||||
# рисуем первое меню
|
# рисуем первое меню
|
||||||
|
@ -60,6 +64,8 @@ def run_command(command, current_menu, rows=None):
|
||||||
menu.win.clear()
|
menu.win.clear()
|
||||||
menu.win.box()
|
menu.win.box()
|
||||||
menu.win.addstr(1, 2, menu.name)
|
menu.win.addstr(1, 2, menu.name)
|
||||||
|
if menu.name == "Namespaces":
|
||||||
|
menu.win.addstr(curses.LINES - 2, 2, "Press / for search")
|
||||||
if rows and menu.name == "Resources":
|
if rows and menu.name == "Resources":
|
||||||
menu.rows = rows
|
menu.rows = rows
|
||||||
menu.row = 0
|
menu.row = 0
|
||||||
|
@ -97,18 +103,60 @@ def navigate_vertically(direction, current_menu):
|
||||||
|
|
||||||
|
|
||||||
def main(stdscr):
|
def main(stdscr):
|
||||||
|
search_mode = False
|
||||||
|
search_string = ""
|
||||||
stdscr.refresh()
|
stdscr.refresh()
|
||||||
running = True
|
running = True
|
||||||
current_menu = 0
|
current_menu = 0
|
||||||
menus[current_menu].win.addstr(1, 2, menus[current_menu].name, curses.A_REVERSE | curses.A_ITALIC)
|
menus[current_menu].win.addstr(1, 2, menus[current_menu].name, curses.A_REVERSE | curses.A_ITALIC)
|
||||||
for menu in menus:
|
for menu in menus:
|
||||||
menu.win.addstr(3, 2, menu.rows[menu.row], curses.A_REVERSE | curses.A_ITALIC)
|
menu.win.addstr(3, 2, menu.rows[menu.row], curses.A_REVERSE | curses.A_ITALIC)
|
||||||
|
if menu.name == "Namespaces":
|
||||||
|
menu.win.addstr(curses.LINES - 2, 2, "Press / for search")
|
||||||
while running:
|
while running:
|
||||||
[menu.win.refresh() for menu in menus] # refresh all menus
|
[menu.win.refresh() for menu in menus] # refresh all menus
|
||||||
key_pressed = stdscr.getkey()
|
key_pressed = stdscr.getkey()
|
||||||
|
|
||||||
|
if current_menu == 0:
|
||||||
|
if key_pressed == "/":
|
||||||
|
search_mode = True
|
||||||
|
if search_mode:
|
||||||
|
if key_pressed == "KEY_BACKSPACE":
|
||||||
|
if search_string:
|
||||||
|
search_string = search_string[:-1]
|
||||||
|
else:
|
||||||
|
search_mode = False
|
||||||
|
elif key_pressed.isalpha() or key_pressed == "-":
|
||||||
|
search_string += key_pressed
|
||||||
|
elif key_pressed == "/" and search_string == "":
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
init_screen()
|
||||||
|
for menu in menus:
|
||||||
|
menu.win.clear() # очищаем окно
|
||||||
|
menu.win.box()
|
||||||
|
menu.win.addstr(1, 2, menu.name) # добавляем заголовок окна
|
||||||
|
if menu.name == "Namespaces":
|
||||||
|
menu.rows = list(filter(lambda x: (x.startswith(search_string)), namespaces)) # меняем строки у окна Namespaces
|
||||||
|
menu.row = 0
|
||||||
|
if search_mode:
|
||||||
|
menu.win.addstr(curses.LINES - 2, 2, f"/{search_string}")
|
||||||
|
else:
|
||||||
|
menu.win.addstr(curses.LINES - 2, 2, "Press / for search")
|
||||||
|
|
||||||
|
for index, row in enumerate(menu.rows):
|
||||||
|
menu.win.addstr(index + 3, 2, row)
|
||||||
|
if menu.rows:
|
||||||
|
menu.win.addstr(3, 2, menu.rows[menu.row], curses.A_REVERSE | curses.A_ITALIC) # выделяем первую строку
|
||||||
|
menus[current_menu].win.addstr(1, 2, menus[current_menu].name, curses.A_REVERSE | curses.A_ITALIC) # помечаем выбранное меню
|
||||||
|
continue
|
||||||
|
|
||||||
match key_pressed:
|
match key_pressed:
|
||||||
case 'q':
|
case 'q':
|
||||||
running = False
|
running = False
|
||||||
|
case '/':
|
||||||
|
search_mode = True
|
||||||
case 'g':
|
case 'g':
|
||||||
if current_menu == 2 and not menus[2].rows[menus[2].row].startswith("No resources"):
|
if current_menu == 2 and not menus[2].rows[menus[2].row].startswith("No resources"):
|
||||||
run_command("f'kubectl -n {namespace} get {api_resource} {resource} -o yaml | batcat -l yaml --paging always --style numbers'", current_menu)
|
run_command("f'kubectl -n {namespace} get {api_resource} {resource} -o yaml | batcat -l yaml --paging always --style numbers'", current_menu)
|
||||||
|
@ -129,7 +177,6 @@ def main(stdscr):
|
||||||
navigate_vertically("down", current_menu)
|
navigate_vertically("down", current_menu)
|
||||||
case "KEY_UP":
|
case "KEY_UP":
|
||||||
navigate_vertically("up", current_menu)
|
navigate_vertically("up", current_menu)
|
||||||
|
|
||||||
main(stdscr)
|
main(stdscr)
|
||||||
|
|
||||||
curses.nocbreak()
|
curses.nocbreak()
|
||||||
|
|
Loading…
Reference in New Issue