diff options
Diffstat (limited to 'system')
| -rw-r--r-- | system/.Xresources | 117 | ||||
| -rwxr-xr-x | system/.urxvt/ext/font-size | 434 | ||||
| -rw-r--r-- | system/.xinitrc | 4 | 
3 files changed, 487 insertions, 68 deletions
| diff --git a/system/.Xresources b/system/.Xresources index 801f715..ae9affc 100644 --- a/system/.Xresources +++ b/system/.Xresources @@ -1,11 +1,8 @@ -XTerm*faceName: DejaVu Sans Mono -XTerm*faceSize: 9 -XTerm*selectToClipboard: true -XTerm*dynamicColors: on -UXTerm*faceName: DejaVu Sans Mono -UXTerm*faceSize: 9 -UXTerm*selectToClipboard: true -UXTerm*dynamicColors: on +*faceName: DejaVu Sans Mono +*font: xft:DejaVu Sans Mono:size=9 +*faceSize: 9 +*selectToClipboard: true +*dynamicColors: on  ! Solarized color scheme for the X Window System  ! @@ -46,61 +43,53 @@ UXTerm*dynamicColors: on  ! #define S_base2         #073642  ! #define S_base3         #002b36 - -! To only apply colors to your terminal, for example, prefix -! the color assignment statement with its name. Example: -! -! URxvt*background:            S_base03 - -UXTerm*background:              S_base03 -UXTerm*foreground:              S_base0 -UXTerm*fading:                  40 -UXTerm*fadeColor:               S_base03 -UXTerm*cursorColor:             S_base1 -UXTerm*pointerColorBackground:  S_base01 -UXTerm*pointerColorForeground:  S_base1 - -UXTerm*color0:                  S_base02 -UXTerm*color1:                  S_red -UXTerm*color2:                  S_green -UXTerm*color3:                  S_yellow -UXTerm*color4:                  S_blue -UXTerm*color5:                  S_magenta -UXTerm*color6:                  S_cyan -UXTerm*color7:                  S_base2 -UXTerm*color9:                  S_orange -UXTerm*color8:                  S_base03 -UXTerm*color10:                 S_base01 -UXTerm*color11:                 S_base00 -UXTerm*color12:                 S_base0 -UXTerm*color13:                 S_violet -UXTerm*color14:                 S_base1 -UXTerm*color15:                 S_base3 - -XTerm*background:              S_base03 -XTerm*foreground:              S_base0 -XTerm*fading:                  40 -XTerm*fadeColor:               S_base03 -XTerm*cursorColor:             S_base1 -XTerm*pointerColorBackground:  S_base01 -XTerm*pointerColorForeground:  S_base1 - -XTerm*color0:                  S_base02 -XTerm*color1:                  S_red -XTerm*color2:                  S_green -XTerm*color3:                  S_yellow -XTerm*color4:                  S_blue -XTerm*color5:                  S_magenta -XTerm*color6:                  S_cyan -XTerm*color7:                  S_base2 -XTerm*color9:                  S_orange -XTerm*color8:                  S_base03 -XTerm*color10:                 S_base01 -XTerm*color11:                 S_base00 -XTerm*color12:                 S_base0 -XTerm*color13:                 S_violet -XTerm*color14:                 S_base1 -XTerm*color15:                 S_base3 +URxvt*background:  S_base03 +URxvt*foreground:  S_base0 +URxvt*fading:      10 +URxvt*fadeColor:   S_base03 +URxvt*cursorColor: S_base1 +URxvt*pointerColorBackground: S_base01 +URxvt*pointerColorForeground: S_base1 + +URxvt*color0:  S_base02 +URxvt*color1:  S_red +URxvt*color2:  S_green +URxvt*color3:  S_yellow +URxvt*color4:  S_blue +URxvt*color5:  S_magenta +URxvt*color6:  S_cyan +URxvt*color7:  S_base2 +URxvt*color9:  S_orange +URxvt*color8:  S_base03 +URxvt*color10: S_base01 +URxvt*color11: S_base00 +URxvt*color12: S_base0 +URxvt*color13: S_violet +URxvt*color14: S_base1 +URxvt*color15: S_base3 + +URxvt.urgentOnBell: 1 +URxvt.visualBell: 1 +URxvt.loginShell: 1 +URxvt.scrollBar: 0 +URxvt.saveLines: 10000 + +URxvt.perl-ext-common: default,font-size,matcher,selection-to-clipboard + +URxvt.clipboard.autocopy: 1 + +URxvt.url-launcher: /usr/bin/xdg-open +URxvt.matcher.button: 1 + +URxvt.keysym.Control-Up:    \033[1;5A +URxvt.keysym.Control-Down:  \033[1;5B +URxvt.keysym.Control-Right: \033[1;5C +URxvt.keysym.Control-Left:  \033[1;5D +URxvt.keysym.Home:          \033[7~ +URxvt.keysym.End:           \033[8~ + +URxvt.keysym.Control-equal: perl:font-size:increase +URxvt.keysym.Control-minus: perl:font-size:decrease +URxvt.keysym.Control-0:     perl:font-size:reset  Xcursor.size: 16 - diff --git a/system/.urxvt/ext/font-size b/system/.urxvt/ext/font-size new file mode 100755 index 0000000..aba0cf4 --- /dev/null +++ b/system/.urxvt/ext/font-size @@ -0,0 +1,434 @@ +#!/usr/bin/env perl +# +# On-the-fly adjusting of the font size in urxvt +# +# Copyright (c) 2008 David O'Neill +#               2012 Noah K. Tilton <noahktilton@gmail.com> +#               2012-2013 Jan Larres <jan@majutsushi.net> +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# URL: https://github.com/majutsushi/urxvt-font-size +# +# Based on: +# https://github.com/dave0/urxvt-font-size +# https://github.com/noah/urxvt-font +# + +#:META:X_RESOURCE:%.step:interger:font size increase/decrease step + +=head1 NAME + +font-size - interactive font size setter + +=head1 USAGE + +Put the font-size script into $HOME/.urxvt/ext/ and add it to the list +of enabled perl-extensions in ~/.Xresources: + +  URxvt.perl-ext-common: ...,font-size + +Add some keybindings: + +  URxvt.keysym.C-Up:     font-size:increase +  URxvt.keysym.C-Down:   font-size:decrease +  URxvt.keysym.C-S-Up:   font-size:incglobal +  URxvt.keysym.C-S-Down: font-size:decglobal + +Note that for urxvt versions older than 9.21 the resources have to look like this: + +  URxvt.keysym.C-Up:     perl:font-size:increase +  URxvt.keysym.C-Down:   perl:font-size:decrease +  URxvt.keysym.C-S-Up:   perl:font-size:incglobal +  URxvt.keysym.C-S-Down: perl:font-size:decglobal + +Supported functions: + +=over 2 + +=item * increase/decrease: + +      increase or decrease the font size of the current terminal. + +=item * incglobal/decglobal: + +      same as above and also adjust the X server values so all newly +      started terminals will use the same fontsize. + +=item * incsave/decsave: + +      same as incglobal/decglobal and also modify the ~/.Xresources +      file so the changed font sizes will persist over a restart of +      the X server or a reboot. + +=back + +You can also change the step size that the script will use to increase +the font size: + +  URxvt.font-size.step: 4 + +The default step size is 1. This means that with this setting a +size change sequence would be for example 8->12->16->20 instead of +8->9->10->11->12 etc. Please note that many X11 fonts are only +available in specific sizes, though, and odd sizes are often not +available, resulting in an effective step size of 2 instead of 1 +in that case. +=cut + +use strict; +use warnings; + +my %escapecodes = ( +    "font"           => 710, +    "boldFont"       => 711, +    "italicFont"     => 712, +    "boldItalicFont" => 713 +); + +sub on_start +{ +    my ($self) = @_; + +    $self->{step} = $self->x_resource("%.step") || 1; + +    foreach my $type (qw(font boldFont italicFont boldItalicFont)) { +        $self->{$type} = $self->x_resource($type) || "undef"; +    } +} + +# Needed for backwards compatibility with < 9.21 +sub on_user_command +{ +    my ($self, $cmd) = @_; + +    my $step = $self->{step}; + +    if ($cmd eq "font-size:increase") { +        fonts_change_size($self,  $step, 0); +    } elsif ($cmd eq "font-size:decrease") { +        fonts_change_size($self, -$step, 0); +    } elsif ($cmd eq "font-size:incglobal") { +        fonts_change_size($self,  $step, 1); +    } elsif ($cmd eq "font-size:decglobal") { +        fonts_change_size($self, -$step, 1); +    } elsif ($cmd eq "font-size:incsave") { +        fonts_change_size($self,  $step, 2); +    } elsif ($cmd eq "font-size:decsave") { +        fonts_change_size($self, -$step, 2); +    } elsif ($cmd eq "font-size:reset") { +        fonts_reset($self); +    } +} + +sub on_action +{ +    my ($self, $action) = @_; + +    my $step = $self->{step}; + +    if ($action eq "increase") { +        fonts_change_size($self,  $step, 0); +    } elsif ($action eq "decrease") { +        fonts_change_size($self, -$step, 0); +    } elsif ($action eq "incglobal") { +        fonts_change_size($self,  $step, 1); +    } elsif ($action eq "decglobal") { +        fonts_change_size($self, -$step, 1); +    } elsif ($action eq "incsave") { +        fonts_change_size($self,  $step, 2); +    } elsif ($action eq "decsave") { +        fonts_change_size($self, -$step, 2); +    } elsif ($action eq "reset") { +        fonts_reset($self); +    } +} + +sub fonts_change_size +{ +    my ($term, $change, $save) = @_; + +    my @newfonts = (); + +    my $curres = $term->resource('font'); +    if (!$curres) { +        $term->scr_add_lines("\r\nWarning: No font configured, trying a default.\r\nPlease set a font with the 'URxvt.font' resource."); +        $curres = "fixed"; +    } +    my @curfonts = split(/\s*,\s*/, $curres); + +    my $basefont = shift(@curfonts); +    my ($newbasefont, $newbasesize) = handle_font($term, $basefont, $change, 0); +    push @newfonts, $newbasefont; + +    # Only adjust other fonts if base font changed +    if ($newbasefont ne $basefont) { +        foreach my $font (@curfonts) { +            my ($newfont, $newsize) = handle_font($term, $font, $change, $newbasesize); +            push @newfonts, $newfont; +        } +        my $newres = join(",", @newfonts); +        font_apply_new($term, $newres, "font", $save); + +        handle_type($term, "boldFont",       $change, $newbasesize, $save); +        handle_type($term, "italicFont",     $change, $newbasesize, $save); +        handle_type($term, "boldItalicFont", $change, $newbasesize, $save); +    } + +    if ($save > 1) { +        # write the new values back to the file +        my $xresources = readlink $ENV{"HOME"} . "/.Xresources"; +        system("xrdb -edit " . $xresources); +    } +} + +sub fonts_reset +{ +    my ($term) = @_; + +    foreach my $type (qw(font boldFont italicFont boldItalicFont)) { +        my $initial = $term->{$type}; +        if ($initial ne "undef") { +            font_apply_new($term, $initial, $type, 0); +        } +    } +} + +sub handle_type +{ +    my ($term, $type, $change, $basesize, $save) = @_; + +    my $curres = $term->resource($type); +    if (!$curres) { +        return; +    } +    my @curfonts = split(/\s*,\s*/, $curres); +    my @newfonts = (); + +    foreach my $font (@curfonts) { +        my ($newfont, $newsize) = handle_font($term, $font, $change, $basesize); +        push @newfonts, $newfont; +    } + +    my $newres = join(",", @newfonts); +    font_apply_new($term, $newres, $type, $save); +} + +sub handle_font +{ +    my ($term, $font, $change, $basesize) = @_; + +    my $newfont; +    my $newsize; +    my $prefix = 0; + +    if ($font =~ /^\s*x:/) { +        $font =~ s/^\s*x://; +        $prefix = 1; +    } +    if ($font =~ /^\s*(\[.*\])?xft:/) { +        ($newfont, $newsize) = font_change_size_xft($term, $font, $change, $basesize); +    } elsif ($font =~ /^\s*-/) { +        ($newfont, $newsize) = font_change_size_xlfd($term, $font, $change, $basesize); +    } else { +        # check whether the font is a valid alias and if yes resolve it to the +        # actual font +        my $lsfinfo = `xlsfonts -l $font 2>/dev/null`; + +        if ($lsfinfo eq "") { +            # not a valid alias, ring the bell if it is the base font and just +            # return the current font +            if ($basesize == 0) { +                $term->scr_bell; +            } +            return ($font, $basesize); +        } + +        my $fontinfo = (split(/\n/, $lsfinfo))[-1]; +        my ($fontfull) = ($fontinfo =~ /\s+([-a-z0-9]+$)/); +        ($newfont, $newsize) = font_change_size_xlfd($term, $fontfull, $change, $basesize); +    } + +    # $term->scr_add_lines("\r\nNew font is $newfont\n"); +    if ($prefix) { +        $newfont = "x:$newfont"; +    } +    return ($newfont, $newsize); +} + +sub font_change_size_xft +{ +    my ($term, $fontstring, $change, $basesize) = @_; + +    my @pieces   = split(/:/, $fontstring); +    my @resized  = (); +    my $size     = 0; +    my $new_size = 0; + +    foreach my $piece (@pieces) { +        if ($piece =~ /^(?:(?:pixel)?size=|[^=-]+-)(\d+(\.\d*)?)$/) { +            $size = $1; + +            if ($basesize != 0) { +                $new_size = $basesize; +            } else { +                $new_size = $size + $change +            } + +            $piece =~ s/(=|-)$size/$1$new_size/; +        } +        push @resized, $piece; +    } + +    my $resized_str = join(":", @resized); + +    # don't make fonts too small +    if ($new_size >= 6) { +        return ($resized_str, $new_size); +    } else { +        if ($basesize == 0) { +            $term->scr_bell; +        } +        return ($fontstring, $size); +    } +} + +sub font_change_size_xlfd +{ +    my ($term, $fontstring, $change, $basesize) = @_; + +    #-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-1 + +    my @fields = qw(foundry family weight slant setwidth style pixelSize pointSize Xresolution Yresolution spacing averageWidth registry encoding); + +    my %font; +    $fontstring =~ s/^-//;  # Strip leading - before split +    @font{@fields} = split(/-/, $fontstring); + +    if ($font{pixelSize} eq '*') { +        $term->scr_add_lines("\r\nWarning: Font size undefined, assuming 12.\r\nPlease set the 'URxvt.font' resource to a font with a concrete size."); +        $font{pixelSize} = '12' +    } +    if ($font{registry} eq '*') { +        $font{registry} ='iso8859'; +    } + +    # Blank out the size for the pattern +    my %pattern = %font; +    $pattern{foundry} = '*'; +    $pattern{setwidth} = '*'; +    $pattern{pixelSize} = '*'; +    $pattern{pointSize} = '*'; +    # if ($basesize != 0) { +    #     $pattern{Xresolution} = '*'; +    #     $pattern{Yresolution} = '*'; +    # } +    $pattern{averageWidth} = '*'; +    # make sure there are no empty fields +    foreach my $field (@fields) { +        $pattern{$field} = '*' unless defined($pattern{$field}); +    } +    my $new_fontstring = '-' . join('-', @pattern{@fields}); + +    my @possible; +    # $term->scr_add_lines("\r\nPattern is $new_fontstring\n"); +    open(FOO, "xlsfonts -fn '$new_fontstring' | sort -u |") or die $!; +    while (<FOO>) { +        chomp; +        s/^-//;  # Strip leading '-' before split +        my @fontdata = split(/-/, $_); + +        push @possible, [$fontdata[6], "-$_"]; +        # $term->scr_add_lines("\r\npossibly $fontdata[6] $_\n"); +    } +    close(FOO); + +    if (!@possible) { +        die "No possible fonts!"; +    } + +    if ($basesize != 0) { +        # sort by font size, descending +        @possible = sort {$b->[0] <=> $a->[0]} @possible; + +        # font is not the base font, so find the largest font that is at most +        # as large as the base font. If the largest possible font is smaller +        # than the base font bail and hope that a 0-size font can be found at +        # the end of the function +        if ($possible[0]->[0] > $basesize) { +            foreach my $candidate (@possible) { +                if ($candidate->[0] <= $basesize) { +                    return ($candidate->[1], $candidate->[0]); +                } +            } +        } +    } elsif ($change > 0) { +        # sort by font size, ascending +        @possible = sort {$a->[0] <=> $b->[0]} @possible; + +        foreach my $candidate (@possible) { +            if ($candidate->[0] >= $font{pixelSize} + $change) { +                return ($candidate->[1], $candidate->[0]); +            } +        } +    } elsif ($change < 0) { +        # sort by font size, descending +        @possible = sort {$b->[0] <=> $a->[0]} @possible; + +        foreach my $candidate (@possible) { +            if ($candidate->[0] <= $font{pixelSize} + $change && $candidate->[0] != 0) { +                return ($candidate->[1], $candidate->[0]); +            } +        } +    } + +    # no fitting font available, check whether a 0-size font can be used to +    # fit the size of the base font +    @possible = sort {$a->[0] <=> $b->[0]} @possible; +    if ($basesize != 0 && $possible[0]->[0] == 0) { +        return ($possible[0]->[1], $basesize); +    } else { +        # if there is absolutely no smaller/larger font that can be used +        # return the current one, and beep if this is the base font +        if ($basesize == 0) { +            $term->scr_bell; +        } +        return ("-$fontstring", $font{pixelSize}); +    } +} + +sub font_apply_new +{ +    my ($term, $newfont, $type, $save) = @_; + +    # $term->scr_add_lines("\r\nnew font is $newfont\n"); + +    $term->cmd_parse("\033]" . $escapecodes{$type} . ";" . $newfont . "\033\\"); + +    # load the xrdb db +    # system("xrdb -load " . X_RESOURCES); + +    if ($save > 0) { +        # merge the new values +        open(XRDB_MERGE, "| xrdb -merge") || die "can't fork: $!"; +        local $SIG{PIPE} = sub { die "xrdb pipe broken" }; +        print XRDB_MERGE "URxvt." . $type . ": " . $newfont; +        close(XRDB_MERGE) || die "bad xrdb: $! $?"; +    } +} diff --git a/system/.xinitrc b/system/.xinitrc deleted file mode 100644 index e0eddfc..0000000 --- a/system/.xinitrc +++ /dev/null @@ -1,4 +0,0 @@ -setxkbmap -layout us -variant intl - -exec xmonad - | 
