(window.webpackJsonp=window.webpackJsonp||[]).push([[2656],{3064:function(t,s,a){"use strict";a.r(s);var n=a(31),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"basic-curses-with-python"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-curses-with-python"}},[t._v("#")]),t._v(" Basic Curses with Python")]),t._v(" "),a("h2",{attrs:{id:"basic-invocation-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-invocation-example"}},[t._v("#")]),t._v(" Basic Invocation Example")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" curses\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" traceback\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# -- Initialize --")]),t._v("\n stdscr "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("initscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# initialize curses screen")]),t._v("\n curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("noecho"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# turn off auto echoing of keypress on to screen")]),t._v("\n curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cbreak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# enter break mode where pressing Enter key")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# after keystroke is not required for it to register")]),t._v("\n stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keypad"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# enable special Key values such as curses.KEY_LEFT etc")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# -- Perform an action with Screen --")]),t._v("\n stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("border"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addstr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Hello from Curses!'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("A_BOLD"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addstr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Press q to close this screen'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("A_NORMAL"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stay in this loop till the user presses 'q'")]),t._v("\n ch "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" ch "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("ord")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'q'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("break")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# -- End of user code --")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("except")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n traceback"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("print_exc"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# print trace back log of the error")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("finally")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# --- Cleanup on exit ---")]),t._v("\n stdscr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keypad"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("echo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nocbreak"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("endwin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"the-wrapper-helper-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-wrapper-helper-function"}},[t._v("#")]),t._v(" The wrapper() helper function.")]),t._v(" "),a("p",[t._v("While the basic invocation above is easy enough, the curses package provides the "),a("code",[t._v("wrapper(func, ...)")]),t._v(" helper function. The example below contains the equivalent of above:")]),t._v(" "),a("div",{staticClass:"language-py extra-class"},[a("pre",{pre:!0,attrs:{class:"language-py"}},[a("code",[t._v("main"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("scr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("args"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# -- Perform an action with Screen --")]),t._v("\n scr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("border"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n scr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addstr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Hello from Curses!'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("A_BOLD"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n scr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addstr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Press q to close this screen'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" curses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("A_NORMAL"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# stay in this loop till the user presses 'q'")]),t._v("\n ch "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" scr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getch"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" ch "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("ord")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'q'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n \ncurses"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wrapper"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("main"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n")])])]),a("p",[t._v("Here, wrapper will initialize curses, create "),a("code",[t._v("stdscr")]),t._v(", a WindowObject and pass both stdscr, and any further arguments to "),a("code",[t._v("func")]),t._v(". When "),a("code",[t._v("func")]),t._v(" returns, "),a("code",[t._v("wrapper")]),t._v(" will restore the terminal before the program exits.")]),t._v(" "),a("h4",{attrs:{id:"remarks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[t._v("#")]),t._v(" Remarks")]),t._v(" "),a("p",[t._v("Curses is a basic terminal ( or character display ) handling module from Python. This can be used to create Terminal based User interfaces or TUIs.")]),t._v(" "),a("p",[t._v("This is a python port of a more popular C library 'ncurses'")])])}),[],!1,null,null,null);s.default=e.exports}}]);