- Notifications
You must be signed in to change notification settings - Fork41
A graphical terminal emulator for Linux using Fyne
License
fyne-io/terminal
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A terminal emulator using the Fyne toolkit, supports Linux, macOS, Windows and BSD.
Running on Linux with a custom zsh theme.
Running on macOS with a powerlevel10k zsh theme and classic style.
Running on Windows with PowerShell running inside.
Just use the go get command (you'll need a Go and C compiler installed first):
go install github.com/fyne-io/terminal/cmd/fyneterm@latest
To get the app installed alongside your other applications (with metadata, icons etc),use thefyne
tool, as illustrated below:
$ go get fyne.io/fyne/v2/cmd/fyne$ fyne get github.com/fyne-io/terminal/cmd/fyneterm
There are lots of great things that could be added to this app.Already planned is:
- Tabs
- Scroll-back
- Background and font/size customisation
- Split panels
You can also use this project as a library to create your ownterminal based applications, using the import path "github.com/fyne-io/terminal".
There are two modes, using the default shell or connecting to a remote shell.
To load a terminal widget and launch the current shell (works on macOS and Linux;on Windows, it always uses PowerShell) use theRunLocalShell
method after creatingaTerminal
, as follows:
// run new terminal and close app on terminal exit.t:=terminal.New()gofunc() {_=t.RunLocalShell()log.Printf("Terminal's shell exited with exit code: %d",t.ExitCode())a.Quit()}()// w is a fyne.Window created to hold the contentw.SetContent(t)w.ShowAndRun()
For example to open a terminal to an SSH connection that you have created:
// session is an *ssh.Session from golang.org/x/crypto/sshin,_:=session.StdinPipe()out,_:=session.StdoutPipe()gosession.Run("$SHELL || bash")// run new terminal and close app on terminal exit.t:=terminal.New()gofunc() {_=t.RunWithConnection(in,out)a.Quit()}()// OPTIONAL: dynamically resize the terminal sessionch:=make(chan terminal.Config)gofunc() {rows,cols:=uint(0),uint(0)for {config:=<-chifrows==config.Rows&&cols==config.Columns {continue}rows,cols=config.Rows,config.Columnssession.WindowChange(int(rows),int(cols))}}()t.AddListener(ch)// w is a fyne.Window created to hold the contentw.SetContent(t)w.ShowAndRun()