Fix bugs
This commit is contained in:
parent
b5108ad5a2
commit
c436487742
37
kls
37
kls
|
@ -2,8 +2,7 @@
|
||||||
import curses
|
import curses
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
# инициализация экрана
|
screen = curses.initscr() # инициализация экрана
|
||||||
screen = curses.initscr()
|
|
||||||
screen.refresh() # не знаю зачем это нужно но без этого не работает
|
screen.refresh() # не знаю зачем это нужно но без этого не работает
|
||||||
curses.set_escdelay(1) # в curses зачем-то сделали задержку на срабатывание Escape, уменьшаем её до 1 милисекунды (до 0 нельзя)
|
curses.set_escdelay(1) # в curses зачем-то сделали задержку на срабатывание Escape, уменьшаем её до 1 милисекунды (до 0 нельзя)
|
||||||
screen.keypad(True) # нужно для работы с клавишами F1-F4
|
screen.keypad(True) # нужно для работы с клавишами F1-F4
|
||||||
|
@ -20,6 +19,8 @@ SELECTED_WITH_SEARCH = 2 # выбрано и поиск включен
|
||||||
NOT_SELECTED_WITHOUT_SEARCH = 3 # не выбрано и поиск выключен
|
NOT_SELECTED_WITHOUT_SEARCH = 3 # не выбрано и поиск выключен
|
||||||
NOT_SELECTED_WITH_SEARCH = 4 # не выбрано и поиск включен
|
NOT_SELECTED_WITH_SEARCH = 4 # не выбрано и поиск включен
|
||||||
|
|
||||||
|
state = "running" # состояние программы
|
||||||
|
|
||||||
|
|
||||||
class Menu:
|
class Menu:
|
||||||
def __init__(self, name, rows, begin_x, width, state):
|
def __init__(self, name, rows, begin_x, width, state):
|
||||||
|
@ -141,12 +142,13 @@ def navigate_horizontally(direction, menu):
|
||||||
|
|
||||||
|
|
||||||
def navigate_vertically(direction, menu):
|
def navigate_vertically(direction, menu):
|
||||||
filtered_rows = list(
|
filtered_rows = list(filter(lambda x: (menu.filter in x), menu.rows)) # какие строки сейчас в меню, учитывая фильтр?
|
||||||
filter(lambda x: (menu.filter in x), menu.rows)) # какие строки сейчас в меню, учитывая фильтр?
|
|
||||||
if not filtered_rows or len(filtered_rows) == 1: return # если строк нет или строка одна, навигация не нужна
|
if not filtered_rows or len(filtered_rows) == 1: return # если строк нет или строка одна, навигация не нужна
|
||||||
increment = {"down": 1, "up": -1}
|
increment = {"down": 1, "up": -1}
|
||||||
menu.selected_row = (menu.selected_row + increment[direction]) % len(
|
menu.selected_row = (menu.selected_row + increment[direction]) % len(filtered_rows) # выбираем строку учитывая сколько строк в меню
|
||||||
filtered_rows) # выбираем строку учитывая сколько строк в меню
|
if menu != menu3:
|
||||||
|
update_menu3_object()
|
||||||
|
draw_menu(menu3)
|
||||||
draw_menu(menu) # перерисовываем меню
|
draw_menu(menu) # перерисовываем меню
|
||||||
|
|
||||||
|
|
||||||
|
@ -155,14 +157,17 @@ def handle_selected_with_search_state(key_pressed, menu):
|
||||||
menu.filter = ""
|
menu.filter = ""
|
||||||
menu.selected_row = 0
|
menu.selected_row = 0
|
||||||
menu.state = SELECTED_WITHOUT_SEARCH
|
menu.state = SELECTED_WITHOUT_SEARCH
|
||||||
draw_menu(menu)
|
|
||||||
elif key_pressed == "KEY_BACKSPACE":
|
elif key_pressed == "KEY_BACKSPACE":
|
||||||
menu.state = SELECTED_WITHOUT_SEARCH if not menu.filter else menu.state
|
menu.state = SELECTED_WITHOUT_SEARCH if not menu.filter else menu.state
|
||||||
menu.filter = menu.filter[:-1] if menu.filter else ""
|
menu.filter = menu.filter[:-1] if menu.filter else ""
|
||||||
draw_menu(menu)
|
|
||||||
elif key_pressed.isalpha() or key_pressed == "-":
|
elif key_pressed.isalpha() or key_pressed == "-":
|
||||||
menu.filter += key_pressed
|
menu.filter += key_pressed
|
||||||
menu.selected_row = 0
|
menu.selected_row = 0
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
if menu != menu3:
|
||||||
|
update_menu3_object()
|
||||||
|
draw_menu(menu3)
|
||||||
draw_menu(menu)
|
draw_menu(menu)
|
||||||
|
|
||||||
|
|
||||||
|
@ -171,7 +176,8 @@ def handle_selected_without_search_state(key_pressed, menu):
|
||||||
menu.state = SELECTED_WITH_SEARCH
|
menu.state = SELECTED_WITH_SEARCH
|
||||||
draw_search_box(menu)
|
draw_search_box(menu)
|
||||||
elif key_pressed == "q":
|
elif key_pressed == "q":
|
||||||
return "interrupt"
|
global state
|
||||||
|
state = "interrupt"
|
||||||
|
|
||||||
|
|
||||||
def catch_input(menu):
|
def catch_input(menu):
|
||||||
|
@ -182,21 +188,14 @@ def catch_input(menu):
|
||||||
elif key_pressed == "KEY_UP": navigate_vertically("up", menu)
|
elif key_pressed == "KEY_UP": navigate_vertically("up", menu)
|
||||||
elif key_pressed in ["KEY_F(1)", "KEY_F(2)", "KEY_F(3)", "KEY_F(4)"]: run_command(key_pressed)
|
elif key_pressed in ["KEY_F(1)", "KEY_F(2)", "KEY_F(3)", "KEY_F(4)"]: run_command(key_pressed)
|
||||||
elif menu.state == SELECTED_WITH_SEARCH: handle_selected_with_search_state(key_pressed, menu)
|
elif menu.state == SELECTED_WITH_SEARCH: handle_selected_with_search_state(key_pressed, menu)
|
||||||
elif menu.state == SELECTED_WITHOUT_SEARCH:
|
elif menu.state == SELECTED_WITHOUT_SEARCH: handle_selected_without_search_state(key_pressed, menu)
|
||||||
result = handle_selected_without_search_state(key_pressed, menu)
|
|
||||||
if result:
|
|
||||||
return result
|
|
||||||
if menu != menu3 and key_pressed not in ["KEY_RIGHT", "KEY_LEFT", "\t", "KEY_BTAB", "/"]:
|
|
||||||
update_menu3_object()
|
|
||||||
draw_menu(menu3)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
draw_window() # рисуем начальный экран
|
draw_window() # рисуем начальный экран
|
||||||
state = "running"
|
while state == "running":
|
||||||
while state != "interrupt":
|
|
||||||
for menu in menus:
|
for menu in menus:
|
||||||
if menu.state in [1, 2]: state = catch_input(menu)
|
if menu.state in [1, 2]: catch_input(menu) # если меню выбрано, перехватываем ввод пользователя
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue