naTE - not another Terminal Emulator
Still in it's infancy and not yet ready for prime time, naTE is a tool I'm writing for my admin stuff. When its ready, I'll be releasing it as open source.
Like many admins, I SSH into multiple servers. So I wanted a tool to:
- open and log into a session who's information is stored in a list or database (like bookmarks)
- keep track of all sessions from a single window even though some sessions will be broken out
- horizontal scroll to display wide lines (132+ columns) in smaller (80 column) viewport
- simultaneous input into multiple sessions
- select output text and open the selection in Google
- change X forwarding on-the-fly
- change SSH port redirection on-the-fly
- copy files without running scp as a separate command, a file dialog would be great too
There are number of open source tools that come pretty close to what I want. But no cigar. So off to the workshop I go.
Here's a look at the first prototype:
Not bad. Not REAL bad.
While most Linux terminal emulators use libvte, I chose to use wxWidgets to be cross-platform. The terminal area used a wxTextCtrl. But it was just a little to slow for my tastes. (Now I don't have very fast tastes, but under 100 glyphs/sec doesn't pass the acceptable test. Especially when 'cat'ing a log file.) After searching the Net and reading others requests, I decided to create a Terminal Control from scratch and if it's good enough, it might be accepted as wxTermCtrl. But I get ahead of myself. ☺
The base class for wxTermCtrl is wxScrolledWindow. It contains a wxPanel upon which the glyphs are drawn and from which keyboard input is received.
wxTermCtrl interfaces to a custom TermCtrl Class and it's custom subordinate TermBuf Class. TermBuf uses a single UTF-8 encoded std::string for it's actual buffer (easy for searching.) Then additional sparse std::vector arrays contain formatting and attribute information for the buffer (easy for reformatting.) So far it's Unicode Level 1 and some Level 2. The speed is better and hopefully will remain acceptable as features are added. (Right now a single window displays about 4 million glyphs/sec, but I expect that to drop.)
... more to come as it progresses ...