listpick 0.1.15.7__tar.gz → 0.1.15.8__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 (63) hide show
  1. {listpick-0.1.15.7 → listpick-0.1.15.8}/CHANGELOG.md +3 -0
  2. {listpick-0.1.15.7/src/listpick.egg-info → listpick-0.1.15.8}/PKG-INFO +1 -1
  3. {listpick-0.1.15.7 → listpick-0.1.15.8}/setup.py +1 -1
  4. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/listpick_app.py +96 -54
  5. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/pane/pane_functions.py +23 -0
  6. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/build_help.py +2 -1
  7. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/keys.py +1 -0
  8. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/picker_colours.py +1 -1
  9. {listpick-0.1.15.7 → listpick-0.1.15.8/src/listpick.egg-info}/PKG-INFO +1 -1
  10. {listpick-0.1.15.7 → listpick-0.1.15.8}/.gitignore +0 -0
  11. {listpick-0.1.15.7 → listpick-0.1.15.8}/LICENSE.txt +0 -0
  12. {listpick-0.1.15.7 → listpick-0.1.15.8}/README.md +0 -0
  13. {listpick-0.1.15.7 → listpick-0.1.15.8}/TODO.md +0 -0
  14. {listpick-0.1.15.7 → listpick-0.1.15.8}/assets/aria2tui_screenshot.png +0 -0
  15. {listpick-0.1.15.7 → listpick-0.1.15.8}/assets/file_compare.png +0 -0
  16. {listpick-0.1.15.7 → listpick-0.1.15.8}/assets/lpfman.png +0 -0
  17. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/data_generation/list_files.toml +0 -0
  18. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/data_generation/list_files_empty.toml +0 -0
  19. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/data_generation/video_duplicates.toml +0 -0
  20. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/data_generation/video_mediainfo.toml +0 -0
  21. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/input_files/polynomials.tsv +0 -0
  22. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/input_guides/gnuplot_graph.md +0 -0
  23. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/picker/auxiallary_files/2024-25_Premier_League.pkl +0 -0
  24. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/picker/footer_string_example.py +0 -0
  25. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/picker/picker_example.py +0 -0
  26. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/picker/template.py +0 -0
  27. {listpick-0.1.15.7 → listpick-0.1.15.8}/examples/picker/wikipedia_table.py +0 -0
  28. {listpick-0.1.15.7 → listpick-0.1.15.8}/listpick.py +0 -0
  29. {listpick-0.1.15.7 → listpick-0.1.15.8}/requirements.txt +0 -0
  30. {listpick-0.1.15.7 → listpick-0.1.15.8}/setup.cfg +0 -0
  31. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/__init__.py +0 -0
  32. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/__main__.py +0 -0
  33. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/pane/__init__.py +0 -0
  34. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/pane/get_data.py +0 -0
  35. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/pane/pane_utils.py +0 -0
  36. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/__init__.py +0 -0
  37. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/footer.py +0 -0
  38. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/help_screen.py +0 -0
  39. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/ui/input_field.py +0 -0
  40. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/__init__.py +0 -0
  41. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/clipboard_operations.py +0 -0
  42. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/config.py +0 -0
  43. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/dump.py +0 -0
  44. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/filtering.py +0 -0
  45. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/generate_data.py +0 -0
  46. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/graphing.py +0 -0
  47. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/keycodes.py +0 -0
  48. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/options_selectors.py +0 -0
  49. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/paste_operations.py +0 -0
  50. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/picker_log.py +0 -0
  51. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/search_and_filter_utils.py +0 -0
  52. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/searching.py +0 -0
  53. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/sorting.py +0 -0
  54. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/table_to_list_of_lists.py +0 -0
  55. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/user_input.py +0 -0
  56. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick/utils/utils.py +0 -0
  57. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick.egg-info/SOURCES.txt +0 -0
  58. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick.egg-info/dependency_links.txt +0 -0
  59. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick.egg-info/entry_points.txt +0 -0
  60. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick.egg-info/requires.txt +0 -0
  61. {listpick-0.1.15.7 → listpick-0.1.15.8}/src/listpick.egg-info/top_level.txt +0 -0
  62. {listpick-0.1.15.7 → listpick-0.1.15.8}/tests/kitty_control.sh +0 -0
  63. {listpick-0.1.15.7 → listpick-0.1.15.8}/tests/sorting_dates.csv +0 -0
@@ -1,6 +1,9 @@
1
1
  # CHANGELOG.md
2
2
  Note that the changes between 0.1.11.0 and 1.1.12.0 are listed under 0.1.11
3
3
 
4
+ ## [0.1.15.7] 2025-07-29
5
+ - We can now have multiple right panes which can be cycled through by pressing ".
6
+
4
7
  ## [0.1.15.7] 2025-07-28
5
8
  - Fixed header column alignment problems which popped up with some datasets.
6
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: listpick
3
- Version: 0.1.15.7
3
+ Version: 0.1.15.8
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
@@ -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.15.7",
19
+ version = "0.1.15.8",
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.",
@@ -23,6 +23,7 @@ import logging
23
23
  import tty
24
24
  import select
25
25
 
26
+ from listpick.pane.pane_utils import get_file_attributes
26
27
  from listpick.ui.picker_colours import get_colours, get_help_colours, get_notification_colours, get_theme_count, get_fallback_colours
27
28
  from listpick.utils.options_selectors import default_option_input, output_file_option_selector, default_option_selector
28
29
  from listpick.utils.table_to_list_of_lists import *
@@ -191,16 +192,8 @@ class Picker:
191
192
  sheet_states: list = [{}],
192
193
 
193
194
  split_right: bool = False,
194
- split_right_proportion: float = 1/2,
195
- split_right_function: Callable = lambda stdscr, x, y, w, h, state, row, cell, data, test: False,
196
- split_right_auto_refresh: bool = False,
197
- split_right_refresh_data: Callable = lambda old_data, arg_dict: [],
198
- split_right_refresh_data_timer: float = 1.0,
199
- split_right_data: list = [],
200
-
201
-
202
-
203
-
195
+ right_panes: list = [],
196
+ right_pane_index: int = 0,
204
197
  ):
205
198
  self.stdscr = stdscr
206
199
  self.items = items
@@ -350,13 +343,8 @@ class Picker:
350
343
  self.sheets = sheets
351
344
 
352
345
  self.split_right = split_right
353
- self.split_right_proportion = split_right_proportion
354
- self.split_right_function = split_right_function
355
- self.split_right_auto_refresh = split_right_auto_refresh
356
- self.split_right_refresh_data = split_right_refresh_data
357
- self.split_right_refresh_data_timer = split_right_refresh_data_timer
358
- self.split_right_data = split_right_data
359
-
346
+ self.right_panes = right_panes
347
+ self.right_pane_index = right_pane_index
360
348
  self.initialise_picker_state(reset_colours=self.reset_colours)
361
349
 
362
350
  # Note: We have to set the footer after initialising the picker state so that the footer can use the get_function_data method
@@ -426,8 +414,9 @@ class Picker:
426
414
  ## self.top_space
427
415
  h, w = self.stdscr.getmaxyx()
428
416
  self.term_h, self.term_w = self.stdscr.getmaxyx()
429
- if self.split_right and self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
430
- self.rows_w, self.rows_h = int(self.term_w*self.split_right_proportion), self.term_h
417
+ if self.split_right and len(self.right_panes):
418
+ proportion = self.right_panes[self.right_pane_index]["proportion"]
419
+ self.rows_w, self.rows_h = int(self.term_w*proportion), self.term_h
431
420
  else:
432
421
  self.rows_w, self.rows_h = self.term_w, self.term_h
433
422
 
@@ -787,8 +776,9 @@ class Picker:
787
776
 
788
777
  h, w = self.stdscr.getmaxyx()
789
778
  self.term_h, self.term_w = self.stdscr.getmaxyx()
790
- if self.split_right and self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
791
- self.rows_w, self.rows_h = int(self.term_w*self.split_right_proportion), self.term_h
779
+ if self.split_right and len(self.right_panes):
780
+ proportion = self.right_panes[self.right_pane_index]["proportion"]
781
+ self.rows_w, self.rows_h = int(self.term_w*proportion), self.term_h
792
782
  else:
793
783
  self.rows_w, self.rows_h = self.term_w, self.term_h
794
784
 
@@ -1189,8 +1179,10 @@ class Picker:
1189
1179
  self.stdscr.addstr(self.term_h - 1, self.term_w-footer_string_width-1, " "*footer_string_width, curses.color_pair(self.colours_start+24))
1190
1180
  self.stdscr.addstr(self.term_h - 1, self.term_w-footer_string_width-1, f"{disp_string}", curses.color_pair(self.colours_start+24))
1191
1181
 
1192
- if self.split_right and self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
1193
- self.split_right_function(
1182
+ if self.split_right and len(self.right_panes):
1183
+ draw_pane = self.right_panes[self.right_pane_index]["display"]
1184
+ data = self.right_panes[self.right_pane_index]["data"]
1185
+ draw_pane(
1194
1186
  self.stdscr,
1195
1187
  x = self.rows_w,
1196
1188
  y = self.top_space - int(bool(self.show_header and self.header)),
@@ -1199,7 +1191,7 @@ class Picker:
1199
1191
  state = self.get_function_data(),
1200
1192
  row = self.indexed_items[self.cursor_pos] if self.indexed_items else [],
1201
1193
  cell = self.indexed_items[self.cursor_pos][1][self.selected_column] if self.indexed_items else "",
1202
- data=self.split_right_data,
1194
+ data=data,
1203
1195
  )
1204
1196
 
1205
1197
  self.stdscr.refresh()
@@ -1363,12 +1355,9 @@ class Picker:
1363
1355
  "sheet_name": self.sheet_name,
1364
1356
  "sheet_states": self.sheet_states,
1365
1357
  "split_right": self.split_right,
1366
- "split_right_proportion": self.split_right_proportion,
1367
- "split_right_function": self.split_right_function,
1368
- "split_right_auto_refresh": self.split_right_auto_refresh,
1369
- "split_right_refresh_data_timer": self.split_right_refresh_data_timer,
1370
- "split_right_refresh_data": self.split_right_refresh_data,
1371
- "split_right_data": self.split_right_data,
1358
+ "right_panes": self.right_panes,
1359
+ "right_pane_index": self.right_pane_index,
1360
+
1372
1361
  }
1373
1362
  return function_data
1374
1363
 
@@ -1404,8 +1393,6 @@ class Picker:
1404
1393
  "centre_in_cols",
1405
1394
  "centre_in_terminal",
1406
1395
  "split_right",
1407
- "split_right_proportion",
1408
- "split_right_function",
1409
1396
  ]
1410
1397
 
1411
1398
  for var in variables:
@@ -1499,6 +1486,7 @@ class Picker:
1499
1486
  "number_columns": False,
1500
1487
  "reset_colours": False,
1501
1488
  "split_right": False,
1489
+ "cell_cursor": False,
1502
1490
  }
1503
1491
  while True:
1504
1492
  h, w = stdscr.getmaxyx()
@@ -1530,6 +1518,8 @@ class Picker:
1530
1518
 
1531
1519
  if not message: message = "!!"
1532
1520
  submenu_items = [" "+message[i*message_width:(i+1)*message_width] for i in range(len(message)//message_width+1)]
1521
+ for i in range(len(submenu_items)):
1522
+ submenu_items[i] = f"{submenu_items[i]:^{message_width}}"
1533
1523
 
1534
1524
  notification_remap_keys = {
1535
1525
  curses.KEY_RESIZE: curses.KEY_F5,
@@ -1555,6 +1545,7 @@ class Picker:
1555
1545
  "cancel_is_back": True,
1556
1546
  "reset_colours": False,
1557
1547
  "split_right": False,
1548
+ "cell_cursor": False,
1558
1549
 
1559
1550
  }
1560
1551
  OptionPicker = Picker(submenu_win, **notification_data)
@@ -1695,6 +1686,9 @@ class Picker:
1695
1686
  elif setting == "pane":
1696
1687
  self.toggle_right_pane()
1697
1688
 
1689
+ elif setting == "pane_cycle":
1690
+ self.cycle_right_pane()
1691
+
1698
1692
  elif setting.startswith("cwd="):
1699
1693
  os.chdir(os.path.expandvars(os.path.expanduser(setting[len("cwd="):])))
1700
1694
  elif setting.startswith("hl"):
@@ -2313,10 +2307,16 @@ class Picker:
2313
2307
  self.load_sheet(self.loaded_file, sheet_number=self.sheet_index)
2314
2308
 
2315
2309
  def toggle_right_pane(self):
2316
- if self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
2310
+ if len(self.right_panes):
2317
2311
  self.split_right = not self.split_right
2312
+ if self.right_panes[self.right_pane_index]["data"] in [[], None, {}]:
2313
+ self.right_panes[self.right_pane_index]["data"] = self.right_panes[self.right_pane_index]["get_data"](self.right_panes[self.right_pane_index]["data"], self.get_function_data())
2318
2314
 
2319
2315
 
2316
+ def cycle_right_pane(self, increment=1):
2317
+ if len(self.right_panes) > 1:
2318
+ self.right_pane_index = (self.right_pane_index+1)%len(self.right_panes)
2319
+
2320
2320
  def run(self) -> Tuple[list[int], str, dict]:
2321
2321
  """ Run the picker. """
2322
2322
  self.logger.info(f"function: run()")
@@ -2330,7 +2330,7 @@ class Picker:
2330
2330
 
2331
2331
  initial_time = time.time()
2332
2332
  initial_time_footer = time.time()-self.footer_timer
2333
- initial_split_time = time.time()-self.split_right_refresh_data_timer
2333
+ initial_split_time = time.time()-200
2334
2334
 
2335
2335
  if self.startup_notification:
2336
2336
  self.notification(self.stdscr, message=self.startup_notification)
@@ -2366,8 +2366,9 @@ class Picker:
2366
2366
 
2367
2367
  h, w = self.stdscr.getmaxyx()
2368
2368
  self.term_h, self.term_w = self.stdscr.getmaxyx()
2369
- if self.split_right and self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
2370
- self.rows_w, self.rows_h = int(self.term_w*self.split_right_proportion), self.term_h
2369
+ if self.split_right and len(self.right_panes):
2370
+ proportion = self.right_panes[self.right_pane_index]["proportion"]
2371
+ self.rows_w, self.rows_h = int(self.term_w*proportion), self.term_h
2371
2372
  else:
2372
2373
  self.rows_w, self.rows_h = self.term_w, self.term_h
2373
2374
  def terminal_resized(old_w, old_h) -> bool:
@@ -2391,8 +2392,10 @@ class Picker:
2391
2392
 
2392
2393
  h, w = self.stdscr.getmaxyx()
2393
2394
  self.term_h, self.term_w = self.stdscr.getmaxyx()
2394
- if self.split_right and self.split_right_function(self.stdscr, 0,0,0,0,{},[],[],"",test=True):
2395
- self.rows_w, self.rows_h = int(self.term_w*self.split_right_proportion), self.term_h
2395
+
2396
+ if self.split_right and len(self.right_panes):
2397
+ proportion = self.right_panes[self.right_pane_index]["proportion"]
2398
+ self.rows_w, self.rows_h = int(self.term_w*proportion), self.term_h
2396
2399
  else:
2397
2400
  self.rows_w, self.rows_h = self.term_w, self.term_h
2398
2401
 
@@ -2447,8 +2450,10 @@ class Picker:
2447
2450
  initial_time_footer = time.time()
2448
2451
  self.draw_screen(self.indexed_items, self.highlights)
2449
2452
 
2450
- if self.split_right and self.split_right_auto_refresh and ((time.time() - initial_split_time) > self.split_right_refresh_data_timer):
2451
- self.split_right_data = self.split_right_refresh_data(self.split_right_data, self.get_function_data())
2453
+ if self.split_right and len(self.right_panes) and self.right_panes[self.right_pane_index]["auto_refresh"] and ((time.time() - initial_split_time) > self.right_panes[self.right_pane_index]["refresh_time"]):
2454
+ get_data = self.right_panes[self.right_pane_index]["get_data"]
2455
+ data = self.right_panes[self.right_pane_index]["data"]
2456
+ self.right_panes[self.right_pane_index]["data"] = get_data(data, self.get_function_data())
2452
2457
  initial_split_time = time.time()
2453
2458
 
2454
2459
  if self.check_key("help", key, self.keys_dict):
@@ -3316,6 +3321,9 @@ class Picker:
3316
3321
  elif self.check_key("toggle_right_pane", key, self.keys_dict):
3317
3322
  self.toggle_right_pane()
3318
3323
 
3324
+ elif self.check_key("cycle_right_pane", key, self.keys_dict):
3325
+ self.cycle_right_pane()
3326
+
3319
3327
  elif self.check_key("pipe_input", key, self.keys_dict):
3320
3328
  self.logger.info(f"key_function pipe_input")
3321
3329
  # usrtxt = "xargs -d '\n' -I{} "
@@ -3839,20 +3847,54 @@ def main() -> None:
3839
3847
  # function_data["debug"] = True
3840
3848
  # function_data["debug_level"] = 1
3841
3849
 
3842
-
3843
- # function_data["split_right"] = True
3844
- # function_data["split_right_proportion"] = 2/3
3845
- # function_data["split_right_refresh_data"] = data_refresh_randint_title
3846
- # function_data["split_right_function"] = right_split_display_list
3847
- # function_data["split_right_data"] = ["Files", [str(x) for x in range(100)]]
3848
-
3849
-
3850
- # function_data["split_right_refresh_data"] = get_dl
3851
-
3852
-
3853
- # function_data["split_right_function"] = right_split_file_attributes
3854
- # function_data["split_right_auto_refresh"] = True
3855
- # function_data["split_right_function"] = right_split_graph
3850
+ function_data["split_right"] = False
3851
+ function_data["right_panes"] = [
3852
+ # Graph or random numbers generated each second
3853
+ {
3854
+ "proportion": 2/3,
3855
+ "auto_refresh": True,
3856
+ "get_data": data_refresh_randint,
3857
+ "display": right_split_graph,
3858
+ "data": [],
3859
+ "refresh_time": 1.0,
3860
+ },
3861
+ # list of numbers
3862
+ {
3863
+ "proportion": 2/3,
3864
+ "auto_refresh": False,
3865
+ "get_data": data_refresh_randint_title,
3866
+ "display": right_split_display_list,
3867
+ "data": ["Files", [str(x) for x in range(100)]],
3868
+ "refresh_time": 1.0,
3869
+ },
3870
+ # File attribures
3871
+ {
3872
+ "proportion": 2/3,
3873
+ "auto_refresh": False,
3874
+ "get_data": lambda data, state: [],
3875
+ "display": right_split_file_attributes,
3876
+ "data": ["Files", [str(x) for x in range(100)]],
3877
+ "refresh_time": 1.0,
3878
+ },
3879
+ # List of random numbers generated each second
3880
+ {
3881
+ "proportion": 1/2,
3882
+ "auto_refresh": True,
3883
+ "get_data": data_refresh_randint_title,
3884
+ "display": right_split_display_list,
3885
+ "data": ["Files", []],
3886
+ "refresh_time": 0.1,
3887
+ },
3888
+ # Nopane
3889
+ {
3890
+ "proportion": 1/3,
3891
+ "auto_refresh": False,
3892
+ "get_data": lambda data, state: [],
3893
+ "display": lambda scr, x, y, w, h, state, row, cell, data: [],
3894
+ "data": ["Files", []],
3895
+ "refresh_time": 0.1,
3896
+ },
3897
+ ]
3856
3898
 
3857
3899
  stdscr = start_curses()
3858
3900
  try:
@@ -29,6 +29,12 @@ def right_split_file_attributes(stdscr, x, y, w, h, state, row, cell, past_data:
29
29
  for j in range(h):
30
30
  stdscr.addstr(j+y, x, ' ', curses.color_pair(state["colours_start"]+16))
31
31
 
32
+ # Display pane count
33
+ pane_count = len(state["right_panes"])
34
+ pane_index = state["right_pane_index"]
35
+ if pane_count > 1:
36
+ s = f" {pane_index+1}/{pane_count} "
37
+ stdscr.addstr(y+h-1, x+w-len(s)-1, s, curses.color_pair(state["colours_start"]+20))
32
38
 
33
39
  # Filename/cursor cell value
34
40
  stdscr.addstr(y+2, x+2, cell[:w-3])
@@ -58,6 +64,14 @@ def right_split_graph(stdscr, x, y, w, h, state, row, cell, past_data: list = []
58
64
  for j in range(h):
59
65
  stdscr.addstr(j+y, x, ' ', curses.color_pair(state["colours_start"]+16))
60
66
 
67
+
68
+ # Display pane count
69
+ pane_count = len(state["right_panes"])
70
+ pane_index = state["right_pane_index"]
71
+ if pane_count > 1:
72
+ s = f" {pane_index+1}/{pane_count} "
73
+ stdscr.addstr(y+h-1, x+w-len(s)-1, s, curses.color_pair(state["colours_start"]+20))
74
+
61
75
  try:
62
76
  import plotille as plt
63
77
  except:
@@ -66,6 +80,7 @@ def right_split_graph(stdscr, x, y, w, h, state, row, cell, past_data: list = []
66
80
  return None
67
81
 
68
82
 
83
+
69
84
  # x_vals, y_vals = list(range(100)), [x**2 for x in range(100)]
70
85
  if data in [[], {}, None]:
71
86
  return None
@@ -96,6 +111,14 @@ def right_split_display_list(stdscr, x, y, w, h, state, row, cell, past_data: li
96
111
  for j in range(h):
97
112
  stdscr.addstr(j+y, x, ' ', curses.color_pair(state["colours_start"]+16))
98
113
 
114
+
115
+ # Display pane count
116
+ pane_count = len(state["right_panes"])
117
+ pane_index = state["right_pane_index"]
118
+ if pane_count > 1:
119
+ s = f" {pane_index+1}/{pane_count} "
120
+ stdscr.addstr(y+h-1, x+w-len(s)-1, s, curses.color_pair(state["colours_start"]+20))
121
+
99
122
  if data in [[], {}, None]:
100
123
  return None
101
124
 
@@ -143,11 +143,12 @@ def build_help_rows(keys_dict: dict, debug: bool = False) -> list[list[str]]:
143
143
  "sheet_next": "Go to the next sheet.",
144
144
  "sheet_prev": "Go to the previous sheet.",
145
145
  "toggle_right_pane": "Toggle the right pane",
146
+ "cycle_right_pane": "Cycle through right panes",
146
147
  }
147
148
  sections = {
148
149
  "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" ],
149
150
  "Selection:": [ "toggle_select", "select_all", "select_none", "visual_selection_toggle", "visual_deselection_toggle", "enter" ],
150
- "UI:": [ "toggle_footer", "redraw_screen", "decrease_lines_per_page", "increase_lines_per_page", "increase_column_width", "decrease_column_width", "notification_toggle", "toggle_right_pane"],
151
+ "UI:": [ "toggle_footer", "redraw_screen", "decrease_lines_per_page", "increase_lines_per_page", "increase_column_width", "decrease_column_width", "notification_toggle", "toggle_right_pane", "cycle_right_pane"],
151
152
  "Sort:": [ "cycle_sort_method", "cycle_sort_method_reverse", "cycle_sort_order", ] ,
152
153
  "Data manipulation:": [ "delete", "delete_column", "edit", "edit_picker", "edit_ipython", "add_column_before", "add_column_after", "add_row_before", "add_row_after"],
153
154
  "Filter and sort:": [ "filter_input", "search_input", "continue_search_forward", "continue_search_backward", ] ,
@@ -87,6 +87,7 @@ picker_keys = {
87
87
  # "sheet_next": [],
88
88
  # "sheet_prev": [],
89
89
  "toggle_right_pane": [ord("'")],
90
+ "cycle_right_pane": [ord('"')],
90
91
  }
91
92
 
92
93
 
@@ -340,7 +340,7 @@ def get_notification_colours(pick:int=0) -> Dict[str, int]:
340
340
  else:
341
341
  colours['background'] = 237
342
342
  colours['unselected_bg'] = 237
343
- colours['cursor_bg'] = 237
343
+ colours['cursor_bg'] = 238
344
344
  colours['selected_bg'] = 237
345
345
 
346
346
  return colours
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: listpick
3
- Version: 0.1.15.7
3
+ Version: 0.1.15.8
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes