From 4b021b869204bbe0f663b748a7f66d94ef61ec9a Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Sat, 23 Jan 2016 15:49:31 +0100 Subject: [PATCH] calendar fixed for arch, urxvt-font-size added --- cal/.config/vdirsyncer/config | 3 +- email/.mutt/muttrc | 2 +- email/.mutt/offlineimaprc | 2 +- x/.Xresources | 1 - x/.config/i3/config | 7 +- x/.config/i3status/config | 3 +- x/.local/bin/network | 4 +- x/.urxvt/ext/font-size | 434 ++++++++++++++++++++++++++++++++++ 8 files changed, 445 insertions(+), 11 deletions(-) create mode 100755 x/.urxvt/ext/font-size diff --git a/cal/.config/vdirsyncer/config b/cal/.config/vdirsyncer/config index c610395..91265d8 100644 --- a/cal/.config/vdirsyncer/config +++ b/cal/.config/vdirsyncer/config @@ -10,7 +10,6 @@ [general] # A folder where vdirsyncer can store some metadata about each pair. status_path = ~/.vdirsyncer/status/ -password_command = pass show caldav_ygdrassil/mart # CARDDAV [pair contacts] @@ -29,6 +28,7 @@ type = carddav url = https://ygdrassil.martlubbers.net/baikal/card.php/addressbooks/mart/default auth = digest username = mart +password.fetch = ["command", "pass", "show", "caldav_ygdrassil/mart"] # CALDAV [pair calendar] @@ -46,3 +46,4 @@ type = caldav url = https://ygdrassil.martlubbers.net/baikal/cal.php/calendars/mart/default auth = digest username = mart +password.fetch = ["command", "pass", "show", "caldav_ygdrassil/mart"] diff --git a/email/.mutt/muttrc b/email/.mutt/muttrc index e7463cb..c93fb35 100644 --- a/email/.mutt/muttrc +++ b/email/.mutt/muttrc @@ -56,7 +56,7 @@ set tilde set quote_regexp="^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" # Address book -set query_command= "khard mutt --search '%s'" +set query_command= "khard email --search '%s'" bind editor complete-query bind editor ^T complete macro index,pager A \ diff --git a/email/.mutt/offlineimaprc b/email/.mutt/offlineimaprc index 9cdd068..107a1f4 100644 --- a/email/.mutt/offlineimaprc +++ b/email/.mutt/offlineimaprc @@ -16,7 +16,7 @@ localfolders = ~/.mutt/mail [Repository Remote] type = IMAP -#folderfilter = lambda x: folderfilter(x) +folderfilter = lambda x: folderfilter(x) remotepasseval = mailpasswd() remotehost = mail.martlubbers.net remoteuser = mart@martlubbers.net diff --git a/x/.Xresources b/x/.Xresources index 46a807d..545ba0e 100644 --- a/x/.Xresources +++ b/x/.Xresources @@ -40,7 +40,6 @@ URxvt.externalBorder: 1 URxvt.mouseWheelScrollPage: 0 URxvt.pastableTabs: 1 URxvt.cursorBlink: 0 -URxvt.perl-lib: /home/mart/.urxvt/ext URxvt.perl-ext-common: font-size URxvt.keysym.C-Up: perl:font-size:increase URxvt.keysym.C-Down: perl:font-size:decrease diff --git a/x/.config/i3/config b/x/.config/i3/config index 79ea723..06ef691 100644 --- a/x/.config/i3/config +++ b/x/.config/i3/config @@ -27,6 +27,7 @@ bindsym Print exec ~/.local/bin/scr bindsym $mod+l exec xautolock -locknow # put a password in the clipboard bindsym $mod+y exec passmenu +bindsym $mod+b exec ~/.local/bin/network # font for window titles. font pango:$font 8 @@ -53,9 +54,9 @@ bindsym $mod+s focus right # alternatively, you can use the cursor keys: bindsym XF86MonBrightnessUp exec xbacklight -inc 5 bindsym XF86MonBrightnessDown exec xbacklight -dec 5 -bindsym XF86AudioMute exec xbacklight -dec 5 -bindsym XF86AudioLowerVolume exec xbacklight -dec 5 -bindsym XF86AudioRaiseVolume exec xbacklight -dec 5 +bindsym XF86AudioMute exec pactl set-sink-mute 1 toggle +bindsym XF86AudioLowerVolume exec pactl set-sink-volume 1 -5% +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 1 +5% # move focused window bindsym $mod+Shift+h move left diff --git a/x/.config/i3status/config b/x/.config/i3status/config index 9151f33..38c201c 100644 --- a/x/.config/i3status/config +++ b/x/.config/i3status/config @@ -11,9 +11,8 @@ order += "wireless wlp1s0" order += "battery 0" order += "tztime local" - battery 0 { - format = "%status %percentage %remaining %emptytime" + format = "%status %percentage %remaining" format_down = "No battery" status_chr = "⚇ CHR" status_bat = "⚡ BAT" diff --git a/x/.local/bin/network b/x/.local/bin/network index 92131b5..7debf89 100755 --- a/x/.local/bin/network +++ b/x/.local/bin/network @@ -1,3 +1,3 @@ #!/bin/bash -find /etc/netctl -maxdepth 1 -type f | dmenu | \ - xargs -I{} bash -c "sudo -A netctl switch-to \$(basename {})" +find /etc/netctl -maxdepth 1 -type f | xargs basename | dmenu | \ + xargs -I{} sudo -A netctl switch-to {} diff --git a/x/.urxvt/ext/font-size b/x/.urxvt/ext/font-size new file mode 100755 index 0000000..aba0cf4 --- /dev/null +++ b/x/.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 +# 2012-2013 Jan Larres +# +# 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 () { + 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: $! $?"; + } +} -- 2.20.1