Migrating from xchat: a couple of hexchat fixes
I decided recently to clean up my Debian "Sid" system, using
apt-get autoclean
,
apt-get purge `deborphan`
,
aptitude purge ~c
, and
aptitude purge ~o
.
It gained me almost two gigabytes of space.
On the other hand, it deleted several packages I had long depended on.
One of them was xchat.
I installed hexchat, the fully open replacement for xchat. Mostly, it's the same program ... but a few things didn't work right.
Script fixes
The two xchat scripts I use weren't loading. Turns out hexchat wants
to find its scripts in .config/hexchat/addons
, so I moved
them there. But xchat-inputcount.pl still didn't work;
it was looking for a widget called "xchat-inputbox".
That was fairly easy to patch: I added a line to print the name of
each widget it saw, determined the name had changed in the obvious way,
and changed
if( $child->get( "name" ) eq 'xchat-inputbox' ) {to
if( $child->get( "name" ) eq 'xchat-inputbox' || $child->get( "name" ) eq 'hexchat-inputbox' ) {That solved the problem.
Notifying me if someone calls me
The next problem: when someone mentioned my nick in a channel, the channel tab highlighted; but when I switched to the channel, there was no highlight on the actual line of conversation so I could find out who was talking to me. (It was turning the nick of the person addressing me to a specific color, but since every nick is a different color anyway, that doesn't make the line stand out when you're scanning for it.)
The highlighting for message lines is set in a dialog you can configure:
Settings→Text events...
Scroll down to Channel Msg Hilight and click on that
elaborate code on the right:
%C2<%C8%B$1%B%C2>%O$t$2%O
That's the code that controls how the line will be displayed.
Some of these codes are described in
Hexchat:
Appearance/Theming, and most of the rest are described in the
dialog itself. $t
is an exception: I'm not sure what it
means (maybe I just missed it in the list).
I wanted hexchat to show the nick of whoever called me name in inverse video.
(Xchat always made it bold, but sometimes that's subtle; inverse video
would be a lot easier to find when scrolling through a busy channel.)
%R
is reverse video, %B
is bold, and
%O
removes any decorations and sets the text back to
normal text, so I set the code to:
%R%B<$1>%O $t$2
That seemed to work, though after I exited hexchat and started it up
the next morning it had magically changed to
%R%B<$1>%O$t$2%O
.
Hacking hexchat source to remove hardwired keybindings
But the big problem was the hardwired keybindings. In particular, Ctrl-F -- the longstanding key sequence that moves forward one character -- in hexchat, it brings up a search window. (Xchat had this problem for a little while, many years ago, but they fixed it, or at least made it sensitive to whether the GTK key theme is "Emacs".)
Ctrl-F doesn't appear in the list under Settings→Keyboard shortcuts, so I couldn't fix it that way. I guess they should rename that dialog to Some keyboard shortcuts. Turns out Ctrl-F is compiled in. So the only solution is to rebuild from source.
I decided to use the Debian package source:
apt-get source hexchat
The search for the Ctrl-F binding turned out to be harder than it had been back in the xchat days. I was confident the binding would be in one of the files in src/fe-gtk, but grepping for key, find and search all gave way too many hits. Combining them was the key:
egrep -i 'find|search' *.c | grep -i key
That gave a bunch of spurious hits in fkeys.c -- I had already examined that file and determined that it had to do with the Settings→Keyboard shortcuts dialog, not the compiled-in key bindings. But it also gave some lines from menu.c including the one I needed:
{N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1, GDK_KEY_f},
Inspection of nearby lines showed that the last GDK_KEY_ argument is optional -- there were quite a few lines that didn't have a key binding specified. So all I needed to do was remove that GDK_KEY_f. Here's my patch:
--- src/fe-gtk/menu.c.orig 2016-02-23 12:13:55.910549105 -0700 +++ src/fe-gtk/menu.c 2016-02-23 12:07:21.670540110 -0700 @@ -1829,7 +1829,7 @@ {N_("Save Text..."), menu_savebuffer, GTK_STOCK_SAVE, M_MENUSTOCK, 0, 0, 1}, #define SEARCH_OFFSET (70) {N_("Search"), 0, GTK_STOCK_JUSTIFY_LEFT, M_MENUSUB, 0, 0, 1}, - {N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1, GDK_KEY_f}, + {N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1}, {N_("Search Next" ), menu_search_next, GTK_STOCK_FIND, M_MENUS TOCK, 0, 0, 1, GDK_KEY_g}, {N_("Search Previous" ), menu_search_prev, GTK_STOCK_FIND, M_M ENUSTOCK, 0, 0, 1, GDK_KEY_G}, {0, 0, 0, M_END, 0, 0, 0},
After making that change, I rebuilt the hexchat package and installed it:
sudo apt-get build-dep hexchat sudo apt-get install devscripts cd hexchat-2.10.2/ debuild -b -uc -us sudo dpkg -i ../hexchat_2.10.2-1_i386.deb
Update: I later wrote about how to automate this here: Debian: Holding packages you build from source, and rebuilding them easily.
And the hardwired Ctrl-F key binding was gone, and the normal forward-character binding from my GTK key theme took over.
I still have a couple of minor things I'd like to fix, like the too-large font hexchat uses for its channel tabs, but those are minor. At least I'm back to where I was before foolishly deciding to clean up my system.
[ 19:00 Feb 24, 2016 More linux | permalink to this entry | ]