本文整理汇总了Golang中github.com/rthornton128/goncurses.Window.CursorYX方法的典型用法代码示例。如果您正苦于以下问题:Golang Window.CursorYX方法的具体用法?Golang Window.CursorYX怎么用?Golang Window.CursorYX使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/rthornton128/goncurses.Window
的用法示例。
在下文中一共展示了Window.CursorYX方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: handleInput
func (cw *chatWin) handleInput(win *goncurses.Window) (line string) {
k := win.GetChar()
if k == 0 {
return ""
}
// some systems send a DEL ASCII character instead of KEY_BACKSPACE
// account for both just in case
if k == 127 {
k = goncurses.KEY_BACKSPACE
}
switch k {
case goncurses.KEY_TAB: // tab
// case goncurses.KEY_RETURN: // enter key vs. KEY_ENTER
case goncurses.KEY_DOWN: // down arrow key
case goncurses.KEY_UP: // up arrow key
case goncurses.KEY_LEFT: // left arrow key
case goncurses.KEY_RIGHT: // right arrow key
case goncurses.KEY_HOME: // home key
case goncurses.KEY_BACKSPACE: // backpace
if len(cw.line) > 0 {
cw.line = cw.line[:len(cw.line)-1]
}
y, x := win.CursorYX()
// TODO: handle this more elegantly (e.g. tell ncurses not to print backspaces)
// we have to do this three times because ncurses inserts two characters for backspace
// this is likely wrong in some cases
for i := 0; i < 3; i++ {
y, x = cw.moveLeft(y, x)
win.MoveDelChar(y, x)
}
win.Refresh()
case goncurses.KEY_F1: // F1 key
case goncurses.KEY_F2: // F2 key
case goncurses.KEY_F3: // F3 key
case goncurses.KEY_F4: // F4 key
case goncurses.KEY_F5: // F5 key
case goncurses.KEY_F6: // F6 key
case goncurses.KEY_F7: // F7 key
case goncurses.KEY_F8: // F8 key
case goncurses.KEY_F9: // F9 key
case goncurses.KEY_F10: // F10 key
case goncurses.KEY_F11: // F11 key
case goncurses.KEY_F12: // F12 key
case goncurses.KEY_DL: // delete-line key
case goncurses.KEY_IL: // insert-line key
case goncurses.KEY_DC: // delete-character key
case goncurses.KEY_IC: // insert-character key
case goncurses.KEY_EIC: // sent by rmir or smir in insert mode
case goncurses.KEY_CLEAR: // clear-screen or erase key3
case goncurses.KEY_EOS: // clear-to-end-of-screen key
case goncurses.KEY_EOL: // clear-to-end-of-line key
case goncurses.KEY_SF: // scroll-forward key
case goncurses.KEY_SR: // scroll-backward key
case goncurses.KEY_PAGEDOWN: // page-down key (next-page)
case goncurses.KEY_PAGEUP: // page-up key (prev-page)
case goncurses.KEY_STAB: // set-tab key
case goncurses.KEY_CTAB: // clear-tab key
case goncurses.KEY_CATAB: // clear-all-tabs key
case goncurses.KEY_RETURN: // enter key vs. KEY_ENTER
fallthrough
case goncurses.KEY_ENTER: // enter/send key
line = cw.line
cw.line = ""
win.Erase()
win.Print(PROMPT)
case goncurses.KEY_PRINT: // print key
case goncurses.KEY_LL: // lower-left key (home down)
case goncurses.KEY_A1: // upper left of keypad
case goncurses.KEY_A3: // upper right of keypad
case goncurses.KEY_B2: // center of keypad
case goncurses.KEY_C1: // lower left of keypad
case goncurses.KEY_C3: // lower right of keypad
case goncurses.KEY_BTAB: // back-tab key
case goncurses.KEY_BEG: // begin key
case goncurses.KEY_CANCEL: // cancel key
case goncurses.KEY_CLOSE: // close key
case goncurses.KEY_COMMAND: // command key
case goncurses.KEY_COPY: // copy key
case goncurses.KEY_CREATE: // create key
case goncurses.KEY_END: // end key
case goncurses.KEY_EXIT: // exit key
case goncurses.KEY_FIND: // find key
case goncurses.KEY_HELP: // help key
case goncurses.KEY_MARK: // mark key
case goncurses.KEY_MESSAGE: // message key
case goncurses.KEY_MOVE: // move key
case goncurses.KEY_NEXT: // next key
case goncurses.KEY_OPEN: // open key
case goncurses.KEY_OPTIONS: // options key
case goncurses.KEY_PREVIOUS: // previous key
case goncurses.KEY_REDO: // redo key
case goncurses.KEY_REFERENCE: // reference key
case goncurses.KEY_REFRESH: // refresh key
case goncurses.KEY_REPLACE: // replace key
case goncurses.KEY_RESTART: // restart key
case goncurses.KEY_RESUME: // resume key
case goncurses.KEY_SAVE: // save key
case goncurses.KEY_SBEG: // shifted begin key
//.........这里部分代码省略.........
示例2: inputHandler
// handles keyboard input
func inputHandler(inputWin *gc.Window, stdscr *gc.Window, contactsMenuWin *gc.Window, contactMenu *gc.Menu, msgWin *gc.Window) {
var NLlocate = map[int]newLine{}
var c gc.Char
var rawInput gc.Key
max_y, max_x := inputWin.MaxYX()
for {
rawInput = inputWin.GetChar()
c = gc.Char(rawInput)
// debugLog.Println(rawInput)
// debugLog.Println(c)
//Escape to Quit
if c == gc.Char(27) {
break
} else if rawInput == gc.KEY_BACKSPACE || c == gc.Char(127) {
//Delete Key
y, x := inputWin.CursorYX()
var del = byte('F')
if x != 0 {
inputWin.MoveDelChar(y, x-1)
del = inputBuffer[placer]
copy(inputBuffer[placer:len(inputBuffer)-1], inputBuffer[placer+1:])
inputBuffer = inputBuffer[0 : len(inputBuffer)-1]
placer--
if del != byte('\n') && NLlocate[y+scroll]._cursorX > x {
temp := newLine{NLlocate[y+scroll]._cursorX - 1, NLlocate[y+scroll]._placer - 1}
NLlocate[y+scroll] = temp
}
//debugLog.Println(inputBuffer)
} else if y != 0 { //when x==0 and y!=0
inputWin.Move(y-1, max_x-1)
inputWin.MoveDelChar(y-1, max_x-1)
del = inputBuffer[placer]
copy(inputBuffer[placer:len(inputBuffer)-1], inputBuffer[placer+1:])
inputBuffer = inputBuffer[0 : len(inputBuffer)-1]
//debugLog.Println(inputBuffer)
placer--
}
if del == byte('\n') {
inputWin.Erase()
inputWin.Print(string(inputBuffer))
inputWin.Move(y-1, NLlocate[y-1+scroll]._cursorX)
temp, check := NLlocate[y+scroll]
var temp_cursor = temp._cursorX
var temp_placer = temp._placer
if check && NLlocate[y-1+scroll]._cursorX+temp_cursor >= max_x {
_newLine := newLine{NLlocate[y-1+scroll]._cursorX + temp_cursor - max_x, NLlocate[y+scroll]._placer - 1}
NLlocate[y+scroll] = _newLine
delete(NLlocate, y-1)
} else if check { // check if there are any '\n' this line
var largest = -1 // if yes, select all '\n' and move
for i := range NLlocate { // placer by 1 and adjust cursor
if i >= y+scroll { // accordingly
if next_nl, ok := NLlocate[i+1]; ok {
new_nl := newLine{next_nl._cursorX, next_nl._placer - 1}
NLlocate[i] = new_nl
}
}
if i > largest {
largest = i
}
}
delete(NLlocate, largest) // delete last map entry
_newLine := newLine{NLlocate[y-1+scroll]._cursorX + temp_cursor, NLlocate[y-1+scroll]._placer + temp_placer - 1}
NLlocate[y-1+scroll] = _newLine
} else {
delete(NLlocate, y-1+scroll)
}
}
} else if c == gc.KEY_PAGEDOWN {
//debugLog.Println("HIT DOWN")
msgWin.Scroll(-10)
msgWin.Refresh()
inputWin.Refresh()
} else if c == gc.KEY_PAGEUP {
//debugLog.Println("HIT UP")
msgWin.Scroll(10)
msgWin.Refresh()
inputWin.Refresh()
} else if c == gc.KEY_LEFT {
y, x := inputWin.CursorYX()
if x != 0 {
inputWin.Move(y, x-1)
placer--
} else if y != 0 {
inputWin.Move(y-1, max_x-1)
placer--
}
if len(inputBuffer) > 0 && inputBuffer[placer+1] == byte('\n') {
inputWin.Move(y-1, NLlocate[y-1+scroll]._cursorX)
}
} else if c == gc.KEY_RIGHT {
y, x := inputWin.CursorYX()
placer++
if inputBuffer == nil || placer == len(inputBuffer) {
inputBuffer = append(inputBuffer, byte(' '))
}
if inputBuffer[placer] == byte('\n') || x >= max_x-1 {
inputWin.Move(y+1, 0)
//.........这里部分代码省略.........