listpick 0.1.14.9__tar.gz → 0.1.14.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of listpick might be problematic. Click here for more details.

Files changed (60) hide show
  1. {listpick-0.1.14.9 → listpick-0.1.14.11}/CHANGELOG.md +5 -1
  2. {listpick-0.1.14.9/src/listpick.egg-info → listpick-0.1.14.11}/PKG-INFO +1 -1
  3. {listpick-0.1.14.9 → listpick-0.1.14.11}/TODO.md +9 -6
  4. {listpick-0.1.14.9 → listpick-0.1.14.11}/setup.py +1 -1
  5. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/listpick_app.py +17 -31
  6. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/build_help.py +63 -28
  7. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/footer.py +3 -0
  8. {listpick-0.1.14.9 → listpick-0.1.14.11/src/listpick.egg-info}/PKG-INFO +1 -1
  9. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick.egg-info/SOURCES.txt +0 -1
  10. listpick-0.1.14.9/src/listpick/ui/git-bugreport-2025-08-16-1438.txt +0 -37
  11. {listpick-0.1.14.9 → listpick-0.1.14.11}/.gitignore +0 -0
  12. {listpick-0.1.14.9 → listpick-0.1.14.11}/LICENSE.txt +0 -0
  13. {listpick-0.1.14.9 → listpick-0.1.14.11}/README.md +0 -0
  14. {listpick-0.1.14.9 → listpick-0.1.14.11}/assets/aria2tui_screenshot.png +0 -0
  15. {listpick-0.1.14.9 → listpick-0.1.14.11}/assets/file_compare.png +0 -0
  16. {listpick-0.1.14.9 → listpick-0.1.14.11}/assets/lpfman.png +0 -0
  17. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/data_generation/list_files.toml +0 -0
  18. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/data_generation/list_files_empty.toml +0 -0
  19. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/data_generation/video_duplicates.toml +0 -0
  20. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/data_generation/video_mediainfo.toml +0 -0
  21. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/input_files/polynomials.tsv +0 -0
  22. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/input_guides/gnuplot_graph.md +0 -0
  23. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/picker/auxiallary_files/2024-25_Premier_League.pkl +0 -0
  24. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/picker/footer_string_example.py +0 -0
  25. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/picker/picker_example.py +0 -0
  26. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/picker/template.py +0 -0
  27. {listpick-0.1.14.9 → listpick-0.1.14.11}/examples/picker/wikipedia_table.py +0 -0
  28. {listpick-0.1.14.9 → listpick-0.1.14.11}/listpick.py +0 -0
  29. {listpick-0.1.14.9 → listpick-0.1.14.11}/requirements.txt +0 -0
  30. {listpick-0.1.14.9 → listpick-0.1.14.11}/setup.cfg +0 -0
  31. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/__init__.py +0 -0
  32. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/__main__.py +0 -0
  33. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/__init__.py +0 -0
  34. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/help_screen.py +0 -0
  35. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/input_field.py +0 -0
  36. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/keys.py +0 -0
  37. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/pane_stuff.py +0 -0
  38. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/ui/picker_colours.py +0 -0
  39. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/__init__.py +0 -0
  40. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/clipboard_operations.py +0 -0
  41. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/config.py +0 -0
  42. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/dump.py +0 -0
  43. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/filtering.py +0 -0
  44. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/generate_data.py +0 -0
  45. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/keycodes.py +0 -0
  46. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/options_selectors.py +0 -0
  47. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/paste_operations.py +0 -0
  48. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/picker_log.py +0 -0
  49. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/search_and_filter_utils.py +0 -0
  50. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/searching.py +0 -0
  51. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/sorting.py +0 -0
  52. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/table_to_list_of_lists.py +0 -0
  53. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/user_input.py +0 -0
  54. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick/utils/utils.py +0 -0
  55. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick.egg-info/dependency_links.txt +0 -0
  56. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick.egg-info/entry_points.txt +0 -0
  57. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick.egg-info/requires.txt +0 -0
  58. {listpick-0.1.14.9 → listpick-0.1.14.11}/src/listpick.egg-info/top_level.txt +0 -0
  59. {listpick-0.1.14.9 → listpick-0.1.14.11}/tests/kitty_control.sh +0 -0
  60. {listpick-0.1.14.9 → listpick-0.1.14.11}/tests/sorting_dates.csv +0 -0
@@ -16,6 +16,7 @@ Note that the changes between 0.1.11.0 and 1.1.12.0 are listed under 0.1.11
16
16
  - Closing files causes issues switching between files.
17
17
  - Fixed crash when loading non-existent config file.
18
18
  - Fixed highlighted cell not being aligned in the way that we expect.
19
+ - Fixed search query covering last row of data.
19
20
  - Create ~/.config/listpick directory for storing input history if it doesn't already exist.
20
21
  - Added error checking when opening files.
21
22
  - Added --headerless flag to prevent interpreting the first line of the input as the header.
@@ -24,7 +25,10 @@ Note that the changes between 0.1.11.0 and 1.1.12.0 are listed under 0.1.11
24
25
  - meta+key (input_field)
25
26
  - Added column number to footer
26
27
  - Improved splitting of whitespace separated data passed on stdin.
27
- - Main picker is now refreshed after a resize when there is a notification.
28
+ - Ensured that main picker elements resize if the terminal is resized when other dialogues are in focus: notifications, options, settings.
29
+ - Added method to check for terminal resize.
30
+ - Was necessary since we are no longer using getch from curses so we can't test whether getch() == curses.KEY_RESIZE.
31
+ - Added Alt+keys in build_help.
28
32
 
29
33
  ## [0.1.14] 2025-08-20
30
34
  - Fixed bug when cells are centred vertically.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: listpick
3
- Version: 0.1.14.9
3
+ Version: 0.1.14.11
4
4
  Summary: Listpick is a powerful TUI data tool for creating TUI apps or viewing/comparing tabulated data.
5
5
  Home-page: https://github.com/grimandgreedy/listpick
6
6
  Author: Grim
@@ -14,13 +14,14 @@ ASAP
14
14
  > - [ ] Sheet states remain the same when switching files.
15
15
  > - [x] Deal with nan values in xlsx and ods files.
16
16
  > - [ ] They are set to empyt strings.
17
- > - [ ] Fix special keys not working:
18
- > - [ ] May need to create separate keycodes...
19
- > - [ ] F1-f12
20
- > - [ ] Tab, shift+tab
21
- > - [ ] Delete, shift+delete
22
- > - [ ] Alt+KEY
17
+ > - [x] Fix special keys not working:
18
+ > - [x] May need to create separate keycodes...
19
+ > - [x] F1-f12
20
+ > - [x] Tab, shift+tab
21
+ > - [x] Delete, shift+delete
22
+ > - [x] Alt+KEY
23
23
  > - [x] Arrow keys
24
+ > - [x] Add new keycodes to build_help().
24
25
 
25
26
 
26
27
 
@@ -369,6 +370,8 @@ ASAP
369
370
  > - [x] Some can't be switched to...
370
371
  > - [x] Fixed.
371
372
  > - [x] Highlighted cells display padded cell string when it should not be padded.
373
+ > - [x] When there is an active search it overlaps the last row.
374
+ > - [x] Update footer height when there is a search query.
372
375
 
373
376
 
374
377
 
@@ -16,7 +16,7 @@ with open("README.md", "r", encoding = "utf-8") as fh:
16
16
 
17
17
  setuptools.setup(
18
18
  name = "listpick",
19
- version = "0.1.14.9",
19
+ version = "0.1.14.11",
20
20
  author = "Grim",
21
21
  author_email = "grimandgreedy@protonmail.com",
22
22
  description = "Listpick is a powerful TUI data tool for creating TUI apps or viewing/comparing tabulated data.",
@@ -188,7 +188,6 @@ class Picker:
188
188
  sheet_index = 0,
189
189
  sheet_states = [{}],
190
190
 
191
- redraw_screen_accessory: Callable = lambda : None,
192
191
 
193
192
  ):
194
193
  self.stdscr = stdscr
@@ -338,7 +337,6 @@ class Picker:
338
337
  self.sheet_states = sheet_states
339
338
  self.sheets = sheets
340
339
 
341
- self.redraw_screen_accessory = redraw_screen_accessory
342
340
  self.initialise_picker_state(reset_colours=self.reset_colours)
343
341
 
344
342
  # Note: We have to set the footer after initialising the picker state so that the footer can use the get_function_data method
@@ -752,7 +750,6 @@ class Picker:
752
750
  def draw_screen_(self, indexed_items: list[Tuple[int, list[str]]], highlights: list[dict] = [{}], clear: bool = True) -> None:
753
751
  """ Draw Picker screen. """
754
752
 
755
- self.redraw_screen_accessory()
756
753
  self.logger.debug("Draw screen.")
757
754
 
758
755
  if clear:
@@ -1242,7 +1239,6 @@ class Picker:
1242
1239
  "sheets": self.sheets,
1243
1240
  "sheet_name": self.sheet_name,
1244
1241
  "sheet_states": self.sheet_states,
1245
- "redraw_screen_accessory": self.redraw_screen_accessory,
1246
1242
  }
1247
1243
  return function_data
1248
1244
 
@@ -1277,7 +1273,6 @@ class Picker:
1277
1273
  "centre_in_terminal_vertical",
1278
1274
  "centre_in_cols",
1279
1275
  "centre_in_terminal",
1280
- "redraw_screen_accessory",
1281
1276
  ]
1282
1277
 
1283
1278
  for var in variables:
@@ -1370,7 +1365,6 @@ class Picker:
1370
1365
  "cancel_is_back": True,
1371
1366
  "number_columns": False,
1372
1367
  "reset_colours": False,
1373
- "cell_cursor": False,
1374
1368
  }
1375
1369
  while True:
1376
1370
  h, w = stdscr.getmaxyx()
@@ -1390,7 +1384,7 @@ class Picker:
1390
1384
  if s:
1391
1385
  return {x: options[x] for x in s}, o, f
1392
1386
  return {}, "", f
1393
-
1387
+
1394
1388
 
1395
1389
 
1396
1390
  def notification(self, stdscr: curses.window, message: str="", title:str="Notification", colours_end: int=0, duration:int=4) -> None:
@@ -1401,12 +1395,7 @@ class Picker:
1401
1395
  message_width = notification_width-5
1402
1396
 
1403
1397
  if not message: message = "!!"
1404
- if type(message) == type(""):
1405
- mw = message_width
1406
- submenu_items = [[message[i*mw:(i+1)*mw]] for i in range(len(message)//mw+1)]
1407
- elif type(message) != type([]):
1408
- submenu_items = [[" !!"]]
1409
-
1398
+ submenu_items = [" "+message[i*message_width:(i+1)*message_width] for i in range(len(message)//message_width+1)]
1410
1399
 
1411
1400
  notification_remap_keys = {
1412
1401
  curses.KEY_RESIZE: curses.KEY_F5,
@@ -1416,12 +1405,6 @@ class Picker:
1416
1405
  h, w = stdscr.getmaxyx()
1417
1406
 
1418
1407
  submenu_win = curses.newwin(notification_height, notification_width, 3, w - (notification_width+4))
1419
- # submenu_win = self.stdscr.subwin(notification_height, notification_width, 3, w - (notification_width+4))
1420
- def update_after_resize():
1421
- h, w = self.stdscr.getmaxyx()
1422
- submenu_win.mvwin(3, w - (notification_width+4))
1423
- self.draw_screen(self.indexed_items, self.highlights)
1424
-
1425
1408
  notification_data = {
1426
1409
  "items": submenu_items,
1427
1410
  "title": title,
@@ -1438,19 +1421,9 @@ class Picker:
1438
1421
  "cancel_is_back": True,
1439
1422
  "reset_colours": False,
1440
1423
 
1441
- "loaded_files": [],
1442
- "loaded_file_states": [],
1443
- "loaded_file": "",
1444
- "loaded_file_index": 0,
1445
- "cell_cursor": False,
1446
- # "redraw_screen_accessory": lambda : self.draw_screen(self.indexed_items, self.highlights),
1447
- "redraw_screen_accessory": update_after_resize,
1448
- "get_new_data": False,
1449
- # "key_remappings": notification_remap_keys,
1450
1424
  }
1451
1425
  OptionPicker = Picker(submenu_win, **notification_data)
1452
1426
  s, o, f = OptionPicker.run()
1453
- os.system(f"notify-send resizing")
1454
1427
 
1455
1428
  if o != "refresh": break
1456
1429
  submenu_win.clear()
@@ -1459,7 +1432,6 @@ class Picker:
1459
1432
  stdscr.clear()
1460
1433
  stdscr.refresh()
1461
1434
  self.draw_screen(self.indexed_items, self.highlights)
1462
-
1463
1435
  # set_colours(colours=get_colours(0))
1464
1436
 
1465
1437
  def toggle_column_visibility(self, col_index:int) -> None:
@@ -2248,6 +2220,13 @@ class Picker:
2248
2220
  # Open tty to accept input
2249
2221
  tty_fd = open_tty()
2250
2222
 
2223
+ h, w = self.stdscr.getmaxyx()
2224
+ def terminal_resized(old_w, old_h) -> bool:
2225
+ w, h = os.get_terminal_size()
2226
+ if old_h != h or old_w != w: return True
2227
+ else: return False
2228
+
2229
+ COLS, LINES = os.get_terminal_size()
2251
2230
  # Main loop
2252
2231
  while True:
2253
2232
  # key = self.stdscr.getch()
@@ -2255,7 +2234,14 @@ class Picker:
2255
2234
  key = get_char(tty_fd, timeout=0.2)
2256
2235
  if key != -1:
2257
2236
  self.logger.info(f"key={key}")
2237
+
2238
+ self.term_resize_event = terminal_resized(COLS, LINES)
2239
+ COLS, LINES = os.get_terminal_size()
2240
+ if self.term_resize_event:
2241
+ key = curses.KEY_RESIZE
2242
+
2258
2243
  h, w = self.stdscr.getmaxyx()
2244
+
2259
2245
  if key in self.disabled_keys: continue
2260
2246
  clear_screen=True
2261
2247
 
@@ -3110,7 +3096,7 @@ class Picker:
3110
3096
  self.logger.info(f"key_function opts_select")
3111
3097
  s, o, f = self.choose_option(self.stdscr, self.options_list)
3112
3098
  if self.user_opts.strip(): self.user_opts += " "
3113
- self.user_opts += " ".join([x for x in s.values()])
3099
+ self.user_opts += " ".join([x[0] for x in s.values()])
3114
3100
  elif self.check_key("notification_toggle", key, self.keys_dict):
3115
3101
  self.logger.info(f"key_function notification_toggle")
3116
3102
  self.notification(self.stdscr, colours_end=self.colours_end)
@@ -7,16 +7,18 @@ Author: GrimAndGreedy
7
7
  License: MIT
8
8
  """
9
9
 
10
- from listpick.ui.keys import picker_keys
10
+ from listpick.ui.keys import picker_keys, notification_keys
11
11
  import curses
12
12
  import logging
13
+ from listpick.utils import keycodes
13
14
 
14
15
  logger = logging.getLogger('picker_log')
15
16
 
16
- def build_help_rows(keys_dict: dict) -> list[list[str]]:
17
+ def build_help_rows(keys_dict: dict, debug: bool = False) -> list[list[str]]:
17
18
  """ Build help rows based on the keys_dict. """
18
19
 
19
20
  logger.info(f"function: build_help_rows() (build_help.py)")
21
+
20
22
  ## Key names
21
23
  special_keys = {
22
24
 
@@ -35,16 +37,35 @@ def build_help_rows(keys_dict: dict) -> list[list[str]]:
35
37
  ord('\n'): "\n",
36
38
  curses.KEY_DC: "Delete",
37
39
  383: "Shift+Delete",
40
+ ord("\t"): "Tab",
41
+ curses.KEY_BACKSPACE: "Backspace",
42
+ keycodes.META_BS: "Alt+Backspace",
38
43
  }
39
44
 
40
45
  # Ctrl + [a-z]
41
46
  for i in range(26):
42
47
  special_keys[i+1] = f"Ctrl+{chr(ord('a')+i)}"
48
+ if i == 8:
49
+ special_keys[i+1] = f"Tab/Ctrl+{chr(ord('a')+i)}"
50
+
43
51
 
44
52
  # F1-F12
45
53
  for i in range(12):
46
54
  special_keys[curses.KEY_F1+i] = f"F{i+1}"
47
55
 
56
+ # Alt+[a-z]
57
+ for i in range(26):
58
+ special_keys[keycodes.META_a +i] = f"Alt+{chr(ord('a')+i)}"
59
+
60
+ # Alt+[A-Z]
61
+ for i in range(26):
62
+ special_keys[keycodes.META_A +i] = f"Alt+{chr(ord('A')+i)}"
63
+
64
+ # Alt+[0-9]
65
+ for i in range(10):
66
+ special_keys[keycodes.META_0] = f"Alt+{i}"
67
+
68
+
48
69
  ## Key descriptions
49
70
  help_descriptions = {
50
71
  "refresh": "Refresh the screen.",
@@ -119,14 +140,16 @@ def build_help_rows(keys_dict: dict) -> list[list[str]]:
119
140
  "info": "Display info screen.",
120
141
  "file_next": "Go to the next open file.",
121
142
  "file_prev": "Go to the previous open file.",
143
+ "sheet_next": "Go to the next sheet.",
144
+ "sheet_prev": "Go to the previous sheet.",
122
145
  }
123
146
  sections = {
124
147
  "Navigation:": [ "cursor_down", "cursor_up", "half_page_up", "half_page_down", "page_up", "page_down", "cursor_bottom", "cursor_top", "five_up", "five_down", "scroll_right", "scroll_left", "scroll_far_right", "scroll_far_left" ],
125
148
  "Selection:": [ "toggle_select", "select_all", "select_none", "visual_selection_toggle", "visual_deselection_toggle", "enter" ],
126
149
  "UI:": [ "toggle_footer", "redraw_screen", "decrease_lines_per_page", "increase_lines_per_page", "increase_column_width", "decrease_column_width", "notification_toggle" ],
127
150
  "Sort:": [ "cycle_sort_method", "cycle_sort_method_reverse", "cycle_sort_order", ] ,
128
- "Data manipulation:": [ "delete", "delete_column", "edit", "edit_picker", "edit_ipython", "add_column", "add_row" ],
129
- "Filter and sort:": [ "filter_input", "search_input", "continue_search_forward", "continue_search_backward", ] ,
151
+ "Data manipulation:": [ "delete", "delete_column", "edit", "edit_picker", "edit_ipython", "add_column_before", "add_column_after", "add_row_before", "add_row_after"],
152
+ "Filter and sort:": [ "filter_input", "x", "search_input", "continue_search_forward", "continue_search_backward", ] ,
130
153
  "Settings:": [ "settings_input", "settings_options" ],
131
154
  "Cancel:": [ "opts_input", "opts_select", "mode_next", "mode_prev", "pipe_input", "reset_opts", "col_select", "col_select_next", "col_select_prev", "col_hide" ],
132
155
  "Save, load, copy and paste:": [ "save", "load", "open", "copy", "paste" ],
@@ -148,36 +171,48 @@ def build_help_rows(keys_dict: dict) -> list[list[str]]:
148
171
  section_rows = []
149
172
 
150
173
  for operation in section_operations:
151
- try:
152
- keys = [chr(int(key)) if key not in special_keys else special_keys[key] for key in keys_dict[operation]]
174
+ keys = []
175
+ if operation in keys_dict:
176
+ for key in keys_dict[operation]:
177
+ if key in special_keys:
178
+ keys.append(special_keys[key])
179
+ else:
180
+ try:
181
+ keys.append(chr(int(key)))
182
+ except Exception as e:
183
+ keys.append(f"keycode={key}")
184
+ if debug: print(f"Error chr({key}): {e}")
185
+ else:
186
+ if debug: print(f"Note that {operation} is not in the keys_dict")
187
+ continue
188
+
189
+
190
+
191
+ if operation in help_descriptions:
153
192
  description = help_descriptions[operation]
154
- row = [f" {str(keys)[1:-1]}", description]
155
- section_rows.append(row)
156
- except:
157
- pass
193
+ else:
194
+ if debug: print(f"Operation={operation} has no description.")
195
+ description = "..."
196
+
197
+ row = [f" {str(keys)[1:-1]}", description]
198
+ section_rows.append(row)
158
199
  if section_rows:
159
200
  items.append([section_name, ""])
160
201
  items += section_rows
161
202
  items.append(["",""])
162
203
 
163
- # [[key_name, key_function_description], ...]
164
- # for val, keys in keys_dict.items():
165
- # try:
166
- # row = [[chr(int(key)) if key not in special_keys else special_keys[key] for key in keys], help_descriptions[val]]
167
- # items.append(row)
168
- # except:
169
- # pass
170
-
171
204
  return items
172
205
 
173
206
  if __name__ == "__main__":
174
- from listpick.listpick_app import Picker, start_curses, close_curses
175
- items = build_help_rows(picker_keys)
176
- stdscr = start_curses()
177
- x = Picker(
178
- stdscr,
179
- items=items
180
- )
181
- x.run()
182
-
183
- close_curses(stdscr)
207
+ items = build_help_rows(picker_keys, debug=True)
208
+ items = build_help_rows(notification_keys, debug=True)
209
+
210
+ # from listpick.listpick_app import Picker, start_curses, close_curses
211
+ # stdscr = start_curses()
212
+ # x = Picker(
213
+ # stdscr,
214
+ # items=items
215
+ # )
216
+ # x.run()
217
+ #
218
+ # close_curses(stdscr)
@@ -85,6 +85,9 @@ class StandardFooter(Footer):
85
85
  self.sheets_y -= 1
86
86
 
87
87
  self.files_y = h-1
88
+ if state["search_query"] and self.height < 3:
89
+ self.height = 3
90
+
88
91
 
89
92
  def draw(self, h, w):
90
93
  state = self.get_state()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: listpick
3
- Version: 0.1.14.9
3
+ Version: 0.1.14.11
4
4
  Summary: Listpick is a powerful TUI data tool for creating TUI apps or viewing/comparing tabulated data.
5
5
  Home-page: https://github.com/grimandgreedy/listpick
6
6
  Author: Grim
@@ -32,7 +32,6 @@ src/listpick.egg-info/top_level.txt
32
32
  src/listpick/ui/__init__.py
33
33
  src/listpick/ui/build_help.py
34
34
  src/listpick/ui/footer.py
35
- src/listpick/ui/git-bugreport-2025-08-16-1438.txt
36
35
  src/listpick/ui/help_screen.py
37
36
  src/listpick/ui/input_field.py
38
37
  src/listpick/ui/keys.py
@@ -1,37 +0,0 @@
1
- Thank you for filling out a Git bug report!
2
- Please answer the following questions to help us understand your issue.
3
-
4
- What did you do before the bug happened? (Steps to reproduce your issue)
5
-
6
- What did you expect to happen? (Expected behavior)
7
-
8
- What happened instead? (Actual behavior)
9
-
10
- What's different between what you expected and what actually happened?
11
-
12
- Anything else you want to add:
13
-
14
- Please review the rest of the bug report below.
15
- You can delete any lines you don't wish to share.
16
-
17
-
18
- [System Info]
19
- git version:
20
- git version 2.50.1
21
- cpu: x86_64
22
- built from commit: d82adb61ba2fd11d8f2587fca1b6bd7925ce4044
23
- sizeof-long: 8
24
- sizeof-size_t: 8
25
- shell-path: /bin/sh
26
- libcurl: 8.14.1
27
- OpenSSL: OpenSSL 3.5.1 1 Jul 2025
28
- zlib-ng: 2.2.4
29
- SHA-1: SHA1_DC
30
- SHA-256: SHA256_BLK
31
- uname: Linux 6.15.9-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 02 Aug 2025 01:20:06 +0000 x86_64
32
- compiler info: gnuc: 15.1
33
- libc info: glibc: 2.42
34
- $SHELL (typically, interactive shell): /usr/bin/zsh
35
-
36
-
37
- [Enabled Hooks]
File without changes
File without changes
File without changes
File without changes
File without changes