ncurses in your hobostove

30
ncurses in your hobostove Eric Oestrich SLS Conf 2012-12-17

Upload: smartlogic

Post on 18-Jun-2015

969 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: ncurses in your hobostove

ncurses in your hobostove

Eric Oestrich

SLS Conf2012-12-17

Page 2: ncurses in your hobostove

Eric Oestrich

http://www.smartlogicsolutions.com

twitter.com/ericoestrich

github.com/oestrich

SmartLogic Solutions

Page 3: ncurses in your hobostove

DISCLAIMER

Page 4: ncurses in your hobostove

I don't know ncurses very well

Page 5: ncurses in your hobostove

This could be the worst way to do things

Page 6: ncurses in your hobostove

Let's begin

Page 7: ncurses in your hobostove

gem install ncurses-ruby

Page 8: ncurses in your hobostove

Basic SetupNcurses.initscrNcurses.cbreakNcurses.noecho

# window initialization

Ncurses.doupdateNcurses.refresh

Page 9: ncurses in your hobostove

Basic TeardownNcurses.echoNcurses.endwin

Page 10: ncurses in your hobostove

Let me repeat thatSlide Content

Page 11: ncurses in your hobostove

Basic TeardownNcurses.echoNcurses.endwin

Page 12: ncurses in your hobostove

If you don't exit cleanlyYour command prompt won't be

happy

Page 13: ncurses in your hobostove

Learn to love resetbin/hobostove || reset

Page 14: ncurses in your hobostove

Basic Panels

Page 15: ncurses in your hobostove

Panels - Setup@win = Ncurses.newwin(height, width, starty, startx #it's backwards

)Ncurses.box(@win, 0, 0)@panel = Ncurses::Panel.new_panel(@win)# refresh

Page 16: ncurses in your hobostove

Panels - Refresh# setup panels

Ncurses::Panel.update_panelsNcurses.doupdateNcurses.refresh

Page 17: ncurses in your hobostove

Panels - OutputNcurses.werase(@win)

@win.mvaddstr(y, x, "Hello")

Ncurses.box(@win, 0, 0)

# refresh

Page 18: ncurses in your hobostove

Re-implementing readlineor I didn't look to see if I could use

it in hobostove

Page 19: ncurses in your hobostove

User Inputwhile (ch = Ncurses.getch) case ch when 10 # enter message = "" else message = message + ch.chr.to_send# move cursor and display message

end

Page 20: ncurses in your hobostove

User Input - Move [email protected](1, 2, message)

Ncurses.move(Ncurses.LINES - 2,message.size + 2

)

Page 21: ncurses in your hobostove

Abstract into Panels● Handle most of this by itself● Subclass for different panel

types○ InputPanel○ UserPanel

Page 22: ncurses in your hobostove

Scrolling

Page 23: ncurses in your hobostove

SorryCouldn't get that to work

Page 24: ncurses in your hobostove

Trip ups

Page 25: ncurses in your hobostove

Modifier Keyswhile (ch = Ncurses.getch) case ch when 14 # C+n when 10 # enter and C+j endend

Page 26: ncurses in your hobostove

Bonus: GLIDSL for creating command line

apps

Page 27: ncurses in your hobostove

GLIrequire 'gli'

include GLI::App

program_desc "A command line Campfire client"

# commands

Page 28: ncurses in your hobostove

GLI# set updesc "Start hobostove"command :start do |c| c.action do

# stuff endenddefault_command :start

exit run(ARGV)

Page 29: ncurses in your hobostove

What it gives you