Added /commands

db4
William Schlieper 2008-07-14 20:53:08 -04:00
parent 97ccee96e5
commit 3928d3dae0
3 changed files with 72 additions and 30 deletions

View File

@ -0,0 +1,16 @@
! Copyright (C) 2008 William Schlieper
! See http://factorcode.org/license.txt for BSD license.
USING: kernel vocabs.loader sequences strings irc.messages ;
IN: irc.ui.commandparser
"irc.ui.commands" require
: command ( string -- command )
dup empty? [ drop "say" ] when
dup "irc.ui.commands" lookup
[ "quote" "irc.ui.commands" lookup ] unless* ;
: parse-message ( string -- )
"/" head? [ " " split1 swap command execute ] when ;

View File

@ -0,0 +1,13 @@
! Copyright (C) 2008 William Schlieper
! See http://factorcode.org/license.txt for BSD license.
USING: kernel irc.client irc.messages irc.ui
IN: irc.ui.commands
: say ( string -- )
[ client get profile>> nickname>> <own-message> print-irc ]
[ listener get write-message ] bi ;
: quote ( string -- )
drop ; ! THIS WILL CHANGE

View File

@ -3,13 +3,17 @@
USING: accessors kernel threads combinators concurrency.mailboxes USING: accessors kernel threads combinators concurrency.mailboxes
sequences strings hashtables splitting fry assocs hashtables sequences strings hashtables splitting fry assocs hashtables
ui ui.gadgets.panes ui.gadgets.editors ui.gadgets.scrollers ui ui.gadgets ui.gadgets.panes ui.gadgets.editors
ui.commands ui.gadgets.frames ui.gestures ui.gadgets.tabs ui.gadgets.scrollers ui.commands ui.gadgets.frames ui.gestures
io io.styles namespaces irc.client irc.messages calendar ui.gadgets.tabs ui.gadgets.grids
calendar.format ; io io.styles namespaces irc.client irc.client.private
irc.messages irc.messages.private irc.ui.commandparser
calendar calendar.format ;
IN: irc.ui IN: irc.ui
SYMBOL: listener
SYMBOL: client SYMBOL: client
TUPLE: ui-window client tabs ; TUPLE: ui-window client tabs ;
@ -20,14 +24,15 @@ TUPLE: ui-window client tabs ;
: green { 0 0.5 0 1 } ; : green { 0 0.5 0 1 } ;
: blue { 0 0 1 1 } ; : blue { 0 0 1 1 } ;
: prefix>nick ( prefix -- nick ) : dot-or-parens ( string -- string )
"!" split first ; dup empty? [ drop "." ]
[ "(" prepend ")" append ] if ;
GENERIC: write-irc ( irc-message -- ) GENERIC: write-irc ( irc-message -- )
M: privmsg write-irc M: privmsg write-irc
"<" blue write-color "<" blue write-color
[ prefix>> prefix>nick write ] keep [ prefix>> parse-name write ] keep
"> " blue write-color "> " blue write-color
trailing>> write ; trailing>> write ;
@ -44,22 +49,20 @@ M: own-message write-irc
M: join write-irc M: join write-irc
"* " green write-color "* " green write-color
prefix>> prefix>nick write prefix>> parse-name write
" has entered the channel." green write-color ; " has entered the channel." green write-color ;
M: part write-irc M: part write-irc
"* " red write-color "* " red write-color
[ prefix>> prefix>nick write ] keep [ prefix>> parse-name write ] keep
" has left the channel(" red write-color " has left the channel" red write-color
trailing>> write trailing>> dot-or-parens red write-color ;
")" red write-color ;
M: quit write-irc M: quit write-irc
"* " red write-color "* " red write-color
[ prefix>> prefix>nick write ] keep [ prefix>> parse-name write ] keep
" has left IRC(" red write-color " has left IRC" red write-color
trailing>> write trailing>> dot-or-parens red write-color ;
")" red write-color ;
M: irc-end write-irc M: irc-end write-irc
drop "* You have left IRC" red write-color ; drop "* You have left IRC" red write-color ;
@ -77,9 +80,9 @@ M: irc-message write-irc
[ timestamp>> timestamp>hms write " " write ] [ timestamp>> timestamp>hms write " " write ]
[ write-irc nl ] bi ; [ write-irc nl ] bi ;
: send-message ( message listener client -- ) : send-message ( message -- )
[ nip profile>> nickname>> <own-message> print-irc ] [ print-irc ]
[ drop write-message ] 3bi ; [ listener get write-message ] bi ;
: display ( stream listener -- ) : display ( stream listener -- )
'[ , [ [ t ] '[ , [ [ t ]
@ -95,32 +98,42 @@ TUPLE: irc-editor < editor outstream listener client ;
: <irc-editor> ( pane listener client -- editor ) : <irc-editor> ( pane listener client -- editor )
[ irc-editor new-editor [ irc-editor new-editor
swap >>listener swap <pane-stream> >>outstream swap >>listener swap <pane-stream> >>outstream
] dip client>> >>client ; ] dip >>client ;
: editor-send ( irc-editor -- ) : editor-send ( irc-editor -- )
{ [ outstream>> ] { [ outstream>> ]
[ editor-string ]
[ listener>> ] [ listener>> ]
[ client>> ] [ client>> ]
[ editor-string ]
[ "" swap set-editor-string ] } cleave [ "" swap set-editor-string ] } cleave
'[ , , , send-message ] with-output-stream ; '[ , listener set , client set , parse-message ] with-output-stream ;
irc-editor "general" f { irc-editor "general" f {
{ T{ key-down f f "RET" } editor-send } { T{ key-down f f "RET" } editor-send }
{ T{ key-down f f "ENTER" } editor-send } { T{ key-down f f "ENTER" } editor-send }
} define-command-map } define-command-map
: irc-page ( name pane editor tabbed -- ) TUPLE: irc-page < frame listener client ;
[ [ <scroller> @bottom frame, ! editor
<scroller> @center frame, ! pane : <irc-page> ( listener client -- irc-page )
] make-frame swap ] dip add-page ; irc-page new-frame
[ g swap client>> >>client swap [ swap (>>listener) ] keep
[ <irc-pane> [ <scroller> g @center grid-add ] keep ]
[ g client>> <irc-editor> <scroller> g @bottom grid-add ] bi
g ] with-gadget ;
M: irc-page graft*
[ listener>> ] [ client>> ] bi
add-listener ;
M: irc-page ungraft*
[ listener>> ] [ client>> ] bi
remove-listener ;
: join-channel ( name ui-window -- ) : join-channel ( name ui-window -- )
[ dup <irc-channel-listener> ] dip [ dup <irc-channel-listener> ] dip
[ client>> add-listener ] [ <irc-page> swap ] keep
[ drop <irc-pane> dup ] tabs>> add-page ;
[ [ <irc-editor> ] keep ] 2tri
tabs>> irc-page ;
: irc-window ( ui-window -- ) : irc-window ( ui-window -- )
[ tabs>> ] [ tabs>> ]