Linux systems have three kinds of text selection – primary, secondary and clipboard. The clipboard is the most famous one, Ctrl+c, Ctrl+v, you know the stuff. At work I need to note down all the important stuff I worked on recently, to have some kind of work report. So I end up with document with many bullets containing project names, bugzilla ticket summaries and URLs, etc. What I really hate is transferring rich text properties in the clipboard together with the content. That means if I select a title of some bug, it is copied (into my web application I use for creating reports) as a big thick line with custom font. One has to reset all the formatting after every such insertion. Awful!
So let’s do something about it. Wouldn’t it be nice to convert the contents of the system clipboard to plaintext only? Fortunately a little of bash scripting can help:
#!/bin/bash # print usage if [ "$1" = '--help' -o "$1" = '-h' -o $# -ne 0 ]; then echo "Usage: $0" echo "Takes text in system clipboard and transforms it into plaintext." fi # get the plaintext TEXT=`xsel -b` # print the text, it may come handy sometimes echo "$TEXT" # replace the original rich-text with plaintext echo -n "$TEXT" | xsel -b -i
Well, and now just store this script in your PATH and call it whenever needed. I used Gnome’s Keyboard shortcuts to define a shortcut to call this script anytime I need it. Works perfect 🙂
I also needed to print same basic information about a particular bug in a specific format, so I can easily put it into my report. Manually copying all the information is not fun. Let’s create another script (python-bugzilla must be installed):
#!/bin/bash # print usage if [ "$1" = '--help' -o "$1" = '-h' -o $# -ne 1 ]; then echo "Usage: $0 bug_id|bug_url" fi # parse bug id ID="$1" if [[ "$ID" == http* ]]; then ID=`echo $ID | sed -r 's/.*id=([0-9]+).*/\1/'` fi # query bugzilla INFO=`bugzilla query --bug_id "$ID" --outputformat='%{url} %{component} %{summary}'` # parse info into parts URL=`cut -d ' ' -f 1 <<< "$INFO"` COMPONENT=`cut -d ' ' -f 2 <<< "$INFO"` SUMMARY=`cut -d ' ' -f 3- <<< "$INFO"` # output text in a suitable format OUTPUT="$URL \"${COMPONENT}: $SUMMARY\"" # print the output echo "$OUTPUT" # copy the output to X clipboard echo "$OUTPUT" | xsel -b -i # play a notification sound paplay /usr/share/sounds/freedesktop/stereo/message.oga
So now I just run “bug 595448” command and it prints all the necessary information out for me and puts it also into the clipboard. Hail to the improved work efficiency! 🙂
I hope this helps somebody in these kinds of repetitive tasks – creating work reports. Improvements welcome.