Repository: simmel/urxvt-resize-font
Branch: master
Commit: b5935806f159
Files: 2
Total size: 6.4 KB
Directory structure:
gitextract_t65_vovj/
├── README.md
└── resize-font
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
## Installation
1. Copy `resize-font` to where URxvt looks for Perl extensions, e.g:
`$HOME/.urxvt/ext/`. For the exact path, see the urxvt(1) manual page on
perl-lib.
2. In your `~/.Xresources` file, add `resize-font` to the
`urxvt.perl-ext-common` setting so URxvt loads the extension, e.g:
urxvt.perl-ext-common: default,tabbed,matcher,resize-font,-tabbed
## Configuration
All configuration of `resize-font` is done in `~/.Xresources`.
_Note that this extension requires you to set your font size
through the `urxvt.font` property._
### Fonts
Default font sizes can be specified in pixels, using the `pixelsize` attribute,
e.g.:
urxvt.font: xft:Inconsolata:pixelsize=12
Or they can be given in points, using the `size` attribute, e.g.:
urxvt.font: xft:Inconsolata:size=12
Fixed fonts are also supported, for example:
urxvt.font: 7x14
And, finally, XLFD/X logical font description is supported as well, e.g.:
urxvt.font: -*-inconsolata-medium-*-normal-*-14-*-*-*-*-*-iso8859-*
### Keybindings
The default keybindings look like this:
URxvt.keysym.C-minus: resize-font:smaller
URxvt.keysym.C-plus: resize-font:bigger
URxvt.keysym.C-equal: resize-font:reset
URxvt.keysym.C-question: resize-font:show
Keybindings can be modified using the above syntax. For more information on how
to specify keys, see the description of the `keysym` resource in the urxvt(1)
manual page.
### Resize interval
You can also configure the number of steps to take when changing the font size:
URxvt.resize-font.step: 2
And even fractions like 0.2 are supported.
================================================
FILE: resize-font
================================================
# vim:ft=perl:fenc=utf-8:tw=80
# Copyright (c) 2009-, Simon Lundström <simmel@soy.se>
# Copyright (c) 2014 Maarten de Vries <maarten@de-vri.es>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
my @fonts = (
{'name' => 'font', 'code' => 710},
{'name' => 'boldFont', 'code' => 711},
{'name' => 'italicFont', 'code' => 712},
{'name' => 'boldItalicFont', 'code' => 713},
);
my @fixed = qw(4x6 5x7 5x8 6x9 6x10 6x12 6x13 7x13 7x14 8x13 8x16 9x15 9x18
10x20 12x24);
my $step;
sub on_start {
my ($self) = @_;
foreach (@fonts) {
$_->{'default'} = $self->resource($_->{'name'});
}
$step = $self->x_resource("%.step") || 2;
}
sub on_init {
my ($self) = @_;
my $commands = {
"smaller" => "C-minus",
"bigger" => "C-plus",
"reset" => "C-equal",
"show" => "C-question",
};
bind_hotkeys($self, $commands);
()
}
sub bind_hotkeys {
my ($self, $commands) = @_;
for (keys %$commands) {
my $hotkey = $$commands{$_};
my $hotkey_bound = $self->{'term'}->x_resource("keysym.$hotkey");
if (!defined($hotkey_bound) ) {
# Support old-style key bindings
if ($self->x_resource("%.$_")) {
$hotkey = $self->x_resource("%.$_");
}
# FIXME If we're bound to a keysym, don't bind the default.
$self->bind_action($hotkey, "%:$_") or
warn "unable to register '$hotkey' as hotkey for $_";
}
else {
if ($hotkey_bound !~ /^resize-font:/) {
warn "Hotkey $$commands{$_} already bound to $hotkey_bound, not ".
"binding to resize-font:$_ by default.";
}
}
}
}
sub on_action {
my ($self, $string) = @_;
if ($string eq "bigger") {
foreach (@fonts) {
next if not defined($_->{'default'});
update_font_size($self, $_, +$step);
}
}
elsif ($string eq "smaller") {
foreach (@fonts) {
next if not defined($_->{'default'});
update_font_size($self, $_, -$step);
}
}
elsif ($string eq "reset") {
foreach (@fonts) {
next if not defined($_->{'default'});
set_font($self, $_, $_->{'default'});
}
}
elsif ($string eq "show") {
my $term = $self->{'term'};
$term->{'resize-font'}{'overlay'} = {
ov => $term->overlay_simple(0, -1, format_font_info($self)),
to => urxvt::timer
->new
->start(urxvt::NOW + 1)
->cb(sub {
delete $term->{'resize-font'}{'overlay'};
}),
};
}
()
}
sub get_font {
my ($self, $name) = @_;
return $self->resource($name);
}
sub set_font {
my ($self, $font, $new) = @_;
$self->cmd_parse(sprintf("\33]%d;%s\007", $font->{'code'}, $new));
}
sub round {
return sprintf("%.0f", @_);
}
sub atleast {
my ($min, $val) = @_;
if (0 < abs $val && abs $val < $min){
return $val / abs($val)
}
return $val;
}
sub update_font_size {
my ($self, $font, $delta) = @_;
my $regex = qr"(?<=size=)(\d+(?:\.\d+)?)";
my $current = get_font($self, $font->{'name'});
my ($index) = grep { $fixed[$_] eq $current } 0..$#fixed;
if ($index or $index eq 0) {
my $inc = $delta / abs($delta);
$index += $inc;
if ($index < 0) { $index = 0; }
if ($index > $#fixed) { $index = $#fixed; }
$current = $fixed[$index];
}
elsif ($current =~ /^-/) {
my @font = split(/-/, $current);
# https://en.wikipedia.org/wiki/X_logical_font_description
#Pixel size
if ($font[7] gt 0) {
$delta = atleast(1, $delta);
my $newsize = round($font[7]+$delta);
$font[7] = $newsize if ($newsize > 0)
}
#Point size
elsif ($font[8] gt 0) {
$delta = atleast(1, $delta*10);
my $newsize = round($font[8]+$delta);
$font[8] = $newsize if ($newsize > 0)
}
$current = join('-', @font);
}
else {
my $newsize = $1+$delta if ($current =~ /$regex/);
$current =~ s/$regex/$newsize/ge if ($newsize > 0);
}
set_font($self, $font, $current);
}
sub format_font_info {
my ($self) = @_;
my $width = 0;
foreach (@fonts) {
my $length = length($_->{'name'});
$width = $length > $width ? $length : $width;
}
++$width;
my $info = '';
foreach (@fonts) {
$info .= sprintf("%-${width}s %s\n", $_->{'name'} . ':',
get_font($self, $_->{'name'}));
}
return $info;
}
gitextract_t65_vovj/ ├── README.md └── resize-font
Condensed preview — 2 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7K chars).
[
{
"path": "README.md",
"chars": 1631,
"preview": "## Installation\n\n1. Copy `resize-font` to where URxvt looks for Perl extensions, e.g:\n `$HOME/.urxvt/ext/`. For the ex"
},
{
"path": "resize-font",
"chars": 4956,
"preview": "# vim:ft=perl:fenc=utf-8:tw=80\n# Copyright (c) 2009-, Simon Lundström <simmel@soy.se>\n# Copyright (c) 2014 Maarten de Vr"
}
]
About this extraction
This page contains the full source code of the simmel/urxvt-resize-font GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2 files (6.4 KB), approximately 2.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.