1

I'm trying to drop into IPython shell when I press 'i' in my curses program. Upto this point, I set up a curses windows and several other windows. I can interact with the program using a while loop and act upon keystrokes.

From Embedding IPython I borrowed some code which you can see at the beginning and at the end of the block.

...

from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()

...

def main():

stdscr = curses.initscr()

(win_maxy, win_maxx) = stdscr.getmaxyx()

onethirds_win_width = int(math.floor(win_maxx/3))
half_win_heigth = int(math.floor(win_maxy/2))

begin_x = 0; begin_y = 0
height = half_win_heigth ; width = onethirds_win_width
download_win = curses.newwin(height, width, begin_y, begin_x)
download_win.border()
download_win.refresh()
download_list_win = download_win.subwin(height-2, width-2, begin_y+1, begin_x+1)

begin_x = (half_win_heigth-1)+2 ; begin_y = 0
height = half_win_heigth ; width = onethirds_win_width
configs_win = curses.newwin(height, width, begin_y, begin_x)
configs_win.border()
configs_win.refresh()
configs_list_win = configs_win.subwin(height-2, width-2, begin_y+1, begin_x+1)

begin_x = 0 ; begin_y = win_maxy-1
height = 1 ; width = win_maxx
status_win = curses.newwin(height, width, begin_y, begin_x)

begin_x = 0 ; begin_y = half_win_heigth+2
height = 1 ; width = win_maxx
input_win = curses.newwin(height, width, begin_y, begin_x)
input_win_textbox = curses.textpad.Textbox(input_win)
#curses.textpad.rectangle(stdscr, begin_y, begin_x, begin_y+height+1, begin_x+width+1)

curses.noecho()
curses.cbreak()
stdscr.keypad(1)

stdscr.addstr(half_win_heigth+5, 5, "MCP Fetcher. Ready.")
stdscr.refresh()

while 1:
    c = stdscr.getch()
    download_win.border()
    if c == ord('q'): break  # Exit the while()
    elif c == ord('c'): stdscr.clear()  # Clear the screen
    elif c == ord('i'):
        curses.nocbreak(); stdscr.keypad(0); curses.echo()
        ipshell()  # Start the ipython shell
        curses.noecho(); curses.cbreak(); stdscr.keypad(1)

...

and the code continues.

The problem is the IPython shell does not have echo, no cbreak and etc. How can I solve this?

Thanks

2
  • 2
    Perhaps not relevant to this question in particular, but the docs you linked are from 2005. Here are the current embedding docs. Commented Jan 8, 2012 at 19:51
  • Thanks for pointing out. However, I use IPython 0.10.2 and the documentation is not different, at least the section for embedding. Commented Jan 9, 2012 at 23:50

1 Answer 1

1

Here's a trick that might help: Working with curses in IPython. How can I improve this?

... it's got some issues, but the basic functionality is there.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.