add more files
authorJoerg Jaspert <joerg@debian.org>
Sun, 3 Mar 2013 15:38:18 +0000 (16:38 +0100)
committerJoerg Jaspert <joerg@debian.org>
Sun, 3 Mar 2013 15:38:18 +0000 (16:38 +0100)
.forward [new file with mode: 0644]
.psqlrc [new file with mode: 0644]
.tzlist [new file with mode: 0644]
.xbindkeysrc [new file with mode: 0644]
bin/emerge-for-git [new file with mode: 0755]
bin/tzwatch [new file with mode: 0755]
perl/mark-yank-urls [new file with mode: 0755]

diff --git a/.forward b/.forward
new file mode 100644 (file)
index 0000000..d8b60bc
--- /dev/null
+++ b/.forward
@@ -0,0 +1 @@
+joerg@ganneff.de
diff --git a/.psqlrc b/.psqlrc
new file mode 100644 (file)
index 0000000..2d35979
--- /dev/null
+++ b/.psqlrc
@@ -0,0 +1,3 @@
+\pset null '(null)'
+\timing
+\set HISTSIZE 5000
diff --git a/.tzlist b/.tzlist
new file mode 100644 (file)
index 0000000..d86e515
--- /dev/null
+++ b/.tzlist
@@ -0,0 +1,13 @@
+Europe/Berlin Ganneff
+America/Los_Angeles vorlon
+America/Los_Angeles dondelelcaro
+Australia/Brisbane aj
+Europe/London elmo,mhy,sgran
+America/New_York mako
+America/Vancouver neuro
+America/Argentina/Buenos_Aires marga
+Canada/Eastern ElectricElf
+America/Argentina/Buenos_Aires tincho
+America/New_York schultmc
+America/Los_Angeles taggart,dannf
+Asia/Taipei Pei-Hua
diff --git a/.xbindkeysrc b/.xbindkeysrc
new file mode 100644 (file)
index 0000000..0abada5
--- /dev/null
@@ -0,0 +1,112 @@
+###########################
+# xbindkeys configuration #
+###########################
+#
+# Version: 0.1.3
+#
+# If you edit this, do not forget to uncomment any lines that you change.
+# The pound(#) symbol may be used anywhere for comments.
+#
+# A list of keys is in /usr/include/X11/keysym.h and in
+# /usr/include/X11/keysymdef.h 
+# The XK_ is not needed. 
+#
+# List of modifier (on my keyboard): 
+#   Control, Shift, Mod1 (Alt), Mod2 (NumLock), 
+#   Mod3 (CapsLock), Mod4, Mod5 (Scroll). 
+#
+# Another way to specifie a key is to use 'xev' and set the 
+# keycode with c:nnn or the modifier with m:nnn where nnn is 
+# the keycode or the state returned by xev 
+#
+# This file is created by xbindkey_config 
+# The structure is : 
+# # Remark 
+# "command" 
+# m:xxx + c:xxx 
+# Shift+... 
+
+
+
+
+#keystate_numlock = enable
+#keystate_scrolllock = enable
+#keystate_capslock = enable
+
+
+
+#Emacs
+"emacs"
+    m:0x5 + c:26
+    Control+Shift + e 
+
+#xbindkeys-config
+"xbindkeys-config"
+    m:0x5 + c:54
+    Control+Shift + c 
+
+#Screenshot
+"import -window root root.jpg"
+   Control+Alt + s
+
+#Firefox
+"iceweasel"
+    m:0x5 + c:41
+    Control+Shift + f 
+
+#Password
+"fpm"
+    m:0x5 + c:25
+    Control+Shift + w 
+
+# Spamtrain
+"xterm -bg black -fg grey -title "Spamtrain" -e /home/joerg/bin/train.sh"
+   Control+Shift + t
+
+#"uxterm -name "IRC" -class "IRC" -bg black -fg grey -title IRC -e '/usr/bin/ssh -t -C -4 vir.ganneff.de exec screen -DaUr IRC'"
+"urxvtc -name "IRC" -title IRC -e /usr/bin/ssh -t -C -4 cole.ganneff.de exec irc"
+   Control+Shift + i
+
+#qalculate
+"qalculate-gtk"
+    m:0x5 + c:24
+    Control+Shift + q 
+
+#Suspend
+"sudo /usr/sbin/pm-suspend ; lock"
+   Control+Alt + p
+
+#"xlock -dpmsstandby 10 -dpmssuspend 20 -dpmsoff 30"
+"lock"
+   Control+Alt + l
+
+#Volume up
+"amixer -q sset Master 2dB+"
+    m:0x0 + c:123
+    XF86AudioRaiseVolume 
+
+#Volume down
+"amixer -q sset Master 2dB-"
+    m:0x0 + c:122
+    XF86AudioLowerVolume 
+
+#Mute
+"amixer -q sset Master toggle"
+    m:0x0 + c:121
+    XF86AudioMute 
+
+#Remark
+"sudo pm-suspend"
+    m:0x0 + c:150
+    XF86Sleep 
+
+# gnus
+"emacsclient -c -n -e '(gnus)' -F '((name . "Gnus"))'"
+   Control+Alt+g
+
+# org agenda
+"emacsclient -c -n -e '(org-agenda " " " " )' -F '((name . "Org Agenda"))'"
+   Control+Alt+o
+
+#
+# End of xbindkeys configuration
diff --git a/bin/emerge-for-git b/bin/emerge-for-git
new file mode 100755 (executable)
index 0000000..27c7a7a
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# test args
+if [ ! ${#} -ge 3 ]; then
+    echo 1>&2 "Usage: ${0} LOCAL REMOTE MERGED BASE"
+    echo 1>&2 "       (LOCAL, REMOTE, MERGED, BASE can be provided by \`git mergetool'.)"
+    exit 1
+fi
+
+# tools
+_EMACSCLIENT=/usr/bin/emacsclient
+_BASENAME=basename
+_CP=cp
+_EGREP=egrep
+_MKTEMP=mktemp
+
+# args
+_LOCAL=${1}
+_REMOTE=${2}
+_MERGED=${3}
+if [ -r ${4} ] ; then
+    _BASE=${4}
+    _EDIFF=ediff-merge-files-with-ancestor
+    _EVAL="${_EDIFF} \"${_LOCAL}\" \"${_REMOTE}\" \"${_BASE}\" nil \"${_MERGED}\""
+else
+    _EDIFF=ediff-merge-files
+    _EVAL="${_EDIFF} \"${_LOCAL}\" \"${_REMOTE}\" nil \"${_MERGED}\""
+fi
+
+# console vs. X
+if [ "${TERM}" = "linux" ]; then
+    unset DISPLAY
+    _EMACSCLIENTOPTS="-t"
+else
+    _EMACSCLIENTOPTS="-c"
+fi
+
+# run emacsclient
+${_EMACSCLIENT} ${_EMACSCLIENTOPTS} -a "" -e "(${_EVAL})" 2>&1
+
+# check modified file
+if [ ! $(egrep -c '^(<<<<<<<|=======|>>>>>>>|####### Ancestor)' ${_MERGED}) = 0 ]; then
+    _MERGEDSAVE=$(${_MKTEMP} --tmpdir `${_BASENAME} ${_MERGED}`.XXXXXXXXXX)
+    ${_CP} ${_MERGED} ${_MERGEDSAVE}
+    echo 1>&2 "Oops! Conflict markers detected in $_MERGED."
+    echo 1>&2 "Saved your changes to ${_MERGEDSAVE}"
+    echo 1>&2 "Exiting with code 1."
+    exit 1
+fi
+
+exit 0
+
+#!/bin/bash
+
+EDITOR=""
+echo Running with:
+
+echo "1: $1, 2: $2, 3: $3, 4: $4, 5: $5" 
+
+emacsclient -c -e \(emerge-files-with-ancestor\ nil\ \"\$1\"\ \"\$2\"\ \"\$3\"\ \"\$4\"\)
+#emacsclient -a $*
diff --git a/bin/tzwatch b/bin/tzwatch
new file mode 100755 (executable)
index 0000000..b529f3d
--- /dev/null
@@ -0,0 +1,158 @@
+#!/bin/bash
+
+# tzwatch
+
+# Displays the time in a number of time zones, specified by the user.
+# The list of time zones (format as TZ variable) is kept in ${HOME}/.tzlist
+# The time zone is chosen using tzselect 
+# (Debian default is /usr/bin/tzselect, in package libc6).
+# ( ${HOME}/.tzlist could be edited by hand, with a valid value for the TZ variable on each line)
+
+# Command line options:
+#    -c, configure time zones (add or remove)
+#    -f FORMAT  display time according to FORMAT (see 'date' command)
+# If no command line options are given, the time in each zone at the
+# given moment is printed.
+
+# Things that could be done:
+# Possibly this would be better done in perl.  Too bad.
+# A window-graphics display could be nice too.
+# Add an option -r [n] to  run continuously (display updated every n seconds)
+
+# This program is considered copyrighted and distributable under the terms of the GPL, which I will not bother copying here.
+
+# Drew Parsons <dparsons@debian.org>
+# Version 1.2.3 14 July 2002
+#  only refer to timezone label for existing zones when configuring
+# Version 1.2.2, 20 Jan 2002
+#   change "timezone" to "time zone".  tzselect is now in package libc6.
+# Version 1.2.1, May 2000
+#   made recognition of timezone "Local" case-insensitive
+# Version 1.2, March 2000
+#   configfile renamed to .tzlist (for compatibility with gworldclock), 'local' zone added
+# Version 1.1, [2] January 2000 (should that be 1.0.1 ?? )
+#   tzselect gone missing in potato.  Located in slink's timezones package.
+# Version 1.0, 29 November 1999
+#   Original version
+
+
+# default config file
+TZWATCH=${HOME}/.tzlist
+
+if [ "$1" == "--help" ]; then
+    echo "Usage: tzwatch [-c] [-f FORMAT]"
+    echo "  -c          configure time zones (add or remove)"
+    echo "  -f FORMAT   display time according to FORMAT (see 'date' command)"
+    exit 0;
+fi
+
+
+# set config file if not yet done
+if [ ! -s $TZWATCH ]; then
+    if [ `type -p tzselect` ]; then
+       tzselect > $TZWATCH
+    else
+       echo tzselect not found.  Cannot configure tzwatch.
+       exit 1
+    fi
+fi
+
+while getopts "cf:" OPT; do
+    case $OPT in
+    c) # configure: add or remove entry
+       choice=
+       while [ "$choice" != "Done" ]; do
+           echo Choose zone to remove or add new zone:
+           select choice in \
+               `awk  '// {print $1}' $TZWATCH` 'Add Zone' 'Add Local Time' 'Done' 
+           do
+               case $choice in
+               '')  
+                   echo 'Please enter a number in range.';;
+               'Add Zone')
+                   if [ `type -p tzselect` ]; then
+                       tzselect >> $TZWATCH
+                   else
+                       echo tzselect not found.  Cannot add time zone.
+                   fi
+# there ought to something we can do here to make sure the zone has not been already be chosen, sort lines and removes duplicates or whatever
+                   echo
+                   break;;
+
+               'Add Local Time')
+                   if [ `type -p tzselect` ]; then
+                       echo Local >> $TZWATCH
+                   else
+                       echo tzselect not found.  Cannot add local time.
+                   fi
+                   break;;
+
+               'Done')
+                   break;;
+               ?*)
+#swapping '/' in zone name to '\/' for sed.  I can't believe how many darn  \\\\\'s you need!
+                   debarredzone=`echo $choice | sed 's|/|\\\/|'`
+                   sed -e "\|$debarredzone|d" $TZWATCH | cat > $TZWATCH
+                   break;;
+               esac
+           done
+       done;;
+    f) #format string for date output
+       DATEFORMAT=$OPTARG
+       # if the given format has no leading +, then add one
+        if [ -z "$(echo $DATEFORMAT |
+              sed "{s/^[\'\"]//g; s/[\'\"]$//g}" |  # strip surrounding quotemarks
+              awk /^\\+/)" ]; then   # check for leading +
+          DATEFORMAT=+$DATEFORMAT
+       fi;;
+    ?*)
+        echo Usage: tzwatch [-c] [-f FORMAT]
+        echo -e "Try \`tzwatch --help' for more information."
+        exit 0;;
+    esac       
+done
+
+
+##################################################################3
+# finally, display times
+# zdump could be used here, but then '-f' formatting would be lost.  
+# Not that I use date formatting, but it's the principle of the matter.
+
+# wc always prints file name.  How annoying.  awk it away.
+NZ=`wc -l $TZWATCH | awk '{print $1}'`
+n=1
+until [ $(( $n )) -gt $(( $NZ )) ]; do
+
+#grab zone from config file
+    zoneRaw=`awk -v nn=$n 'NR==nn { print $1}' $TZWATCH`
+    zoneName=`awk -v nn=$n 'NR==nn { print $2}' $TZWATCH`
+# allow "local" time zone to be in any case, "Local" or "local" or whatever
+    zone=`echo $zoneRaw | sed s/local/Local/I`
+
+
+    # Create time string.
+    # Sorry about the doubled date calls, it was the only way I could
+    # get the format string handled correctly (without providing a default 
+    # format string myself in the case where the user does not give one)
+    if [ -z "$DATEFORMAT" ]; then
+        if [ $zone == "Local" ]; then
+           TZdate=$(LANG=C date)
+        else
+           TZdate=$(LANG=C TZ="$zone" date)
+        fi
+    else
+        if [ $zone == "Local" ]; then
+           TZdate=$(LANG=C date "$DATEFORMAT")
+        else
+           TZdate=$(LANG=C TZ="$zone" date "$DATEFORMAT")
+        fi
+    fi
+
+# and display 
+# I'd want the zone on the left, but then the date strings would be misaligned
+#    echo -e "$TZdate   $zoneName\t\t   $zone"
+    printf "%-30s %-15s %-40s\n" "$TZdate" "$zoneName" "$zone"
+
+# why doesn't '+=' work for incrementing n, like in C?
+    n=$(( $n + 1 ))
+done
diff --git a/perl/mark-yank-urls b/perl/mark-yank-urls
new file mode 100755 (executable)
index 0000000..e641141
--- /dev/null
@@ -0,0 +1,304 @@
+#!/usr/bin/perl
+# Author:  Bart Trojanowski <bart@jukie.net>
+# Website: http://www.jukie.net/~bart/blog/urxvt-url-yank
+# License: GPLv2
+
+use strict;
+use warnings;
+
+my $url_matcher = qr{(?:
+        (?:https?://|ftp://|news://|mailto:|file://|www\.)[ab-zA-Z0-9\-\@;\/?:&=%\$_.+!*\x27(),~#]+
+        [ab-zA-Z0-9\-\@;\/?&=%\$_+!*\x27()~]   # exclude some trailing characters (heuristic)
+        )|\#[0-9]{4,}
+}x;
+
+
+sub on_start {
+    my ($term) = @_;
+
+    $term->{have_Clipboard} = eval { require Clipboard; };
+    if ($term->{have_Clipboard}) {
+        import Clipboard;
+    }
+
+       eval { require Regexp::Common::URI };
+       if(!$@) {
+               require Regexp::Common;
+               Regexp::Common->import('URI');
+
+               $url_matcher = $Regexp::Common::RE{URI}{HTTP};
+       }
+
+    $term->{browser} = $term->x_resource ("urlLauncher") || "x-www-browser";
+
+    ()
+}
+
+sub on_line_update {
+    my ($term, $row) = @_;
+
+    # Fetch the line that has changed.
+    my $line = $term->line($row);
+    my $text = $line->t;
+
+    # Find and underline URLs.
+    while ($text =~ /($url_matcher)/g) {
+        my $url = $1;
+        my $rend = $line->r;
+
+        # Mark all characters as underlined. we _must_ not toggle underline, as
+        # we might get called on an already-marked URL.
+        my $underlineURLs = $term->x_resource ('underlineURLs') || 'false';
+        if($underlineURLs eq 'true') {
+                       my ($first, $last) = ($-[1], $+[1] - 1);
+
+                       --$last if $url =~ s/["']$//;
+
+            $_ |= urxvt::RS_Uline for @{$rend}[$first .. $last];
+
+            $line->r($rend);
+        }
+    }
+
+    ()
+}
+
+sub on_button_release {
+    my ($term, $event) = @_;
+
+    my $mask = $term->ModLevel3Mask | $term->ModMetaMask
+    | urxvt::ShiftMask | urxvt::ControlMask;
+
+    if ($event->{button} == 2 && ($event->{state} & $mask) == 0) {
+        my $row = $event->{row};
+        my $col = $event->{col};
+
+        my $line = $term->line ($row);
+        my $text = $line->t;
+
+        while ($text =~ /($url_matcher)/g) {
+            my ($url, $first, $last) = ($1, $-[1], $+[1]);
+
+            if($first <= $col && $last >= $col) {
+                $url =~ s/["']$//;
+                $url =~ s/^#/http:\/\/bugs.debian.org\//;
+                $term->exec_async($term->{browser}, $url);
+                return 1;
+            }
+        }
+    }
+
+    ()
+}
+
+
+my $mark_mode_active = 0;
+my %mod = ( 'control' => 0, 'shift' => 0 );
+my $url_selected = -1;
+my @url_db = ();
+
+
+sub do_scan_for_urls {
+    my ($term) = @_;
+
+    @url_db = ();
+
+    my $row_start = $term->top_row;
+    my $row_end = $term->nrow;
+
+       for my $row ($row_start .. $row_end) {
+
+        # Fetch the line that has changed.
+        my $line = $term->line ($row);
+        my $text = $line->t;
+
+        # Find all urls (if any).
+        while ($text =~ /($url_matcher)/g) {
+            my $rend = $line->r;
+
+                       my ($url, $first, $last) = ($1, $-[1], $+[1] - 1);
+
+                       --$last if $url =~ s/["']$//;
+
+            my %h = (
+                               row => $row,
+                               col_from => $first,
+                               col_to => $last,
+                               url => $url,
+                       );
+                               
+                       push @url_db, \%h;
+        }
+    }
+
+    # 0 for none, positive count otherwise
+    return $#url_db + 1;
+}
+
+
+sub on_user_command {
+    my ($term, $cmd) = @_;
+
+       activate_mark_mode($term) if $cmd eq 'mark-yank-urls:activate_mark_mode';
+
+    ()
+}
+
+sub on_key_press {
+    my ($term, $event, $keysym, $octets) = @_;
+
+    if ($keysym == 65507) {                     # <control>
+        $mod{control} = 1;
+
+    } elsif ($keysym == 65505) {                # <shift>
+        $mod{shift} = 1;
+
+    }
+
+    # Ignore all input when we are active.
+    $mark_mode_active && return 1;
+
+    ()
+}
+
+sub on_key_release {
+    my ($term, $event, $keysym, $octets) = @_;
+
+    if ($mark_mode_active) {
+        my $ch = chr($keysym);
+
+        if ($keysym == 65307) {                     # <esc>
+            deactivate_mark_mode ($term);
+            return 1;
+
+        } elsif ($keysym == 65293) {                # <enter>
+            my $url = get_active_url($term);
+            $url =~ s/^#/http:\/\/bugs.debian.org\//;
+            $term->exec_async($term->{browser}, $url);
+            deactivate_mark_mode ($term);
+            return 1;
+
+        } elsif ($keysym == 65507) {                # <control>
+            $mod{control} = 0;
+            return 1;
+
+        } elsif ($keysym == 65505) {                # <shift>
+            $mod{shift} = 0;
+            return 1;
+
+        } elsif ($mod{control} && (($ch eq 'n') || ($ch eq 'p'))) {
+                                                    # ^n and ^p to cycle list
+            my $dir = ($ch eq 'n') ? 1 : -1;
+            move_highlight ($term, $dir);
+
+        } elsif ($ch eq 'y') {                      # y
+            do_copy ($term);
+            deactivate_mark_mode ($term);
+            return 1;
+
+        }
+
+        return 1;
+    }
+
+    ()
+}
+
+sub get_active_url {
+    my ($term) = @_;
+    my $max = $#url_db + 1;
+
+    return if $url_selected < 0 || $url_selected >= $max;
+    return if not defined $url_db[$url_selected];
+    my $o = $url_db[$url_selected];
+    my %h = %$o;
+
+    return $h{url};
+}
+
+sub do_copy {
+    my ($term) = @_;
+
+    my $text = get_active_url ($term);
+
+    if ($term->{have_Clipboard}) {
+        Clipboard->copy($text);
+    } else {
+        $text =~ s/\(["|><&()]\)/\\$1/;
+        system ("echo -n \"$text\" | xclip -i");
+    }
+}
+
+sub move_highlight {
+    my ($term, $dir) = @_;
+    my $max = $#url_db + 1;
+
+    do_highlight ($term, 0);
+    
+    $url_selected = ($max + $url_selected + $dir) % $max;
+        
+    do_highlight ($term, 1);
+
+    $term->want_refresh;
+}
+
+sub do_highlight {
+    my ($term, $enable) = @_;
+    my $max = $#url_db + 1;
+
+    return if $url_selected < 0 || $url_selected >= $max;
+    return if not defined $url_db[$url_selected];
+
+    my $o = $url_db[$url_selected];
+    my %h = %$o;
+
+    my $row = $h{row};
+    my $line = $term->line ($row);
+    my $text = $line->t;
+    my $rend = $line->r;
+
+    if ($enable) {
+        $_ |= urxvt::RS_RVid
+        for @{$rend}[ $h{col_from} .. $h{col_to}];
+
+        # make it visible
+        $term->view_start ( $row < 0 ? $row : 0 );
+
+    } else {
+        $_ &= ~urxvt::RS_RVid
+        for @{$rend}[ $h{col_from} .. $h{col_to}];
+    }
+
+    $line->r ($rend);
+}
+
+sub activate_mark_mode {
+    my ($term) = @_;
+
+    if ($mark_mode_active) {
+
+        move_highlight ($term, -1);
+
+    } elsif ( do_scan_for_urls ($term) ) {
+
+        $term->{save_view_start} = $term->view_start;
+
+        move_highlight ($term, 0);
+
+        $mark_mode_active=1 if ($url_selected > -1);
+    }
+}
+
+sub deactivate_mark_mode {
+    my ($term) = @_;
+
+    do_highlight ($term, 0);
+
+    $mark_mode_active = 0;
+    $url_selected = -1;
+
+    $term->view_start ($term->{save_view_start});
+    $term->want_refresh;
+}
+
+# vim: set et ts=4 sw=4: