JSON Profiles in Ubuntu Terminal App

If you were bothered by a missing command or key in the terminal-app keyboard we’ve finally got you covered. Since our last update (27-02-2015) it is possible to easily define custom json layouts.

In this post I’m going to walk you through the construction of a simple VIM profile.

For starters we create the custom layouts directory:

mkdir ~/.config/com.ubuntu.terminal/Layouts/

All the JSON files inside it will be parsed when the application starts, so let’s create a empty file with your favourite editor (I’m guessing VIM at this point 😉 ).

vim ~/.config/com.ubuntu.terminal/Layouts/vim.json

The root object contains some pretty basic stuff like the name, the short_name which is shown on the selector and the language (which will be used in the future).

{
    "name" : "Simple VIM",
    "short_name" :"VIM",
    "language" : "en_US",
 
    "buttons": []
}

All the actual controls will be stored in the “buttons” array. Every Button object is composed by a main_action (triggered by click) and other_actions (triggered by click and drag in a sub-menu). There are currently two types of action, a “key” action which simulates a keystroke (with optional modifiers) and “string” action which sends a whole string to the terminal. Each action will also have a text property which is shown to the user.

Let’s start by emulating a very useful vim control: Escape. There won’t be any additional action, the type will be “key” and we arbitrarily decide to show “ESC” to the user. Our final button will be:

{
    "main_action" : {
        "type" : "key",
        "text" : "ESC",
        "key" : "Escape"
    }
}

The list of keys that can be used is taken from here: https://doc.qt.io/qt-5/qt.html#Key-enum. Please remember only to use the name after the prefix “Key_”, so the name “Qt::Key_Escape” becomes just “Escape”. Modifiers can be specified with the “mod” attribute, and the valid values are: Control, Alt and Shift.

Now let’s move to close and save commands. In vim we generally type the strings “:q”, “:q!”, “:wq” to close the file dropping or storing the changes. Since the correlation is strong I decided to put them in the same semantic button with “:q” as the main action and the other two as secondary actions. This time we want to send a string instead of a single keystroke so type will be set to “string”.

{
    "main_action" : {
        "type" : "string",
        "text" : ":q",
        "string" : ":q\n"
    },
    "other_actions" : [
        {
            "type" : "string",
            "text" : ":wq",
            "string" : ":wq\n"
        },
        {
            "type" : "string",
            "text" : ":q!",
            "string" : ":q!\n"
        }
    ]
}

The complete sample VIM profile can be found here: https://drive.google.com/file/d/0B2KuANIptmZhWlQzdnVGLV9CZ00/view?usp=sharing.

That’s it. If your custom profile doesn’t load, you probably have a syntactical or semantical error in your json file; check the standard output to see what’s wrong.

We strongly encourage you to play with this feature and to share your achievement with us, we are eager to see new profiles or patches to the default ones.

Cheers!

Cool-Retro-Term v1.0.0 is out!

Screenshot

The v1.0.0 of CRT is finally among us. The 43 commits landed after RC1 brought big performance improvements and fixes.

  • Improved font upscaling with much better performances
  • Huge improvements in quality and speed of burn-in effect (especially at low FPSs)
  • Optimisations in bloom effect
  • New fonts
  • [Linux] Fix bad behaviours in colour dialog
  • [OSX] Fix UTF8 characters issues
  • [OSX] Fix ALT key behaviour
  • Many other small fixes/improvements/cleanups

Thanks to some great guys CRT is already packaged for many Linux distributions; you can follow the procedure at https://github.com/Swordfish90/cool-retro-term to download and install it.

OSX users can grab the dmg from the releases page: https://github.com/Swordfish90/cool-retro-term/releases

Huge thanks to the community folks who helped shape this program with their patches, donations, comments and ideas. I just can’t describe how awesome you have been.

Enjoy CRT!

New Ubuntu Terminal

Just a short announcement today: the new reboot version of Ubuntu Terminal App has finally landed as default!

For those who haven’t tried the development version, the most notable differences for end users are:

  • Redesigned look to maximize screen estate and improve touch interaction
  • Configurable keyboard bar which allows custom keys or commands (in the future via JSON files)
  • Keyboard selector to change on the fly keyboard bar layout
  • Tabs support with live preview
  • Copy, paste and selection
  • Overall improvements in stability

The update should come automatically if you have the old version installed. Feel free to contact us if you have any bug or suggestion.

PS: Huge thanks to Alan Pope for its coaching and for the screenshots (he is the Master of Screenshots).

Cool-Retro-Term v1.0.0-RC1 Released

Santa was a little bit late this year; check again under your tree, there might be another surprise waiting for you: v1.0.0-RC1 of Cool-Retro-Term. What’s inside? Well, in the last few weeks I’ve been working very hard to polish the experience, fix issues and improve performances. In a bulleted list:

  • CRT is now snappier and lighter on resources (the performance settings are also much more useful)
  • Profiles import/export (json files)
  • More fonts
  • The OS X version has feature parity with the Linux one (there is also a DMG file on the github release page)
  • Plenty of fixes.

I wanted to thank all the people who donated, contributed or helped with the packaging. You’ve all been awesome!

https://github.com/Swordfish90/cool-retro-term/releases/tag/v1.0.0-RC1.

Enjoy CRT and please share if you create an awesome profile or frame. I might include it in the final version!

(Thank you Popescu Sorin for the video)

Bump Bump

Hello fellow reader, it has been a while since I posted here and I’m really ashamed of that. I just want to make sure that I didn’t lose the ability to write and reassure everyone that I didn’t abandon any of my open-source activities. On the contrary I’m working harder than ever.

In the last few weeks I’ve been the main developer of the new ubuntu-terminal-app (https://launchpad.net/ubuntu-terminal-app/reboot), which is a complete rewrite of the terminal application for the ubuntu platform.

Screenshots

All this started from the foundations, with a shiny new port of QTermWidget (originally Konsole) to QML (https://github.com/Swordfish90/qmltermwidget). This aims to an independent QML terminal widget, so if you want to create your own terminal emulator and you need a terminal engine give it a go, it’s quite good (you know you should never ask a barber if you need a haircut). Compared to the previous version this it has more features, it’s more reliable and is closer to upstream so we can effectively work with them for the benefit of everyone.

But a new engine wasn’t enough, so I started a rewrite of the application that yesterday saw the light of day and was released on the click store as Terminal Reboot. As you can see it features a new look and feel, tabs support with previews, configurable bottom keyboard bar (in the short future customizable via JSON files) and more. Everything is thought to to maximize the screen estate and to be as fast as possible on touch devices (but don’t worry desktop users we are also thinking about you).

Please keep in mind that this is still a preview and some issues are expected but if you have some spare time or you want to try something new just install it and report issues, ideas, mockups or why not, even patches. We will be happy to take a look at them!

But, but, but what happened to cool-retro-term? No worries, CRT is not going anywhere. I already ported it to the new QMLTermWidget and in the next days I’m going to start a new refactoring and cleanup campaign on it.