HUG (Terminal Emulator)
Feb 5, 2015 19:30:18 GMT 1
Post by alexfish on Feb 5, 2015 19:30:18 GMT 1
Hi All
Whilst on Linux Mint Cinnamon (new install) got kind of stuck :: Re see thread BaCon on Mint Cinnamon
although did manage to get BaCon Gui working , the below code is a results of getting a editor working + been sick of clicking open terminal
So now we have a HUG TERMINAL EMULATOR , note from the code this is now a Mini BaCon editor now with source view SEDIT . if stuck with source view
then can just add standard EDIT
Also feel free to ADAPT and Use the terminal from the editor , think termunal fans may also find it a nice
tool to play with IE bacon from the command line using HUG.
Usage , open file , save file , click on the Terminal , in the terminal type , ensure you be in the correct directory
UPDATE this is similar to where I ended
ADDED SCRATCH PAD .. button Entry etc, may seem complex but after some playing around with the bits
hopeful , then it will
updates THEME, LINE NUM, MATCH BRACKETS
ADDED 'INCREASE'
to widen window/sedit and entry
Update BUG FIX in LOADFILE::V4
VERSION 4.1
Have Fun
+
BR
Alex
Whilst on Linux Mint Cinnamon (new install) got kind of stuck :: Re see thread BaCon on Mint Cinnamon
although did manage to get BaCon Gui working , the below code is a results of getting a editor working + been sick of clicking open terminal
So now we have a HUG TERMINAL EMULATOR , note from the code this is now a Mini BaCon editor now with source view SEDIT . if stuck with source view
then can just add standard EDIT
Also feel free to ADAPT and Use the terminal from the editor , think termunal fans may also find it a nice
tool to play with IE bacon from the command line using HUG.
Usage , open file , save file , click on the Terminal , in the terminal type , ensure you be in the correct directory
UPDATE this is similar to where I ended
ADDED SCRATCH PAD .. button Entry etc, may seem complex but after some playing around with the bits
hopeful , then it will
updates THEME, LINE NUM, MATCH BRACKETS
ADDED 'INCREASE'
to widen window/sedit and entry
Update BUG FIX in LOADFILE::V4
VERSION 4.1
CONST VERSION = 4.1
INCLUDE hug.bac
HOME$ = GETENVIRON$("HOME")
' if hug needed for scratch cp hug.bac /tmp/
'================================================
VTE$ = "libvte.so.9"
GTK$= HUGLIB$("gtk")
GDK$ = HUGLIB$("gdk")
Sview$ = "libgtksourceview-2.0.so.0"
'================================================
' Import the GTK functions for file filters
IMPORT "gtk_file_chooser_add_filter(long,long)" FROM GTK$ TYPE long
IMPORT "gtk_file_filter_add_pattern(long,char*)" FROM GTK$ TYPE long
IMPORT "gtk_file_filter_new" FROM GTK$ TYPE long
IMPORT "gtk_file_filter_set_name(long,char*)" FROM GTK$ TYPE void
'================================================
IMPORT vte_terminal_feed_child(long, char *, unsigned int) FROM VTE$ TYPE void
IMPORT vte_terminal_new (void) FROM VTE$ TYPE long
IMPORT vte_terminal_set_scrollback_lines (long,int) FROM VTE$ TYPE void
IMPORT vte_terminal_fork_command(long, char*, char*, char*, char*, int, int,int) FROM VTE$ TYPE void
IMPORT vte_terminal_set_scroll_on_keystroke(long, int) FROM VTE$ TYPE void
'NA IMPORT vte_terminal_set_color_background(long,long) FROM VTE$ TYPE void
'================================================
IMPORT "gtk_source_style_scheme_manager_get_default(void)" FROM Sview$ TYPE long
IMPORT "gtk_source_style_scheme_manager_get_scheme(long,char*)" FROM Sview$ TYPE long
IMPORT "gtk_source_buffer_set_style_scheme(long, long)" FROM Sview$ TYPE const char* const*
IMPORT "gtk_source_buffer_can_undo(long)" FROM Sview$ TYPE int
IMPORT "gtk_source_buffer_set_highlight_matching_brackets(long,int)" FROM Sview$ TYPE void
IMPORT "gtk_source_buffer_undo(long)" FROM Sview$ TYPE void
IMPORT "gtk_source_language_manager_get_default" FROM Sview$ TYPE long
IMPORT "gtk_source_language_manager_get_language(long,char*)" FROM Sview$ TYPE long
IMPORT "gtk_source_view_new_with_buffer(long)" FROM Sview$ TYPE long
IMPORT "gtk_source_view_set_auto_indent(long,int)" FROM Sview$ TYPE void
IMPORT "gtk_source_view_set_show_line_numbers(long,int)" FROM Sview$ TYPE void
IMPORT "gtk_source_view_set_tab_width(long,int)" FROM Sview$ TYPE void
IMPORT "gtk_source_buffer_new_with_language(long)" FROM Sview$ TYPE long
REM -------------------------------------------------------------------------
SUB TERMEXEC()
vte_terminal_fork_command(term, NULL, NULL, NULL, NULL, 0, 0, 0)
END SUB
'================================================
FUNCTION SEDIT (int hug_xsize, int hug_ysize)
' Create language manager
lm = gtk_source_language_manager_get_default()
' Define language
lang = gtk_source_language_manager_get_language(lm, "bacon")
' Setup buffer and viewer using BaCon as language
buffer = gtk_source_buffer_new_with_language(lang)
view = gtk_source_view_new_with_buffer(buffer)
' contributed by Joe/BigBass line numb/matching brks
gtk_source_view_set_show_line_numbers (view,TRUE)
gtk_source_buffer_set_highlight_matching_brackets(buffer,1)
'-------------------------------------------------------
' SET SCHEME TO dark blue /nearest to terminal black
' CAN SET OWN OR UNCOMMENT
scman = gtk_source_style_scheme_manager_get_default()
theme = gtk_source_style_scheme_manager_get_scheme(scman, "cobalt")
gtk_source_buffer_set_style_scheme(buffer,theme)
' Create scrolled window
scrolled = gtk_scrolled_window_new(0, 0)
gtk_scrolled_window_set_policy(scrolled, 1, 1)
gtk_scrolled_window_set_shadow_type(scrolled, 3)
gtk_container_add(scrolled, view)
gtk_text_view_set_editable(view, 1)
gtk_text_view_set_wrap_mode(view, 3)
gtk_widget_show_all(scrolled)
hug_widget_xsize(STR$(scrolled)) = hug_xsize
hug_widget_ysize(STR$(scrolled)) = hug_ysize
hug_widget_signal(STR$(scrolled)) = 5
hug_widget_s_widget(STR$(scrolled)) = buffer
hug_widget_type$(STR$(scrolled)) = "edit"
hug_widget_font(STR$(scrolled)) = buffer
hug_widget_focus(STR$(scrolled)) = view
RETURN scrolled
END FUNCTION
'================================================
FUNCTION TERMINAL (int hug_xsize, int hug_ysize)
' create vte terminal emulator
term = vte_terminal_new()
'col = MEMORY(96)
'gdk_color_parse("#000000", col)
'vte_terminal_set_color_background(term,col)
vte_terminal_set_scrollback_lines(term,-1)
'FREE col
' Create scrolled window
scrolled = gtk_scrolled_window_new(0, 0)
gtk_scrolled_window_set_policy(scrolled, 1, 1)
gtk_scrolled_window_set_shadow_type(scrolled, 3)
gtk_container_add(scrolled, term)
gtk_widget_show_all(scrolled)
hug_widget_xsize(STR$(scrolled)) = hug_xsize
hug_widget_ysize(STR$(scrolled)) = hug_ysize
hug_widget_signal(STR$(scrolled)) = 5
'hug_widget_s_widget(STR$(scrolled)) = buffer
hug_widget_type$(STR$(scrolled)) = "edit"
hug_widget_focus(STR$(scrolled)) = term
g_signal_connect_data(term,"realize",TERMEXEC,0,0,0)
RETURN scrolled
ENDFUNCTION
REM ------------------------------------------------------------
SUB Show_Dialog
SHOW(handle)
END SUB
REM ------------------------------------------------------------
SUB File_Dialog(NUMBER dialog, int button)
LOCAL alltxt$
HIDE(dialog)
IF button != GTK_RESPONSE_CANCEL THEN
files$ = GRAB$(dialog)
PRINT files$
OPEN files$ FOR READING AS loadfile
WHILE NOT(ENDFILE(loadfile)) DO
READLN txt$ FROM loadfile
IF NOT(ENDFILE(loadfile)) THEN
alltxt$=CONCAT$(alltxt$,txt$,NL$)
ENDIF
WEND
TEXT(sed,"")
TEXT(sed,alltxt$)
TEXT(filename,files$)
TEXT(ent,"bacon " & files$)
CLOSE FILE loadfile
END IF
END SUB
SUB save_file()
SHOW(save_handle)
ENDSUB
REM ------------------------------------------------------------
SUB SAVE_FILE(NUMBER dialog, int button)
HIDE(dialog)
IF button != GTK_RESPONSE_CANCEL THEN
files$= GRAB$(dialog)
data$ =GRAB$(sed)
OPEN files$ FOR WRITING AS savefile
WRITELN data$ TO savefile
CLOSE FILE savefile
TEXT(filename,files$)
TEXT(ent,"bacon " & files$)
END IF
END SUB
REM ------------------------------------------------------------
SUB Command()
cmd$ = CHOP$(GRAB$(ent))
cmd$=cmd$ & NL$
vte_terminal_feed_child(term,cmd$,LEN(cmd$))
END SUB
REM ------------------------------------------------------------
SUB Scratch()
LOCAL comp$
LOCAL cmd1$
comp$= CHOP$(GRAB$(ed2))
'
SAVE comp$ TO "/tmp/scratch.bac"
cmd1$ = "bacon /tmp/scratch.bac" & NL$
vte_terminal_feed_child(term,cmd1$,LEN(cmd1$))
TEXT(ent,"/tmp/scratch")
END SUB
'================================================
INCREASE = 150
wd = 1008+INCREASE
wh = 600
termh =380
termw = 500
win = WINDOW("mini edit",wd,wh)
'================================================
filename = ENTRY("",500+INCREASE,20)
ATTACH(win,filename,3,3)
sed=SEDIT(500+INCREASE,wh-35)
ATTACH(win,sed,3,30)
'================================================
terminal=TERMINAL(500,termh)
ATTACH(win,terminal,wd-(termw+3),0)
'================================================
ent = ENTRY("ls",termw,25)
ATTACH(win,ent,wd-(termw+3),termh+3)
CALLBACK(ent,Command)
'================================================
ed2 =SEDIT(500,155)
ATTACH(win,ed2,wd-(termw+3),termh+31)
'================================================
open_btn = STOCK("gtk-open", 115, 25)
ATTACH(win, open_btn,wd-(termw+3), wh-30)
CALLBACK(open_btn, Show_Dialog)
'================================================
save_btn = STOCK("gtk-save", 115, 25)
ATTACH(win, save_btn,(wd-(termw+3))+118, wh-30)
CALLBACK(save_btn, save_file)
'================================================
scratch = BUTTON("Scratch", 115, 25)
ATTACH(win, scratch,(wd-(termw+3))+118*2, wh-30)
CALLBACK(scratch,Scratch)
'================================================
cancel_btn = STOCK("gtk-quit", 120, 25)
ATTACH(win, cancel_btn, wd-123, wh-30)
CALLBACK(cancel_btn, QUIT)
'================================================
handle = FILEDIALOG("Pick a file", "Select file", 600, 400, 0)
CALLBACK(handle, File_Dialog)
' Setup first filter
filter1 = gtk_file_filter_new()
gtk_file_filter_set_name(filter1, "BaCon source files (*.bac)")
gtk_file_filter_add_pattern(filter1, "*.bac")
' Setup second filter
filter2 = gtk_file_filter_new()
gtk_file_filter_set_name(filter2, "All files (*)")
gtk_file_filter_add_pattern(filter2, "*")
' Apply file filters to the created FILEDIALOG
gtk_file_chooser_add_filter(handle, filter1)
gtk_file_chooser_add_filter(handle, filter2)
REM ------------------------------------------------------
save_handle=FILEDIALOG("Save file", "Save file", 600, 400, 1)
CALLBACK(save_handle, SAVE_FILE)
filter3 = gtk_file_filter_new()
gtk_file_filter_set_name(filter3, "BaCon source files (*.bac)")
gtk_file_filter_add_pattern(filter3, "*.bac")
filter4 = gtk_file_filter_new()
gtk_file_filter_set_name(filter4, "All files (*)")
gtk_file_filter_add_pattern(filter4, "*")
gtk_file_chooser_add_filter(save_handle, filter3)
gtk_file_chooser_add_filter(save_handle, filter4)
DISPLAY
/*
FILEDIALOG("title", "caption", xsize, ysize, action)
Type: function
Creates a dialog with a filebrowser. Depending on <action> the dialog maybe used for "Open File” (0), "Save File" (1), "Select Folder" (2) or "Create Folder" (3).
By default the dialog will be hidden. Use the SHOW function to make it visible. Returns the ID of the created dialog
*/
Have Fun
+
BR
Alex