|
Post by alexfish on Jul 14, 2020 0:40:48 GMT 1
Hi All Yet another terminal editor this is a spinoff from the baconcairo thread Top terminal type your code + has load and save buttons and clearterm button bottom terminal as a entry bash command line bellow type your code and save it on the command line type bacon <yourfile> without the arrows can bash other commands like ls, cat & bash to exit bash type exit the bash command is important type reset + enter key to clear bottom terminal HAVE FUN + BR Alex Attachments:baconbash.bac.bz2 (2.83 KB)
|
|
|
Post by alexfish on Nov 25, 2022 1:02:23 GMT 1
Updated version. still libgtk2. + libvte for gtk2 enter commands in bottom entry if want bash / enter bash in bottom entry > bottom entry goes from view Crappy Editor Yes I know ,I wrote it :: Just like 1970s/80's BASIC without EDIT Practice with this = one will not make many mistakes 'baconbash editor/terminal v2.0 24/11/2022 OPTION UTF8 TRUE OPTION PARSE FALSE
PRAGMA OPTIONS -Wno-write-strings -Wno-pointer-arith
PRAGMA LDFLAGS `pkg-config --libs gtk+-2.0` PRAGMA OPTIONS `pkg-config --cflags gtk+-2.0` PRAGMA LDFLAGS -lvte
PRAGMA INCLUDE <gtk-2.0/gtk/gtk.h> PRAGMA INCLUDE <vte-0.0/vte/vte.h> DECLARE scrolled1 TYPE GtkWidget* DECLARE scrolled2 TYPE GtkWidget* DECLARE fileload TYPE GtkWidget* DECLARE filesave TYPE GtkWidget* DECLARE runit TYPE GtkWidget* DECLARE term TYPE GtkWidget* DECLARE termrun TYPE GtkWidget* DECLARE window TYPE GtkWidget* DECLARE filer TYPE GtkWidget* DECLARE load TYPE GtkWidget* DECLARE canvas TYPE GtkWidget* DECLARE v_scroll TYPE GtkWidget* DECLARE h_scroll TYPE GtkWidget* DECLARE Entry TYPE GtkWidget* DECLARE menu TYPE GtkWidget * DECLARE menu_bar TYPE GtkWidget * DECLARE root_menu TYPE GtkWidget * DECLARE menu_items TYPE GtkWidget * DECLARE V_box1 TYPE GtkWidget* DECLARE V_box2 TYPE GtkWidget* DECLARE Bbox TYPE GtkWidget* DECLARE H_box1 TYPE GtkWidget* DECLARE hbox2 TYPE GtkWidget* DECLARE hbox3 TYPE GtkWidget* DECLARE convert TYPE GtkWidget* DECLARE reset TYPE GtkWidget* DECLARE saveit TYPE GtkWidget*
DECLARE Running = 0 TYPE int DECLARE FileName$ TYPE STRING RECORD TermInfo
LOCAL Rbuffer$ TYPE STRING LOCAL CellWidth TYPE int LOCAL CharWidth TYPE int LOCAL CellHeight TYPE int LOCAL CharHeight TYPE int LOCAL LineCount TYPE int LOCAL x TYPE double LOCAL y TYPE double LOCAL InBuff$ TYPE STRING LOCAL OutBuff$ TYPE STRING LOCAL release TYPE int LOCAL press TYPE int
END RECORD
FUNCTION FileDialog ( GtkWidget * win,const char* title_str,const char* text_str, int xsize, int ysize, GtkFileChooserAction type) TYPE GtkWidget * LOCAL dialog TYPE GtkWidget * LOCAL terminator$ TYPE STRING
dialog = gtk_file_chooser_dialog_new(title_str,(GtkWindow*)win, type, "gtk-cancel", GTK_RESPONSE_CANCEL,text_str, GTK_RESPONSE_ACCEPT, NULL)
gtk_window_set_transient_for((GtkWindow*)dialog,(GtkWindow*)win)
'If ((type != 1) && (type != 3)) 'gtk_file_chooser_set_select_multiple(dialog, 1)
gtk_file_chooser_set_do_overwrite_confirmation((GtkFileChooser*)dialog,1) gtk_window_set_title((GtkWindow*)dialog,title_str) gtk_widget_set_size_request(dialog,xsize,ysize) gtk_widget_realize(dialog) g_object_set(dialog,"deletable", 0,NULL) RETURN dialog
END FUNCTION SUB TermFontSize (VteTerminal* terms, STRING fontsize) LOCAL desc TYPE PangoFontDescription* LOCAL ft$ = "monospace " TYPE STRING ft$ = ft$ & fontsize desc = pango_font_description_from_string(ft$) vte_terminal_set_font((VteTerminal*)terms, desc) pango_font_description_free(desc) END SUB
SUB relize_term (VteTerminal* terms) '
DECLARE startterm[2]={0,0} TYPE char * ' returns default shell vte_terminal_set_size ((VteTerminal *)term,80,40) startterm[0]=vte_get_user_shell() ''Fix working_dir bacon LOCAL Bdir$ TYPE STRING Bdir$ = ME$ Bdir$ = REVERSE$(Bdir$) Bdir$ = MID$(Bdir$,INSTR(Bdir$,"/")+1 ) Bdir$ = REVERSE$(Bdir$)
vte_terminal_fork_command_full((VteTerminal *) terms ,VTE_PTY_DEFAULT,Bdir$, startterm, NULL, \ (GSpawnFlags)(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH), NULL, NULL,0,0)
END SUB
FUNCTION Key_Press(VteTerminal* terms,GdkEventKey *event )
IF event->keyval = 65293 THEN TermInfo.InBuff$ = TermInfo.InBuff$ & "\n" TermInfo.Rbuffer$= "\r\n" vte_terminal_feed ((VteTerminal *)term,"\r\n",2) RETURN TRUE END IF 'TermInfo.Rbuffer$ 'TermInfo.InBuff$ 'TermInfo.OutBuff$ IF event->keyval = 65289 THEN
TermInfo.InBuff$ = TermInfo.InBuff$ & "\t" vte_terminal_feed ((VteTerminal *)term,"\t",1) TermInfo.Rbuffer$=TermInfo.InBuff$ gtk_widget_queue_draw (term)
RETURN TRUE END IF IF (event->keyval == 65288 ) THEN
IF LEN(TermInfo.InBuff$ ) THEN TermInfo.InBuff$ = MID$(TermInfo.InBuff$ ,1,LEN(TermInfo.InBuff$ )-1) TermInfo.Rbuffer$= TermInfo.InBuff$ TermInfo.Rbuffer$= REPLACE$ (TermInfo.Rbuffer$,"\n","\r\n")
vte_terminal_reset ((VteTerminal *)term,1,1) vte_terminal_feed ((VteTerminal *)term,TermInfo.Rbuffer$,strlen(TermInfo.Rbuffer$)) gtk_widget_queue_draw (term)
RETURN TRUE END IF RETURN TRUE END IF IF event->length && strlen(event->string) THEN
TermInfo.InBuff$ = TermInfo.InBuff$ & event->string TermInfo.Rbuffer$=TermInfo.Rbuffer$ & event->string vte_terminal_feed ((VteTerminal *)term,event->string,event->length) vte_terminal_select_all ((VteTerminal *)term)
RETURN TRUE END IF RETURN TRUE END FUNCTION
SUB LoadFile (GtkWidget * widget) LOCAL a TYPE int LOCAL filen TYPE STRING LOCAL txt TYPE STRING a= gtk_dialog_run((GtkDialog*)fileload) IF (a == GTK_RESPONSE_ACCEPT) THEN gtk_widget_hide(fileload) filen = gtk_file_chooser_get_filename((GtkFileChooser*)fileload)
IF (FILEEXISTS(filen)) THEN FileName$=filen gtk_window_set_title((GtkWindow*)window, FileName$) TermInfo.InBuff$= LOAD$(filen) 'MessageCopy$=CanvasInfo.InBuff$
TermInfo.Rbuffer$=TermInfo.InBuff$ TermInfo.Rbuffer$= REPLACE$(TermInfo.Rbuffer$,"\n","\r\n") vte_terminal_reset ((VteTerminal *)term,1,1) vte_terminal_feed ((VteTerminal *)term,TermInfo.Rbuffer$,strlen(TermInfo.Rbuffer$)) free(filen)
gtk_entry_set_text((GtkEntry *)filer,FileName$)
ELSE free(filen) END IF ELSE gtk_widget_hide(fileload) END IF
END SUB
SUB SaveIt(GtkWidget * widget)
LOCAL a TYPE int LOCAL filen TYPE STRING LOCAL txt$ TYPE STRING ''LOCAL fl$ TYPE STRING
FileName$ = gtk_entry_get_text((GtkEntry *)filer)
IF (LEN(FileName$) && LEN(TermInfo.InBuff$)) THEN SAVE TermInfo.InBuff$ TO FileName$ ELSE
a= gtk_dialog_run((GtkDialog*)filesave) IF (a == GTK_RESPONSE_ACCEPT) THEN gtk_widget_hide(filesave) filen = gtk_file_chooser_get_filename((GtkFileChooser*)filesave) FileName$ = filen
SAVE TermInfo.InBuff$ TO FileName$ gtk_entry_set_text((GtkEntry *)filer,FileName$) free(filen) ELSE gtk_widget_hide(filesave) END IF
END IF
END SUB FUNCTION Commander ( STRING arguments$ ) LOCAL child_av TYPE char ** LOCAL dimension SPLIT arguments$ BY " " TO array$ SIZE dimension
LOCAL i TYPE int ' Build the command line looks like this is freed internal ?? child_av = (char **)malloc(dimension * sizeof(char *))
FOR i = 0 TO dimension-1 child_av[i] =array$[i] NEXT
child_av[i ] = NULL ' returns default shell 'vte_terminal_set_size ((VteTerminal *)term,80,40) 'startterm[0]=vte_get_user_shell() ''Fix working_dir
LOCAL Bdir$ TYPE STRING Bdir$ = ME$ Bdir$ = REVERSE$(Bdir$) Bdir$ = MID$(Bdir$,INSTR(Bdir$,"/")+1 ) Bdir$ = REVERSE$(Bdir$) termdir$=Bdir$ vte_terminal_fork_command_full((VteTerminal *) termrun ,VTE_PTY_DEFAULT,Bdir$,child_av, NULL, \ (GSpawnFlags)(G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH), NULL, NULL,0,0) RUNNING =1 RETURN TRUE END FUNCTION
SUB RunCommand(GtkWidget * widget)
LOCAL cmd$ TYPE STRING
cmd$ = gtk_entry_get_text((GtkEntry *)widget) cmd$ = CHOP$(cmd$)
IF (cmd$ = "reset") THEN
vte_terminal_reset ((VteTerminal *)termrun,1,1) ELIF (cmd$ = "bash") THEN vte_terminal_reset ((VteTerminal *)termrun,1,1) Commander("bash") gtk_widget_hide(runit) ELSE
Commander(cmd$) END IF END SUB
SUB ClearTerm() vte_terminal_reset ((VteTerminal *)term,1,1)
END SUB
' MAIN ------------------------------------------------------------------------------------ gtk_init (&argc, &argv)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL) g_signal_connect (G_OBJECT (window), "delete-event",G_CALLBACK (gtk_main_quit), NULL) gtk_widget_set_size_request(window,900,600)
scrolled1 = gtk_scrolled_window_new(0, 0) scrolled2 = gtk_scrolled_window_new(0, 0)
fileload= FileDialog(window,"Open File","Open",600,400,GTK_FILE_CHOOSER_ACTION_OPEN) filesave= FileDialog(window,"Save File","Save",600,400,GTK_FILE_CHOOSER_ACTION_SAVE)
filer = gtk_entry_new()
gtk_entry_set_editable ((GtkEntry *)filer,0) saveit = gtk_button_new_with_label("Save-file") g_signal_connect (G_OBJECT (saveit), "clicked",G_CALLBACK (SaveIt),NULL)
reset= gtk_button_new_with_label("Clear-term") g_signal_connect (G_OBJECT (reset), "clicked",G_CALLBACK (ClearTerm),NULL) load = gtk_button_new_with_label("Load-file") g_signal_connect (G_OBJECT (load), "clicked",G_CALLBACK (LoadFile),NULL)
runit= gtk_entry_new() 'gtk_entry_set_text ( runit,"ls")
g_signal_connect (G_OBJECT (runit), "activate",G_CALLBACK (RunCommand),NULL)
term = vte_terminal_new() TermFontSize((VteTerminal*)term, "12") vte_terminal_set_scrollback_lines((VteTerminal *)term,-1) vte_terminal_set_scroll_on_output ((VteTerminal *)term,0) g_signal_connect (G_OBJECT (term), "key_press_event",G_CALLBACK (Key_Press),NULL) gtk_container_add(GTK_CONTAINER (scrolled1),term)
termrun= vte_terminal_new() vte_terminal_set_scrollback_lines((VteTerminal *)termrun,-1) gtk_container_add(GTK_CONTAINER (scrolled2),termrun)
hbox2=gtk_hbox_new(0,0) V_box1 = gtk_vbox_new(0, 0) H_box1 = gtk_hbox_new(0,0)
gtk_container_add (GTK_CONTAINER (window), V_box1) gtk_box_pack_start((GtkBox*) V_box1,H_box1, 0, 0, 0) gtk_box_pack_start((GtkBox*) H_box1,load, 0, 0, 0) gtk_box_pack_start((GtkBox*) H_box1,filer, 1, 1, 0) gtk_box_pack_start((GtkBox*) H_box1,saveit, 0, 0, 0) gtk_box_pack_start((GtkBox*) H_box1,reset, 0, 0, 0) gtk_box_pack_start((GtkBox*) V_box1,scrolled1, 1,1, 0) gtk_box_pack_start((GtkBox*) V_box1,scrolled2, 1,1, 0) gtk_box_pack_start((GtkBox*) V_box1,runit, 0,0, 0)
gtk_widget_show_all (window) gtk_main ()
' END ALL THAT
Have Fun + BR Alex Attachments:
|
|