Seems I’ve been all about the terminal customisation recently…
I use grep a lot. Multiple times every day without fail. I used ack for a while when I started at my current workplace as that seemed to be favoured by a lot of the existing devs there. However, I found that not having ack on some servers meant I was making silly mistakes when using grep elsewhere. Ever typed this:
and sat there waiting? Well I have. So I switched away from ack and became a grep advocate. This move from ack might also help explain my grep default flags, one of which (that I didn’t mention in that post..) is -P to use perlre in the search string.
I’ve been sharing my code via github a lot more lately. I’ve used Google Code in the past and haven’t really used github extensively. Using it more and more now has made me feel I should share my tools via github.io, not a lot of people want to go to links on someone elses blog in case they’re using it to gain money via ads or something. I don’t use advertising, I can’t stand ads in general and block them in any way I can, so you don’t need to worry about that here!
Anyway, I’ve added my recent tools and script to a github.io page which is accessible here:
I’ll continue to publish articles here as well, and would like to use this as a way to get feedback and elaborate on any interesting parts of the code I’ve written. As well as write more rambles if and when I feel the need!
I’d wanted to extract the code I used in the those projects into a stand-alone project/component that could be added to an existing page where ANSI escape sequences need to be interpreted. I’ve toyed with the idea of making it a Web Component or something like that but haven’t just yet.
Before I started with my current employer almost six years ago I moved from a small, privately-owned, web development company with a few developers working in the languages we chose (or at least, could make a good enough argument for) and with tools recommended by each other or the latest and greatest libraries we’d recently discovered. This was great fun and whilst we dabbled in other languages, learning Ruby and Python, tinkering with shell scripts and Haskell, there were things we didn’t touch because we didn’t have to. That was, until another developer that was no longer with us, created a Perl script that needed updating. The fear in our eyes when that script came up, or when it needed to be used again for another client…
Recently one of the remotely maintained servers I worked on regularly has started to exhibit slowdowns in bash. It started only occasionally, perhaps as a result of a high number of users or long-running script, but become a lot worse and resulted in a few seconds delay every time a new prompt was drawn. A few seconds may not sound a lot, but can be incredibly frustrating!
Upon a bit of an investigation I found that the culprit was the call to __git_ps1 in my $PS1 variable. Removing this made the bash prompt speedy again! Hooray! However, having the current branch on my screen immediately is infinitely useful and I can’t really live without it any more, so I carried on digging.
On this particular set of servers git has been replaced with a set of custom script that perform a lot of tasks. This means that calls to simple git commands run a LOT of other commands, logging and getting repo information among other things. I thought about replacing all the references to git in the git-prompt.sh file with the direct path to the binary, but thought it shouldn’t be too tough to just get the information myself using the information in the .git folder.
It’s fairly primitive, it checks the current path for a .git directory, if it doesn’t find one, it goes up one level, until either finding one, or hitting the root. It printfs the result in the same way as the real __git_ps1 and handles the basic states like |MERGING although doesn’t detect a detached HEAD any other similar states, but serve the main purpose, now I can correctly see my current branch and avoid committing the wrong thing to the wrong place!
Feel free to share if this is useful and let me know if there are any minor improvements (short of using the full version!).
I’ve always noticed reallyelaborateexamples of what can be achieved with a highly customised PS1 variable for your bash prompt and recently have spent some time playing with my settings to make my terminal experience better with a few updates. I also felt that I would have benefitted in the past from being able to analyse what my prompt currently does, breaking it down into easier to digest blocks, so I can make more sense of what each part does.
As a result of that curiosity, I’ve created a small page that allows you to paste in an existing PS1 from your terminal which will then be parsed and previewed with some basic dummy details (which can be changed by clicking on the identifier in the preview area).
I’d like to make it into something like EzPrompt with support for 256, or even true colour additions and collate some useful scripts for displaying additional information, but at the moment it’s useful for seeing what each block does at least.
It seems to cover most of the examples I’ve tested in various searches, but the more inline-code is included, the less it can display.
I’ve been working on cleaning up my dotfiles recently and have been playing with my PS1 and the available colours. In doing so I thought it might be interesting to extract image data from an uploaded image and turn the result into a nearest-match ANSI image. This is the result! It supports both 256 colour and true colour terminals and can utilise unicode code points to present a clear image in slightly fewer pixels as well as just using background colours and spaces if preferred.
I’ve recently updated my JS bookmarklet webdav-js and added in some new features including tracking the history state, back button support and proper navigation.
The main thinking behind the bookmarklet is to enable easy manipulation of WebDAV shares without leaving the browser. This bookmarklet allows you to, at the click of the button, browse and upload to WebDAV shares, all within the browser. I’m working on copy/move functionality but currently it supports the basics.
I often have to deal with a machine produced lump of XML which is entirely impossible to read and extract information from, so I’ve made a small page that beautifies XML without sending it server side for processing (ideal for business sensitive data that can’t be transmitted to who-knows-what server) and thought I’d share in case it’s useful to anyone else.
There might be some bugs in there somewhere, but it’s served to meet most requirements of my day-to-day needs.