www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Terminix Year In Review

reply Gerald <gerald.b.nunn gmail.com> writes:
Terminix is a GTK 3 tiling terminal emulator that has been 
designed following the GNOME Human Interface Guidelines. The 
project started just over a year ago at the start of 2016 and I 
thought it would be fun to look back at the project history, 
highlights, low-lights and goals for 2017.

https://gnunn1.github.io/terminix-web/news/year-in-review/
Jan 01
next sibling parent Joakim <dlang joakim.fea.st> writes:
On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been 
 designed following the GNOME Human Interface Guidelines. The 
 project started just over a year ago at the start of 2016 and I 
 thought it would be fun to look back at the project history, 
 highlights, low-lights and goals for 2017.

 https://gnunn1.github.io/terminix-web/news/year-in-review/
Nice post, interesting read and good marketing for D, though would be nice if it had a link to dlang.org. Someone should post this to reddit tomorrow.
Jan 01
prev sibling next sibling parent reply Mike Parker <aldacron gmail.com> writes:
On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been 
 designed following the GNOME Human Interface Guidelines. The 
 project started just over a year ago at the start of 2016 and I 
 thought it would be fun to look back at the project history, 
 highlights, low-lights and goals for 2017.

 https://gnunn1.github.io/terminix-web/news/year-in-review/
https://www.reddit.com/r/programming/comments/5ll9j8/terminix_year_in_review_looking_back_on_a_tiling/
Jan 02
parent Edwin van Leeuwen <edder tkwsping.nl> writes:
On Monday, 2 January 2017 at 13:35:21 UTC, Mike Parker wrote:
 On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been 
 designed following the GNOME Human Interface Guidelines. The 
 project started just over a year ago at the start of 2016 and 
 I thought it would be fun to look back at the project history, 
 highlights, low-lights and goals for 2017.

 https://gnunn1.github.io/terminix-web/news/year-in-review/
https://www.reddit.com/r/programming/comments/5ll9j8/terminix_year_in_review_looking_back_on_a_tiling/
It was also posted to: https://www.reddit.com/r/linux/comments/5liblz/terminix_year_in_review/
Jan 02
prev sibling parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been 
 designed following the GNOME Human Interface Guidelines.
So, how hard would it be for you to swap out parts of the backend? I wrote a terminal emulator in scratch in D for myself and have some nifty features hacked in already.
Jan 02
parent reply Gerald <gerald.b.nunn gmail.com> writes:
On Monday, 2 January 2017 at 14:55:26 UTC, Adam D. Ruppe wrote:
 On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been 
 designed following the GNOME Human Interface Guidelines.
So, how hard would it be for you to swap out parts of the backend? I wrote a terminal emulator in scratch in D for myself and have some nifty features hacked in already.
Since Terminix is a GTK 3 application, the minimum baseline is that your emulator would have to be a GTK 3 Widget, I have no idea what would be involved in creating a GTK widget in D as I've never tried it myself. Terminix uses the GTK VTE widget for terminal emulation, so the more of that API that you implement the easier it is to incorporate it. Having said that, if you got it to the point where it worked as a base GTK widget I'd be happy to support it as an experimental item and abstract the interface along with turning off the functionality that it doesn't support compared to GTK VTE. However note that to get things to the point where it could actually be shipped with Terminix for use by the end user is I suspect a substantial amount of work. I don't know how feature complete your emulator is, but looking at the VTE source code as well as the source code for other emulators it's a surprisingly complicated area with a lot of edge cases. Things like transparency, unicode, buffering output to temp files with encryption and various performance issues all come to mind. I think you mentioned previously that vi works fine in your emulator so you've already gotten over one of the major hurdles. I do have a desire at some point to switch to a D written solution for the actual terminal emulation at some point. I haven't done it so far because I believe it is a huge amount of work and I have my plate full just dealing with the application side of things. However, If you are interested in working on that I would be very interested in supporting you in that endeavor. Feel free to ping me on IRC and we can discuss in more detail.
Jan 02
next sibling parent reply Chris Wright <dhasenan gmail.com> writes:
On Mon, 02 Jan 2017 18:23:53 +0000, Gerald wrote:

 On Monday, 2 January 2017 at 14:55:26 UTC, Adam D. Ruppe wrote:
 On Monday, 2 January 2017 at 00:53:04 UTC, Gerald wrote:
 Terminix is a GTK 3 tiling terminal emulator that has been designed
 following the GNOME Human Interface Guidelines.
So, how hard would it be for you to swap out parts of the backend? I wrote a terminal emulator in scratch in D for myself and have some nifty features hacked in already.
Since Terminix is a GTK 3 application, the minimum baseline is that your emulator would have to be a GTK 3 Widget, I have no idea what would be involved in creating a GTK widget in D as I've never tried it myself.
You could also rip out the logic and the system calls and so forth and hook them up (laboriously) to a TextView with appropriate styling. Which is probably nontrivial on both sides.
 looking at the VTE source code as well as the source code for other
 emulators it's a surprisingly complicated area with a lot of edge cases.
I glanced over a python-based terminal emulator the other day. It was intended as a simple and straightforward example, I think. It was over four thousand lines of code. I'm not about to try implementing my own.
Jan 02
parent reply Getald <gerald.b.nunn gmail.com> writes:
On Monday, 2 January 2017 at 20:33:04 UTC, Chris Wright wrote:
 You could also rip out the logic and the system calls and so 
 forth and hook them up (laboriously) to a TextView with 
 appropriate styling. Which is probably nontrivial on both sides.
I'm not sure a textview would be viable, it might work for the command prompt but I doubt it would handle ncurses type applications like vi or nano very well. I also suspect the performance wouldn't be very good when dealing with a lot of output like cat'ing a large file.
Jan 02
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Monday, 2 January 2017 at 21:11:47 UTC, Getald wrote:
 I'm not sure a textview would be viable, it might work for the 
 command prompt but I doubt it would handle ncurses type 
 applications like vi or nano very well.
I don't know GTK at all, but my terminal thing's frontend just needs keyboard and mouse input events and a canvas to draw onto (including text string drawing functions). So I'm guessing the TextView is actually overfeatured for what I'd want.
Jan 03
parent Gerald <gerald.b.nunn gmail.com> writes:
On Wednesday, 4 January 2017 at 04:08:00 UTC, Adam D. Ruppe wrote:
 On Monday, 2 January 2017 at 21:11:47 UTC, Getald wrote:
 I'm not sure a textview would be viable, it might work for the 
 command prompt but I doubt it would handle ncurses type 
 applications like vi or nano very well.
I don't know GTK at all, but my terminal thing's frontend just needs keyboard and mouse input events and a canvas to draw onto (including text string drawing functions). So I'm guessing the TextView is actually overfeatured for what I'd want.
Yep, that would be my expectation. I suspect you would just inherit from GtkWidget and go from there.
Jan 04
prev sibling next sibling parent Adam D. Ruppe <destructionator gmail.com> writes:
On Monday, 2 January 2017 at 18:23:53 UTC, Gerald wrote:
 idea what would be involved in creating a GTK widget in D as 
 I've never tried it myself.
Yeah, I don't use GTK at all, my backend is pure code (it is an abstract class where you implement a few methods to actually do user interaction, while the terminal emulation guts are in that class) and the frontend is X11/Win32. It'd prolly be a bit of work then to wrap up my thing with the GTK UI implementation.
 However note that to get things to the point where it could 
 actually be shipped with Terminix for use by the end user is I 
 suspect a substantial amount of work. I don't know how feature 
 complete your emulator is, but looking at the VTE source code 
 as well as the source code for other emulators it's a 
 surprisingly complicated area with a lot of edge cases.
Yes, indeed, far more complicated than you'd think! But I have actually used mine as my real world terminal emulator for about two years now, including with several complex existing programs (vim, mutt, finch, and many others) and it works well.
 Feel free to ping me on IRC and we can discuss in more detail.
Yeah, we'll have to talk about it some day, the glue code would be a pain for both of us but once that's done I think our two sides could coexist well.
Jan 02
prev sibling parent Antonio Corbi <amcb ggmail.com> writes:
On Monday, 2 January 2017 at 18:23:53 UTC, Gerald wrote:

 Since Terminix is a GTK 3 application, the minimum baseline is 
 that your emulator would have to be a GTK 3 Widget, I have no 
 idea what would be involved in creating a GTK widget in D as 
 I've never tried it myself.
Hi Gerald, There's this tutorial from Davyd Madeley about writing a clock-widget (this is Gtk2) in C: 1- https://thegnomejournal.wordpress.com/2005/12/02/writing-a-widget-using-cairo-and-gtk2-8/ 2- https://thegnomejournal.wordpress.com/2006/02/16/writing-a-widget-using-cairo-and-gtk2-8-part-2/ Antonio
Jan 03