0

Below is my code. I'm trying to make a simple text editor and I tried to make sure that arrows keys wouldn't print to the console but it still does. Any help pls?

import curses

text = []


def main(screen):
    curses.curs_set(1)
    curses.noecho()

    while True:
        newChar = screen.getkey()

        if newChar != curses.KEY_LEFT or curses.KEY_RIGHT or curses.KEY_UP or curses.KEY_DOWN:
            text.append(newChar)

        screen.addstr(0, 0, "".join(text))
        screen.refresh()


curses.wrapper(main)```

2 Answers2

0

getkey returns a string; comparing it against an integer such as curses.KEY_UP will not do what you expect.

This works:

import curses

text = []


def main(screen):
    curses.curs_set(1)
    curses.noecho()

    while True:
        newChar = screen.getch()
        # newChar = screen.getkey()

        if newChar != curses.KEY_LEFT and curses.KEY_RIGHT and curses.KEY_UP and curses.KEY_DOWN:
            screen.addstr(0, 0, curses.keyname(newChar))

        screen.refresh()


curses.wrapper(main)
Thomas Dickey
  • 51,086
  • 7
  • 70
  • 105
0

Oof, I figured out the problem. Issue with comparing values in the if statement. Resolved my own problem. yippee

import curses

text = []


def main(screen):
        curses.curs_set(1)

        while True:
            newChar = screen.getch()

            if newChar not in [curses.KEY_LEFT, curses.KEY_RIGHT, curses.KEY_UP, curses.KEY_DOWN]:
                screen.addstr(0, 0, curses.keyname(newChar))
                screen.refresh()


curses.wrapper(main)