From 021d2df326adba6fe9c028d65d1445a28753773e Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Tue, 8 Sep 2020 11:18:49 +0800 Subject: update --- tools/check_upstream | 24 ----- tools/diff-highlight | 213 -------------------------------------------- tools/init/check_upstream | 24 +++++ tools/init/load-settings.sh | 31 +++++++ tools/init/sync.sh | 11 +++ tools/install.sh | 12 +-- tools/load-settings.sh | 31 ------- tools/misc/diff-highlight | 213 ++++++++++++++++++++++++++++++++++++++++++++ tools/misc/mvt_decode.py | 11 +++ tools/misc/refresh-todo.sh | 5 ++ tools/mvt_decode.py | 11 --- tools/refresh-todo.sh | 5 -- tools/sync.sh | 11 --- 13 files changed, 301 insertions(+), 301 deletions(-) delete mode 100755 tools/check_upstream delete mode 100755 tools/diff-highlight create mode 100755 tools/init/check_upstream create mode 100755 tools/init/load-settings.sh create mode 100755 tools/init/sync.sh delete mode 100755 tools/load-settings.sh create mode 100755 tools/misc/diff-highlight create mode 100644 tools/misc/mvt_decode.py create mode 100755 tools/misc/refresh-todo.sh delete mode 100644 tools/mvt_decode.py delete mode 100755 tools/refresh-todo.sh delete mode 100755 tools/sync.sh (limited to 'tools') diff --git a/tools/check_upstream b/tools/check_upstream deleted file mode 100755 index e9e8841..0000000 --- a/tools/check_upstream +++ /dev/null @@ -1,24 +0,0 @@ -#! /bin/bash - -# This script is for repo forked from others -# check $1(repo) if upstream branch origin/master is -# ahead of local branch $2(default to dev) - -if [ ! -d "$1" ]; then - return 0 -fi - -head='dev' -if [ $# -eq 2 ] -then - head=$2 -fi - -cd "$1" && \ -git fetch origin && \ -if ! git rev-list "$head" | grep "$(git rev-parse origin/master)" > /dev/null; then - [[ $(git pull my) == 'Alrady up to date.' ]] || \ - echo "New commit at" "$1" -fi - -echo "$(date)" check "$1" >> "$SETTING_DIR/log" diff --git a/tools/diff-highlight b/tools/diff-highlight deleted file mode 100755 index 08c88bb..0000000 --- a/tools/diff-highlight +++ /dev/null @@ -1,213 +0,0 @@ -#!/usr/bin/perl - -use warnings FATAL => 'all'; -use strict; - -# Highlight by reversing foreground and background. You could do -# other things like bold or underline if you prefer. -my @OLD_HIGHLIGHT = ( - color_config('color.diff-highlight.oldnormal'), - color_config('color.diff-highlight.oldhighlight', "\x1b[7m"), - color_config('color.diff-highlight.oldreset', "\x1b[27m") -); -my @NEW_HIGHLIGHT = ( - color_config('color.diff-highlight.newnormal', $OLD_HIGHLIGHT[0]), - color_config('color.diff-highlight.newhighlight', $OLD_HIGHLIGHT[1]), - color_config('color.diff-highlight.newreset', $OLD_HIGHLIGHT[2]) -); - -my $RESET = "\x1b[m"; -my $COLOR = qr/\x1b\[[0-9;]*m/; -my $BORING = qr/$COLOR|\s/; - -my @removed; -my @added; -my $in_hunk; - -# Some scripts may not realize that SIGPIPE is being ignored when launching the -# pager--for instance scripts written in Python. -$SIG{PIPE} = 'DEFAULT'; - -while (<>) { - if (!$in_hunk) { - print; - $in_hunk = /^$COLOR*\@/; - } - elsif (/^$COLOR*-/) { - push @removed, $_; - } - elsif (/^$COLOR*\+/) { - push @added, $_; - } - else { - show_hunk(\@removed, \@added); - @removed = (); - @added = (); - - print; - $in_hunk = /^$COLOR*[\@ ]/; - } - - # Most of the time there is enough output to keep things streaming, - # but for something like "git log -Sfoo", you can get one early - # commit and then many seconds of nothing. We want to show - # that one commit as soon as possible. - # - # Since we can receive arbitrary input, there's no optimal - # place to flush. Flushing on a blank line is a heuristic that - # happens to match git-log output. - if (!length) { - local $| = 1; - } -} - -# Flush any queued hunk (this can happen when there is no trailing context in -# the final diff of the input). -show_hunk(\@removed, \@added); - -exit 0; - -# Ideally we would feed the default as a human-readable color to -# git-config as the fallback value. But diff-highlight does -# not otherwise depend on git at all, and there are reports -# of it being used in other settings. Let's handle our own -# fallback, which means we will work even if git can't be run. -sub color_config { - my ($key, $default) = @_; - my $s = `git config --get-color $key 2>/dev/null`; - return length($s) ? $s : $default; -} - -sub show_hunk { - my ($a, $b) = @_; - - # If one side is empty, then there is nothing to compare or highlight. - if (!@$a || !@$b) { - print @$a, @$b; - return; - } - - # If we have mismatched numbers of lines on each side, we could try to - # be clever and match up similar lines. But for now we are simple and - # stupid, and only handle multi-line hunks that remove and add the same - # number of lines. - if (@$a != @$b) { - print @$a, @$b; - return; - } - - my @queue; - for (my $i = 0; $i < @$a; $i++) { - my ($rm, $add) = highlight_pair($a->[$i], $b->[$i]); - print $rm; - push @queue, $add; - } - print @queue; -} - -sub highlight_pair { - my @a = split_line(shift); - my @b = split_line(shift); - - # Find common prefix, taking care to skip any ansi - # color codes. - my $seen_plusminus; - my ($pa, $pb) = (0, 0); - while ($pa < @a && $pb < @b) { - if ($a[$pa] =~ /$COLOR/) { - $pa++; - } - elsif ($b[$pb] =~ /$COLOR/) { - $pb++; - } - elsif ($a[$pa] eq $b[$pb]) { - $pa++; - $pb++; - } - elsif (!$seen_plusminus && $a[$pa] eq '-' && $b[$pb] eq '+') { - $seen_plusminus = 1; - $pa++; - $pb++; - } - else { - last; - } - } - - # Find common suffix, ignoring colors. - my ($sa, $sb) = ($#a, $#b); - while ($sa >= $pa && $sb >= $pb) { - if ($a[$sa] =~ /$COLOR/) { - $sa--; - } - elsif ($b[$sb] =~ /$COLOR/) { - $sb--; - } - elsif ($a[$sa] eq $b[$sb]) { - $sa--; - $sb--; - } - else { - last; - } - } - - if (is_pair_interesting(\@a, $pa, $sa, \@b, $pb, $sb)) { - return highlight_line(\@a, $pa, $sa, \@OLD_HIGHLIGHT), - highlight_line(\@b, $pb, $sb, \@NEW_HIGHLIGHT); - } - else { - return join('', @a), - join('', @b); - } -} - -sub split_line { - local $_ = shift; - return map { /$COLOR/ ? $_ : (split //) } - split /($COLOR*)/; -} - -sub highlight_line { - my ($line, $prefix, $suffix, $theme) = @_; - - my $start = join('', @{$line}[0..($prefix-1)]); - my $mid = join('', @{$line}[$prefix..$suffix]); - my $end = join('', @{$line}[($suffix+1)..$#$line]); - - # If we have a "normal" color specified, then take over the whole line. - # Otherwise, we try to just manipulate the highlighted bits. - if (defined $theme->[0]) { - s/$COLOR//g for ($start, $mid, $end); - chomp $end; - return join('', - $theme->[0], $start, $RESET, - $theme->[1], $mid, $RESET, - $theme->[0], $end, $RESET, - "\n" - ); - } else { - return join('', - $start, - $theme->[1], $mid, $theme->[2], - $end - ); - } -} - -# Pairs are interesting to highlight only if we are going to end up -# highlighting a subset (i.e., not the whole line). Otherwise, the highlighting -# is just useless noise. We can detect this by finding either a matching prefix -# or suffix (disregarding boring bits like whitespace and colorization). -sub is_pair_interesting { - my ($a, $pa, $sa, $b, $pb, $sb) = @_; - my $prefix_a = join('', @$a[0..($pa-1)]); - my $prefix_b = join('', @$b[0..($pb-1)]); - my $suffix_a = join('', @$a[($sa+1)..$#$a]); - my $suffix_b = join('', @$b[($sb+1)..$#$b]); - - return $prefix_a !~ /^$COLOR*-$BORING*$/ || - $prefix_b !~ /^$COLOR*\+$BORING*$/ || - $suffix_a !~ /^$BORING*$/ || - $suffix_b !~ /^$BORING*$/; -} diff --git a/tools/init/check_upstream b/tools/init/check_upstream new file mode 100755 index 0000000..e9e8841 --- /dev/null +++ b/tools/init/check_upstream @@ -0,0 +1,24 @@ +#! /bin/bash + +# This script is for repo forked from others +# check $1(repo) if upstream branch origin/master is +# ahead of local branch $2(default to dev) + +if [ ! -d "$1" ]; then + return 0 +fi + +head='dev' +if [ $# -eq 2 ] +then + head=$2 +fi + +cd "$1" && \ +git fetch origin && \ +if ! git rev-list "$head" | grep "$(git rev-parse origin/master)" > /dev/null; then + [[ $(git pull my) == 'Alrady up to date.' ]] || \ + echo "New commit at" "$1" +fi + +echo "$(date)" check "$1" >> "$SETTING_DIR/log" diff --git a/tools/init/load-settings.sh b/tools/init/load-settings.sh new file mode 100755 index 0000000..041941a --- /dev/null +++ b/tools/init/load-settings.sh @@ -0,0 +1,31 @@ +if [[ $0 == 'zsh' ]]; then + setopt extended_glob +elif [[ $0 == 'bash' ]]; then + shopt -s extglob +fi + +# set default editor +export EDITOR=vim + +# load custom aliases +SETTING_DIR=${SETTING_DIR:=$HOME/settings} +source $SETTING_DIR/alias + +# Add custom scripts into PATH +BIN_DIR=$HOME/bin +PATH=$PATH:$BIN_DIR +mkdir -p $BIN_DIR +find $BIN_DIR -xtype l | xargs rm 2>/dev/null || true + +find $SETTING_DIR/tools -type f -executable | \ +xargs realpath | xargs -I{} ln -sf {} $BIN_DIR + +# load custom functions +OSM_UTIL_DIR=$SETTING_DIR/tools/osm +source $OSM_UTIL_DIR/osm + +# sync with important git repos +$SETTING_DIR/tools/init/sync.sh + +# go +PATH=$PATH:$HOME/go/bin diff --git a/tools/init/sync.sh b/tools/init/sync.sh new file mode 100755 index 0000000..00ed4b8 --- /dev/null +++ b/tools/init/sync.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# my repo +cd $SETTING_DIR && git pull --quiet || echo in `pwd` > /dev/tty & +if [ -d ~/vimwiki ]; then + cd ~/vimwiki && git pull --quiet || echo in `pwd` > /dev/tty & +fi + +# others repo +check_upstream ~/git/tig || echo in `pwd` > /dev/tty & +check_upstream ~/.vim_runtime || echo in `pwd` > /dev/tty & diff --git a/tools/install.sh b/tools/install.sh index 0b59e28..c765c62 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -1,6 +1,6 @@ #! /usr/bin/env bash -set -e +set -xe # Default settings SETTING_DIR=${SETTING_DIR:-~/settings} @@ -16,12 +16,12 @@ if [ ! -d $SETTING_DIR ]; then } fi -sed -i "\^# $REPO^, /^$/ d" $RCFILE -echo " +# Write initial commands into .bashrc or .zshrc +sed -i'.bak' "\^# $REPO^, /^$/ d" $RCFILE +cat >>$RCFILE <> $RCFILE && \ -source $RCFILE +source \$SETTING_DIR/tools/init/load-settings.sh +EOF cd "$SETTING_DIR" && make diff --git a/tools/load-settings.sh b/tools/load-settings.sh deleted file mode 100755 index 66ec879..0000000 --- a/tools/load-settings.sh +++ /dev/null @@ -1,31 +0,0 @@ -if [[ $0 == 'zsh' ]]; then - setopt extended_glob -elif [[ $0 == 'bash' ]]; then - shopt -s extglob -fi - -# set default editor -export EDITOR=vim - -# load custom aliases -SETTING_DIR=${SETTING_DIR:=$HOME/settings} -source $SETTING_DIR/alias - -# Add custom scripts into PATH -BIN_DIR=$HOME/bin -PATH=$PATH:$BIN_DIR -mkdir -p $BIN_DIR -find $BIN_DIR -xtype l | xargs rm 2>/dev/null || true - -find $SETTING_DIR/tools -type f -executable | \ -xargs realpath | xargs -I{} ln -sf {} $BIN_DIR - -# load custom functions -OSM_UTIL_DIR=$SETTING_DIR/tools/osm -source $OSM_UTIL_DIR/osm - -# sync with important git repos -$SETTING_DIR/tools/sync.sh - -# go -PATH=$PATH:$HOME/go/bin diff --git a/tools/misc/diff-highlight b/tools/misc/diff-highlight new file mode 100755 index 0000000..08c88bb --- /dev/null +++ b/tools/misc/diff-highlight @@ -0,0 +1,213 @@ +#!/usr/bin/perl + +use warnings FATAL => 'all'; +use strict; + +# Highlight by reversing foreground and background. You could do +# other things like bold or underline if you prefer. +my @OLD_HIGHLIGHT = ( + color_config('color.diff-highlight.oldnormal'), + color_config('color.diff-highlight.oldhighlight', "\x1b[7m"), + color_config('color.diff-highlight.oldreset', "\x1b[27m") +); +my @NEW_HIGHLIGHT = ( + color_config('color.diff-highlight.newnormal', $OLD_HIGHLIGHT[0]), + color_config('color.diff-highlight.newhighlight', $OLD_HIGHLIGHT[1]), + color_config('color.diff-highlight.newreset', $OLD_HIGHLIGHT[2]) +); + +my $RESET = "\x1b[m"; +my $COLOR = qr/\x1b\[[0-9;]*m/; +my $BORING = qr/$COLOR|\s/; + +my @removed; +my @added; +my $in_hunk; + +# Some scripts may not realize that SIGPIPE is being ignored when launching the +# pager--for instance scripts written in Python. +$SIG{PIPE} = 'DEFAULT'; + +while (<>) { + if (!$in_hunk) { + print; + $in_hunk = /^$COLOR*\@/; + } + elsif (/^$COLOR*-/) { + push @removed, $_; + } + elsif (/^$COLOR*\+/) { + push @added, $_; + } + else { + show_hunk(\@removed, \@added); + @removed = (); + @added = (); + + print; + $in_hunk = /^$COLOR*[\@ ]/; + } + + # Most of the time there is enough output to keep things streaming, + # but for something like "git log -Sfoo", you can get one early + # commit and then many seconds of nothing. We want to show + # that one commit as soon as possible. + # + # Since we can receive arbitrary input, there's no optimal + # place to flush. Flushing on a blank line is a heuristic that + # happens to match git-log output. + if (!length) { + local $| = 1; + } +} + +# Flush any queued hunk (this can happen when there is no trailing context in +# the final diff of the input). +show_hunk(\@removed, \@added); + +exit 0; + +# Ideally we would feed the default as a human-readable color to +# git-config as the fallback value. But diff-highlight does +# not otherwise depend on git at all, and there are reports +# of it being used in other settings. Let's handle our own +# fallback, which means we will work even if git can't be run. +sub color_config { + my ($key, $default) = @_; + my $s = `git config --get-color $key 2>/dev/null`; + return length($s) ? $s : $default; +} + +sub show_hunk { + my ($a, $b) = @_; + + # If one side is empty, then there is nothing to compare or highlight. + if (!@$a || !@$b) { + print @$a, @$b; + return; + } + + # If we have mismatched numbers of lines on each side, we could try to + # be clever and match up similar lines. But for now we are simple and + # stupid, and only handle multi-line hunks that remove and add the same + # number of lines. + if (@$a != @$b) { + print @$a, @$b; + return; + } + + my @queue; + for (my $i = 0; $i < @$a; $i++) { + my ($rm, $add) = highlight_pair($a->[$i], $b->[$i]); + print $rm; + push @queue, $add; + } + print @queue; +} + +sub highlight_pair { + my @a = split_line(shift); + my @b = split_line(shift); + + # Find common prefix, taking care to skip any ansi + # color codes. + my $seen_plusminus; + my ($pa, $pb) = (0, 0); + while ($pa < @a && $pb < @b) { + if ($a[$pa] =~ /$COLOR/) { + $pa++; + } + elsif ($b[$pb] =~ /$COLOR/) { + $pb++; + } + elsif ($a[$pa] eq $b[$pb]) { + $pa++; + $pb++; + } + elsif (!$seen_plusminus && $a[$pa] eq '-' && $b[$pb] eq '+') { + $seen_plusminus = 1; + $pa++; + $pb++; + } + else { + last; + } + } + + # Find common suffix, ignoring colors. + my ($sa, $sb) = ($#a, $#b); + while ($sa >= $pa && $sb >= $pb) { + if ($a[$sa] =~ /$COLOR/) { + $sa--; + } + elsif ($b[$sb] =~ /$COLOR/) { + $sb--; + } + elsif ($a[$sa] eq $b[$sb]) { + $sa--; + $sb--; + } + else { + last; + } + } + + if (is_pair_interesting(\@a, $pa, $sa, \@b, $pb, $sb)) { + return highlight_line(\@a, $pa, $sa, \@OLD_HIGHLIGHT), + highlight_line(\@b, $pb, $sb, \@NEW_HIGHLIGHT); + } + else { + return join('', @a), + join('', @b); + } +} + +sub split_line { + local $_ = shift; + return map { /$COLOR/ ? $_ : (split //) } + split /($COLOR*)/; +} + +sub highlight_line { + my ($line, $prefix, $suffix, $theme) = @_; + + my $start = join('', @{$line}[0..($prefix-1)]); + my $mid = join('', @{$line}[$prefix..$suffix]); + my $end = join('', @{$line}[($suffix+1)..$#$line]); + + # If we have a "normal" color specified, then take over the whole line. + # Otherwise, we try to just manipulate the highlighted bits. + if (defined $theme->[0]) { + s/$COLOR//g for ($start, $mid, $end); + chomp $end; + return join('', + $theme->[0], $start, $RESET, + $theme->[1], $mid, $RESET, + $theme->[0], $end, $RESET, + "\n" + ); + } else { + return join('', + $start, + $theme->[1], $mid, $theme->[2], + $end + ); + } +} + +# Pairs are interesting to highlight only if we are going to end up +# highlighting a subset (i.e., not the whole line). Otherwise, the highlighting +# is just useless noise. We can detect this by finding either a matching prefix +# or suffix (disregarding boring bits like whitespace and colorization). +sub is_pair_interesting { + my ($a, $pa, $sa, $b, $pb, $sb) = @_; + my $prefix_a = join('', @$a[0..($pa-1)]); + my $prefix_b = join('', @$b[0..($pb-1)]); + my $suffix_a = join('', @$a[($sa+1)..$#$a]); + my $suffix_b = join('', @$b[($sb+1)..$#$b]); + + return $prefix_a !~ /^$COLOR*-$BORING*$/ || + $prefix_b !~ /^$COLOR*\+$BORING*$/ || + $suffix_a !~ /^$BORING*$/ || + $suffix_b !~ /^$BORING*$/; +} diff --git a/tools/misc/mvt_decode.py b/tools/misc/mvt_decode.py new file mode 100644 index 0000000..0f661dd --- /dev/null +++ b/tools/misc/mvt_decode.py @@ -0,0 +1,11 @@ +import mapbox_vector_tile +import sys + +#Python3 + +mvt = sys.argv[1] + +with open(mvt, 'rb') as f: + data = f.read() + decoded_data = mapbox_vector_tile.decode(data) + print(decoded_data) diff --git a/tools/misc/refresh-todo.sh b/tools/misc/refresh-todo.sh new file mode 100755 index 0000000..7931536 --- /dev/null +++ b/tools/misc/refresh-todo.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# $1 as file, $2 as topic (Daily, Weekly, Monthly) +# change markdown check-list to empty +sed -i "/^## $2/,/^$/ s/\[.\]/\[ \]/" $1 diff --git a/tools/mvt_decode.py b/tools/mvt_decode.py deleted file mode 100644 index 0f661dd..0000000 --- a/tools/mvt_decode.py +++ /dev/null @@ -1,11 +0,0 @@ -import mapbox_vector_tile -import sys - -#Python3 - -mvt = sys.argv[1] - -with open(mvt, 'rb') as f: - data = f.read() - decoded_data = mapbox_vector_tile.decode(data) - print(decoded_data) diff --git a/tools/refresh-todo.sh b/tools/refresh-todo.sh deleted file mode 100755 index 7931536..0000000 --- a/tools/refresh-todo.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# $1 as file, $2 as topic (Daily, Weekly, Monthly) -# change markdown check-list to empty -sed -i "/^## $2/,/^$/ s/\[.\]/\[ \]/" $1 diff --git a/tools/sync.sh b/tools/sync.sh deleted file mode 100755 index 00ed4b8..0000000 --- a/tools/sync.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# my repo -cd $SETTING_DIR && git pull --quiet || echo in `pwd` > /dev/tty & -if [ -d ~/vimwiki ]; then - cd ~/vimwiki && git pull --quiet || echo in `pwd` > /dev/tty & -fi - -# others repo -check_upstream ~/git/tig || echo in `pwd` > /dev/tty & -check_upstream ~/.vim_runtime || echo in `pwd` > /dev/tty & -- cgit v1.2.3-70-g09d2