curses.listener: very basic curses-based listener
							parent
							
								
									15eeb0391e
								
							
						
					
					
						commit
						532010a673
					
				| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					Philipp Brüschweiler
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,64 @@
 | 
				
			||||||
 | 
					! Copyright (C) 2010 Philipp Brüschweiler.
 | 
				
			||||||
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
 | 
					USING: combinators continuations curses io io.encodings.string
 | 
				
			||||||
 | 
					io.encodings.utf8 io.streams.plain kernel listener make math
 | 
				
			||||||
 | 
					namespaces sequences ;
 | 
				
			||||||
 | 
					IN: curses.listener
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: print-scratchpad ( -- )
 | 
				
			||||||
 | 
					    COLOR_BLACK COLOR_RED ccolor
 | 
				
			||||||
 | 
					    "( scratchpad )" cwrite
 | 
				
			||||||
 | 
					    COLOR_WHITE COLOR_BLACK ccolor
 | 
				
			||||||
 | 
					    " " cwritef ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					! don't handle mouse clicks right now
 | 
				
			||||||
 | 
					: handle-mouse-click ( -- )
 | 
				
			||||||
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: delchar ( y x -- )
 | 
				
			||||||
 | 
					    [ cmove CHAR: space addch ] [ cmove ] 2bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: move-left ( -- )
 | 
				
			||||||
 | 
					    get-yx [
 | 
				
			||||||
 | 
					        [ 1 - get-max-x 1 - delchar ] unless-zero
 | 
				
			||||||
 | 
					    ] [ 1 - delchar ] if-zero ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: handle-backspace ( -- )
 | 
				
			||||||
 | 
					    building get [ pop* move-left ] unless-empty ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: curses-stream-readln ( -- )
 | 
				
			||||||
 | 
					    getch dup CHAR: \n = [ addch ] [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            { KEY_MOUSE [ handle-mouse-click ] }
 | 
				
			||||||
 | 
					            { 127 [ handle-backspace ] }
 | 
				
			||||||
 | 
					            { 4 [ return ] }    ! ^D
 | 
				
			||||||
 | 
					            [ [ , ] [ addch ] bi ]
 | 
				
			||||||
 | 
					        } case
 | 
				
			||||||
 | 
					        curses-stream-readln
 | 
				
			||||||
 | 
					    ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SINGLETON: curses-listener-stream
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: curses-listener-stream stream-readln
 | 
				
			||||||
 | 
					    drop [ curses-stream-readln ] B{ } make utf8 decode ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: curses-listener-stream stream-write
 | 
				
			||||||
 | 
					    drop cwrite ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: curses-listener-stream stream-flush
 | 
				
			||||||
 | 
					    drop crefresh ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: curses-listener-stream stream-nl
 | 
				
			||||||
 | 
					    drop cnl ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INSTANCE: curses-listener-stream plain-writer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: run-listener ( -- )
 | 
				
			||||||
 | 
					    <curses-window> [
 | 
				
			||||||
 | 
					        curses-listener-stream dup [ listener ] with-streams*
 | 
				
			||||||
 | 
					    ] with-curses ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: test-listener ( -- )
 | 
				
			||||||
 | 
					    global [ run-listener ] bind ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MAIN: run-listener
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					unix
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					A curses-based Factor listener.
 | 
				
			||||||
		Loading…
	
		Reference in New Issue