47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2004, 2010 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: arrays editors io io.binary io.encodings.ascii
 | 
						|
io.encodings.binary io.encodings.utf8 io.files io.files.private
 | 
						|
io.pathnames io.sockets io.streams.byte-array kernel locals
 | 
						|
math.parser namespaces prettyprint sequences ;
 | 
						|
IN: editors.jedit
 | 
						|
 | 
						|
: jedit-server-file ( -- server-files )
 | 
						|
    home ".jedit/server" append-path
 | 
						|
    home "Library/jEdit/server" append-path 2array
 | 
						|
    [ exists? ] find nip ;
 | 
						|
 | 
						|
: jedit-server-info ( server-file -- port auth )
 | 
						|
    ascii [
 | 
						|
        readln drop
 | 
						|
        readln string>number
 | 
						|
        readln string>number
 | 
						|
    ] with-file-reader ;
 | 
						|
 | 
						|
: make-jedit-request ( files -- code )
 | 
						|
    utf8 [
 | 
						|
        "EditServer.handleClient(false,false,false," write
 | 
						|
        cwd pprint
 | 
						|
        "," write
 | 
						|
        "new String[] {" write
 | 
						|
        [ pprint "," write ] each
 | 
						|
        "null});\n" write
 | 
						|
    ] with-byte-writer ;
 | 
						|
 | 
						|
:: send-jedit-request ( request -- )
 | 
						|
    jedit-server-file jedit-server-info :> ( port auth )
 | 
						|
    "localhost" port <inet> binary [
 | 
						|
        auth 4 >be write
 | 
						|
        request length 2 >be write
 | 
						|
        request write
 | 
						|
    ] with-client ;
 | 
						|
 | 
						|
: jedit-location ( file line -- )
 | 
						|
    number>string "+line:" prepend 2array
 | 
						|
    make-jedit-request send-jedit-request ;
 | 
						|
 | 
						|
: jedit-file ( file -- )
 | 
						|
    1array make-jedit-request send-jedit-request ;
 | 
						|
 | 
						|
[ jedit-location ] edit-hook set-global
 |