spreadsheet

terminal spreadsheet application
git clone https://git.ce9e.org/spreadsheet.git

commit
06c12f2f96436f5630204e706ce8aefb6ae5c0b9
parent
eb9a0ac99b29f7e79548067af940088e5ed12e4d
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-08-18 11:50
refactor: sheet.set_shifted

Diffstat

M sheet/__main__.py 14 +++-----------
M sheet/sheet.py 9 +++++++++

2 files changed, 12 insertions, 11 deletions


diff --git a/sheet/__main__.py b/sheet/__main__.py

@@ -5,8 +5,6 @@ from wcwidth import wcswidth
    5     5 
    6     6 from .csv import dump_csv
    7     7 from .csv import load_csv
    8    -1 from .expression import shift_refs
    9    -1 from .expression import unparse
   10     8 from .expression import x2col
   11     9 from .input import Input
   12    10 from .sheet import Bar
@@ -182,15 +180,9 @@ class App(boon.App):
  182   180 
  183   181     def submit_drag(self):
  184   182         raw = self.sheet.get_raw(self.drag)
  185    -1         if raw.startswith('='):
  186    -1             expr = self.sheet.get_parsed(self.drag)
  187    -1             assert isinstance(expr, tuple)
  188    -1             for x, y in iter_range(self.cursor, self.drag):
  189    -1                 shifted = shift_refs(expr, (x - self.drag[0], y - self.drag[1]))
  190    -1                 self.sheet.set((x, y), '=' + unparse(shifted))
  191    -1         else:
  192    -1             for x, y in iter_range(self.cursor, self.drag):
  193    -1                 self.sheet.set((x, y), raw)
   -1   183         for x, y in iter_range(self.cursor, self.drag):
   -1   184             shift = (x - self.drag[0], y - self.drag[1])
   -1   185             self.sheet.set_shifted((x, y), raw, shift)
  194   186         self.drag = None
  195   187 
  196   188     def cancel_drag(self):

diff --git a/sheet/sheet.py b/sheet/sheet.py

@@ -1,6 +1,8 @@
    1     1 
    2     2 from .expression import ParseError
    3     3 from .expression import parse
   -1     4 from .expression import shift_refs
   -1     5 from .expression import unparse
    4     6 
    5     7 BLOCKS = [' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█']
    6     8 
@@ -130,6 +132,13 @@ class Sheet:
  130   132             del self.parsed[cell]
  131   133         self.cache = {}
  132   134 
   -1   135     def set_shifted(self, cell, raw: str, shift) -> str:
   -1   136         if raw.startswith('='):
   -1   137             expr = self.parse(raw)
   -1   138             shifted = shift_refs(expr, shift)
   -1   139             raw = '=' + unparse(shifted)
   -1   140         self.set(cell, raw)
   -1   141 
  133   142     def get_raw(self, cell) -> str:
  134   143         return self.raw.get(cell, '')
  135   144