diff --git a/.bash_profile b/.bash_profile index b6c3855..cb65e27 100644 --- a/.bash_profile +++ b/.bash_profile @@ -12,7 +12,6 @@ export PATH=~/.local/bin:$PATH export HASTE_SERVER="https://haste.breizh.pm" export MPD_HOST="$HOME/.mpd/socket" -export KRESUS_PYTHON_EXEC=python export MAGICK_TMPDIR="$HOME/.cache/ImageMagick/" export HIGHLIGHT_STYLE="base16/eighties" diff --git a/.config/fish/conf.d/br.fish b/.config/fish/conf.d/br.fish new file mode 120000 index 0000000..daeb938 --- /dev/null +++ b/.config/fish/conf.d/br.fish @@ -0,0 +1 @@ +/home/breizh/.local/share/broot/launcher/fish/1.fish \ No newline at end of file diff --git a/.config/fish/functions/mv.fish b/.config/fish/functions/mv.fish new file mode 100644 index 0000000..62d1bf8 --- /dev/null +++ b/.config/fish/functions/mv.fish @@ -0,0 +1,4 @@ +# Defined in - @ line 1 +function mv --description 'alias mv advmv -g' + advmv -g $argv; +end diff --git a/.config/fish/functions/màj.fish b/.config/fish/functions/màj.fish new file mode 100644 index 0000000..629f7f1 --- /dev/null +++ b/.config/fish/functions/màj.fish @@ -0,0 +1,4 @@ +# Defined in - @ line 1 +function màj --wraps='pikaur -Syu' --description 'alias màj pikaur -Syu' + pikaur -Syu $argv; +end diff --git a/.config/fisherman/await/LICENSE b/.config/fisherman/await/LICENSE new file mode 100644 index 0000000..1a6e9b2 --- /dev/null +++ b/.config/fisherman/await/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Jorge Bucaran + +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. diff --git a/.config/fisherman/await/README.md b/.config/fisherman/await/README.md new file mode 100644 index 0000000..a721d4e --- /dev/null +++ b/.config/fisherman/await/README.md @@ -0,0 +1,50 @@ +[slack-link]: https://fisherman-wharf.herokuapp.com/ +[slack-badge]: https://fisherman-wharf.herokuapp.com/badge.svg +[fisherman]: https://github.com/fisherman/fisherman + +[![Slack Room][slack-badge]][slack-link] + +# Await + +Wait for background jobs. + +## Install + +With [fisherman] + +``` +fisher await +``` + +## Usage + +Wait until all existing jobs have finished. + +```fish +await +``` + +Wait until the given jobs are finished. + +```fish +set -l id_list + +for cmd in $commands + fish -c "$cmd" & + set id_list $id_list (last_job_id -l) +end + +await $id_list +``` + +Customize spinners. + +```fish +set await_spinners ◢ ◣ ◤ ◥ +``` + +Customize interval between spinners. + +```fish +set await_interval 0.1 +``` diff --git a/.config/fisherman/await/fishfile b/.config/fisherman/await/fishfile new file mode 100644 index 0000000..2bf9f68 --- /dev/null +++ b/.config/fisherman/await/fishfile @@ -0,0 +1 @@ +fisherman/last_job_id diff --git a/.config/fisherman/await/functions/await.fish b/.config/fisherman/await/functions/await.fish new file mode 100644 index 0000000..9b7d13f --- /dev/null +++ b/.config/fisherman/await/functions/await.fish @@ -0,0 +1,42 @@ +function await -d "Wait for background jobs" + if test -z "$argv" + set argv (last_job_id) + end + + set -l spinners "$await_spinners" + set -l interval "$await_interval" + + if test -z "$spinners" + set spinners ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ + end + + if test -z "$interval" + set interval 0.05 + end + + while true + for spinner in $spinners + printf " $spinner \r" > /dev/stderr + sleep "$interval" + end + + set -l currently_active_jobs (last_job_id) + + if test -z "$currently_active_jobs" + break + end + + set -l has_jobs + + for i in $argv + if builtin contains -- $i $currently_active_jobs + set has_jobs "*" + break + end + end + + if test -z "$has_jobs" + break + end + end +end diff --git a/.config/fisherman/getopts/.travis.yml b/.config/fisherman/getopts/.travis.yml new file mode 100644 index 0000000..1c567cc --- /dev/null +++ b/.config/fisherman/getopts/.travis.yml @@ -0,0 +1,8 @@ +sudo: required +before_install: + - sudo add-apt-repository -y ppa:fish-shell/release-2 + - sudo apt-get update + - sudo apt-get -y install fish +script: + - curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman + - fish -c "fisher fishtape .; fishtape test/*.fish" diff --git a/.config/fisherman/getopts/LICENSE b/.config/fisherman/getopts/LICENSE new file mode 100644 index 0000000..18d9835 --- /dev/null +++ b/.config/fisherman/getopts/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Jorge Bucaran + +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. diff --git a/.config/fisherman/getopts/README.md b/.config/fisherman/getopts/README.md new file mode 100644 index 0000000..7084a1b --- /dev/null +++ b/.config/fisherman/getopts/README.md @@ -0,0 +1,78 @@ +[![Build Status][travis-badge]][travis-link] +[![Slack Room][slack-badge]][slack-link] + +# Getopts + +**Getopts** is a command line options parser for [fish]. + +```fish +getopts -ab1 --foo=bar baz | while read -l key value + switch $key + case _ + echo "$value" # baz + case a + echo "$value" # "" + case b + echo "$value" # 1 + case foo + echo "$value" # bar + end +end +``` + +## Install + +With [fisherman] + +``` +fisher getopts +``` + +With curl. + +```sh +curl -Lo ~/.config/fish/functions/getopts.fish --create-dirs git.io/getopts +``` + +## Usage + +Study the output in the following example + +```fish +getopts -ab1 --foo=bar baz +``` + +``` +a +b 1 +foo bar +_ baz +``` + +The items on the left are the option flags. The items on the right are the option values. The underscore `_` character is the default *key* for bare arguments. + +Use read(1) to process the generated stream and switch(1) to match patterns + +```fish +getopts -ab1 --foo=bar baz | while read -l key option + switch $key + case _ + case a + case b + case foo + end +end +``` + +## Notes + +* A double dash, `--`, marks the end of options. Arguments after this sequence are placed in the default underscore key, `_`. + +[travis-link]: https://travis-ci.org/fisherman/getopts +[travis-badge]: https://img.shields.io/travis/fisherman/getopts.svg + +[slack-link]: https://fisherman-wharf.herokuapp.com +[slack-badge]: https://fisherman-wharf.herokuapp.com/badge.svg + +[fish]: https://fishshell.com +[fisherman]: https://github.com/fisherman/fisherman diff --git a/.config/fisherman/getopts/getopts.fish b/.config/fisherman/getopts/getopts.fish new file mode 100644 index 0000000..9d51151 --- /dev/null +++ b/.config/fisherman/getopts/getopts.fish @@ -0,0 +1,82 @@ +function getopts -d "cli parser" + if not set -q argv[1] + return + end + + printf "%s\n" $argv | awk ' + function out(k,v) { + print(k "" (v == "" ? "" : " "v)) + } + + function pop() { + return len <= 0 ? "_" : opt[len--] + } + + { + if (done) { + out("_" , $0) + next + } + + if (match($0, "^-[A-Za-z]+")) { + $0 = "- " substr($0, 2, RLENGTH - 1) " " substr($0, RLENGTH + 1) + + } else if (match($0, "^--[A-Za-z0-9_-]+")) { + $0 = "-- " substr($0, 3, RLENGTH - 2) " " substr($0, RLENGTH + 2) + } + + if ($1 == "--" && $2 == "") { + done = 1 + + } else if ($2 == "" || $1 !~ /^-|^--/ ) { + out(pop(), $0) + + } else { + while (len) { + out(pop()) + } + + if ($3 != "") { + if (match($0, $2)) { + $3 = substr($0, RSTART + RLENGTH + 1) + } + } + + if ($1 == "--") { + if ($3 == "") { + opt[++len] = $2 + } else { + out($2, $3) + } + } + + if ($1 == "-") { + if ($2 == "") { + print($1) + next + + } else { + n = split($2, keys, "") + } + + if ($3 == "") { + opt[++len] = keys[n] + + } else { + out(keys[n], $3) + } + + for (i = 1; i < n; i++) { + out(keys[i]) + } + } + } + } + + END { + while (len) { + out(pop()) + } + } +' +end diff --git a/.config/fisherman/getopts/man/man1/getopts.1 b/.config/fisherman/getopts/man/man1/getopts.1 new file mode 100644 index 0000000..0c854f2 --- /dev/null +++ b/.config/fisherman/getopts/man/man1/getopts.1 @@ -0,0 +1,69 @@ +. +.TH "GETOPTS" "1" "February 2016" "" "fisherman" +. +.SH "NAME" +\fBgetopts\fR \- Command line options parser +. +.SH "SYNOPSIS" +getopts \fIoptions\fR \.\.\. +. +.br +. +.SH "DESCRIPTION" +\fBGetopts\fR is a command line options parser for fish\. +. +.SH "USAGE" +Study the output in the following example +. +.IP "" 4 +. +.nf + +getopts \-ab1 \-\-foo=bar baz +. +.fi +. +.IP "" 0 +. +.IP "" 4 +. +.nf + +a +b 1 +foo bar +_ baz +. +.fi +. +.IP "" 0 +. +.P +The items on the left are the option flags\. The items on the right are the option values\. The underscore \fB_\fR character is the default \fIkey\fR for bare arguments\. +. +.P +Use read(1) to process the generated stream and switch(1) to match patterns +. +.IP "" 4 +. +.nf + +getopts \-ab1 \-\-foo=bar baz | while read \-l key option + switch $key + case _ + case a + case b + case foo + end +end +. +.fi +. +.IP "" 0 +. +.SH "NOTES" +. +.IP "\(bu" 4 +A double dash, \fB\-\-\fR, marks the end of options\. Arguments after this sequence are placed in the default underscore key, \fB_\fR\. +. +.IP "" 0 diff --git a/.config/fisherman/getopts/test/getopts.fish b/.config/fisherman/getopts/test/getopts.fish new file mode 100644 index 0000000..67549cc --- /dev/null +++ b/.config/fisherman/getopts/test/getopts.fish @@ -0,0 +1,104 @@ +test "only bare" + "_ beer" = (getopts beer) +end + +test "bare and bare" + "_ bar" "_ beer" = (getopts bar beer) +end + +test "bare first" + "foo" "_ beer" = (getopts beer --foo) +end + +test "bare sequence" + "_ foo" "_ bar" "_ baz" "_ quux" = (getopts foo bar baz quux) +end + +test "bare does not end opts" + "a" "b 42" "_ beer" "foo" "bar" = (getopts -ab42 beer --foo --bar) +end + +test "only single" + "f" "o" "o 42" = (getopts -foo42) +end + +test "single and single" + "a" "b" "c" "x" "y" "z" = (getopts -abc -xyz) +end + +test "single and bare" + "a" "b" "c bar" = (getopts -abc bar) +end + +test "single and value" + "a bar" = (getopts -a bar) +end + +test "single w/ value and bare" + "a" "b" "c ./" "_ bar" = (getopts -abc./ bar) +end + +test "single and double" + "a" "b" "c" "foo" = (getopts -abc --foo) +end + +test "double" + "foo" = (getopts --foo) +end + +test "double w/ value" + "foo bar" = (getopts --foo=bar) +end + +test "double w/ value group" + "foo bar" "bar foo" = (getopts --foo=bar --bar=foo) +end + +test "double w/ value and bare" + "foo bar" "_ beer" = (getopts --foo=bar beer) +end + +test "double double" + "foo" "bar" = (getopts --foo --bar) +end + +test "double w/ inner dashes" + "foo-bar-baz" = (getopts --foo-bar-baz) +end + +test "double and single" + "foo" "a" "b" "c" = (getopts --foo -abc) +end + +test "multiple double sequence" + "foo" "bar" "secret 42" "_ baz" = (getopts --foo --bar --secret=42 baz) +end + +test "single double single w/ remaining bares" + "f" "o" "o" "bar" "b" "a" "r norf" "_ baz" "_ quux" = ( + getopts -foo --bar -bar norf baz quux) +end + +test "double dash" + "_ --foo" "_ bar" = (getopts -- --foo bar) +end + +test "single double dash" + "a" "_ --foo" "_ bar" = (getopts -a -- --foo bar) +end + +test "bare and double dash" + "foo bar" "_ baz" "_ foo" "_ --foo" = (getopts --foo=bar baz -- foo --foo) +end + +test "long string as a value" + "f Fee fi fo fum" = (getopts -f "Fee fi fo fum") +end + +test "single and empty string" + "f" = (getopts -f "") +end + +test "double and empty string" + "foo" = (getopts --foo "") +end diff --git a/.config/fisherman/humanize_duration/.travis.yml b/.config/fisherman/humanize_duration/.travis.yml new file mode 100644 index 0000000..1c567cc --- /dev/null +++ b/.config/fisherman/humanize_duration/.travis.yml @@ -0,0 +1,8 @@ +sudo: required +before_install: + - sudo add-apt-repository -y ppa:fish-shell/release-2 + - sudo apt-get update + - sudo apt-get -y install fish +script: + - curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman + - fish -c "fisher fishtape .; fishtape test/*.fish" diff --git a/.config/fisherman/humanize_duration/LICENSE b/.config/fisherman/humanize_duration/LICENSE new file mode 100644 index 0000000..840a3e9 --- /dev/null +++ b/.config/fisherman/humanize_duration/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 bucaran + +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. diff --git a/.config/fisherman/humanize_duration/README.md b/.config/fisherman/humanize_duration/README.md new file mode 100644 index 0000000..b9a17f0 --- /dev/null +++ b/.config/fisherman/humanize_duration/README.md @@ -0,0 +1,28 @@ +[![Build Status][travis-badge]][travis-link] +[![Slack Room][slack-badge]][slack-link] + +# Humanize_duration + +Humanize a time interval for display. + +## Install + +With [fisherman] + +``` +fisher humanize_duration +``` + +## Usage + +```fish +sleep 1 +echo $CMD_DURATION | humanize_duration +1s 5ms +``` + +[travis-link]: https://travis-ci.org/fisherman/humanize_duration +[travis-badge]: https://img.shields.io/travis/fisherman/humanize_duration.svg +[slack-link]: https://fisherman-wharf.herokuapp.com/ +[slack-badge]: https://fisherman-wharf.herokuapp.com/badge.svg +[fisherman]: https://github.com/fisherman/fisherman diff --git a/.config/fisherman/humanize_duration/humanize_duration.fish b/.config/fisherman/humanize_duration/humanize_duration.fish new file mode 100644 index 0000000..aeeae1a --- /dev/null +++ b/.config/fisherman/humanize_duration/humanize_duration.fish @@ -0,0 +1,20 @@ +function humanize_duration -d "Humanize a time interval for display" + command awk ' + function hmTime(time, stamp) { + split("h:m:s:ms", units, ":") + + for (i = 2; i >= -1; i--) { + if (t = int( i < 0 ? time % 1000 : time / (60 ^ i * 1000) % 60 )) { + stamp = stamp t units[sqrt((i - 2) ^ 2) + 1] " " + } + } + if (stamp ~ /^ *$/) { + return "0ms" + } + return substr(stamp, 1, length(stamp) - 1) + } + { + print hmTime($0) + } + ' +end diff --git a/.config/fisherman/humanize_duration/man/man1/humanize_time.1 b/.config/fisherman/humanize_duration/man/man1/humanize_time.1 new file mode 100644 index 0000000..e74011f --- /dev/null +++ b/.config/fisherman/humanize_duration/man/man1/humanize_time.1 @@ -0,0 +1,31 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "HUMANIZE_TIME" "1" "March 2016" "" "humanize_duration" +. +.SH "NAME" +\fBhumanize_duration\fR \- Humanize a time interval for display +. +.SH "SYNOPSIS" +echo \fImilliseconds elapsed\fR | humanize_duration +. +.br +humanize_duration [\-\-help] +. +.br +. +.SH "OPTIONS" +. +.TP +\-h, \-\-help +Show usage help\. +. +.SH "EXAMPLES" +. +.nf + +sleep 1 +echo $CMD_DURATION | humanize_duration +1s 5ms +. +.fi diff --git a/.config/fisherman/humanize_duration/man/man1/humanize_time.md b/.config/fisherman/humanize_duration/man/man1/humanize_time.md new file mode 100644 index 0000000..ffadfb4 --- /dev/null +++ b/.config/fisherman/humanize_duration/man/man1/humanize_time.md @@ -0,0 +1,14 @@ +humanize_duration(1) -- Humanize a time interval for display +============================================================ + +## SYNOPSIS + +humanize_duration
+ +## EXAMPLE + +```fish +sleep 1 +echo $CMD_DURATION | humanize_duration +1s 5ms +``` diff --git a/.config/fisherman/humanize_duration/test/humanize_duration.fish b/.config/fisherman/humanize_duration/test/humanize_duration.fish new file mode 100644 index 0000000..03f1cfd --- /dev/null +++ b/.config/fisherman/humanize_duration/test/humanize_duration.fish @@ -0,0 +1,23 @@ +test "$TESTNAME" + 1ms = (echo 1 | humanize_duration) +end + +test "$TESTNAME" + 10ms = (echo 10 | humanize_duration) +end + +test "$TESTNAME" + "1m 40s" = (echo 100000 | humanize_duration) +end + +test "$TESTNAME" + "16m 40s" = (echo 1000000 | humanize_duration) +end + +test "$TESTNAME" + "2h 46m 40s" = (echo 10000000 | humanize_duration) +end + +test "$TESTNAME" + "27h 46m 40s" = (echo 100000000 | humanize_duration) +end diff --git a/.config/fisherman/lambda/LICENSE b/.config/fisherman/lambda/LICENSE new file mode 100644 index 0000000..a439b2e --- /dev/null +++ b/.config/fisherman/lambda/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Bruno Ferreira Pinto + +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. diff --git a/.config/fisherman/lambda/README.md b/.config/fisherman/lambda/README.md new file mode 100644 index 0000000..4f276b7 --- /dev/null +++ b/.config/fisherman/lambda/README.md @@ -0,0 +1,33 @@ +### Lambda + +[![MIT License](https://img.shields.io/badge/license-MIT-007EC7.svg?style=flat-square)](/LICENSE) +[![Fish Shell Version](https://img.shields.io/badge/fish-v2.2.0-007EC7.svg?style=flat-square)](http://fishshell.com) + +
+ +#### Screenshot + +

+ +

+ +###### Added VirtualEnv Support +![preview](http://i.imgur.com/fWurs47.png) + + +#### Install + +#### [Fisherman] + +```fish +fisher i lambda +``` + +##### [Oh-My-Fish] + +```fish +omf install lambda +``` + +[Fisherman]: https://github.com/fisherman/fisherman +[Oh-My-Fish]: https://github.com/oh-my-fish/oh-my-fish diff --git a/.config/fisherman/lambda/fish_prompt.fish b/.config/fisherman/lambda/fish_prompt.fish new file mode 100644 index 0000000..639df9f --- /dev/null +++ b/.config/fisherman/lambda/fish_prompt.fish @@ -0,0 +1,67 @@ +function fish_prompt + # Cache exit status + set -l last_status $status + + # Just calculate these once, to save a few cycles when displaying the prompt + if not set -q __fish_prompt_hostname + set -g __fish_prompt_hostname (hostname|cut -d . -f 1) + end + if not set -q __fish_prompt_char + switch (id -u) + case 0 + set -g __fish_prompt_char '#' + case '*' + set -g __fish_prompt_char 'λ' + end + end + + # Setup colors + #use extended color pallete if available +#if [[ $terminfo[colors] -ge 256 ]]; then +# turquoise="%F{81}" +# orange="%F{166}" +# purple="%F{135}" +# hotpink="%F{161}" +# limegreen="%F{118}" +#else +# turquoise="%F{cyan}" +# orange="%F{yellow}" +# purple="%F{magenta}" +# hotpink="%F{red}" +# limegreen="%F{green}" +#fi + set -l normal (set_color normal) + set -l white (set_color --bold normal) + set -l turquoise (set_color cyan) + set -l orange (set_color yellow) + set -l hotpink (set_color red) + set -l blue (set_color blue) + set -l limegreen (set_color brgreen) + set -l purple (set_color magenta) + + # Configure __fish_git_prompt + set -g __fish_git_prompt_char_stateseparator ' ' + set -g __fish_git_prompt_color F2F0EC + set -g __fish_git_prompt_color_flags FFCC66 + set -g __fish_git_prompt_color_prefix white + set -g __fish_git_prompt_color_suffix white + set -g __fish_git_prompt_showdirtystate true + set -g __fish_git_prompt_showuntrackedfiles true + set -g __fish_git_prompt_showstashstate true + set -g __fish_git_prompt_show_informative_status true + + # Line 1 + echo -n $white'╭─'$hotpink$USER$white' at '$orange$__fish_prompt_hostname$white' in '$limegreen(pwd)$turquoise + __fish_git_prompt " (%s)" + echo + + # Line 2 + echo -n $white'╰' + # support for virtual env name + if set -q VIRTUAL_ENV + echo -n "($turquoise"(basename "$VIRTUAL_ENV")"$white)" + end + echo -n $white'─'$__fish_prompt_char $normal +end + + diff --git a/.config/fisherman/lambda/fish_right_prompt.fish b/.config/fisherman/lambda/fish_right_prompt.fish new file mode 100644 index 0000000..5cf7526 --- /dev/null +++ b/.config/fisherman/lambda/fish_right_prompt.fish @@ -0,0 +1,56 @@ +function fish_right_prompt + set -l exit_code $status + __tmux_prompt + if test $exit_code -ne 0 + set_color red + else + set_color 666666 + end + printf '%d' $exit_code + set_color 666666 + printf ' < %s' (date +%H:%M:%S) + set_color normal +end + +function __tmux_prompt + set multiplexer (_is_multiplexed) + + switch $multiplexer + case screen + set pane (_get_screen_window) + case tmux + set pane (_get_tmux_window) + end + + set_color 666666 + if test -z $pane + echo -n "" + else + echo -n $pane' | ' + end +end + +function _get_tmux_window + tmux lsw | grep active | sed 's/\*.*$//g;s/: / /1' | awk '{ print $2 "-" $1 }' - +end + +function _get_screen_window + set initial (screen -Q windows; screen -Q echo "") + set middle (echo $initial | sed 's/ /\n/g' | grep '\*' | sed 's/\*\$ / /g') + echo $middle | awk '{ print $2 "-" $1 }' - +end + +function _is_multiplexed + set multiplexer "" + if test -z $TMUX + else + set multiplexer "tmux" + end + if test -z $WINDOW + else + set multiplexer "screen" + end + echo $multiplexer +end + + diff --git a/.config/fisherman/lambda/screenshot.png b/.config/fisherman/lambda/screenshot.png new file mode 100644 index 0000000..58f5526 Binary files /dev/null and b/.config/fisherman/lambda/screenshot.png differ diff --git a/.config/fisherman/last_job_id/.travis.yml b/.config/fisherman/last_job_id/.travis.yml new file mode 100644 index 0000000..1c567cc --- /dev/null +++ b/.config/fisherman/last_job_id/.travis.yml @@ -0,0 +1,8 @@ +sudo: required +before_install: + - sudo add-apt-repository -y ppa:fish-shell/release-2 + - sudo apt-get update + - sudo apt-get -y install fish +script: + - curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman + - fish -c "fisher fishtape .; fishtape test/*.fish" diff --git a/.config/fisherman/last_job_id/LICENSE b/.config/fisherman/last_job_id/LICENSE new file mode 100644 index 0000000..1a6e9b2 --- /dev/null +++ b/.config/fisherman/last_job_id/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Jorge Bucaran + +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. diff --git a/.config/fisherman/last_job_id/README.md b/.config/fisherman/last_job_id/README.md new file mode 100644 index 0000000..79545e9 --- /dev/null +++ b/.config/fisherman/last_job_id/README.md @@ -0,0 +1,28 @@ +[![Build Status][travis-badge]][travis-link] +[![Slack Room][slack-badge]][slack-link] + +# Last_job_id + +Get the id of one or more existing jobs + +## Install + +With [fisherman] + +``` +fisher last_job_id +``` + +## Usage + +```fish +if set -l i (last_job_id --last) + printf "Most recent job: %%%i\n" $i +end +``` + +[travis-link]: https://travis-ci.org/fisherman/last_job_id +[travis-badge]: https://img.shields.io/travis/fisherman/last_job_id.svg +[slack-link]: https://fisherman-wharf.herokuapp.com/ +[slack-badge]: https://fisherman-wharf.herokuapp.com/badge.svg +[fisherman]: https://github.com/fisherman/fisherman diff --git a/.config/fisherman/last_job_id/last_job_id.fish b/.config/fisherman/last_job_id/last_job_id.fish new file mode 100644 index 0000000..b95fb12 --- /dev/null +++ b/.config/fisherman/last_job_id/last_job_id.fish @@ -0,0 +1,14 @@ +function last_job_id -d "Get the id of one or more existing jobs" + builtin jobs $argv | command awk -v FS=\t ' + /[0-9]+\t/{ + aJobs[++nJobs] = $1 + } + END { + for (i = 1; i <= nJobs; i++) { + print(aJobs[i]) + } + + exit nJobs == 0 + } + ' +end diff --git a/.config/fisherman/last_job_id/man/man1/last_job_id.md b/.config/fisherman/last_job_id/man/man1/last_job_id.md new file mode 100644 index 0000000..d8a8938 --- /dev/null +++ b/.config/fisherman/last_job_id/man/man1/last_job_id.md @@ -0,0 +1,14 @@ +last_job_id(1) -- Get the id of the last job to be started +========================================================== + +## SYNOPSIS + +last_job_id
+ +## USAGE + +```fish +if set -l job_id (last_job_id) + printf "The last job to be started: %%%i\n" $job_id +end +``` diff --git a/.config/fisherman/last_job_id/test/last_job_id.fish b/.config/fisherman/last_job_id/test/last_job_id.fish new file mode 100644 index 0000000..b3be495 --- /dev/null +++ b/.config/fisherman/last_job_id/test/last_job_id.fish @@ -0,0 +1,24 @@ +test "$TESTNAME - Get the id of the last job to be started" + ( + sleep 0.2& + set -l jobs_id (jobs -l | cut -d\t -f1) + echo "$jobs_id" + + ) = (last_job_id) +end + +test "$TESTNAME - Set status to 1 if there are no jobs" + 1 = ( + + while true + set -l has_jobs (jobs) + if test -z "$has_jobs" + break + end + end + + last_job_id + echo $status + + ) +end diff --git a/.config/fisherman/termcolours/LICENSE b/.config/fisherman/termcolours/LICENSE new file mode 100644 index 0000000..d4dbc11 --- /dev/null +++ b/.config/fisherman/termcolours/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2006 Marcel Bischoff + +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. diff --git a/.config/fisherman/termcolours/README.md b/.config/fisherman/termcolours/README.md new file mode 100644 index 0000000..f52c82d --- /dev/null +++ b/.config/fisherman/termcolours/README.md @@ -0,0 +1,27 @@ +[![Slack Room][slack-badge]][slack-link] + +# termcolours + +Simple function for fish to list available terminal colour names. + +## Install + +With [fisherman] + +``` +fisher termcolours +``` + +## Usage + +```fish +termcolours +``` + +## Screenshot + +![screenshot](https://cloud.githubusercontent.com/assets/8317250/15145024/309e173c-16ee-11e6-91fa-f0e493d77682.png) + +[slack-link]: https://fisherman-wharf.herokuapp.com/ +[slack-badge]: https://fisherman-wharf.herokuapp.com/badge.svg +[fisherman]: https://github.com/fisherman/fisherman diff --git a/.config/fisherman/termcolours/termcolours.fish b/.config/fisherman/termcolours/termcolours.fish new file mode 100644 index 0000000..c36e02c --- /dev/null +++ b/.config/fisherman/termcolours/termcolours.fish @@ -0,0 +1,11 @@ +function __termcolours + set herrbischoff_tcolors (echo $TERM | grep -oE '2|4|8|16|32|64|128|256') + for i in (seq 0 (math $herrbischoff_tcolors-1)) + printf "\x1b[38;5;%smcolour%s\n" $i $i + end + set -e herrbischoff_tcolors +end + +function termcolours + __termcolours | pr --columns=4 -t -w100 +end diff --git a/.config/fisherman/transfer/.travis.yml b/.config/fisherman/transfer/.travis.yml new file mode 100644 index 0000000..f107c5b --- /dev/null +++ b/.config/fisherman/transfer/.travis.yml @@ -0,0 +1,9 @@ +sudo: required +before_install: + - sudo add-apt-repository -y ppa:fish-shell/release-2 + - sudo apt-get update + - sudo apt-get -y install fish +script: + - curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher + - fish -c "fisher transfer" + - fish -c "transfer --help" diff --git a/.config/fisherman/transfer/LICENSE b/.config/fisherman/transfer/LICENSE new file mode 100755 index 0000000..8b64a54 --- /dev/null +++ b/.config/fisherman/transfer/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Sajjad Hashemian + +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. diff --git a/.config/fisherman/transfer/README.md b/.config/fisherman/transfer/README.md new file mode 100755 index 0000000..eaeb001 --- /dev/null +++ b/.config/fisherman/transfer/README.md @@ -0,0 +1,31 @@ +[fisher]: https://github.com/jorgebucaran/fisher + +# Transfer + +Upload to + +## Install + +With [fisher] + +``` +fisher sijad/transfer +``` + +## Usage + +```fish +transfer my-file.txt +``` + +```fish +transfer my-file.txt my-file-new-name.txt +``` + +```fish +echo my message text | transfer my-message.txt +``` + +```fish +cat my-file.txt | transfer my-file-new-name.txt +``` diff --git a/.config/fisherman/transfer/fishfile b/.config/fisherman/transfer/fishfile new file mode 100644 index 0000000..dc2d728 --- /dev/null +++ b/.config/fisherman/transfer/fishfile @@ -0,0 +1 @@ +getopts \ No newline at end of file diff --git a/.config/fisherman/transfer/transfer.fish b/.config/fisherman/transfer/transfer.fish new file mode 100755 index 0000000..adeca79 --- /dev/null +++ b/.config/fisherman/transfer/transfer.fish @@ -0,0 +1,58 @@ +function transfer -d "Upload to transfer.sh" -a file name + + getopts $argv | while read -l 1 2 + switch "$1" + case _ + continue + + case h help + echo "Usage: transfer [FILE] [NAME]" + echo + echo "Examples:" + echo " transfer my-file.txt" + echo " transfer my-file.txt my-file-new-name.txt" + echo " echo my message text | transfer my-message.txt" + echo " cat my-file.txt | transfer my-file-new-name.txt" + return + + case \* + printf "transfer: '%s' is not a valid option\n" $1 >& 2 + transfer --help >& 2 + return 1 + end + end + + set -l tmp (mktemp -t transferXXX) + + if test -z $name + if not isatty + set name $file + else if test -n "$file" + set name (basename $file) + end + end + + if test -z $name + set name (random) + end + + if not isatty + set file "" + end + + set name (echo $name | sed -e 's/[^a-zA-Z0-9._-]/-/g') + set name (echo $name | sed -e 's/-\{1,\}/-/g') + + if test -n "$file" + if not test -r "$file" + echo "transfer: can not read the file." > /dev/stderr + return 1 + end + curl --progress-bar --upload-file $file https://transfer.sh/$name >> $tmp + else + curl --progress-bar --upload-file - https://transfer.sh/$name >> $tmp + end + + cat $tmp + rm -f $tmp +end diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 100644 index 0000000..51252f3 --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1,35 @@ +# Base16 Eighties +# Author: Chris Kempson (http://chriskempson.com) + +set default-bg "#2d2d2d" +set default-fg "#393939" + +set statusbar-fg "#a09f93" +set statusbar-bg "#515151" + +set inputbar-bg "#2d2d2d" +set inputbar-fg "#f2f0ec" + +set notification-bg "#2d2d2d" +set notification-fg "#f2f0ec" + +set notification-error-bg "#2d2d2d" +set notification-error-fg "#f2777a" + +set notification-warning-bg "#2d2d2d" +set notification-warning-fg "#f2777a" + +set highlight-color "#ffcc66" +set highlight-active-color "#6699cc" + +set completion-bg "#393939" +set completion-fg "#6699cc" + +set completion-highlight-fg "#f2f0ec" +set completion-highlight-bg "#6699cc" + +set recolor-lightcolor "#2d2d2d" +set recolor-darkcolor "#e8e6df" + +set recolor "false" +set recolor-keephue "false" diff --git a/.local/bin/360plugin.lua b/.local/bin/360plugin.lua new file mode 100644 index 0000000..a02a661 --- /dev/null +++ b/.local/bin/360plugin.lua @@ -0,0 +1,500 @@ + + +local yaw = 0.0 +local last_yaw = 0.0 +local init_yaw = 0.0 + +local pitch = 0.0 +local last_pitch = 0.0 +local init_pitch = 0.0 + +local roll = 0.0 +local last_roll = 0.0 +local init_roll = 0.0 + +local inputProjections = { + "hequirect", + "equirect", + "fisheye", + "pannini", + "cylindrical", + "sg" +} +local inputProjectionInd = 0 +local inputProjection = "hequirect" + +local outputProjections = { + "flat", + "sg" +} + +local outputProjectionInd = 0 +local outputProjection = "flat" + +local idfov=180.0 +local dfov=110.0 +local last_dfov = 110.0 +local init_dfov = 0.0 + + +local doit = 0.0 +local res = 1.0 +local dragging = false + +local smoothMouse = true + +local scaling = 'linear' + +local in_stereo = 'sbs' + +local h_flip = '0' +local in_flip = '' + +local interp = 'cubic' + +local startTime = nil + +local filterIsOn = false + +local mousePos = {} +local lasttimePos = nil +local filename = nil + +local fileobjectNumber = 0 +local fileobjectFilename = '' +local videofilename = '' +local file_object = nil + +local ffmpegComamndList = {} + +local openNewLogFile = function() + if lasttimePos ~= nil then + fileobjectNumber = fileobjectNumber+1 + end + videofilename = mp.get_property('filename') + fileobjectFilename = string.format('%s_3dViewHistory_%s.txt',videofilename,fileobjectNumber) + file_object = io.open(fileobjectFilename, 'w') + lasttimePos=nil +end + + +function SecondsToClock(seconds) + local seconds = tonumber(seconds) + if seconds <= 0 then + return "00:00:00"; + else + hours = string.format("%02.f", math.floor(seconds/3600)); + mins = string.format("%02.f", math.floor(seconds/60 - (hours*60))); + secs = string.format("%02.2f", seconds - hours*3600 - mins *60); + return hours..":"..mins..":"..secs + end +end + +local writeHeadPositionChange = function() + + if filename == nil then + filename = mp.get_property("path") + end + + if file_object == nil then + return + else + local initPass=false + if lasttimePos == nil then + lasttimePos = mp.get_property("time-pos") + startTime = lasttimePos + initPass=true + if lasttimePos == nil then + return + end + end + + local newTimePos = mp.get_property("time-pos") + + if newTimePos == nil then + return + end + + local outputTs = string.format("%.3f-%.3f ",lasttimePos,newTimePos) + local changedValues = {} + local movementDuration = (newTimePos-lasttimePos) + local maximumTimeoutReached = movementDuration > 5.0 + + if initPass or pitch ~= last_pitch or maximumTimeoutReached then + changedValues[#changedValues+1]= string.format(", [expr] v360 pitch 'lerp(%.3f,%.3f,(T-%.3f)/%.3f)'",last_pitch,pitch,lasttimePos,movementDuration) + end + last_pitch=pitch + + if initPass or yaw ~= last_yaw or maximumTimeoutReached then + changedValues[#changedValues+1]= string.format(", [expr] v360 yaw 'lerp(%.3f,%.3f,(T-%.3f)/%.3f)'",last_yaw,yaw,lasttimePos,movementDuration) + end + last_yaw=yaw + + + if initPass or roll ~= last_roll or maximumTimeoutReached then + changedValues[#changedValues+1]= string.format(", [expr] v360 roll 'lerp(%.3f,%.3f,(T-%.3f)/%.3f)'",last_roll,roll,lasttimePos,movementDuration) + end + last_roll=roll + + if initPass or dfov ~= last_dfov or maximumTimeoutReached then + changedValues[#changedValues+1]= string.format(", [expr] v360 d_fov 'lerp(%.3f,%.3f,(T-%.3f)/%.3f)'",last_dfov,dfov,lasttimePos,movementDuration) + end + last_dfov=dfov + + if initPass then + init_pitch = pitch + init_yaw = yaw + init_roll = roll + init_dfov = dfov + end + + if #changedValues > 0 then + local commandString = '' + for k,changedValue in pairs(changedValues) do + commandString = commandString .. changedValue + end + + commandString = commandString:sub(2) + + commandString = outputTs .. commandString .. ';' + + file_object:write(commandString .. '\n') + lasttimePos = newTimePos + end + end +end + +local updateAwaiting = false +local updateComplete = function() + updateAwaiting = false +end + +local printRecordingStatus = function() + local startts = startTime + local endts = lasttimePos + local currenttS = mp.get_property("time-pos") + if file_object ~= nil and endts ~= nil and startts ~= nil then + endts = math.max(endts,currenttS) + mp.osd_message(string.format("Recording:%s",SecondsToClock(endts-startts)),10) + end +end + + +local updateFilters = function () + + if not filterIsOn then + mp.command_native_async({"no-osd", "vf", "add", string.format("@vrrev:%sv360=%s:%s:in_stereo=%s:out_stereo=2d:id_fov=%s:d_fov=%.3f:yaw=%.3f:pitch=%s:roll=%.3f:w=%s*192.0:h=%.3f*108.0:h_flip=%s:interp=%s",in_flip,inputProjection,outputProjection,in_stereo,idfov,dfov,yaw,pitch,roll,res,res,h_flip,scaling)}, updateComplete) + filterIsOn=true + else + if not updateAwaiting then + updateAwaiting=true + mp.command_native_async({"no-osd", "vf", "set", string.format("@vrrev:%sv360=%s:%s:in_stereo=%s:out_stereo=2d:id_fov=%s:d_fov=%.3f:yaw=%.3f:pitch=%s:roll=%.3f:w=%s*192.0:h=%.3f*108.0:h_flip=%s:interp=%s",in_flip,inputProjection,outputProjection,in_stereo,idfov,dfov,yaw,pitch,roll,res,res,h_flip,scaling)}, updateComplete) + end + filterIsOn=true + end + printRecordingStatus() + writeHeadPositionChange() +end + +local mouse_btn0_cb = function () + dragging = not dragging + if dragging then + mp.set_property("cursor-autohide", "always") + else + mp.set_property("cursor-autohide", "no") + end +end + + +local mouse_pan = function () + + + if dragging then + + local MousePosx, MousePosy = mp.get_mouse_pos() + local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height") + + + local yawpc = ((MousePosx/osd_w)-0.5)*180 + local pitchpc = -((MousePosy/osd_h)-0.5)*180 + + local updateCrop = false + + if smoothMouse then + if yaw ~= yawpc and math.abs(yaw-yawpc)<0.1 then + yaw = yawpc + updateCrop=true + yaw = math.max(-180,math.min(180,yaw)) + elseif yaw ~= yawpc then + yaw = (yawpc+(yaw*5))/6 + yaw = math.max(-180,math.min(180,yaw)) + updateCrop=true + end + + if pitch ~= pitchpc and math.abs(pitch-pitchpc)<0.1 then + pitch = pitchpc + pitch = math.max(-180,math.min(180,pitch)) + updateCrop=true + elseif pitch ~= pitchpc then + pitch = (pitchpc+(pitch*5))/6 + pitch = math.max(-180,math.min(180,pitch)) + updateCrop=true + end + else + if yaw ~= yawpc then + yaw = yawpc + yaw = math.max(-180,math.min(180,yaw)) + updateCrop=true + end + if pitch ~= pitchpc then + pitch = pitchpc + pitch = math.max(-180,math.min(180,pitch)) + updateCrop=true + end + + end + + if updateCrop then + updateFilters() + end + + end +end + +local increment_res = function(inc) + res = res+inc + res = math.max(math.min(res,20),1) + mp.osd_message(string.format("Out-Width: %spx",res*108.0),0.5) + updateFilters() +end + +local increment_roll = function (inc) + roll = roll+inc + updateFilters() + mp.osd_message(string.format("Roll: %s°",roll),0.5) +end + +local increment_pitch = function (inc) + pitch = pitch+inc + updateFilters() +end + +local increment_yaw = function (inc) + yaw = yaw+inc + updateFilters() +end + +local increment_zoom = function (inc) + dfov = dfov+inc + dfov = math.max(math.min(150,dfov),30) + mp.osd_message(string.format("D-Fov: %s°",dfov),0.5) + updateFilters() +end + +local toggleSmoothMouse = function() + smoothMouse = not smoothMouse + if smoothMouse then + mp.osd_message("Mouse smothing On",0.5) + else + mp.osd_message("Mouse smothing Off",0.5) + end +end + +local switchScaler = function() + if scaling == 'nearest' then + scaling = 'cubic' + elseif scaling == 'cubic' then + scaling = 'lagrange9' + elseif scaling == 'lagrange9' then + scaling = 'lanczos' + elseif scaling == 'lanczos' then + scaling = 'linear' + elseif scaling == 'linear' then + scaling = 'nearest' + end + mp.osd_message("Scaling algorithm: " .. scaling,5.5) + updateFilters() +end + +local switchEye = function() + if h_flip == '0' then + h_flip = '1' + in_flip = 'hflip,' + mp.osd_message("Right eye",0.5) + else + h_flip = '0' + in_flip = '' + mp.osd_message("Left eye",0.5) + end + print(ih_flip,h_flip) + updateFilters() +end + + +local cycleInputProjection = function() + inputProjectionInd = ((inputProjectionInd+1) % (#inputProjections +1)) + inputProjection = inputProjections[inputProjectionInd] + mp.osd_message(string.format("Input projection: %s ",inputProjection),0.5) + updateFilters() +end + +local cycleOutputProjection = function() + outputProjectionInd = ((outputProjectionInd+1) % (#outputProjections + 1)) + outputProjection = outputProjections[outputProjectionInd] + mp.osd_message(string.format("Output projection: %s",outputProjection),0.5) + updateFilters() +end + + +local switchInputFovBounds = function() + if idfov == 180.0 then + idfov = 360.0 + elseif idfov == 360.0 then + idfov = 90.0 + else + idfov = 180.0 + end + mp.osd_message(string.format("Input fov bounds: %s°",idfov),0.5) + updateFilters() +end + +local switchStereoMode = function() + if in_stereo == 'sbs' then + in_stereo = 'tb' + else + in_stereo = 'sbs' + end + mp.osd_message("Input format: " .. in_stereo,0.5) + updateFilters() +end + +local showHelp = function() + mp.osd_message("Keyboard and Mouse Controls:\n? = show help\ny,h = adjust quality\ni,j,k,l,mouseClick = Look around\nu,i = roll head\n-,=,mouseWheel = zoom\nr = switch SetereoMode\nt = switch Eye\ne = switch Scaler\ng = toggle mouse smothing\nn = start and stop motion recording\n1,2 - cycle in and out projections",10) +end + +local closeCurrentLog = function() + commandForFinalLog='' + if lasttimePos ~= nil and file_object ~= nil then + + finalTimeStamp = mp.get_property("time-pos") + + file_object:write('#\n') + + local stats = string.format( '# Duration: %s-%s (total %s) %s seconds', + SecondsToClock(startTime),SecondsToClock(finalTimeStamp),SecondsToClock(finalTimeStamp-startTime),finalTimeStamp-startTime ) + + print('#') + file_object:write( stats .. '\n') + print(stats) + + file_object:write( '# Suggested ffmpeg conversion command:\n') + + local closingCommandComment = string.format('ffmpeg -y -ss %s -i "%s" -to %s -copyts -filter_complex "%sv360=%s:%s:in_stereo=%s:out_stereo=2d:id_fov=%s:d_fov=%.3f:yaw=%.3f:pitch=%.3f:roll=%.3f:w=1920.0:h=1080.0:interp=cubic:h_flip=%s,sendcmd=filename=%s_3dViewHistory_%s.txt" -avoid_negative_ts make_zero -preset slower -crf 17 "%s_2d_%03d.mp4"', + startTime,filename,finalTimeStamp,in_flip,inputProjection,outputProjection,in_stereo,idfov,init_dfov,init_yaw,init_pitch,init_roll,h_flip,videofilename,fileobjectNumber,videofilename,fileobjectNumber + ) + + + file_object:write('# ' .. closingCommandComment .. '\n') + file_object:write('#\n') + + print(closingCommandComment) + print('#') + + commandForFinalLog = closingCommandComment + end + if file_object ~= nil then + file_object:close() + file_object = nil + end + return commandForFinalLog +end + +local startNewLogSession = function() + if file_object == nil then + openNewLogFile() + writeHeadPositionChange() + mp.osd_message(string.format("Start Motion Record %s_3dViewHistory_%s.txt",videofilename,fileobjectNumber),0.5) + else + mp.osd_message(string.format("Stop Motion Record %s_3dViewHistory_%s.txt",videofilename,fileobjectNumber),0.5) + writeHeadPositionChange() + local command = closeCurrentLog() + if command then + ffmpegComamndList[#ffmpegComamndList+1] = command + end + end + +end + +local onExit = function() + closeCurrentLog() + mergedCommand = '' + for k,v in pairs(ffmpegComamndList) do + if v ~= '' then + mergedCommand = mergedCommand .. ' & ' .. v + end + end + if mergedCommand ~= '' then + mergedCommand = mergedCommand:sub(3) + print(mergedCommand) + batchfile = io.open('convert_3dViewHistory.bat', 'w') + batchfile:write(mergedCommand) + batchfile:close() + print('Batch processing file created convert_3dViewHistory.bat') + else + print('No head motions logged') + end +end + +local recordingStatusTimer = nil + +local initFunction = function() + + mp.add_forced_key_binding("1", cycleInputProjection ) + mp.add_forced_key_binding("2", cycleOutputProjection ) + + mp.add_forced_key_binding("u", function() increment_roll(-1) end, 'repeatable') + mp.add_forced_key_binding("o", function() increment_roll(1) end, 'repeatable') + + mp.add_forced_key_binding("v", writeHeadPositionChange) + + mp.add_forced_key_binding("i", function() increment_pitch(1) end, 'repeatable') + mp.add_forced_key_binding("k", function() increment_pitch(-1) end, 'repeatable') + mp.add_key_binding("l", function() increment_yaw(1) end, 'repeatable') + mp.add_key_binding("j", function() increment_yaw(-1) end, 'repeatable') + mp.add_key_binding("c", "easy_crop", updateFilters) + + mp.add_forced_key_binding("y", function() increment_res(1) end, 'repeatable') + mp.add_forced_key_binding("h", function() increment_res(-1) end, 'repeatable') + + mp.add_forced_key_binding("=", function() increment_zoom(-1) end, 'repeatable') + mp.add_forced_key_binding("-", function() increment_zoom(1) end, 'repeatable') + + mp.add_forced_key_binding("WHEEL_DOWN", function() increment_zoom(1) end) + mp.add_forced_key_binding("WHEEL_UP", function() increment_zoom(-1) end) + + mp.add_forced_key_binding("r", switchStereoMode) + mp.add_forced_key_binding("t", switchEye) + mp.add_forced_key_binding("e", switchScaler) + mp.add_forced_key_binding("g", toggleSmoothMouse) + mp.add_forced_key_binding("b", switchInputFovBounds) + mp.add_forced_key_binding("n", startNewLogSession) + + mp.set_property("osc", "no") + mp.set_property("fullscreen", "yes") + mp.set_property("osd-font-size", "30") + mp.add_forced_key_binding("mouse_btn0",mouse_btn0_cb) + mp.add_forced_key_binding("mouse_move", mouse_pan) + + mp.add_forced_key_binding("?", showHelp) + mp.add_forced_key_binding("/", showHelp) + + mp.register_event("end-file", onExit) + mp.register_event("shutdown", onExit) + + recordingStatusTimer = mp.add_periodic_timer(0.1,printRecordingStatus) + + updateFilters() + +end + +mp.register_event("file-loaded", initFunction) \ No newline at end of file diff --git a/.local/bin/mpv3d b/.local/bin/mpv3d new file mode 100755 index 0000000..cfe660a --- /dev/null +++ b/.local/bin/mpv3d @@ -0,0 +1,3 @@ +#!/bin/bash + +exec /usr/bin/mpv --script=/home/breizh/.local/bin/360plugin.lua "$@"