init
This commit is contained in:
commit
8e1ac4301e
2 changed files with 133 additions and 0 deletions
105
main.py
Normal file
105
main.py
Normal file
|
@ -0,0 +1,105 @@
|
|||
import curses
|
||||
|
||||
insert_char_at_position = lambda string, char, position: string[:position] + char + string[position:]
|
||||
remove_char_at_position = lambda string, position: string[:position] + string[position+1:]
|
||||
split_list = lambda input_list, chunk_size: [input_list[i:i + chunk_size] for i in range(0, len(input_list), chunk_size)]
|
||||
|
||||
class Editor():
|
||||
def __init__(self,stdscr,file=str) -> None:
|
||||
self.stdscr = stdscr
|
||||
self.x = 0
|
||||
self.y = 0
|
||||
self.tx,self.ty = curses.COLS ,curses.LINES
|
||||
self.text_content = self.get_content(file)
|
||||
self.lines = len(self.text_content)
|
||||
self.pages = self.make_pages(self.text_content)
|
||||
self.page = 0
|
||||
|
||||
def handle_keys(self):
|
||||
key = self.stdscr.getch()
|
||||
if key == curses.KEY_UP:
|
||||
self.y = max(0, self.y - 1)
|
||||
if self.y == 0 and self.page != 0:
|
||||
self.page -= 1
|
||||
self.y = self.ty-2
|
||||
elif key == curses.KEY_DOWN:
|
||||
self.y = min(self.ty - 1, self.y + 1)
|
||||
if self.y == self.ty - 1 and self.page < len(self.pages) - 1:
|
||||
self.page += 1
|
||||
self.y = 0
|
||||
elif key == curses.KEY_LEFT:
|
||||
self.x = max(0, self.x - 1)
|
||||
elif key == curses.KEY_RIGHT:
|
||||
self.x = min(len(self.text_content[self.y]), self.x + 1)
|
||||
elif key == curses.KEY_BACKSPACE:
|
||||
if self.x > 0:
|
||||
self.pages[self.page][self.y] = remove_char_at_position(
|
||||
self.pages[self.page][self.y],
|
||||
self.x - 1
|
||||
)
|
||||
self.x -= 1
|
||||
elif key == curses.KEY_ENTER:
|
||||
# Neue leere Zeile einfügen
|
||||
self.new_line()
|
||||
elif key != curses.ERR:
|
||||
self.pages[self.page][self.y] = insert_char_at_position(
|
||||
self.pages[self.page][self.y],
|
||||
str(self.pages[self.page]),#chr(key),
|
||||
self.x
|
||||
)
|
||||
self.x += 1
|
||||
|
||||
#def make_pages(self, content):
|
||||
# return split_list(content, self.ty-1)
|
||||
|
||||
|
||||
|
||||
def get_content(self,file):
|
||||
try:
|
||||
with open(file) as content:
|
||||
return content.readlines()
|
||||
except FileNotFoundError:
|
||||
return ["no data found","please check path"]
|
||||
|
||||
def make_pages(self,content):
|
||||
#pages = []
|
||||
#page = []
|
||||
#for line in content:
|
||||
# if len(page) >= self.ty - 1:
|
||||
# pages.append(page)
|
||||
# page = []
|
||||
# page.append(line)
|
||||
#if page:
|
||||
# pages.append(page)
|
||||
#return pages
|
||||
|
||||
return split_list(content, self.ty-1)
|
||||
|
||||
def print_data(self):
|
||||
self.stdscr.clear()
|
||||
for i, line in enumerate(self.pages[self.page]):
|
||||
self.stdscr.addstr(i, 0, f"{line}")#{i+self.ty*self.page} -
|
||||
self.stdscr.refresh()
|
||||
|
||||
def set_cursor_position(self):
|
||||
self.stdscr.move(self.y, self.x)
|
||||
def new_line(self):
|
||||
self.pages[self.page].insert(self.y + 1, "")
|
||||
self.pages = self.make_pages(sum(self.pages, [])) # Seiten neu erstellen
|
||||
self.print_data()
|
||||
self.y += 1 # Die Position nach unten verschieben, um die neu eingefügte Zeile anzuzeigen
|
||||
def del_line(self):
|
||||
pass
|
||||
|
||||
|
||||
def main(stdscr):
|
||||
file_name = "/home/megamichi/Schreibtisch/coding/terminal/test.txt"
|
||||
editor = Editor(stdscr, file_name)
|
||||
curses.curs_set(1)
|
||||
while True:
|
||||
editor.print_data()
|
||||
editor.set_cursor_position()
|
||||
editor.handle_keys()
|
||||
|
||||
if __name__ == "__main__":
|
||||
curses.wrapper(main)
|
28
test.txt
Normal file
28
test.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
Hallo wie gehts
|
||||
funtzt der scheiß?
|
||||
Österreich ist super.
|
||||
-
|
||||
-huhu
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
abc
|
||||
def
|
||||
g
|
||||
...
|
||||
.
|
||||
.
|
||||
.
|
||||
.
|
||||
..
|
||||
.
|
||||
....
|
||||
..
|
||||
.......
|
||||
.............
|
||||
bl
|
||||
|
||||
|
||||
a
|
||||
end
|
Loading…
Reference in a new issue