diff options
680 files changed, 103725 insertions, 0 deletions
diff --git a/.abook/addressbook b/.abook/addressbook new file mode 100644 index 0000000..50c352d --- /dev/null +++ b/.abook/addressbook @@ -0,0 +1,377 @@ +# abook addressbook file + +[format] +program=abook +version=0.6.1 + + +[0] +name=Aristidou, Maria +email=m.aristidou@herts.ac.uk +nick=maria + +[1] +name=Aspinal, Ian +email=Ian.Aspinall@insight.com +nick=insight + +[2] +name=astronomers +email=astronomers@herts.ac.uk +nick=astronomers + +[3] +name=Basith Awan, Mohammed +email=mo.b.awan.uk@gmail.com +nick=mohammed + +[4] +name=Birthwright, Donna (BEIS) +email=donna.birthwright@beis.gov.uk +nick==donnaW + +[5] +name=Bloom, Naina +email=n.bloom2@herts.ac.uk +nick=naina1 + +[6] +name=Bloom, Naina +email=naina.bloom@gmail.com +nick=naina2 + +[7] +name=Brinks, Elias +email=e.brinks@herts.ac.uk +nick=elias + +[8] +name=Burningham, Ben +email=b.burningham@herts.ac.uk +nick=benB + +[9] +name=Canoville, Paul +email=p.canoville@hotmail.co.uk +nick=paulC + +[10] +name=Car-it +email=Car-it@herts.ac.uk +nick=car-it + +[11] +name=Chong, Melvyn +email=m.chong4@herts.ac.uk +nick=melvyn + +[12] +name=Collett, Jim +email=j.l.collett@herts.ac.uk +nick=jimC + +[13] +name=Combes, David +email=d.combes@herts.ac.uk +nick=daveC + +[14] +name=Coppin, Kristen +email=k.coppin@herts.ac.uk +nick=kristen + +[15] +name=Dale, James +email=j.dale3@herts.ac.uk +nick=jdale + +[16] +name=Davari, Soheil +email=s.davari@herts.ac.uk +nick=soheil + +[17] +name=Donna Birthwright +email=donna_birthwright@hotmail.com +nick==donna1 + +[18] +name=Donna Birthwright +email=dbirthwright@live.co.uk +nick==donna2 + +[19] +name=Donna Birthwright +email=donna_birthwright@hotmail.com + +[20] +name=Drew, Janet +email=j.drew@herts.ac.uk +nick=janet + +[21] +name=Elizabeth Noakes-Kettel +email=e.noakes-kettel@herts.ac.uk + +[22] +name=Ellacott, Simon +email=simon.ellacott1@gmail.com +nick=simonellacott + +[23] +name=Errmann, Ronny +email=r.errmann@herts.ac.uk +nick=ronny + +[24] +name=Garratt, Tracy +email=t.garratt@herts.ac.uk +nick=t.garratt + +[25] +name=Geach, James +email=j.geach@herts.ac.uk +nick=jgeach + +[26] +name=Gino +email=gsgraffagnino@tiscali.co.uk +nick==gino + +[27] +name=Gonzalez Egea, Elena +email=e.gonzalez-egea@herts.ac.uk +nick=elena + +[28] +name=Hardcastle, Martin +email=m.j.hardcastle@herts.ac.uk +nick=mjh + +[29] +name=harrow@stagecoach.co.uk +email=harrow@stagecoach.co.uk + +[30] +name=Head, Kathy +email=k.head@herts.ac.uk +nick=kathy + +[31] +name=helpdesk@herts.ac.uk +email=helpdesk@herts.ac.uk +nick=helpdesk + +[32] +name=Horton, Maya +email=mayahortonarts@hotmail.com +nick=maya + +[33] +name=insight +email=he.sales@insight.com +nick=insight + +[34] +name=Jaffa, Sarah +email=s.jaffa@herts.ac.uk +nick=sarah + +[35] +name=Janet Blay +email=j.m.blay@herts.ac.uk + +[36] +name=Jones, Hugh +email=h.r.a.jones@herts.ac.uk +nick=hugh + +[37] +name=Kaviraj, Sugata +email=s.kaviraj@herts.ac.uk +nick=sugata + +[38] +name=Kobayashi, Chiaki +email=c.kobayashi@herts.ac.uk +nick=chiaki + +[39] +name=Krause, Martin +email=m.g.h.krause@herts.ac.uk +nick=mk + +[40] +name=Lilley, Mariana +email=m.lilley@herts.ac.uk +nick=mariana + +[41] +name=Lisogorskyi, Maksym +email=m.lisogorskyi@gmail.com +nick=max + +[42] +name=Lovell, Christopher +email=c.lovell@herts.ac.uk +nick=chris + +[43] +name=Mahatma, Vijay +email=v.mahatma2@herts.ac.uk +nick=vj + +[44] +name=McAleeer, Stuart +email=Stuart_McAleer@dell.com +nick=Stuart_McAleer + +[45] +name=Monguio Montells, Maria +email=m.monguio@herts.ac.uk +nick=mariaM + +[46] +name=Mutale, Mubela +email=m.mutale@herts.ac.uk +nick=mubela + +[47] +name=Napiwotzki, Ralf +email=r.napiwotzki@herts.ac.uk +nick=ralf + +[48] +name=Ntwaetsile, Kushatha +email=kushkelly@gmail.com +nick=kush + +[49] +name=Patel, Dipali +email=Dipali.Patel@insight.com +nick=dipali + +[50] +name=Pinfield, David +email=d.j.pinfield@herts.ac.uk +nick=dpinfield + +[51] +name=procurement-cln +email=procurement-cln@herts.ac.uk +nick=proc + +[52] +name=Ramasawmy, Joanna +email=j.ramasawmy@herts.ac.uk +nick=jo + +[53] +name=Rodgers-Lee, Donna +email=d.rodgers-lee@herts.ac.uk +nick=donna-rl + +[54] +name=Rolfe, Samantha +email=s.rolfe2@herts.ac.uk +nick=sam + +[55] +name=rosario bavetta +email=rosario.bavetta@gmail.com +nick==ros + +[56] +name=Singh, Alok +email=aloksinghmintorian@hotmail.com +nick=alok + +[57] +name=Smart, Brianna +email=bs19aam@herts.ac.uk +nick=brianna + +[58] +name=Spindler, Ashley +email=a.spindler@herts.ac.uk +nick=ash + +[59] +name=Spriggs, Thomas +email=t.spriggs@herts.ac.uk +nick=thomas + +[60] +name==spuc_news +email=news@spuc.org.uk +nick==spuc_news + +[61] +name=Steuernagel, Ole +email=o.steuernagel@herts.ac.uk +nick=ole + +[62] +name=Tanvir, Tabassum +email=t.tanvir@herts.ac.uk +nick=tabs + +[63] +name=Taylor, David +email=d.taylor@herts.ac.uk +nick=daveT + +[64] +name=Thompson, Mark +email=m.a.thompson@herts.ac.uk +nick=markT + +[65] +name=Vargas Gonzalez, Jaime +email=j.i.vargas-gonzalez@herts.ac.uk +nick=jaime + +[66] +name=Vidalis, Stilianos +email=s.vidalis@herts.ac.uk +nick=stilianos + +[67] +name=Virgo-Sheriff, Kim +email=k.virgo-sheriff@herts.ac.uk +nick=kim + +[68] +name=Vito Graffagnino +email=v.graffagnino@herts.ac.uk +nick=me + +[69] +name=Vito Graffagnino +email=vito@graffagnino.xyz + +[70] +name=Webb, Jan +email=j.webb@herts.ac.uk +nick=jan + +[71] +name=Westcott, Jonathan +email=jonathan.westcott123@hotmail.co.uk +nick=jonW + +[72] +name=Williams, Gwenllian +email=g.williams9@herts.ac.uk +nick=gwen + +[73] +name=Williams, Joseph +email=j.williams30@herts.ac.uk +nick=joeW + +[74] +name=Young, Charles +email=c.young8@herts.ac.uk +nick=charles + diff --git a/.abook/addressbook~ b/.abook/addressbook~ new file mode 100644 index 0000000..50c352d --- /dev/null +++ b/.abook/addressbook~ @@ -0,0 +1,377 @@ +# abook addressbook file + +[format] +program=abook +version=0.6.1 + + +[0] +name=Aristidou, Maria +email=m.aristidou@herts.ac.uk +nick=maria + +[1] +name=Aspinal, Ian +email=Ian.Aspinall@insight.com +nick=insight + +[2] +name=astronomers +email=astronomers@herts.ac.uk +nick=astronomers + +[3] +name=Basith Awan, Mohammed +email=mo.b.awan.uk@gmail.com +nick=mohammed + +[4] +name=Birthwright, Donna (BEIS) +email=donna.birthwright@beis.gov.uk +nick==donnaW + +[5] +name=Bloom, Naina +email=n.bloom2@herts.ac.uk +nick=naina1 + +[6] +name=Bloom, Naina +email=naina.bloom@gmail.com +nick=naina2 + +[7] +name=Brinks, Elias +email=e.brinks@herts.ac.uk +nick=elias + +[8] +name=Burningham, Ben +email=b.burningham@herts.ac.uk +nick=benB + +[9] +name=Canoville, Paul +email=p.canoville@hotmail.co.uk +nick=paulC + +[10] +name=Car-it +email=Car-it@herts.ac.uk +nick=car-it + +[11] +name=Chong, Melvyn +email=m.chong4@herts.ac.uk +nick=melvyn + +[12] +name=Collett, Jim +email=j.l.collett@herts.ac.uk +nick=jimC + +[13] +name=Combes, David +email=d.combes@herts.ac.uk +nick=daveC + +[14] +name=Coppin, Kristen +email=k.coppin@herts.ac.uk +nick=kristen + +[15] +name=Dale, James +email=j.dale3@herts.ac.uk +nick=jdale + +[16] +name=Davari, Soheil +email=s.davari@herts.ac.uk +nick=soheil + +[17] +name=Donna Birthwright +email=donna_birthwright@hotmail.com +nick==donna1 + +[18] +name=Donna Birthwright +email=dbirthwright@live.co.uk +nick==donna2 + +[19] +name=Donna Birthwright +email=donna_birthwright@hotmail.com + +[20] +name=Drew, Janet +email=j.drew@herts.ac.uk +nick=janet + +[21] +name=Elizabeth Noakes-Kettel +email=e.noakes-kettel@herts.ac.uk + +[22] +name=Ellacott, Simon +email=simon.ellacott1@gmail.com +nick=simonellacott + +[23] +name=Errmann, Ronny +email=r.errmann@herts.ac.uk +nick=ronny + +[24] +name=Garratt, Tracy +email=t.garratt@herts.ac.uk +nick=t.garratt + +[25] +name=Geach, James +email=j.geach@herts.ac.uk +nick=jgeach + +[26] +name=Gino +email=gsgraffagnino@tiscali.co.uk +nick==gino + +[27] +name=Gonzalez Egea, Elena +email=e.gonzalez-egea@herts.ac.uk +nick=elena + +[28] +name=Hardcastle, Martin +email=m.j.hardcastle@herts.ac.uk +nick=mjh + +[29] +name=harrow@stagecoach.co.uk +email=harrow@stagecoach.co.uk + +[30] +name=Head, Kathy +email=k.head@herts.ac.uk +nick=kathy + +[31] +name=helpdesk@herts.ac.uk +email=helpdesk@herts.ac.uk +nick=helpdesk + +[32] +name=Horton, Maya +email=mayahortonarts@hotmail.com +nick=maya + +[33] +name=insight +email=he.sales@insight.com +nick=insight + +[34] +name=Jaffa, Sarah +email=s.jaffa@herts.ac.uk +nick=sarah + +[35] +name=Janet Blay +email=j.m.blay@herts.ac.uk + +[36] +name=Jones, Hugh +email=h.r.a.jones@herts.ac.uk +nick=hugh + +[37] +name=Kaviraj, Sugata +email=s.kaviraj@herts.ac.uk +nick=sugata + +[38] +name=Kobayashi, Chiaki +email=c.kobayashi@herts.ac.uk +nick=chiaki + +[39] +name=Krause, Martin +email=m.g.h.krause@herts.ac.uk +nick=mk + +[40] +name=Lilley, Mariana +email=m.lilley@herts.ac.uk +nick=mariana + +[41] +name=Lisogorskyi, Maksym +email=m.lisogorskyi@gmail.com +nick=max + +[42] +name=Lovell, Christopher +email=c.lovell@herts.ac.uk +nick=chris + +[43] +name=Mahatma, Vijay +email=v.mahatma2@herts.ac.uk +nick=vj + +[44] +name=McAleeer, Stuart +email=Stuart_McAleer@dell.com +nick=Stuart_McAleer + +[45] +name=Monguio Montells, Maria +email=m.monguio@herts.ac.uk +nick=mariaM + +[46] +name=Mutale, Mubela +email=m.mutale@herts.ac.uk +nick=mubela + +[47] +name=Napiwotzki, Ralf +email=r.napiwotzki@herts.ac.uk +nick=ralf + +[48] +name=Ntwaetsile, Kushatha +email=kushkelly@gmail.com +nick=kush + +[49] +name=Patel, Dipali +email=Dipali.Patel@insight.com +nick=dipali + +[50] +name=Pinfield, David +email=d.j.pinfield@herts.ac.uk +nick=dpinfield + +[51] +name=procurement-cln +email=procurement-cln@herts.ac.uk +nick=proc + +[52] +name=Ramasawmy, Joanna +email=j.ramasawmy@herts.ac.uk +nick=jo + +[53] +name=Rodgers-Lee, Donna +email=d.rodgers-lee@herts.ac.uk +nick=donna-rl + +[54] +name=Rolfe, Samantha +email=s.rolfe2@herts.ac.uk +nick=sam + +[55] +name=rosario bavetta +email=rosario.bavetta@gmail.com +nick==ros + +[56] +name=Singh, Alok +email=aloksinghmintorian@hotmail.com +nick=alok + +[57] +name=Smart, Brianna +email=bs19aam@herts.ac.uk +nick=brianna + +[58] +name=Spindler, Ashley +email=a.spindler@herts.ac.uk +nick=ash + +[59] +name=Spriggs, Thomas +email=t.spriggs@herts.ac.uk +nick=thomas + +[60] +name==spuc_news +email=news@spuc.org.uk +nick==spuc_news + +[61] +name=Steuernagel, Ole +email=o.steuernagel@herts.ac.uk +nick=ole + +[62] +name=Tanvir, Tabassum +email=t.tanvir@herts.ac.uk +nick=tabs + +[63] +name=Taylor, David +email=d.taylor@herts.ac.uk +nick=daveT + +[64] +name=Thompson, Mark +email=m.a.thompson@herts.ac.uk +nick=markT + +[65] +name=Vargas Gonzalez, Jaime +email=j.i.vargas-gonzalez@herts.ac.uk +nick=jaime + +[66] +name=Vidalis, Stilianos +email=s.vidalis@herts.ac.uk +nick=stilianos + +[67] +name=Virgo-Sheriff, Kim +email=k.virgo-sheriff@herts.ac.uk +nick=kim + +[68] +name=Vito Graffagnino +email=v.graffagnino@herts.ac.uk +nick=me + +[69] +name=Vito Graffagnino +email=vito@graffagnino.xyz + +[70] +name=Webb, Jan +email=j.webb@herts.ac.uk +nick=jan + +[71] +name=Westcott, Jonathan +email=jonathan.westcott123@hotmail.co.uk +nick=jonW + +[72] +name=Williams, Gwenllian +email=g.williams9@herts.ac.uk +nick=gwen + +[73] +name=Williams, Joseph +email=j.williams30@herts.ac.uk +nick=joeW + +[74] +name=Young, Charles +email=c.young8@herts.ac.uk +nick=charles + diff --git a/.addressbook b/.addressbook new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.addressbook diff --git a/.ads/dev_key b/.ads/dev_key new file mode 100644 index 0000000..ed32f91 --- /dev/null +++ b/.ads/dev_key @@ -0,0 +1 @@ +5vfbxrogMaC3CAXAqTW5W7GmSKxro6GGniTqHN1Y diff --git a/.bash_logout b/.bash_logout new file mode 100644 index 0000000..0e4e4f1 --- /dev/null +++ b/.bash_logout @@ -0,0 +1,3 @@ +# +# ~/.bash_logout +# diff --git a/.bash_profile b/.bash_profile new file mode 100755 index 0000000..c5ce0a6 --- /dev/null +++ b/.bash_profile @@ -0,0 +1,7 @@ + +[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile + + +[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* + +source /home/archlinux/vgg/.config/broot/launcher/bash/br @@ -0,0 +1,125 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# set vi mode +set -o vi + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set a fancy prompt (non-color, unless we know we "want" color) +#case "$TERM" in +# xterm-color) color_prompt=yes;; +#esac +# +## uncomment for a colored prompt, if the terminal has the capability; turned +## off by default to not distract the user: the focus in a terminal window +## should be on the output of commands, not on the prompt +##force_color_prompt=yes +# +#if [ -n "$force_color_prompt" ]; then +# if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then +# # We have color support; assume it's compliant with Ecma-48 +# # (ISO/IEC-6429). (Lack of such support is extremely rare, and such +# # a case would tend to support setf rather than setaf.) +# color_prompt=yes +# else +# color_prompt= +# fi +#fi +# +#if [ "$color_prompt" = yes ]; then +# PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +#else +# PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +#fi +#unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac +stty -ixon # Disable ctrl-s and ctrl-q. +shopt -s autocd #Allows you to cd into directory merely by typing the directory name. +HISTSIZE= HISTFILESIZE= # Infinite history. +export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" + + +# Load Supplementary Scripts. This replaces the alias definitions section +# above. + +OS="$(uname -s)" + +if test "$OS" = "Darwin" ; then + echo "Darwin" + for config in "$HOME"/.bashrc.d/*.bash.osx ; do + . "$config" + done +elif test "$OS" = "Linux" ; then + echo "Linux" + for config in "$HOME"/.bashrc.d/*.bash.linux ; do + . "$config" + done +fi +#unset -v config + +export CURL_CA_BUNDLE="/etc/ssl/ca-bundle.pem" + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if [ -f /etc/bash_completion ] && ! shopt -oq posix; then + . /etc/bash_completion +fi + +#start the fan in linux + + +neofetch +[ -f "$HOME/.config/shortcutrc" ] && source "$HOME/.config/shortcutrc" # Load shortcut aliases + + +# >>> conda initialize >>> +# !! Contents within this block are managed by 'conda init' !! +__conda_setup="$('/home/archlinux/vgg/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" +if [ $? -eq 0 ]; then + eval "$__conda_setup" +else + if [ -f "/home/archlinux/vgg/anaconda3/etc/profile.d/conda.sh" ]; then + . "/home/archlinux/vgg/anaconda3/etc/profile.d/conda.sh" + else + export PATH="/home/archlinux/vgg/anaconda3/bin:$PATH" + fi +fi +unset __conda_setup +# <<< conda initialize <<< + + +# Add RVM to PATH for scripting. Make sure this is the last PATH variable change. +export PATH="$PATH:$HOME/.rvm/bin" +export NVM_DIR="$HOME/.config/nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + + +[ -f ~/.fzf.bash ] && source ~/.fzf.bash diff --git a/.bashrc.d/01environ.bash.linux b/.bashrc.d/01environ.bash.linux new file mode 100755 index 0000000..6b00805 --- /dev/null +++ b/.bashrc.d/01environ.bash.linux @@ -0,0 +1,297 @@ +########################################################## +# +# Environment Variables -------- {{{ +# +########################################################### + +########################################################### +# +#-------- General {{{ +# +########################################################### + +export VMD1="/MacOSX-Data1" +export VMD2="/MacOSX-Data2" +export VMD3="/MacOSX-Data3" +export VMD4="/MacOSX-Data4" + +export XDG_CONFIG_HOME="${HOME}/.config" +export EDITOR="nvim" +#export TERM="xterm-256color" +# set display +export DISPLAY=:0 + +# find alternative apps if it is installed on your system +#find_alt() { for i;do which "$i" >/dev/null && { echo "$i"; return 0;};done;return 1; } + +# set the default program +# the first program in the array will be chosen as the default +export OPENER=xdg-open +export BROWSER=qutebrowser +export BROWSERCLI=w3m +export EBOOKER=ebook-viewer +export EDITOR=nvim +export FILEMANAGER=ranger +export MUSICER=mpv +export PAGER=less +export PLAYER=mpv +export READER=zathura +export RTV_BROWSER=~/bin/scripts/urlportal.sh +export IMAGEVIEWER=sxiv +export CUPS_SERVER="star-server.herts.ac.uk" + +########################################################### +# +# General -------- }}} +# +########################################################### +########################################################### +# +# PATH -------- {{{ +# +########################################################### +export BASE_DIR="$HOME" +export U4_DIR="/user4" +export ASTRO="${U4_DIR}/Astro" +export ASTROM="${VMD1}/Astro" +export ASTROMSW="${ASTROM}/sw" +export ASTROPY="${ASTROMSW}/AstroPy" +export ASTROX="${ASTRO}/X-Ray" +export ASTROMX="${ASTROM}/X-Ray" + +export PATH="/usr/bin/core_perl:${HOME}/.emacs.d/bin:${HOME}/Astro/pluto/MyPython_Modules/bin:${HOME}/.symlinks:${BASE_DIR}/bin:${BASE_DIR}/.local/bin:${BASE_DIR}/.i3/scripts:${BASE_DIR}/bin/scripts:${BASE_DIR}/bin/scripts/rofi-scripts-collection:/opt/local/bin:/usr/local/bin:/usr/bin/:/bin:/usr/local/sbin/:/usr/local/bin/eclipse:/opt/Palm/novacom/:/opt/PalmPDK/bin/:/opt/PalmSDK/Current/bin:${ASTRO}:${ASTROX}:${ASTROX}/ds9:${ASTROX}/XPA:${ASTROX}/wcstools-3.9.2/bin:${ASTROX}/nxsa-cl-aioclient-8.4:${BASE_DIR}/bin/geckodriver/target/release:${BASE_DIR}/Sandbox/UoH/code-review.sh:${BASE_DIR}/.cargo/bin" +#export PATH="${PATH}:${BASE_DIR}/bin:${BASE_DIR}/.local/bin:${BASE_DIR}/.i3/scripts:${BASE_DIR}/bin/scripts:${BASE_DIR}/bin/scripts/rofi-scripts-collection:/opt/local/bin:/usr/local/bin:/usr/bin/:/bin:/usr/local/sbin/:/usr/x86_64-suse-linux/bin:/usr/local/bin/eclipse:/opt/Palm/novacom/:/opt/PalmPDK/bin/:/opt/PalmSDK/Current/bin:${ASTRO}:${ASTROX}:${ASTROX}/ds9:${ASTROX}/XPA:${ASTROX}/wcstools-3.9.2/bin:${ASTROX}/nxsa-cl-aioclient-8.4:${BASE_DIR}/bin/geckodriver/target/release:${BASE_DIR}/Sandbox/UoH/code-review.sh" +#export PATH="${BASE_DIR}/anaconda3/bin:$PATH:${PATH}:${BASE_DIR}/bin:${BASE_DIR}/.local/bin:${BASE_DIR}/.i3/scripts:${BASE_DIR}/bin/scripts:${BASE_DIR}/bin/scripts/rofi-scripts-collection:/opt/local/bin:/usr/local/bin:/usr/bin/:/bin:/usr/local/sbin/:/usr/x86_64-suse-linux/bin:/usr/local/bin/eclipse:/opt/Palm/novacom/:/opt/PalmPDK/bin/:/opt/PalmSDK/Current/bin:${ASTRO}:${ASTROX}:${ASTROX}/ds9:${ASTROX}/XPA:${ASTROX}/wcstools-3.9.2/bin:${ASTROX}/nxsa-cl-aioclient-8.4:${BASE_DIR}/bin/geckodriver/target/release:${BASE_DIR}/Sandbox/UoH/code-review.sh" +#export PATH="${PATH}:${BASE_DIR}/bin:${BASE_DIR}/.local/bin:${BASE_DIR}/bin/scripts:${BASE_DIR}/bin/scripts/rofi-scripts-collection:/opt/local/bin:/usr/local/bin:/usr/bin/:/bin:/usr/local/sbin/:/usr/x86_64-suse-linux/bin:/usr/local/bin/eclipse:/opt/Palm/novacom/:/opt/PalmPDK/bin/:/opt/PalmSDK/Current/bin:${ASTRO}:${ASTROX}:${ASTROX}/ds9:${ASTROX}/XPA:${ASTROX}/wcstools-3.9.2/bin:${ASTROX}/nxsa-cl-aioclient-8.4:${BASE_DIR}/bin/geckodriver/target/release" + +########################################################### +# +# }}} -------- PATH +# +########################################################### +########################################################### +# +# Calibre variables ------ {{{ +# +########################################################### + +export CMX_CALIBRE="${VMD2}/Calibre" +export CMX_MAGS="${VMD2}/Magazines" +export CMX_COMICS="${VMD2}/Comix" + +########################################################### +# +# }}} ------ Calibre variables +# +########################################################### +########################################################### +# +# Astro -------- {{{ +# +########################################################### + +export ADS_DEV_KEY="5vfbxrogMaC3CAXAqTW5W7GmSKxro6GGniTqHN1Y" +export PLUTO_DIR="/home/archlinux/vgg/Astro/PLUTO" +#export PYTHONPATH="/usr/lib/python3.8/site-packages" # /home/archlinux/vgg/Astro/pluto/MyPython_Modules/lib/python3.7/site-packages:$PYTHONPATH" + +export HEADAS_VRSN="heasoft-6.20" +export HEADAS_ARCH="x86_64-unknown-linux-gnu-libc2.22" +export SAS_VRSN="xmmsas_20170112_1337" + +export AWD="${ASTROX}/WorkingDir" +export HEADAS="${ASTROX}/${HEADAS_VRSN}/${HEADAS_ARCH}" +export SASDIR="${ASTROX}/XMM-SAS/SAS/${SAS_VRSN}" +export SAS_IMAGEVIEWER="$ASTROX/ds9/ds9" + +#export SAS_ODF="$HOME/Astro/X-Ray/ODF" +# After odfingest has been run SAS_ODF needs to be set to the +# /full/path/to/ODF/file*SUM.SAS file that has been created. + +export SAS_ODF="${AWD}/CU_Vir/2125_0677980501_SCX00000SUM.SAS" +export SAS_CCF="${AWD}/ccf.cif" +export SAS_CCFPATH="${ASTROSW}/ccf" +export SAS_VERBOSITY=3 +export SAS_SUPPRESS_WARNING=3 + +########################################################### +# +# }}} -------- Astro +# +########################################################### +########################################################### +# +# Comp -------- {{{ +# +########################################################### + +export COMP="${BASE_DIR}/Computing" +export COMPD="${COMP}/Development" +export COMPB="${COMPD}/BASH" +export COMPC="${COMPD}/C++" +export COMPL="${COMPD}/LinuxProgramming" +export COMPP="${COMPD}/Perl" +export COMPY="${COMPD}/Python" +export PalmOS="${COMPD}/PalmOS" +export ECLIPSE_HOME="/opt/eclipse44/eclipse" +export webOS="${COMPD}/Palm/webOS" +export IPKDIR="${COMP}/Palm/webos/BACKUPS/ipk-backups" + +export WEBOS_TOOLS="${COMP}/Palm/webos/Homebrew/Tools" + +export PYTUT_MASTER="${VMD2}/media/Youtube/PythonDataAnalysisTutorial" +export PYTUT="${ASTRO}/SciPyNumpyTuts" + +########################################################### +# +# Comp -------- }}} +# +########################################################### +########################################################### +# +#-------- History control {{{ +# +########################################################### + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) + +export HISTSIZE=1000 +export HISTFILESIZE=3000 +export HISTCONTROL=erasedups # Erase duplicates across + # the whole history +export HISTCONTROL=ignoreboth #Remove Extra Commands +export HISTIGNORE="ls:exit:df:w:h:ll" + +########################################################### +# +# History control -------- }}} +# +########################################################### +########################################################### +# +#-------- Colours {{{ +# +########################################################### + +export CHEATCOLOR=true +export CLICOLOR=true +export LSCOLORS='cxfxcxdxbxegedabagacad' + +export LESS=-R +export LESS_TERMCAP_mb=$'\E[1;31m' # begin bold +export LESS_TERMCAP_md=$'\E[1;36m' # begin blink +export LESS_TERMCAP_me=$'\E[0m' # reset bold/blink +export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video +export LESS_TERMCAP_se=$'\E[0m' # reset reverse video +export LESS_TERMCAP_us=$'\E[1;32m' # begin underline +export LESS_TERMCAP_ue=$'\E[0m' # reset underline + +########################################################### +# +#-------- Bash Color Code {{{ +# +########################################################### +#------------------------------------------------------ +# https://wiki.archlinux.org/index.php/Color_Bash_Prompt +# Reset +########################################################### + +Color_Off='\e[0m' # Text Reset + +# Regular Colors +Black='\e[0;30m' # Black +Red='\e[0;31m' # Red +Green='\e[0;32m' # Green +Yellow='\e[0;33m' # Yellow +Blue='\e[0;34m' # Blue +Purple='\e[0;35m' # Purple +Cyan='\e[0;36m' # Cyan +White='\e[0;37m' # White + +# Bold +BBlack='\e[1;30m' # Black +BRed='\e[1;31m' # Red +BGreen='\e[1;32m' # Green +BYellow='\e[1;33m' # Yellow +BBlue='\e[1;34m' # Blue +BPurple='\e[1;35m' # Purple +BCyan='\e[1;36m' # Cyan +BWhite='\e[1;37m' # White + +# Underline +UBlack='\e[4;30m' # Black +URed='\e[4;31m' # Red +UGreen='\e[4;32m' # Green +UYellow='\e[4;33m' # Yellow +UBlue='\e[4;34m' # Blue +UPurple='\e[4;35m' # Purple +UCyan='\e[4;36m' # Cyan +UWhite='\e[4;37m' # White + +# Background +On_Black='\e[40m' # Black +On_Red='\e[41m' # Red +On_Green='\e[42m' # Green +On_Yellow='\e[43m' # Yellow +On_Blue='\e[44m' # Blue +On_Purple='\e[45m' # Purple +On_Cyan='\e[46m' # Cyan +On_White='\e[47m' # White + +# High Intensity +IBlack='\e[0;90m' # Black +IRed='\e[0;91m' # Red +IGreen='\e[0;92m' # Green +IYellow='\e[0;93m' # Yellow +IBlue='\e[0;94m' # Blue +IPurple='\e[0;95m' # Purple +ICyan='\e[0;96m' # Cyan +IWhite='\e[0;97m' # White + +# Bold High Intensity +BIBlack='\e[1;90m' # Black +BIRed='\e[1;91m' # Red +BIGreen='\e[1;92m' # Green +BIYellow='\e[1;93m' # Yellow +BIBlue='\e[1;94m' # Blue +BIPurple='\e[1;95m' # Purple +BICyan='\e[1;96m' # Cyan +BIWhite='\e[1;97m' # White + +# High Intensity backgrounds +On_IBlack='\e[0;100m' # Black +On_IRed='\e[0;101m' # Red +On_IGreen='\e[0;102m' # Green +On_IYellow='\e[0;103m' # Yellow +On_IBlue='\e[0;104m' # Blue +On_IPurple='\e[10;95m' # Purple +On_ICyan='\e[0;106m' # Cyan +On_IWhite='\e[0;107m' # White + +########################################################### +# +# Bash Color Code -------- }}} +# +########################################################### +########################################################### +# +# Colours -------- }}} +# +########################################################### +########################################################### +# +#-------- SSH / ftp / rdesktop {{{ +# +########################################################### + +export GPUServer="128.243.70.77" + +########################################################### +# +# SSH / ftp / rdesktop -------- }}} +# +########################################################## +########################################################## +# +# #-------- Environment Variables #-------- }}} +# +########################################################### diff --git a/.bashrc.d/01environ.bash.osx b/.bashrc.d/01environ.bash.osx new file mode 100755 index 0000000..ab88088 --- /dev/null +++ b/.bashrc.d/01environ.bash.osx @@ -0,0 +1,260 @@ +############################################################################## +# +# Environment Variables -------- {{{ +# +############################################################################### + +############################################################################### +# +#-------- General {{{ +# +############################################################################### + +export VMD="/Volumes/MacOSX-Data" +export VMD2="/Volumes/MacOSX-Data2" +export VMD3="/Volumes/MacOSX-Data3" + +export EDITOR="vim" + +########################################################### +# +# General -------- }}} +# +########################################################### +########################################################### +# +# PATH -------- {{{ +# +########################################################### +export PATH="${VMD}/Computing/anaconda/bin:$PATH" +export PATH="${PATH}:/Users/vgg/bin/" +export PATH="${PATH}:/opt/local/bin:/opt/local/sbin" +export PATH="${PATH}:/opt/PalmSDK/Current/bin:/opt/PalmPDK/bin/" +export PATH="${PATH}:${ASTRO}:${ASTROX}:${ASTROX}/DS9" +export PATH="${PATH}:/Applications/calibre.app/Contents/MacOS/" +export PYTHONPATH="${PYTHONPATH}:${ASTROPY}/astrolib/astrolib_installed/lib/python" +export VLC_PLUGIN_PATH="/Applications/VLC.app/Contents/MacOS/plugins" +########################################################### +# +# }}} -------- PATH +# +########################################################### +########################################################### +# +# Calibre variables ------ {{{ +# +########################################################### + +export CMX_CALIBRE="${VMD2}/Calibre" +export CMX_MAGS="${VMD2}/Magazines" +export CMX_COMICS="${VMD2}Comix" + +########################################################### +# +# }}} ------ Calibre variables +# +########################################################### +########################################################### +# +# Astro -------- {{{ +# +########################################################### + + +export BASE_DIR="$VMD" + +export HEADAS_VRSN="heasoft-6.17" +export HEADAS_ARCH="x86_64-apple-darwin13.4.0" +export SAS_VRSN="xmmsas_20131209_1901" + +export ASTRO="${BASE_DIR}/Astro" +export ASTROSW="${ASTRO}/sw" +export ASTROPY="${ASTROSW}/AstroPy" +export ASTROX="${ASTRO}/X-Ray" +export AWD="${ASTROX}/WorkingDir" +export HEADAS="${ASTROSW}/${HEADAS_VRSN}/${HEADAS_ARCH}" +export SASDIR="${ASTROSW}/SAS/${SAS_VRSN}" +export SAS_IMAGEVIEWER="${ASTROX}/ds9/ds9" + +#export SAS_ODF="/home/vgg/Astro/X-Ray/ODF" +# After odfingest has been run SAS_ODF needs to be set to the +# /full/path/to/ODF/file*SUM.SAS file that has been created. + +export SAS_ODF="${AWD}/CU_Vir/2125_0677980501_SCX00000SUM.SAS" +export SAS_CCF="${AWD}/ccf.cif" +export SAS_CCFPATH="${ASTROSW}/CCF" +export SAS_VERBOSITY=3 +export SAS_SUPPRESS_WARNING=3 + +########################################################### +# +# }}} -------- Astro +# +########################################################### +############################################################################### +# +# Comp -------- {{{ +# +############################################################################### + +export COMP="${BASE_DIR}/Computing" +export COMPD="${COMP}/Development" +export COMPB="${COMPD}/BASH" +export COMPC="${COMPD}/C++" +export COMPL="${COMPD}/LinuxProgramming" +export COMPP="${COMPD}/Perl" +export COMPY="${COMPD}/Python" +export PalmOS="${COMPD}/PalmOS" +export ECLIPSE_HOME="/Applications/eclipse" +export webOS="${COMPD}/WebOS" + +export WEBOS_TOOLS="${COMP}/Palm/webos/Homebrew/Tools" + +export PYTUT_MASTER="${VMD2}/media/Youtube/PythonDataAnalysisTutorial" +export PYTUT="${ASTRO}/SciPyNumpyTuts" + +########################################################### +# +# Comp -------- }}} +# +########################################################### +########################################################### +# +#-------- History control {{{ +# +########################################################### + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) + +export HISTSIZE=10000 +export HISTFILESIZE=3000 +export HISTCONTROL=erasedups # Erase duplicates across + # the whole history +export HISTCONTROL=ignoreboth #Remove Extra Commands +export HISTIGNORE="ls:exit:df:w:h:ll" + +########################################################### +# +# History control -------- }}} +# +########################################################### +############################################################################### +# +#-------- Colours {{{ +# +############################################################################### + +export CHEATCOLOR=true +export CLICOLOR=true +export LSCOLORS='cxfxcxdxbxegedabagacad' + +########################################################### +# +#-------- Bash Color Code {{{ +# +########################################################### +#------------------------------------------------------ +# https://wiki.archlinux.org/index.php/Color_Bash_Prompt +# Reset +########################################################### + +Color_Off='\e[0m' # Text Reset + +# Regular Colors +Black='\e[0;30m' # Black +Red='\e[0;31m' # Red +Green='\e[0;32m' # Green +Yellow='\e[0;33m' # Yellow +Blue='\e[0;34m' # Blue +Purple='\e[0;35m' # Purple +Cyan='\e[0;36m' # Cyan +White='\e[0;37m' # White + +# Bold +BBlack='\e[1;30m' # Black +BRed='\e[1;31m' # Red +BGreen='\e[1;32m' # Green +BYellow='\e[1;33m' # Yellow +BBlue='\e[1;34m' # Blue +BPurple='\e[1;35m' # Purple +BCyan='\e[1;36m' # Cyan +BWhite='\e[1;37m' # White + +# Underline +UBlack='\e[4;30m' # Black +URed='\e[4;31m' # Red +UGreen='\e[4;32m' # Green +UYellow='\e[4;33m' # Yellow +UBlue='\e[4;34m' # Blue +UPurple='\e[4;35m' # Purple +UCyan='\e[4;36m' # Cyan +UWhite='\e[4;37m' # White + +# Background +On_Black='\e[40m' # Black +On_Red='\e[41m' # Red +On_Green='\e[42m' # Green +On_Yellow='\e[43m' # Yellow +On_Blue='\e[44m' # Blue +On_Purple='\e[45m' # Purple +On_Cyan='\e[46m' # Cyan +On_White='\e[47m' # White + +# High Intensity +IBlack='\e[0;90m' # Black +IRed='\e[0;91m' # Red +IGreen='\e[0;92m' # Green +IYellow='\e[0;93m' # Yellow +IBlue='\e[0;94m' # Blue +IPurple='\e[0;95m' # Purple +ICyan='\e[0;96m' # Cyan +IWhite='\e[0;97m' # White + +# Bold High Intensity +BIBlack='\e[1;90m' # Black +BIRed='\e[1;91m' # Red +BIGreen='\e[1;92m' # Green +BIYellow='\e[1;93m' # Yellow +BIBlue='\e[1;94m' # Blue +BIPurple='\e[1;95m' # Purple +BICyan='\e[1;96m' # Cyan +BIWhite='\e[1;97m' # White + +# High Intensity backgrounds +On_IBlack='\e[0;100m' # Black +On_IRed='\e[0;101m' # Red +On_IGreen='\e[0;102m' # Green +On_IYellow='\e[0;103m' # Yellow +On_IBlue='\e[0;104m' # Blue +On_IPurple='\e[10;95m' # Purple +On_ICyan='\e[0;106m' # Cyan +On_IWhite='\e[0;107m' # White + +########################################################### +# +# Bash Color Code -------- }}} +# +########################################################### +########################################################### +# +# Colours -------- }}} +# +########################################################### +############################################################################### +# +#-------- SSH / ftp / rdesktop {{{ +# +############################################################################### + +export GPUServer="128.243.70.77" + +########################################################### +# +# SSH / ftp / rdesktop -------- }}} +# +########################################################## +########################################################## +# +# #-------- Environment Variables #-------- }}} +# +########################################################### diff --git a/.bashrc.d/02aliases.bash.linux b/.bashrc.d/02aliases.bash.linux new file mode 100755 index 0000000..9dfe01a --- /dev/null +++ b/.bashrc.d/02aliases.bash.linux @@ -0,0 +1,145 @@ +############################################################################### +# +# LINUX COMMANDS AND ALIASES --- {{{ +# +############################################################################### +############################################################################### +# +# General --- {{{ +# +############################################################################### + +if [ -f "/usr/lib/w3m/cgi-bin/treat_as_url.cgi" ]; then + alias w3mu="w3m /usr/lib/cgi-bin/treat_as_url.cgi" +fi + +alias ..="cd .." +alias ...="cd ../.." +alias ....="cd ../../.." +alias .....="cd ../../../.." +alias ......="cd ../../../../.." +alias bye="logout" +alias c="fasd_cd -d" +alias cls="clear" +alias deprot="chmod og+rx" +alias deprotw="chmod og+rxw" +alias df="df -h" +alias drpre3att="java -jar $COMP/Palm/webos/Homebrew/Tools/04-webosdoctorp224mantaatt.jar" +alias drpre3wr="java -jar $COMP/Palm/webos/Homebrew/Tools/04-webosdoctorp224mantawr.jar" +alias drtouchpad="java -jar $COMP/Palm/webos/Homebrew/Tools/05-webosdoctorp305hstnhwifi.jar --auto" +alias drtouchpad-activate="java -jar $COMP/Palm/webos/Homebrew/Tools/07-tptoolbox_v42/devicetool2.jar" +alias drive="$HOME/bin/gdrive-osx-x64" +alias du="du -h" +#alias eclipse="/usr/local/bin/eclipse/eclipse 2> /dev/null &" +alias eclm="$ECLIPSE_HOME/eclimd &" +alias eclmoff="$ECLIPSE_HOME/eclim -command shutdown &" +alias emx="emacs -nw" +alias fixeclipse="rm -f $HOME/Computing/Development/Workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi" +alias fbhami="sftp fxunb.sr.bham.ac.uk" +alias fucl="sftp vgg@ftp.star.ucl.ac.uk" +alias galias="nvim $HOME/.bashrc.d/02aliases.bash.linux" +alias galiasenv="nvim $HOME/.bashrc.d/01environ.bash.linux" +alias galiasfunc="nvim $HOME/.bashrc.d/03functions.bash.linux" +alias garbage='gvfs-trash -f' +alias garbage-list='gvfs-ls -h trash://' +alias garbage-empty='gvfs-trash --empty' # empty trash globally (all partitions) +alias grep="grep --color=auto" +alias gonotts="ssh $GPUServer" +alias gunzip="gzip -d" +alias hkp0="ssh 192.168.0.200" +alias herts="ssh -XC vgg@star.herts.ac.uk" +alias hertc="ssh -XC vgg@uhhpc.herts.ac.uk" +alias hertsc="ssh -XC vgg@stri-cluster.herts.ac.uk" +alias phkp0="ping 192.168.0.200" +alias hkp1="ssh hongkongphooey.is-a-geek.net" +alias phkp1="ping hongkongphooey.is-a-geek.net" +alias hkp2="ssh hongkongphooy.ddns.net" +alias phkp2="ping hongkongphooy.ddns.net" +alias kali="sudo mount -t ext4 /dev/sda10 /Kali" +alias lo="logout" +alias l="ls -pCFG" +alias ls="ls -pCFG" +alias ll='ls -alF' +alias la='ls -A' +alias less_alias="less $HOME/.bashrc.d/02aliases.bash.linux" +alias less_env="less $HOME/.bashrc.d/01environ.bash.linux" +alias less_func="less $HOME/.bashrc.d/03functions.bash.linux" +alias lnx1="ssh -l vgg lnx1.sr.bham.ac.uk" +alias more_alias="more $HOME/dotfiles/bashrc.d/02aliases.bash.linux" +alias mpv="mpv --input-ipc-server=/tmp/mpvsoc$(date +%s)" +alias nds="nmcli dev status" +alias nwoff="nmcli radio wifi off" +alias nwon="nmcli radio wifi on" +alias nix="~/bin/NixNote2-x86_64.AppImage" +alias osxrw="sudo mount /dev/sda2 -t hfsplus -o rw,sizelimit=199622000640 /MacOSX" +alias osxro="sudo mount /dev/sda2 -t hfsplus -o ro,sizelimit=199622000640 /MacOSX" +alias osxdrw="sudo mount -o remount,rw,force /MacOSX-Data1" +alias osxdrwx="sudo mount -o remount,rwx,force /MacOSX-Data1" +alias osdxro="sudo mount -o remount,ro,force /MacOSX-Data1" +alias osxd2rw="sudo mount -o remount,rw,force /MacOSX-Data2" +alias osd2xro="sudo mount -o remount,ro,force /MacOSX-Data2" +alias osxd3rw="sudo mount -o remount,rw,force /MacOSX-Data3" +alias osd3xro="sudo mount -o remount,ro,force /MacOSX-Data3" +alias prot="chmod og-rx" +alias pycharm="/usr/local/bin/pycharm &" +alias pydoc35="ebook-viewer '/MacOSX-Data2/Calibre/Python Documentation Authors/Python 3.5.1 documentation (2496)/Python 3.5.1 documentation - Python Documentation Authors.epub' &" +alias qutebrowser="~/bin/scripts/open_url_in_instance.sh" +alias ralias=". $HOME/.bashrc.d/01environ.bash.linux ; . ${HOME}/.bashrc.d/02aliases.bash.linux; . ${HOME}/.bashrc.d/03functions.bash.linux" +alias rm="rm -f" +alias sr='sr -browser=$BROWSERCLI' # cli browser +alias surfraw='surfraw -browser=$BROWSER' # gui browser +alias sucl="ssh -XC zuserver1.star.ucl.ac.uk" +alias tetris="ssh netris.rocketnine.space" +alias tmx='TERM="screen-256color" tmux -2' +alias tor="${HOME}/bin/tor-browser_en-US/start-tor-browser.desktop" +alias tpb="${HOME}/bin/scripts/torrshellscripts-master/thepiratebay/tpb.sh" +alias ukali="sudo umount /Kali" +alias uosx="sudo umount /MacOSX" +alias v="nvim" +alias vifm="vifmrun" +alias wanip="dig +short myip.opendns.com @resolver1.opendns.com" +alias wget='wget -c' # continues/resumes +alias wosqi="java -jar $COMP/Palm/webos/Homebrew/Tools/01-newWebOSQuickInstall-4.6.0.jar &" +alias wh="echo $cwd" +#alias zork1="xzip -geometry 300x300 -statgeometry 30x30 $HOME/bin/zork/DATA/ZORK1.DAT &" +#-------- Fasd {{{ +#------------------------------------------------------ +# DEMO: http://www.youtube.com/watch?v=ur81Y-mV5Us +# URL: https://github.com/clvv/fasd +# DESC: jump to path or open recent files quickly from cli, better than autojump + +if which fasd >/dev/null; then + eval "$(fasd --init auto)" # get fasd working, initialization code + alias m='f -e $PLAYER' # open with video player + alias o='a -e $OPENER' # open any file + alias v='f -e $EDITOR' # open with text editor +fi +#}}} +############################################################################### +# +# General --- }}} +# +############################################################################### +############################################################################### +# +# ANALYSES SOFTWARE --- {{{ +# +############################################################################### + +alias heainit=". $HEADAS/headas-init.sh" +alias ciao="heainit;. $Astro/sw/CIAO/ciao-4.5/bin/ciao.bash" +alias goaips=". ${ASTRO}/Radio/AIPS/LOGIN.SH" +alias mendeley="${HOME}/bin/mendeleydesktop-1.17.6-linux-x86_64/bin/mendeleydesktop &" +alias sasinit="heainit; . $SASDIR/setsas.sh" +alias setodf="export SAS_ODF=${PWD}" +alias updateccf="rsync -v -a --delete --delete-after --force --include='*.CCF' --exclude='*/' xmm.esac.esa.int::XMM_VALID_CCF $HOME/Astro/X-Ray/CCF/" +############################################################################### +# +# ANALYSES SOFTWARE --- }}} +# +############################################################################### +############################################################################### +# +# LINUX COMMANDS AND ALIASES --- }}} +# +############################################################################### diff --git a/.bashrc.d/02aliases.bash.osx b/.bashrc.d/02aliases.bash.osx new file mode 100755 index 0000000..bf6998e --- /dev/null +++ b/.bashrc.d/02aliases.bash.osx @@ -0,0 +1,160 @@ +############################################################################### +# +# 'NIX COMMANDS AND ALIASES --- {{{ +# +############################################################################### +############################################################################### +# +# ITunesHelper removal --- {{{ +# +############################################################################### +############################################################################### +# +# ITunesHelper removal. This will allow you to disable or enable iTunes from +# listening when you press the media keys or connect via bluetooth, even if +# iTunes is not installed. It doesn't actually remove iTunesHelper, but prevents +# rcd demaon from launching. +# +############################################################################### + +alias rcdoff='launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist' +alias rcdon='launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plist' +alias rcdoffperm='sudo chmod 000 /System/Library/CoreServices/rcd.app/Contents/MacOS/rcd; sudo pkill -9 rcd' +alias rcdonperm='sudo chmod 755 /System/Library/CoreServices/rcd.app/Contents/MacOS/rcd; launchctl start com.apple.rcd' + +############################################################################### +# +# ITunesHelper removal --- }}} +# +############################################################################### +############################################################################### +# +# IPlayer --- {{{ +# +############################################################################### + +alias get_iplayer-list='cls;for FILE in `cat ToDownloadList`; do URI=$FILE; echo "Downloading $URI"; /Users/vgg/bin/get_iplayer --modes=flashhigh,hlshigh --url $URI; done' +alias bbccbbc='/Users/vgg/bin/get_iplayer --stream --type=livetv "CBBC" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbccbbs='/Users/vgg/bin/get_iplayer --stream --type=livetv "CBeebies" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcn='/Users/vgg/bin/get_iplayer --stream --type=livetv "BBC News" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbc1='/Users/vgg/bin/get_iplayer --stream --type=livetv "BBC One" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbc2='/Users/vgg/bin/get_iplayer --stream --type=livetv "BBC Two" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbc3='/Users/vgg/bin/get_iplayer --stream --type=livetv "BBC Three" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbc4='/Users/vgg/bin/get_iplayer --stream --type=livetv "BBC Four" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr1x='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC 1xtra" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr1='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 1" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr2='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 2" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr3='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 3" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr4='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 FM" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr4x='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 Extra" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr5='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 5 live" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' +alias bbcr5x='/Users/vgg/bin/get_iplayer --stream --type=liveradio "BBC 5 live Sports Extra" --player="/Applications/VLC.app/Contents/MacOS/vlc -"&' + +############################################################################### +# +# IPlayer --- }}} +# +############################################################################### +############################################################################### +# +# General --- {{{ +# +############################################################################### + +# enable color support of ls and also add handy aliases + +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert + +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +alias bye="logout" +alias blessme="sudo bless --setBoot --folder /EFI/EFI/refind --file /EFI/EFI/refind/refind_x64.efi" +alias chimeoff="sudo nvram SystemAudioVolume=%80" +alias chimeon="sudo nvram -d SystemAudioVolume" +alias cls="clear" +alias deprot="chmod og+rx" +alias df="df -h" +alias drpre3att="java -jar $COMP/Palm/webos/Homebrew/Tools/04-webosdoctorp224mantaatt.jar" +alias drive="/Users/vgg/bin/gdrive-osx-x64" +alias du="du -h" +alias eclm="$ECLIPSE_HOME/eclimd &" +alias eclmoff="$ECLIPSE_HOME/eclim -command shutdown &" +alias efi="sudo mount -t msdos /dev/disk0s1 /EFI" +# show hidden files in finder +alias fndsh="defaults write com.apple.finder AppleShowAllFiles YES; killall Finder" +# hide hidden files in finder +alias fndnosh="defaults write com.apple.finder AppleShowAllFiles NO; killall Finder" +alias fixeclipse="rm -f /Users/vgg/Computing/Development/Workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi" +alias galias="vim /Users/vgg/.bashrc.d/02aliases.bash.osx" +alias galiasenv="vim /Users/vgg/.bashrc.d/01environ.bash.osx" +alias galiasfunc="vim /Users/vgg/bashrc.d/03functions.bash.osx" +alias gonotts="ssh $GPUServer" +alias gunzip="gzip -d" +alias hkp0="ssh 192.168.0.200" +alias phkp0="ping 192.168.0.200" +alias hkp1="ssh hongkongphooey.is-a-geek.net" +alias phkp1="ping hongkongphooey.is-a-geek.net" +alias hkp2="ssh hongkongphooy.ddns.net" +alias phkp2="ping hongkongphooy.ddns.net" +alias jports="java -jar /Users/vgg/bin/JPortsUI.jar &" +alias lo="logout" +alias l="ls -pCFG" +alias ls="ls -pCFG" +alias ll='ls -alF' +alias la='ls -A' +alias less_alias="less /Users/vgg/.bashrc.d/02aliases.bash.osx" +alias less_env="less /Users/vgg/.bashrc.d/01environ.bash.osx" +alias less_func="less /Users/vgg/.bashrc.d/03functions.bash.osx" +alias prot="chmod og-rx" +alias pre2="novacom -d roadrunner-linux -t open tty://" +alias pre3="novacom -d mantaray-linux -t open tty://" +alias touchpad="novacom -d topaz-linux -t open tty://" +alias ralias=". /Users/vgg/.bashrc.d/01environ.bash.osx ; . /Users/vgg/.bashrc.d/02aliases.bash.osx; . /Users/vgg/.bashrc.d/03functions.bash.osx" +alias restartssh="sudo launchctl stop com.openssh.sshd" +alias refind-fix=". /Users/vgg/bin/refind-fix.sh" +alias rm="rm -f" +alias sucl="ssh -XC zuserver1.star.ucl.ac.uk" +alias uefi="sudo diskutil unmount /EFI" +alias vlc="/Applications/VLC.app/Contents/MacOS/vlc" +alias wanip="dig +short myip.opendns.com @resolver1.opendns.com" +alias wh="echo $cwd" +alias wosqi="java -jar $COMP/Palm/webos/Homebrew/Tools/01-newWebOSQuickInstall-4.6.0.jar &" + +############################################################################### +# +# General --- }}} +# +############################################################################### +############################################################################### +# +# ANALYSES SOFTWARE --- {{{ +# +############################################################################### + +alias heainit=". $HEADAS/headas-init.sh" +alias ciao="heainit;. $Astro/sw/CIAO/ciao-4.5/bin/ciao.bash" +alias ds9="$VMD/Astro/X-Ray/ds9/ds9" +alias goaips=". $VMD/Astro/Radio/AIPS/LOGIN.SH" +alias goroot=". $VMD/Astro/ROOT/root_install/bin/thisroot.sh" +alias gog4=". $VMD/Astro/GEANT4/geant4.9.6/geant4.9.6-install/bin/geant4.sh" +alias sasinit="heainit; . $SASDIR/setsas.sh" +alias setodf="export SAS_ODF=${PWD}" + +############################################################################### +# +# ANALYSES SOFTWARE --- }}} +# +############################################################################### +############################################################################### +# +# 'NIX COMMANDS AND ALIASES --- }}} +# +############################################################################### diff --git a/.bashrc.d/03functions.bash.linux b/.bashrc.d/03functions.bash.linux new file mode 100755 index 0000000..21cd5f8 --- /dev/null +++ b/.bashrc.d/03functions.bash.linux @@ -0,0 +1,5947 @@ +########################################################### +# +# #-------- Functions #-------- {{{ +# +########################################################### +########################################################### +#------------Network {{{ +# +# Identify ethernet device, typically eth0, but when the interface +# is defined by udev this will be different (eg. enp2s0f0). The interfaces +# can be found in /proc/net/dev +# + +ip_geteif(){ + export ETHERNET_IF=`{cat /proc/net/dev | awk 'NR>2' | awk '/e/' | awk -F: '{gsub(/ /,"",$1);print $1}' ; }` +} +# Identify wireless device, typically wlan0, but when the interface +# is defined by udev this will be different (eg. wlp3s0b1). The interfaces +# can be found in /proc/net/dev +# + +ip_getwif(){ + export WIRELESS_IF=`{cat /proc/net/dev | awk 'NR>2' | awk '/w/' | awk -F: '{gsub(/ /,"",$1);print $1}' ; }` +} + +# Check to see if you have external connection and if so get the ip address. +# +ip_chkextnw(){ + if ping -q -c 1 -W 1 8.8.8.8 > /dev/null ; then + echo -e "$1 : External:\t `wget -qO - http://icanhazip.com`" ; + else + echo -e "$1 : No External Network...\n"; + fi +} + +# Check to see if the interface is up and if so obtain the internal ip address +ip_ifup(){ + unset operstateFile ; + operstateFile="/sys/class/net/$1/operstate" ; + if [[ $(cat $operstateFile ) == "up" ]] ; + then + # check to see if external network is available + ip_chkextnw $1 ; + echo -e "$1 : Internal:\t `ip addr show $1 | grep inet\ | awk '{print $2}' | awk -F/ '{print $1}'`" ; + else + echo -e "$1 : No Network...\n"; + fi +} + +# Display the network information +# +ip_show(){ + ip_geteif ; + ip_getwif ; + + ip_ifup $ETHERNET_IF ; + ip_ifup $WIRELESS_IF ; +} +# +# --- }}} +########################################################### +#------------Start up Message - Disk Size {{{ +# Print out a table of disk usage at start up +startup_diskUsage(){ + +df -hl | grep /dev/sda | sort -k6 | awk '!/efi/' | awk '{printf("%-12s\t:%5s /%5s free (%4s used)\n",$6,$4,$2,$5)}' ; + +} +# +# --- }}} +########################################################### +# ----------- VPNs {{{ +# + +mlvn-up(){ + nmcli radio wifi on && + nmcli con up id VM1835498 && + vpn-up 80 ; +} + +mlvn-dn(){ + vpn-dn 80 && + nmcli con down id VM1835498 && + nmcli radio wifi off ; +} + +car-wlan-up(){ + nmcli con up id car-wlan ; +} + +car-wlan-dn(){ + nmcli con down id car-wlan ; +} + +eduroam-up(){ + nmcli con up id eduroam ; +} + +eduroam-dn(){ + nmcli con down id eduroam ; +} + +# +# +vpn-import(){ +# create a new vpn connection and import an .ovpn file +#for FILE1 in ~/AirVPN-OVPN/*.ovpn ; do FILE2=`basename -s .ovpn $FILE1` ; nm-import-openvpn $FILE1 $FILE2; done + FILE1="$1" + FILE2=`basename -s .ovpn $FILE1` ; + nm-import-openvpn $FILE1 $FILE2 ; + sudo cp $FILE2 /etc/NetworkManager/system-connections/ ; + sudo chmod 600 /etc/NetworkManager/system-connections/$FILE2 ; + sudo nmcli con load /etc/NetworkManager/system-connections/$FILE2 ; +} +# +# + +vpn_list_avail(){ + nmcli con show | awk '/vpn/ {print NR, $1}' ; } +vpn_list_AT(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_AT|_Austria/ {print NR, $1}' ; } +vpn_list_BE(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_BE|_Belgium/ {print NR, $1}' ; } +vpn_list_BG(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_BG|_Bulgaria/ {print NR, $1}' ; } +vpn_list_CA(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_CA|_Canada/ {print NR, $1}' ; } +vpn_list_CH(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_CH|_Switzerland/ {print NR, $1}' ; } +vpn_list_CZ(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_CZ|_Czech-Republic/ {print NR, $1}' ; } +vpn_list_DE(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_DE|_Germany/ {print NR, $1}' ; } +vpn_list_ES(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_ES|_Spain/ {print NR, $1}' ; } +vpn_list_FR(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_FR/ {print NR, $1}' ; } +vpn_list_GB(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_GB|_United-Kingdom/ {print NR, $1}' ; } +vpn_list_HK(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_HK|_Hong-Kong/ {print NR, $1}' ; } +vpn_list_LT(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_LT|_Lithuania/ {print NR, $1}' ; } +vpn_list_LV(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_LV|_Latvia/ {print NR, $1}' ; } +vpn_list_NL(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_NL|_Netherlands/ {print NR, $1}' ; } +vpn_list_RO(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_RO|_Romania/ {print NR, $1}' ; } +vpn_list_SE(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_SE|_Sweden/ {print NR, $1}' ; } +vpn_list_SG(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_SG|_Singapore/ {print NR, $1}' ; } +vpn_list_UA(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_UA|_Ukraine/ {print NR, $1}' ; } +vpn_list_US(){ + nmcli con show | awk '/vpn/ {print $1}' | awk '/_US|_United-States/ {print NR, $1}' ; } + +vpn_select(){ + nmcli con show | awk '/vpn/ {print $1}' | awk -v var1=$1 'NR==var1 {print $1}' ; } + +vpn-up(){ + if [ $# -lt 1 ]; then + echo -e "Before you can connect to the required vpn location, use vpn_list_avail to list all available vpns." + echo -e "Alternatively you can use one of the country specific vpn lists, eg: vpn_list_GB or vpn_list_US, etc." + echo -e "Note the index number for the required vpn." + echo -e "vpn-up will then connect to the selected location" + echo -e "\n\nUsage:\n$0 <IndexNumber>" + echo -e "\nExample:\n$0 76\n" + return 1 + fi + + vpn_select $1 | awk '{system("nmcli con up id " $1)}' ; } + +vpn-dn(){ + nmcli con show --active | awk '/vpn/ {print $1}' | awk '{system("nmcli con down id " $1)}' ; } + +vpn_am-up(){ + nmcli con up id AirVPN_America_UDP-443 } +vpn_am-dn(){ + nmcli con down id AirVPN_America_UDP-443 } +vpn_as-up(){ + nmcli con up id AirVPN_Asia_UDP-443 } +vpn_as-dn(){ + nmcli con down id AirVPN_Asia_UDP-443 } +vpn_cato-up(){ + nmcli con up id AirVPN_CA-Toronto-Ontario_Agena_UDP-443 } +vpn_cato-dn(){ + nmcli con down id AirVPN_CA-Toronto-Ontario_Agena_UDP-443 } +vpn_eu-up(){ + nmcli con up id AirVPN_Europe_UDP-443 } +vpn_eu-dn(){ + nmcli con down id AirVPN_Europe_UDP-443 } +vpn_gblon1-up(){ + nmcli con up id AirVPN_GB-London_Bellatrix_UDP-443 } +vpn_gblon1-dn(){ + nmcli con down id AirVPN_GB-London_Bellatrix_UDP-443 } +vpn_gblon2-up(){ + nmcli con up id AirVPN_GB-London_Algedi_UDP-443 } +vpn_gblon2-dn(){ + nmcli con down id AirVPN_GB-London_Algedi_UDP-443 } +vpn_gblon3-up(){ + nmcli con up id AirVPN_GB-London_Alshain_UDP-443 } +vpn_gblon3-dn(){ + nmcli con down id AirVPN_GB-London_Alshain_UDP-443 } +vpn_gblon4-up(){ + nmcli con up id AirVPN_GB-London_Asterion_UDP-443 } +vpn_gblon4-dn(){ + nmcli con down id AirVPN_GB-London_Asterion_UDP-443 } +vpn_gbmdh-up(){ + nmcli con up id AirVPN_GB-Maidenhead_Carinae_UDP-443 } +vpn_gbmdh-dn(){ + nmcli con down id AirVPN_GB-Maidenhead_Carinae_UDP-443 } +vpn_gbman-up(){ + nmcli con up id AirVPN_GB-Manchester_Nashira_UDP-443 } +vpn_gbman-dn(){ + nmcli con down id AirVPN_GB-Manchester_Nashira_UDP-443 } +vpn_hk-up(){ + nmcli con up id AirVPN_HK-HongKong_Yed_UDP-443 } +vpn_hk-dn(){ + nmcli con down id AirVPN_HK-HongKong_Yed_UDP-443 } +vpn_us-up(){ + nmcli con up id AirVPN_United-States_UDP-443 } +vpn_us-dn(){ + nmcli con down id AirVPN_United-States_UDP-443 } +vpn_usla-up(){ + nmcli con up id AirVPN_US-LosAngeles_Sabik_UDP-443 } +vpn_usla-dn(){ + nmcli con down id AirVPN_US-LosAngeles_Sabik_UDP-443 } + +# --- }}} +############################################################ +#------------ Login / Shell {{{ +prompt_bash() { + export PS1="${Color_off}\ + [${Cyan}\u${Color_off}@${Yellow}\h${Color_off}] \ + ${BBlue}\w${Color_off}\\$ " } +# --- }}} +############################################################ +#--- macfanctld--- {{{ +# +macf(){ + sudo /usr/sbin/macfanctld; + sudo /usr/sbin/thermald; + sudo systemctl start tlp; + sudo tlp start ; } +# --- }}} +############################################################ +#--- compile neomutt--- {{{ +# shell function to compile neomutt: + + compile_neomutt () { + #./configure prefix=/usr/local/bin -enable-pop -enable-imap -enable-smtp -with-curses \ + ./configure prefix=/usr/local/bin -enable-pop -enable-imap -enable-smtp -with-slang \ + -enable-sidebar -enable-notmuch -enable-nntp -enable-compressed \ + -enable-hcache -with-tokyocabinet -with-ssl -with-gnutls -with-idn -with-included-gettext \ + -with-regex -enable-locales-fix -disable-dependency-tracking } + +# --- }}} +############################################################ +#--- zsh history fix--- {{{ +# +zsh_hist_fix(){ + cd $HOME; mv -f .zsh_history .zsh_history_bad; + strings .zsh_history_bad > .zsh_history; + fc -R .zsh_history; rm -f .zsh_history_bad + } + +# --- }}} +############################################################ +#--- man --- {{{ +# +#man() { + #LESS_TERMCAP_md=$'\e[01;31m' \ + #LESS_TERMCAP_me=$'\e[0m' \ + #LESS_TERMCAP_se=$'\e[0m' \ + #LESS_TERMCAP_so=$'\e[01;44;33m' \ + #LESS_TERMCAP_ue=$'\e[0m' \ + #LESS_TERMCAP_us=$'\e[01;32m' \ + #command man "$@" +#} +## --- }}} +############################################################ +#--- simple note taking function --- {{{ +# +notes(){ + if [ ! -z "$1" ]; then + echo $(date +"%Y%m%d-%H%M%S") $@ >> "$HOME/vimwiki/TempNotes.md" + else + cat - >> "$HOME/vimwiki/TempNotes.md" + fi + } + +# --- }}} +############################################################ +#--- KeepassX command line interface --- {{{ +# +kpcli(){ + kpcli --kdb $HOME/Documents/20151120.kdbx + } + +# --- }}} +########################################################### +#-------- Transmission CLI {{{ +# this is notes for video: http://www.youtube.com/watch?v=ee4XzWuapsE +#------------------------------------------------------ +# lightweight torrent daemon, has option for cli, webui, ncurses, and gui frontend +# demo video: http://www.youtube.com/watch?v=ee4XzWuapsE +# WebUI: http://localhost:9091/transmission/web/ +# http://192.168.1.xxx:9091/transmission/web/ +tsm-clearcompleted() { + transmission-remote -l | grep 100% | grep Done | \ + awk '{print $1}' | xargs -n 1 -I % transmission-remote -t % -r ;} +tsm() { transmission-remote --list ;} + # numbers of ip being blocked by the blocklist +# credit: smw from irc #transmission +tsm-count() { echo "Blocklist rules:" $(curl -s --data \ +'{"method": "session-get"}' localhost:9091/transmission/rpc -H \ +"$(curl -s -D - localhost:9091/transmission/rpc | grep X-Transmission-Session-Id)" \ +| cut -d: -f 11 | cut -d, -f1) ;} +# demo video: http://www.youtube.com/watch?v=TyDX50_dC0M +tsm-blocklist() { $PATH_SCRIPTS/blocklist.sh ;} # update blocklist +tsm-daemon() { transmission-daemon ;} +tsm-quit() { killall transmission-daemon ;} +tsm-altspeedenable() { transmission-remote --alt-speed ;} # limit bandwidth +tsm-altspeeddisable() { transmission-remote --no-alt-speed ;} # dont limit bandwidth +tsm-add() { transmission-remote --add "$1" ;} +tsm-askmorepeers() { transmission-remote -t"$1" --reannounce ;} +tsm-pause() { transmission-remote -t"$1" --stop ;} # <id> or all +tsm-start() { transmission-remote -t"$1" --start ;} # <id> or all +tsm-purge() { transmission-remote -t"$1" --remove-and-delete ;} # delete data also +tsm-remove() { transmission-remote -t"$1" --remove ;} # leaves data alone +tsm-info() { transmission-remote -t"$1" --info ;} +tsm-speed() { while true;do clear; transmission-remote -t"$1" -i | grep Speed;sleep 1;done ;} +tsm-verify() { transmission-remote -t"$1" --verify ;} # verify a torrent + +# https://github.com/fagga/transmission-remote-cli +# demo video: http://www.youtube.com/watch?v=hLz7ditUwY8 +tsm-ncurse() { tremc ;} +#extract torrent files from magnet link +tsm-m2t(){ aria2c --bt-metadata-only=true --bt-save-metadata=true "$1"} + +# --- }}} +############################################################ +#-------- Firefox profile{{{ +firefox_J() { /usr/bin/firefox -no-remote -P Jupyter > /dev/null 2>&1 & } +firefox_Y() { /usr/bin/firefox -no-remote -P Youtube & } +firefox_T() { /usr/bin/firefox -no-remote -P Torrent & } +# --- }}} +############################################################ +#-------- DVD playback{{{ +dvd_play() { mplayer dvdnav:// -mouse-movements \ + -dvd-device /dev/dvd ;} +# --- }}} +############################################################ +#-------- DVD rip{{{ +dvd_rip() { + rawout=$(HandBrakeCLI -i /dev/dvd -t 0 2>&1 >/dev/null); + count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l); + for i in $(seq $count); do HandBrakeCLI -i /dev/dvd -t $i -Z "Very Fast 720p30" -a 2 -o ${1}.mp4 ; done + } +# --- }}} +############################################################ +#-------- Configurations {{{ +#------------------------------------------------------ +cfg-afewrc() { $EDITOR ~/.config/afew/config ;} +cfg-alacritty() { $EDITOR ~/.config/alacritty;} +cfg-bashrc() { $EDITOR $HOME/.bashrc ;} +cfg-castero() { $EDITOR ~/.config/castero/castero.conf ;} +cfg-conkyrc() { $EDITOR $HOME/.conkyrc ;} +cfg-dotalias() { $EDITOR $HOME/.bashrc.d/02aliases.bash.linux ;} +cfg-dotenvs() { $EDITOR $HOME/.bashrc.d/01environ.bash.linux ;} +cfg-dotfuncs() { $EDITOR $HOME/.bashrc.d/03functions.bash.linux ;} +cfg-dotopts() { $EDITOR $HOME/.bashrc.d/04options.bash.linux ;} +cfg-dunstrc() { $EDITOR $XDG_CONFIG_HOME/dunst/dunstrc ;} +cfg-fstab() { sudo $EDITOR /etc/fstab ;} +cfg-group() { sudo $EDITOR /etc/group ;} +cfg-grub() { sudo $EDITOR /etc/default/grub ;} +cfg-hosts() { sudo $EDITOR /etc/hosts ;} +cfg-i3wm() { $EDITOR ~/.i3/config ;} +cfg-i3blocks() { $EDITOR ~/.i3/i3blocks.conf ;} +cfg-inputrc() { $EDITOR ~/.inputrc ;} +cfg-livestreamer() { $EDITOR ~/.livestreamerrc ;} +cfg-mbsyncrc() { $EDITOR ~/.mbsyncrc ;} +cfg-mc() { $EDITOR ~/.config/mc/ini ;} +cfg-mcomix() { $EDITOR ~/.config/mcomix/keybindings.conf ;} +cfg-mpds() { sudo $EDITOR /etc/mpd.conf ;} +cfg-mpd() { $EDITOR ~/.config/mpd/mpd.conf ;} +cfg-mplayer() { $EDITOR ~/.config/mplayer/config ;} +cfg-mpv() { $EDITOR ~/.config/mpv/input.conf ;} +cfg-msmtprc() { $EDITOR ~/.config/msmtp/config ;} +cfg-muttrc() { $EDITOR ~/.config/mutt/muttrc ;} +cfg-muttrc-h() { $EDITOR ~/.config/mutt/accounts/1-herts.muttrc ;} +cfg-muttrc-b() { $EDITOR ~/.config/mutt/accounts/2-bt.muttrc ;} +cfg-muttrc-bo() { $EDITOR ~/.config/mutt/accounts/3-bt-offline.muttrc ;} +#cfg-mutt-g1() { $EDITOR ~/.mutt/account.com.gmail.gfgm ;} +#cfg-mutt-g2() { $EDITOR ~/.mutt/account.com.gmail.vggm ;} +cfg-nanorc() { $EDITOR ~/.nanorc;} +cfg-ncmpcpp() { $EDITOR ~/.config/ncmpcpp/config ;} +cfg-ncmpcpp-bindings() { $EDITOR ~/.config/ncmpcpp/bindings ;} +cfg-newsboat() { $EDITOR ~/.newsboat/config ;} +cfg-newsboat-queue() { $EDITOR ~/.newsboat/queue ;} +cfg-newsboat-urls() { $EDITOR ~/.newsboat/urls ;} +cfg-notmuchrc() { $EDITOR ~/.notmuch-config ;} +cfg-nvim() { $EDITOR ~/.config/nvim/init.vim ;} +cfg-offlineimap() { $EDITOR $XDG_CONFIG_HOME/offlineimap/config ;} +cfg-profile() { $EDITOR ~/.profile ;} +cfg-pulseaudio() { sudo $EDITOR /etc/pulse/default.pa ;} +cfg-pyload() { $EDITOR ~/.pyload/pyload.conf ;} +cfg-pyradio() { $EDITOR ~/.pyradio.csv ;} +cfg-qutebrowser() { $EDITOR ~/.config/qutebrowser/config.py ;} +#cfg-qutebrowser() { $EDITOR ~/.config/qutebrowser/qutebrowser.conf ;} +cfg-qutebrowser-keys() { $EDITOR ~/.config/qutebrowser/keys.conf ;} +cfg-ranger() { $EDITOR ~/.config/ranger/rc.conf ;} +cfg-ranger-rifle() { $EDITOR ~/.config/ranger/rifle.conf ;} +cfg-ranger-scope() { $EDITOR ~/.config/ranger/scope.sh ;} +cfg-rofi() { $EDITOR ~/bin/scripts/rofi-scripts-collection/rofi-bangs.sh ;} +cfg-ssh-client() { sudo $EDITOR /etc/ssh/ssh_config ;} +cfg-ssh-daemon() { sudo $EDITOR /etc/ssh/sshd_config ;} +cfg-sudoers() { sudo $EDITOR /etc/sudoers ;} +cfg-termite() { $EDITOR ~/.config/termite/config ;} +cfg-tmuxrc() { $EDITOR ~/.tmux.conf ;} +cfg-torrc() { sudo $EDITOR /etc/tor/torrc ;} +cfg-tpb() { $EDITOR $HOME/bin/scripts/torrshellscripts-master/thepiratebay_se/tpb.sh ;} +cfg-transmission-daemon() { $EDITOR ~/.config/transmission-daemon/settings.json ;} +cfg-transmission-ncurse() { $EDITOR ~/.config/transmission-remote-cli/settings.cfg ;} +cfg-trz() { $EDITOR $HOME/bin/scripts/torrshellscripts-master/torrentz_eu/torrentz_eu.sh ;} +cfg-tridactyl() { $EDITOR $HOME/.config/tridactyl/tridactylrc ;} +cfg-urlview() { $EDITOR ~/.urlview ;} +cfg-updatedb() { sudo $EDITOR /etc/updatedb.conf ;} +cfg-vifmrc() { $EDITOR ~/.vifmrc ;} +cfg-vimrc() { $EDITOR ~/.vimrc ;} +cfg-w3m() { $EDITOR ~/.w3m/config ;} +cfg-weechat() { $EDITOR ~/.weechat/weechat.conf ;} +cfg-w3m-keymap() { $EDITOR ~/.w3m/keymap ;} +cfg-xdefaults() { $EDITOR ~/.Xdefaults ;} +cfg-xresources() { $EDITOR ~/.Xresources ;} +cfg-ytdl() { $EDITOR $XDG_CONFIG_HOME/youtube-dl/config ;} +cfg-zshrc() { $EDITOR ~/.zshrc ;} +cfg-zurlrc() { $EDITOR ~/.zurlrc ;} +cfg-i3keylist(){ +echo " \$mod+{}" +echo " =======" +echo " \$mod+a focus parent" +echo " \$mod+b split h" +echo " \$mod+d exec --no-startup-id dmenu_run" +echo " \$mod+e exec --no-startup-id $term -e \"mutt -F ~/.muttrc\"" +echo " \$mod+f fullscreen toggle" +echo " \$mod+h focus left" +echo " \$mod+j focus down" +echo " \$mod+k focus up" +echo " \$mod+l focus right" +echo " \$mod+m exec --no-startup-id /usr/bin/mplayer " +echo " \$mod+n border normal" +echo " \$mod+r exec --no-startup-id $term -e ranger" +echo " \$mod+t layout toggle split" +echo " \$mod+u border none" +echo " \$mod+v split v" +echo " \$mod+w exec --no-startup-id $browser" +echo " \$mod+y border pixel 2" +echo " \$mod+z split v, layout stacking" +echo " \$mod+space focus mode_toggle" +echo " \$mod+Return exec --no-startup-id " +echo " \$mod+grave exec --no-startup-id $HOME/bin/scripts/any_term_dropdown.sh" +echo " \$mod+F11 exec --no-startup-id amixer set Master 5%-" +echo " \$mod+F12 exec --no-startup-id amixer set Master 5%+" +echo " \$mod+F1 exec --no-startup-id xbacklight -dec 5 " +echo " \$mod+F2 exec --no-startup-id xbacklight -inc 5 " +echo " \$mod+F4 mode \"$mode_system\"" +echo "" +echo " =======" +echo " \$mod+Shift+{}" +echo " =======" +echo " \$mod+Shift+c reload" +echo " \$mod+Shift+d exec --no-startup-id rofi -show run -lines 10 -eh 2 -width 80 " +echo " -padding \$(($(xwininfo -root | awk '/Height/ {print $2}')/4)) " +echo " -opacity \"75\" -bw 0 -bc \"\$base02\" -bg \"$base02\" -fg \"$base03\" " +echo " -hlbg \"\$base02\" -hlfg \"#9575cd\" -font \"System San Francisco Display 12\"" +echo " \$mod+Shift+e exec --no-startup-id \"i3-nagbar -t warning -m 'You pressed the exit shortcut.\"" +echo " Do you really want to exit i3? This will end your X session.' -b \ " +echo " 'Yes, exit i3' 'i3-msg exit'" +echo " \$mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default" +echo " \$mod+Shift+h move left" +echo " \$mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter" +echo " \$mod+Shift+j move down" +echo " \$mod+Shift+k move up" +echo " \$mod+Shift+l move right" +echo " \$mod+Shift+m exec --no-startup-id /usr/bin/mpv" +echo " \$mod+Shift+n exec --no-startup-id /usr/bin/nm-applet" +echo " \$mod+Shift+q kill" +echo " \$mod+Shift+r restart" +echo " \$mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent " +echo " \$mod+Shift+u resize shrink height 10 px or 10 ppt" +echo " \$mod+Shift+w exec --no-startup-id /usr/local/bin/eclipse/eclipse " +echo " \$mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube" +echo " \$mod+Shift+space floating toggle" +echo " \$mod+Shift+Return exec --no-startup-id $term -e tmux" +echo "" +echo " =======" +echo " \$mod+Ctrl+{}" +echo " =======" +echo " \$mod+Ctrl+r mode \"resize\" " +echo " \$mod+Ctrl+d gaps inner current set 0; gaps outer current set 0" +echo " \$mod+Ctrl+t gaps inner current set 15; gaps outer current set 15" +echo "" +echo " \$mod+Ctrl+i resize grow height 10 px or 10 ppt" +echo " \$mod+Ctrl+o resize grow width 10 px or 10 ppt" +echo " \$mod+Ctrl+u resize shrink height 10 px or 10 ppt" +echo " \$mod+Ctrl+y resize shrink width 10 px or 10ppt" +echo "" +echo " \$mod+Ctrl+h gaps inner current plus 5" +echo " \$mod+Ctrl+j gaps outer current minus 5" +echo " \$mod+Ctrl+k gaps outer current plus 5" +echo " \$mod+Ctrl+l gaps inner current minus 5" +echo " \$mod+Ctrl+space exec --no-startup-id $HOME/bin/scripts/rofi-scripts-collection/rofi-bangs.sh \"" +echo " -font \"System San Francisco Display 12\" " +echo " \$mod+Ctrl+Return exec --no-startup-id guake" +echo "" +echo " =======" + + +##################################################### +# +# --- }}} +} +# --- }}} +########################################################### +#-------- Configurations Reload {{{ +#------------------------------------------------------ +rld-bashrc() { source ~/.bashrc ;} +rld-font() { fc-cache -v -f ;} +rld-grub() { sudo grub-mkconfig -o /boot/grub/grub.cfg ;} +rld-updatedb() { sudo updatedb ;} +rld-xdefaults() { xrdb ~/.Xdefaults ;} +rld-xmodmap() { xmodmap ~/.Xmodmap ;} +rld-xresources() { xrdb -load ~/.Xresources ;} +rld-zshrc() { source ~/.zshrc ;} +# }}} +########################################################### +#-------- IPlayer {{{ + +get_iplayer-list(){ clear ; for FILE in `cat ToDownloadList`; do URI=$FILE; echo "Downloading $URI"; ${HOME}/bin/get_iplayer --modes=flashhigh,hlshigh --url $URI; done} +tvlist(){ clear; + +echo "bbc1" +echo "bbc2" +echo "bbc3" +echo "bbc4" +echo "bbcn" +echo "cbbc" +echo "cbeebies" +echo "itv" +echo "itv2" +echo "itv3" +echo "itv4" +echo "citv" +echo "ch4" +echo "e4" +echo "more4" +echo "film4" +echo "film4+1" +echo "ch5" +echo "5star" +echo "5star+1" +echo "5usa" +echo "5usa+1" +echo "dave" +echo "spike" +echo "universal" +echo "syfy" +echo "sony" +echo "discovery" +echo "vice" +echo "natgeo" +echo "eurosport1" +echo "eurosport2" +echo "boxnation" +echo "nickelodeon" +echo "nickjr" +echo "cartoonnetwork" +echo "boomerang" + +echo "rai1" +echo "rai2" +echo "rai3" +echo "rai4" +echo "rai5" +echo "raipremium" +echo "raimovie" +echo "raisport" +echo "rainews24" +echo "padrepio" + +echo "ewtn" +} + +bbc1(){ streamlink https://tvplayer.com/watch/bbcone 2>&1 & } +bbc2(){ streamlink https://tvplayer.com/watch/bbctwo 2>&1 & } +bbc4(){ streamlink https://tvplayer.com/watch/bbcfour 2>&1 & } +bbcn(){ streamlink https://tvplayer.com/watch/bbcone 2>&1 & } +cbeebies(){ streamlink https://tvplayer.com/watch/cbeebies 2>&1 & } +cbbc(){ streamlink https://tvplayer.com/watch/cbbc 2>&1 & } +itv(){ streamlink https://tvplayer.com/watch/itv 2>&1 & } +itv2(){ streamlink https://tvplayer.com/watch/itv2 2>&1 & } +itv3(){ streamlink https://tvplayer.com/watch/itv3 2>&1 & } +itv4(){ streamlink https://tvplayer.com/watch/itv4 2>&1 & } +citv(){ streamlink https://tvplayer.com/watch/citv 2>&1 & } +ch4(){ streamlink https://tvplayer.com/watch/channel4 2>&1 & } +more4(){ streamlink https://tvplayer.com/watch/more4 2>&1 & } +#e4(){mpv http://46.249.60.210:15099/play/a00h &> /dev/null & } +film4(){mpv http://195.189.203.18:8080/play/a01c &> /dev/null & } +film4_plus1(){mpv http://195.189.203.18:8080/play/a01d &> /dev/null & } +ch5(){ streamlink https://tvplayer.com/watch/five 2>&1 & } +5star(){ streamlink https://tvplayer.com/watch/5star 2>&1 & } +5star_plus1(){mpv http://46.249.60.210:15099/play/a01s &> /dev/null & } +5usa(){mpv http://46.249.60.210:15099/play/a01o &> /dev/null & } +5usa_plus1(){mpv http://46.249.60.210:15099/play/a01p &> /dev/null & } +dave(){ streamlink https://tvplayer.com/watch/dave 2>&1 & } +spike(){ streamlink https://tvplayer.com/watch/spike 2>&1 & } +universal(){ streamlink https://tvplayer.com/watch/universalchannel 2>&1 & } +syfy(){ streamlink https://tvplayer.com/watch/syfy 2>&1 & } +sony(){ streamlink https://tvplayer.com/watch/sonyentertainment 2>&1 & } +discovery(){ streamlink https://tvplayer.com/watch/discovery 2>&1 & } +vice(){ streamlink https://tvplayer.com/watch/viceland 2>&1 & } +natgeo(){ streamlink https://tvplayer.com/watch/nationalgeographic 2>&1 & } +eurosport1(){ streamlink https://tvplayer.com/watch/eurosport1 2>&1 & } +eurosport2(){ streamlink https://tvplayer.com/watch/eurosport2 2>&1 & } +boxnation(){ streamlink https://tvplayer.com/watch/boxnation 2>&1 & } +nickelodeon(){ streamlink https://tvplayer.com/watch/nickelodeon 2>&1 & } +nickjr(){ streamlink https://tvplayer.com/watch/nickjr 2>&1 & } +cartoonnetwork(){ streamlink https://tvplayer.com/watch/cartoonnetwork 2>&1 & } +boomerang(){ streamlink https://tvplayer.com/watch/boomerang 2>&1 & } + +rai1(){ streamlink http://www.raiplay.it/dirette/rai1 2>&1 & } +rai2(){ streamlink http://www.raiplay.it/dirette/rai2 2>&1 & } +rai3(){ streamlink http://www.raiplay.it/dirette/rai3 2>&1 & } +rai4(){ streamlink http://www.raiplay.it/dirette/rai4 2>&1 & } +rainews24(){ streamlink http://www.raiplay.it/dirette/rainews24 2>&1 & } +raisport(){ streamlink http://www.raiplay.it/dirette/raisport 2>&1 & } +raimovie(){ streamlink http://www.raiplay.it/dirette/raimovie 2>&1 & } +raipremium(){ streamlink http://www.raiplay.it/dirette/raipremium 2>&1 & } + +padrepio(){mpv http://5.255.90.175:3000/play/a05l &> /dev/null & } + +ewtn(){mpv http://ewtnmmd.mmdlive.lldns.net/ewtnmmd/42a5a390e56f40d7a5ae90ccd36ce775/playlist.m3u8 &> /dev/null &} + +# }}} +########################################################### +#-------- Novacom {{{ +nova-up(){ echo "nova-up:...:"; sudo -E novacomd -d; } +nova-down(){sudo -E kill -9 $(echo `ps aux | grep novacomd | awk '/root/{print $2}'`); echo "nova-down:...completed:"; } +pre2(){ novacom -d roadrunner-linux -t open tty://; } +pre3(){ novacom -d mantaray-linux -t open tty:// ;} +touchpad(){ novacom -d topaz-linux -t open tty:// ;} +tptoolbox() { sh /home/archlinux/vgg/Computing/Palm/webos/Homebrew/Tools/07-tptoolbox_v42/tptb_v42_nix.sh ;} +veer(){ novacom -d broadway-linux -t open tty:// ;} +preftp(){ ftp preanon@webosftp.qualitis.hu ;} +preweb(){ w3m ftp://preanon@webosftp.qualitis.hu ;} +# }}} +########################################################### +#-------- VirtualBox {{{ + +vbx-list(){ # List available vms + +vboxmanage list vms ; } + +vbx-info(){ # Display info about vm + + if [ $# -lt 1 ]; then + echo -e "Display info for available VirtualBox vms." + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage showvminfo $1 ; +} + +vbx-Start(){ # Start up the vm + + if [ $# -lt 1 ]; then + echo -e "Start up the VirtualBox vm." + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage startvm $1 ; +} + +vbx-start(){ # Start up the vm (headless) + + if [ $# -lt 1 ]; then + echo -e "Start up the VirtualBox vm in headless mode." + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage startvm $1 --type headless ; +} + +vbx-save(){ # Save the state of the vm and then close it down + + if [ $# -lt 1 ]; then + echo -e "Save the state of the Virtual Box vm and then close it down" + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage controlvm $1 savestate ; +} + +vbx-stop(){ # Stop/power down the vm + + if [ $# -lt 1 ]; then + echo -e "Stop/Power down the VirtualBox vm." + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage controlvm $1 poweroff ; +} + +vbx-del(){ # Delete and unregister the vm. Also removes all hard disk images, machine xml file, log files and machine directory. + # Machine should already be powered off. + + if [ $# -lt 1 ]; then + echo -e "Delete and unregister the Virtual Box vm." + echo -e "Virtual Box vm should already be powered off." + echo -e "\nUsage:\n$0 <VM>" + echo -e "\nExample:\n$0 UbuntuVM\n" + return 1 + fi + + vboxmanage unregistervm --delete $1 ; +} + +vbx-sl7(){ ssh -p 3022 vgg@127.0.0.1 ; } # ssh into sl7 vm. +vbx-sl7x(){ ssh -X -p 3022 vgg@127.0.0.1 ; } # ssh into sl7 vm. +vbx-cr8sl7(){ sh ${HOME}/bin/VirtualBoxTest/createvm.sh ; } # Create SL7 vm +vbx-edt-cr8sl7(){ $EDITOR ${HOME}/bin/VirtualBoxTest/createvm.sh ; } # Edit the creation script for SL7 vm + +# }}} +########################################################### +#-------- VMWare {{{ + +#vmw-list(){ # List available vms + +#vboxmanage list vms ; } + +#vmw-info(){ # Display info about vm + + #if [ $# -lt 1 ]; then + #echo -e "Display info for available VirtualBox vms." + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage showvminfo $1 ; +#} + +#vmw-Start(){ # Start up the vm + + #if [ $# -lt 1 ]; then + #echo -e "Start up the VirtualBox vm." + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage startvm $1 ; +#} + +#vmw-start(){ # Start up the vm (headless) + + #if [ $# -lt 1 ]; then + #echo -e "Start up the VirtualBox vm in headless mode." + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage startvm $1 --type headless ; +#} + +#vmw-save(){ # Save the state of the vm and then close it down + + #if [ $# -lt 1 ]; then + #echo -e "Save the state of the Virtual Box vm and then close it down" + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage controlvm $1 savestate ; +#} + +#vmw-stop(){ # Stop/power down the vm + + #if [ $# -lt 1 ]; then + #echo -e "Stop/Power down the VirtualBox vm." + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage controlvm $1 poweroff ; +#} + +#vmw-del(){ # Delete and unregister the vm. Also removes all hard disk images, machine xml file, log files and machine directory. + ## Machine should already be powered off. + + #if [ $# -lt 1 ]; then + #echo -e "Delete and unregister the Virtual Box vm." + #echo -e "Virtual Box vm should already be powered off." + #echo -e "\nUsage:\n$0 <VM>" + #echo -e "\nExample:\n$0 UbuntuVM\n" + #return 1 + #fi + + #vboxmanage unregistervm --delete $1 ; +#} + +#vmw-sl7(){ ssh -p 3022 vgg@127.0.0.1 ; } # ssh into sl7 vm. +#vmw-sl7x(){ ssh -X -p 3022 vgg@127.0.0.1 ; } # ssh into sl7 vm. +#vmw-cr8sl7(){ sh ${HOME}/bin/VirtualBoxTest/createvm.sh ; } # Create SL7 vm +#vmw-edt-cr8sl7(){ $EDITOR ${HOME}/bin/VirtualBoxTest/createvm.sh ; } # Edit the creation script for SL7 vm + +# }}} +########################################################### +#-------- Tmux Sessions {{{ +#------------------------------------------------------ +# tmux helps preventing crashes +# when running vim/nvim from within tmux. +# (https://github.com/tmux/tmux/issues/1593) +#------------------------------------------------------ +# +tmx-main() { + TERM="screen-256color" tmux new-session -s 'WongFeiHong' -d ; + TERM="screen-256color" tmux new-window -n 'Ranger' -c $HOME ; + TERM="screen-256color" tmux send-keys 'ranger' 'Enter' ; + TERM="screen-256color" tmux new-window -n 'Email' -c $HOME ; + TERM="screen-256color" tmux send-keys 'mutt' 'Enter' ; + TERM="screen-256color" tmux new-window -n 'RSS' -c $HOME ; + TERM="screen-256color" tmux send-keys 'newsboat' 'Enter' ; + TERM="screen-256color" tmux new-window -n 'www' -c $HOME; + TERM="screen-256color" tmux send-keys 'w3m -B' 'Enter' ; + TERM="screen-256color" tmux new-window -n 'Torr' -c $HOME ; +# TERM="screen-256color" tmux send-keys 'source activate transmission-py27' 'Enter' ; + TERM="screen-256color" tmux send-keys 'tsm-daemon' 'Enter' ; + TERM="screen-256color" tmux send-keys 'tsm-ncurse' 'Enter' ; + TERM="screen-256color" tmux split-window -v -p 40 ; + TERM="screen-256color" tmux send-keys 'clear' 'Enter' ; + TERM="screen-256color" tmux select-pane -t 1 ; + TERM="screen-256color" tmux send-keys 'clear' 'Enter' ; + TERM="screen-256color" tmux split-window -h -p 50 -t 1 ; + TERM="screen-256color" tmux send-keys 'mpsyt user gotbletu' 'Enter'; + TERM="screen-256color" tmux select-pane -t 3 ; + TERM="screen-256color" tmux select-window -t 1 ; + TERM="screen-256color" tmux -2 attach-session -d ; + +} +tmx-ipy() { + TERM="screen-256color" tmux new-session -n 'IPython' -d 'nvim'; + TERM="screen-256color" tmux split-window -h 'ipython'; + TERM="screen-256color" tmux -2 attach-session -d ; +} + +# }}} +########################################################### +#-------- System Information {{{ +#------------------------------------------------------ +m-sound() { arecord -L && arecord -l && cat /proc/asound/pcm ;} #List audio capture card/mic +m-distro() { uname -a && lsb_release -a ;} +m-connectip() { + echo "--------------- Connected Devices -----------------" + nmap -sn $(netstat -rn | awk 'FNR == 3 {print $2}')/24 + echo "---------------------------------------------------" + +} + +# uses ip or ifconfig, good on older or newer system +m-ip() { + echo "--------------- Network Information ---------------" + # show router ip +echo "router ip:" $(netstat -rn | awk 'FNR == 3 {print $2}') +## newer system like archlinux +#ip addr | awk '/global/ {print $1,$2}' | cut -d\/ -f1 +#ip addr | awk '/global/ {print $3,$4}' +#ip addr | awk '/ether/ {print $1,$2}' +#ip addr | awk '/scope link/ {print $1,$2}' | cut -d\/ -f1 +## older system like debian +# #ifconfig | awk '/inet addr/ {print $1,$2}' | awk -F: '{print $1,$2}' +# #ifconfig | awk '/Bcast/ {print $3}' | awk -F: '{print $1,$2}' +# #ifconfig | awk '/inet addr/ {print $4}' | awk -F: '{print $1,$2}' +# #ifconfig | awk '/HWaddr/ {print $4,$5}' +# #ifconfig | awk '/Scope:Link/ {print $1,$3}' | cut -d\/ -f1 +## echo External IP $(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+") +echo External IP: $(curl -s http://ipecho.net/plain) + echo "---------------------------------------------------" +} +# +#}}} +########################################################### +#-------- PulseAudio Switcher CLI v2 {{{ +#------------------------------------------------------ +# DEMO: https://www.youtube.com/watch?v=jhv-2pNWfr4 +# DESC: switch audio stream to different output (HDMI, Headphone, Speakers ...etc) +# REF: http://askubuntu.com/a/18210 + +pa-global() { + if [ $# -lt 1 ]; then + echo -e "pulseaudio redirect audio of all running app to another device" + echo -e "\nUsage:\n$0 <device_index_number>" + echo -e "\nExample:\n$0 0 \n" + echo "===============" + echo "Sound Devices" + pacmd list-sinks | awk '/index/ || /name:/' + return 1 + fi + + # list all apps in playback tab (ex: cmus, mplayer, vlc) + inputs=($(pacmd list-sink-inputs | awk '/index/ {print $2}')) +# set the default output device + pacmd set-default-sink $1 &> /dev/null +# apply the changes to all running apps to use the new output device + for i in ${inputs[*]}; do pacmd move-sink-input $i $1 &> /dev/null; done + +} +pa-solo() { + if [ $# -lt 2 ]; then + echo -e "pulseaudio redirect audio of one running app to another device" + echo -e "\nUsage:\n$0 <app_index_number> <device_index_number>" + echo -e "\nExample:\n$0 2302 0 \n" + echo "===============" + echo "Running Apps" + pacmd list-sink-inputs | awk '/index/ || /application.name /' + echo "===============" + echo "Sound Devices" + pacmd list-sinks | awk '/index/ || /name:/' + return 1 + fi + + # set the default output device + pacmd set-default-sink "$2" &> /dev/null +# apply changes to one running app to use the new output device + pacmd move-sink-input "$1" "$2" &> /dev/null +# +} +pa-c(){ + pulseaudio -vv --check +} +pa-s(){ + pulseaudio -vv --start +} +pa-k(){ + pulseaudio -vv --kill +} +pa-ps(){ + ps aux | grep -i pulseaudio +} + +#}}} +########################################################### +#-------- Calibre CLI v3 {{{ +#------------------------------------------------------ +# DEMO: http://www.youtube.com/watch?v=FeoVsC4U_0A +# DESC: ebook manager supports many formats and devices; interfaces with cli, webui, gui +# URL: http://manual.calibre-ebook.com/cli/calibredb.html + +cmx-list() { + if [ $# -lt 1 ]; then + echo -e "calibredb list files of a library" + echo -e "\nUsage:\n$0 <library>" + echo -e "\nExample:\n$0 \$cbcomic\n" + return 1 + fi + + calibredb list -f authors,title,tags,rating --library-path "$1" +# +} + +cmx-search() { + if [ $# -lt 2 ]; then + echo -e "calibredb search files of a library" + echo -e "\nUsage:\n$0 <library> <keywords>" + echo -e "\nExample:\n$0 \$cbcomic marvel" + echo -e "$0 \$cbcomic 'the walking dead'\n" + return 1 +fi + + calibredb list -s "${@:2}" -f authors,title,tags,rating --library-path "$1" +# +} + +cmx-add() { + if [ $# -lt 2 ]; then + echo -e "calibredb add new files to a library" + echo -e "\nUsage:\n$0 <library> <file>" + echo -e "\nExample:\n$0 \$cbcomic file.cbz" + echo -e "$0 \$cbcomic file1.cbz file2.cbz" + echo -e "$0 \$cbcomic file.epub file2.pdf file3.cbr\n" + return 1 + fi + + calibredb add "${@:2}" --library-path "$1" + +} + +cmx-remove() { + if [ $# -lt 2 ]; then + echo -e "calibredb remove files from a library" + echo -e "\nUsage:\n$0 <library> <id>" + echo -e "$0 <library> <range>" + echo -e "\nExample:\n$0 \$cbcomic 100" + echo -e "$0 \$cbcomic 50-55" + echo -e "$0 \$cbcomic 100,120-127" + return 1 + fi + + calibredb remove "${@:2}" --library-path "$1" +# +} + +cmx-show() { + if [ $# -lt 2 ]; then + echo -e "calibredb show file metadata from a library" + echo -e "\nUsage:\n$0 <library> <id>" + echo -e "\nExample:\n$0 \$cbcomic 16" + return 1 + fi + + calibredb show_metadata "${@:2}" --library-path "$1" | html2text +# +} + + +cmx-recipes() { ebook-convert --list-recipes | less ;} + +# WebUI content server +# http://manual.calibre-ebook.com/cli/calibre-server.html +# http://192.168.1.xxx:port +cmx-quit() { kill $(ps -ef | grep -i '[C]alibre-server' | awk '{print $2}') ;} +cmx-server() { + # start all content server on different ports +calibre-server -p 57770 --daemonize --with-library "$CMX_CALIBRE" +calibre-server -p 57771 --daemonize --with-library "$CMX_COMICS" +calibre-server -p 57772 --daemonize --with-library "$CMX_MAGS" + +} +cmx-bkv(){ + if [ $# -lt 2 ]; then + echo -e "launch ebook-viewer with a particular book from a library" + echo -e "\nUsage:\n$0 <library> <id>" + echo -e "\nExample:\n$0 \$cbcomic 16" + return 1 + fi + + BKDIR=`find ${CMX_CALIBRE} -name "*$2*"` + find $BKDIR -type f \( -name "*.epub" -o -name "*.mobi" -o -name "*.pdf" \) -exec /usr/bin/ebook-viewer {} \; & +} + +calibre-update(){ + sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.py | \ + sudo python -c "import sys; main=lambda:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main()" +} + +#}}} +########################################################### +#-------- YouTube download MP3 {{{ + +ytdl-mp3(){ + if [ $# -lt 1 ]; then + echo -e "This uses youtube-dl to download a music video from youtube" + echo -e "and then convert it to an mp3 file." + echo -e " " + echo -e "\n\nUsage:\n$0 <FILE NAME>" + echo -e "\nExample:\n$0 input.file\n" + return 1 + fi + + YTrequest $1 ; + +} +# }}} +########################################################### +########################################################### +#-------- Convert to Audio {{{ +#------------------------------------------------------ +# https://trac.ffmpeg.org/wiki/Encode/MP3 +# https://trac.ffmpeg.org/wiki/Encode/AAC +# https://trac.ffmpeg.org/wiki/TheoraVorbisEncodingGuide + +convert2audio_mp3() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.m4a" + echo -e "\nmultiple: $0 file1.m4a file2.m4a file3.m4a" + echo -e "\nwildcard: $0 *.m4a" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.mp3 ] + do + ffmpeg -i "$arg" -codec:a libmp3lame -qscale:a 2 "${arg%.*}"-audiotrack.mp3 + done + done +} + +convert2audio_m4a() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.m4a ] + do + ffmpeg -i "$arg" -codec:a aac -qscale:a 6 -strict experimental "${arg%.*}"-audiotrack.m4a + done + done +} +convert2audio_ogg() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.ogg ] + do + ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.ogg + done + done +} + +convert2audio_wav() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.wav ] + do + ffmpeg -i "$arg" "${arg%.*}"-audiotrack.wav + done + done +} + +convert2audio_webm() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.webm ] + do + ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.webm + done + done +} + +convert2audio_wavmono() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-monoaudiotrack.wav ] + do + ffmpeg -i "$arg" -codec:a pcm_mulaw -ar 8000 -ac 1 "${arg%.*}"-monoaudiotrack.wav + done + done +} + +convert2audio_wma() { +if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 +fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.wma ] + do + ffmpeg -i "$arg" -codec:a wmav2 -b:a 128k "${arg%.*}"-audiotrack.wma + done + done +} + +# }}} +########################################################### +#-------- Convert to Audio {{{ +#------------------------------------------------------ +# https://trac.ffmpeg.org/wiki/Encode/MP3 +# https://trac.ffmpeg.org/wiki/Encode/AAC +# https://trac.ffmpeg.org/wiki/TheoraVorbisEncodingGuide + +convert2audio_mp3() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.m4a" + echo -e "\nmultiple: $0 file1.m4a file2.m4a file3.m4a" + echo -e "\nwildcard: $0 *.m4a" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.mp3 ] + do + ffmpeg -i "$arg" -codec:a libmp3lame -qscale:a 2 "${arg%.*}"-audiotrack.mp3 + done + done +} + +convert2audio_m4a() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.m4a ] + do + ffmpeg -i "$arg" -codec:a aac -qscale:a 6 -strict experimental "${arg%.*}"-audiotrack.m4a + done + done +} +convert2audio_ogg() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.ogg ] + do + ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.ogg + done + done +} + +convert2audio_wav() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.wav ] + do + ffmpeg -i "$arg" "${arg%.*}"-audiotrack.wav + done + done +} + +convert2audio_webm() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.webm ] + do + ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.webm + done + done +} + +convert2audio_wavmono() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-monoaudiotrack.wav ] + do + ffmpeg -i "$arg" -codec:a pcm_mulaw -ar 8000 -ac 1 "${arg%.*}"-monoaudiotrack.wav + done + done +} + +convert2audio_wma() { +if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.mp3" + echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" + echo -e "\nwildcard: $0 *.mp3" + return 1 +fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-audiotrack.wma ] + do + ffmpeg -i "$arg" -codec:a wmav2 -b:a 128k "${arg%.*}"-audiotrack.wma + done + done +} + +flac2mp3(){ +for a in ./*.flac; do + < /dev/null ffmpeg -i "$a" -qscale:a 0 "${a[@]/%flac/mp3}" +done +} +# }}} +########################################################### +#-------- Simple HTTP Server {{{ +#------------------------------------------------------ +# DEMO: http://www.youtube.com/watch?v=FFIjMYzkHhc +# DESC: python http server, host files and folders + +SimpleHTTPserver() { + if which python2 >/dev/null; then + python2 -m SimpleHTTPServer "${1:-8000}" + else + python3 -m http.server "${1:-8000}" + fi +} +#}}} +########################################################### +#-------- Kiwix Server {{{ +#------------------------------------------------------ +# DEMO: https://www.youtube.com/watch?v=267WxnPEckM&t=81s +# DESC: kiwix-serve -- Offline Wiki Viewer - Linux WEBUI + +offlinewiki-daemon() { kiwix-serve --port 49849 --daemon /MacOSX-Data1/Computing/wiki/*.zim ; } +offlinewiki-quit() { kill $(ps -ef | grep -i '[K]iwix-serve' | awk '{print $2}') ;} + +#}}} +########################################################### +#-------- Bluetooth Headset {{{ +bt-st() { systemctl status -l bluetooth; } +bt-up() { sudo systemctl start bluetooth; } +bt-re() { sudo systemctl restart bluetooth; } +bt-dn() { sudo systemctl stop bluetooth; } +betron-on() { ${HOME}/bin/scripts/expect/bt-on-Betron.exp ;} +betron-off() { ${HOME}/bin/scripts/expect/bt-off-Betron.exp ;} +jvc-on() { ${HOME}/bin/scripts/expect/bt-on-JVC.exp ;} +jvc-off() { ${HOME}/bin/scripts/expect/bt-off-JVC.exp ;} +qy7-on() { ${HOME}/bin/scripts/expect/bt-on-QY7.exp ;} +qy7-off() { ${HOME}/bin/scripts/expect/bt-off-QY7.exp ;} +pb-on() { ${HOME}/bin/scripts/expect/bt-on-PocketBoom.exp ;} +pb-off() { ${HOME}/bin/scripts/expect/bt-off-PocketBoom.exp ;} +xg5-on() { ${HOME}/bin/scripts/expect/bt-on-xg5.exp ;} +xg5-off() { ${HOME}/bin/scripts/expect/bt-off-xg5.exp ;} +# }}} +########################################################### +#-------- Wget Batch Retrieve Files From The Web {{{ +## http://stackoverflow.com/a/18709707 +#-------------------------------------- +wget-ext-url() { + if [ $# -lt 2 ]; then + echo -e "Download all extension on a webpage" + echo -e "\nUsage: $0 <file_extension> <url>" + echo -e "\nExample: $0 mp3 http://example.com/files/" + echo -e "\nGoogle: http://lmgtfy.com/?q=intitle%3Aindex.of+mp3+-html+-htm+-php+-asp+-txt+-pls+madonna" + return 1 + fi + + savepath=~/Downloads + outputdir_name=$(echo "$2" | rev | cut -d\/ -f2 | rev) + + mkdir -pv "$savepath/$outputdir_name" + cd "$savepath/$outputdir_name" && wget -r -l1 -H -t1 -nd -N -np -A "$1" -erobots=off "$2" +} +# }}} +########################################################### +#-------- Fuzzy Finder {{{ +#------------------------------------------------------ +# DEMO: https://www.youtube.com/playlist?list=PLqv94xWU9zZ2fMsMMDF4PjtNHCeBFbggD +# DESC: interactive fuzzy string matching +# URL: https://github.com/junegunn/fzf +# +fzf-dmenu() { + # note: xdg-open has a bug with .desktop files, so we cant use that + selected="$(ls /usr/share/applications | fzf -e -i )" + nohup `grep '^Exec' "/usr/share/applications/$selected" | tail -1 | sed 's/^Exec=//' | sed 's/%.//'` >/dev/null 2>&1& + # disown if exit 0 successfully + if [[ $? = 0 ]] ; then disown; fi +}; +zle -N fzf_dmenu; bindkey -s '^O' "fzf-dmenu\n" +# +fzf-surfraw() { surfraw "$(cat ~/.config/surfraw/bookmarks | sed '/^$/d' | sort -n | fzf -e -i )" ;} ; bindkey -s '^s' "fzf-surfraw\n" +# +fzf-locate() { + xdg-open "$(locate "*" | fzf -e -i )" + +# # some programs require a longer time to load + sleep 1.5 +# +# # if cancel or fail then exit + if [ $? -ne 0 ] + then + exit + fi +} +# ZSH keybinding example; ~/.zshrc + +fzf_history() { zle -I; eval $(history | fzf +s | sed 's/ *[0-9]* *//') ; }; zle -N fzf_history; bindkey '^F' fzf_history + +fzf_killps() { zle -I; ps -ef | sed 1d | fzf -m | awk '{print $2}' | xargs kill -${1:-9} ; }; zle -N fzf_killps; bindkey '^Q' fzf_killps + +fzf_cd() { zle -I; DIR=$(find ${1:-*} -path '*/\.*' -prune -o -type d -print 2> /dev/null | fzf) && cd "$DIR" ; }; zle -N fzf_cd; bindkey '^E' fzf_cd + + +# +#fzf-playonlinux() { playonlinux --run '$(ls ~/.PlayOnLinux/shortcuts | fzf -e -i )' ;} +# +## http://www.reddit.com/r/commandline/comments/3abtup/fzfr_fzf_bash_function/ +#fzfr() { fzf -m -x | xargs -d'\n' -r "$@" ; } +# +## edit single line snippet +cfg-snippetrc() { $EDITOR ~/.snippetrc ;} +cfg-multisnippetrc() { $EDITOR ~/.multisnippet/"$(ls ~/.multisnippet | fzf -e -i)" ;} +multisnippet() { $EDITOR ~/.multisnippet/"$1" ;} +fzf-snippet() { + selected="$(cat ~/.snippetrc | sed '/^$/d' | sort -n | fzf -e -i )" + # remove tags, leading and trailing spaces, also no newline + echo "$selected" | sed -e s/\;\;\.\*\$// | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '\n' | xclip -selection clipboard +} +fzf-multisnippet() { + # location of snippets + dir=~/.multisnippet + + # merge filename and tags into single line + results=$(for FILE in $dir/* + do + getname=$(basename $FILE) + gettags=$(head -n 1 $FILE) + echo "$getname \t $gettags" + done) + + # copy content into clipboard without tags + filename=$(echo "$(echo $results | fzf -e -i )" | cut -d' ' -f 1) + sed 1d $dir/$filename | xclip -selection clipboard +} +fzf_open() { + fd -t f -H -I | fzf -m --preview="xdg-mime query default {}" | xargs - ro -d "\n" xdg-open 2>&- + } +cd_with_fzf() { + cd $HOME && cd "$(fd -t d -t l | fzf --preview="tree -L 1 {}" --bind="space:toggle-preview" --preview-window=:hidden)" && echo "$PWD" && tree -L 2 } + +##}}} +########################################################### +#-------- Task Spooler {{{ +# TestFunc TS queue +tsp-output_header(){ + echo "Running $0"; + echo "$1 arguments...." ; +} +tsp-ytdl() { + + case $# in + 0) TS_SOCKET=/tmp/youtube-dl ts ;; + 1) case $1 in + "-C") TS_SOCKET=/tmp/youtube-dl ts -C ;; + "-r") TS_SOCKET=/tmp/youtube-dl ts -r ;; + "-o") TS_SOCKET=/tmp/youtube-dl ts -o ;; + "-f") TS_SOCKET=/tmp/youtube-dl ts youtube-dl -f $1 $2 $3 ;; + *) TS_SOCKET=/tmp/youtube-dl ts youtube-dl $1 ;; + esac ;; + 2) TS_SOCKET=/tmp/youtube-dl ts $* ;; + esac +} +# Youtube-dl TS queue +tsp-ytdl.orig() { + if [ $# -lt 1 ] ; then + echo "Running $0" + TS_SOCKET=/tmp/youtube-dl ts ; + else + if [[ "$1" == "-C" ]] ; then + TS_SOCKET=/tmp/youtube-dl ts -C ; + else + TS_SOCKET=/tmp/youtube-dl ts youtube-dl $1 ; + fi + fi +} +# MPV TS queue +tsp-mpv() { + if [ $# -lt 1 ] ; then + TS_SOCKET=/tmp/mpv-q ts ; + else + if [ "$1" == "-C" ] ; then + TS_SOCKET=/tmp/mpv-q ts -C ; + else + TS_SOCKET=/tmp/mpv-q ts mpv $1 ; + fi + fi +} +# }}} +########################################################### +#-------- Sci-Hub {{{ +# Sci-Hub download + +shdl(){ curl -O $(curl -s http://sci-hub.tw/"$@" | grep location.href | grep -o http.*pdf); } + +# }}} + +############################## +####### B. WAITING LIST ###### +############################## + +########################################################### +#-------- FFMPEG X11GRAB Screencasting {{{ +#------------------------------------------------------ +# record desktop using ffmpeg +# tutorial video: http://www.youtube.com/watch?v=mNz5Lrc06_s +# http://ubuntuforums.org/showthread.php?t=1392026 +# https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu +# https://trac.ffmpeg.org/wiki/Capture/ALSA +# https://trac.ffmpeg.org/wiki/Capture/Desktop +# http://nowardev.wordpress.com/2011/05/23/how-to-screencast/ +# https://dl.dropboxusercontent.com/u/28788188/cast.sh (Xpander69) +# https://www.youtube.com/watch?v=mEV2O8C272g +# https://github.com/gotbletu/wikimd/blob/master/ffmpeg-compile.md + +# ffmpeg location +# FF_RECORDER=/usr/bin/ffmpeg +#FF_RECORDER=~/Compile/ffmpeg/bin/ffmpeg + +# use "arecord -l" or "arecord -L" to find mic +# pavucontrol if using pulseaudio +# FF_MIC=pulse +# FF_MIC=hw:4,0 +#FF_MIC=front:CARD=Snowball + +# scale down resolution if needed +# ${FF_SCALE[*]} +# FF_SCALE=(-vf scale=1280:720) + + +#FF_OUTPUT_MOVIE=~/Public/screencast/mm_movie_baking.mkv +#FF_OUTPUT_VIDEO=~/Public/screencast/vv_video_baking.mkv +#FF_OUTPUT_AUDIO=~/Public/screencast/aa_audio_baking.mp3 + +# movie = video and audio +# videotrack = video only +# audiotrack = audio only +#ffcast_fullscreen_movie() { +# $FF_RECORDER -f alsa -ac 1 -i $FF_MIC -async 1 -f x11grab -r 30 \ +#-s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) \ +#-i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +#-acodec libmp3lame -ab 320k -threads 0 -y $FF_OUTPUT_MOVIE +# + +#ffcast_fullscreen_videotrack() { +# $FF_RECORDER -f x11grab -r 30 \ +#-s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) \ +#-i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +#-threads 0 -y $FF_OUTPUT_VIDEO +# + +#ffcast_audiotrack() { +# $FF_RECORDER -f alsa -ac 1 -i $FF_MIC \ +#-acodec libmp3lame -ab 320k \ +#-threads 0 -y $FF_OUTPUT_AUDIO +# + +# single window: select a window with mouse cursor to record +#ffcast_window_movie() { +# INFO=$(xwininfo -frame) +#WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') +#WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) + +# $FF_RECORDER -f alsa -ac 1 -i $FF_MIC -async 1 -f x11grab -r 30 \ +#-s $WIN_GEO -i :0.0+$WIN_XY -vcodec libx264 -pix_fmt yuv444p \ +#-preset ultrafast -crf 0 -acodec libmp3lame -ab 320k \ +#-threads 0 -y $FF_OUTPUT_MOVIE +# + +#ffcast_window_videotrack() { +# INFO=$(xwininfo -frame) +#WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') +#WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) + +# $FF_RECORDER -f x11grab -r 30 \ +#-s $WIN_GEO -i :0.0+$WIN_XY -vcodec libx264 -pix_fmt yuv444p \ +#-preset ultrafast -crf 0 \ +#-threads 0 -y $FF_OUTPUT_VIDEO +# + + +# example references +# worked well on ffmpeg 0.11.1 +# ffmpeg -f pulse -ac 1 -i hw:3,0 -async 1 -f x11grab -r 30 -s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) -i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 -acodec libmp3lame -ab 128k -threads 0 -y ~/Public/screencast/aa_screencast_baking.mkv + +# --- }}} +########################################################### +#-------- FFMPEG X11GRAB Screencasting v2 (Multiple Inputs) {{{ +#------------------------------------------------------ +# DESC: record desktop using ffmpeg X11grab + +# REFF: +# MrWhat record mic & speakers: https://www.youtube.com/watch?v=mEV2O8C272g +# MrWhat keep audio sync: https://www.youtube.com/watch?v=Xbzh-T2kfJk +# https://ask.fedoraproject.org/en/question/65662/recording-audio-from-mic-and-speakers-from-commandline/ + +# list all audio sources +pa-sources() { pactl list sources | awk '/Source #/ ||/Name:/ || /Description:/ || /Sample Specification:/' ;} + +# ffmpeg location +# FFX_RECORDER=/usr/bin/ffmpeg +#FFX_RECORDER=~/Compile/ffmpeg/bin/ffmpeg +# FFX_RECORDER=/usr/bin/avconv + +# speakers audio source (PC speakers or Headphones) +# note: using headphones since pc speakers will have audio feedback to mic +# FFX_SPEAKER="alsa_output.pci-0000_00_14.2.analog-stereo.monitor" +# FFX_SPEAKER_CH="2" +# FFX_SPEAKER_FREQ="44100" +#FFX_SPEAKER="alsa_output.usb-NA_Lenovo_Wireless_Headset_W770-00.analog-stereo.monitor" +#FFX_SPEAKER_CH="2" +#FFX_SPEAKER_FREQ="32000" + +# mic audio source +# note: when routed to pulseaudio the mic is very low +# so open pavucontrol > input device > [name of mic] +# then slide volume all the way to the right +# example: http://i.imgur.com/GFkifqB.png +#FFX_MIC="alsa_input.usb-BLUE_MICROPHONES_Blue_Snowball-00.analog-mono" +#FFX_MIC_CH="1" +#FFX_MIC_FREQ="44100" + +# sound system +#FFX_SOUNDSYS="pulse" +# FFX_SOUNDSYS="alsa" + +# resolution +#FFX_RESO_FULL=$(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) + +# output location +#FFX_OUTPUT_MOVIE=~/Public/screencast/mm_movie_baking.mkv +#FFX_OUTPUT_VIDEO=~/Public/screencast/vv_video_baking.mkv +#FFX_OUTPUT_AUDIO=~/Public/screencast/aa_audio_baking.mp3 + +#ffxcast_fullscreen_movie() { +# $FFX_RECORDER \ +#-f $FFX_SOUNDSYS -ac $FFX_SPEAKER_CH -ar $FFX_SPEAKER_FREQ -i $FFX_SPEAKER \ +#-f $FFX_SOUNDSYS -ac $FFX_MIC_CH -ar $FFX_MIC_FREQ -i $FFX_MIC \ +#-f x11grab -r 30 -s $FFX_RESO_FULL -i :0.0 \ +#-filter_complex \ +#"[0]asyncts[spkr], \ +#[1]asyncts[mic], \ +#[spkr][mic]amix=inputs=2" \ +#-c:v libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 \ +#-c:a libmp3lame -ac 2 -ar 44100 -b:a 320k \ +#-y $FFX_OUTPUT_MOVIE +# +# +## -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +## -acodec libmp3lame -ab 128k -ar 44100 -threads 0 -y $FF_OUTPUT_MOVIE +# +## ffmpeg \ +## -f pulse -ac 2 -ar 44100 -i alsa_input.usb-BLUE_MICROPHONE_Blue_Snowball_201306-00-Snowball.analog-stereo \ +## -f pulse -ac 2 -ar 44100 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ +## -f pulse -ac 2 -ar 44100 -i alsa_output.usb-Logitech_Inc_Logitech_USB_Headset_H540_00000000-00-H540.iec958-stereo.monitor \ +## -f x11grab -framerate 30 -video_size 1920x1080 -i :0 \ +## -filter_complex \ +## "[0]asyncts[m], \ +## [1]asyncts[d], \ +## [2]asyncts[h], \ +## [m][d][h]amix=inputs=3" \ +## -c:v libx264 -preset veryfast -crf 18 -pix_fmt yuv420p \ +## -c:a libmp3lame -ac 2 -ar 44100 -b:a 320k \ +## /home/b/Videos/AudioSync/AsyncTS_20150206.mkv +# +## different PRESET +## 1. -c:v libx264 -preset ultrafast -crf 18: Produced a 120.9 MB file at ~34-48% CPU load +## 2. -c:v libx264 -preset superfast -crf 18: Produced a 40.4 MB file at ~48-53% CPU load +## 3. -c:v libx264 -preset veryfast -crf 18: Produced a 26.1 MB file at ~62-78% CPU load +# +## different CRF +## 1. -c:v libx264 -preset ultrafast -crf 0 (Lossless): Produced a 471.7 MB file at ~32-50% CPU load +## 2. -c:v libx264 -preset ultrafast -crf 18: Produced a 120.9 MB file at ~34-48% CPU load +## 3. -c:v libx264 -preset ultrafast -crf 23: Produced a 67.1 MB file at ~32-45% CPU load +## 4. -c:v libx264 -preset ultrafast -crf 28: Produced a 31.1 MB file at ~30-40% CPU load +# +## image quality each setting produces (images are zoomed to in 285%) +## https://imgur.com/XF6t2Cv +# +# +## }}} +########################################################### +##-------- Alias Custom {{{ +##------------------------------------------------------ +## alias ps="ps aux | grep -v grep | grep " +#alias t="todo.sh" +#alias f="find . |grep " +#alias p="ps aux |grep " +## alias o="xdg-open " +# +## For emergencies +#alias asdf='setxkbmap fr bepo' +# +alias xclipin='xclip -sel c -in <' +alias xclipout='xclip -sel c -out >' +alias ..="cd .." +alias ...="cd ../.." +alias ....="cd ../../.." +alias .....="cd ../../../.." +alias ......="cd ../../../../.." +alias empty='gvfs-trash --empty' # empty trash globally (all partitions) +alias garbage='gvfs-trash -f' +alias garbage-list='gvfs-ls -h trash://' +alias garbage-empty='gvfs-trash --empty' # empty trash globally (all partitions) +alias psg='ps aux|grep -v grep|grep -i ' +psgrep() { ps axuf | grep -v grep | grep "$@" -i --color=auto; } +alias sshxforwarding='ssh -XCc blowfish-cbc,arcfour' +alias sshxtrusted='ssh -Y' +alias stackexchange='lynx http://column80.com' # lookup information +alias trash='trash-put -v' +alias xev-keycode="xev | grep 'keycode\|button'" +alias weechat='weechat-curses' +alias lsd='ls -1d */' # ls folders only +alias l='ls -l' +alias lsf='ls --color=always -p | grep -v '/$'' # ls files only +alias lsa='ls -GghA' +alias lsx='ls -lX' +## list and grep +lsg() { + keyword=$(echo "$@" | sed 's/ /.*/g') + ls -GgthrA | grep -iE $keyword +} +# +## ls recent items at bottom with green TODAY yellow YESTERDAY substituted +## https://www.reddit.com/r/archlinux/comments/41s1w4/what_is_your_favorite_one_liner_to_use/cz50y1m +lst() { + ls -vAFq --color=yes -got --si --time-style=long-iso "$@" \ + | sed "s/$(date +%Y-%m-%d)/\x1b[32m TODAY\x1b[m/;s/$(date +'%Y-%m-%d' -d yesterday)/\x1b[33m YESTERDAY\x1b[m/" | tac +} +## alias lst='ls -Ggthrc' # ls by time/changes, newest at bottom +# +# +# +## }}} +########################################################### +##-------- Functions {{{ +##------------------------------------------------------ +# +################################################################################ +## IPlayer +## +################################################################################ +# +#gip-setplayer() { export PLAYER="$1" ;} +#gip-cbbc() { get_iplayer --stream --type=livetv "CBBC" --player="$PLAYER -" ;} +#gip-cbbs() { get_iplayer --stream --type=livetv "CBeebies" --player="$PLAYER -" ;} +#gip-bbcn() { get_iplayer --stream --type=livetv "BBC News" --player="$PLAYER -" ;} +#gip-bbc1() { get_iplayer --stream --type=livetv "BBC One" --player="$PLAYER -" ;} +#gip-bbc2() { get_iplayer --stream --type=livetv "BBC Two" --player="$PLAYER -" ;} +#gip-bbc3() { get_iplayer --stream --type=livetv "BBC Three" --player="$PLAYER -" ;} +#gip-bbc4() { get_iplayer --stream --type=livetv "BBC Four" --player="$PLAYER -" ;} +#gip-bbcr1x() { get_iplayer --stream --type=liveradio "BBC 1xtra" --player="$PLAYER -" ;} +#gip-bbcr1() { get_iplayer --stream --type=liveradio "BBC Radio 1" --player="$PLAYER -" ;} +#gip-bbcr2() { get_iplayer --stream --type=liveradio "BBC Radio 2" --player="$PLAYER -" ;} +#gip-bbcr3() { get_iplayer --stream --type=liveradio "BBC Radio 3" --player="$PLAYER -" ;} +#gip-bbcr4() { get_iplayer --stream --type=liveradio "BBC Radio 4 FM" --player="$PLAYER -" ;} +#gip-bbcr4x() { get_iplayer --stream --type=liveradio "BBC Radio 4 Extra" --player="$PLAYER -" ;} +#gip-bbcr5() { get_iplayer --stream --type=liveradio "BBC Radio 5 live" --player="$PLAYER -" ;} +#gip-bbcr5x() { get_iplayer --stream --type=liveradio "BBC 5 live Sports Extra" --player="$PLAYER -" ;} +# +#unlock() { keepassc -d ~/.keepass/masterlock.kdb ;} +# +#mkdircd() { mkdir -p -v $1; cd $1 ;} # create folder then cd into it +#cpbak() { cp $1{,.bak} ;} # create backup copy +#open() { xdg-open "$@" > /dev/null 2>&1 ;} # open gui apps w/o error msg +#nohup-command() { nohup "$@" >/dev/null 2>&1& } #background a process w/o error msg +#update-grub() { sudo grub-mkconfig -o /boot/grub/grub.cfg ;} +#grub-list() { +# RED='\033[0;31m' +# sudo grep "menuentry '" /boot/grub/grub.cfg | less -N +# echo -e "${RED} REMINDER: GRUB number starts at zero not one" +#} +# +# +## color the manpages +## tutorial video: http://www.youtube.com/watch?v=9BFaLAa428k +## https://wiki.archlinux.org/index.php/Man_page#Colored_man_pages +#man() { +# env LESS_TERMCAP_mb=$'\E[01;31m' \ +# LESS_TERMCAP_md=$'\E[01;31m' \ +# LESS_TERMCAP_me=$'\E[0m' \ +# LESS_TERMCAP_se=$'\E[0m' \ +# LESS_TERMCAP_so=$'\E[01;44;33m' \ +# LESS_TERMCAP_ue=$'\E[0m' \ +# LESS_TERMCAP_us=$'\E[01;32m' \ +# man "$@" +#} +# +## view markdown as manpages +## http://blog.metamatt.com/blog/2013/01/09/previewing-markdown-files-from-the-terminal/ +mdless(){ pandoc -s -f markdown -t man "$*" | groff -T utf8 -man | less ;} +## view markdown within lynx +## https://tosbourn.com/view-markdown-files-terminal/ +#rmd(){ pandoc "$*" | lynx -stdin ;} +## view markdown within w3m +rmd(){ pandoc "$*" | w3m -T text/html ;} +# +## quickly cd out of directories using numbers, example: up 2 +up() { local x='';for i in $(seq ${1:-1});do x="$x../"; done;cd $x; } +# +## list all file access permission +#lsp() { stat --format "%a %n" * ;} +# +## show file access permission +## http://unix.stackexchange.com/a/46921 +#file-permission() { stat --format '%a %n' "$@" ;} +# +## display mime of file application/zip, application/x-tar +#file-type() { file --mime-type -b "$@" ;} +# +# call vim help page from shell prompt +function :h { vim +":h $1" +'wincmd o' +'nnoremap q :q!<CR>' ;} +# +# call vim Info page from shell prompt +function viminfo () { vim -c "Info $1" -c "bdelete 1"; } +alias info=viminfo +# +## searches for manual locally or online +#manned() { +# for arg in "$@"; do man $arg 2> /dev/null \ +# || $arg -H 2> /dev/null || $arg -h 2> /dev/null \ +# || $arg --help-all 2> /dev/null || $arg --help 2> /dev/null \ +# || help $arg 2> /dev/null \ +# || $BROWSERCLI "http://manned.org/browse/search?q=$@" 2> /dev/null \ +# || $BROWSER "http://manned.org/browse/search?q=$@" 2> /dev/null \ +# || open "http://manned.org/browse/search?q=$@" 2> /dev/null \ +# || xdg-open "http://manned.org/browse/search?q=$@" +# done +#} +# +## python calculator +## press Ctrl+D to quit +## http://docs.python.org/library/math.html +## tutorial video: http://www.youtube.com/watch?v=JkyodHenTuc +#calc() { +# if which python2 >/dev/null; then +# python2 -ic "from __future__ import division; from math import *; from random import *" +# else +# python3 -ic "from math import *; import cmath" +# fi +#} +# +## change font size (guake terminal) +## tutorial video: http://www.youtube.com/watch?v=i9aKFgxOjwQ +chfontsize() { + # guake + gconftool-2 --set '/apps/guake/style/font/style' --type string "Monospace ${1:-16}" +# +# #gnome-terminal +# dconf write /org/gnome/terminal/legacy/profiles:/$(dconf list /org/gnome/terminal/legacy/profiles:/)font "'Monospace ${1:-16}'" +} +# +## Use podboat as download manager + +#podqueue() { + #if [ $# -lt 1 ] + #then + #echo -e "Add links to Podboat, Use Podboat as a TUI Download Manager." + #echo -e "\nUsage: $0 <url>" + #echo -e "\n\nExample:\n$0 http://abcxyz.com/filename.mp3" + #return 1 + #fi + #URL="$1" + #SAVE_PATH="${HOME}/Downloads" + #GET_FILENAME="($(echo $1)" | rev | cut -d\/ -f1 | rev | sed -e 's@\%20@\_@g' )" + #echo "$URL" "$SAVE_PATH/$GET_FILENAME" >> ${HOME}/.newsboat/queue +#} +## search commandlinefu.com + +cmdfu() { curl "http://www.commandlinefu.com/commands/matching/$(echo "$@" \ + | sed 's/ /-/g')/$(echo -n $@ | base64)/plaintext" ;} +# +# +## display one random command from commandlinefu.com +#cmdfu-random() { echo -e "`curl -sL http://www.commandlinefu.com/commands/random/json|sed -re 's/.*,"command":"(.*)","summary":"([^"]+).*/\\x1b[1;32m\2\\n\\n\\x1b[1;33m\1\\x1b[0m/g'`\n" ;} +# +## check if a website is down +## usage: down4me google.com +#down4me() { curl -s "http://www.downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g';} +# +## convert doc/docx to pdf (dont upload sensitive data) +## tutorial video: http://www.youtube.com/watch?v=r90IdQwF-hs +#doc2pdf() { curl -# -F inputDocument=@"$1" http://www.doc2pdf.net/convert/document.pdf > "${1%.*}.pdf" ;} +# +## w3m browser with inline images +## https://plus.google.com/102499719144563443986/posts/Vja8W69iHoi +## tutorial video: http://www.youtube.com/watch?v=R2bMUtCOGko + +w3mimg() { w3m -o imgdisplay=/usr/lib64/w3m/w3mimgdisplay $1 ;} + +# +## mplayer to display webcam +## hit 's' to take screenshot, will save in current folder +## hit 'S' to take series of screenshot, will save in current folder +## hit 'f' to toggle fullscreen +## hit 'T' to toggle stay-on-top +## hit 'q' or 'Esc' to quit +## https://wiki.archlinux.org/index.php/Webcam_Setup#MPlayer +#webcam-list() { v4l2-ctl --list-formats-ext && v4l2-ctl --list-devices ;} +# +#webcam-mplayer() { mplayer tv:// -tv driver=v4l2:width=640:height=360:device=/dev/video0 -fps 30 -vf screenshot -ontop -geometry "99%:95%" ;} +# +#webcam-mplayer-noborder() { mplayer tv:// -tv driver=v4l2:width=640:height=360:device=/dev/video0 -fps 30 -vf screenshot -geometry "98%:98%" -ontop -noborder ;} +# +#webcam-mplayer-screenshot() { mplayer tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0 -fps 30 -vf screenshot -ontop ;} +# +##}}} +########################################################### +##-------- Gotbletu Universal Package Manager {{{ +##------------------------------------------------------ +## DEMO: https://www.youtube.com/watch?v=N8CZhlIssdk +## DESC: auto detect package manager and loads proper alias for it +# +## legends# {{{ +## https://wiki.archlinux.org/index.php/Pacman_Rosetta +## http://old-en.opensuse.org/Software_Management_Command_Line_Comparison +## https://bbs.archlinux.org/viewtopic.php?pid=1281605#p1281605 +## Arch -- pacman, yaourt +## Debian/Ubuntu -- apt-get(apt), aptitude, dpkg +## Gentoo -- eclean, emerge, equery, layman +## OpenSuse -- zypper +## Red Hat/Fedora -- package-cleanup, rpm, yum +## Suse -- rug +## Not finish, only tested on Debian, Arch, Fedora so far +# +## cleanold; removes certain packages that can no longer be downloaded +## cleanall; remove all local cached packages +## list; show the content of an installed package +## localinstall; install package manually such as deb, rpm files downloaded +## own; find a command a package belongs to; ex: pkm-own convert +## purge; uninstall package and purge configuration files (not in /home) +## query; search for an already installed package +## refresh; update repository list +## upgrade; install the newest version from the repositories +## hold/unhold; stop/allow a package from being update +## +## missing +## emerge: autoclean, purge, list, query +## rug: pkm-info, clean, autoremove, autoclean, purge, list, query +## zypper: pkm-info, autoremove, autoclean, purge, list, query +## yum: autoclean, purge +## }}} +# +find_pkm() { for i;do which "$i" >/dev/null && { echo "$i"; return 0;};done;return 1; } +export PKMGR=$(find_pkm yaourt pacman apt-get yum zypper emerge aptitude ) +#export PKMGR=$(find_pkm zypper ) + +# {{{ apt-get +if [ "$PKMGR" = "apt-get" ]; then + pkm-cleanallall() { sudo apt-get clean ;} + pkm-cleanallold() { sudo apt-get autoclean ;} + pkm-dependsreverse() { apt-cache rdepends "$@" ;} + pkm-download() { wget $(apt-get --print-uris -y install "$@" | grep ^\'| cut -d\' -f2) ;} + pkm-extract() { ar vx "$@" | tar -zxvf data.tar.gz ;} + # same as; echo "pkgname hold" | dpkg --set-selections + pkm-hold() { sudo apt-mark hold "$@" ;} + pkm-hold-status() { dpkg --get-selections | awk "/${@:-hold}/" ;} + pkm-info() { apt-cache show "$@" ;} + pkm-install() { sudo apt-get install --no-install-recommends "$@" ;} + pkm-list() { dpkg -L "$@" ;} + pkm-listcache() { ls -1 /var/cache/apt/archives "$@" && \ + echo "pwd: /var/cache/apt/archives" ;} + pkm-localinstall() { sudo dpkg -i "$@" ;} + pkm-own() { dpkg -S $(which "$@") ;} + pkm-pkgsearch() { apt-file search "$@" ;} + pkm-purge() { sudo apt-get purge "$@" ;} + pkm-query() { dpkg --get-selections | grep "$@" ;} + pkm-refresh() { sudo apt-get update ;} + pkm-remove() { sudo apt-get remove "$@" ;} + pkm-remove-orphans() { sudo apt-get autoclean ;} + pkm-search() { apt-cache search "$@" ;} + pkm-unhold() { sudo apt-mark unhold "$@" ;} + pkm-upgrade() { sudo apt-get update && sudo apt-get upgrade ;} + # PPA on ubuntu base distro (not compatible with debian) + ppa-add() { sudo add-apt-repository $@ ;} + ppa-del() { sudo add-apt-repository -r $@ ;} + ppa-key() { sudo apt-key add $@ ;} + ppa-list() { ls /etc/apt/sources.list.d ;} + ppa-purge() { sudo ppa-purge $@ ;} + # auto get missing gpg keys from launchpad + ppa-autokey() { sudo apt-get update 2> /tmp/keymissing; \ + for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); \ + do echo -e "\nProcessing key: $key"; gpg --keyserver pool.sks-keyservers.net \ + --recv $key && gpg --export --armor $key | sudo apt-key add -; done ;} + # these are extra servers, just replace it if one is down + # keyserver.ubuntu.com + # pool.sks-keyservers.net + # subkeys.pgp.net + # pgp.mit.edu + # keys.nayr.net + # keys.gnupg.net + # wwwkeys.en.pgp.net #(replace with your country code fr, en, de,etc) + # }}} +# {{{ aptitude +elif [ "$PKMGR" = "aptitude" ]; then + pkm-cleanallall() { sudo aptitude clean ;} + pkm-cleanallold() { sudo aptitude autoclean ;} + pkm-dependsreverse() { aptitude why "$@" ;} + pkm-download() { aptitude download "$@" ;} # need a better 1; deb w/ depends + pkm-extract() { ar vx "$@" | tar -zxvf data.tar.gz ;} + pkm-hold() { echo "$1 hold" | sudo dpkg --set-selections && \ + dpkg --get-selections | awk "/$1/ && /hold/" ;} + pkm-hold-status() { dpkg --get-selections | awk "/${@:-hold}/" ;} + pkm-info() { aptitude show "$@" ;} + pkm-install() { sudo aptitude install --without-recommends "$@" ;} + pkm-list() { dpkg -L "$@" ;} + pkm-listcache() { ls -1 /var/cache/apt/archives "$@" && \ + echo "pwd: /var/cache/apt/archives" ;} + pkm-localinstall() { sudo dpkg -i "$@" ;} + pkm-own() { dpkg -S $(which "$@") ;} + pkm-pkgsearch() { apt-file search "$@" ;} + pkm-purge() { sudo aptitude purge "$@" ;} + pkm-query() { dpkg --get-selections | grep "$@" ;} + pkm-refresh() { sudo aptitude update ;} + pkm-remove() { sudo aptitude remove "$@" ;} + pkm-remove-orphans() { sudo aptitude autoclean ;} + pkm-search() { aptitude search "$*" ;} + # fix maybe with keyword $@ | sed / / ~d/ + pkm-search-description() { aptitude search ~d"$1"~d"$2"~d"$3"~d"$4"~d"$5"~d"$6"~d"$7" ;} + pkm-unhold() { echo "$1 install" | sudo dpkg --set-selections && \ + dpkg --get-selections | awk "/$1/ && /install/" ;} + pkm-upgrade() { sudo aptitude update && sudo aptitude upgrade ;} + # PPA on ubuntu base distro (not compatible with debian) + ppa-add() { sudo add-apt-repository $@ ;} + ppa-del() { sudo add-apt-repository -r $@ ;} + ppa-key() { sudo apt-key add $@ ;} + ppa-list() { ls /etc/apt/sources.list.d ;} + ppa-purge() { sudo ppa-purge $@ ;} + ppa-autokey() { sudo apt-get update 2> /tmp/keymissing; \ + for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); \ + do echo -e "\nProcessing key: $key"; gpg --keyserver pool.sks-keyservers.net \ + --recv $key && gpg --export --armor $key | sudo apt-key add -; done ;} +# }}} +# {{{ emerge +elif [ "$PKMGR" = "emerge" ]; then + pkm-remove-orphans() { sudo emerge --depclean ;} + pkm-cleanall() { sudo eclean distfiles ;} + pkm-info() { emerge -S "$@" ;} + pkm-install() { sudo emerge "$@" ;} + pkm-pkgsearch() { equery belongs "$@" ;} + pkm-refresh() { sudo layman -f ;} + pkm-remove() { sudo emerge -C "$@" ;} + pkm-search() { emerge -S "$@" ;} + pkm-upgrade() { sudo emerge -u world ;} +# }}} +# {{{ pacman +elif [ "$PKMGR" = "pacman" ]; then + pkm-build() { tar xvzf "$1" && cd "${1%%.tar.gz}" && makepkg -csi ;} + pkm-cleanall() { sudo pacman -Sc ;} + pkm-cleanold() { sudo pacman -Scc ;} + if type -p downgrade > /dev/null; then + # require: https://aur.archlinux.org/packages/downgrade/ + pkm-downgrade() { downgrade "$@" ;} + fi + pkm-download() { sudo pacman -Sw "$@" ;} + pkm-info() { for arg in "$@"; do + pacman -Qi $arg 2> /dev/null \ + || pacman -Si $arg; done ;} + pkm-install() { sudo pacman -S "$@" ;} + pkm-key() { sudo pacman-key --init \ + && sudo pacman-key --populate archlinux \ + && sudo pacman-key --refresh-keys ;} + pkm-list() { pacman -Qql "$@" ;} + pkm-listinstalled() { pacman -Qe ;} + pkm-listcache() { ls -1 /var/cache/pacman/pkg "$@" && \ + echo "pwd: /var/cache/pacman/pkg" ;} + pkm-localinstall() { sudo pacman --noconfirm -U "$@" ;} + pkm-own() { pacman -Qo "$@" ;} + pkm-pkgsearch() { pkgfile -s "$@" ;} + pkm-purge() { sudo pacman -R "$@" ;} + pkm-query() { pacman -Qqs "$@" ;} + pkm-query-detail() { pacman -Qs "$@" ;} + pkm-refresh() { sudo pacman -Syy ;} + pkm-remove() { sudo pacman -Rcs "$@" ;} + pkm-remove-nodepends() { sudo pacman -Rdd "$@" ;} + pkm-remove-orphans() { sudo pacman -Rs $(pacman -Qqtd) ;} + pkm-search() { pacman -Ss "$@" ;} + pkm-search-local() { pacman -Qs "$@" ;} + pkm-upgrade() { sudo pacman -Syu ;} +# }}} +# {{{ rug +elif [ "$PKMGR" = "rug" ]; then + pkm-install() { sudo rug install "$@" ;} + pkm-refresh() { sudo rug refresh ;} + pkm-remove() { sudo rug remove "$@" ;} + pkm-search() { rug search "$@" ;} + pkm-upgrade() { sudo rug update ;} +# }}} +# {{{ yaourt +elif [ "$PKMGR" = "yaourt" ]; then + pkm-build() { tar xvzf "$1" && cd "${1%%.tar.gz}" && makepkg -csi ;} + pkm-cleanall() { yaourt -Sc ;} + pkm-cleanold() { yaourt -Scc ;} + if type -p downgrade > /dev/null; then + # require: https://aur.archlinux.org/packages/downgrade/ + pkm-downgrade() { downgrade "$@" ;} + fi + pkm-download() { sudo pacman -Sw "$@" ;} # need better shit to dl from aur also + pkm-info() { for arg in "$@"; do + yaourt -Qi $arg 2> /dev/null \ + || yaourt -Si $arg; done ;} + pkm-install() { yaourt --noconfirm -S "$@" ;} + # https://wiki.archlinux.org/index.php/Pacman-key#Resetting_all_the_keys + pkm-key() { sudo pacman-key --init \ + && sudo pacman-key --populate archlinux \ + && sudo pacman-key --refresh-keys ;} + pkm-list() { yaourt -Qql "$@" ;} + pkm-listinstalled() { yaourt -Qe ;} + pkm-listcache() { ls -1 /var/cache/pacman/pkg "$@" && \ + echo "pwd: /var/cache/pacman/pkg" ;} + pkm-localinstall() { sudo pacman --noconfirm -U "$@" ;} + pkm-own() { pacman -Qo "$@" ;} + pkm-pkgsearch() { pkgfile -s "$@" ;} + pkm-purge() { yaourt -R "$@" ;} + pkm-query() { pacman -Qqs "$@" ;} + pkm-query-detail() { yaourt -Qs "$@" ;} + pkm-refresh() { yaourt -Syy ;} + pkm-remove() { yaourt -Rcs "$@" ;} + pkm-remove-nodepends() { yaourt -Rdd "$@" ;} + pkm-remove-orphans() { yaourt -Rs $(pacman -Qqtd) ;} + pkm-search() { yaourt --noconfirm "$@" ;} + pkm-search-local() { yaourt -Qs "$@" ;} + pkm-upgrade() { yaourt -Syu ;} # upgrade everything except aur package + pkm-upgrade-aur() { yaourt --noconfirm -Sbua ;} # only upgrade aur package +# }}} +# {{{ yum +elif [ "$PKMGR" = "yum" ]; then + pkm-cleanall() { sudo yum clean ;} + pkm-depends() { sudo yum deplist "$@" ;} + pkm-dependsreverse() { sudo yum resolvedep "$@" ;} + pkm-info() { for arg in "$@"; do + rpm -qi $arg 2> /dev/null || yum info $arg; done ;} + pkm-install() { sudo yum install "$@" ;} + pkm-list() { for arg in "$@"; do + rpm -ql $arg 2> /dev/null || repoquery -ql --plugins $arg; done ;} + pkm-localinstall() { sudo yum localinstall "$@" ;} + pkm-own() { rpm -qf $(which "$@") ;} + pkm-pkgsearch() { yum whatprovides "$@" ;} + pkm-query() { rpm -q "$@" ;} + pkm-refresh() { sudo yum clean expire-cache && sudo yum check-update ;} + pkm-remove() { sudo yum remove "$@" ;} + pkm-remove-orphans() { sudo package-cleanup --leaves ;} + pkm-search() { yum search "$@" ;} + pkm-upgrade() { sudo yum update ;} +# }}} +# {{{ zypper +elif [ "$PKMGR" = "zypper" ]; then + pkm-cleanall() { sudo zypper clean ;} + pkm-install() { sudo zypper install "$@" ;} + pkm-pkgsearch() { zypper what-provides "$@" ;} + pkm-refresh() { sudo zypper refresh ;} + pkm-remove() { sudo zypper remove "$@" ;} + pkm-search() { zypper search "$@" ;} + pkm-upgrade() { sudo zypper update ;} +fi +# }}} +# +##}}} +########################################################### +##-------- Clipboard and Upload {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/watch?v=fKP0FLp3uW0 (xclip) +## https://www.youtube.com/watch?v=Ww7Sl4d8F8A (pastebinit) +## DESC: copy/paste for linux machines (Mac style) +# +alias pbcopy='xclip -selection clipboard' # copy to clipboard, ctrl+c, ctrl+shift+c +alias pbpaste='xclip -selection clipboard -o' # paste from clipboard, ctrl+v, ctrl+shitt+v +alias pbselect='xclip -selection primary -o' # paste from highlight, middle click, shift+insert +alias pbnoformatting='xclip -selection clipboard -o | xclip -selection clipboard' +# +# +## dump text from clipboard to pastebin server and copy link +#alias pbdumpslexy='pbpaste | pastebinit -b "slexy.org" | pbcopy && echo "URL has been copied to clipboard" && pbpaste' +#alias pbdumpsprungeus="pbpaste | curl -F 'sprunge=<-' http://sprunge.us | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +#alias pbdumpixio="pbpaste | curl -F 'f:1=<-' ix.io | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +# +# +#alias pbuploadslexy='pbpaste | pastebinit -b "slexy.org" | pbcopy && echo "URL has been copied to clipboard" && pbpaste' +# +#alias pbuploadsprungeus="cat "$@" | curl -F 'sprunge=<-' http://sprunge.us | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +#alias pbuploadixio="cat "$1" | curl -F 'f:1=<-' ix.io | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +# +# +# +## }}} +########################################################### +##-------- Screenshot and Upload {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/watch?v=Hh8G1aBp8gc +## DESC: take screenshot fullscreen, single window or draw a box +#export PATH_SCREENSHOT=~/Pictures/screenshots +#pix() { scrot -d 2 "$PATH_SCREENSHOT/fullscr_`date +'%F_%Hh%Ms%S'`.png" ;} +#pix-area() { sleep 2 && scrot -s "$PATH_SCREENSHOT/windowed_`date +'%F_%Hh%Ms%S'`.png" ;} +# +# +## DEMO: http://www.youtube.com/watch?v=7-9uYSGyvU0 +## DESC: upload to imgur.com +## REFF: http://www.commandlinefu.com/commands/view/9341 +#upl-imgur() { +# curl -\# -F image=@"$1" -F "key=1913b4ac473c692372d108209958fd15" \ +# http://api.imgur.com/2/upload.xml | grep -Eo "<original>(.)*</original>" \ +# | grep -Eo "http://i.imgur.com/[^<]*" +#} +# +## }}} +########################################################### +##-------- Flexget (Torrent RSS) {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/playlist?list=PLqv94xWU9zZ0pVGrgKtMuhFHun8-MahSY +## DESC: auto download torrent similar to how a DVR works +## URL: http://flexget.com/ +# +#alias flexget='$HOME/anaconda2/bin/flexget' +#flexget-list() { flexget series list && flexget movie_list list waiting && flexget movie_list list downloaded ;} +#flexget-check() { flexget check ;} # check if config file has any errors +#flexget-test() { flexget --test execute ;} # dry run +#flexget-execute() { flexget execute ;} +#flexget-cron() { flexget execute --cron ;} # skip writing to logs +#flexget-version() { flexget -V ;} +#flexget-learnall() { flexget execute --learn ;} #bypass dling old torrents +#flexget-add() { flexget movie_list add "$@" ;} +#flexget-del() { flexget movie_list del "$@" ;} +#flexget-forget() { flexget movie_list forget "$@" ;} # allow redownloading on waiting list +# +##}}} +########################################################### +##-------- Convert to Video {{{ +##------------------------------------------------------ +## http://linuxconfig.org/ffmpeg-audio-format-conversions +convert2video_mp4() { + if [ $# -lt 1 ]; then + echo -e "Usage: $0 <file_name>" + echo -e "\nsingle: $0 file.avi" + echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" + echo -e "\nwildcard: $0 *.avi" + return 1 + fi + + myArray=( "$@" ) + for arg in "${myArray[@]}"; do + while [ ! -f "${arg%.*}"-movie.mp4 ] + do + ffmpeg -i "$arg" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${arg%.*}"-movie.mp4 + done + done +} +# +#convert2video_avi() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp4" +# echo -e "\nmultiple: $0 file1.mp4 file2.mp4 file3.mp4" +# echo -e "\nwildcard: $0 *.mp4" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-movie.avi ] +# do +# ffmpeg -i "$arg" -codec:v mpeg4 -vtag xvid -qscale:v 3 -codec:a libmp3lame -qscale:a 4 "${arg%.*}"-movie.avi +# done +# done +#} +# +#convert2video_ogv() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-movie.ogv ] +# do +# ffmpeg -i "$arg" -codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 "${arg%.*}"-movie.ogv +# done +# done +#} +# +#convert2video_mpg() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-movie.mpg ] +# do +# ffmpeg -i "$arg" -codec:v mpeg2video -qscale:v 2 -codec:a mp2 -b:a 192k "${arg%.*}"-movie.mpg +# done +# done +#} +# +#convert2video_mkv() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-movie.mkv ] +# do +# ffmpeg -i "$arg" -codec:v libx264 -preset medium -crf 22 -codec:a libvorbis -qscale:a 5 "${arg%.*}"-movie.mkv +# done +# done +#} +# +#convert2video_webm() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-movie.webm ] +# do +# ffmpeg -i "$arg" -codec:v libvpx -crf 10 -b:v 1M -codec:a libvorbis "${arg%.*}"-movie.webm +# done +# done +#} +# +## convert video to gif animation +## http://superuser.com/a/730389 +## http://superuser.com/a/841379 +#convert_to_gifv() { +# if [ $# -lt 1 ] +# then +# echo -e "convert video to animated gif" +# echo -e "\nUsage:\n$0 <file> <resolution>" +# echo -e "\nexample:\n$0 file.mkv \n" +# echo -e "$0 file.mkv 320\n" +# echo -e "$0 file.mkv 720\n" +# echo -e "$0 file.mkv 1080\n" +# echo -e "Note: animated gif size are usually x2 or x3 the size of the original video file" +# +# return 1 +# fi +# +# # get video resolution (height) +# eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +# size=${streams_stream_0_height} +# +# ffmpeg -i "$1" -vf scale="${2:-$size}":-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 5 -loop 0 - "${1%.*}"-gifvid"$2".gif +#} +# +## }}} +########################################################### +##-------- Convert to iOS (iPod, Macs, iPhone, Apple TV) {{{ +##------------------------------------------------------ +## https://trac.handbrake.fr/wiki/BuiltInPresets +# +#convert2iOS_ipod() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's low resolution settings for the iPod (5G and up)" +# echo -e "Optimized for great playback on the iPod screen, with smaller file size." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".ipod.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.ipod.mp4" --preset="iPod" +# done +# done +#} +#convert2iOS_universal() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's universally compatible, full resolution settings for all current Apple devices: iPod (6G and up), iPhone, AppleTV, and Macs" +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".universal.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.universal.mp4" --preset="Universal" +# done +# done +#} +# +#convert2iOS_iphone() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's settings for all iPhones and iPod Touches going back to the original iPhone 2G." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".iphone.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.iphone.mp4" --preset="iPhone & iPod touch" +# done +# done +#} +# +#convert2iOS_ipodtouch() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's settings for all iPhones and iPod Touches going back to the original iPhone 2G." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".ipodtouch.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.ipodtouch.mp4" --preset="iPhone & iPod touch" +# done +# done +#} +# +#convert2iOS_ipad() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".ipad.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.ipad.mp4" --preset="iPad" +# done +# done +#} +# +#convert2iOS_appletv() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's settings for the AppleTV and 2009's iPhone and iPod Touch lineup. Provides a good balance between quality and file size, and pushes the devices to their limits. Includes Dolby Digital 5.1 AC3 sound for the AppleTV." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".appletv.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv.mp4" --preset="AppleTV" +# done +# done +#} +# +#convert2iOS_appletv2() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".appletv2.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv2.mp4" --preset="AppleTV 2" +# done +# done +#} +# +#convert2iOS_appletv3() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".appletv3.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv3.mp4" --preset="AppleTV 3" +# done +# done +#} +# +## }}} +########################################################### +##-------- Convert to Devices (Other, Gaming Device) {{{ +##------------------------------------------------------ +## http://develop.participatoryculture.org/index.php/ConversionMatrix +# +#convert2psp() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".psp.mp4 ] +# do +# ffmpeg -i "$arg" -s 320x240 -b:v 512000 -ar 24000 -ab 64000 -f psp -r 29.97 -strict experimental "${arg%.*}".psp.mp4 +# done +# done +#} +# +#convert2windowsphone8() { +#if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +#fi +# +#myArray=( "$@" ) +#for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".windowsphone8.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.windowsphone8.mp4" --preset="Windows Phone 8" +# done +#done +#} +# +## }}} +########################################################### +##-------- Convert to Archive {{{ +##------------------------------------------------------ +# +## to see required install for different formats +## $ patool formats +#convert2archive_7z() { patool repack "$1" "${1%.*}".7z ;} +#convert2archive_ace() { patool repack "$1" "${1%.*}".ace ;} +#convert2archive_jar() { patool repack "$1" "${1%.*}".jar ;} +#convert2archive_rar() { patool repack "$1" "${1%.*}".rar ;} +#convert2archive_tar() { patool repack "$1" "${1%.*}".tar ;} +#convert2archive_xz() { patool repack "$1" "${1%.*}".xz ;} +#convert2archive_zip() { patool repack "$1" "${1%.*}".zip ;} +#convert2archive_targz() { patool repack "$1" "${1%.*}".tar.gz ;} +#convert2archive_tarbz2() { patool repack "$1" "${1%.*}".tar.bz2 ;} +#convert2archive_tarlzma() { patool repack "$1" "${1%.*}".tar.lzma ;} +# +## https://en.wikipedia.org/wiki/Comic_book_archive +#convert2archive_cbz() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.gz" +# echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +# echo -e "\nwildcard: $0 *.gz" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# if [[ ! -f "${arg%.*}".zip && ! -f "${arg%.*}".cbz ]]; then +# patool repack "$arg" "${arg%.*}".zip && mv "${arg%.*}".zip "${arg%.*}".cbz +# else +# if [[ -f "${arg%.*}".zip ]]; then +# mv -v -- "${arg%.*}".zip "${arg%.*}".cbz +# fi +# fi +# done +#} +# +#convert2archive_cb7() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.gz" +# echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +# echo -e "\nwildcard: $0 *.gz" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# if [[ ! -f "${arg%.*}".7z && ! -f "${arg%.*}".cb7 ]]; then +# patool repack "$arg" "${arg%.*}".7z && mv "${arg%.*}".7z "${arg%.*}".cb7 +# else +# if [[ -f "${arg%.*}".7z ]]; then +# mv -v -- "${arg%.*}".7z "${arg%.*}".cb7 +# fi +# fi +# done +#} +#convert2archive_cba() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.gz" +# echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +# echo -e "\nwildcard: $0 *.gz" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# if [[ ! -f "${arg%.*}".ace && ! -f "${arg%.*}".cba ]]; then +# patool repack "$arg" "${arg%.*}".ace && mv "${arg%.*}".ace "${arg%.*}".cba +# else +# if [[ -f "${arg%.*}".ace ]]; then +# mv -v -- "${arg%.*}".ace "${arg%.*}".cba +# fi +# fi +# done +#} +#convert2archive_cbt() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.gz" +# echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +# echo -e "\nwildcard: $0 *.gz" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# if [[ ! -f "${arg%.*}".tar && ! -f "${arg%.*}".cbt ]]; then +# patool repack "$arg" "${arg%.*}".tar && mv "${arg%.*}".tar "${arg%.*}".cbt +# else +# if [[ -f "${arg%.*}".tar ]]; then +# mv -v -- "${arg%.*}".tar "${arg%.*}".cbt +# fi +# fi +# done +#} +#convert2archive_cbr() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.gz" +# echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +# echo -e "\nwildcard: $0 *.gz" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# if [[ ! -f "${arg%.*}".rar && ! -f "${arg%.*}".cbr ]]; then +# patool repack "$arg" "${arg%.*}".rar && mv "${arg%.*}".rar "${arg%.*}".cbr +# else +# if [[ -f "${arg%.*}".rar ]]; then +# mv -v -- "${arg%.*}".rar "${arg%.*}".cbr +# fi +# fi +# done +#} +# +## }}} +########################################################### +##-------- VimWiki {{{ +##------------------------------------------------------ +wikimd() { $EDITOR ~/vimwiki/index.md ;} +## }}} +########################################################### +##-------- Slice Videos {{{ +##------------------------------------------------------ +# +## movie = both audio & video +## audiotrack = audio only +## videotrack = video only +# +## mplayer OSD in milliseconds +#mplayer-milliseconds() { mplayer -osd-fractions 1 -osdlevel 3 "$1" -ss "${2:-00:00:00}" ;} +# +#slice_movie() { +# if [ $# -lt 5 ] +# then +# echo -e "Use ffmpeg to slice movie (video & audio tracks) with beginning and endpoint with accurate milliseconds" +# echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +# echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +# +# return 1 +# fi +# +# # code +# BEGINTIME=${2} +# ENDTIME=${4} +# +# # Convert the times to seconds from the Epoch +# SEC1=`date +%s -d ${BEGINTIME}` +# SEC2=`date +%s -d ${ENDTIME}` +# +# # Use expr to do the math +# DIFFSEC=`expr ${SEC2} - ${SEC1}` +# DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +# +# ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -codec:v copy -codec:a copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +# +#} +# +#slice_videotrack() { +# if [ $# -lt 5 ] +# then +# echo -e "Use ffmpeg to slice videotrack (no audio) with beginning and endpoint with accurate milliseconds" +# echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +# echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +# +# return 1 +# fi +# +# BEGINTIME=${2} +# ENDTIME=${3} +# +# SEC1=`date +%s -d ${BEGINTIME}` +# SEC2=`date +%s -d ${ENDTIME}` +# +# DIFFSEC=`expr ${SEC2} - ${SEC1}` +# DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +# +# ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -an -codec:v copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +# +#} +# +#slice_audiotrack() { +# if [ $# -lt 5 ] +# then +# echo -e "Use ffmpeg to slice audiotrack (no video) with beginning and endpoint with accurate milliseconds" +# echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +# echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +# +# return 1 +# fi +# +# BEGINTIME=${2} +# ENDTIME=${3} +# +# SEC1=`date +%s -d ${BEGINTIME}` +# SEC2=`date +%s -d ${ENDTIME}` +# +# DIFFSEC=`expr ${SEC2} - ${SEC1}` +# DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +# +# ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -vn -codec:a copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +#} +# +## }}} +########################################################### +##-------- RipMe CLI (Bulk Image Downloader) {{{ +##------------------------------------------------------ +## image album downloader +## https://github.com/4pr0n/ripme +## CLI options: https://github.com/4pr0n/ripme/wiki/How-To-Run-RipMe +#ripme-cli() { java -jar /usr/share/java/ripme-git-1.2.8.jar -l ~/Downloads -u "$@" ;} +# +## }}} +########################################################### +##-------- Mount Archive (ZIP|RAR|TAR) {{{ +##------------------------------------------------------ +## http://ubuntuforums.org/showthread.php?t=1207096 +#mount-archive() { +# if [ $# -lt 1 ] +# then +# echo -e "mount archive files (zip|rar|tar...etc)" +# echo -e "\nUsage:\n$0 <archive>" +# echo -e "\nexample:\n$0 file.zip" +# return 1 +# fi +# +# # mount the archive +# gvfs-mount "archive://$( ( echo -n 'file://' ; readlink -f "$1" ; ) | perl -MURI::Escape -lne 'print uri_escape($_)')" +# +# # if mount was sucessful then cd into gvfs dir and ls the mountpoint +# if [ $? -eq 0 ]; then +# cd "/run/user/$(id -u)/gvfs" && ls +# else +# return 1 +# fi +# +#} +#unmount-archive() { +# if [ $# -lt 1 ] +# then +# echo -e "unmount archive files (zip|rar|tar)" +# echo -e "\nUsage:\n$0 <mount_point" +# echo -e "\nexample:\n$0 disc_image.iso" +# echo -e "cd /run/user/${UID}/gvfs/ && $0 mount_point" +# return 1 +# fi +# gvfs-mount -u "/run/user/$(id -u)/gvfs/$1" +#} +# +## }}} +########################################################### +##-------- Mount Disc Images (ISO|NRG|BIN|MDF|IMG) {{{ +##------------------------------------------------------ +#mount-discimage() { +# if [ $# -lt 1 ] +# then +# echo -e "mount ISO filesystem images (iso,nrg,bin,mdf,img)" +# echo -e "\nUsage:\n$0 <disc_image>" +# echo -e "\nexample:\n$0 disc_image.iso" +# echo -e "$0 disc_image.iso disc_image2.bin disc_image3.mdf" +# echo -e "$0 *.iso" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# fuseiso -n -p "$arg" "/tmp/$arg" +# done +# +# # if mount was sucessful then cd and ls the mountpoint +# if [ $? -eq 0 ]; then +# cd "/tmp/$1" && ls +# else +# return 1 +# fi +# +#} +# +#unmount-discimage() { +# if [ $# -lt 1 ] +# then +# echo -e "unmount ISO filesystem images (iso,nrg,bin,mdf,img)" +# echo -e "\nUsage:\n$0 <mount_point|disc_image>" +# echo -e "\nexample:\n$0 disc_image.iso" +# echo -e "$0 disc_image.iso disc_image2.bin" +# echo -e "$0 mount_point1 mount_point2" +# echo -e "cd /tmp && $0 mount_point" +# echo -e "cd /tmp && $0 *.iso" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# fusermount -u "$arg" +# done +#} +## }}} +########################################################### +##-------- Image Resizer (32|96|128|480|600|768|720|960|1080) {{{ +##------------------------------------------------------ +## Resizing Pictures to different resolutions +# +#image-resize-32x32() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 32x32 "${arg%.*}"_32x32_resized."${arg##*.}" +# done +#} +#image-resize-96x96() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 96x96 "${arg%.*}"_96x96_resized."${arg##*.}" +# done +#} +#image-resize-128x128() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 128x128 "${arg%.*}"_128x128_resized."${arg##*.}" +# done +#} +#image-resize-640x480() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 640x480 "${arg%.*}"_640x480_resized."${arg##*.}" +# done +#} +# +#image-resize-800x600() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 800x600 "${arg%.*}"_800x600_resized."${arg##*.}" +# done +#} +# +#image-resize-1024x768() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 1024x768 "${arg%.*}"_1024x768_resized."${arg##*.}" +# done +#} +#image-resize-1280x720() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 1280x720 "${arg%.*}"_1280x720_resized."${arg##*.}" +# done +#} +#image-resize-1280x960() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 1280x960 "${arg%.*}"_1280x960_resized."${arg##*.}" +# done +#} +#image-resize-1920x1080() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -resize 1920x1080 "${arg%.*}"_1920x1080_resized."${arg##*.}" +# done +#} +# +## }}} +########################################################### +# +############################### +######## C. STREAMING MEDIA ### +############################### +## Code that is still useful but I no longer use it, still here for references +# +########################################################### +##-------- Peerflix (Popcorntime CLI) {{{ +##------------------------------------------------------ +## DEMO: https://www.youtube.com/watch?v=NG13yOTPgfY +## URL: https://github.com/saironiq/shellscripts +## DESC: popcorntime from terminal +#PFLIX_PORT=55055 +#peerflix-vlc() { vlc http://localhost:$PFLIX_PORT ;} +#peerflix-mplayer() { mplayer http://localhost:$PFLIX_PORT ;} +# +## }}} +########################################################### +##-------- Play Youtube videos in mplayer {{{ +#yt-mp() { export YTFILE=$1 ;mplayer -fs -cookies -cookies-file /tmp/cookies.txt $(`youtube-dl -g --cookies /tmp/cookies.txt $YTFILE` ) ; unset YTFILE;} +## }}} +########################################################### +##-------- Sopcast CLI v2 (Streaming P2P Videos) {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/watch?v=Dm7cFjhzgHo +## DESC: watch movies/tv shows over p2p +# +## REFF: +## http://www.sopcast.com/chlist.xml +## http://sopcast.ucoz.com +## http://streams.magazinmixt.ro +## google keyword: sop://broker.sopcast +# +## package: +## Archlinux: sopcast ( x64 https://www.archlinux.org/packages/multilib/x86_64/sopcast/) +## Archlinux: sopcast ( x32 https://www.archlinux.org/packages/community/i686/sopcast/) +## Ubuntu/Debian: sp-auth (https://launchpad.net/~jason-scheunemann/+archive/ppa) +# +## choose a player (cvlc is default) +## SP_VIDPLAYER=cvlc +#SP_VIDPLAYER=(cvlc --file-caching=10000) +## SP_VIDPLAYER=vlc +## SP_VIDPLAYER=(vlc --control=lirc) +## SP_VIDPLAYER=mplayer +## SP_VIDPLAYER=(mplayer -cache 1000) +# +## wait X seconds to stabilize channel (make it longer if u got slower connection) +#SP_SLEEP=15 +# +## sopcast port and player port +#SP_LOCAL_PORT=55050 +#SP_PLAYER_PORT=55051 +# +## manually kill sopcast (sometimes it doesnt exit properly and still uses bandwidth in the background) +#sppc-kill() { killall sp-sc ;} +# +## kills existing connection, starts a new connection, sleep X sec to stabilize the stream, waits to player to exit and kill itself +#sppc() { +# killall sp-sc &>/dev/null +# (sp-sc "$1" $SP_LOCAL_PORT $SP_PLAYER_PORT &>/dev/null &) +# sleep $SP_SLEEP +# ($SP_VIDPLAYER http://localhost:$SP_PLAYER_PORT) +# wait +# killall sp-sc +#} +# +##### eng = english, ro = romanian, esp = espanol/spanish +## added on February 06, 2014 +#spp-doc-discovery.eng,ro() { sppc "sop://broker.sopcast.com:3912/256241" ;} +#spp-doc-discoveryid.eng,ro() { sppc "sop://broker.sopcast.com:3912/256244" ;} +#spp-doc-discoveryscience.eng,ro() { sppc "sop://broker.sopcast.com:3912/256243" ;} +#spp-doc-discoveryworld.eng,ro() { sppc "sop://broker.sopcast.com:3912/256242" ;} +#spp-doc-history.eng,ro() { sppc "sop://broker.sopcast.com:3912/253032" ;} +#spp-doc-natgeo.eng,ro() { sppc "sop://broker.sopcast.com:3912/148248" ;} +#spp-doc-natgeowild.eng,ro() { sppc "sop://broker.sopcast.com:3912/253037" ;} +#spp-movie-hbo.eng,ro() { sppc "sop://broker.sopcast.com:3912/148985" ;} +#spp-movie-hbocomedy.eng,ro() { sppc "sop://broker.sopcast.com:3912/149255" ;} +#spp-tv-axn.eng,ro() { sppc "sop://broker.sopcast.com:3912/253035" ;} +#spp-tv-comedycentral.eng,ro() { sppc "sop://151.80.76.190:3912/253470" ;} +#spp-tv-foxsports2.eng,ro() { sppc "sop://124.232.150.188:3920/5730" ;} +# +##}}} +########################################################### +##-------- MPS-Youtube Channels {{{ +##------------------------------------------------------ +# tutorial video: https://www.youtube.com/watch?v=VE2iCBkIs8E +mps-d() { mpsyt dlurl $1 ; } +mps-p() { mpsyt dvpl $1 ; } + +mpsyt-collider-movietalk() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcmbuEa2cRW7Xe4_NrnVrxXn" ;} +mpsyt-collider-jedicouncil() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnqEWU6U0D8I95SUiqVU3DR" ;} +mpsyt-collider-heroes() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnaH7ltMEq0h8jBlfU79kwg" ;} +mpsyt-collider-mailbag() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnuYS9PZhp3jgOSlb9BzaKs" ;} +mpsyt-collider-spoilers() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBclxpYg1JdmqUYQnKCCiPcPd" ;} +mpsyt-collider-arrow() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcleKplDKkFuxLrcL9-7Gw8T" ;} +mpsyt-collider-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcmOgOIwVNJV0G6YerPH_Fhp" ;} +mpsyt-collider-starwarsrebels() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBckZWQgRqTXB2CYRdzNuhBJX" ;} +mpsyt-collider-walkingdead() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBckJSHjt2QlwJ91YmNb_oH7k" ;} +mpsyt-amc-spoilers() { mpsyt pl "https://www.youtube.com/playlist?list=PLYNW0PN4_jrrILuvfws1zYComnO5n4nmJ" ;} +mpsyt-afterbuzz-arrowaftershow() { mpsyt pl PL6THzna6gLceNeZoXKUOoDeO7cwI57rJn ;} +mpsyt-afterbuzz-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PL6THzna6gLcdfHMhXnGy-O0kS0q-muucC" ;} +mpsyt-afterbuzz-gameofthrones() { mpsyt pl PL0404DAD1AD037666 ;} +mpsyt-thestreamtv-arrow() { mpsyt pl "https://www.youtube.com/playlist?list=PLgh_e6sv2kpr40BXrvZ2qONoSlxFspXGK" ;} +mpsyt-thestreamtv-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PLgh_e6sv2kprr9KHr94poccrwkAILkCcU" ;} +mpsyt-btt-beyondthetrailer() { mpsyt user beyondthetrailer ;} +mpsyt-btt-thinkabouttheink() { mpsyt user thinkabouttheink ;} +mpsyt-movie-watchmojo() { mpsyt user watchmojo ;} +mpsyt-movie-robertjones() { mpsyt user owiseone1 ;} +mpsyt-comic-variantcomics() { mpsyt user VariantComics ;} +mpsyt-tv-emergencyawesome() { mpsyt user emergencyawesome ;} +mpsyt-greatmilitarybattles() { mpsyt user greatmilitarybattles ;} +mpsyt-greentvgreentv() { mpsyt user greentvgreentv ;} +mpsyt-homeorganizing() { mpsyt user homeorganizing ;} +mpsyt-hak5(){ mpsyt user hak5 ;} +mpsyt-linux-linuxgamecast() { mpsyt user linuxgamecast ;} +mpsyt-linux-jupiterbroadcasting() { mpsyt user jupiterbroadcasting ;} +mpsyt-midwaysimplicity() { mpsyt user midwaysimplicity ;} +mpsyt-midwaysimplicity-mtohami() { mpsyt user mtohami ;} +mpsyt-minimalism-carriesimple() { mpsyt user UCtauuxrTG1yon8CNsgqhDkg ;} +mpsyt-minimalism-discernmylife() { mpsyt user UCJPp8gkjxH4T3A8rYO1S52A ;} +mpsyt-minimalism-poetskinny() { mpsyt user UC4O0Vd3UxFXGX-UQNelwTag ;} +mpsyt-minimalism-ticoandtina() { mpsyt user ticoandtina ;} +mpsyt-minimalism-unconventionalliving() { mpsyt user UC7uuFb0QztC-yC2CrcS-lJw ;} +mpsyt-minimalism-zenminimalism() { mpsyt user UCpD5Hqe60AJ79fupvuA6F1Q ;} +mpsyt-mma-arielhelwani() { mpsyt user arielhelwani ;} +mpsyt-mma-fueltv() { mpsyt user fueltv ;} +mpsyt-mma-gracieacademy() { mpsyt user gracieacademy ;} +mpsyt-mma-graciebreakdown() { mpsyt user graciebreakdown ;} +mpsyt-mma-karynbryant() { mpsyt user karynbryant ;} +mpsyt-mma-mmaheat() { mpsyt user mmaheat ;} +mpsyt-mma-mmafightingonsbn() { mpsyt user mmafightingonsbn ;} +mpsyt-mma-thefightnetwork() { mpsyt user thefightnetwork ;} +mpsyt-mma-themmanuts() { mpsyt user themmanuts ;} +mpsyt-mma-ufc() { mpsyt user ufc ;} +mpsyt-mma-uncutsports() { mpsyt user uncutsports ;} +mpsyt-movie-cinefix() { mpsyt user CineFix ;} +mpsyt-peakmoment() { mpsyt user peakmoment ;} +mpsyt-poetskinny() { mpsyt user poetskinny ;} +mpsyt-poetskinnyUnleashed() { mpsyt user PoetskinnyUnleashed ;} +mpsyt-tinyhouse-kirstendirksen() { mpsyt user kirstendirksen ;} +mpsyt-tinyhouse-livingbigtinyhouse() { mpsyt user livingbigtinyhouse ;} +mpsyt-tinyhouse-relaxshacksDOTcom() { mpsyt user relaxshacksDOTcom ;} +mpsyt-tinyhouse-tinyhousegj() { mpsyt user tinyhousegj ;} +mpsyt-tmw-askhodgetwins() { mpsyt user askhodgetwins ;} +mpsyt-tmw-fastingtwins() { mpsyt user fastingtwins ;} +mpsyt-tmw-getfit4women() { mpsyt user getfit4women ;} +mpsyt-tmw-hodgetwins() { mpsyt user hodgetwins ;} +mpsyt-tmw-hodgetwinsonsports() { mpsyt user hodgetwinsonsports ;} +mpsyt-tmw-twinmuscleworkout() { mpsyt user twinmuscleworkout ;} +mpsyt-vanlife-christravels() { mpsyt user tylerdurdeno9 ;} +mpsyt-vanlife-exploringalternatives() { mpsyt user explorealternatives ;} +mpsyt-vanlife-noellemarie() { mpsyt user noellemarie42 ;} +mpsyt-vanlife-happilyhouseless() { mpsyt user TheNomadicvanman ;} +mpsyt-vanlife-justincredible() { mpsyt user JustinCredibleTV ;} +mpsyt-vanlife-nomadicfanatic() { mpsyt user nomadicfanatic ;} +mpsyt-walkingdead() { mpsyt pl "http://www.youtube.com/playlist?list=PLC7EC9FB2E211A261" ;} +mpsyt-walkingdead-talkingdead() { mpsyt pl "http://www.youtube.com/playlist?list=PLP63B9XPsQt3H_5xGXifFxFJE7-RsKFb6" ;} +mpsyt-walkingdead-webisodes() { mpsyt pl "http://www.youtube.com/playlist?list=PLC09448134D906619" ;} +mpsyt-wwefannation() { mpsyt user wwefannation ;} +# +## }}} +########################################################### +##-------- Youtube Viewer Channels {{{ +##------------------------------------------------------ +## tutorial video: http://www.youtube.com/watch?v=FnJ67oAxVQ4 +## watch/login/comment/search/download...etc video on youtube, all from cli +## https://github.com/trizen/youtube-viewer +#yt-listen() { youtube-viewer -n $@ ;} # no video, music/audio only +#yt-music() { youtube-viewer -n --category=Music --top ;} # show top music list +#yts-movie-movieclipstrailer() { youtube-viewer -u UCi8e0iOVk1fEOogdfu4YgfA ;} +#yts-amcmovietalk() { youtube-viewer -p PLBFB97E5B9494EEBD ;} +#yts-amcmovietalk-mailbag() { youtube-viewer -p PLYNW0PN4_jrqlBqzAVRv3rfpo6nhzJnKp ;} +#yts-amctheatres() { youtube-viewer -u amctheatres ;} +#yts-afterbuzz-arrowaftershow() { youtube-viewer -p PL6THzna6gLceNeZoXKUOoDeO7cwI57rJn ;} +#yts-afterbuzz-gameofthrones() { youtube-viewer -p PL0404DAD1AD037666 ;} +#yts-afterbuzz-revolution() { youtube-viewer -p PL6THzna6gLccSY_0Cmoy6DvfH0iC8fyLR ;} +#yts-btt-beyondthetrailer() { youtube-viewer -u beyondthetrailer ;} +#yts-btt-thinkabouttheink() { youtube-viewer -u thinkabouttheink ;} +#yts-comic-watchmojo() { youtube-viewer -u watchmojo ;} +#yts-game-cinemassacre() { youtube-viewer -u cinemassacre ;} +#yts-game-craigslistgamefinds() { youtube-viewer -u craigslistgamefinds ;} +#yts-game-happyconsolegamer() { youtube-viewer -u happyconsolegamer ;} +#yts-game-jamesnintendonerd() { youtube-viewer -u jamesnintendonerd ;} +#yts-game-metaljesusrocks() { youtube-viewer -u metaljesusrocks ;} +#yts-game-mcfrosticles() { youtube-viewer -u mcfrosticles ;} +#yts-game-seejayare() { youtube-viewer -u SeeJayAre ;} +#yts-game-retroliberty() { youtube-viewer -u retroliberty ;} +#yts-greatmilitarybattles() { youtube-viewer -u greatmilitarybattles ;} +#yts-greentvgreentv() { youtube-viewer -u greentvgreentv ;} +#yts-homeorganizing() { youtube-viewer -u homeorganizing ;} +#yts-linuxgamecast() { youtube-viewer -u linuxgamecast ;} +#yts-jupiterbroadcasting() { youtube-viewer -u jupiterbroadcasting ;} +#yts-minimalism-carriesimple() { youtube-viewer -u UCtauuxrTG1yon8CNsgqhDkg ;} +#yts-minimalism-poetskinny() { youtube-viewer -u UC4O0Vd3UxFXGX-UQNelwTag ;} +#yts-minimalism-ticoandtina() { youtube-viewer -u ticoandtina ;} +#yts-minimalism-unconventionalliving() { youtube-viewer -u UC7uuFb0QztC-yC2CrcS-lJw ;} +#yts-minimalism-zenminimalism() { youtube-viewer -u UCpD5Hqe60AJ79fupvuA6F1Q ;} +#yts-midwaysimplicity() { youtube-viewer -u midwaysimplicity ;} +#yts-midwaysimplicity-mtohami() { youtube-viewer -u mtohami ;} +#yts-mma-arielhelwani() { youtube-viewer -u arielhelwani ;} +#yts-mma-fueltv() { youtube-viewer -u fueltv ;} +#yts-mma-gracieacademy() { youtube-viewer -u gracieacademy ;} +#yts-mma-graciebreakdown() { youtube-viewer -u graciebreakdown ;} +#yts-mma-karynbryant() { youtube-viewer -u karynbryant ;} +#yts-mma-mmaheat() { youtube-viewer -u mmaheat ;} +#yts-mma-mmafightingonsbn() { youtube-viewer -u mmafightingonsbn ;} +#yts-mma-thefightnetwork() { youtube-viewer -u thefightnetwork ;} +#yts-mma-themmanuts() { youtube-viewer -u themmanuts ;} +#yts-mma-ufc() { youtube-viewer -u ufc ;} +#yts-mma-uncutsports() { youtube-viewer -u uncutsports ;} +#yts-peakmoment() { youtube-viewer -u peakmoment ;} +#yts-poetskinny() { youtube-viewer -u poetskinny ;} +#yts-poetskinnyunleashed() { youtube-viewer -u PoetskinnyUnleashed ;} +#yts-tinyhouse-kirstendirksen() { youtube-viewer -u kirstendirksen ;} +#yts-tinyhouse-livingbigtinyhouse() { youtube-viewer -u livingbigtinyhouse ;} +#yts-tinyhouse-relaxshacksDOTcom() { youtube-viewer -u relaxshacksDOTcom ;} +#yts-tinyhouse-tinyhousegj() { youtube-viewer -u tinyhousegj ;} +#yts-tmw-askhodgetwins() { youtube-viewer -u askhodgetwins ;} +#yts-tmw-fastingtwins() { youtube-viewer -u fastingtwins ;} +#yts-tmw-getfit4women() { youtube-viewer -u getfit4women ;} +#yts-tmw-hodgetwins() { youtube-viewer -u hodgetwins ;} +#yts-tmw-hodgetwinsonsports() { youtube-viewer -u hodgetwinsonsports ;} +#yts-tmw-twinmuscleworkout() { youtube-viewer -u twinmuscleworkout ;} +#yts-vanlife-christravels() { youtube-viewer -u tylerdurdeno9 ;} +#yts-vanlife-happilyhouseless() { youtube-viewer -u TheNomadicvanman ;} +#yts-vanlife-justincredible() { youtube-viewer -u JustinCredibleTV ;} +#yts-walkingdead() { youtube-viewer -p PLC7EC9FB2E211A261 ;} +#yts-walkingdead-talkingdead() { youtube-viewer -p PLP63B9XPsQt3H_5xGXifFxFJE7-RsKFb6 ;} +#yts-walkingdead-webisodes() { youtube-viewer -p PLC09448134D906619 ;} +#yts-wwefannation() { youtube-viewer -u wwefannation ;} +### }}} +########################################################### +##-------- NVLC Podcast RSS {{{ +##------------------------------------------------------ +## DEMO: https://www.youtube.com/watch?v=7y_58wpHuFE +## DESC: play local and internet media using ncurses VLC +# +#nvlc-player() { nvlc ${1:-cdda://} ;} # other cdrom; cdda:///dev/cdrom ; cdda:///dev/sr0 ; cdda:///dev/sr1 +#nvlc-podcast() { nvlc -S podcast --podcast-urls "$@" ;} +#podcast-nba-shaq() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=779" ;} +#podcast-mma-mmahour() { nvlc-podcast "http://feeds.feedburner.com/aol/fanhouse/mmahour/audio?format=xml" ;} +#podcast-mma-mmabeat() { nvlc-podcast "http://feeds.podtrac.com/ZGWlPI2WWyVk" ;} +#podcast-mma-mmajunkie() { nvlc-podcast "http://feeds.feedburner.com/MMAjunkieRadio?format=xml" ;} +#podcast-mma-mmaproradio() { nvlc-podcast "http://feeds.feedburner.com/ProMmaRadio" ;} +#podcast-mma-chaelsonnen() { nvlc-podcast "http://feeds.feedburner.com/YoureWelcomeWithChaelSonnen?format=xml" ;} +#podcast-mma-mmareport() { nvlc-podcast "http://staticv3.fightnetwork.com/xml/itunes_mma.rss" ;} +#podcast-mma-joerogan() { nvlc-podcast "http://joeroganexp.joerogan.libsynpro.com/rss" ;} +#podcast-wwf-stonecold() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=436" ;} +#podcast-wwf-chrisjericho() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=593" ;} +#podcast-wwf-liveaudiowrestling() { nvlc-podcast "http://staticv3.fightnetwork.com/xml/itunes_law.rss" ;} +#podcast-wwf-solomonster() { nvlc-podcast "http://solomonster.podbean.com/feed/" ;} +#podcast-wwf-bookert() { nvlc-podcast "https://api.radio.com/v2/podcast/rss/1240?format=MP3_128K" ;} +#podcast-movie-schmoesknow() { nvlc-podcast "http://feeds.feedburner.com/SchmoesKnowMoviesPodcast" ;} +#podcast-movie-dcmovienews() { nvlc-podcast "http://popcorntalknetwork.com/category/shows/dc-movie-news-podcast/feed/" ;} +#podcast-fitness-jillianmichaels() { nvlc-podcast "http://feeds.sideshownetwork.tv/JillianMichaels" ;} +#podcast-talk-jessahinton() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=797" ;} +#podcast-talk-emilymorse() { nvlc-podcast "http://feeds.feedburner.com/SexWithEmily" ;} +#podcast-talk-lorasomoza() { nvlc-podcast "https://s3.amazonaws.com/betweenthesheetswithlora/feeds/betweenthesheetsrss.xml" ;} +#podcast-starwars-farfaraway() { nvlc-podcast "http://geeknation.com/podcast-feed/far-far-away/" ;} +#podcast-linux-thirdworldlinux() { nvlc-podcast "http://feeds.feedburner.com/thirdworldlinuxogg" ;} +#podcast-linux-linuxactionshow() { nvlc-podcast "http://feeds.feedburner.com/TheLinuxActionShowOGG" ;} +#podcast-linux-linuxunplugged() { nvlc-podcast "http://feeds.feedburner.com/linuxunogg" ;} +#podcast-linux-techtalktoday() { nvlc-podcast "http://feedpress.me/t3ogg" ;} +#podcast-linux-everydaylinux() { nvlc-podcast "http://elementopie.com/feeds/everydaylinux/feed.xml" ;} +#podcast-linux-goinglinux() { nvlc-podcast "http://goinglinux.com/oggpodcast.xml" ;} +#podcast-linux-hackerpublicradio() { nvlc-podcast "http://hackerpublicradio.org/hpr_total_ogg_rss.php" ;} +#podcast-science-nprradiolab() { nvlc-podcast "http://feeds.wnyc.org/radiolab" ;} +#podcast-science-startalk() { nvlc-podcast "http://feeds.soundcloud.com/users/soundcloud:users:38128127/sounds.rss" ;} +#podcast-science-thisweekinscience() { nvlc-podcast "http://feeds.feedburner.com/twis/science/" ;} +# +##}}} +########################################################### +##-------- Internet Music {{{ +## URL: http://whatnotlinux.blogspot.com/2013/02/somafm-and-digitally-imported-bash.html +#somafm() { +#while true; do local station;echo "Select a station to listen to:";select station in "Doomed" "Groove Salad" "Lush" "Suburbs of Goa" "Secret Agent" "Drone Zone" "Space Station" "cliqhop idm" "Digitalis" "Sonic Universe" "Boot Liquor" "Covers" "Illinois Street Lounge" "indie pop rocks" "PopTron" "Tags Trip" "Beat Bender" "Mission Control";do station=$(echo -n "$station"|tr '[:upper:]' '[:lower:]'|sed 's/ //g');break;done; mplayer -playlist http://somafm.com/startstream=${station}.pls; done; +#} +# +#difm() { +#while true; do local station;echo "Select a station to listen to:";select station in "trance" "vocaltrance" "electro" "chillout" "eurodance" "house" "soulfulhouse" "funkyhouse" "tribalhouse" "harddance" "minimal" "techno" "progressive" "goapsy" "hardstyle" "hardcore" "djmixes" "lounge" "drumandbass" "classictechno" "ambient" "breaks" "futuresynthpop";do station=$(echo -n "$station"|tr '[:upper:]' '[:lower:]'|sed 's/ //g');break;done; mplayer -playlist http://www.di.fm/mp3/${station}.pls; done; +#} +# +##}}} +########################################################### +# +############################### +######## D. OBSOLETE LIST ##### +############################### +## Code that is still useful but I no longer use it, still here for references +# +########################################################### +##-------- Recordmydesktop CLI {{{ +##------------------------------------------------------ +## http://www.pclinuxos.com/forum/index.php/topic,97181.msg822796.html#msg822796 +## Screen capture software +## Ctrl+C Stop +## Ctrl+C x2 Cancle rendering +## BUG: RMD Adjusted recording window, which cuts 10 pixel from the height, thus we have to use offset -x -y +## https://wiki.archlinux.org/index.php/RecordMyDesktop +## http://sourceforge.net/p/recordmydesktop/discussion/590957/thread/cf788e96/ +## https://groups.google.com/forum/#!topic/linux.debian.bugs.dist/reE8_9fqqAw +## native reso 1680x1050 -- > rmd reso 1080x1040, offset y axis -y 6 +## SOUND LAG? lower the freq; 45000, 44100, 22050 +## http://www.kkoncepts.net/blog/fixing-out-sync-audio-and-video-ffmpeg +#RMD_OUTPUT=~/Public/screencast/rr_movie_baking.ogv +# +## Frequency; lower to fix sound lag; 45000, 44100, 22050 +#RMD_FREQ=22050 +# +## Frames per second +#RMD_FPS=30 +# +## Channel (mono = 1 ; dual = 2) +#RMD_CHANNELS=1 +# +## SoundCard (pulse for pulseaudio; install pavucontrol to change pulse settings) +## hw:0,1 for directly communicating with your soundcard +## to get a list of sound device: +## arecord -l +## aplay -l +## cat /proc/asound/pcm +## alsamixer and hit F6 +## FF_SOUNDCARD=pulse +## FF_SOUNDCARD=hw:0,1 +#RMD_SOUNDCARD=hw:3,0 +# +#rmd-all() { recordmydesktop --no-wm-check --no-frame --full-shots --fps $RMD_FPS --channels $RMD_CHANNELS --device $RMD_SOUNDCARD --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +# +## Benq Monitor; 1680x1050 (make sure 2nd monitor is higher res) +## Initial recording window is set to: +## X:0 Y:0 Width:1680 Height:1050 +## Adjusted recording window is set to: +## X:0 Y:0 Width:1680 Height:1056 +#rmd-benq() { recordmydesktop --no-wm-check --no-frame --full-shots --width 1680 --height 1050 --fps $RMD_FPS --channels $RMD_CHANNELS --device $RMD_SOUNDCARD --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +# +# +## ProscanTV; 1920x1080 --> 1920x1072 ; X offset by 1680 +## Initial recording window is set to: +## X:0 Y:0 Width:1920 Height:1080 +## Adjusted recording window is set to: +## X:0 Y:4 Width:1920 Height:1072 +#rmd-proscantv() { recordmydesktop --no-wm-check --no-frame --full-shots -x 1680 --width 1920 --height 1072 --fps $RMD_FPS --channels $RMD_CHAN --device $RMD_DEV --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +# +## Examples +## select window +## E1: (select window); recordmydesktop --no-frame --full-shots --fps 30 --channels 2 --freq 44100 --windowid $(xwininfo | awk '/Window id:/ {print $4}') --overwrite -o out.ogv ;} +## E2: recordmydesktop --no-wm-check --no-frame --width 1680 --height 1050 --fps 30 --channels 1 --device hw:3,0 --freq 44100 --overwrite -o out.ogv ;} +##E3: (fullscreen); recordmydesktop --no-frame --full-shots --fps 30 --channels 2 --freq 44100 --overwrite -o out.ogv ;} +# +##}}} +########################################################### +##-------- Air Comic Server # {{{ +##------------------------------------------------------ +## tutorial Video: http://www.youtube.com/watch?v=YceW_VcGA4A +## http://gnomewarrior32.blogspot.kr/2013/03/air-comic-server-english.html +#ACSJar=~/.scripts/aircomic/AirComicServer.jar +#ACSConf=~/.scripts/aircomic/AirComicServer.xml +# +#cfg-aircomicserver() { $EDITOR $ACSConf ;} +#aircomicserver() { nohup java -jar $ACSJar -c $ACSConf -n >/dev/null 2>&1& } +#aircomicserver-lite() { nohup java -XX:+UseSerialGC -Xms32M -Xminf=5 -Xmaxf=10 -jar $ACSJar -c $ACSConf -n >/dev/null 2>&1& } +#aircomicserver-gui() { nohup java -XX:+UseSerialGC -Xms32M -Xminf=5 -Xmaxf=10 -jar $ACSJar -c $ACSConf >/dev/null 2>&1& } +#aircomicserver-quit() { kill $(ps -ef | grep '[A]irComicServer.jar' | awk '{print $2}') ;} +## }}} +########################################################### +##-------- Cherry Music Server # {{{ +##------------------------------------------------------ +## tutorial Video: https://www.youtube.com/watch?v=X2goFerMJDY +# +#BIN_CHERRYMUSIC=~/.scripts/cherrymusic/cherrymusic +#cherrymusic() { nohup python $BIN_CHERRYMUSIC --port 8442 >/dev/null 2>&1& } +#cherrymusic-setup() { python $BIN_CHERRYMUSIC --setup --port 8442 ;} +#cherrymusic-quit() { kill $(ps -ef | grep -i '[C]herrymusic' | awk '{print $2}') ;} +#cfg-cherrymusic() { $EDITOR ~/.config/cherrymusic/cherrymusic.conf ;} +# +## }}} +########################################################### +##-------- Sharelin (Gnutella2 P2P Downloader) {{{ +##------------------------------------------------------ +# +## tutorial video: https://www.youtube.com/watch?v=Yi3JKyL-hxk +#sharelin-daemon() { sharelin -d ;} +#sharelin-quit() { killall sharelin ;} +# +## }}} +########################################################### +##-------- Aria2c WebUI {{{ +##------------------------------------------------------ +## downloader for torrents, magnet links, http, ftp, metalinks +## tutorial video: https://www.youtube.com/watch?v=LCr_0zFcbaM +#alias magnet-to-torrent="aria2c -q --bt-metadata-only --bt-save-metadata" +#aria2c-quit() { +# killall aria2c +# kill $(ps -ef | grep '[h]ttp.server' | awk '{print $2}') +# #kill $(ps -ef | grep '[S]impleHTTPServer' | awk '{print $2}') +#} +# +#aria2c-webui() { +# # download location +# DIR_DL=~/Downloads +# +# # run as daemon +# aria2c --enable-rpc --rpc-listen-all -D -d "$DIR_DL" +# +# +# # use python simplehttpserver to host the webui +# # this avoids download the index.html file on each computer +# # https://github.com/ziahamza/webui-aria2 +# +# # path to the webui index.html +# DIR_WEBUI=~/.scripts/webui-aria2/ +# +# # webui-aria2c uses port 6800 so we use 6801 for python_simple_http_server +# PORT=6801 +# cd "$DIR_WEBUI" +# nohup python3 -m http.server "$PORT" >/dev/null 2>&1& +# +# # for older distro +# # nohup python2 -m SimpleHTTPServer "$PORT" >/dev/null 2>&1& +# +# echo "connect via http://localhost:$PORT or http://ip_address_of_server:$PORT" +#} +# +## }}} +########################################################### +##-------- iPod 5G Device {{{ +##------------------------------------------------------ +## convert to ipod 5g compatible video format +## tutorial video: http://www.youtube.com/watch?v=gVVeR9KizBk +# +#ipod5g() { HandBrakeCLI -i "$1" -o "${1%.*}.ipod5g.mp4" --preset="iPod" ;} +#ipod5g-tsp() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.ipod5g.mp4" --preset="iPod" ;} +#ipod5g-rsync() { +## https://gist.github.com/nekobato/5998548 +## including trailing slashes on $SRC +## rsync $SRC/Music/ $DEST/media/Ipod +#rsync -avrm --delete-excluded --modify-window=2 --include '*/' --include '*.mp3' --exclude '*' "$1" "$2" +#} +# +#tsp-handbrake-normal() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.normal.mp4" --preset="Normal" ;} +#tsp-handbrake-high() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.high.mp4" --preset="High Profile" ;} +# +## }}} +########################################################### +##-------- Spell Checking / Translation Related {{{ +##------------------------------------------------------ +## spell checking +## tutorial video: http://www.youtube.com/watch?v=UEwz5eeaZzc +#check-word() { echo "$1" | aspell -a ;} +#check-list() { cat "$1" | aspell list ;} +#check-file() { aspell check "$1" ;} +# +##}}} +########################################################### +##-------- i3 / Openbox {{{ +##------------------------------------------------------ +## wallpaper path +# +# +#setwallpaper() { +#ConnectedMonitor="$(xrandr | awk '/ connected/ {print $1}' | head -n 1)" +#PATH_WALLPAPER=~/Pictures/Wallpapers +# +# # find current running windows manager +# CURRENT_WM="$(wmctrl -m | grep "Name:" | awk '{print $2}')" +# +# # mate +# if [ $CURRENT_WM = Marco ]; then +# gsettings set org.mate.background picture-filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # xfce +# # tutorial video: http://www.youtube.com/watch?v=tL9uVT8D6k4 +# if [[ $DESKTOP_SESSION = Xfwm4 ]] || [[ $DESKTOP_SESSION = "Xfce Session" ]]; then +# xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor"$ConnectedMonitor"/workspace0/last-image -s "$PWD"/"$1" +# fi +# +# # i3 +# if [ $DESKTOP_SESSION = i3 ]; then +# # feh --randomize --bg-fill "$PATH_WALLPAPER"/* +# feh --randomize --bg-fill "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # gnome shell +# # tutorial video: http://www.youtube.com/watch?v=B_VnPXy3VCw +# if [ $DESKTOP_SESSION = GNOME ]; then +# gsettings set org.gnome.desktop.background picture-uri file://"$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# +# # gnome2 +# if [ $DESKTOP_SESSION = GNOME ]; then +# gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # lxde +# # tutorial video: http://www.youtube.com/watch?v=5xzfBiHuknk +# if [ $DESKTOP_SESSION = LXDE ]; then +# pcmanfm -w "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# } +# +# +#chwallpaper() { +#ConnectedMonitor="$(xrandr | awk '/ connected/ {print $1}' | head -n 1)" +#PATH_WALLPAPER=~/Pictures/Wallpapers +# +# # find current running windows manager +# CURRENT_WM="$(wmctrl -m | grep "Name:" | awk '{print $2}')" +# +# # mate +# if [ $CURRENT_WM = Marco ]; then +# gsettings set org.mate.background picture-filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # xfce +# # tutorial video: http://www.youtube.com/watch?v=tL9uVT8D6k4 +# if [[ $DESKTOP_SESSION = Xfwm4 ]] || [[ $DESKTOP_SESSION = "Xfce Session" ]]; then +# xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor"$ConnectedMonitor"/workspace0/last-image -s "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # i3 +# if [ $DESKTOP_SESSION = i3 ]; then +# # feh --randomize --bg-fill "$PATH_WALLPAPER"/* +# feh --randomize --bg-fill "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # gnome shell +# # tutorial video: http://www.youtube.com/watch?v=B_VnPXy3VCw +# if [ $DESKTOP_SESSION = GNOME ]; then +# gsettings set org.gnome.desktop.background picture-uri file://"$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# +# # gnome2 +# if [ $DESKTOP_SESSION = GNOME ]; then +# gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# +# # lxde +# # tutorial video: http://www.youtube.com/watch?v=5xzfBiHuknk +# if [ $DESKTOP_SESSION = LXDE ]; then +# pcmanfm -w "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +# fi +# } +# +# +##}}} +########################################################### +##-------- Capture RTMP Streams (URL Sniffing) {{{ +##------------------------------------------------------ +## tutorial video: http://www.youtube.com/watch?v=u1dQ81HT4AU +## https://github.com/gotbletu/shownotes/blob/master/rtmpdump_sniff_your_own_tutorial.txt +## http://pclosmag.com/html/Issues/201104/page19.html +sniff-begin() { sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ;} +sniff-capture-rtmpsrv() { rtmpsrv ;} +sniff-capture-rtmpsuck() { rtmpsuck ;} +sniff-end() { sudo iptables -t nat -D OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ;} +tsniff-begin() { sudo tcpdump -ieth0 -nn -A | grep -e"rtmp" -e"connect" -e"play" > /tmp/tcpoutput.txt ;} +tsniff-less() { less /tmp/tcpoutput.txt ;} +##}}} +########################################################### +# +############################### +######## E. TESTING LIST ###### +############################### +## New code dump, stuff I am creating or copy from others +# +# +########################################################### +##-------- Weechat XDCC {{{ +##------------------------------------------------------ +## http://nibl.co.uk/bots.php?search= +# +#xdcc-nibl() { +# if [ $# -lt 1 ] +# then +# echo -e "Download XDCC files from using weechat from (#nibl @ irc.rizon.net)" +# echo -e "Search using http://nibl.co.uk/bots.php?search=" +# echo -e "\nUsage:\n$0 </msg>" +# echo -e "\nexample:\n$0 '/msg AHQ[Turtle] xdcc send #1721'" +# +# return 1 +# fi +# +# echo "irc.rizon.#nibl *$1" > "$(ls ~/.weechat/weechat_fifo*)" +#} +# +# +# +# +## }}} +########################################################### +#-------- Empty Template {{{ +##------------------------------------------------------ +# +## }}} +########################################################### +## https://www.reddit.com/r/archlinux/comments/42784v/what_are_your_bash_aliasesfunctions_for_ffmpeg/cz88h5f +#ffmpeg-stereo () { +# ffmpeg -i "$1" -i "$2" -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" -c:a flac "$3" +#} +# +## https://www.reddit.com/r/archlinux/comments/423wr9/is_anyone_having_trouble_with_reflector/ +## alias updatemirrors='sudo reflector --verbose --country 'United States' -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist' +# +## Shortcut to generate an updated Arch Linux mirrorlist - requires reflector +#reflector-generate() { +# reflector --country "United States" -l 200 -p http --sort rate --save "$1" +#} +# +#mpd-kill() { kill -9 $(cat ~/.mpd/mpd.pid) ;} +#mpd-restart() { kill -9 $(cat ~/.mpd/mpd.pid) && mpd ;} +# +########################################################### +#-------- Battery Status {{{ +##------------------------------------------------------ +## https://www.reddit.com/r/debian/comments/41sw7g/checking_battery_status_in_terminal/cz68iwq +#alias batterystatus="upower -i /org/freedesktop/UPower/devices/........ | grep time" +#alias batteryshow='cat /sys/class/power_supply/BAT1/status' +# }}} +########################################################### +##-------- Binary / Shell Scripts {{{ +##------------------------------------------------------ +# +# +## lightweight image viewer +## tutorial video: https://www.youtube.com/watch?v=OMOIZlOEfb8 +## https://wiki.archlinux.org/index.php/Feh#File_Browser_Image_Launcher +#feh-browser() { ~/.scripts/feh_browser.sh $@ -B white -g 1280x800 & } +#feh-slideshow() { ~/.scripts/feh_browser.sh $@ -B white -g 1280x800 -D 3 & } +# +## http://code.google.com/p/imgur-cli +## imgur image uploader http://imgur.com +#imgur() { python2 ~/.scripts/imgur-cli/imgur.py $@ ;} +# +## manual tiling (similar compiz grid plugin) +## tutorial video: https://www.youtube.com/watch?v=ZF76DELEpjM +## http://ssokolow.com/quicktile +#quicktile() { python2.7 ~/.config/quicktile/quicktile.py $@ ;} +#quicktile-daemonize() { nohup python2.7 ~/.config/quicktile/quicktile.py -d >/dev/null 2>&1& } +#quicktile-kill () { kill $(ps -ef | grep '[q]uicktile.py' | awk '{print $2}') ;} +# +## http://bash.cyberciti.biz/multimedia/linux-rip-audio-cd/ +#rip-audio-cd() { ~/.scripts/rip_audio_cd.sh ;} +# +## screenshot gallery generator +## tutorial video: https://www.youtube.com/watch?v=_4G4nMUTzX8 +## http://cli-apps.org/content/show.php/Movie+Thumbnailer?content=74676 +#shot() { ~/.scripts/shot.sh -n 30 -r 80% -s $@ ;} +# +## take screenshot fullscreen, window, area selection using import command +## http://en.gentoo-wiki.com/wiki/Screenshot +#sshot() { ~/.scripts/screenshot.sh area ;} +# +## Vim as a pager ( similar to the less command ) +## tutorial video: https://www.youtube.com/watch?v=RefWl8I3nBg +# # issue: gg hotkey does not jump to exact line +# vlessold() { /usr/share/vim/vim73/macros/less.sh "$1" ;} +# +# # http://technotales.wordpress.com/2009/05/24/using-vim-as-a-pager/ +# # vim readonly; to force write use :w! +# vless() { vim -R "$@" ;} +# +## https://bitbucket.org/antocuni/tty2gif +## convert ttyrec to gif files +#tty2gif() { python3 ~/.scripts/tty2gif/tty2gif.py $@ ;} +# +## https://github.com/saironiq/shellscripts/blob/master/wolframalpha_com/wa.sh +## http://www.wolframalpha.com +#wolframalpha() { ~/.scripts/shellscripts/wolframalpha_com/was.sh ;} +# +##}}} +########################################################### +##-------- Copy Move {{{ +##------------------------------------------------------ +#cpr() { +# if [ $# -lt 1 ]; then +# echo -e "rsync copying files using task spooler queue" +# echo -e "\nUsage:\n$0 [-h help] [-t task-spooler] <source> <destination>" +# echo -e "\nInclude Parent Folder:\n$0 <source> <destination>" +# echo -e "\nExclude Parent Folder:\n$0 <source>/ <destination>" +# echo -e "\nRequirements: rsync task-spooler" +# return 1 +# else +# case "$1" in +# -t) tsp rsync -a "$@" ;; +# -h) $0 ;; +# -*) $0 ;; +# *) rsync -av --progress "$@" ;; +# esac +# fi +#} +#mvr() { +# if [ $# -lt 1 ]; then +# echo -e "rsync moving files using task spooler queue" +# echo -e "\nUsage:\n$0 [-h help] [-t task-spooler] <source> <destination>" +# echo -e "\nInclude Parent Folder:\n$0 <source> <destination>" +# echo -e "\nExclude Parent Folder:\n$0 <source>/ <destination>" +# echo -e "\nRequirements: rsync task-spooler" +# return 1 +# else +# case "$1" in +# -t) tsp rsync -a --remove-source-files "$@" ;; +# -h) $0 ;; +# -*) $0 ;; +# *) rsync -av --progress --remove-source-files "$@" ;; +# esac +# fi +#} +## }}} +########################################################### +##-------- VirtualEnv (Python Isolated Environment) {{{ +##------------------------------------------------------ +# +## tutorial video: https://www.youtube.com/watch?v=n8ZzqsFeHOI +#virtwrap-create() { +# mkdir -p ~/.virtualenv +# cd ~/.virtualenv +# virtualenv "$1" -p "${2:-python}" +# source "$1"/bin/activate +#} +#virtwrap-activate() { +# cd ~/.virtualenv +# source "$1"/bin/activate +#} +# +## }}} +########################################################### +##-------- Convert to Image {{{ +##------------------------------------------------------ +## pdftoppm convert pdf to images +## http://askubuntu.com/a/50180 +#convert_pdf_to_png() { +# if [ $# -lt 1 ] +# then +# echo -e "convert PDF document to PNG image (default dpi is 150)" +# echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +# echo -e "\nall pages to images:\n$0 file.pdf" +# echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +# echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +# echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +# +# return 1 +# fi +# pdftoppm -png "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +#} +# +#convert_pdf_to_jpg() { +# if [ $# -lt 1 ] +# then +# echo -e "convert PDF document to JPEG image (default dpi is 150)" +# echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +# echo -e "\nall pages to images:\n$0 file.pdf" +# echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +# echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +# echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +# +# return 1 +# fi +# pdftoppm -jpeg "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +#} +# +#convert_pdf_to_tiff() { +# if [ $# -lt 1 ] +# then +# echo -e "convert PDF document to TIFF image (default dpi is 150)" +# echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +# echo -e "\nall pages to images:\n$0 file.pdf" +# echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +# echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +# echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +# +# return 1 +# fi +# pdftoppm -tiff "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +#} +# +#convert_pdf_to_pgm-grayscale() { +# if [ $# -lt 1 ] +# then +# echo -e "convert PDF document to PGM Grayscale image (default dpi is 150)" +# echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +# echo -e "\nall pages to images:\n$0 file.pdf" +# echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +# echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +# echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +# +# return 1 +# fi +# pdftoppm -gray "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +#} +# +#convert_pdf_to_pbm-monochrome() { +# if [ $# -lt 1 ] +# then +# echo -e "convert PDF document to PBM Monochrome image (default dpi is 150)" +# echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +# echo -e "\nall pages to images:\n$0 file.pdf" +# echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +# echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +# echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +# +# return 1 +# fi +# pdftoppm -mono "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +#} +# +## }}} +########################################################### +##-------- Disk Image to ISO {{{ +##------------------------------------------------------ +# +## https://github.com/helmuthdu/dotfiles/blob/master/.bashrc +#convert2discimage_iso () { +# if [[ $# == 0 || $1 == "--help" || $1 == "-h" ]]; then +# echo -e "Converts raw|bin|cue|ccd|img|mdf|nrg disc image to ISO" +# echo -e "Usage: $0 <disc_image>" +# fi +# for i in $*; do +# if [[ ! -f "$i" ]]; then +# echo "'$i' is not a valid file; jumping it" +# else +# echo -n "converting $i..." +# # OUT=`echo $i | cut -d '.' -f 1` +# case $i in +# *.raw ) bchunk "$i" "${i%.*}.iso" ;; #raw=bin +# *.bin|*.cue ) bchunk "${i%.*}.bin" "${i%.*}.cue" "${i%.*}.iso" ;; # bin,cue +# *.ccd|*.img ) ccd2iso "${i%.*}.img" "${i%.*}.iso" ;; # Clone CD images +# *.mdf ) mdf2iso "$i" "${i%.*}.iso" ;; # Alcohol images +# *.nrg ) nrg2iso "$i" "${i%.*}.iso" ;; # Nero images +# * ) echo "$0 don't know de extension of '$i'";; +# esac +# if [[ $? != 0 ]]; then +# echo -e "${R}ERROR!${W}" +# else +# echo -e "${G}done!${W}" +# fi +# fi +# done +#} +# +## https://help.ubuntu.com/community/ManageDiscImages#CloneCD.2FIMG_Images +#convert_to_iso() { +# if [ -z "$1" ]; then +# # display usage if no parameters given +# echo "Usage: extract <path/file_name>.<bin|cue|img|nrg|mdf|mds>" +# else +# if [ -f "$1" ] ; then +# NAME=${1%.*} +# #mkdir $NAME && cd $NAME +# case "$1" in +# *.bin) bchunk "$1" "${1%.*}".cue "${1%.*}".iso ;; # bin/cue +# *.cue) bchunk "${1%.*}".bin "$1" "${1%.*}".iso ;; # bin/cue +# *.img) ccd2iso "$1" "${1%.*}".iso ;; # CloneCD/IMG +# *.nrg) nrg2iso "$1" "${1%.*}".iso ;; +# *.mdf) mdf2iso "$1" "${1%.*}".iso ;; +# *.mds) mdf2iso "${1%.*}".mdf "${1%.*}".iso ;; +# *) echo "$0: '$1' - unsupported format" ;; +# esac +# else +# echo "'$1' - file does not exist" +# fi +#fi +#} +# +## ex() -- Extract compressed files (tarballs, zip, etc) +#ex() { +# for file in "$@"; do +# if [ -f "$file" ]; then +# local file_type=$(file -bizL "$file") +# case "$file_type" in +# *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) +# bsdtar -x -f "$file" ;; +# *application/x-gzip*) +# gunzip -d -f "$file" ;; +# *application/x-bzip*) +# bunzip2 -f "$file" ;; +# *application/x-rar*) +# 7z x "$file" ;; +# *application/octet-stream*) +# local file_type=$(file -bzL "$file") +# case "$file_type" in +# 7-zip*) 7z x "$file" ;; +# *) echo -e "Unknown filetype for '$file'\n$file_type" ;; +# esac ;; +# *) +# echo -e "Unknown filetype for '$file'\n$file_type" ;; +# esac +# else +# echo "'$file' is not a valid file" +# fi +# done +#} +# +# +## }}} +########################################################### +##-------- Convert to Documents {{{ +##------------------------------------------------------ +#convert_images_to_pdf() { +# if [ $# -lt 1 ] +# then +# echo -e "convert images into one single pdf" +# echo -e "\nUsage:\n$0 <images>" +# echo -e "\nexample:\n$0 image1.jpg image2.jpg image3.jpg" +# echo -e "\n$0 *.jpg" +# echo -e "\n$0 *.png" +# +# return 1 +# fi +# convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf +#} +# +# +## Using libreoffice +#convert_to_html() { soffice --headless --convert-to "html:XHTML Writer File:UTF8" "$1" ;} +#convert_to_txt() { soffice --headless --convert-to "txt:Text (encoded):UTF8" "$1" ;} +# +# +## convert_to_pdfo() { +## if [ -z "$1" ]; then +## # display usage if no parameters given +## echo "Usage: extract <path/file_name>.<bin|cue|img|nrg|mdf|mds>" +## else +## if [ ! -f "${1%.*}".pdf ] ; then +## NAME=${1%.*} +## case "$1" in +## *.doc|*.docx) soffice --headless --convert-to pdf "$@" ;; +## *.ppt|*.pptx) soffice --headless --convert-to pdf "$@" ;; +## *.xls|*.xlsx) soffice --headless --convert-to pdf "$@" ;; +## *.txt|*.rtf) soffice --headless --convert-to pdf "$@" ;; +## *.html) soffice --headless --convert-to pdf "$@" ;; +## *.epub) soffice --headless --convert-to pdf "$@" ;; +## *.cbr|*.cbz|*.cb7|*.cbt|*.cba) ebook-convert "$1" .pdf ;; +## *.jpg|*.jpeg) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +## *.pbm|*.pgm) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +## *.png) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +## *) echo "'$1' - unsupported format or file does not exist" ;; +## esac +## else +## echo "'${1%.*}.pdf' - file exist, skipping to prevent overwrite" +## fi +## fi +## } +# +## http://duff-johnson.com/2014/02/17/the-8-most-popular-document-formats-on-the-web/ +#convert_to_pdf() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>.<doc|docx|ppt|pptx|xls|xlsx|txt|rtf|html|epub|cbr|cbz|cbt|cb7|cba|jpg|jpeg|pbm|pgm|png>" +# echo -e "\nsingle: $0 file.doc" +# echo -e "\nmultiple: $0 file1.jpg file2.jpg file3.jpg" +# echo -e "\nwildcard: $0 *.png" +# echo -e "\nRequirement: calibre imagemagick libreoffice" +# return 1 +# else +# if [ ! -f "${1%.*}".pdf ] ; then +# NAME=${1%.*} +# case "$1" in +# *.doc|*.docx) soffice --headless --convert-to pdf "$@" ;; +# *.ppt|*.pptx) soffice --headless --convert-to pdf "$@" ;; +# *.xls|*.xlsx) soffice --headless --convert-to pdf "$@" ;; +# *.txt|*.rtf) soffice --headless --convert-to pdf "$@" ;; +# *.html) soffice --headless --convert-to pdf "$@" ;; +# *.epub) soffice --headless --convert-to pdf "$@" ;; +# *.cbr|*.cbz|*.cb7|*.cbt|*.cba) ebook-convert "$1" .pdf ;; +# *.jpg|*.jpeg|*.pbm|*.pgm|*.png) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +# *) echo "'$1' - unsupported format or file does not exist" ;; +# esac +# else +# echo "'${1%.*}.pdf' - file exist, skipping to prevent overwrite" +# fi +# fi +#} +# +## }}} +########################################################### +##-------- Convert to Android (Smartphone, Tablet) {{{ +##------------------------------------------------------ +## http://develop.participatoryculture.org/index.php/ConversionMatrix +## https://trac.handbrake.fr/wiki/BuiltInPresets +# +#ANDROID_DEVICE=(-acodec aac -ab 160k -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -f mp4 -threads 0 -strict experimental) +#convert2devices_android_720pnd() { ffmpeg -i "$1" -s 1280x720 ${ANDROID_DEVICE[*]} "${1%.*}".android720p.mp4 ;} +#convert2devices_android_1080p() { ffmpeg -i "$1" -s 1920x1080 ${ANDROID_DEVICE[*]} "${1%.*}".android1080p.mp4 ;} +# +#convert2droid_kindlefire() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".kindlefire.mp4 ] +# do +# ffmpeg -i "$arg" -s 1024x600 -acodec aac -ab 96k -vcodec libx264 -preset slow -f mp4 -crf 22 -strict experimental "${arg%.*}".kindlefire.mp4 +# done +# done +#} +# +#convert2droid_androidtablet() { +# if [ $# -lt 1 ]; then +# echo -e "A preset for Midrange Andriud Tablet devices." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".androidtablet.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.androidtablet.mp4" --preset="Android Tablet" +# done +# done +#} +# +#convert2droid_android() { +# if [ $# -lt 1 ]; then +# echo -e "A preset for Midrange android devices." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".android.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.android.mp4" --preset="Android" +# done +# done +#} +#convert2droid_high() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's general-purpose preset for High Profile H.264 video, with all the bells and whistles." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".high.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.high.mp4" --preset="High Profile" +# done +# done +#} +# +#convert2droid_normal() { +# if [ $# -lt 1 ]; then +# echo -e "HandBrake's normal, default settings." +# echo -e "\nUsage: $0 <file_name>" +# echo -e "\nsingle: $0 file.avi" +# echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +# echo -e "\nwildcard: $0 *.avi" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}".normal.mp4 ] +# do +# HandBrakeCLI -i "$arg" -o "${arg%.*}.normal.mp4" --preset="Normal" +# done +# done +#} +# +## }}} +########################################################### +##-------- Youtube to Audio (Vice Versa) {{{ +##------------------------------------------------------ +# +## -f 171 = webm audio (vorbis) +## -f 140 = m4a (aac) +#yt2ogg() { youtube-dl -c --restrict-filenames --extract-audio --audio-format vorbis -o "%(title)s.%(ext)s" -f 171 "$@" ;} +#yt2wav() { youtube-dl -c --restrict-filenames --extract-audio --audio-format wav -o "%(title)s.%(ext)s" -f 171 "$@" ;} +yt2mp3() { youtube-dl -c --restrict-filenames --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s" -f 140 "$@" ;} +#yt2webmaudio() { youtube-dl -c --restrict-filenames -o "%(title)s.%(ext)s" -f 171 "$@" ;} +#yt2m4a() { youtube-dl -c --restrict-filenames -o "%(title)s.%(ext)s" -f 140 "$@" ;} +# +## http://www.tecmint.com/ffmpeg-commands-for-video-audio-and-image-conversion-in-linux/ +#yt2banneraudio() { +# if [ $# -lt 2 ] +# then +# echo -e "Use ffmpeg to create a banner audio (audio + image to video)" +# echo -e "\nUsage:\n$0 <image file> <audio file>" +# echo -e "\nExample:\n$0 cover.png file.mp3 \n" +# +# return 1 +# fi +# ffmpeg -loop 1 -i "$1" -i "$2" -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest "${2%.*}".mp4 +#} +# +## }}} +########################################################### +##-------- Demuxing {{{ +##------------------------------------------------------ +# +#demux_videotrack() { ffmpeg -i "$1" -an -codec:v copy "${1%.*}"."$0"."${1##*.}" ;} +#demux_audiotrack() { ffmpeg -i "$1" -vn -codec:a copy "${1%.*}"."$0"."${1##*.}" ;} +# +## demux_subs +## demux_fonts/attachments +# +## }}} +########################################################### +##-------- Extraction / Archive Related {{{ +##------------------------------------------------------ +##Compression (cd into dir, will compress every single folder) +#alias tardir='for i in *; do if [ -d "$i" ]; then tar czf "$i".tar.gz "$i"; fi; done' +#alias rardir='find * -maxdepth 0 -type d -exec rar a {}.rar {} \;' +#alias zipdir='find * -maxdepth 0 -type d -exec zip -r {}.zip {} \;' +# #Warning: removes dir after compression (below) +#alias rarkill='find * -maxdepth 0 -type d -exec rar a -df {}.rar {} \;' +##http://www.commandlinefu.com/commands/view/5198 +## $ ls | while read filename; do tar -czvf "$filename".tar.gz "$filename"; rm "$filename"; done +## compress folder into cbr/cbz +#cbrit() { rar a -r "${1%/}.cbr" "$1" ;} +#cbzit() { zip -r "${1%/}.cbz" "$1" ;} +# +#atool-extract() { atool -x $@ ;} +#atool-tsp() { tsp apack "${1%.*}.zip" "$@" ;} +#atool-add() { apack "${1%.*}.zip" "$@" ;} +#atool-append() { apack "$@" ;} # apack foo.zip my_additional_file.jpg +#atool-list() { atool -l "$1" | less -N ;} +#atool-delete() { +# local zipfilename="$1" +# local deletefile="$(atool -l "$zipfilename" | tail -n +4 | head -n -2 | cut -d':' -f2 | cut -d' ' -f4- | sed 's/\ /\\ /g' | sed -n "${2}p")" +# +# zip -d "$zipfilename" "$deletefile" +# +# +# } +# +#atool-zip-delete() { zip -d "$@" \*.txt ;} +# +# +#imguralbum_cbz() { +# # usage: imguralbum [link] [filename] +# +# local IMGUR_SAVE_PATH=/tmp +# +# # make a temp folder +# # mkdir -p "$IMGUR_SAVE_PATH"/"$2" +# +# #download album +# imguralbum.py "$1" "$IMGUR_SAVE_PATH"/"$2" +# +# #create zip archive using .cbz extension for comics +# zip -r "${2%/}.cbz" "$IMGUR_SAVE_PATH"/"$2" +# +# #delete temp folder +# rm -rf "$IMGUR_SAVE_PATH"/"$2" +#} +# +# +# +# +# +# +# +##}}} +########################################################### +##-------- Music Tagging CLI {{{ +##------------------------------------------------------ +#lltag-artist() { lltag --yes -a "$1" "$2" ;} +#lltag-album() { lltag --yes -A "$1" "$2" ;} +#lltag-date() { lltag --yes -d "$1" "$2" ;} +#lltag-genre() { lltag --yes -g "$1" "$2" ;} +#lltag-comment() { lltag --yes -c "$1" "$2" ;} +#lltag-number() { lltag --yes -n "$1" "$2" ;} +#lltag-show() { lltag -S "$1" ;} +#lltag-rename() { lltag --yes --rename '%n - %t' "$1" ;} +# +# +##Mp3 id3 tagger +# +#tag-encoding-v2.3() { eyeD3 --encoding=utf8 --to-v2.3 "$@" ;} +#tag-encoding-v2.4() { eyeD3 --encoding=utf8 --to-v2.4 "$@" ;} +#tag-show() { eyeD3 "$@" ;} +#tag-artist() { eyeD3 -a "$1" "${@:2}" ;} +#tag-album() { eyeD3 -A "$1" "${@:2}" ;} +#tag-title() { eyeD3 -t "$1" "${@:2}" ;} +#tag-number() { eyeD3 -n "$1" "${@:2}" ;} +#tag-genre() { eyeD3 -G "$1" "${@:2}" ;} +#tag-listgenre() { eyeD3 --plugin=genres ;} +#tag-year() { eyeD3 -Y "$1" "${@:2}" ;} +#tag-comment() { eyeD3 -c "$1" "${@:2}" ;} +#tag-image-remove() { eyeD3 --remove-all-images "$@" ;} # remove embedded album art +#tag-image-add() { eyeD3 --add-image "$1":FRONT_COVER "${@:2}" ;} # add album art +#tag-image-extract() { eyeD3 --write-images=. "$@" ;} # extract album art to current dir +#tag-renamebytags_num_title() { eyeD3 --rename '$track:num - $title' "$@" ;} +#tag-renamebytags_artist_album_num_title() { eyeD3 --rename '$artist - $album - $track:num - $title' "$@" ;} +#tag-renamebytags_artist_title() { eyeD3 --rename '$artist - $title' "$@" ;} +#tag-full() { +# tempfile=/tmp/eyed3tag.txt +# echo "eyeD3 --artist --album --title --track --genre --release-year "$@"" > "$tempfile"; $EDITOR "$tempfile"; source "$tempfile" ;} +# +# +# +## }}} +########################################################### +##-------- Plowshare {{{ +##------------------------------------------------------ +## d/l cyberlocker files like rapidshare, mediafire ..etc +## tutorial video: http://www.youtube.com/watch?v=5AzFdX-EyeI +## http://code.google.com/p/plowshare/ +## PPA: https://launchpad.net/~plowsharepackagers +#plowdown-depositfiles() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/depositfiles.txt ;} +#plowdown-uploaded() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/uploaded.txt ;} +#plowdown-netloadin() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/netloadin.txt ;} +#plowdown-rapidgator() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/rapidgator.txt ;} +#plowdown-rapidshare() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/rapidshare.txt ;} +#plowdown-random() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/random.txt ;} +# +##}}} +########################################################### +##-------- Sound Effects {{{ +##------------------------------------------------------ +## http://whatnotlinux.blogspot.com/2011/12/enterprise-ambiance.html +#ambiance-whitenoise() { play -n -c1 synth whitenoise band -n 100 20 band -n 50 20 gain +25 fade h 1 864000 1 ;} +#ambiance-whitenoisewider() { play -n -c2 synth whitenoise band -n 100 24 band -n 300 100 gain +20 ;} +#ambiance-pinknoise() { play -c2 -n synth pinknoise band -n 280 80 band -n 60 25 gain +20 treble +40 500 bass -3 20 flanger 4 2 95 50 .3 sine 50 lin ;} +# +##}}} +########################################################### +## concat = joinning files in a series (like a train) +## convert = change one format to another +## slice = cut files into peices (video, sound, both) +## mux = flatting files such as video and audio track in parallel +## demux = extraction of video or sound tracks +## split = split into peiceses (archive into peices like zip, rar) +## combine = join files together again (usually for splited archive files like 001, zip ..etc) +########################################################### +##-------- Rip Disc to Files {{{ +##------------------------------------------------------ +# +##http://www.reddit.com/r/commandline/comments/19ept5/open_discussion_cool_trick_thursday_what_are_your/c8neljz +#convert_audiocd_to_mp3() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.mp3" ; rm $f ; done ;} +#convert_audiocd_to_flac() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.flac" ; rm $f ; done ;} +#convert_audiocd_to_ogg() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.ogg" ; rm $f ; done ;} +#convert_audiocd_to_iso() { use dd or ddrescure or readom ;} +# +# +## has CDDB tags? +#ripit-mydefault() { +# ripit -o ~/Downloads -p 0 -c 0 --nointeraction "$@" +# # -p ; playlist (m3u file) 0=disable +# # --nointeraction; use 1st CDDB it finds +# # -c ; 0 - Lame (for mp3), 1 - Oggenc, 2 - Flac, 3 - Faac, +# # 4 - mp4als, 5 - Musepack, 6 - Wavpack, 7 - ffmpeg +# # $@ ; specfic tracks like 1-4,5,8 +#} +# +#rip_to_mp3() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 0 --nointeraction "$@" ;} +#rip_to_ogg() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 1 --nointeraction "$@" ;} +#rip_to_flac() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 2 --nointeraction "$@" ;} +#rip_to_aac() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 3 --nointeraction "$@" ;} +# +## }}} +########################################################### +##-------- Hardcoded Subtitles to Videos {{{ +##------------------------------------------------------ +## https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo +## https://www.bunkus.org/videotools/mkvtoolnix/samples/ +## install ttf-ms-fonts +## ffmpeg with --enable-libass +# +#convert_to_ass() { ffmpeg -i "$1" "${1%.*}".ass ;} # srt --> ass +#convert_to_srt() { ffmpeg -i "$1" "${1%.*}".srt ;} # ass --> srt +# +## The first 2 are alpha +## AABBGGRR = &HAABBGGRR +# +## usage: aliasname filename subtitles(srt/ass) +## convert_to_hardsubs() { ffmpeg -y -i "$1" -vf subtitles="$2":force_style="'Fontsize=35;FontName=DejaVu Serif,PrimaryColour=&H5014F0FF'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-hardsubs.mp4 ;} +# +#convert_to_hardsubs() { +#if [ $# -lt 2 ] +#then +# echo -e "Use ffmpeg to hardcode subtitles into one movietrack" +# echo -e "\nUsage:\n$0 [file] [subtitle (srt/ass)] [fontsize (25)] [color code (yellow)] [fontname (dejavu sans mono)]" +# echo -e "\nexample:\n$0 file.mp4 file.srt" +# echo -e "$0 file.mp4 file.srt 30 5000FF14 Arial \n" +# echo -e "kml color code: http://www.zonums.com/gmaps/kml_color/" +# +# +# exit 1 +#fi +# +#ffmpeg -y -i "$1" -vf subtitles="$2":force_style="'Fontsize=${3:-25},PrimaryColour=&H${4:-5014F0FF},FontName=${5:-DejaVu Sans Mono}'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-hardsubs.mp4 +#} +# +## 1min video testing +#convert_to_testing() { ffmpeg -y -i "$1" -ss 00:05:00 -t 00:01:00 -vf subtitles="$2":force_style="'Fontsize=35;FontName=DejaVu Serif,PrimaryColour=&H5014F0FF'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-testing.mp4 ;} +# +# +## }}} +########################################################### +##-------- Concatenate Files {{{ +##------------------------------------------------------ +# +## tutorial video: http://www.youtube.com/watch?v=eQoOk5Xbt3M +#concat_pdf() { +# if [ $# -lt 1 ] +# then +# echo -e "concatenate multiple pdf files into one single pdf" +# echo -e "\nUsage:\n$0 <pdfs>" +# echo -e "\nexample:\n$0 file1.pdf file2.pdf file3.pdf" +# echo -e "\n$0 *.pdf" +# +# return 1 +# fi +# gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="${1%.*}"-`date +'%F_%Hh%Ms%S'`_concat.pdf -f "$@" +#} +# +#concat_png() { +# if [ $# -lt 1 ] +# then +# echo -e "concatenate multiple images into one single png" +# echo -e "\nUsage:\n$0 <images>" +# echo -e "\nexample:\n$0 file1.jpg file2.png file3.jpeg" +# echo -e "\n$0 *.jpg" +# echo -e "\n$0 *.png" +# +# return 1 +# fi +# convert -append "$@" concatoutput.png +#} +#concat_jpg() { +# if [ $# -lt 1 ] +# then +# echo -e "concatenate multiple images into one single jpg" +# echo -e "\nUsage:\n$0 <images>" +# echo -e "\nexample:\n$0 file1.jpg file2.png file3.jpeg" +# echo -e "\n$0 *.jpg" +# echo -e "\n$0 *.png" +# +# return 1 +# fi +# convert -append "$@" concatoutput.jpg +#} +# +# +## tutorial video: https://www.youtube.com/watch?v=EAWGFJoZXAU +#concat_avi() { avimerge -o "${1%.*}".concat.avi -i "$@" ;} +# +## concat_movie() { +## appendfile=$(echo "$@" | sed 's: : --append :g') +## avidemux2_cli --nogui --audio-codec copy --video-codec copy --output-format "${1##*.}" --load $(echo $appendfile) --save "${1%.*}"-appended."${1##*.}" +## } +## +#concat_movie() { +# avidemux2_cli --nogui --force-alt-h264 \ +# --audio-codec copy --video-codec copy --output-format "${1##*.}" \ +# --load "$1" --append "$2" --append "$3" --append "$4" \ +# --append "$5" --append "$6" --append "$7" --append "$8" \ +# --save "${1%.*}"-appended."${1##*.}" +#} +# +#concat_mp4() { +# avidemux2_cli --nogui --force-alt-h264 \ +# --audio-codec copy --video-codec copy --output-format "${1##*.}" \ +# --load "$1" --append "$2" --append "$3" --append "$4" \ +# --append "$5" --append "$6" --append "$7" --append "$8" \ +# --save "${1%.*}"-appended."${1##*.}" +#} +# +# +# +# +## }}} +########################################################### +##-------- Extract Files {{{ +##------------------------------------------------------ +# +## http://www.linuxjournal.com/content/tech-tip-extract-pages-pdf +#extract_pdf() { +# if [ $# -lt 2 ] +# then +# echo -e "convert images into one single pdf" +# echo -e "\nUsage:\n$0 <input file> <startingpage> <endingpage>" +# echo -e "\nexample:\n$0 file.pdf 6" +# echo -e "\n$0 file.pdf 13 26" +# +# return 1 +# fi +# +# gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dFirstPage="${2}" -dLastPage="${3:-$2}" -sOutputFile="${1%.pdf}"_p"${2}"-p"${3:-$2}".pdf "${1}" +#} +# +## }}} +########################################################### +##-------- Muxing {{{ +##------------------------------------------------------ +#mux_to_mkv() { +# # mkvmerge -o newfile.mkv part1.mkv +part2.mkv +# # appendfile=$echo ${@} | sed 's: : +:g') +# appendfile=$(echo "$@" | sed 's: : +:g') +# # appendfile=$(echo "$@" | sed 's/ /\ +/g') +# +# mkvmerge -o "${1%.*}".mux.mkv $(echo $appendfile) +# echo $appendfile +# +# } +# +## }}} +########################################################### +##-------- Web Search Prefix {{{ +##------------------------------------------------------ +## Custom seaches +#gg-comic() { sitelist=$(echo "avaxhome.ws h33t.com mycomicpost.com bdcomics.bdgamers.net" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-cyberlocker() { sitelist=$(echo "hotfile.com rapidshare.com mediafire.com +# uploading.com depositfiles.com zshare.net filepost.com filefactory.com +# 2shared.com zippyshare.com slingfile.com wuala.com filetram.com +# 4shared.com rabidfiles.com" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-dojin() { sitelist=$(echo "hentairules.net fakku.net hentaifromhell.net" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-icons() { sitelist=$(echo "iconseeker.com iconarchive.com iconfinder.com +# deviantart.com veryicon.com iconspedia.com" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-keygen() { sitelist=$(echo "crack.ms/cracks/crack.ms?id" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-music() { url=$(echo "https://encrypted.google.com/search?hl=en&q= +# intitle:index.of+mp3+"$@"+-html+-htm+-txt"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-packages() { sitelist=$(echo "sourceforge.net github.com archlinux.org/packages +# freecode.com/projects gnome.org/extension python.org/pypi gentoo.org/package" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-pastebin() { sitelist=$(echo "pastebin.com paste2.org pastie.org snipt.net +# heypasteit.com/clip pastee.org shell-fu.org commandlinefu.com catonmat.net +# linuxconfig.net github.com bitbucket.org slexy.org stackoverflow.com +# askubuntu.com superuser.com dotfiles.org dotshare.it gitorious.org +# serverfault.com wikia.com stackexchange.com" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-piratebay() { url=$(echo "http://thepiratebay.org/search/$@" \ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-porn() { sitelist=$(echo "youporn.com redtube.com xvideos.com xhamster.com +# tube8.com grayvee.com pornhub.com/view_video.php?viewkey tnaflix.com +# youjizz.com hardsextube.com/video drtuber.com/video pornoxo.com limesteam.com +# motherless.com xnxx.com cliphunter.com extremetube.com/video" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-reader() { url=$(echo "https://encrypted.google.com/reader/view/#search/$@" \ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-search() { url=$(echo "https://encrypted.google.com/search?hl=en&q=$@" \ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-serial() { sitelist=$(echo "freeserials.com/serials/download.php?id= serials.ws/d.php?n" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-torrent() { sitelist=$(echo "eztv.it thepiratebay.se torrentzap.com fenopy.com +# torrindex.com h33t.com tokyotosho.info nyaa.eu" \ +# | sed 's/ /\+OR\+site\:/g') +# url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +# | sed 's/ /+/g'); $BROWSER $url; } +#gg-translate() { +# $BROWSER http://translate.google.com/#auto/en/"$*" ;} +# +##}}} +########################################################### +##-------- Search for Files {{{ +##------------------------------------------------------ +## http://askubuntu.com/questions/460535/how-do-i-tell-locate-to-keep-the-index-of-an-external-hdd +#updatedb-external() { +# if [ $# -lt 1 ] +# then +# echo -e "create private updatedb" +# echo -e "\nUsage:\n$0 <filename.db> <path>" +# echo -e "\nexample:\n$0 bingbong /media/bingbong" +# return 1 +# fi +# mkdir -p ~/.updatedb +# updatedb -l 0 -o ~/.updatedb/"$1.db" -U "$2" +#} +# +#@locate-external() { +# if [ $# -lt 1 ] +# then +# echo -e "locate using private updatedb" +# echo -e "\nUsage:\n$0 <keywords>" +# echo -e "\nexample:\n$0 dragon ball z" +# echo -e "\nending extension:\n$0 naruto mkv$" +# echo -e "\nOR operator:\n$0 '(naruto|blech)'" +# echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +# echo -e "\nupdate database:\nsudo updatedb" +# echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +# return 1 +# fi +# keyword=$(echo "$@" | sed -e 's/ /.*/g' -e 's:|:\\|:g' -e 's:(:\\(:g' -e 's:):\\):g') +# locate -d ~/.updatedb/bingbong.db -ir "$keyword" | vim -R - +#} +# +#@find() { +# if [ $# -lt 1 ] +# then +# echo -e "find files recursively in current folder" +# echo -e "\nUsage:\n$0 <keywords>" +# echo -e "\nexample:\n$0 dragon ball z" +# echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +# return 1 +# fi +# keyword=$(echo "*$@*" | sed -e 's/ /*/g') +# find . -type f -iname $keyword | vim -R - +#} +# +## find starting at current dir and go recursively to sub dir +## @search() { +## if [ $# -lt 1 ] +## then +## echo -e "search for files " +## echo -e "\nUsage:\n$0 <keywords>" +## echo -e "\nexample:\n$0 dragon ball z" +## echo -e "\nending extension:\n$0 naruto mkv$" +## echo -e "\nOR operator:\n$0 '(naruto|blech)'" +## echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +## echo -e "\nupdate database:\nsudo updatedb" +## echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +## return 1 +## fi +## keyword=$(echo "*$@*" | sed -e 's/ /*/g') +## find -type f -iname $keyword | vim -R - +## } +# +## find current dir files bigger than X size +## useage: @size <filesize> <keyword> +#@size() { +# keyword=$(echo "*${@:2}*" | sed -e 's/ /*/g') +# find -type f -size +${1}M -iname $keyword | vim -R - ;} +# +## search pdf files in current dir for keywords inside the pdfs +## http://www.commandlinefu.com/commands/view/9189 +#@pdfgrep() { +# if [ $# -lt 1 ] +# then +# echo -e "search all pdf in current directory recursively for keyword inside the pdfs" +# echo -e "\nUsage:\n$0 <keyword>" +# echo -e "\nexample:\n$0 homework" +# echo -e "\n$0 'school transcript'" +# +# return 1 +# fi +# find -iname \*.pdf -print0 | xargs -0 pdfgrep -in "$@" +#} +# +#@locate() { +# if [ $# -lt 1 ] +# then +# echo -e "search for files using updatedb" +# echo -e "\nUsage:\n$0 <keywords>" +# echo -e "\nexample:\n$0 dragon ball z" +# echo -e "\nending extension:\n$0 naruto mkv$" +# echo -e "\nOR operator:\n$0 '(naruto|blech)'" +# echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +# echo -e "\nupdate database:\nsudo updatedb" +# echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +# return 1 +# fi +# # escape spaces, pipe and parentheses +# keyword=$(echo "$@" | sed -e 's/ /.*/g' -e 's:|:\\|:g' -e 's:(:\\(:g' -e 's:):\\):g') +# locate -ir "$keyword" | vim -R - +#} +# +##}}} +########################################################### +##-------- IPTV {{{ +##------------------------------------------------------ +## http://database.freetuxtv.net/WebStream/ +## http://www.thestreamdb.com/ +## http://pclosmag.com/html/Issues/201104/page19.html +# +#IPTVPLAYER=mplayer +#itv-tech-twit() { "$IPTVPLAYER" "http://bglive-a.bitgravity.com/twit/live/high" ;} +##}}} +########################################################### +##-------- Internet Videos - Castalba.tv {{{ +##------------------------------------------------------ +## http://castalba.tv/channels +## Animation, Documentary, Entertainment, Sports, News +# +## sample of fail capture links +##rtmpdump -r "rtmp://live.castalba.tv/calive" -a "calive" -f "LNX 11,2,202,243" -W "http://static.castalba.tv/player.swf" -p "http://castalba.tv/channel/6768" -y "174956" -o 174956.flv +# +#CTVPLAYER=mplayer +#ctv-news-aljazeera() { rtmpdump -v -r "rtmp://aljazeeraflashlivefs.fplive.net/aljazeeraflashlive-live" \ +# -a "aljazeeraflashlive-live" \ +# -f "LNX 11,2,202,261" \ +# -W "http://static.castalba.tv/player.swf" \ +# -p "http://castalba.tv/channel/4182" \ +# -y "aljazeera_eng_low" | "$CTVPLAYER" - ;} +# +##}}} +########################################################### +##-------- GNOME 2 configs {{{ +##------------------------------------------------------ +# +## function h-framebuffer() { +## echo -e ' +## mplayer -vo fbdev -fs -vf scale=1280:-3 FileName +## mplayer -vo fbdev -fs -vf scale=-3:1024 FileName +## +## on Arch linux use fbdev2 +## mplayer -vo fbdev2 +## +## vlc video_file +## vlc --vout fb video_file +## '} +## function h-gconf-tweaks() { +## echo -e " +## #Wallpaper Changer +## bash -c 'gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find ~/Pictures/Wallpapers -type f | shuf -n1)"' +## +## compiz --replace +## metacity --replace +## emerald --replace +## xkill +## gnome-system-monitor +## gnome-search-tool --hidden +## +## #Dont Dim When Asking for Password +## gconftool-2 --type boolean --set /apps/gksu/disable-grab "True" +## gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":close" +## +## #Button Placement +## gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":minimize,maximize,close" +## gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":close" +## +## #Middle Click Minimize +## gconftool-2 --set "/apps/metacity/general/action_middle_click_titlebar" --type string "minimize" +## +## #Hide Desktop Icon Drives +## gconftool-2 --set "/apps/nautilus/desktop/volumes_visible" --type boolean "false" +## +## #Disable Lock on Idle +## gconftool-2 --set "/apps/gnome-power-manager/lock/gnome_keyring_hibernate" --type boolean "false" +## gconftool-2 --set "/apps/gnome-power-manager/lock/hibernate" --type boolean "false" +## gconftool-2 --set "/apps/gnome-power-manager/lock/suspend" --type boolean "false" +## +## #Enable Metacity Compositing +## gconftool-2 --set '/apps/metacity/general/compositing_manager' --type boolean "true" +## +## #Disable Screensaver +## gconftool-2 --set '/apps/gnome-screensaver/idle_activation_enabled' --type boolean "false" +## gconftool-2 --set '/apps/gnome-screensaver/lock_enabled' --type boolean "false" +## +## #Clock Format +## gconftool-2 --set '/apps/panel/applets/clock_screen0/prefs/format' --type string "custom" +## gconftool-2 --set '/apps/panel/applets/clock_screen0/prefs/custom_format' --type string "%a %b/%d/%y, %I:%M %p" +## +## #AWN Auto Hide +## Set awn setting behavior: Custom | Autohide mode: Fade Out | Icon Effects: Simple +## gconftool-2 --set '/apps/instances/avant-window-navigator/panel-1/panel/intellihide_mode' --type string "0" +## +## #AWN OLD WAY TO AUTO HIDE +## gconftool-2 --set '/apps/awn-applet-taskmanager/intellihide' --type boolean "false" +## +## # Default Open App, LINK CLICK +## gconftool-2 -t string -s /desktop/gnome/url-handlers/magnet/command "/usr/bin/transmission-gtk %s" +## gconftool-2 -s /desktop/gnome/url-handlers/magnet/needs_terminal false -t bool +## gconftool-2 -t bool -s /desktop/gnome/url-handlers/magnet/enabled true +## +## +## "} +# +# +## }}} +########################################################### +##-------- Clean Stuff {{{ +##------------------------------------------------------ +# +## http://www.commandlinefu.com/commands/view/954 +#symlinks() { find . -type l ! -exec test -e {} \; -print ;} +#symlinks-delete() { find . -type l ! -exec test -e {} \; -print0 | xargs -0 rm ;} +#rm-except() { +# find . -type f -not -name '*copy*' | xargs rm +#} +## --// Cleanup //-- +#cleanup () { +# echo -e '\e[1;31m * Cleaning Thumbnails * \e[1;37m' +# rm -rfv ~/.thumbnails/* +# rm -rfv ~/.cache/thumbnails/* +# echo -e '\e[1;31m * Removing cache * \e[1;37m' +# rm -rfv ~/.cache/chromium/* +# rm -rfv ~/.cache/vlc/* +# echo -e '\e[1;31m * Cleaning Trash * \e[1;37m' +# gvfs-trash --empty +#} +#d-swiggle() { find . -type f -name '*~' -exec rm -v {} \; ;} +#d-url() { find . -type f -iname '*.url' -exec rm -v {} \; ;} +#d-thumbsdb() { find . -type f -iname 'Thumbs.db' -exec rm -v {} \; ;} +#swiggle() { find . -name *~ -delete ;} +#cleanlinks() { +# # not in the repos: inspired by http://www.xfree86.org/4.8.0/cleanlinks.1.html +# # delete empty folder +# find . -type d -empty -print0 | xargs -0 rmdir +# # delete broken symlinks +# find . -type l -xtype l | xargs -l rm +#} +## }}} +########################################################### +##-------- Logitech K810 Keyboard {{{ +##------------------------------------------------------ +# +#k810-battery() { echo Logitech K810 Battery: $(cat /sys/class/power_supply/hid-00:1f:20:a8:08:47-battery/capacity) ;} +#k810-resync() { echo -e 'connect 00:1F:20:A8:08:47 \nexit' | bluetoothctl ;} +## }}} +########################################################### +##-------- TMSU (File Tagging CLI) {{{ +##------------------------------------------------------ +# +#tmsu-add() { tmsu tag --tags "$@" ;} +#tmsu-list() { tmsu tags ;} +#tmsu-repair() { tmsu repair "$@" ;} +#tmsu-search() { tmsu files "$@" ;} +#fzf-tmsu() { +# nohup xdg-open "$(tmsu files "$@" | fzf -e -i )" >/dev/null 2>&1& +# +# # if cancle or fail then exit +# if [ $? -ne 0 ] +# then +# exit +# fi +#} +## }}} +########################################################### +##-------- Remote Desktop {{{ +##------------------------------------------------------ +# +#rdp-winxp() { rdesktop -u administrator -g 1920x1020 192.168.1.150:3389 -r sound:local ;} +#rdp-win7() { rdesktop -u bonster -g 1920x1020 192.168.1.152:3389 -r sound:local ;} +# +## }}} +########################################################### +##-------- Surfraw Bookmarks {{{ +##------------------------------------------------------ +## surfraw completions testing +## https://blogs.oracle.com/AlejandroVargas/entry/awk_examples +## removes empty line, removes comments, prints 1st word, sort abc ordered +## +#showbookmarks() { awk 'NF != 0 && !/#/ {print $1}' ~/.config/surfraw/bookmarks | sort -n ;} +# +##}}} +########################################################### +##-------- WINE Gaming {{{ +##------------------------------------------------------ +## get newest version +#syu-winetrickz() { cd ~/Programs/appz/winetricks; rm -f winetricks; \ +# wget http://www.kegel.com/wine/winetricks; chmod +x winetricks ;} +# +## http://wiki.winehq.org/winetricks +## change wineprefix location so winetricks can be use on it +#set-wineprefix() { +# WINEPREFIX="$PWD" +# echo "ex: /home/username/.PlayOnLinux/wineprefix/Office2007" +# echo "wineprefix is now set to: $WINEPREFIX" +#} +# +# +##}}} +########################################################### +##-------- DPKG {{{ +##------------------------------------------------------ +# +#alias pydeb='sudo python setup.py --command-packages=stdeb.command debianize' +#alias dp-installed='dpkg --get-selections | grep $1' +#alias dp-deb-show='dpkg --info' #to examine archive files +#alias dp-deb-content='dpkg --contents' #to list their contents. +#whichpkg() { dpkg -S $( which $1 ); } #lookup for what package uses this command +#cmdpkg() { PACKAGE=$(dpkg -S $(which $1) | cut -d':' -f1); echo "[${PACKAGE}]"; dpkg -s "${PACKAGE}" ;} +# +# +#alias dp-history-install='cat /var/log/dpkg.log | grep "install "' +#alias dp-history-upgrade='cat /var/log/dpkg.log | grep upgrade' +#alias dp-history-remove='cat /var/log/dpkg.log | grep remove' +#dp-history-rollback() { cat /var/log/dpkg.log | grep upgrade | grep "$2" -A10000000 | grep "$3" -B10000000 |awk '{print $4"="$5}';} +# +# +#dp-hold() +#{ +#echo -n "Please enter the package you wish to put a hold on: +#" +#read progID +#echo "$progID hold" |sudo dpkg --set-selections +#} +# +#dp-unhold() +#{ +#echo -n "Please enter the package you wish to remove the hold on: +#" +#read progID +#echo "$progID install" |sudo dpkg --set-selections +#} +# +# +#killkernel() { #Removes all unused kernel, except the newest one +# dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r \ +# | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' \ +# | xargs sudo apt-get -y purge ;} +# +## }}} +########################################################### +##-------- Renaming Case {{{ +##------------------------------------------------------ +# +#alias renameit="ls | rename -v 's/ /_/g'" #change files with spaces to underscore +#single-to-doubles() { +## for bash shell only +# for i in ?.jpg; do mv $i 0$i; done +# for i in ?.png; do mv $i 0$i; done +# for i in ?.PNG; do mv $i 0$i; done +#} +#doubles-to-triples() { +# for i in ??.jpg; do mv $i 0$i; done +# for i in ??.png; do mv $i 0$i; done +#} +#string-lowercase() { echo "$@" | tr '[:upper:]' '[:lower:]' ;} # converts string to lowercase +# +## http://stackoverflow.com/a/3211670 +#nametodigit() { +# local a=1 +# for i in `ls -v | grep -i "$1"`; do +# new=$(printf "%04d.$1" "$a") #04 pad to length of 4 +# mv -- "${i}" "${new}" +# let a=a+1 +# done +#} +# +#paddy() { +#for file in foo[0-9]*.png; do +# # strip the prefix ("foo") off the file name +# postfile=${file#foo} +# # strip the postfix (".png") off the file name +# number=${postfile%.png} +# # subtract 1 from the resulting number +# i=$((number-1)) +# # copy to a new name in a new folder +# cp ${file} ../newframes/$(printf foo%08d.png $i) +#done +#} +# +# +# +## http://www.walkingrandomly.com/?p=2850 +## adds leading zeros to digits in filenames +# +#padme() { +# num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'` +# paddednum=`printf "%03d" $num` +# echo ${1/$num/$paddednum} +#} +# +## http://www.walkingrandomly.com/?p=2850 +#zeropadding() { +# num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'` +# paddednum=`printf "%03d" $num` +# echo ${1/$num/$paddednum} +#} +# +# +# +#zeropad() { for i in "$@" ;do mv $i `padme $i`; done ;} +## http://www.youtube.com/watch?v=rE7ISiKoNec +##lower case bash/zsh +## lowercase() { +## # [bash] https://www.garron.me/en/bits/rename-files-from-uppercase-to-lowercase.html +## for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; done +## # [zsh] https://lorenzod8n.wordpress.com/category/zsh/ +## for file in *; do mv $file ${file:l}; done +## ;} +# +## http://stackoverflow.com/a/11824856 +#lowercase-extension() { find . -name '*.*' -exec sh -c ' a=$(echo "$0" | sed -r "s/([^.]*)\$/\L\1/"); [ "$a" != "$0" ] && mv "$0" "$a" ' {} \; ;} +## }}} +########################################################### +##-------- Keyboard related {{{ +##------------------------------------------------------ +# +#touchpad-toggle() { synclient TouchpadOff=$(synclient -l | grep -c ‘TouchpadOff.*=.*0’) ;} +#lang-toggle() { setxkbmap -option grp:alt_caps_toggle "us,jp" ;} +#vim-toggle() { +## https://xpressrazor.wordpress.com/2014/03/30/script-to-toggle-keys +## toggle caplock and esc key +#if xmodmap -pke | egrep -i "escape" | egrep -i "keycode.*9.*"; then +# echo "Changing from original to mapped" +# xmodmap -e "clear lock" +# xmodmap -e "keycode 66 = Escape" +# xmodmap -e "keycode 9 = Caps_Lock" +# xmodmap -e "add Lock = Caps_Lock" +#else +# echo "Changing back from mapped to original" +# xmodmap -e "clear lock" +# xmodmap -e "keycode 9 = Escape" +# xmodmap -e "keycode 66 = Caps_Lock" +# xmodmap -e "add Lock = Caps_Lock" +#fi +#} +## }}} +########################################################### +##-------- Function Informations {{{ +##------------------------------------------------------ +# +#function osr { shutdown -r now; } +#function osh { shutdown -h now; } +# +#function mfloppy { mount /dev/fd0 /mnt/floppy; } +#function umfloppy { umount /mnt/floppy; } +# +#function mdvd { mount -t iso9660 -o ro /dev/dvd /mnt/dvd; } +#function umdvd { umount /mnt/dvd; } +# +#function mcdrom { mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom; } +#function umcdrom { umount /mnt/cdrom; } +# +# +#function dub { du -sclb $@; } +#function duk { du -sclk $@; } +#function dum { du -sclm $@; } +# +#function dfk { df -PTak $@; } +#function dfm { df -PTam $@; } +#function dfh { df -PTah $@; } +#function dfi { df -PTai $@; } +## }}} +########################################################### +##-------- OCR {{{ +##------------------------------------------------------ +# +#ocr2clipboard() { +# # folder to dump it to +# DIR=/tmp +# +# # scale up the image resolution for better ocr-ing +# convert "$1" -resize 5000 "$DIR"/image_out.png +# # ocr the scaled image +# tesseract "$DIR"/image_out.png "$DIR"/result +# # copy to the clipboard +# xclip -selection clipboard -i "$DIR"/result.txt +#} +## }}} +########################################################### +##-------- Midi Music {{{ +##------------------------------------------------------ +# +#midplayer() { adlmidi "$1" > /dev/null 2>&1 ;} +## https://wiki.archlinux.org/index.php/FluidSynth#Standalone_mode +#midi-fluidsynth() { fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/fluidr3/FluidR3GM.SF2 "$1" ;} +## }}} +########################################################### +##-------- SSD TRIM {{{ +##------------------------------------------------------ +# +## http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html +#trim-check() { +## sudo hdparm -I /dev/sda | grep "TRIM supported" +# sudo hdparm -I /dev/"$1" | awk '/.*TRIM supported.*/{ if ($1 == "*") print "Yes, TRIM is enabled"; else print "No, TRIM is not enabled." ;}' +#} +#trim-fstrim() { sudo fstrim -v "$1" ;} +#gen-cron-trim() { sudo cp ~/.scripts/trim /etc/cron.daily/ ;} +## }}} +########################################################### +##-------- OLD CFG {{{ +##------------------------------------------------------ +# +#cfg-ghsync() { $EDITOR ~/.scripts/ghsync-script.sh ;} +#cfg-dircolors() { $EDITOR ~/.dircolors ;} +#cfg-percol() { $EDITOR ~/.percol.d/rc.py ;} +#cfg-sourcelist() { sudo $EDITOR /etc/apt/sources.list ;} +#cfg-pacman() { sudo $EDITOR /etc/pacman.conf ;} +#cfg-pacman-mirrorlist() { sudo $EDITOR /etc/pacman.d/mirrorlist ;} +## http://blog.dotsmart.net/2011/09/30/change-font-size-in-chrome-devtools/ +#cfg-chromium-devtoolsize() { $EDITOR ~/.config/chromium/Default/User\ StyleSheets/Custom.css ;} +#cfg-chromium-noscript() { $EDITOR ~/.config/chromium/Default/Extensions/odjhifogjcknibkahlpidmdajjpkkcfn/*/CHANGE__PASSWORD__HERE.js ;} +#cfg-timidity() { sudo $EDITOR /etc/timidity++/timidity.cfg ;} +#cfg-xdg-mine() { $EDITOR ~/.local/share/applications/mimeapps.list ;} +#rld-screenlayout() { ~/.screenlayout/reload_monitor.sh ;} +# +## }}} +########################################################### +##-------- IMGUR {{{ +##------------------------------------------------------ +# +## imgur album downloader +## https://github.com/alexgisby/imgur-album-downloader +## tutorial video: https://www.youtube.com/watch?v=dW4co9f5Ors +#imguralbum() { python ~/.scripts/imgur-album-downloader/imguralbum.py "$@" ;} +# +#imguralbum_cbz() { +# # usage: imguralbum [link] [filename] +# +# local IMGUR_SAVE_PATH=/tmp +# +# # make a temp folder +# # mkdir -p "$IMGUR_SAVE_PATH"/"$2" +# +# #download album +# python ~/.scripts/imgur-album-downloader/imguralbum.py "$1" "$IMGUR_SAVE_PATH"/"$2" +# +# #create zip archive using .cbz extension for comics +# zip -r "${2%/}.cbz" "$IMGUR_SAVE_PATH"/"$2" +# +# #delete temp folder +# rm -rf "$IMGUR_SAVE_PATH"/"$2" +#} +## }}} +########################################################### +# +#quicksynergy-daemon() { /usr/bin/synergys --daemon --config ~/.quicksynergy/synergy.conf ;} +## mutt background fix +#COLORFGBG="default;default" +# +#jdownloader() { nohup java -jar ~/.scripts/JDownloader/JDownloader.jar >/dev/null 2>&1& } +# +# +#date-global() { +## use tzselect to find timezone listing +# local SHOWTIMEZONE="$( +# alias date='date +"%a %D %l:%M %p"' +# echo "Current Location:" "$(date)" +# echo "USA LosAngeles:" "$(TZ='America/Los_Angeles' date)" +# echo "Canada Alberta:" "$(TZ='America/Edmonton' date)" +# echo "USA NewYork:" "$(TZ='America/New_York' date)" +# echo "EU London:" "$(TZ='Europe/London' date)" +# echo "Bangladesh Dhaka:" "$(TZ='Asia/Dhaka' date)" +# echo "China Xinjiang:" "$(TZ='Asia/Urumqi' date)" +# echo "Vietnam Saigon:" "$(TZ='Asia/Ho_Chi_Minh' date)" +# echo "China Beijing:" "$(TZ='Asia/Shanghai' date)" +# echo "HK HongKong:" "$(TZ='Asia/Hong_Kong' date)" +# echo "Japan Tokyo:" "$(TZ='Asia/Tokyo' date)" +# )" +# echo "$SHOWTIMEZONE" | column -t +#} +# +## http://stackoverflow.com/a/13541721 +#git-sync-ignorelist() { git rm --cached `git ls-files -i --exclude-from=.gitignore` ;} +# +#mp3cut() { +# +# # example: cut from 5s to 10s; mpgtx -s file.mp3 "[00:05-00:10]" -b file-output +# mpgtx -s "$1" "["$2":"$3"-"$4":"$5"]" -b "${1%.*}"-output."${1##*.}" +# +# } +# +#mpv-saveposition() { mpv --save-position-on-quit "$@" ;} +#mplayer-createplaylist() { ls --ignore="*.m3u" --ignore="*.pos" | grep -i "$1" | sort -u > "$1".m3u ;} +# +# +# +##List files only, the advantage is that it works just like normal 'ls' so you could do 'lf -al | grep blah' etc. +#lf () { +#ls -1p $@ | grep -v '\/$' +#} +# +# +#qrdecode() { zbarimg -S\*.disable -Sqrcode.enable "$1" -q | sed '1s/^[^:]\+://'; } +# +##checkexist() { +##if which lynx >/dev/null; then +## echo exists +##else +## echo does not exist +##fi +##} +# +#pvcp() { +# # a better cp with pv; http://jrenard.info/blog/a-better-cp-with-pv.html +# SOURCE=$1 +# +# if [ -d $2 ] +# then +# DESTINATION=$2/`basename $SOURCE` +# else +# DESTINATION=$2 +# fi +# +# pv ${SOURCE} | > ${DESTINATION} +#} +# +## http://www.falsyana.com/2010/linux/cp-mv-with-a-progress-bar/ +## http://unix.stackexchange.com/questions/2577/move-files-with-progress-bar +## slower then regular mv or cp +##alias cp='rsync --progress -ah' +##alias mv='rsync --progress -ah --remove-sent-files' +# +# +# +## Readablity CLI +## Removes junk from websites and just give you the body of the post +## requires python2-2.7 & python2-chardet +## https://github.com/buriy/python-readability +## ebook-convert from http://manual.calibre-ebook.com/cli/ebook-convert.html +#readability2html() { +# python2.7 -m readability.readability -u "$1" > /tmp/"$2".html +# ebook-convert /tmp/"$2".html ~/Downloads/"$2".epub +#} +# +#compile-cpp() { g++ -Wall -o "${1%.cpp}" "$1" ; } +# +##mplayer playlist +#mplist(){ mplayer -playlist <(tree -aif "$1" | awk '/\.(mp3|wav|ogg|avi|mpg|iso)$/'); } +##mplist(){ mplayer -playlist <(find "$1" -regex '.*\.\(mp3\|wav\|ogg\|avi\|mpg\|iso\)' | sort); } +# +#zombie-process() { ps aux | awk '{ print $8 " " $2 }' | grep -w Z ;} +# +#getexe() { +# TEMPFILE1=$(mktemp) +# TEMPFILE2=$(mktemp) +# INPUTFILE="$1" +# # Extract raw version resource: +# wrestool --extract --raw --type=version "$INPUTFILE" > $TEMPFILE1 +# +# if [ -s $TEMPFILE1 ] +# then +# # Search for a sane version string. +# # This (especially the final regexp) took me really long time to figure out. Am I that lame? +# VERSION=$(< $TEMPFILE1 \ +# tr '\0, ' '\t.\0' \ +# | sed 's/\t\t/_/g' \ +# | tr -c -d '[:print:]' \ +# | sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p' +# ) +# echo $VERSION +# fi +#} +#function etym(){ +# for term in "$@" +# do +# url="etymonline.com/index.php?term=$term" +# curl -s $url | grep "<dd " | +# sed -e 's/<a[^>]*>\([^<]*\)<[^>]*>/:\1:/g' -e 's/<[^>]*>//g' | +# fold -sw `[ $COLUMNS -lt 80 ] && echo $COLUMNS || echo 79 ` +# echo +# done +#} +#DISTRO=$(cat /etc/*-release | head -1 | awk -F\" '{print $(NF-1)}') +#alias m-windowmanager="wmctrl -m | grep "Name:" | awk '{print $2}'" +#mbuffer() { +# mplayer -vo fbdev $1 -fs -subcp ${2:-cp1251} -vf scale=${3:-1280:720} +#} +## MPlayer on /dev/ttyN +# alias fbmplayer='mplayer -vo fbdev2 -vf scale=1280:1024 "$@"' +#lanshare() { +# echo "Test Server: http://127.0.0.1:8000 or http://localhost:8000" +# echo "Server IP (LAN): $(ifconfig eth0 | awk '/inet / {print $2}' | cut -d\: -f2):8000" +# echo "Server IP (WWW): $(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"):8000" +# echo "Hit Ctrl+C to Stop Sharing" +# python2 -m SimpleHTTPServer +#} +# +# +#menu() { +# { tput smcup ; clear; } >/dev/tty +# [ -n "$LINES" ] || local LINES=$(tput lines) +# local val; val=$(slmenu -i -l $((LINES-1)) -p "${1:->}") +# local ret=$? +# tput rmcup > /dev/tty +# printf %s\\n "$val" +# return $ret +#} +#normalizeaudio() { sox --norm "$1" "${1%.*}"."$0"."${1##*.}" ;} +## usage: combine-zip file.zip -- join splited zip (z01, z02 ..etc) +#unsplit_zip() { zip -s- "$1" -O "${1%.*}"-unsplited.zip ;} +# +## usage: combine-001 file.avi.001 -- only requires the 1st file +#unsplit_001() { lxsplit -j "$1" ;} +# +## mkvinfo filename.mkv +## mkvextract tracks filename.mkv 2:subs.ass +## mkvextract tracks filename.mkv 2:subs.srt +## mkvextract attachments filename.mkv 1:BAARS___.TTF +## put the font files into ~/.fonts and then run `fc-cache -vf' +## cd to flac +## flac to wav +## wav to cd +## split bin/cue audio +# +## -b = -b:v +## -av = audio bitrate +# +## gif, vob, m4v, mov, wmv, wma, vob, cd_mp3, cd_flac, avi +## mp4 subtitles burn in hardcoded +# +#web2png() { CutyCapt --url="$1" --out=web2png_output.png ;} +## url shortener +#tiny-isgd() { wget -qO - "http://is.gd/create.php?format=simple&url=$1" ;} +## create qrcode +#qrcode() { link=$(echo "http://qrcode.kaywa.com/img.php?s=8&d=$@" | sed 's/ /+/g'); $BROWSER $link ;} +#quicktime() { mplayer -rtsp-stream-over-tcp -user-agent QuickTime/7.6.4 ;} # -cache 3072 +# +## http://sourceforge.net/projects/lesspipe/ +## tutorial video: https://www.youtube.com/watch?v=ZEHxG1OhIFo +##export LESSOPEN='|/usr/bin/lesspipe.sh %s' +##export LESS='-R' +# +## Source-Highlight +##export LESSOPEN='|/usr/bin/src-hilite-lesspipe.sh %s' +##export LESS='R' +# +## http://zameermanji.com/blog/2012/12/30/using-vim-as-manpager/ +## export MANPAGER="/bin/sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu noma' -\"" +# +# # Goes up many dirs as the number passed as argument, if none goes up by 1 by default +# +# +## REMIND ME, ITS IMPORTANT! +# # usage: remindme <time> <text> +# # e.g.: remindme 10m "omg, the pizza" +# remindme() { sleep $1 && zenity --info --text "$2" & } +# # +# +## https://github.com/Daenyth/dotfiles/blob/master/.bashrc +## Environment variables +## if have less; then +## export PAGER='less' +## unset LESSCHARSET # Fix manpages looking funky +## export LESS='--ignore-case --line-numbers --hilite-unread -z-4 --hilite-search --LONG-PROMPT --no-init --quit-if-one-screen --quit-on-intr --RAW-CONTROL-CHARS' +## # Colorized less, woohoo +## export LESS_TERMCAP_mb=$'\E[01;31m' +## export LESS_TERMCAP_md=$'\E[01;31m' +## export LESS_TERMCAP_me=$'\E[0m' +## export LESS_TERMCAP_se=$'\E[0m' +## export LESS_TERMCAP_so=$'\E[01;44;33m' +## export LESS_TERMCAP_ue=$'\E[0m' +## export LESS_TERMCAP_us=$'\E[01;32m' +## elif have most; then +## export PAGER='most' +## else +## export PAGER='more' +## fi +# +# +# +# +## +## Run a command x times +## http://www.stefanoforenza.com/how-to-repeat-a-shell-command-n-times/ +## +#runx() { +# n=$1 +# shift +# while [ $(( n -= 1 )) -ge 0 ] +# do +# "$@" +# done +#} +# +## ask() -- ask user a yes/no question +#function ask() +#{ +# echo -n "$@" '[y/N] ' ; read ans +# case "$ans" in +# y*|Y*) return 0 ;; +# *) return 1 ;; +# esac +#} +# +# +## vim: set filetype=sh: +#alias cue2flac="find -type f -name '*.cue' -execdir cue2tracks -R -n 19 -o '%N. %p ─ %t' {} \;" +# +# +## Git Shortcuts! ## +## alias g="git" +## alias gr="git rm -rf" +## alias gs="git status" +## alias ga="g add" +## alias gc="git commit -m" +## alias gp="git push origin master" +## alias gl="git pull origin master" +# +## load rbenv if available +#if command -v rbenv >/dev/null; then +# eval "$(rbenv init - --no-rehash)" +#fi +## https://github.com/nicknisi/dotfiles/blob/master/zsh/functions.zsh +## print available colors and their numbers +#function colours() { +# for i in {0..255}; do +# printf "\x1b[38;5;${i}m colour${i}" +# if (( $i % 5 == 0 )); then +# printf "\n" +# else +# printf "\t" +# fi +# done +#} +# +# +## Start an HTTP server from a directory, optionally specifying the port +#function server() { +# local port="${1:-8000}" +# open "http://localhost:${port}/" +# # Set the default Content-Type to `text/plain` instead of `application/octet-stream` +# # And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files) +# python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port" +#} +# +## Escape UTF-8 characters into their 3-byte format +#function escape() { +# printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u) +# echo # newline +#} +# +## Decode \x{ABCD}-style Unicode escape sequences +#function unidecode() { +# perl -e "binmode(STDOUT, ':utf8'); print \"$@\"" +# echo # newline +#} +# +# +# +# +function xtrct { + if [ -z "$1" ]; then + # display usage if no parameters given + echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>" + else + if [ -f "$1" ] ; then + NAME=${1%.*} + #mkdir $NAME && cd $NAME + case "$1" in + *.tar.bz2) tar xvjf ./"$1" ;; + *.tar.gz) tar xvzf ./"$1" ;; + *.tar.xz) tar xvJf ./"$1" ;; + *.lzma) unlzma ./"$1" ;; + *.bz2) bunzip2 ./"$1" ;; + *.rar) unrar x -ad ./"$1" ;; + *.gz) gunzip ./"$1" ;; + *.tar) tar xvf ./"$1" ;; + *.tbz2) tar xvjf ./"$1" ;; + *.tgz) tar xvzf ./"$1" ;; + *.zip) unzip ./"$1" ;; + *.Z) uncompress ./"$1" ;; + *.7z) 7z x ./"$1" ;; + *.xz) unxz ./"$1" ;; + *.exe) cabextract ./"$1" ;; + *) echo "extract: '$1' - unknown archive method" ;; + esac + else + echo "'$1' - file does not exist" + fi +fi +} +# +# +# +# +#function thumbify() { +# if [ -f $1 ]; then +# cp $1 thumb-$1 +# if [ $2 ]; then +# mogrify -resize $2 thumb-$1 +# else +# mogrify -resize 250x250 thumb-$1 +# fi +# else +# echo "$1: not a regular file" +# fi +#} +# +# +#alias cadate='TZ=America/Los_Angeles date' +#alias frdate='TZ=Europe/Paris date' +#alias ozdate='TZ=Australia/Brisbane date' +# +#alias myip='wget -qO- http://ipecho.net/plain ; echo' +# +## no line wrapping in less +#export LESS=$LESS" -S" +# +#alias vless="/usr/share/vim/vim74/macros/less.sh" +# +# +# +## Shortcut to get the disk size of a directory and contents +#sizeof() { +# du -ch "$1" | grep total +#} +# +## Shortcut to change directory and list contents +#cdls() { +# if [ -d "$1" ]; then +# cd "$1" +# ls +# else +# echo "bash: cl: '$1': Directory not found" +# fi +#} +# +# +# +## super stealth background launch +#function daemon +#{ +# (exec "$@" >&/dev/null &) +#} +# +# # Do something and receive a desktop alert when it completes `sudo apt-get install something | alert` +# alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +# +# +# # Search for files and page it +# function search() { find . -iname "*$@*" | less; } +# # nohup "$@" > /dev/null 2>&1 < /dev/null & +# +# +# # *.dmg) hdiutil mount $1 ;; +# +# +# +# +# +#function lsofg() +#{ +# if [ $# -lt 1 ] || [ $# -gt 1 ]; then +# echo "grep lsof" +# echo "usage: losfg [port/program/whatever]" +# else +# lsof | grep -i $1 | less +# fi +#} +# +# +# +#function psg() +#{ +# if [ $# -lt 1 ] || [ $# -gt 1 ]; then +# echo "grep running processes" +# echo "usage: psg [process]" +# else +# ps aux | grep USER | grep -v grep +# ps aux | grep -i $1 | grep -v grep +# fi +#} +# +####### convert binaries +## copyright 2007 - 2010 Christopher Bratusek +#function bin2all() { +# if [[ $1 ]]; then +# echo "binary $1 = octal $(bin2oct $1)" +# echo "binary $1 = decimal $(bin2dec $1)" +# echo "binary $1 = hexadecimal $(bin2hex $1)" +# echo "binary $1 = base32 $(bin2b32 $1)" +# echo "binary $1 = base64 $(bin2b64 $1)" +# echo "binary $1 = ascii $(bin2asc $1)" +# fi +#} +# +####### DVD to ISO +#function dvd2iso() +#{ +## to get desired device +#df -h -x tmpfs -x usbfs +#echo -n "Using the information in the terminal window, please enter the appropriate DVD drive: +#" +#read DVDDEVICE +#echo -n "Please enter a name for the ISO file you will create: +#" +#read XVIDNAME +#pv "$DVDDEVICE" | dd of="$XVIDNAME".iso +#} +# +####### DVD to VOB +## requires vobcopy: sudo apt-get install vobcopy +## alias dvd2vob='vobcopy -i /dev/dvd -o ~/ -l' +# +#function daemon() +#{ +# (exec "$@" >&/dev/null &) +#} +# +#function geniso() { +# # copyright 2007 - 2010 Christopher Bratusek +# if [[ $CD_WRITER ]]; then +# dd $DD_OPTS if=$CD_WRITER of="$1" +# else dd $DD_OPTS if=/dev/dvdrw of="$1" +# fi +#} +# +#function lowercase() +#{ +# for file ; do +# filename=${file##*/} +# case "$filename" in +# */*) dirname==${file%/*} ;; +# *) dirname=.;; +# esac +# nf=$(echo $filename | tr A-Z a-z) +# newname="${dirname}/${nf}" +# if [ "$nf" != "$filename" ]; then +# mv "$file" "$newname" +# echo "lowercase: $file --> $newname" +# else +# echo "lowercase: $file not changed." +# fi +# done +#} +# +# + function rip_orig() { + handbrake -i /dev/dvd -o ${HOME}/${1}.mp4 -L -U -F -f mp4 -e x264 -b 4000 -B 192 + } +# +################################################### +## Slow down CPU and IO for process and its # +## offsprings # +################################################### +# +####### requires gawk: sudo apt-get install gawk +#function slow2() { ionice -c3 renice -n 20 $(pstree `pidof $1` -p -a -u -A|gawk 'BEGIN{FS=","}{print $2}'|cut -f1 -d " ") ; } +# +# +# +# +################################################### +## ISO-writer # +################################################### +# +#function writeiso() { +# # copyright 2007 - 2010 Christopher Bratusek +# if [[ $CD_WRITER ]]; then +# cdrecord dev=$CD_WRITER "$1" +# else cdrecord deV=/dev/dvdrw "$1" +# fi +#} +# +#alias cdcopy='pv /dev/cdrom | dd of=cd.iso' # to backup a cd from a cdrom drive to an ISO +# +#alias diskcopy='pv /dev/dvd | dd of=disk.iso' # to backup the disc (cd/dvd/whatever) to an ISO +#alias floppycopy='pv /dev/fd0 | dd of=floppy.image' # to duplicate a floppy disk to hard drive image file +#alias partitioncopy='sudo pv /dev/sda1 | dd of=/dev/sda2 bs=4096 conv=notrunc,noerror' # to duplicate one hard disk partition to another +#alias restore-sda='sudo pv /dev/hda | dd of=/dev/sda bs=64k conv=notrunc,noerror' # to restore from ??? to the existing drive +#alias scsicopy='sudo pv /dev/scd0 | dd of=cd.iso' # if cdrom is scsi} +# +#alias extundelete-d='sudo extundelete "$1" --restore-directory "$2"' # restore all files possible from specified dir. ("$2" = path/to/directory) +#alias extundelete-f='sudo extundelete "$1" --restore-files "$2"' # restore list of files (use to restore single file) ("$2" = filename) +#alias extundelete-r='sudo extundelete "$1" --restore-all' # restore all files possible to undelete +#alias blankcd='cdrecord -v dev=/dev/cdrom blank=fast gracetime=3' +#alias blankdvd='cdrecord -v dev=/dev/dvd blank=fast gracetime=3' +#alias rdp='rdesktop -u "$USER" -g 1600x1200 -D -r disk:home=/home -r clipboard:PRIMARYCLIPBOARD' # quick full screen RDP connection +# +################################################### +## Remastersys stuff # +################################################### +# +#alias remastersys-backup-custom='sudo remastersys backup custom.iso' # to make a livecd/dvd backup and call the iso custom.iso +#alias remastersys-backup='sudo remastersys backup' # to make a livecd/dvd backup of your system +#alias remastersys-clean='sudo remastersys clean' # to clean up temporary files of remastersys +#alias remastersys-dist-cdfs='sudo remastersys dist cdfs' # to make a distributable livecd/dvd filesystem only +#alias remastersys-dist-custom='sudo remastersys dist iso custom.iso' # to make a distributable iso named custom.iso but only if cdfs is present +#alias remastersys-dist='sudo remastersys dist' # to make a distributable livecd/dvd of your system +# +# +## Kill all the tabs in Chrome to free up memory +## [C] explained: http://www.commandlinefu.com/commands/view/402/exclude-grep-from-your-grepped-output-of-ps-alias-included-in-description +#alias chromekill="ps ux | grep '[C]hrome Helper --type=renderer' | grep -v extension-process | tr -s ' ' | cut -d ' ' -f2 | xargs kill" +# +# +# +#mountiso() { mkdir -p "$HOME"/.gvfs/"${1%.*}" && gvfs-mount "$1" "$HOME"/.gvfs/"${1%.*}" ;} +# +#resize_images() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.m4a" +# echo -e "\nmultiple: $0 file1.m4a file2.m4a file3.m4a" +# echo -e "\nwildcard: $0 *" +# echo -e "\nwildcard: $0 *.jpg" +# return 1 +# fi +# +# myArray=( "${@:2}" ) +# for arg in "${myArray[@]}"; do +# convert "$arg" -monitor -resize "$1" "${arg%.*}""$1"_resized."${arg##*.}" +# done +#} +## If piping something in, copy it. +## If just doing `clip`, paste it. +#function clip { [ -t 0 ] && pbpaste || pbcopy;} +# +# +#sbg(){ +# ("$@" & disown ) >/dev/null 2>&1 </dev/null +# which "$1" >/dev/null 2>&1 +#} +# +#alias netlisten='lsof -i -P | grep LISTEN' #listening ports +##internetinfo | Usage: ii +#function ii() # get current host related info +#{ +# echo -e "\n${RED}Kernel Information:$NC " ; uname -a +# echo -e "\n${RED}Users logged on:$NC " ; w -h +# echo -e "\n${RED}Current date :$NC " ; date +# echo -e "\n${RED}Machine stats :$NC " ; uptime +# echo -e "\n${RED}Memory stats :$NC " ; free +# echo -e "\n${RED}Disk Usage :$NC " ; df -Th +# echo -e "\n${RED}LAN Information :$NC" ; netinfoLAN +# echo +#} +# +#dd_clone() { +# if [ $# -lt 2 ]; then +# echo -e "image or clone <image|drive|parition> including free space and verify data" +# echo -e "\nUsage: $0 <input> <output>" +# echo -e "\nExample: $0 /dev/sdX /tmp/output.dd" +# echo -e "\n$0 /dev/sdX /dev/sdY" +# echo -e "\n$0 /tmp/output.img /dev/sdX" +# echo -e "\n$0 /dev/cdrom /tmp/output.iso" +# echo -e "\nList All Drives: sudo fdisk -l" +# echo -e "\nRequirement: pv dcfldd" +# return 1 +# fi +# +# sudo sh -c " +# # clone +# pv -tpreb "$1" | dcfldd of="$2" bs=4M +# # verify data match or mismatch +# dcfldd if="$1" vf="$2" +# " +#} +# +#verify_md5sum() { pv "$1" | md5sum ;} +# +#formatme() { +# sudo mkdosfs -n 'Label' -I /dev/sdd +#} +# +# +#### Full Disk Clone and Restore +#clonezilla_disk_cloning() { +# if [ $# -lt 2 ]; then +# echo -e "clone fulldisk device to image" +# echo -e "\nUsage: $0 <output_file> <device>" +# echo -e "\nExample: $0 laptop_fulldisk_2015_12_25_img sdx" +# echo -e "\nNote: device does not have numbers at the end (sdx)" +# return 1 +# fi +# sudo /usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 5000000 -sc -p true savedisk "$1" "$2" +#} +# +#clonezilla_disk_restore() { +# if [ $# -lt 2 ]; then +# echo -e "restore fulldisk image to device" +# echo -e "\nUsage: $0 <input_file> <device>" +# echo -e "\nExample: $0 laptop_fulldisk_2015_12_25_img sdx1" +# echo -e "\nNote: partitions usually have numbers at the end (sdx1)" +# return 1 +# fi +# sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -p true restoredisk "$1" "$2" +#} +# +#### Partition Clone and Restore +#clonezilla_partition_cloning() { +# if [ $# -lt 2 ]; then +# echo -e "clone device partition to image" +# echo -e "\nUsage: $0 <output_file> <device>" +# echo -e "\nExample: $0 desktop_partition_2016_12_25_img sdx" +# echo -e "\nNote: device does not have numbers at the end (sdx)" +# return 1 +# fi +# sudo /usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 5000000 -sc -p true saveparts "$1" "$2" +#} +# +#clonezilla_partition_restore() { +# if [ $# -lt 2 ]; then +# echo -e "restore image to device partition" +# echo -e "\nUsage: $0 <input_file> <device>" +# echo -e "\nExample: $0 desktop_partition_2016_12_25_img sdx1" +# echo -e "\nNote: partitions usually have numbers at the end (sdx1)" +# return 1 +# fi +# sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -k -p true restoreparts "$1" "$2" +#} +# +## http://stackoverflow.com/a/22049344 +#killall-zombies() { kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }') ;} +# +#m-disconnect() { nmcli d disconnect enp5s0 ;} +#m-connect() { nmcli d connect enp5s0 ;} +#mount-image() { +# if [ $# -lt 1 ] +# then +# echo -e "concatenate multiple pdf files into one single pdf" +# echo -e "\nUsage:\n$0 <pdfs>" +# echo -e "\nexample:\n$0 file1.pdf file2.pdf file3.pdf" +# echo -e "\n$0 *.pdf" +# +# return 1 +# fi +# +# mkdir "/tmp/$1" +# mount -t vfat -o loop,ro,noexec "$1" "/tmp/$1" +# +#} +# +#cmus-alarm() { +# cmus-remote -p -v 100 +# +#} +# +# +#lynx-mp3() { lynx -dump "$1" | awk '/http/ && /mp3/ {print $2}' ;} +# +#nap() { +# ~/.bin/nap-1.5.4.linux-amd64/nap \ +# -r \ +# -s 108.19.45.179:7777 \ +# -s 108.19.45.179:8888 \ +# -s share-it.loginto.me:3456 \ +# -s 84.24.69.59:6436 \ +# -s spica.sytes.net:8888 \ +# -s 98.202.75.0:8877 \ +# -s 87.13.117.33:8888 \ +# -s 79.103.107.173:5995 \ +# -s 79.31.239.174:8888 \ +# "$@" +#} +# +#cfg-nap() { $EDITOR ~/.nap/napconf ;} +# +# +## http://twit.altervista.org/linux-2/how-to-copy-an-entire-commandline-using-just-the-keyboard.html +## alias copylastcommand='echo "!!" | xclip -selection clipboard' +## alias copylastcommand='history -p !! | xsel -ib' +## alias copylastcommand='$(history -p !-1) | xsel -ib' +# +#color_term() { +# for i in {0..255} ; do +# printf "\x1b[38;5;${i}mcolour${i}\n" +# done +#} +# +#vcsi-width-3x5() { +# vcsi "$2" -t -w "$1" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +#} +#convert2image_jpg() { +# if [ $# -lt 1 ] +# then +# echo -e "convert images to jpg" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.bmp pic3.png" +# echo -e "\n$0 *.png" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# convert -quality 50% "$arg" "${arg%.*}.jpg" +# done +#} +# +#vcsi-1280-3x4() { +# if [ $# -lt 1 ] +# then +# echo -e "vcsi" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# vcsi "$arg" -t -w 1024 --background-color 000000 --metadata-font-color ffffff -g 2x5 --end-delay-percent 20 +# done +#} +# +#vcsi-auto-3x5() { +# eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +# get_width=${streams_stream_0_width} +# vcsi "$1" -t -w "$get_width" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +#} +# +#vsheet() { +# +# # generate sheet +# eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +# get_width=${streams_stream_0_width} +# vcsi "$1" -t -w "$get_width" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +# +# concat_jpg mpv-*.jpg *.png +# image-resize-1920x1080 concatoutput.jpg +# mv concatoutput_1920x1080_resized.jpg cover.jpg +# +# +#} +# +# +# +## http://productivefoss.blogspot.com.au/2015/05/exploring-notification-system-ii-how-to.html?m=1 +## http://www.webupd8.org/2016/03/translate-any-text-you-select-on-your.html +# +# +#publicpickups() { +# if [ $# -lt 1 ] +# then +# echo -e "resize pictures to another resolution" +# echo -e "\nUsage:\n$0 <picture>" +# echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +# echo -e "\n$0 *.jpg" +# +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# # AUTHORS=$( echo "$arg" | awk -F_ '{print $2 " " $3}' | sed -e "s/\b\(.\)/\u\1/g" ) +# AUTHORS=$( echo "$arg" | awk -F_ '{print $2}' | sed -e "s/\b\(.\)/\u\1/g" ) +# cmx-add $cbsuper -e -a "$AUTHORS" -t "$arg" -T "korn,pov,amatuer" -c "${arg}.jpg" +# done +#} +# +########################################################### +#itv(){mpv http://46.249.60.210:15099/play/a00j &> /dev/null & } +#itv_plus1(){mpv http://46.249.60.210:15099/play/a00l &> /dev/null & } +#itv2(){mpv http://46.249.60.210:15099/play/a00o &> /dev/null & } +#itv2_plus1(){mpv http://46.249.60.210:15099/play/a01j &> /dev/null & } +#itv4(){mpv http://46.249.60.210:15099/play/a00p &> /dev/null & } +#itv4_plus1(){mpv http://46.249.60.210:15099/play/a00r &> /dev/null & } + +#ch4(){mpv http://195.189.203.18:8080/play/a01b &> /dev/null & } +#ch4_plus1(){mpv http://195.189.203.18:8080/play/a01e &> /dev/null & } +#bbc1(){${HOME}/bin/get_iplayer --stream --type=livetv "BBC One" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbc2(){${HOME}/bin/get_iplayer --stream --type=livetv "BBC Two" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbc3(){${HOME}/bin/get_iplayer --stream --type=livetv "BBC Three" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbc4(){${HOME}/bin/get_iplayer --stream --type=livetv "BBC Four" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcn(){${HOME}/bin/get_iplayer --stream --type=livetv "BBC News" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbccbbc(){${HOME}/bin/get_iplayer --stream --type=livetv "CBBC" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbccbbs(){${HOME}/bin/get_iplayer --stream --type=livetv "CBeebies" --player="/usr/bin/mplayer -" &> /dev/null &} + +#bbcr1x(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC 1xtra" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr1(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 1" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr2(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 2" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr3(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 3" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr4(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 FM" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr4x(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 Extra" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr5(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC Radio 5 live" --player="/usr/bin/mplayer -" &> /dev/null &} +#bbcr5x(){${HOME}/bin/get_iplayer --stream --type=liveradio "BBC 5 live Sports Extra" --player="/usr/bin/mplayer -" &> /dev/null &} +#ewtn(){mpv http://ewtn.mpl.miisolutions.net:1935/ewtn-live-1/smil:dome.smil/playlist.m3u8 &> /dev/null &} +#ewtn(){mpv "http://bogtvhdlive-f.akamaihd.net/main_1_400@79148?v=2.9.4&fp=WIN%2016,0,0,257&r=DIQLE&g=YMULUMYIOWWK" &> /dev/null & } +########################################################### +## +## #-------- Functions #-------- }}} +## +############################################################ diff --git a/.bashrc.d/03functions.bash.osx b/.bashrc.d/03functions.bash.osx new file mode 100755 index 0000000..f5f08d0 --- /dev/null +++ b/.bashrc.d/03functions.bash.osx @@ -0,0 +1,5086 @@ +############################################################################### +# +# FUNCTIONS +# +############################################################################### +############################################################################### +# +# ip shows ip addresses for eth0, eth1 and external +# +############################################################################### + +function ip() + { + echo -e "Ethernet:\t `ifconfig eth0 `" #| grep 'inet addr' | awk '{print $2}' | awk -F : '{print $2}' 2> /dev/null`" + #echo -e "WiFi:\t\t `ifconfig eth1 | grep 'inet addr' | awk '{print $2}' | awk -F : '{print $2}' 2> /dev/null`" + #echo -e "External:\t `wget -qO - http://icanhazip.com" + echo "" + } + +############################################################################### +# +# Prompt +# +# 30m - Black +# 31m - Red +# 32m - Green +# 33m - Yellow +# 34m - Blue +# 35m - Purple +# 36m - Cyan +# 37m - White +# 0 - Normal +# 1 - Bold +# +############################################################################### + +function prompt { + local BLACK="\[\033[0;30m\]" + local BLACKBOLD="\[\033[1;30m\]" + local RED="\[\033[0;31m\]" + local REDBOLD="\[\033[1;31m\]" + local GREEN="\[\033[0;32m\]" + local GREENBOLD="\[\033[1;32m\]" + local YELLOW="\[\033[0;33m\]" + local YELLOWBOLD="\[\033[1;33m\]" + local BLUE="\[\033[0;34m\]" + local BLUEBOLD="\[\033[1;34m\]" + local PURPLE="\[\033[0;35m\]" + local PURPLEBOLD="\[\033[1;35m\]" + local CYAN="\[\033[0;36m\]" + local CYANBOLD="\[\033[1;36m\]" + local WHITE="\[\033[0;37m\]" + local WHITEBOLD="\[\033[1;37m\]" + local NORMAL="\[\033[0;0m\]" +# local USER="if [ `id -u` == "0" ]; then echo \"${RED}\"; else echo \"${CYAN}\"; fi" + local SMILEY="${GREEN}:)${NORMAL}" + local FROWNY="${RED}:(${NORMAL}" + local SELECT="if [ $? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi" + local SELECT2="${SELECT}" +export PS1="${NORMAL}[${CYAN}\u${NORMAL}@${YELLOW}\h${NORMAL}]${BLUEBOLD}\w${NORMAL}\\$ " +} +########################################################################## +# Linux Function --- {{{ +# #-------- Functions #-------- {{{ +# +########################################################### +########################################################### +#------------Network {{{ +# +# ip_show ip addresses for eth0, eth1 and external - used +# for login +##ip_show(){ +# # check to see if interface is up +# +# if [[ $(cat /sys/class/net/wlan0/operstate) == "up" ]]; +# then +# # check to see if external network is available +# if ping -q -c 1 -W 1 8.8.8.8 > /dev/null ; then +# echo -e "External:\t `wget -qO - http://icanhazip.com`" ; +# else +# echo -e "No External Network...\n" +# fi +# echo -e "Internal:\t `/sbin/ifconfig wlan0 | grep 'inet addr' | awk '{print $2}' | awk -F : '{print $2}'`" ; +# else +# echo -e "No Network...\n" +# fi +#} +## --- }}} +############################################################ +## ----------- VPNs {{{ +#vpn_am-up(){ +# nmcli con up id AirVPN_America_UDP-443 } +#vpn_am-dn(){ +# nmcli con down id AirVPN_America_UDP-443 } +#vpn_as-up(){ +# nmcli con up id AirVPN_Asia_UDP-443 } +#vpn_as-dn(){ +# nmcli con down id AirVPN_Asia_UDP-443 } +#vpn_cato-up(){ +# nmcli con up id AirVPN_CA-Toronto-Ontario_Agena_UDP-443 } +#vpn_cato-dn(){ +# nmcli con down id AirVPN_CA-Toronto-Ontario_Agena_UDP-443 } +#vpn_eu-up(){ +# nmcli con up id AirVPN_Europe_UDP-443 } +#vpn_eu-dn(){ +# nmcli con down id AirVPN_Europe_UDP-443 } +#vpn_gblon-up(){ +# nmcli con up id AirVPN_GB-London_Bellatrix_UDP-443 } +#vpn_gblon-dn(){ +# nmcli con down id AirVPN_GB-London_Bellatrix_UDP-443 } +#vpn_hk-up(){ +# nmcli con up id AirVPN_HK-HongKong_Yed_UDP-443 } +#vpn_hk-dn(){ +# nmcli con down id AirVPN_HK-HongKong_Yed_UDP-443 } +#vpn_us-up(){ +# nmcli con up id AirVPN_United-States_UDP-443 } +#vpn_us-dn(){ +# nmcli con down id AirVPN_United-States_UDP-443 } +#vpn_usla-up(){ +# nmcli con up id AirVPN_US-LosAngeles_Sabik_UDP-443 } +#vpn_usla-dn(){ +# nmcli con down id AirVPN_US-LosAngeles_Sabik_UDP-443 } +# +## --- }}} +############################################################# +##------------ Login / Shell {{{ +#prompt_bash() { +# export PS1="${Color_off}\ +# [${Cyan}\u${Color_off}@${Yellow}\h${Color_off}] \ +# ${BBlue}\w${Color_off}\\$ " } +## --- }}} +############################################################# +##--- macfanctld--- {{{ +## +#macf(){ +# sudo /usr/sbin/macfanctld } +## --- }}} +############################################################# +##--- zsh history fix--- {{{ +## +#zsh_hist_fix(){ +# cd $HOME; mv -f .zsh_history .zsh_history_bad; +# strings .zsh_history_bad > .zsh_history; +# fc -R .zsh_history; rm -f .zsh_history_bad +# } +# +## --- }}} +############################################################ +##-------- Transmission CLI {{{ +## this is notes for video: http://www.youtube.com/watch?v=ee4XzWuapsE +##------------------------------------------------------ +## lightweight torrent daemon, has option for cli, webui, ncurses, and gui frontend +## demo video: http://www.youtube.com/watch?v=ee4XzWuapsE +## WebUI: http://localhost:9091/transmission/web/ +## http://192.168.1.xxx:9091/transmission/web/ +#tsm-clearcompleted() { +# transmission-remote -l | grep 100% | grep Done | \ +# awk '{print $1}' | xargs -n 1 -I % transmission-remote -t % -r ;} +#tsm() { transmission-remote --list ;} +# # numbers of ip being blocked by the blocklist +## credit: smw from irc #transmission +#tsm-count() { echo "Blocklist rules:" $(curl -s --data \ +#'{"method": "session-get"}' localhost:9091/transmission/rpc -H \ +#"$(curl -s -D - localhost:9091/transmission/rpc | grep X-Transmission-Session-Id)" \ +#| cut -d: -f 11 | cut -d, -f1) ;} +## demo video: http://www.youtube.com/watch?v=TyDX50_dC0M +#tsm-blocklist() { $PATH_SCRIPTS/blocklist.sh ;} # update blocklist +#tsm-daemon() { transmission-daemon ;} +#tsm-quit() { killall transmission-daemon ;} +#tsm-altspeedenable() { transmission-remote --alt-speed ;} # limit bandwidth +#tsm-altspeeddisable() { transmission-remote --no-alt-speed ;} # dont limit bandwidth +#tsm-add() { transmission-remote --add "$1" ;} +#tsm-askmorepeers() { transmission-remote -t"$1" --reannounce ;} +#tsm-pause() { transmission-remote -t"$1" --stop ;} # <id> or all +#tsm-start() { transmission-remote -t"$1" --start ;} # <id> or all +#tsm-purge() { transmission-remote -t"$1" --remove-and-delete ;} # delete data also +#tsm-remove() { transmission-remote -t"$1" --remove ;} # leaves data alone +#tsm-info() { transmission-remote -t"$1" --info ;} +#tsm-speed() { while true;do clear; transmission-remote -t"$1" -i | grep Speed;sleep 1;done ;} +# +## https://github.com/fagga/transmission-remote-cli +## demo video: http://www.youtube.com/watch?v=hLz7ditUwY8 +#tsm-ncurse() { transmission-remote-cli ;} +# +## --- }}} +############################################################# +##-------- Firefox profile{{{ +#firefox_J() { /usr/bin/firefox -no-remote -P Jupyter > /dev/null 2>&1 & } +#firefox_Y() { /usr/bin/firefox -no-remote -P Youtube & } +## --- }}} +############################################################# +##-------- DVD playback{{{ +#dvd_play() { mplayer dvdnav:// -mouse-movements \ +# -dvd-device /dev/dvd ;} +## --- }}} +############################################################# +##-------- DVD rip{{{ +#dvd_rip() { +# rawout=$(HandBrakeCLI -i /dev/dvd -t 0 2>&1 >/dev/null); +# count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l); +# for i in $(seq $count); do HandBrakeCLI -i /dev/dvd -t $i -Z "Very Fast 720p30" -a 2 -o ${1}.mp4 ; done +# } +## --- }}} +############################################################# +##-------- Configurations {{{ +##------------------------------------------------------ +#cfg-bashrc() { $EDITOR $HOME/.bashrc ;} +#cfg-dotalias() { $EDITOR $HOME/.bashrc.d/02aliases.bash.linux ;} +#cfg-dotenvs() { $EDITOR $HOME/.bashrc.d/01environ.bash.linux ;} +#cfg-dotfuncs() { $EDITOR $HOME/.bashrc.d/03functions.bash.linux ;} +#cfg-dotopts() { $EDITOR $HOME/.bashrc.d/04options.bash.linux ;} +#cfg-fstab() { sudo $EDITOR /etc/fstab ;} +#cfg-group() { sudo $EDITOR /etc/group ;} +#cfg-grub() { sudo $EDITOR /etc/default/grub ;} +#cfg-hosts() { sudo $EDITOR /etc/hosts ;} +#cfg-i3wm() { $EDITOR ~/.i3/config ;} +#cfg-inputrc() { $EDITOR ~/.inputrc ;} +#cfg-livestreamer() { $EDITOR ~/.livestreamerrc ;} +#cfg-mc() { $EDITOR ~/.config/mc/ini ;} +#cfg-mcomix() { $EDITOR ~/.config/mcomix/keybindings.conf ;} +#cfg-mpd() { $EDITOR ~/.mpd/mpd.conf ;} +#cfg-mplayer() { $EDITOR ~/.mplayer/config ;} +#cfg-mpv() { $EDITOR ~/.config/mpv/input.conf ;} +#cfg-muttrc() { $EDITOR ~/.muttrc ;} +#cfg-nanorc() { $EDITOR ~/.nanorc;} +#cfg-ncmpcpp() { $EDITOR ~/.ncmpcpp/config ;} +#cfg-ncmpcpp-bindings() { $EDITOR ~/.ncmpcpp/bindings ;} +#cfg-newsbeuter() { $EDITOR ~/.newsbeuter/config ;} +#cfg-newsbeuter-queue() { $EDITOR ~/.newsbeuter/queue ;} +#cfg-newsbeuter-urls() { $EDITOR ~/.newsbeuter/urls ;} +#cfg-profile() { $EDITOR ~/.profile ;} +#cfg-pulseaudio() { sudo $EDITOR /etc/pulse/default.pa ;} +#cfg-pyload() { $EDITOR ~/.pyload/pyload.conf ;} +#cfg-pyradio() { $EDITOR ~/.pyradio.csv ;} +#cfg-ssh-client() { sudo $EDITOR /etc/ssh/ssh_config ;} +#cfg-ssh-daemon() { sudo $EDITOR /etc/ssh/sshd_config ;} +#cfg-sudoers() { sudo $EDITOR /etc/sudoers ;} +#cfg-tmuxrc() { $EDITOR ~/.tmux.conf ;} +#cfg-tpb() { $EDITOR $HOME/bin/scripts/torrshellscripts-master/thepiratebay_se/tpb.sh ;} +#cfg-transmission-daemon() { $EDITOR ~/.config/transmission-daemon/settings.json ;} +#cfg-transmission-ncurse() { $EDITOR ~/.config/transmission-remote-cli/settings.cfg ;} +#cfg-trz() { $EDITOR $HOME/bin/scripts/torrshellscripts-master/torrentz_eu/torrentz_eu.sh ;} +#cfg-urlview() { $EDITOR ~/.urlview ;} +#cfg-updatedb() { sudo $EDITOR /etc/updatedb.conf ;} +#cfg-vimrc() { $EDITOR ~/.vimrc ;} +#cfg-w3m() { $EDITOR ~/.w3m/config ;} +#cfg-weechat() { $EDITOR ~/.weechat/weechat.conf ;} +#cfg-w3m-keymap() { $EDITOR ~/.w3m/keymap ;} +#cfg-xresources() { $EDITOR ~/.Xresources ;} +#cfg-zshrc() { $EDITOR ~/.zshrc ;} +#cfg-zurlrc() { $EDITOR ~/.zurlrc ;} +## --- }}} +############################################################ +##-------- Configurations Reload {{{ +##------------------------------------------------------ +#rld-bashrc() { source ~/.bashrc ;} +#rld-font() { fc-cache -v -f ;} +#rld-grub() { sudo grub-mkconfig -o /boot/grub/grub.cfg ;} +#rld-updatedb() { sudo updatedb ;} +#rld-xdefaults() { xrdb ~/.Xdefaults ;} +#rld-xmodmap() { xmodmap ~/.Xmodmap ;} +#rld-xresources() { xrdb -load ~/.Xresources ;} +#rld-zshrc() { source ~/.zshrc ;} +## }}} +############################################################ +##------- IPlayer {{{ +# +#get_iplayer-list(){ clear ; for FILE in `cat ToDownloadList`; do URI=$FILE; echo "Downloading $URI"; /home/vgg/bin/get_iplayer --modes=flashhigh,hlshigh --url $URI; done} +#bbccbbc(){/home/vgg/bin/get_iplayer --stream --type=livetv "CBBC" --player="/usr/bin/mplayer -"&} +#bbccbbs(){/home/vgg/bin/get_iplayer --stream --type=livetv "CBeebies" --player="/usr/bin/mplayer -"&} +#bbcn(){/home/vgg/bin/get_iplayer --stream --type=livetv "BBC News" --player="/usr/bin/mplayer -"&} +#bbc1(){/home/vgg/bin/get_iplayer --stream --type=livetv "BBC One" --player="/usr/bin/mplayer -"&} +#bbc2(){/home/vgg/bin/get_iplayer --stream --type=livetv "BBC Two" --player="/usr/bin/mplayer -"&} +#bbc3(){/home/vgg/bin/get_iplayer --stream --type=livetv "BBC Three" --player="/usr/bin/mplayer -"&} +#bbc4(){/home/vgg/bin/get_iplayer --stream --type=livetv "BBC Four" --player="/usr/bin/mplayer -"&} +#bbcr1x(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC 1xtra" --player="/usr/bin/mplayer -"&} +#bbcr1(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 1" --player="/usr/bin/mplayer -"&} +#bbcr2(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 2" --player="/usr/bin/mplayer -"&} +#bbcr3(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 3" --player="/usr/bin/mplayer -"&} +#bbcr4(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 FM" --player="/usr/bin/mplayer -"&} +#bbcr4x(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 4 Extra" --player="/usr/bin/mplayer -"&} +#bbcr5(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC Radio 5 live" --player="/usr/bin/mplayer -"&} +#bbcr5x(){/home/vgg/bin/get_iplayer --stream --type=liveradio "BBC 5 live Sports Extra" --player="/usr/bin/mplayer -"&} +# +## }}} +############################################################ +##------- Novacom {{{ +#nova-up(){ echo "nova-up:...:"; sudo -E novacomd -d; } +#nova-down(){sudo -E kill -9 $(echo `ps aux | grep novacomd | awk '/root/{print $2}'`); echo "nova-down:...completed:"; } +#pre2(){ novacom -d roadrunner-linux -t open tty://; } +#pre3(){ novacom -d mantaray-linux -t open tty:// ;} +#touchpad(){ novacom -d topaz-linux -t open tty:// ;} +#veer(){ novacom -d broadway-linux -t open tty:// ;} +## }}} +############################################################ +##-------- Tmux Sessions {{{ +##------------------------------------------------------ +#tmx0() { +# tmux new-session -s 'WongFeiHong' -d ; +# tmux new-window -n 'Astro' -c $ASTRO ; +# tmux send-keys 'clear' 'Enter' ; +# tmux send-keys 'sasinit' 'Enter' ; +# tmux new-window -n 'AstroPy-Dev' -c $ASTRO ; +# tmux send-keys 'clear' 'Enter' ; +# tmux send-keys 'source activate astropy_dev' 'Enter' ; +# tmux new-window -n 'webOS' -c $COMP ; +# tmux send-keys 'clear' 'Enter' ; +# tmux new-window -n 'Email' -c $HOME ; +# tmux send-keys 'mutt' 'Enter' ; +# tmux split-window -h -p 40 -t 1 ; +# tmux send-keys 'newsbeuter' 'Enter' ; +# tmux select-pane -t 1 ; +# tmux new-window -n 'Torr' -c $HOME ; +# tmux send-keys 'source activate transmission' 'Enter' ; +# tmux send-keys 'tsm-daemon' 'Enter' ; +# tmux send-keys 'tsm-ncurse' 'Enter' ; +# tmux split-window -h -p 40 -t 1 ; +# tmux send-keys 'clear' 'Enter' ; +# tmux split-window -v -p 50 -t 1 ; +# tmux send-keys 'mpsyt user hak5' 'Enter'; +# #send-keys 'mpsyt user FunkerTactical' 'Enter' \; \ +# #send-keys 'mpsyt user UCiIVDn5bUGZUJc_15qJPjUw' 'Enter' \; \ +# #send-keys 'mpsyt user UCi8e0iOVk1fEOogdfu4YgfA' 'Enter' \; \ +# tmux select-pane -t 1 ; +# tmux new-window -n 'Chat' -c $HOME ; +# tmux send-keys 'weechat-curses' 'Enter'; +# tmux -2 attach-session -d ; +#} +#tmx1() { +# tmux new-session -n 'IPython' -d 'vim'; +# tmux split-window -h 'ipython'; +# tmux split-window -v ; +# #tmux new-window 'mutt'; +# tmux -2 attach-session -d ; +#} +# +## }}} +############################################################ +##-------- System Information {{{ +##------------------------------------------------------ +#m-sound() { arecord -L && arecord -l && cat /proc/asound/pcm ;} #List audio capture card/mic +#m-distro() { uname -a && lsb_release -a ;} +#m-connectip() { +# echo "--------------- Connected Devices -----------------" +# nmap -sn $(netstat -rn | awk 'FNR == 3 {print $2}')/24 +# echo "---------------------------------------------------" +# +#} +# +## uses ip or ifconfig, good on older or newer system +#m-ip() { +# echo "--------------- Network Information ---------------" +# # show router ip +#echo "router ip:" $(netstat -rn | awk 'FNR == 3 {print $2}') +### newer system like archlinux +##ip addr | awk '/global/ {print $1,$2}' | cut -d\/ -f1 +##ip addr | awk '/global/ {print $3,$4}' +##ip addr | awk '/ether/ {print $1,$2}' +##ip addr | awk '/scope link/ {print $1,$2}' | cut -d\/ -f1 +### older system like debian +## #ifconfig | awk '/inet addr/ {print $1,$2}' | awk -F: '{print $1,$2}' +## #ifconfig | awk '/Bcast/ {print $3}' | awk -F: '{print $1,$2}' +## #ifconfig | awk '/inet addr/ {print $4}' | awk -F: '{print $1,$2}' +## #ifconfig | awk '/HWaddr/ {print $4,$5}' +## #ifconfig | awk '/Scope:Link/ {print $1,$3}' | cut -d\/ -f1 +### echo External IP $(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+") +#echo External IP: $(curl -s http://ipecho.net/plain) +# echo "---------------------------------------------------" +#} +## +##}}} +############################################################ +##-------- PulseAudio Switcher CLI v2 {{{ +##------------------------------------------------------ +## DEMO: https://www.youtube.com/watch?v=jhv-2pNWfr4 +## DESC: switch audio stream to different output (HDMI, Headphone, Speakers ...etc) +## REFF: http://askubuntu.com/a/18210 +# +#pa-global() { +# if [ $# -lt 1 ]; then +# echo -e "pulseaudio redirect audio of all running app to another device" +# echo -e "\nUsage:\n$0 <device_index_number>" +# echo -e "\nExample:\n$0 0 \n" +# echo "===============" +# echo "Sound Devices" +# pacmd list-sinks | awk '/index/ || /name:/' +# return 1 +# fi +# +# # list all apps in playback tab (ex: cmus, mplayer, vlc) +# inputs=($(pacmd list-sink-inputs | awk '/index/ {print $2}')) +## set the default output device +# pacmd set-default-sink $1 &> /dev/null +## apply the changes to all running apps to use the new output device +# for i in ${inputs[*]}; do pacmd move-sink-input $i $1 &> /dev/null; done +# +#} +#pa-solo() { +# if [ $# -lt 2 ]; then +# echo -e "pulseaudio redirect audio of one running app to another device" +# echo -e "\nUsage:\n$0 <app_index_number> <device_index_number>" +# echo -e "\nExample:\n$0 2302 0 \n" +# echo "===============" +# echo "Running Apps" +# pacmd list-sink-inputs | awk '/index/ || /application.name /' +# echo "===============" +# echo "Sound Devices" +# pacmd list-sinks | awk '/index/ || /name:/' +# return 1 +# fi +# +# # set the default output device +# pacmd set-default-sink "$2" &> /dev/null +## apply changes to one running app to use the new output device +# pacmd move-sink-input "$1" "$2" &> /dev/null +## +#} +# +##}}} +############################################################ +##-------- Calibre CLI v3 {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/watch?v=FeoVsC4U_0A +## DESC: ebook manager supports many formats and devices; interfaces with cli, webui, gui +## URL: http://manual.calibre-ebook.com/cli/calibredb.html +# +#cmx-list() { +# if [ $# -lt 1 ]; then +# echo -e "calibredb list files of a library" +# echo -e "\nUsage:\n$0 <library>" +# echo -e "\nExample:\n$0 \$cbcomic\n" +# return 1 +# fi +# +# calibredb list -f authors,title,tags,rating --library-path "$1" +## +#} +# +#cmx-search() { +# if [ $# -lt 2 ]; then +# echo -e "calibredb search files of a library" +# echo -e "\nUsage:\n$0 <library> <keywords>" +# echo -e "\nExample:\n$0 \$cbcomic marvel" +# echo -e "$0 \$cbcomic 'the walking dead'\n" +# return 1 +#fi +# +# calibredb list -s "${@:2}" -f authors,title,tags,rating --library-path "$1" +## +#} +# +#cmx-add() { +# if [ $# -lt 2 ]; then +# echo -e "calibredb add new files to a library" +# echo -e "\nUsage:\n$0 <library> <file>" +# echo -e "\nExample:\n$0 \$cbcomic file.cbz" +# echo -e "$0 \$cbcomic file1.cbz file2.cbz" +# echo -e "$0 \$cbcomic file.epub file2.pdf file3.cbr\n" +# return 1 +# fi +# +# calibredb add "${@:2}" --library-path "$1" +# +#} +# +#cmx-remove() { +# if [ $# -lt 2 ]; then +# echo -e "calibredb remove files from a library" +# echo -e "\nUsage:\n$0 <library> <id>" +# echo -e "$0 <library> <range>" +# echo -e "\nExample:\n$0 \$cbcomic 100" +# echo -e "$0 \$cbcomic 50-55" +# echo -e "$0 \$cbcomic 100,120-127" +# return 1 +# fi +# +# calibredb remove "${@:2}" --library-path "$1" +## +#} +# +#cmx-show() { +# if [ $# -lt 2 ]; then +# echo -e "calibredb show file metadata from a library" +# echo -e "\nUsage:\n$0 <library> <id>" +# echo -e "\nExample:\n$0 \$cbcomic 16" +# return 1 +# fi +# +# calibredb show_metadata "${@:2}" --library-path "$1" | html2text +## +#} +# +# +#cmx-recipes() { ebook-convert --list-recipes | less ;} +# +## WebUI content server +## http://manual.calibre-ebook.com/cli/calibre-server.html +## http://192.168.1.xxx:port +#cmx-quit() { kill $(ps -ef | grep -i '[C]alibre-server' | awk '{print $2}') ;} +#cmx-server() { +# # start all content server on different ports +#calibre-server -p 57770 --daemonize --with-library "$CMX_CALIBRE" +#calibre-server -p 57771 --daemonize --with-library "$CMX_COMICS" +#calibre-server -p 57772 --daemonize --with-library "$CMX_MAGS" +# +#} +# +##}}} +############################################################ +##-------- Convert to Audio {{{ +##------------------------------------------------------ +## https://trac.ffmpeg.org/wiki/Encode/MP3 +## https://trac.ffmpeg.org/wiki/Encode/AAC +## https://trac.ffmpeg.org/wiki/TheoraVorbisEncodingGuide +# +#convert2audio_mp3() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.m4a" +# echo -e "\nmultiple: $0 file1.m4a file2.m4a file3.m4a" +# echo -e "\nwildcard: $0 *.m4a" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.mp3 ] +# do +# ffmpeg -i "$arg" -codec:a libmp3lame -qscale:a 2 "${arg%.*}"-audiotrack.mp3 +# done +# done +#} +# +#convert2audio_m4a() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.m4a ] +# do +# ffmpeg -i "$arg" -codec:a aac -qscale:a 6 -strict experimental "${arg%.*}"-audiotrack.m4a +# done +# done +#} +#convert2audio_ogg() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.ogg ] +# do +# ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.ogg +# done +# done +#} +# +#convert2audio_wav() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.wav ] +# do +# ffmpeg -i "$arg" "${arg%.*}"-audiotrack.wav +# done +# done +#} +# +#convert2audio_webm() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.webm ] +# do +# ffmpeg -i "$arg" -codec:a libvorbis -qscale:a 5 -vn "${arg%.*}"-audiotrack.webm +# done +# done +#} +# +#convert2audio_wavmono() { +# if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +# fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-monoaudiotrack.wav ] +# do +# ffmpeg -i "$arg" -codec:a pcm_mulaw -ar 8000 -ac 1 "${arg%.*}"-monoaudiotrack.wav +# done +# done +#} +# +#convert2audio_wma() { +#if [ $# -lt 1 ]; then +# echo -e "Usage: $0 <file_name>" +# echo -e "\nsingle: $0 file.mp3" +# echo -e "\nmultiple: $0 file1.mp3 file2.mp3 file3.mp3" +# echo -e "\nwildcard: $0 *.mp3" +# return 1 +#fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# while [ ! -f "${arg%.*}"-audiotrack.wma ] +# do +# ffmpeg -i "$arg" -codec:a wmav2 -b:a 128k "${arg%.*}"-audiotrack.wma +# done +# done +#} +# +## }}} +############################################################ +##-------- Simple HTTP Server {{{ +##------------------------------------------------------ +## DEMO: http://www.youtube.com/watch?v=FFIjMYzkHhc +## DESC: python http server, host files and folders +# +#SimpleHTTPserver() { +# if which python2 >/dev/null; then +# python2 -m SimpleHTTPServer "${1:-8000}" +# else +# python3 -m http.server "${1:-8000}" +# fi +#} +##}}} +############################################################ +# +############################### +######## B. WAITING LIST ###### +############################### +# +############################################################ +##-------- FFMPEG X11GRAB Screencasting {{{ +##------------------------------------------------------ +## record desktop using ffmpeg +## tutorial video: http://www.youtube.com/watch?v=mNz5Lrc06_s +## http://ubuntuforums.org/showthread.php?t=1392026 +## https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu +## https://trac.ffmpeg.org/wiki/Capture/ALSA +## https://trac.ffmpeg.org/wiki/Capture/Desktop +## http://nowardev.wordpress.com/2011/05/23/how-to-screencast/ +## https://dl.dropboxusercontent.com/u/28788188/cast.sh (Xpander69) +## https://www.youtube.com/watch?v=mEV2O8C272g +## https://github.com/gotbletu/wikimd/blob/master/ffmpeg-compile.md +# +## ffmpeg location +## FF_RECORDER=/usr/bin/ffmpeg +##FF_RECORDER=~/Compile/ffmpeg/bin/ffmpeg +# +## use "arecord -l" or "arecord -L" to find mic +## pavucontrol if using pulseaudio +## FF_MIC=pulse +## FF_MIC=hw:4,0 +##FF_MIC=front:CARD=Snowball +# +## scale down resolution if needed +## ${FF_SCALE[*]} +## FF_SCALE=(-vf scale=1280:720) +# +# +##FF_OUTPUT_MOVIE=~/Public/screencast/mm_movie_baking.mkv +##FF_OUTPUT_VIDEO=~/Public/screencast/vv_video_baking.mkv +##FF_OUTPUT_AUDIO=~/Public/screencast/aa_audio_baking.mp3 +# +## movie = video and audio +## videotrack = video only +## audiotrack = audio only +##ffcast_fullscreen_movie() { +## $FF_RECORDER -f alsa -ac 1 -i $FF_MIC -async 1 -f x11grab -r 30 \ +##-s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) \ +##-i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +##-acodec libmp3lame -ab 320k -threads 0 -y $FF_OUTPUT_MOVIE +## +# +##ffcast_fullscreen_videotrack() { +## $FF_RECORDER -f x11grab -r 30 \ +##-s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) \ +##-i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +##-threads 0 -y $FF_OUTPUT_VIDEO +## +# +##ffcast_audiotrack() { +## $FF_RECORDER -f alsa -ac 1 -i $FF_MIC \ +##-acodec libmp3lame -ab 320k \ +##-threads 0 -y $FF_OUTPUT_AUDIO +## +# +## single window: select a window with mouse cursor to record +##ffcast_window_movie() { +## INFO=$(xwininfo -frame) +##WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') +##WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) +# +## $FF_RECORDER -f alsa -ac 1 -i $FF_MIC -async 1 -f x11grab -r 30 \ +##-s $WIN_GEO -i :0.0+$WIN_XY -vcodec libx264 -pix_fmt yuv444p \ +##-preset ultrafast -crf 0 -acodec libmp3lame -ab 320k \ +##-threads 0 -y $FF_OUTPUT_MOVIE +## +# +##ffcast_window_videotrack() { +## INFO=$(xwininfo -frame) +##WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') +##WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) +# +## $FF_RECORDER -f x11grab -r 30 \ +##-s $WIN_GEO -i :0.0+$WIN_XY -vcodec libx264 -pix_fmt yuv444p \ +##-preset ultrafast -crf 0 \ +##-threads 0 -y $FF_OUTPUT_VIDEO +## +# +# +## example references +## worked well on ffmpeg 0.11.1 +## ffmpeg -f pulse -ac 1 -i hw:3,0 -async 1 -f x11grab -r 30 -s $(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) -i :0.0 -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 -acodec libmp3lame -ab 128k -threads 0 -y ~/Public/screencast/aa_screencast_baking.mkv +# +## --- }}} +############################################################ +##-------- FFMPEG X11GRAB Screencasting v2 (Multiple Inputs) {{{ +##------------------------------------------------------ +## DESC: record desktop using ffmpeg X11grab +# +## REFF: +## MrWhat record mic & speakers: https://www.youtube.com/watch?v=mEV2O8C272g +## MrWhat keep audio sync: https://www.youtube.com/watch?v=Xbzh-T2kfJk +## https://ask.fedoraproject.org/en/question/65662/recording-audio-from-mic-and-speakers-from-commandline/ +# +## list all audio sources +#pa-sources() { pactl list sources | awk '/Source #/ ||/Name:/ || /Description:/ || /Sample Specification:/' ;} +# +## ffmpeg location +## FFX_RECORDER=/usr/bin/ffmpeg +##FFX_RECORDER=~/Compile/ffmpeg/bin/ffmpeg +## FFX_RECORDER=/usr/bin/avconv +# +## speakers audio source (PC speakers or Headphones) +## note: using headphones since pc speakers will have audio feedback to mic +## FFX_SPEAKER="alsa_output.pci-0000_00_14.2.analog-stereo.monitor" +## FFX_SPEAKER_CH="2" +## FFX_SPEAKER_FREQ="44100" +##FFX_SPEAKER="alsa_output.usb-NA_Lenovo_Wireless_Headset_W770-00.analog-stereo.monitor" +##FFX_SPEAKER_CH="2" +##FFX_SPEAKER_FREQ="32000" +# +## mic audio source +## note: when routed to pulseaudio the mic is very low +## so open pavucontrol > input device > [name of mic] +## then slide volume all the way to the right +## example: http://i.imgur.com/GFkifqB.png +##FFX_MIC="alsa_input.usb-BLUE_MICROPHONES_Blue_Snowball-00.analog-mono" +##FFX_MIC_CH="1" +##FFX_MIC_FREQ="44100" +# +## sound system +##FFX_SOUNDSYS="pulse" +## FFX_SOUNDSYS="alsa" +# +## resolution +##FFX_RESO_FULL=$(xwininfo -root | grep 'geometry' |awk '{print $2;}' | cut -d\+ -f1) +# +## output location +##FFX_OUTPUT_MOVIE=~/Public/screencast/mm_movie_baking.mkv +##FFX_OUTPUT_VIDEO=~/Public/screencast/vv_video_baking.mkv +##FFX_OUTPUT_AUDIO=~/Public/screencast/aa_audio_baking.mp3 +# +##ffxcast_fullscreen_movie() { +## $FFX_RECORDER \ +##-f $FFX_SOUNDSYS -ac $FFX_SPEAKER_CH -ar $FFX_SPEAKER_FREQ -i $FFX_SPEAKER \ +##-f $FFX_SOUNDSYS -ac $FFX_MIC_CH -ar $FFX_MIC_FREQ -i $FFX_MIC \ +##-f x11grab -r 30 -s $FFX_RESO_FULL -i :0.0 \ +##-filter_complex \ +##"[0]asyncts[spkr], \ +##[1]asyncts[mic], \ +##[spkr][mic]amix=inputs=2" \ +##-c:v libx264 -pix_fmt yuv420p -preset ultrafast -crf 0 \ +##-c:a libmp3lame -ac 2 -ar 44100 -b:a 320k \ +##-y $FFX_OUTPUT_MOVIE +## +## +### -vcodec libx264 -pix_fmt yuv444p -preset ultrafast -crf 0 \ +### -acodec libmp3lame -ab 128k -ar 44100 -threads 0 -y $FF_OUTPUT_MOVIE +## +### ffmpeg \ +### -f pulse -ac 2 -ar 44100 -i alsa_input.usb-BLUE_MICROPHONE_Blue_Snowball_201306-00-Snowball.analog-stereo \ +### -f pulse -ac 2 -ar 44100 -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ +### -f pulse -ac 2 -ar 44100 -i alsa_output.usb-Logitech_Inc_Logitech_USB_Headset_H540_00000000-00-H540.iec958-stereo.monitor \ +### -f x11grab -framerate 30 -video_size 1920x1080 -i :0 \ +### -filter_complex \ +### "[0]asyncts[m], \ +### [1]asyncts[d], \ +### [2]asyncts[h], \ +### [m][d][h]amix=inputs=3" \ +### -c:v libx264 -preset veryfast -crf 18 -pix_fmt yuv420p \ +### -c:a libmp3lame -ac 2 -ar 44100 -b:a 320k \ +### /home/b/Videos/AudioSync/AsyncTS_20150206.mkv +## +### different PRESET +### 1. -c:v libx264 -preset ultrafast -crf 18: Produced a 120.9 MB file at ~34-48% CPU load +### 2. -c:v libx264 -preset superfast -crf 18: Produced a 40.4 MB file at ~48-53% CPU load +### 3. -c:v libx264 -preset veryfast -crf 18: Produced a 26.1 MB file at ~62-78% CPU load +## +### different CRF +### 1. -c:v libx264 -preset ultrafast -crf 0 (Lossless): Produced a 471.7 MB file at ~32-50% CPU load +### 2. -c:v libx264 -preset ultrafast -crf 18: Produced a 120.9 MB file at ~34-48% CPU load +### 3. -c:v libx264 -preset ultrafast -crf 23: Produced a 67.1 MB file at ~32-45% CPU load +### 4. -c:v libx264 -preset ultrafast -crf 28: Produced a 31.1 MB file at ~30-40% CPU load +## +### image quality each setting produces (images are zoomed to in 285%) +### https://imgur.com/XF6t2Cv +## +## +### }}} +############################################################ +###-------- Alias Custom {{{ +###------------------------------------------------------ +### alias ps="ps aux | grep -v grep | grep " +##alias t="todo.sh" +##alias f="find . |grep " +##alias p="ps aux |grep " +### alias o="xdg-open " +## +### For emergencies +##alias asdf='setxkbmap fr bepo' +## +#alias xclipin='xclip -sel c -in <' +#alias xclipout='xclip -sel c -out >' +#alias ..="cd .." +#alias ...="cd ../.." +#alias ....="cd ../../.." +#alias .....="cd ../../../.." +#alias ......="cd ../../../../.." +#alias empty='gvfs-trash --empty' # empty trash globally (all partitions) +#alias garbage='gvfs-trash -f' +#alias garbage-list='gvfs-ls -h trash://' +#alias garbage-empty='gvfs-trash --empty' # empty trash globally (all partitions) +#alias psg='ps aux|grep -v grep|grep -i ' +#psgrep() { ps axuf | grep -v grep | grep "$@" -i --color=auto; } +#alias sshxforwarding='ssh -XCc blowfish-cbc,arcfour' +#alias sshxtrusted='ssh -Y' +#alias stackexchange='lynx http://column80.com' # lookup information +#alias trash='trash-put -v' +#alias xev-keycode="xev | grep 'keycode\|button'" +#alias weechat='weechat-curses' +#alias lsd='ls -1d */' # ls folders only +#alias l='ls -l' +#alias lsf='ls --color=always -p | grep -v '/$'' # ls files only +#alias lsa='ls -GghA' +#alias lsx='ls -lX' +### list and grep +#lsg() { +# keyword=$(echo "$@" | sed 's/ /.*/g') +# ls -GgthrA | grep -iE $keyword +#} +## +### ls recent items at bottom with green TODAY yellow YESTERDAY substituted +### https://www.reddit.com/r/archlinux/comments/41s1w4/what_is_your_favorite_one_liner_to_use/cz50y1m +#lst() { +# ls -vAFq --color=yes -got --si --time-style=long-iso "$@" \ +# | sed "s/$(date +%Y-%m-%d)/\x1b[32m TODAY\x1b[m/;s/$(date +'%Y-%m-%d' -d yesterday)/\x1b[33m YESTERDAY\x1b[m/" | tac +#} +### alias lst='ls -Ggthrc' # ls by time/changes, newest at bottom +## +## +## +### }}} +############################################################ +###-------- Functions {{{ +###------------------------------------------------------ +## +################################################################################# +### IPlayer +### +################################################################################# +## +##gip-setplayer() { export PLAYER="$1" ;} +##gip-cbbc() { get_iplayer --stream --type=livetv "CBBC" --player="$PLAYER -" ;} +##gip-cbbs() { get_iplayer --stream --type=livetv "CBeebies" --player="$PLAYER -" ;} +##gip-bbcn() { get_iplayer --stream --type=livetv "BBC News" --player="$PLAYER -" ;} +##gip-bbc1() { get_iplayer --stream --type=livetv "BBC One" --player="$PLAYER -" ;} +##gip-bbc2() { get_iplayer --stream --type=livetv "BBC Two" --player="$PLAYER -" ;} +##gip-bbc3() { get_iplayer --stream --type=livetv "BBC Three" --player="$PLAYER -" ;} +##gip-bbc4() { get_iplayer --stream --type=livetv "BBC Four" --player="$PLAYER -" ;} +##gip-bbcr1x() { get_iplayer --stream --type=liveradio "BBC 1xtra" --player="$PLAYER -" ;} +##gip-bbcr1() { get_iplayer --stream --type=liveradio "BBC Radio 1" --player="$PLAYER -" ;} +##gip-bbcr2() { get_iplayer --stream --type=liveradio "BBC Radio 2" --player="$PLAYER -" ;} +##gip-bbcr3() { get_iplayer --stream --type=liveradio "BBC Radio 3" --player="$PLAYER -" ;} +##gip-bbcr4() { get_iplayer --stream --type=liveradio "BBC Radio 4 FM" --player="$PLAYER -" ;} +##gip-bbcr4x() { get_iplayer --stream --type=liveradio "BBC Radio 4 Extra" --player="$PLAYER -" ;} +##gip-bbcr5() { get_iplayer --stream --type=liveradio "BBC Radio 5 live" --player="$PLAYER -" ;} +##gip-bbcr5x() { get_iplayer --stream --type=liveradio "BBC 5 live Sports Extra" --player="$PLAYER -" ;} +## +##unlock() { keepassc -d ~/.keepass/masterlock.kdb ;} +## +##mkdircd() { mkdir -p -v $1; cd $1 ;} # create folder then cd into it +##cpbak() { cp $1{,.bak} ;} # create backup copy +##open() { xdg-open "$@" > /dev/null 2>&1 ;} # open gui apps w/o error msg +##nohup-command() { nohup "$@" >/dev/null 2>&1& } #background a process w/o error msg +##update-grub() { sudo grub-mkconfig -o /boot/grub/grub.cfg ;} +##grub-list() { +## RED='\033[0;31m' +## sudo grep "menuentry '" /boot/grub/grub.cfg | less -N +## echo -e "${RED} REMINDER: GRUB number starts at zero not one" +##} +## +### http://stackoverflow.com/a/18709707 +##wget-ext-url() { +## if [ $# -lt 2 ]; then +## echo -e "Download all extension on a webpage" +## echo -e "\nUsage: $0 <file_extension> <url>" +## echo -e "\nExample: $0 mp3 http://example.com/files/" +## echo -e "\nGoogle: http://lmgtfy.com/?q=intitle%3Aindex.of+mp3+-html+-htm+-php+-asp+-txt+-pls+madonna" +## return 1 +## fi +## +## savepath=~/Downloads +## outputdir_name=$(echo "$2" | rev | cut -d\/ -f2 | rev) +## +## mkdir -pv "$savepath/$outputdir_name" +## cd "$savepath/$outputdir_name" && wget -r -l1 -H -t1 -nd -N -np -A "$1" -erobots=off "$2" +##} +## +### color the manpages +### tutorial video: http://www.youtube.com/watch?v=9BFaLAa428k +### https://wiki.archlinux.org/index.php/Man_page#Colored_man_pages +##man() { +## env LESS_TERMCAP_mb=$'\E[01;31m' \ +## LESS_TERMCAP_md=$'\E[01;31m' \ +## LESS_TERMCAP_me=$'\E[0m' \ +## LESS_TERMCAP_se=$'\E[0m' \ +## LESS_TERMCAP_so=$'\E[01;44;33m' \ +## LESS_TERMCAP_ue=$'\E[0m' \ +## LESS_TERMCAP_us=$'\E[01;32m' \ +## man "$@" +##} +## +### view markdown as manpages +### http://blog.metamatt.com/blog/2013/01/09/previewing-markdown-files-from-the-terminal/ +#mdless(){ pandoc -s -f markdown -t man "$*" | groff -T utf8 -man | less ;} +### view markdown within lynx +### https://tosbourn.com/view-markdown-files-terminal/ +#rmd(){ pandoc "$*" | lynx -stdin ;} +## +### quickly cd out of directories using numbers, example: up 2 +#up() { local x='';for i in $(seq ${1:-1});do x="$x../"; done;cd $x; } +## +### list all file access permission +##lsp() { stat --format "%a %n" * ;} +## +### show file access permission +### http://unix.stackexchange.com/a/46921 +##file-permission() { stat --format '%a %n' "$@" ;} +## +### display mime of file application/zip, application/x-tar +##file-type() { file --mime-type -b "$@" ;} +## +### call vim help page from shell prompt +##function :h { vim +":h $1" +'wincmd o' +'nnoremap q :q!<CR>' ;} +## +### searches for manual locally or online +##manned() { +## for arg in "$@"; do man $arg 2> /dev/null \ +## || $arg -H 2> /dev/null || $arg -h 2> /dev/null \ +## || $arg --help-all 2> /dev/null || $arg --help 2> /dev/null \ +## || help $arg 2> /dev/null \ +## || $BROWSERCLI "http://manned.org/browse/search?q=$@" 2> /dev/null \ +## || $BROWSER "http://manned.org/browse/search?q=$@" 2> /dev/null \ +## || open "http://manned.org/browse/search?q=$@" 2> /dev/null \ +## || xdg-open "http://manned.org/browse/search?q=$@" +## done +##} +## +### python calculator +### press Ctrl+D to quit +### http://docs.python.org/library/math.html +### tutorial video: http://www.youtube.com/watch?v=JkyodHenTuc +##calc() { +## if which python2 >/dev/null; then +## python2 -ic "from __future__ import division; from math import *; from random import *" +## else +## python3 -ic "from math import *; import cmath" +## fi +##} +## +### change font size (guake terminal) +### tutorial video: http://www.youtube.com/watch?v=i9aKFgxOjwQ +#chfontsize() { +# # guake +# gconftool-2 --set '/apps/guake/style/font/style' --type string "Monospace ${1:-16}" +## +## #gnome-terminal +## dconf write /org/gnome/terminal/legacy/profiles:/$(dconf list /org/gnome/terminal/legacy/profiles:/)font "'Monospace ${1:-16}'" +#} +## +### search commandlinefu.com +# +#cmdfu() { curl "http://www.commandlinefu.com/commands/matching/$(echo "$@" \ +# | sed 's/ /-/g')/$(echo -n $@ | base64)/plaintext" ;} +## +## +### display one random command from commandlinefu.com +##cmdfu-random() { echo -e "`curl -sL http://www.commandlinefu.com/commands/random/json|sed -re 's/.*,"command":"(.*)","summary":"([^"]+).*/\\x1b[1;32m\2\\n\\n\\x1b[1;33m\1\\x1b[0m/g'`\n" ;} +## +### check if a website is down +### usage: down4me google.com +##down4me() { curl -s "http://www.downforeveryoneorjustme.com/$1" | sed '/just you/!d;s/<[^>]*>//g';} +## +### convert doc/docx to pdf (dont upload sensitive data) +### tutorial video: http://www.youtube.com/watch?v=r90IdQwF-hs +##doc2pdf() { curl -# -F inputDocument=@"$1" http://www.doc2pdf.net/convert/document.pdf > "${1%.*}.pdf" ;} +## +### w3m browser with inline images +### https://plus.google.com/102499719144563443986/posts/Vja8W69iHoi +### tutorial video: http://www.youtube.com/watch?v=R2bMUtCOGko +# +#w3mimg() { w3m -o imgdisplay=/usr/lib/w3m/w3mimgdisplay $1 ;} +# +## +### mplayer to display webcam +### hit 's' to take screenshot, will save in current folder +### hit 'S' to take series of screenshot, will save in current folder +### hit 'f' to toggle fullscreen +### hit 'T' to toggle stay-on-top +### hit 'q' or 'Esc' to quit +### https://wiki.archlinux.org/index.php/Webcam_Setup#MPlayer +##webcam-list() { v4l2-ctl --list-formats-ext && v4l2-ctl --list-devices ;} +## +##webcam-mplayer() { mplayer tv:// -tv driver=v4l2:width=640:height=360:device=/dev/video0 -fps 30 -vf screenshot -ontop -geometry "99%:95%" ;} +## +##webcam-mplayer-noborder() { mplayer tv:// -tv driver=v4l2:width=640:height=360:device=/dev/video0 -fps 30 -vf screenshot -geometry "98%:98%" -ontop -noborder ;} +## +##webcam-mplayer-screenshot() { mplayer tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0 -fps 30 -vf screenshot -ontop ;} +## +###}}} +############################################################ +###-------- Gotbletu Universal Package Manager {{{ +###------------------------------------------------------ +### DEMO: https://www.youtube.com/watch?v=N8CZhlIssdk +### DESC: auto detect package manager and loads proper alias for it +## +### legends# {{{ +### https://wiki.archlinux.org/index.php/Pacman_Rosetta +### http://old-en.opensuse.org/Software_Management_Command_Line_Comparison +### https://bbs.archlinux.org/viewtopic.php?pid=1281605#p1281605 +### Arch -- pacman, yaourt +### Debian/Ubuntu -- apt-get(apt), aptitude, dpkg +### Gentoo -- eclean, emerge, equery, layman +### OpenSuse -- zypper +### Red Hat/Fedora -- package-cleanup, rpm, yum +### Suse -- rug +### Not finish, only tested on Debian, Arch, Fedora so far +## +### cleanold; removes certain packages that can no longer be downloaded +### cleanall; remove all local cached packages +### list; show the content of an installed package +### localinstall; install package manually such as deb, rpm files downloaded +### own; find a command a package belongs to; ex: pkm-own convert +### purge; uninstall package and purge configuration files (not in /home) +### query; search for an already installed package +### refresh; update repository list +### upgrade; install the newest version from the repositories +### hold/unhold; stop/allow a package from being update +### +### missing +### emerge: autoclean, purge, list, query +### rug: pkm-info, clean, autoremove, autoclean, purge, list, query +### zypper: pkm-info, autoremove, autoclean, purge, list, query +### yum: autoclean, purge +### }}} +## +##find_pkm() { for i;do which "$i" >/dev/null && { echo "$i"; return 0;};done;return 1; } +###export PKMGR=$(find_pkm yaourt pacman apt-get yum zypper emerge aptitude ) +##export PKMGR=$(find_pkm zypper ) +## +### {{{ apt-get +##if [ "$PKMGR" = "apt-get" ]; then +## pkm-cleanallall() { sudo apt-get clean ;} +## pkm-cleanallold() { sudo apt-get autoclean ;} +## pkm-dependsreverse() { apt-cache rdepends "$@" ;} +## pkm-download() { wget $(apt-get --print-uris -y install "$@" | grep ^\'| cut -d\' -f2) ;} +## pkm-extract() { ar vx "$@" | tar -zxvf data.tar.gz ;} +## # same as; echo "pkgname hold" | dpkg --set-selections +## pkm-hold() { sudo apt-mark hold "$@" ;} +## pkm-hold-status() { dpkg --get-selections | awk "/${@:-hold}/" ;} +## pkm-info() { apt-cache show "$@" ;} +## pkm-install() { sudo apt-get install --no-install-recommends "$@" ;} +## pkm-list() { dpkg -L "$@" ;} +## pkm-listcache() { ls -1 /var/cache/apt/archives "$@" && \ +## echo "pwd: /var/cache/apt/archives" ;} +## pkm-localinstall() { sudo dpkg -i "$@" ;} +## pkm-own() { dpkg -S $(which "$@") ;} +## pkm-pkgsearch() { apt-file search "$@" ;} +## pkm-purge() { sudo apt-get purge "$@" ;} +## pkm-query() { dpkg --get-selections | grep "$@" ;} +## pkm-refresh() { sudo apt-get update ;} +## pkm-remove() { sudo apt-get remove "$@" ;} +## pkm-remove-orphans() { sudo apt-get autoclean ;} +## pkm-search() { apt-cache search "$@" ;} +## pkm-unhold() { sudo apt-mark unhold "$@" ;} +## pkm-upgrade() { sudo apt-get update && sudo apt-get upgrade ;} +## # PPA on ubuntu base distro (not compatible with debian) +## ppa-add() { sudo add-apt-repository $@ ;} +## ppa-del() { sudo add-apt-repository -r $@ ;} +## ppa-key() { sudo apt-key add $@ ;} +## ppa-list() { ls /etc/apt/sources.list.d ;} +## ppa-purge() { sudo ppa-purge $@ ;} +## # auto get missing gpg keys from launchpad +## ppa-autokey() { sudo apt-get update 2> /tmp/keymissing; \ +## for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); \ +## do echo -e "\nProcessing key: $key"; gpg --keyserver pool.sks-keyservers.net \ +## --recv $key && gpg --export --armor $key | sudo apt-key add -; done ;} +## # these are extra servers, just replace it if one is down +## # keyserver.ubuntu.com +## # pool.sks-keyservers.net +## # subkeys.pgp.net +## # pgp.mit.edu +## # keys.nayr.net +## # keys.gnupg.net +## # wwwkeys.en.pgp.net #(replace with your country code fr, en, de,etc) +## # }}} +### {{{ aptitude +##elif [ "$PKMGR" = "aptitude" ]; then +## pkm-cleanallall() { sudo aptitude clean ;} +## pkm-cleanallold() { sudo aptitude autoclean ;} +## pkm-dependsreverse() { aptitude why "$@" ;} +## pkm-download() { aptitude download "$@" ;} # need a better 1; deb w/ depends +## pkm-extract() { ar vx "$@" | tar -zxvf data.tar.gz ;} +## pkm-hold() { echo "$1 hold" | sudo dpkg --set-selections && \ +## dpkg --get-selections | awk "/$1/ && /hold/" ;} +## pkm-hold-status() { dpkg --get-selections | awk "/${@:-hold}/" ;} +## pkm-info() { aptitude show "$@" ;} +## pkm-install() { sudo aptitude install --without-recommends "$@" ;} +## pkm-list() { dpkg -L "$@" ;} +## pkm-listcache() { ls -1 /var/cache/apt/archives "$@" && \ +## echo "pwd: /var/cache/apt/archives" ;} +## pkm-localinstall() { sudo dpkg -i "$@" ;} +## pkm-own() { dpkg -S $(which "$@") ;} +## pkm-pkgsearch() { apt-file search "$@" ;} +## pkm-purge() { sudo aptitude purge "$@" ;} +## pkm-query() { dpkg --get-selections | grep "$@" ;} +## pkm-refresh() { sudo aptitude update ;} +## pkm-remove() { sudo aptitude remove "$@" ;} +## pkm-remove-orphans() { sudo aptitude autoclean ;} +## pkm-search() { aptitude search "$*" ;} +## # fix maybe with keyword $@ | sed / / ~d/ +## pkm-search-description() { aptitude search ~d"$1"~d"$2"~d"$3"~d"$4"~d"$5"~d"$6"~d"$7" ;} +## pkm-unhold() { echo "$1 install" | sudo dpkg --set-selections && \ +## dpkg --get-selections | awk "/$1/ && /install/" ;} +## pkm-upgrade() { sudo aptitude update && sudo aptitude upgrade ;} +## # PPA on ubuntu base distro (not compatible with debian) +## ppa-add() { sudo add-apt-repository $@ ;} +## ppa-del() { sudo add-apt-repository -r $@ ;} +## ppa-key() { sudo apt-key add $@ ;} +## ppa-list() { ls /etc/apt/sources.list.d ;} +## ppa-purge() { sudo ppa-purge $@ ;} +## ppa-autokey() { sudo apt-get update 2> /tmp/keymissing; \ +## for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); \ +## do echo -e "\nProcessing key: $key"; gpg --keyserver pool.sks-keyservers.net \ +## --recv $key && gpg --export --armor $key | sudo apt-key add -; done ;} +### }}} +### {{{ emerge +##elif [ "$PKMGR" = "emerge" ]; then +## pkm-remove-orphans() { sudo emerge --depclean ;} +## pkm-cleanall() { sudo eclean distfiles ;} +## pkm-info() { emerge -S "$@" ;} +## pkm-install() { sudo emerge "$@" ;} +## pkm-pkgsearch() { equery belongs "$@" ;} +## pkm-refresh() { sudo layman -f ;} +## pkm-remove() { sudo emerge -C "$@" ;} +## pkm-search() { emerge -S "$@" ;} +## pkm-upgrade() { sudo emerge -u world ;} +### }}} +### {{{ pacman +##elif [ "$PKMGR" = "pacman" ]; then +## pkm-build() { tar xvzf "$1" && cd "${1%%.tar.gz}" && makepkg -csi ;} +## pkm-cleanall() { sudo pacman -Sc ;} +## pkm-cleanold() { sudo pacman -Scc ;} +## if type -p downgrade > /dev/null; then +## # require: https://aur.archlinux.org/packages/downgrade/ +## pkm-downgrade() { downgrade "$@" ;} +## fi +## pkm-download() { sudo pacman -Sw "$@" ;} +## pkm-info() { for arg in "$@"; do +## pacman -Qi $arg 2> /dev/null \ +## || pacman -Si $arg; done ;} +## pkm-install() { sudo pacman -S "$@" ;} +## pkm-key() { sudo pacman-key --init \ +## && sudo pacman-key --populate archlinux \ +## && sudo pacman-key --refresh-keys ;} +## pkm-list() { pacman -Qql "$@" ;} +## pkm-listinstalled() { pacman -Qe ;} +## pkm-listcache() { ls -1 /var/cache/pacman/pkg "$@" && \ +## echo "pwd: /var/cache/pacman/pkg" ;} +## pkm-localinstall() { sudo pacman --noconfirm -U "$@" ;} +## pkm-own() { pacman -Qo "$@" ;} +## pkm-pkgsearch() { pkgfile -s "$@" ;} +## pkm-purge() { sudo pacman -R "$@" ;} +## pkm-query() { pacman -Qqs "$@" ;} +## pkm-query-detail() { pacman -Qs "$@" ;} +## pkm-refresh() { sudo pacman -Syy ;} +## pkm-remove() { sudo pacman -Rcs "$@" ;} +## pkm-remove-nodepends() { sudo pacman -Rdd "$@" ;} +## pkm-remove-orphans() { sudo pacman -Rs $(pacman -Qqtd) ;} +## pkm-search() { pacman -Ss "$@" ;} +## pkm-search-local() { pacman -Qs "$@" ;} +## pkm-upgrade() { sudo pacman -Syu ;} +### }}} +### {{{ rug +##elif [ "$PKMGR" = "rug" ]; then +## pkm-install() { sudo rug install "$@" ;} +## pkm-refresh() { sudo rug refresh ;} +## pkm-remove() { sudo rug remove "$@" ;} +## pkm-search() { rug search "$@" ;} +## pkm-upgrade() { sudo rug update ;} +### }}} +### {{{ yaourt +##elif [ "$PKMGR" = "yaourt" ]; then +## pkm-build() { tar xvzf "$1" && cd "${1%%.tar.gz}" && makepkg -csi ;} +## pkm-cleanall() { yaourt -Sc ;} +## pkm-cleanold() { yaourt -Scc ;} +## if type -p downgrade > /dev/null; then +## # require: https://aur.archlinux.org/packages/downgrade/ +## pkm-downgrade() { downgrade "$@" ;} +## fi +## pkm-download() { sudo pacman -Sw "$@" ;} # need better shit to dl from aur also +## pkm-info() { for arg in "$@"; do +## yaourt -Qi $arg 2> /dev/null \ +## || yaourt -Si $arg; done ;} +## pkm-install() { yaourt --noconfirm -S "$@" ;} +## # https://wiki.archlinux.org/index.php/Pacman-key#Resetting_all_the_keys +## pkm-key() { sudo pacman-key --init \ +## && sudo pacman-key --populate archlinux \ +## && sudo pacman-key --refresh-keys ;} +## pkm-list() { yaourt -Qql "$@" ;} +## pkm-listinstalled() { yaourt -Qe ;} +## pkm-listcache() { ls -1 /var/cache/pacman/pkg "$@" && \ +## echo "pwd: /var/cache/pacman/pkg" ;} +## pkm-localinstall() { sudo pacman --noconfirm -U "$@" ;} +## pkm-own() { pacman -Qo "$@" ;} +## pkm-pkgsearch() { pkgfile -s "$@" ;} +## pkm-purge() { yaourt -R "$@" ;} +## pkm-query() { pacman -Qqs "$@" ;} +## pkm-query-detail() { yaourt -Qs "$@" ;} +## pkm-refresh() { yaourt -Syy ;} +## pkm-remove() { yaourt -Rcs "$@" ;} +## pkm-remove-nodepends() { yaourt -Rdd "$@" ;} +## pkm-remove-orphans() { yaourt -Rs $(pacman -Qqtd) ;} +## pkm-search() { yaourt --noconfirm "$@" ;} +## pkm-search-local() { yaourt -Qs "$@" ;} +## pkm-upgrade() { yaourt -Syu ;} # upgrade everything except aur package +## pkm-upgrade-aur() { yaourt --noconfirm -Sbua ;} # only upgrade aur package +### }}} +### {{{ yum +##elif [ "$PKMGR" = "yum" ]; then +## pkm-cleanall() { sudo yum clean ;} +## pkm-depends() { sudo yum deplist "$@" ;} +## pkm-dependsreverse() { sudo yum resolvedep "$@" ;} +## pkm-info() { for arg in "$@"; do +## rpm -qi $arg 2> /dev/null || yum info $arg; done ;} +## pkm-install() { sudo yum install "$@" ;} +## pkm-list() { for arg in "$@"; do +## rpm -ql $arg 2> /dev/null || repoquery -ql --plugins $arg; done ;} +## pkm-localinstall() { sudo yum localinstall "$@" ;} +## pkm-own() { rpm -qf $(which "$@") ;} +## pkm-pkgsearch() { yum whatprovides "$@" ;} +## pkm-query() { rpm -q "$@" ;} +## pkm-refresh() { sudo yum clean expire-cache && sudo yum check-update ;} +## pkm-remove() { sudo yum remove "$@" ;} +## pkm-remove-orphans() { sudo package-cleanup --leaves ;} +## pkm-search() { yum search "$@" ;} +## pkm-upgrade() { sudo yum update ;} +### }}} +### {{{ zypper +##elif [ "$PKMGR" = "zypper" ]; then +## pkm-cleanall() { sudo zypper clean ;} +## pkm-install() { sudo zypper install "$@" ;} +## pkm-pkgsearch() { zypper what-provides "$@" ;} +## pkm-refresh() { sudo zypper refresh ;} +## pkm-remove() { sudo zypper remove "$@" ;} +## pkm-search() { zypper search "$@" ;} +## pkm-upgrade() { sudo zypper update ;} +##fi +### }}} +## +###}}} +############################################################ +###-------- Clipboard and Upload {{{ +###------------------------------------------------------ +### DEMO: http://www.youtube.com/watch?v=fKP0FLp3uW0 (xclip) +### https://www.youtube.com/watch?v=Ww7Sl4d8F8A (pastebinit) +### DESC: copy/paste for linux machines (Mac style) +## +#alias pbcopy='xclip -selection clipboard' # copy to clipboard, ctrl+c, ctrl+shift+c +#alias pbpaste='xclip -selection clipboard -o' # paste from clipboard, ctrl+v, ctrl+shitt+v +#alias pbselect='xclip -selection primary -o' # paste from highlight, middle click, shift+insert +#alias pbnoformatting='xclip -selection clipboard -o | xclip -selection clipboard' +## +## +### dump text from clipboard to pastebin server and copy link +##alias pbdumpslexy='pbpaste | pastebinit -b "slexy.org" | pbcopy && echo "URL has been copied to clipboard" && pbpaste' +##alias pbdumpsprungeus="pbpaste | curl -F 'sprunge=<-' http://sprunge.us | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +##alias pbdumpixio="pbpaste | curl -F 'f:1=<-' ix.io | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +## +## +##alias pbuploadslexy='pbpaste | pastebinit -b "slexy.org" | pbcopy && echo "URL has been copied to clipboard" && pbpaste' +## +##alias pbuploadsprungeus="cat "$@" | curl -F 'sprunge=<-' http://sprunge.us | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +##alias pbuploadixio="cat "$1" | curl -F 'f:1=<-' ix.io | pbcopy && echo 'URL has been copied to clipboard' && pbpaste" +## +## +## +### }}} +############################################################ +###-------- Screenshot and Upload {{{ +###------------------------------------------------------ +### DEMO: http://www.youtube.com/watch?v=Hh8G1aBp8gc +### DESC: take screenshot fullscreen, single window or draw a box +##export PATH_SCREENSHOT=~/Pictures/screenshots +##pix() { scrot -d 2 "$PATH_SCREENSHOT/fullscr_`date +'%F_%Hh%Ms%S'`.png" ;} +##pix-area() { sleep 2 && scrot -s "$PATH_SCREENSHOT/windowed_`date +'%F_%Hh%Ms%S'`.png" ;} +## +## +### DEMO: http://www.youtube.com/watch?v=7-9uYSGyvU0 +### DESC: upload to imgur.com +### REFF: http://www.commandlinefu.com/commands/view/9341 +##upl-imgur() { +## curl -\# -F image=@"$1" -F "key=1913b4ac473c692372d108209958fd15" \ +## http://api.imgur.com/2/upload.xml | grep -Eo "<original>(.)*</original>" \ +## | grep -Eo "http://i.imgur.com/[^<]*" +##} +## +### }}} +############################################################ +###-------- Fuzzy Finder {{{ +###------------------------------------------------------ +### DEMO: https://www.youtube.com/playlist?list=PLqv94xWU9zZ2fMsMMDF4PjtNHCeBFbggD +### DESC: interactive fuzzy string matching +### URL: https://github.com/junegunn/fzf +## +#fzf-dmenu() { +# # note: xdg-open has a bug with .desktop files, so we cant use that +# selected="$(ls /usr/share/applications | fzf -e -i )" +# nohup `grep '^Exec' "/usr/share/applications/$selected" | tail -1 | sed 's/^Exec=//' | sed 's/%.//'` >/dev/null 2>&1& +# # disown if exit 0 successfully +# if [[ $? = 0 ]] ; then disown; fi +#} +## +#fzf-surfraw() { surfraw "$(cat ~/.config/surfraw/bookmarks | sed '/^$/d' | sort -n | fzf -e -i )" ;} +## +#fzf-locate() { +# xdg-open "$(locate "*" | fzf -e -i )" +# +## # some programs require a longer time to load +# sleep 1.5 +## +## # if cancle or fail then exit +# if [ $? -ne 0 ] +# then +# exit +# fi +#} +## +##fzf-playonlinux() { playonlinux --run '$(ls ~/.PlayOnLinux/shortcuts | fzf -e -i )' ;} +## +### http://www.reddit.com/r/commandline/comments/3abtup/fzfr_fzf_bash_function/ +##fzfr() { fzf -m -x | xargs -d'\n' -r "$@" ; } +## +### edit single line snippet +##cfg-snippetrc() { $EDITOR ~/.snippetrc ;} +##cfg-multisnippetrc() { $EDITOR ~/.multisnippet/"$(ls ~/.multisnippet | fzf -e -i)" ;} +##multisnippet() { $EDITOR ~/.multisnippet/"$1" ;} +##fzf-snippet() { +## selected="$(cat ~/.snippetrc | sed '/^$/d' | sort -n | fzf -e -i )" +## # remove tags, leading and trailing spaces, also no newline +## echo "$selected" | sed -e s/\;\;\.\*\$// | sed 's/^[ \t]*//;s/[ \t]*$//' | tr -d '\n' | xclip -selection clipboard +##} +##fzf-multisnippet() { +## # location of snippets +## dir=~/.multisnippet +## +## # merge filename and tags into single line +## results=$(for FILE in $dir/* +## do +## getname=$(basename $FILE) +## gettags=$(head -n 1 $FILE) +## echo "$getname \t $gettags" +## done) +## +## # copy content into clipboard without tags +## filename=$(echo "$(echo $results | fzf -e -i )" | cut -d' ' -f 1) +## sed 1d $dir/$filename | xclip -selection clipboard +##} +## +###}}} +############################################################ +###-------- Flexget (Torrent RSS) {{{ +###------------------------------------------------------ +### DEMO: http://www.youtube.com/playlist?list=PLqv94xWU9zZ0pVGrgKtMuhFHun8-MahSY +### DESC: auto download torrent similar to how a DVR works +### URL: http://flexget.com/ +## +##alias flexget='$HOME/anaconda2/bin/flexget' +##flexget-list() { flexget series list && flexget movie_list list waiting && flexget movie_list list downloaded ;} +##flexget-check() { flexget check ;} # check if config file has any errors +##flexget-test() { flexget --test execute ;} # dry run +##flexget-execute() { flexget execute ;} +##flexget-cron() { flexget execute --cron ;} # skip writing to logs +##flexget-version() { flexget -V ;} +##flexget-learnall() { flexget execute --learn ;} #bypass dling old torrents +##flexget-add() { flexget movie_list add "$@" ;} +##flexget-del() { flexget movie_list del "$@" ;} +##flexget-forget() { flexget movie_list forget "$@" ;} # allow redownloading on waiting list +## +###}}} +############################################################ +###-------- Convert to Video {{{ +###------------------------------------------------------ +### http://linuxconfig.org/ffmpeg-audio-format-conversions +##convert2video_mp4() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.mp4 ] +## do +## ffmpeg -i "$arg" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${arg%.*}"-movie.mp4 +## done +## done +##} +## +##convert2video_avi() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.mp4" +## echo -e "\nmultiple: $0 file1.mp4 file2.mp4 file3.mp4" +## echo -e "\nwildcard: $0 *.mp4" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.avi ] +## do +## ffmpeg -i "$arg" -codec:v mpeg4 -vtag xvid -qscale:v 3 -codec:a libmp3lame -qscale:a 4 "${arg%.*}"-movie.avi +## done +## done +##} +## +##convert2video_ogv() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.ogv ] +## do +## ffmpeg -i "$arg" -codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 "${arg%.*}"-movie.ogv +## done +## done +##} +## +##convert2video_mpg() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.mpg ] +## do +## ffmpeg -i "$arg" -codec:v mpeg2video -qscale:v 2 -codec:a mp2 -b:a 192k "${arg%.*}"-movie.mpg +## done +## done +##} +## +##convert2video_mkv() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.mkv ] +## do +## ffmpeg -i "$arg" -codec:v libx264 -preset medium -crf 22 -codec:a libvorbis -qscale:a 5 "${arg%.*}"-movie.mkv +## done +## done +##} +## +##convert2video_webm() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}"-movie.webm ] +## do +## ffmpeg -i "$arg" -codec:v libvpx -crf 10 -b:v 1M -codec:a libvorbis "${arg%.*}"-movie.webm +## done +## done +##} +## +### convert video to gif animation +### http://superuser.com/a/730389 +### http://superuser.com/a/841379 +##convert_to_gifv() { +## if [ $# -lt 1 ] +## then +## echo -e "convert video to animated gif" +## echo -e "\nUsage:\n$0 <file> <resolution>" +## echo -e "\nexample:\n$0 file.mkv \n" +## echo -e "$0 file.mkv 320\n" +## echo -e "$0 file.mkv 720\n" +## echo -e "$0 file.mkv 1080\n" +## echo -e "Note: animated gif size are usually x2 or x3 the size of the original video file" +## +## return 1 +## fi +## +## # get video resolution (height) +## eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +## size=${streams_stream_0_height} +## +## ffmpeg -i "$1" -vf scale="${2:-$size}":-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 5 -loop 0 - "${1%.*}"-gifvid"$2".gif +##} +## +### }}} +############################################################ +###-------- Convert to iOS (iPod, Macs, iPhone, Apple TV) {{{ +###------------------------------------------------------ +### https://trac.handbrake.fr/wiki/BuiltInPresets +## +##convert2iOS_ipod() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's low resolution settings for the iPod (5G and up)" +## echo -e "Optimized for great playback on the iPod screen, with smaller file size." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".ipod.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.ipod.mp4" --preset="iPod" +## done +## done +##} +##convert2iOS_universal() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's universally compatible, full resolution settings for all current Apple devices: iPod (6G and up), iPhone, AppleTV, and Macs" +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".universal.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.universal.mp4" --preset="Universal" +## done +## done +##} +## +##convert2iOS_iphone() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's settings for all iPhones and iPod Touches going back to the original iPhone 2G." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".iphone.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.iphone.mp4" --preset="iPhone & iPod touch" +## done +## done +##} +## +##convert2iOS_ipodtouch() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's settings for all iPhones and iPod Touches going back to the original iPhone 2G." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".ipodtouch.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.ipodtouch.mp4" --preset="iPhone & iPod touch" +## done +## done +##} +## +##convert2iOS_ipad() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".ipad.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.ipad.mp4" --preset="iPad" +## done +## done +##} +## +##convert2iOS_appletv() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's settings for the AppleTV and 2009's iPhone and iPod Touch lineup. Provides a good balance between quality and file size, and pushes the devices to their limits. Includes Dolby Digital 5.1 AC3 sound for the AppleTV." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".appletv.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv.mp4" --preset="AppleTV" +## done +## done +##} +## +##convert2iOS_appletv2() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".appletv2.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv2.mp4" --preset="AppleTV 2" +## done +## done +##} +## +##convert2iOS_appletv3() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".appletv3.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.appletv3.mp4" --preset="AppleTV 3" +## done +## done +##} +## +### }}} +############################################################ +###-------- Convert to Devices (Other, Gaming Device) {{{ +###------------------------------------------------------ +### http://develop.participatoryculture.org/index.php/ConversionMatrix +## +##convert2psp() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".psp.mp4 ] +## do +## ffmpeg -i "$arg" -s 320x240 -b:v 512000 -ar 24000 -ab 64000 -f psp -r 29.97 -strict experimental "${arg%.*}".psp.mp4 +## done +## done +##} +## +##convert2windowsphone8() { +##if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +##fi +## +##myArray=( "$@" ) +##for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".windowsphone8.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.windowsphone8.mp4" --preset="Windows Phone 8" +## done +##done +##} +## +### }}} +############################################################ +###-------- Convert to Archive {{{ +###------------------------------------------------------ +## +### to see required install for different formats +### $ patool formats +##convert2archive_7z() { patool repack "$1" "${1%.*}".7z ;} +##convert2archive_ace() { patool repack "$1" "${1%.*}".ace ;} +##convert2archive_jar() { patool repack "$1" "${1%.*}".jar ;} +##convert2archive_rar() { patool repack "$1" "${1%.*}".rar ;} +##convert2archive_tar() { patool repack "$1" "${1%.*}".tar ;} +##convert2archive_xz() { patool repack "$1" "${1%.*}".xz ;} +##convert2archive_zip() { patool repack "$1" "${1%.*}".zip ;} +##convert2archive_targz() { patool repack "$1" "${1%.*}".tar.gz ;} +##convert2archive_tarbz2() { patool repack "$1" "${1%.*}".tar.bz2 ;} +##convert2archive_tarlzma() { patool repack "$1" "${1%.*}".tar.lzma ;} +## +### https://en.wikipedia.org/wiki/Comic_book_archive +##convert2archive_cbz() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.gz" +## echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +## echo -e "\nwildcard: $0 *.gz" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## if [[ ! -f "${arg%.*}".zip && ! -f "${arg%.*}".cbz ]]; then +## patool repack "$arg" "${arg%.*}".zip && mv "${arg%.*}".zip "${arg%.*}".cbz +## else +## if [[ -f "${arg%.*}".zip ]]; then +## mv -v -- "${arg%.*}".zip "${arg%.*}".cbz +## fi +## fi +## done +##} +## +##convert2archive_cb7() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.gz" +## echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +## echo -e "\nwildcard: $0 *.gz" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## if [[ ! -f "${arg%.*}".7z && ! -f "${arg%.*}".cb7 ]]; then +## patool repack "$arg" "${arg%.*}".7z && mv "${arg%.*}".7z "${arg%.*}".cb7 +## else +## if [[ -f "${arg%.*}".7z ]]; then +## mv -v -- "${arg%.*}".7z "${arg%.*}".cb7 +## fi +## fi +## done +##} +##convert2archive_cba() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.gz" +## echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +## echo -e "\nwildcard: $0 *.gz" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## if [[ ! -f "${arg%.*}".ace && ! -f "${arg%.*}".cba ]]; then +## patool repack "$arg" "${arg%.*}".ace && mv "${arg%.*}".ace "${arg%.*}".cba +## else +## if [[ -f "${arg%.*}".ace ]]; then +## mv -v -- "${arg%.*}".ace "${arg%.*}".cba +## fi +## fi +## done +##} +##convert2archive_cbt() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.gz" +## echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +## echo -e "\nwildcard: $0 *.gz" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## if [[ ! -f "${arg%.*}".tar && ! -f "${arg%.*}".cbt ]]; then +## patool repack "$arg" "${arg%.*}".tar && mv "${arg%.*}".tar "${arg%.*}".cbt +## else +## if [[ -f "${arg%.*}".tar ]]; then +## mv -v -- "${arg%.*}".tar "${arg%.*}".cbt +## fi +## fi +## done +##} +##convert2archive_cbr() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.gz" +## echo -e "\nmultiple: $0 file1.gz file2.gz file3.gz" +## echo -e "\nwildcard: $0 *.gz" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## if [[ ! -f "${arg%.*}".rar && ! -f "${arg%.*}".cbr ]]; then +## patool repack "$arg" "${arg%.*}".rar && mv "${arg%.*}".rar "${arg%.*}".cbr +## else +## if [[ -f "${arg%.*}".rar ]]; then +## mv -v -- "${arg%.*}".rar "${arg%.*}".cbr +## fi +## fi +## done +##} +## +### }}} +############################################################ +###-------- VimWiki {{{ +###------------------------------------------------------ +##wikimd() { $EDITOR ~/.vimwiki/wikimd/index.md ;} +### }}} +############################################################ +###-------- Slice Videos {{{ +###------------------------------------------------------ +## +### movie = both audio & video +### audiotrack = audio only +### videotrack = video only +## +### mplayer OSD in milliseconds +##mplayer-milliseconds() { mplayer -osd-fractions 1 -osdlevel 3 "$1" -ss "${2:-00:00:00}" ;} +## +##slice_movie() { +## if [ $# -lt 5 ] +## then +## echo -e "Use ffmpeg to slice movie (video & audio tracks) with beginning and endpoint with accurate milliseconds" +## echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +## echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +## +## return 1 +## fi +## +## # code +## BEGINTIME=${2} +## ENDTIME=${4} +## +## # Convert the times to seconds from the Epoch +## SEC1=`date +%s -d ${BEGINTIME}` +## SEC2=`date +%s -d ${ENDTIME}` +## +## # Use expr to do the math +## DIFFSEC=`expr ${SEC2} - ${SEC1}` +## DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +## +## ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -codec:v copy -codec:a copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +## +##} +## +##slice_videotrack() { +## if [ $# -lt 5 ] +## then +## echo -e "Use ffmpeg to slice videotrack (no audio) with beginning and endpoint with accurate milliseconds" +## echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +## echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +## +## return 1 +## fi +## +## BEGINTIME=${2} +## ENDTIME=${3} +## +## SEC1=`date +%s -d ${BEGINTIME}` +## SEC2=`date +%s -d ${ENDTIME}` +## +## DIFFSEC=`expr ${SEC2} - ${SEC1}` +## DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +## +## ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -an -codec:v copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +## +##} +## +##slice_audiotrack() { +## if [ $# -lt 5 ] +## then +## echo -e "Use ffmpeg to slice audiotrack (no video) with beginning and endpoint with accurate milliseconds" +## echo -e "\nUsage:\n$0 file hh:mm:ss ms hh:mm:ss ms" +## echo -e "\nexample:\n$0 file.mp4 00:01:00 00 00:05:00 00 \n" +## +## return 1 +## fi +## +## BEGINTIME=${2} +## ENDTIME=${3} +## +## SEC1=`date +%s -d ${BEGINTIME}` +## SEC2=`date +%s -d ${ENDTIME}` +## +## DIFFSEC=`expr ${SEC2} - ${SEC1}` +## DURATIONTIME=`date +%H:%M:%S -ud @${DIFFSEC}` +## +## ffmpeg -i "$1" -ss ${BEGINTIME}."$3" -t ${DURATIONTIME}."$5" -vn -codec:a copy "${1%.*}"-"$0"-`date +'%F_%Hh%Ms%S'`."${1##*.}" +##} +## +### }}} +############################################################ +###-------- RipMe CLI (Bulk Image Downloader) {{{ +###------------------------------------------------------ +### image album downloader +### https://github.com/4pr0n/ripme +### CLI options: https://github.com/4pr0n/ripme/wiki/How-To-Run-RipMe +##ripme-cli() { java -jar /usr/share/java/ripme-git-1.2.8.jar -l ~/Downloads -u "$@" ;} +## +### }}} +############################################################ +###-------- Mount Archive (ZIP|RAR|TAR) {{{ +###------------------------------------------------------ +### http://ubuntuforums.org/showthread.php?t=1207096 +##mount-archive() { +## if [ $# -lt 1 ] +## then +## echo -e "mount archive files (zip|rar|tar...etc)" +## echo -e "\nUsage:\n$0 <archive>" +## echo -e "\nexample:\n$0 file.zip" +## return 1 +## fi +## +## # mount the archive +## gvfs-mount "archive://$( ( echo -n 'file://' ; readlink -f "$1" ; ) | perl -MURI::Escape -lne 'print uri_escape($_)')" +## +## # if mount was sucessful then cd into gvfs dir and ls the mountpoint +## if [ $? -eq 0 ]; then +## cd "/run/user/$(id -u)/gvfs" && ls +## else +## return 1 +## fi +## +##} +##unmount-archive() { +## if [ $# -lt 1 ] +## then +## echo -e "unmount archive files (zip|rar|tar)" +## echo -e "\nUsage:\n$0 <mount_point" +## echo -e "\nexample:\n$0 disc_image.iso" +## echo -e "cd /run/user/${UID}/gvfs/ && $0 mount_point" +## return 1 +## fi +## gvfs-mount -u "/run/user/$(id -u)/gvfs/$1" +##} +## +### }}} +############################################################ +###-------- Mount Disc Images (ISO|NRG|BIN|MDF|IMG) {{{ +###------------------------------------------------------ +##mount-discimage() { +## if [ $# -lt 1 ] +## then +## echo -e "mount ISO filesystem images (iso,nrg,bin,mdf,img)" +## echo -e "\nUsage:\n$0 <disc_image>" +## echo -e "\nexample:\n$0 disc_image.iso" +## echo -e "$0 disc_image.iso disc_image2.bin disc_image3.mdf" +## echo -e "$0 *.iso" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## fuseiso -n -p "$arg" "/tmp/$arg" +## done +## +## # if mount was sucessful then cd and ls the mountpoint +## if [ $? -eq 0 ]; then +## cd "/tmp/$1" && ls +## else +## return 1 +## fi +## +##} +## +##unmount-discimage() { +## if [ $# -lt 1 ] +## then +## echo -e "unmount ISO filesystem images (iso,nrg,bin,mdf,img)" +## echo -e "\nUsage:\n$0 <mount_point|disc_image>" +## echo -e "\nexample:\n$0 disc_image.iso" +## echo -e "$0 disc_image.iso disc_image2.bin" +## echo -e "$0 mount_point1 mount_point2" +## echo -e "cd /tmp && $0 mount_point" +## echo -e "cd /tmp && $0 *.iso" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## fusermount -u "$arg" +## done +##} +### }}} +############################################################ +###-------- Image Resizer (32|96|128|480|600|768|720|960|1080) {{{ +###------------------------------------------------------ +### Resizing Pictures to different resolutions +## +##image-resize-32x32() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 32x32 "${arg%.*}"_32x32_resized."${arg##*.}" +## done +##} +##image-resize-96x96() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 96x96 "${arg%.*}"_96x96_resized."${arg##*.}" +## done +##} +##image-resize-128x128() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 128x128 "${arg%.*}"_128x128_resized."${arg##*.}" +## done +##} +##image-resize-640x480() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 640x480 "${arg%.*}"_640x480_resized."${arg##*.}" +## done +##} +## +##image-resize-800x600() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 800x600 "${arg%.*}"_800x600_resized."${arg##*.}" +## done +##} +## +##image-resize-1024x768() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 1024x768 "${arg%.*}"_1024x768_resized."${arg##*.}" +## done +##} +##image-resize-1280x720() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 1280x720 "${arg%.*}"_1280x720_resized."${arg##*.}" +## done +##} +##image-resize-1280x960() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 1280x960 "${arg%.*}"_1280x960_resized."${arg##*.}" +## done +##} +##image-resize-1920x1080() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -resize 1920x1080 "${arg%.*}"_1920x1080_resized."${arg##*.}" +## done +##} +## +### }}} +############################################################ +## +################################ +######### C. STREAMING MEDIA ### +################################ +### Code that is still useful but I no longer use it, still here for references +## +############################################################ +###-------- Peerflix (Popcorntime CLI) {{{ +###------------------------------------------------------ +### DEMO: https://www.youtube.com/watch?v=NG13yOTPgfY +### URL: https://github.com/saironiq/shellscripts +### DESC: popcorntime from terminal +##PFLIX_PORT=55055 +##peerflix-vlc() { vlc http://localhost:$PFLIX_PORT ;} +##peerflix-mplayer() { mplayer http://localhost:$PFLIX_PORT ;} +## +### }}} +############################################################ +###-------- Play Youtube videos in mplayer {{{ +##yt-mp() { export YTFILE=$1 ;mplayer -fs -cookies -cookies-file /tmp/cookies.txt $(`youtube-dl -g --cookies /tmp/cookies.txt $YTFILE` ) ; unset YTFILE;} +### }}} +############################################################ +###-------- Sopcast CLI v2 (Streaming P2P Videos) {{{ +###------------------------------------------------------ +### DEMO: http://www.youtube.com/watch?v=Dm7cFjhzgHo +### DESC: watch movies/tv shows over p2p +## +### REFF: +### http://www.sopcast.com/chlist.xml +### http://sopcast.ucoz.com +### http://streams.magazinmixt.ro +### google keyword: sop://broker.sopcast +## +### package: +### Archlinux: sopcast ( x64 https://www.archlinux.org/packages/multilib/x86_64/sopcast/) +### Archlinux: sopcast ( x32 https://www.archlinux.org/packages/community/i686/sopcast/) +### Ubuntu/Debian: sp-auth (https://launchpad.net/~jason-scheunemann/+archive/ppa) +## +### choose a player (cvlc is default) +### SP_VIDPLAYER=cvlc +##SP_VIDPLAYER=(cvlc --file-caching=10000) +### SP_VIDPLAYER=vlc +### SP_VIDPLAYER=(vlc --control=lirc) +### SP_VIDPLAYER=mplayer +### SP_VIDPLAYER=(mplayer -cache 1000) +## +### wait X seconds to stabilize channel (make it longer if u got slower connection) +##SP_SLEEP=15 +## +### sopcast port and player port +##SP_LOCAL_PORT=55050 +##SP_PLAYER_PORT=55051 +## +### manually kill sopcast (sometimes it doesnt exit properly and still uses bandwidth in the background) +##sppc-kill() { killall sp-sc ;} +## +### kills existing connection, starts a new connection, sleep X sec to stabilize the stream, waits to player to exit and kill itself +##sppc() { +## killall sp-sc &>/dev/null +## (sp-sc "$1" $SP_LOCAL_PORT $SP_PLAYER_PORT &>/dev/null &) +## sleep $SP_SLEEP +## ($SP_VIDPLAYER http://localhost:$SP_PLAYER_PORT) +## wait +## killall sp-sc +##} +## +###### eng = english, ro = romanian, esp = espanol/spanish +### added on February 06, 2014 +##spp-doc-discovery.eng,ro() { sppc "sop://broker.sopcast.com:3912/256241" ;} +##spp-doc-discoveryid.eng,ro() { sppc "sop://broker.sopcast.com:3912/256244" ;} +##spp-doc-discoveryscience.eng,ro() { sppc "sop://broker.sopcast.com:3912/256243" ;} +##spp-doc-discoveryworld.eng,ro() { sppc "sop://broker.sopcast.com:3912/256242" ;} +##spp-doc-history.eng,ro() { sppc "sop://broker.sopcast.com:3912/253032" ;} +##spp-doc-natgeo.eng,ro() { sppc "sop://broker.sopcast.com:3912/148248" ;} +##spp-doc-natgeowild.eng,ro() { sppc "sop://broker.sopcast.com:3912/253037" ;} +##spp-movie-hbo.eng,ro() { sppc "sop://broker.sopcast.com:3912/148985" ;} +##spp-movie-hbocomedy.eng,ro() { sppc "sop://broker.sopcast.com:3912/149255" ;} +##spp-tv-axn.eng,ro() { sppc "sop://broker.sopcast.com:3912/253035" ;} +##spp-tv-comedycentral.eng,ro() { sppc "sop://151.80.76.190:3912/253470" ;} +##spp-tv-foxsports2.eng,ro() { sppc "sop://124.232.150.188:3920/5730" ;} +## +###}}} +############################################################ +###-------- MPS-Youtube Channels {{{ +###------------------------------------------------------ +### tutorial video: https://www.youtube.com/watch?v=VE2iCBkIs8E +##mpsyt-collider-movietalk() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcmbuEa2cRW7Xe4_NrnVrxXn" ;} +##mpsyt-collider-jedicouncil() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnqEWU6U0D8I95SUiqVU3DR" ;} +##mpsyt-collider-heroes() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnaH7ltMEq0h8jBlfU79kwg" ;} +##mpsyt-collider-mailbag() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcnuYS9PZhp3jgOSlb9BzaKs" ;} +##mpsyt-collider-spoilers() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBclxpYg1JdmqUYQnKCCiPcPd" ;} +##mpsyt-collider-arrow() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcleKplDKkFuxLrcL9-7Gw8T" ;} +##mpsyt-collider-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBcmOgOIwVNJV0G6YerPH_Fhp" ;} +##mpsyt-collider-starwarsrebels() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBckZWQgRqTXB2CYRdzNuhBJX" ;} +##mpsyt-collider-walkingdead() { mpsyt pl "https://www.youtube.com/playlist?list=PLayt6616lBckJSHjt2QlwJ91YmNb_oH7k" ;} +##mpsyt-amc-spoilers() { mpsyt pl "https://www.youtube.com/playlist?list=PLYNW0PN4_jrrILuvfws1zYComnO5n4nmJ" ;} +##mpsyt-afterbuzz-arrowaftershow() { mpsyt pl PL6THzna6gLceNeZoXKUOoDeO7cwI57rJn ;} +##mpsyt-afterbuzz-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PL6THzna6gLcdfHMhXnGy-O0kS0q-muucC" ;} +##mpsyt-afterbuzz-gameofthrones() { mpsyt pl PL0404DAD1AD037666 ;} +##mpsyt-thestreamtv-arrow() { mpsyt pl "https://www.youtube.com/playlist?list=PLgh_e6sv2kpr40BXrvZ2qONoSlxFspXGK" ;} +##mpsyt-thestreamtv-flash() { mpsyt pl "https://www.youtube.com/playlist?list=PLgh_e6sv2kprr9KHr94poccrwkAILkCcU" ;} +##mpsyt-btt-beyondthetrailer() { mpsyt user beyondthetrailer ;} +##mpsyt-btt-thinkabouttheink() { mpsyt user thinkabouttheink ;} +##mpsyt-movie-watchmojo() { mpsyt user watchmojo ;} +##mpsyt-movie-robertjones() { mpsyt user owiseone1 ;} +##mpsyt-comic-variantcomics() { mpsyt user VariantComics ;} +##mpsyt-tv-emergencyawesome() { mpsyt user emergencyawesome ;} +##mpsyt-game-angryjoeshow() { mpsyt user AngryJoeShow ;} +##mpsyt-game-cinemassacre() { mpsyt user cinemassacre ;} +##mpsyt-game-craigslistgamefinds() { mpsyt user craigslistgamefinds ;} +##mpsyt-game-happyconsolegamer() { mpsyt user happyconsolegamer ;} +##mpsyt-game-jamesnintendonerd() { mpsyt user jamesnintendonerd ;} +##mpsyt-game-gaminghistorian() { mpsyt user mcfrosticles ;} +##mpsyt-game-metaljesusrocks() { mpsyt user metaljesusrocks ;} +##mpsyt-game-retroliberty() { mpsyt user retroliberty ;} +##mpsyt-game-lazygamereviews() { mpsyt user phreakindee ;} +##mpsyt-greatmilitarybattles() { mpsyt user greatmilitarybattles ;} +##mpsyt-greentvgreentv() { mpsyt user greentvgreentv ;} +##mpsyt-homeorganizing() { mpsyt user homeorganizing ;} +##mpsyt-hak5(){ mpsyt pl "https://www.youtube.com/playlist?list=PLW5y1tjAOzI0w_GbtiEbYS5PGJ2pmxAIX" ;} +##mpsyt-linux-linuxgamecast() { mpsyt user linuxgamecast ;} +##mpsyt-linux-jupiterbroadcasting() { mpsyt user jupiterbroadcasting ;} +##mpsyt-midwaysimplicity() { mpsyt user midwaysimplicity ;} +##mpsyt-midwaysimplicity-mtohami() { mpsyt user mtohami ;} +##mpsyt-minimalism-carriesimple() { mpsyt user UCtauuxrTG1yon8CNsgqhDkg ;} +##mpsyt-minimalism-discernmylife() { mpsyt user UCJPp8gkjxH4T3A8rYO1S52A ;} +##mpsyt-minimalism-poetskinny() { mpsyt user UC4O0Vd3UxFXGX-UQNelwTag ;} +##mpsyt-minimalism-ticoandtina() { mpsyt user ticoandtina ;} +##mpsyt-minimalism-unconventionalliving() { mpsyt user UC7uuFb0QztC-yC2CrcS-lJw ;} +##mpsyt-minimalism-zenminimalism() { mpsyt user UCpD5Hqe60AJ79fupvuA6F1Q ;} +##mpsyt-mma-arielhelwani() { mpsyt user arielhelwani ;} +##mpsyt-mma-fueltv() { mpsyt user fueltv ;} +##mpsyt-mma-gracieacademy() { mpsyt user gracieacademy ;} +##mpsyt-mma-graciebreakdown() { mpsyt user graciebreakdown ;} +##mpsyt-mma-karynbryant() { mpsyt user karynbryant ;} +##mpsyt-mma-mmaheat() { mpsyt user mmaheat ;} +##mpsyt-mma-mmafightingonsbn() { mpsyt user mmafightingonsbn ;} +##mpsyt-mma-thefightnetwork() { mpsyt user thefightnetwork ;} +##mpsyt-mma-themmanuts() { mpsyt user themmanuts ;} +##mpsyt-mma-ufc() { mpsyt user ufc ;} +##mpsyt-mma-uncutsports() { mpsyt user uncutsports ;} +##mpsyt-movie-cinefix() { mpsyt user CineFix ;} +##mpsyt-peakmoment() { mpsyt user peakmoment ;} +##mpsyt-poetskinny() { mpsyt user poetskinny ;} +##mpsyt-poetskinnyUnleashed() { mpsyt user PoetskinnyUnleashed ;} +##mpsyt-tinyhouse-kirstendirksen() { mpsyt user kirstendirksen ;} +##mpsyt-tinyhouse-livingbigtinyhouse() { mpsyt user livingbigtinyhouse ;} +##mpsyt-tinyhouse-relaxshacksDOTcom() { mpsyt user relaxshacksDOTcom ;} +##mpsyt-tinyhouse-tinyhousegj() { mpsyt user tinyhousegj ;} +##mpsyt-tmw-askhodgetwins() { mpsyt user askhodgetwins ;} +##mpsyt-tmw-fastingtwins() { mpsyt user fastingtwins ;} +##mpsyt-tmw-getfit4women() { mpsyt user getfit4women ;} +##mpsyt-tmw-hodgetwins() { mpsyt user hodgetwins ;} +##mpsyt-tmw-hodgetwinsonsports() { mpsyt user hodgetwinsonsports ;} +##mpsyt-tmw-twinmuscleworkout() { mpsyt user twinmuscleworkout ;} +##mpsyt-vanlife-christravels() { mpsyt user tylerdurdeno9 ;} +##mpsyt-vanlife-exploringalternatives() { mpsyt user explorealternatives ;} +##mpsyt-vanlife-noellemarie() { mpsyt user noellemarie42 ;} +##mpsyt-vanlife-happilyhouseless() { mpsyt user TheNomadicvanman ;} +##mpsyt-vanlife-justincredible() { mpsyt user JustinCredibleTV ;} +##mpsyt-vanlife-nomadicfanatic() { mpsyt user nomadicfanatic ;} +##mpsyt-walkingdead() { mpsyt pl "http://www.youtube.com/playlist?list=PLC7EC9FB2E211A261" ;} +##mpsyt-walkingdead-talkingdead() { mpsyt pl "http://www.youtube.com/playlist?list=PLP63B9XPsQt3H_5xGXifFxFJE7-RsKFb6" ;} +##mpsyt-walkingdead-webisodes() { mpsyt pl "http://www.youtube.com/playlist?list=PLC09448134D906619" ;} +##mpsyt-wwefannation() { mpsyt user wwefannation ;} +## +### }}} +############################################################ +###-------- Youtube Viewer Channels {{{ +###------------------------------------------------------ +### tutorial video: http://www.youtube.com/watch?v=FnJ67oAxVQ4 +### watch/login/comment/search/download...etc video on youtube, all from cli +### https://github.com/trizen/youtube-viewer +##yt-listen() { youtube-viewer -n $@ ;} # no video, music/audio only +##yt-music() { youtube-viewer -n --category=Music --top ;} # show top music list +##yts-movie-movieclipstrailer() { youtube-viewer -u UCi8e0iOVk1fEOogdfu4YgfA ;} +##yts-amcmovietalk() { youtube-viewer -p PLBFB97E5B9494EEBD ;} +##yts-amcmovietalk-mailbag() { youtube-viewer -p PLYNW0PN4_jrqlBqzAVRv3rfpo6nhzJnKp ;} +##yts-amctheatres() { youtube-viewer -u amctheatres ;} +##yts-afterbuzz-arrowaftershow() { youtube-viewer -p PL6THzna6gLceNeZoXKUOoDeO7cwI57rJn ;} +##yts-afterbuzz-gameofthrones() { youtube-viewer -p PL0404DAD1AD037666 ;} +##yts-afterbuzz-revolution() { youtube-viewer -p PL6THzna6gLccSY_0Cmoy6DvfH0iC8fyLR ;} +##yts-btt-beyondthetrailer() { youtube-viewer -u beyondthetrailer ;} +##yts-btt-thinkabouttheink() { youtube-viewer -u thinkabouttheink ;} +##yts-comic-watchmojo() { youtube-viewer -u watchmojo ;} +##yts-game-cinemassacre() { youtube-viewer -u cinemassacre ;} +##yts-game-craigslistgamefinds() { youtube-viewer -u craigslistgamefinds ;} +##yts-game-happyconsolegamer() { youtube-viewer -u happyconsolegamer ;} +##yts-game-jamesnintendonerd() { youtube-viewer -u jamesnintendonerd ;} +##yts-game-metaljesusrocks() { youtube-viewer -u metaljesusrocks ;} +##yts-game-mcfrosticles() { youtube-viewer -u mcfrosticles ;} +##yts-game-seejayare() { youtube-viewer -u SeeJayAre ;} +##yts-game-retroliberty() { youtube-viewer -u retroliberty ;} +##yts-greatmilitarybattles() { youtube-viewer -u greatmilitarybattles ;} +##yts-greentvgreentv() { youtube-viewer -u greentvgreentv ;} +##yts-homeorganizing() { youtube-viewer -u homeorganizing ;} +##yts-linuxgamecast() { youtube-viewer -u linuxgamecast ;} +##yts-jupiterbroadcasting() { youtube-viewer -u jupiterbroadcasting ;} +##yts-minimalism-carriesimple() { youtube-viewer -u UCtauuxrTG1yon8CNsgqhDkg ;} +##yts-minimalism-poetskinny() { youtube-viewer -u UC4O0Vd3UxFXGX-UQNelwTag ;} +##yts-minimalism-ticoandtina() { youtube-viewer -u ticoandtina ;} +##yts-minimalism-unconventionalliving() { youtube-viewer -u UC7uuFb0QztC-yC2CrcS-lJw ;} +##yts-minimalism-zenminimalism() { youtube-viewer -u UCpD5Hqe60AJ79fupvuA6F1Q ;} +##yts-midwaysimplicity() { youtube-viewer -u midwaysimplicity ;} +##yts-midwaysimplicity-mtohami() { youtube-viewer -u mtohami ;} +##yts-mma-arielhelwani() { youtube-viewer -u arielhelwani ;} +##yts-mma-fueltv() { youtube-viewer -u fueltv ;} +##yts-mma-gracieacademy() { youtube-viewer -u gracieacademy ;} +##yts-mma-graciebreakdown() { youtube-viewer -u graciebreakdown ;} +##yts-mma-karynbryant() { youtube-viewer -u karynbryant ;} +##yts-mma-mmaheat() { youtube-viewer -u mmaheat ;} +##yts-mma-mmafightingonsbn() { youtube-viewer -u mmafightingonsbn ;} +##yts-mma-thefightnetwork() { youtube-viewer -u thefightnetwork ;} +##yts-mma-themmanuts() { youtube-viewer -u themmanuts ;} +##yts-mma-ufc() { youtube-viewer -u ufc ;} +##yts-mma-uncutsports() { youtube-viewer -u uncutsports ;} +##yts-peakmoment() { youtube-viewer -u peakmoment ;} +##yts-poetskinny() { youtube-viewer -u poetskinny ;} +##yts-poetskinnyunleashed() { youtube-viewer -u PoetskinnyUnleashed ;} +##yts-tinyhouse-kirstendirksen() { youtube-viewer -u kirstendirksen ;} +##yts-tinyhouse-livingbigtinyhouse() { youtube-viewer -u livingbigtinyhouse ;} +##yts-tinyhouse-relaxshacksDOTcom() { youtube-viewer -u relaxshacksDOTcom ;} +##yts-tinyhouse-tinyhousegj() { youtube-viewer -u tinyhousegj ;} +##yts-tmw-askhodgetwins() { youtube-viewer -u askhodgetwins ;} +##yts-tmw-fastingtwins() { youtube-viewer -u fastingtwins ;} +##yts-tmw-getfit4women() { youtube-viewer -u getfit4women ;} +##yts-tmw-hodgetwins() { youtube-viewer -u hodgetwins ;} +##yts-tmw-hodgetwinsonsports() { youtube-viewer -u hodgetwinsonsports ;} +##yts-tmw-twinmuscleworkout() { youtube-viewer -u twinmuscleworkout ;} +##yts-vanlife-christravels() { youtube-viewer -u tylerdurdeno9 ;} +##yts-vanlife-happilyhouseless() { youtube-viewer -u TheNomadicvanman ;} +##yts-vanlife-justincredible() { youtube-viewer -u JustinCredibleTV ;} +##yts-walkingdead() { youtube-viewer -p PLC7EC9FB2E211A261 ;} +##yts-walkingdead-talkingdead() { youtube-viewer -p PLP63B9XPsQt3H_5xGXifFxFJE7-RsKFb6 ;} +##yts-walkingdead-webisodes() { youtube-viewer -p PLC09448134D906619 ;} +##yts-wwefannation() { youtube-viewer -u wwefannation ;} +#### }}} +############################################################ +###-------- NVLC Podcast RSS {{{ +###------------------------------------------------------ +### DEMO: https://www.youtube.com/watch?v=7y_58wpHuFE +### DESC: play local and internet media using ncurses VLC +## +##nvlc-player() { nvlc ${1:-cdda://} ;} # other cdrom; cdda:///dev/cdrom ; cdda:///dev/sr0 ; cdda:///dev/sr1 +##nvlc-podcast() { nvlc -S podcast --podcast-urls "$@" ;} +##podcast-nba-shaq() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=779" ;} +##podcast-mma-mmahour() { nvlc-podcast "http://feeds.feedburner.com/aol/fanhouse/mmahour/audio?format=xml" ;} +##podcast-mma-mmabeat() { nvlc-podcast "http://feeds.podtrac.com/ZGWlPI2WWyVk" ;} +##podcast-mma-mmajunkie() { nvlc-podcast "http://feeds.feedburner.com/MMAjunkieRadio?format=xml" ;} +##podcast-mma-mmaproradio() { nvlc-podcast "http://feeds.feedburner.com/ProMmaRadio" ;} +##podcast-mma-chaelsonnen() { nvlc-podcast "http://feeds.feedburner.com/YoureWelcomeWithChaelSonnen?format=xml" ;} +##podcast-mma-mmareport() { nvlc-podcast "http://staticv3.fightnetwork.com/xml/itunes_mma.rss" ;} +##podcast-mma-joerogan() { nvlc-podcast "http://joeroganexp.joerogan.libsynpro.com/rss" ;} +##podcast-wwf-stonecold() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=436" ;} +##podcast-wwf-chrisjericho() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=593" ;} +##podcast-wwf-liveaudiowrestling() { nvlc-podcast "http://staticv3.fightnetwork.com/xml/itunes_law.rss" ;} +##podcast-wwf-solomonster() { nvlc-podcast "http://solomonster.podbean.com/feed/" ;} +##podcast-wwf-bookert() { nvlc-podcast "https://api.radio.com/v2/podcast/rss/1240?format=MP3_128K" ;} +##podcast-movie-schmoesknow() { nvlc-podcast "http://feeds.feedburner.com/SchmoesKnowMoviesPodcast" ;} +##podcast-movie-dcmovienews() { nvlc-podcast "http://popcorntalknetwork.com/category/shows/dc-movie-news-podcast/feed/" ;} +##podcast-fitness-jillianmichaels() { nvlc-podcast "http://feeds.sideshownetwork.tv/JillianMichaels" ;} +##podcast-talk-jessahinton() { nvlc-podcast "http://www.podcastone.com/podcast?categoryID2=797" ;} +##podcast-talk-emilymorse() { nvlc-podcast "http://feeds.feedburner.com/SexWithEmily" ;} +##podcast-talk-lorasomoza() { nvlc-podcast "https://s3.amazonaws.com/betweenthesheetswithlora/feeds/betweenthesheetsrss.xml" ;} +##podcast-starwars-farfaraway() { nvlc-podcast "http://geeknation.com/podcast-feed/far-far-away/" ;} +##podcast-linux-thirdworldlinux() { nvlc-podcast "http://feeds.feedburner.com/thirdworldlinuxogg" ;} +##podcast-linux-linuxactionshow() { nvlc-podcast "http://feeds.feedburner.com/TheLinuxActionShowOGG" ;} +##podcast-linux-linuxunplugged() { nvlc-podcast "http://feeds.feedburner.com/linuxunogg" ;} +##podcast-linux-techtalktoday() { nvlc-podcast "http://feedpress.me/t3ogg" ;} +##podcast-linux-everydaylinux() { nvlc-podcast "http://elementopie.com/feeds/everydaylinux/feed.xml" ;} +##podcast-linux-goinglinux() { nvlc-podcast "http://goinglinux.com/oggpodcast.xml" ;} +##podcast-linux-hackerpublicradio() { nvlc-podcast "http://hackerpublicradio.org/hpr_total_ogg_rss.php" ;} +##podcast-science-nprradiolab() { nvlc-podcast "http://feeds.wnyc.org/radiolab" ;} +##podcast-science-startalk() { nvlc-podcast "http://feeds.soundcloud.com/users/soundcloud:users:38128127/sounds.rss" ;} +##podcast-science-thisweekinscience() { nvlc-podcast "http://feeds.feedburner.com/twis/science/" ;} +## +###}}} +############################################################ +###-------- Internet Music {{{ +### URL: http://whatnotlinux.blogspot.com/2013/02/somafm-and-digitally-imported-bash.html +##somafm() { +##while true; do local station;echo "Select a station to listen to:";select station in "Doomed" "Groove Salad" "Lush" "Suburbs of Goa" "Secret Agent" "Drone Zone" "Space Station" "cliqhop idm" "Digitalis" "Sonic Universe" "Boot Liquor" "Covers" "Illinois Street Lounge" "indie pop rocks" "PopTron" "Tags Trip" "Beat Bender" "Mission Control";do station=$(echo -n "$station"|tr '[:upper:]' '[:lower:]'|sed 's/ //g');break;done; mplayer -playlist http://somafm.com/startstream=${station}.pls; done; +##} +## +##difm() { +##while true; do local station;echo "Select a station to listen to:";select station in "trance" "vocaltrance" "electro" "chillout" "eurodance" "house" "soulfulhouse" "funkyhouse" "tribalhouse" "harddance" "minimal" "techno" "progressive" "goapsy" "hardstyle" "hardcore" "djmixes" "lounge" "drumandbass" "classictechno" "ambient" "breaks" "futuresynthpop";do station=$(echo -n "$station"|tr '[:upper:]' '[:lower:]'|sed 's/ //g');break;done; mplayer -playlist http://www.di.fm/mp3/${station}.pls; done; +##} +## +###}}} +############################################################ +## +################################ +######### D. OBSOLETE LIST ##### +################################ +### Code that is still useful but I no longer use it, still here for references +## +############################################################ +###-------- Recordmydesktop CLI {{{ +###------------------------------------------------------ +### http://www.pclinuxos.com/forum/index.php/topic,97181.msg822796.html#msg822796 +### Screen capture software +### Ctrl+C Stop +### Ctrl+C x2 Cancle rendering +### BUG: RMD Adjusted recording window, which cuts 10 pixel from the height, thus we have to use offset -x -y +### https://wiki.archlinux.org/index.php/RecordMyDesktop +### http://sourceforge.net/p/recordmydesktop/discussion/590957/thread/cf788e96/ +### https://groups.google.com/forum/#!topic/linux.debian.bugs.dist/reE8_9fqqAw +### native reso 1680x1050 -- > rmd reso 1080x1040, offset y axis -y 6 +### SOUND LAG? lower the freq; 45000, 44100, 22050 +### http://www.kkoncepts.net/blog/fixing-out-sync-audio-and-video-ffmpeg +##RMD_OUTPUT=~/Public/screencast/rr_movie_baking.ogv +## +### Frequency; lower to fix sound lag; 45000, 44100, 22050 +##RMD_FREQ=22050 +## +### Frames per second +##RMD_FPS=30 +## +### Channel (mono = 1 ; dual = 2) +##RMD_CHANNELS=1 +## +### SoundCard (pulse for pulseaudio; install pavucontrol to change pulse settings) +### hw:0,1 for directly communicating with your soundcard +### to get a list of sound device: +### arecord -l +### aplay -l +### cat /proc/asound/pcm +### alsamixer and hit F6 +### FF_SOUNDCARD=pulse +### FF_SOUNDCARD=hw:0,1 +##RMD_SOUNDCARD=hw:3,0 +## +##rmd-all() { recordmydesktop --no-wm-check --no-frame --full-shots --fps $RMD_FPS --channels $RMD_CHANNELS --device $RMD_SOUNDCARD --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +## +### Benq Monitor; 1680x1050 (make sure 2nd monitor is higher res) +### Initial recording window is set to: +### X:0 Y:0 Width:1680 Height:1050 +### Adjusted recording window is set to: +### X:0 Y:0 Width:1680 Height:1056 +##rmd-benq() { recordmydesktop --no-wm-check --no-frame --full-shots --width 1680 --height 1050 --fps $RMD_FPS --channels $RMD_CHANNELS --device $RMD_SOUNDCARD --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +## +## +### ProscanTV; 1920x1080 --> 1920x1072 ; X offset by 1680 +### Initial recording window is set to: +### X:0 Y:0 Width:1920 Height:1080 +### Adjusted recording window is set to: +### X:0 Y:4 Width:1920 Height:1072 +##rmd-proscantv() { recordmydesktop --no-wm-check --no-frame --full-shots -x 1680 --width 1920 --height 1072 --fps $RMD_FPS --channels $RMD_CHAN --device $RMD_DEV --freq $RMD_FREQ --overwrite -o $RMD_OUTPUT ;} +## +### Examples +### select window +### E1: (select window); recordmydesktop --no-frame --full-shots --fps 30 --channels 2 --freq 44100 --windowid $(xwininfo | awk '/Window id:/ {print $4}') --overwrite -o out.ogv ;} +### E2: recordmydesktop --no-wm-check --no-frame --width 1680 --height 1050 --fps 30 --channels 1 --device hw:3,0 --freq 44100 --overwrite -o out.ogv ;} +###E3: (fullscreen); recordmydesktop --no-frame --full-shots --fps 30 --channels 2 --freq 44100 --overwrite -o out.ogv ;} +## +###}}} +############################################################ +###-------- Air Comic Server # {{{ +###------------------------------------------------------ +### tutorial Video: http://www.youtube.com/watch?v=YceW_VcGA4A +### http://gnomewarrior32.blogspot.kr/2013/03/air-comic-server-english.html +##ACSJar=~/.scripts/aircomic/AirComicServer.jar +##ACSConf=~/.scripts/aircomic/AirComicServer.xml +## +##cfg-aircomicserver() { $EDITOR $ACSConf ;} +##aircomicserver() { nohup java -jar $ACSJar -c $ACSConf -n >/dev/null 2>&1& } +##aircomicserver-lite() { nohup java -XX:+UseSerialGC -Xms32M -Xminf=5 -Xmaxf=10 -jar $ACSJar -c $ACSConf -n >/dev/null 2>&1& } +##aircomicserver-gui() { nohup java -XX:+UseSerialGC -Xms32M -Xminf=5 -Xmaxf=10 -jar $ACSJar -c $ACSConf >/dev/null 2>&1& } +##aircomicserver-quit() { kill $(ps -ef | grep '[A]irComicServer.jar' | awk '{print $2}') ;} +### }}} +############################################################ +###-------- Cherry Music Server # {{{ +###------------------------------------------------------ +### tutorial Video: https://www.youtube.com/watch?v=X2goFerMJDY +## +##BIN_CHERRYMUSIC=~/.scripts/cherrymusic/cherrymusic +##cherrymusic() { nohup python $BIN_CHERRYMUSIC --port 8442 >/dev/null 2>&1& } +##cherrymusic-setup() { python $BIN_CHERRYMUSIC --setup --port 8442 ;} +##cherrymusic-quit() { kill $(ps -ef | grep -i '[C]herrymusic' | awk '{print $2}') ;} +##cfg-cherrymusic() { $EDITOR ~/.config/cherrymusic/cherrymusic.conf ;} +## +### }}} +############################################################ +###-------- Sharelin (Gnutella2 P2P Downloader) {{{ +###------------------------------------------------------ +## +### tutorial video: https://www.youtube.com/watch?v=Yi3JKyL-hxk +##sharelin-daemon() { sharelin -d ;} +##sharelin-quit() { killall sharelin ;} +## +### }}} +############################################################ +###-------- Aria2c WebUI {{{ +###------------------------------------------------------ +### downloader for torrents, magnet links, http, ftp, metalinks +### tutorial video: https://www.youtube.com/watch?v=LCr_0zFcbaM +##alias magnet-to-torrent="aria2c -q --bt-metadata-only --bt-save-metadata" +##aria2c-quit() { +## killall aria2c +## kill $(ps -ef | grep '[h]ttp.server' | awk '{print $2}') +## #kill $(ps -ef | grep '[S]impleHTTPServer' | awk '{print $2}') +##} +## +##aria2c-webui() { +## # download location +## DIR_DL=~/Downloads +## +## # run as daemon +## aria2c --enable-rpc --rpc-listen-all -D -d "$DIR_DL" +## +## +## # use python simplehttpserver to host the webui +## # this avoids download the index.html file on each computer +## # https://github.com/ziahamza/webui-aria2 +## +## # path to the webui index.html +## DIR_WEBUI=~/.scripts/webui-aria2/ +## +## # webui-aria2c uses port 6800 so we use 6801 for python_simple_http_server +## PORT=6801 +## cd "$DIR_WEBUI" +## nohup python3 -m http.server "$PORT" >/dev/null 2>&1& +## +## # for older distro +## # nohup python2 -m SimpleHTTPServer "$PORT" >/dev/null 2>&1& +## +## echo "connect via http://localhost:$PORT or http://ip_address_of_server:$PORT" +##} +## +### }}} +############################################################ +###-------- iPod 5G Device {{{ +###------------------------------------------------------ +### convert to ipod 5g compatible video format +### tutorial video: http://www.youtube.com/watch?v=gVVeR9KizBk +## +##ipod5g() { HandBrakeCLI -i "$1" -o "${1%.*}.ipod5g.mp4" --preset="iPod" ;} +##ipod5g-tsp() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.ipod5g.mp4" --preset="iPod" ;} +##ipod5g-rsync() { +### https://gist.github.com/nekobato/5998548 +### including trailing slashes on $SRC +### rsync $SRC/Music/ $DEST/media/Ipod +##rsync -avrm --delete-excluded --modify-window=2 --include '*/' --include '*.mp3' --exclude '*' "$1" "$2" +##} +## +##tsp-handbrake-normal() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.normal.mp4" --preset="Normal" ;} +##tsp-handbrake-high() { tsp HandBrakeCLI -i "$1" -o "${1%.*}.high.mp4" --preset="High Profile" ;} +## +### }}} +############################################################ +###-------- Spell Checking / Translation Related {{{ +###------------------------------------------------------ +### spell checking +### tutorial video: http://www.youtube.com/watch?v=UEwz5eeaZzc +##check-word() { echo "$1" | aspell -a ;} +##check-list() { cat "$1" | aspell list ;} +##check-file() { aspell check "$1" ;} +## +###}}} +############################################################ +###-------- i3 / Openbox {{{ +###------------------------------------------------------ +### wallpaper path +## +## +##setwallpaper() { +##ConnectedMonitor="$(xrandr | awk '/ connected/ {print $1}' | head -n 1)" +##PATH_WALLPAPER=~/Pictures/Wallpapers +## +## # find current running windows manager +## CURRENT_WM="$(wmctrl -m | grep "Name:" | awk '{print $2}')" +## +## # mate +## if [ $CURRENT_WM = Marco ]; then +## gsettings set org.mate.background picture-filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # xfce +## # tutorial video: http://www.youtube.com/watch?v=tL9uVT8D6k4 +## if [[ $DESKTOP_SESSION = Xfwm4 ]] || [[ $DESKTOP_SESSION = "Xfce Session" ]]; then +## xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor"$ConnectedMonitor"/workspace0/last-image -s "$PWD"/"$1" +## fi +## +## # i3 +## if [ $DESKTOP_SESSION = i3 ]; then +## # feh --randomize --bg-fill "$PATH_WALLPAPER"/* +## feh --randomize --bg-fill "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # gnome shell +## # tutorial video: http://www.youtube.com/watch?v=B_VnPXy3VCw +## if [ $DESKTOP_SESSION = GNOME ]; then +## gsettings set org.gnome.desktop.background picture-uri file://"$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## +## # gnome2 +## if [ $DESKTOP_SESSION = GNOME ]; then +## gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # lxde +## # tutorial video: http://www.youtube.com/watch?v=5xzfBiHuknk +## if [ $DESKTOP_SESSION = LXDE ]; then +## pcmanfm -w "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## } +## +## +##chwallpaper() { +##ConnectedMonitor="$(xrandr | awk '/ connected/ {print $1}' | head -n 1)" +##PATH_WALLPAPER=~/Pictures/Wallpapers +## +## # find current running windows manager +## CURRENT_WM="$(wmctrl -m | grep "Name:" | awk '{print $2}')" +## +## # mate +## if [ $CURRENT_WM = Marco ]; then +## gsettings set org.mate.background picture-filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # xfce +## # tutorial video: http://www.youtube.com/watch?v=tL9uVT8D6k4 +## if [[ $DESKTOP_SESSION = Xfwm4 ]] || [[ $DESKTOP_SESSION = "Xfce Session" ]]; then +## xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor"$ConnectedMonitor"/workspace0/last-image -s "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # i3 +## if [ $DESKTOP_SESSION = i3 ]; then +## # feh --randomize --bg-fill "$PATH_WALLPAPER"/* +## feh --randomize --bg-fill "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # gnome shell +## # tutorial video: http://www.youtube.com/watch?v=B_VnPXy3VCw +## if [ $DESKTOP_SESSION = GNOME ]; then +## gsettings set org.gnome.desktop.background picture-uri file://"$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## +## # gnome2 +## if [ $DESKTOP_SESSION = GNOME ]; then +## gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## +## # lxde +## # tutorial video: http://www.youtube.com/watch?v=5xzfBiHuknk +## if [ $DESKTOP_SESSION = LXDE ]; then +## pcmanfm -w "$(find $PATH_WALLPAPER -type f -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | shuf -n1)" +## fi +## } +## +## +###}}} +############################################################ +###-------- Capture RTMP Streams (URL Sniffing) {{{ +###------------------------------------------------------ +### tutorial video: http://www.youtube.com/watch?v=u1dQ81HT4AU +### https://github.com/gotbletu/shownotes/blob/master/rtmpdump_sniff_your_own_tutorial.txt +### http://pclosmag.com/html/Issues/201104/page19.html +##sniff-begin() { sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ;} +##sniff-capture-rtmpsrv() { rtmpsrv ;} +##sniff-capture-rtmpsuck() { rtmpsuck ;} +##sniff-end() { sudo iptables -t nat -D OUTPUT -p tcp --dport 1935 -m owner \! --uid-owner root -j REDIRECT ;} +##tsniff-begin() { sudo tcpdump -ieth0 -nn -A | grep -e"rtmp" -e"connect" -e"play" > /tmp/tcpoutput.txt ;} +##tsniff-less() { less /tmp/tcpoutput.txt ;} +###}}} +############################################################ +## +################################ +######### E. TESTING LIST ###### +################################ +### New code dump, stuff I am creating or copy from others +## +## +############################################################ +###-------- Weechat XDCC {{{ +###------------------------------------------------------ +### http://nibl.co.uk/bots.php?search= +## +##xdcc-nibl() { +## if [ $# -lt 1 ] +## then +## echo -e "Download XDCC files from using weechat from (#nibl @ irc.rizon.net)" +## echo -e "Search using http://nibl.co.uk/bots.php?search=" +## echo -e "\nUsage:\n$0 </msg>" +## echo -e "\nexample:\n$0 '/msg AHQ[Turtle] xdcc send #1721'" +## +## return 1 +## fi +## +## echo "irc.rizon.#nibl *$1" > "$(ls ~/.weechat/weechat_fifo*)" +##} +## +## +## +## +### }}} +############################################################ +##-------- Empty Template {{{ +###------------------------------------------------------ +## +### }}} +############################################################ +### https://www.reddit.com/r/archlinux/comments/42784v/what_are_your_bash_aliasesfunctions_for_ffmpeg/cz88h5f +##ffmpeg-stereo () { +## ffmpeg -i "$1" -i "$2" -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" -c:a flac "$3" +##} +## +### https://www.reddit.com/r/archlinux/comments/423wr9/is_anyone_having_trouble_with_reflector/ +### alias updatemirrors='sudo reflector --verbose --country 'United States' -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist' +## +### Shortcut to generate an updated Arch Linux mirrorlist - requires reflector +##reflector-generate() { +## reflector --country "United States" -l 200 -p http --sort rate --save "$1" +##} +## +##mpd-kill() { kill -9 $(cat ~/.mpd/mpd.pid) ;} +##mpd-restart() { kill -9 $(cat ~/.mpd/mpd.pid) && mpd ;} +## +############################################################ +##-------- Battery Status {{{ +###------------------------------------------------------ +### https://www.reddit.com/r/debian/comments/41sw7g/checking_battery_status_in_terminal/cz68iwq +##alias batterystatus="upower -i /org/freedesktop/UPower/devices/........ | grep time" +##alias batteryshow='cat /sys/class/power_supply/BAT1/status' +## }}} +############################################################ +###-------- Binary / Shell Scripts {{{ +###------------------------------------------------------ +## +## +### lightweight image viewer +### tutorial video: https://www.youtube.com/watch?v=OMOIZlOEfb8 +### https://wiki.archlinux.org/index.php/Feh#File_Browser_Image_Launcher +##feh-browser() { ~/.scripts/feh_browser.sh $@ -B white -g 1280x800 & } +##feh-slideshow() { ~/.scripts/feh_browser.sh $@ -B white -g 1280x800 -D 3 & } +## +### http://code.google.com/p/imgur-cli +### imgur image uploader http://imgur.com +##imgur() { python2 ~/.scripts/imgur-cli/imgur.py $@ ;} +## +### manual tiling (similar compiz grid plugin) +### tutorial video: https://www.youtube.com/watch?v=ZF76DELEpjM +### http://ssokolow.com/quicktile +##quicktile() { python2.7 ~/.config/quicktile/quicktile.py $@ ;} +##quicktile-daemonize() { nohup python2.7 ~/.config/quicktile/quicktile.py -d >/dev/null 2>&1& } +##quicktile-kill () { kill $(ps -ef | grep '[q]uicktile.py' | awk '{print $2}') ;} +## +### http://bash.cyberciti.biz/multimedia/linux-rip-audio-cd/ +##rip-audio-cd() { ~/.scripts/rip_audio_cd.sh ;} +## +### screenshot gallery generator +### tutorial video: https://www.youtube.com/watch?v=_4G4nMUTzX8 +### http://cli-apps.org/content/show.php/Movie+Thumbnailer?content=74676 +##shot() { ~/.scripts/shot.sh -n 30 -r 80% -s $@ ;} +## +### take screenshot fullscreen, window, area selection using import command +### http://en.gentoo-wiki.com/wiki/Screenshot +##sshot() { ~/.scripts/screenshot.sh area ;} +## +### Vim as a pager ( similar to the less command ) +### tutorial video: https://www.youtube.com/watch?v=RefWl8I3nBg +## # issue: gg hotkey does not jump to exact line +## vlessold() { /usr/share/vim/vim73/macros/less.sh "$1" ;} +## +## # http://technotales.wordpress.com/2009/05/24/using-vim-as-a-pager/ +## # vim readonly; to force write use :w! +## vless() { vim -R "$@" ;} +## +### https://bitbucket.org/antocuni/tty2gif +### convert ttyrec to gif files +##tty2gif() { python3 ~/.scripts/tty2gif/tty2gif.py $@ ;} +## +### https://github.com/saironiq/shellscripts/blob/master/wolframalpha_com/wa.sh +### http://www.wolframalpha.com +##wolframalpha() { ~/.scripts/shellscripts/wolframalpha_com/was.sh ;} +## +###}}} +############################################################ +###-------- Copy Move {{{ +###------------------------------------------------------ +##cpr() { +## if [ $# -lt 1 ]; then +## echo -e "rsync copying files using task spooler queue" +## echo -e "\nUsage:\n$0 [-h help] [-t task-spooler] <source> <destination>" +## echo -e "\nInclude Parent Folder:\n$0 <source> <destination>" +## echo -e "\nExclude Parent Folder:\n$0 <source>/ <destination>" +## echo -e "\nRequirements: rsync task-spooler" +## return 1 +## else +## case "$1" in +## -t) tsp rsync -a "$@" ;; +## -h) $0 ;; +## -*) $0 ;; +## *) rsync -av --progress "$@" ;; +## esac +## fi +##} +##mvr() { +## if [ $# -lt 1 ]; then +## echo -e "rsync moving files using task spooler queue" +## echo -e "\nUsage:\n$0 [-h help] [-t task-spooler] <source> <destination>" +## echo -e "\nInclude Parent Folder:\n$0 <source> <destination>" +## echo -e "\nExclude Parent Folder:\n$0 <source>/ <destination>" +## echo -e "\nRequirements: rsync task-spooler" +## return 1 +## else +## case "$1" in +## -t) tsp rsync -a --remove-source-files "$@" ;; +## -h) $0 ;; +## -*) $0 ;; +## *) rsync -av --progress --remove-source-files "$@" ;; +## esac +## fi +##} +### }}} +############################################################ +###-------- VirtualEnv (Python Isolated Environment) {{{ +###------------------------------------------------------ +## +### tutorial video: https://www.youtube.com/watch?v=n8ZzqsFeHOI +##virtwrap-create() { +## mkdir -p ~/.virtualenv +## cd ~/.virtualenv +## virtualenv "$1" -p "${2:-python}" +## source "$1"/bin/activate +##} +##virtwrap-activate() { +## cd ~/.virtualenv +## source "$1"/bin/activate +##} +## +### }}} +############################################################ +###-------- Convert to Image {{{ +###------------------------------------------------------ +### pdftoppm convert pdf to images +### http://askubuntu.com/a/50180 +##convert_pdf_to_png() { +## if [ $# -lt 1 ] +## then +## echo -e "convert PDF document to PNG image (default dpi is 150)" +## echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +## echo -e "\nall pages to images:\n$0 file.pdf" +## echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +## echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +## echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +## +## return 1 +## fi +## pdftoppm -png "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +##} +## +##convert_pdf_to_jpg() { +## if [ $# -lt 1 ] +## then +## echo -e "convert PDF document to JPEG image (default dpi is 150)" +## echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +## echo -e "\nall pages to images:\n$0 file.pdf" +## echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +## echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +## echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +## +## return 1 +## fi +## pdftoppm -jpeg "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +##} +## +##convert_pdf_to_tiff() { +## if [ $# -lt 1 ] +## then +## echo -e "convert PDF document to TIFF image (default dpi is 150)" +## echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +## echo -e "\nall pages to images:\n$0 file.pdf" +## echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +## echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +## echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +## +## return 1 +## fi +## pdftoppm -tiff "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +##} +## +##convert_pdf_to_pgm-grayscale() { +## if [ $# -lt 1 ] +## then +## echo -e "convert PDF document to PGM Grayscale image (default dpi is 150)" +## echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +## echo -e "\nall pages to images:\n$0 file.pdf" +## echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +## echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +## echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +## +## return 1 +## fi +## pdftoppm -gray "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +##} +## +##convert_pdf_to_pbm-monochrome() { +## if [ $# -lt 1 ] +## then +## echo -e "convert PDF document to PBM Monochrome image (default dpi is 150)" +## echo -e "\nUsage:\n$0 <pdf> <dpi> <startingpage> <endingpage>" +## echo -e "\nall pages to images:\n$0 file.pdf" +## echo -e "\nchange dpi (common dpi are 150, 300, 600):\n$0 file.pdf 300" +## echo -e "\nsingle page to image:\n$0 file.pdf 300 5" +## echo -e "\nmultiple pages to images:\n$0 file.pdf 300 5 12" +## +## return 1 +## fi +## pdftoppm -mono "$1" "${1%.*}"-"${2:-150}"DPI -r "${2:-150}" -f "$3" -l "${4:-$3}" +##} +## +### }}} +############################################################ +###-------- Disk Image to ISO {{{ +###------------------------------------------------------ +## +### https://github.com/helmuthdu/dotfiles/blob/master/.bashrc +##convert2discimage_iso () { +## if [[ $# == 0 || $1 == "--help" || $1 == "-h" ]]; then +## echo -e "Converts raw|bin|cue|ccd|img|mdf|nrg disc image to ISO" +## echo -e "Usage: $0 <disc_image>" +## fi +## for i in $*; do +## if [[ ! -f "$i" ]]; then +## echo "'$i' is not a valid file; jumping it" +## else +## echo -n "converting $i..." +## # OUT=`echo $i | cut -d '.' -f 1` +## case $i in +## *.raw ) bchunk "$i" "${i%.*}.iso" ;; #raw=bin +## *.bin|*.cue ) bchunk "${i%.*}.bin" "${i%.*}.cue" "${i%.*}.iso" ;; # bin,cue +## *.ccd|*.img ) ccd2iso "${i%.*}.img" "${i%.*}.iso" ;; # Clone CD images +## *.mdf ) mdf2iso "$i" "${i%.*}.iso" ;; # Alcohol images +## *.nrg ) nrg2iso "$i" "${i%.*}.iso" ;; # Nero images +## * ) echo "$0 don't know de extension of '$i'";; +## esac +## if [[ $? != 0 ]]; then +## echo -e "${R}ERROR!${W}" +## else +## echo -e "${G}done!${W}" +## fi +## fi +## done +##} +## +### https://help.ubuntu.com/community/ManageDiscImages#CloneCD.2FIMG_Images +##convert_to_iso() { +## if [ -z "$1" ]; then +## # display usage if no parameters given +## echo "Usage: extract <path/file_name>.<bin|cue|img|nrg|mdf|mds>" +## else +## if [ -f "$1" ] ; then +## NAME=${1%.*} +## #mkdir $NAME && cd $NAME +## case "$1" in +## *.bin) bchunk "$1" "${1%.*}".cue "${1%.*}".iso ;; # bin/cue +## *.cue) bchunk "${1%.*}".bin "$1" "${1%.*}".iso ;; # bin/cue +## *.img) ccd2iso "$1" "${1%.*}".iso ;; # CloneCD/IMG +## *.nrg) nrg2iso "$1" "${1%.*}".iso ;; +## *.mdf) mdf2iso "$1" "${1%.*}".iso ;; +## *.mds) mdf2iso "${1%.*}".mdf "${1%.*}".iso ;; +## *) echo "$0: '$1' - unsupported format" ;; +## esac +## else +## echo "'$1' - file does not exist" +## fi +##fi +##} +## +### ex() -- Extract compressed files (tarballs, zip, etc) +##ex() { +## for file in "$@"; do +## if [ -f "$file" ]; then +## local file_type=$(file -bizL "$file") +## case "$file_type" in +## *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) +## bsdtar -x -f "$file" ;; +## *application/x-gzip*) +## gunzip -d -f "$file" ;; +## *application/x-bzip*) +## bunzip2 -f "$file" ;; +## *application/x-rar*) +## 7z x "$file" ;; +## *application/octet-stream*) +## local file_type=$(file -bzL "$file") +## case "$file_type" in +## 7-zip*) 7z x "$file" ;; +## *) echo -e "Unknown filetype for '$file'\n$file_type" ;; +## esac ;; +## *) +## echo -e "Unknown filetype for '$file'\n$file_type" ;; +## esac +## else +## echo "'$file' is not a valid file" +## fi +## done +##} +## +## +### }}} +############################################################ +###-------- Convert to Documents {{{ +###------------------------------------------------------ +##convert_images_to_pdf() { +## if [ $# -lt 1 ] +## then +## echo -e "convert images into one single pdf" +## echo -e "\nUsage:\n$0 <images>" +## echo -e "\nexample:\n$0 image1.jpg image2.jpg image3.jpg" +## echo -e "\n$0 *.jpg" +## echo -e "\n$0 *.png" +## +## return 1 +## fi +## convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf +##} +## +## +### Using libreoffice +##convert_to_html() { soffice --headless --convert-to "html:XHTML Writer File:UTF8" "$1" ;} +##convert_to_txt() { soffice --headless --convert-to "txt:Text (encoded):UTF8" "$1" ;} +## +## +### convert_to_pdfo() { +### if [ -z "$1" ]; then +### # display usage if no parameters given +### echo "Usage: extract <path/file_name>.<bin|cue|img|nrg|mdf|mds>" +### else +### if [ ! -f "${1%.*}".pdf ] ; then +### NAME=${1%.*} +### case "$1" in +### *.doc|*.docx) soffice --headless --convert-to pdf "$@" ;; +### *.ppt|*.pptx) soffice --headless --convert-to pdf "$@" ;; +### *.xls|*.xlsx) soffice --headless --convert-to pdf "$@" ;; +### *.txt|*.rtf) soffice --headless --convert-to pdf "$@" ;; +### *.html) soffice --headless --convert-to pdf "$@" ;; +### *.epub) soffice --headless --convert-to pdf "$@" ;; +### *.cbr|*.cbz|*.cb7|*.cbt|*.cba) ebook-convert "$1" .pdf ;; +### *.jpg|*.jpeg) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +### *.pbm|*.pgm) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +### *.png) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +### *) echo "'$1' - unsupported format or file does not exist" ;; +### esac +### else +### echo "'${1%.*}.pdf' - file exist, skipping to prevent overwrite" +### fi +### fi +### } +## +### http://duff-johnson.com/2014/02/17/the-8-most-popular-document-formats-on-the-web/ +##convert_to_pdf() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>.<doc|docx|ppt|pptx|xls|xlsx|txt|rtf|html|epub|cbr|cbz|cbt|cb7|cba|jpg|jpeg|pbm|pgm|png>" +## echo -e "\nsingle: $0 file.doc" +## echo -e "\nmultiple: $0 file1.jpg file2.jpg file3.jpg" +## echo -e "\nwildcard: $0 *.png" +## echo -e "\nRequirement: calibre imagemagick libreoffice" +## return 1 +## else +## if [ ! -f "${1%.*}".pdf ] ; then +## NAME=${1%.*} +## case "$1" in +## *.doc|*.docx) soffice --headless --convert-to pdf "$@" ;; +## *.ppt|*.pptx) soffice --headless --convert-to pdf "$@" ;; +## *.xls|*.xlsx) soffice --headless --convert-to pdf "$@" ;; +## *.txt|*.rtf) soffice --headless --convert-to pdf "$@" ;; +## *.html) soffice --headless --convert-to pdf "$@" ;; +## *.epub) soffice --headless --convert-to pdf "$@" ;; +## *.cbr|*.cbz|*.cb7|*.cbt|*.cba) ebook-convert "$1" .pdf ;; +## *.jpg|*.jpeg|*.pbm|*.pgm|*.png) convert "$@" "${1%.*}"-`date +'%F_%Hh%Ms%S'`.pdf ;; +## *) echo "'$1' - unsupported format or file does not exist" ;; +## esac +## else +## echo "'${1%.*}.pdf' - file exist, skipping to prevent overwrite" +## fi +## fi +##} +## +### }}} +############################################################ +###-------- Convert to Android (Smartphone, Tablet) {{{ +###------------------------------------------------------ +### http://develop.participatoryculture.org/index.php/ConversionMatrix +### https://trac.handbrake.fr/wiki/BuiltInPresets +## +##ANDROID_DEVICE=(-acodec aac -ab 160k -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -f mp4 -threads 0 -strict experimental) +##convert2devices_android_720pnd() { ffmpeg -i "$1" -s 1280x720 ${ANDROID_DEVICE[*]} "${1%.*}".android720p.mp4 ;} +##convert2devices_android_1080p() { ffmpeg -i "$1" -s 1920x1080 ${ANDROID_DEVICE[*]} "${1%.*}".android1080p.mp4 ;} +## +##convert2droid_kindlefire() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".kindlefire.mp4 ] +## do +## ffmpeg -i "$arg" -s 1024x600 -acodec aac -ab 96k -vcodec libx264 -preset slow -f mp4 -crf 22 -strict experimental "${arg%.*}".kindlefire.mp4 +## done +## done +##} +## +##convert2droid_androidtablet() { +## if [ $# -lt 1 ]; then +## echo -e "A preset for Midrange Andriud Tablet devices." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".androidtablet.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.androidtablet.mp4" --preset="Android Tablet" +## done +## done +##} +## +##convert2droid_android() { +## if [ $# -lt 1 ]; then +## echo -e "A preset for Midrange android devices." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".android.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.android.mp4" --preset="Android" +## done +## done +##} +##convert2droid_high() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's general-purpose preset for High Profile H.264 video, with all the bells and whistles." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".high.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.high.mp4" --preset="High Profile" +## done +## done +##} +## +##convert2droid_normal() { +## if [ $# -lt 1 ]; then +## echo -e "HandBrake's normal, default settings." +## echo -e "\nUsage: $0 <file_name>" +## echo -e "\nsingle: $0 file.avi" +## echo -e "\nmultiple: $0 file1.avi file2.avi file3.avi" +## echo -e "\nwildcard: $0 *.avi" +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## while [ ! -f "${arg%.*}".normal.mp4 ] +## do +## HandBrakeCLI -i "$arg" -o "${arg%.*}.normal.mp4" --preset="Normal" +## done +## done +##} +## +### }}} +############################################################ +###-------- Youtube to Audio (Vice Versa) {{{ +###------------------------------------------------------ +## +### -f 171 = webm audio (vorbis) +### -f 140 = m4a (aac) +##yt2ogg() { youtube-dl -c --restrict-filenames --extract-audio --audio-format vorbis -o "%(title)s.%(ext)s" -f 171 "$@" ;} +##yt2wav() { youtube-dl -c --restrict-filenames --extract-audio --audio-format wav -o "%(title)s.%(ext)s" -f 171 "$@" ;} +##yt2mp3() { youtube-dl -c --restrict-filenames --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s" -f 171 "$@" ;} +##yt2webmaudio() { youtube-dl -c --restrict-filenames -o "%(title)s.%(ext)s" -f 171 "$@" ;} +##yt2m4a() { youtube-dl -c --restrict-filenames -o "%(title)s.%(ext)s" -f 140 "$@" ;} +## +### http://www.tecmint.com/ffmpeg-commands-for-video-audio-and-image-conversion-in-linux/ +##yt2banneraudio() { +## if [ $# -lt 2 ] +## then +## echo -e "Use ffmpeg to create a banner audio (audio + image to video)" +## echo -e "\nUsage:\n$0 <image file> <audio file>" +## echo -e "\nExample:\n$0 cover.png file.mp3 \n" +## +## return 1 +## fi +## ffmpeg -loop 1 -i "$1" -i "$2" -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest "${2%.*}".mp4 +##} +## +### }}} +############################################################ +###-------- Demuxing {{{ +###------------------------------------------------------ +## +##demux_videotrack() { ffmpeg -i "$1" -an -codec:v copy "${1%.*}"."$0"."${1##*.}" ;} +##demux_audiotrack() { ffmpeg -i "$1" -vn -codec:a copy "${1%.*}"."$0"."${1##*.}" ;} +## +### demux_subs +### demux_fonts/attachments +## +### }}} +############################################################ +###-------- Extraction / Archive Related {{{ +###------------------------------------------------------ +###Compression (cd into dir, will compress every single folder) +##alias tardir='for i in *; do if [ -d "$i" ]; then tar czf "$i".tar.gz "$i"; fi; done' +##alias rardir='find * -maxdepth 0 -type d -exec rar a {}.rar {} \;' +##alias zipdir='find * -maxdepth 0 -type d -exec zip -r {}.zip {} \;' +## #Warning: removes dir after compression (below) +##alias rarkill='find * -maxdepth 0 -type d -exec rar a -df {}.rar {} \;' +###http://www.commandlinefu.com/commands/view/5198 +### $ ls | while read filename; do tar -czvf "$filename".tar.gz "$filename"; rm "$filename"; done +### compress folder into cbr/cbz +##cbrit() { rar a -r "${1%/}.cbr" "$1" ;} +##cbzit() { zip -r "${1%/}.cbz" "$1" ;} +## +##atool-extract() { atool -x $@ ;} +##atool-tsp() { tsp apack "${1%.*}.zip" "$@" ;} +##atool-add() { apack "${1%.*}.zip" "$@" ;} +##atool-append() { apack "$@" ;} # apack foo.zip my_additional_file.jpg +##atool-list() { atool -l "$1" | less -N ;} +##atool-delete() { +## local zipfilename="$1" +## local deletefile="$(atool -l "$zipfilename" | tail -n +4 | head -n -2 | cut -d':' -f2 | cut -d' ' -f4- | sed 's/\ /\\ /g' | sed -n "${2}p")" +## +## zip -d "$zipfilename" "$deletefile" +## +## +## } +## +##atool-zip-delete() { zip -d "$@" \*.txt ;} +## +## +##imguralbum_cbz() { +## # usage: imguralbum [link] [filename] +## +## local IMGUR_SAVE_PATH=/tmp +## +## # make a temp folder +## # mkdir -p "$IMGUR_SAVE_PATH"/"$2" +## +## #download album +## imguralbum.py "$1" "$IMGUR_SAVE_PATH"/"$2" +## +## #create zip archive using .cbz extension for comics +## zip -r "${2%/}.cbz" "$IMGUR_SAVE_PATH"/"$2" +## +## #delete temp folder +## rm -rf "$IMGUR_SAVE_PATH"/"$2" +##} +## +## +## +## +## +## +## +###}}} +############################################################ +###-------- Music Tagging CLI {{{ +###------------------------------------------------------ +##lltag-artist() { lltag --yes -a "$1" "$2" ;} +##lltag-album() { lltag --yes -A "$1" "$2" ;} +##lltag-date() { lltag --yes -d "$1" "$2" ;} +##lltag-genre() { lltag --yes -g "$1" "$2" ;} +##lltag-comment() { lltag --yes -c "$1" "$2" ;} +##lltag-number() { lltag --yes -n "$1" "$2" ;} +##lltag-show() { lltag -S "$1" ;} +##lltag-rename() { lltag --yes --rename '%n - %t' "$1" ;} +## +## +###Mp3 id3 tagger +## +##tag-encoding-v2.3() { eyeD3 --encoding=utf8 --to-v2.3 "$@" ;} +##tag-encoding-v2.4() { eyeD3 --encoding=utf8 --to-v2.4 "$@" ;} +##tag-show() { eyeD3 "$@" ;} +##tag-artist() { eyeD3 -a "$1" "${@:2}" ;} +##tag-album() { eyeD3 -A "$1" "${@:2}" ;} +##tag-title() { eyeD3 -t "$1" "${@:2}" ;} +##tag-number() { eyeD3 -n "$1" "${@:2}" ;} +##tag-genre() { eyeD3 -G "$1" "${@:2}" ;} +##tag-listgenre() { eyeD3 --plugin=genres ;} +##tag-year() { eyeD3 -Y "$1" "${@:2}" ;} +##tag-comment() { eyeD3 -c "$1" "${@:2}" ;} +##tag-image-remove() { eyeD3 --remove-all-images "$@" ;} # remove embedded album art +##tag-image-add() { eyeD3 --add-image "$1":FRONT_COVER "${@:2}" ;} # add album art +##tag-image-extract() { eyeD3 --write-images=. "$@" ;} # extract album art to current dir +##tag-renamebytags_num_title() { eyeD3 --rename '$track:num - $title' "$@" ;} +##tag-renamebytags_artist_album_num_title() { eyeD3 --rename '$artist - $album - $track:num - $title' "$@" ;} +##tag-renamebytags_artist_title() { eyeD3 --rename '$artist - $title' "$@" ;} +##tag-full() { +## tempfile=/tmp/eyed3tag.txt +## echo "eyeD3 --artist --album --title --track --genre --release-year "$@"" > "$tempfile"; $EDITOR "$tempfile"; source "$tempfile" ;} +## +## +## +### }}} +############################################################ +###-------- Plowshare {{{ +###------------------------------------------------------ +### d/l cyberlocker files like rapidshare, mediafire ..etc +### tutorial video: http://www.youtube.com/watch?v=5AzFdX-EyeI +### http://code.google.com/p/plowshare/ +### PPA: https://launchpad.net/~plowsharepackagers +##plowdown-depositfiles() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/depositfiles.txt ;} +##plowdown-uploaded() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/uploaded.txt ;} +##plowdown-netloadin() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/netloadin.txt ;} +##plowdown-rapidgator() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/rapidgator.txt ;} +##plowdown-rapidshare() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/rapidshare.txt ;} +##plowdown-random() { plowdown -r 3 --max-rate 900K -m ~/.config/plowshare/random.txt ;} +## +###}}} +############################################################ +###-------- Sound Effects {{{ +###------------------------------------------------------ +### http://whatnotlinux.blogspot.com/2011/12/enterprise-ambiance.html +##ambiance-whitenoise() { play -n -c1 synth whitenoise band -n 100 20 band -n 50 20 gain +25 fade h 1 864000 1 ;} +##ambiance-whitenoisewider() { play -n -c2 synth whitenoise band -n 100 24 band -n 300 100 gain +20 ;} +##ambiance-pinknoise() { play -c2 -n synth pinknoise band -n 280 80 band -n 60 25 gain +20 treble +40 500 bass -3 20 flanger 4 2 95 50 .3 sine 50 lin ;} +## +###}}} +############################################################ +### concat = joinning files in a series (like a train) +### convert = change one format to another +### slice = cut files into peices (video, sound, both) +### mux = flatting files such as video and audio track in parallel +### demux = extraction of video or sound tracks +### split = split into peiceses (archive into peices like zip, rar) +### combine = join files together again (usually for splited archive files like 001, zip ..etc) +############################################################ +###-------- Rip Disc to Files {{{ +###------------------------------------------------------ +## +###http://www.reddit.com/r/commandline/comments/19ept5/open_discussion_cool_trick_thursday_what_are_your/c8neljz +##convert_audiocd_to_mp3() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.mp3" ; rm $f ; done ;} +##convert_audiocd_to_flac() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.flac" ; rm $f ; done ;} +##convert_audiocd_to_ogg() { cdparanoia -B ; for f in *.wav ; do sox -S $f "${f%.wav}.ogg" ; rm $f ; done ;} +##convert_audiocd_to_iso() { use dd or ddrescure or readom ;} +## +## +### has CDDB tags? +##ripit-mydefault() { +## ripit -o ~/Downloads -p 0 -c 0 --nointeraction "$@" +## # -p ; playlist (m3u file) 0=disable +## # --nointeraction; use 1st CDDB it finds +## # -c ; 0 - Lame (for mp3), 1 - Oggenc, 2 - Flac, 3 - Faac, +## # 4 - mp4als, 5 - Musepack, 6 - Wavpack, 7 - ffmpeg +## # $@ ; specfic tracks like 1-4,5,8 +##} +## +##rip_to_mp3() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 0 --nointeraction "$@" ;} +##rip_to_ogg() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 1 --nointeraction "$@" ;} +##rip_to_flac() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 2 --nointeraction "$@" ;} +##rip_to_aac() { mkdir -p ~/Downloads/audiocd ; ripit -o ~/Downloads/audiocd -p 0 -c 3 --nointeraction "$@" ;} +## +### }}} +############################################################ +###-------- Hardcoded Subtitles to Videos {{{ +###------------------------------------------------------ +### https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo +### https://www.bunkus.org/videotools/mkvtoolnix/samples/ +### install ttf-ms-fonts +### ffmpeg with --enable-libass +## +##convert_to_ass() { ffmpeg -i "$1" "${1%.*}".ass ;} # srt --> ass +##convert_to_srt() { ffmpeg -i "$1" "${1%.*}".srt ;} # ass --> srt +## +### The first 2 are alpha +### AABBGGRR = &HAABBGGRR +## +### usage: aliasname filename subtitles(srt/ass) +### convert_to_hardsubs() { ffmpeg -y -i "$1" -vf subtitles="$2":force_style="'Fontsize=35;FontName=DejaVu Serif,PrimaryColour=&H5014F0FF'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-hardsubs.mp4 ;} +## +##convert_to_hardsubs() { +##if [ $# -lt 2 ] +##then +## echo -e "Use ffmpeg to hardcode subtitles into one movietrack" +## echo -e "\nUsage:\n$0 [file] [subtitle (srt/ass)] [fontsize (25)] [color code (yellow)] [fontname (dejavu sans mono)]" +## echo -e "\nexample:\n$0 file.mp4 file.srt" +## echo -e "$0 file.mp4 file.srt 30 5000FF14 Arial \n" +## echo -e "kml color code: http://www.zonums.com/gmaps/kml_color/" +## +## +## exit 1 +##fi +## +##ffmpeg -y -i "$1" -vf subtitles="$2":force_style="'Fontsize=${3:-25},PrimaryColour=&H${4:-5014F0FF},FontName=${5:-DejaVu Sans Mono}'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-hardsubs.mp4 +##} +## +### 1min video testing +##convert_to_testing() { ffmpeg -y -i "$1" -ss 00:05:00 -t 00:01:00 -vf subtitles="$2":force_style="'Fontsize=35;FontName=DejaVu Serif,PrimaryColour=&H5014F0FF'" -codec:v libx264 -preset medium -crf 22 -codec:a aac -qscale:a 6 -strict experimental "${1%.*}"-testing.mp4 ;} +## +## +### }}} +############################################################ +###-------- Concatenate Files {{{ +###------------------------------------------------------ +## +### tutorial video: http://www.youtube.com/watch?v=eQoOk5Xbt3M +##concat_pdf() { +## if [ $# -lt 1 ] +## then +## echo -e "concatenate multiple pdf files into one single pdf" +## echo -e "\nUsage:\n$0 <pdfs>" +## echo -e "\nexample:\n$0 file1.pdf file2.pdf file3.pdf" +## echo -e "\n$0 *.pdf" +## +## return 1 +## fi +## gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile="${1%.*}"-`date +'%F_%Hh%Ms%S'`_concat.pdf -f "$@" +##} +## +##concat_png() { +## if [ $# -lt 1 ] +## then +## echo -e "concatenate multiple images into one single png" +## echo -e "\nUsage:\n$0 <images>" +## echo -e "\nexample:\n$0 file1.jpg file2.png file3.jpeg" +## echo -e "\n$0 *.jpg" +## echo -e "\n$0 *.png" +## +## return 1 +## fi +## convert -append "$@" concatoutput.png +##} +##concat_jpg() { +## if [ $# -lt 1 ] +## then +## echo -e "concatenate multiple images into one single jpg" +## echo -e "\nUsage:\n$0 <images>" +## echo -e "\nexample:\n$0 file1.jpg file2.png file3.jpeg" +## echo -e "\n$0 *.jpg" +## echo -e "\n$0 *.png" +## +## return 1 +## fi +## convert -append "$@" concatoutput.jpg +##} +## +## +### tutorial video: https://www.youtube.com/watch?v=EAWGFJoZXAU +##concat_avi() { avimerge -o "${1%.*}".concat.avi -i "$@" ;} +## +### concat_movie() { +### appendfile=$(echo "$@" | sed 's: : --append :g') +### avidemux2_cli --nogui --audio-codec copy --video-codec copy --output-format "${1##*.}" --load $(echo $appendfile) --save "${1%.*}"-appended."${1##*.}" +### } +### +##concat_movie() { +## avidemux2_cli --nogui --force-alt-h264 \ +## --audio-codec copy --video-codec copy --output-format "${1##*.}" \ +## --load "$1" --append "$2" --append "$3" --append "$4" \ +## --append "$5" --append "$6" --append "$7" --append "$8" \ +## --save "${1%.*}"-appended."${1##*.}" +##} +## +##concat_mp4() { +## avidemux2_cli --nogui --force-alt-h264 \ +## --audio-codec copy --video-codec copy --output-format "${1##*.}" \ +## --load "$1" --append "$2" --append "$3" --append "$4" \ +## --append "$5" --append "$6" --append "$7" --append "$8" \ +## --save "${1%.*}"-appended."${1##*.}" +##} +## +## +## +## +### }}} +############################################################ +###-------- Extract Files {{{ +###------------------------------------------------------ +## +### http://www.linuxjournal.com/content/tech-tip-extract-pages-pdf +##extract_pdf() { +## if [ $# -lt 2 ] +## then +## echo -e "convert images into one single pdf" +## echo -e "\nUsage:\n$0 <input file> <startingpage> <endingpage>" +## echo -e "\nexample:\n$0 file.pdf 6" +## echo -e "\n$0 file.pdf 13 26" +## +## return 1 +## fi +## +## gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dFirstPage="${2}" -dLastPage="${3:-$2}" -sOutputFile="${1%.pdf}"_p"${2}"-p"${3:-$2}".pdf "${1}" +##} +## +### }}} +############################################################ +###-------- Muxing {{{ +###------------------------------------------------------ +##mux_to_mkv() { +## # mkvmerge -o newfile.mkv part1.mkv +part2.mkv +## # appendfile=$echo ${@} | sed 's: : +:g') +## appendfile=$(echo "$@" | sed 's: : +:g') +## # appendfile=$(echo "$@" | sed 's/ /\ +/g') +## +## mkvmerge -o "${1%.*}".mux.mkv $(echo $appendfile) +## echo $appendfile +## +## } +## +### }}} +############################################################ +###-------- Web Search Prefix {{{ +###------------------------------------------------------ +### Custom seaches +##gg-comic() { sitelist=$(echo "avaxhome.ws h33t.com mycomicpost.com bdcomics.bdgamers.net" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-cyberlocker() { sitelist=$(echo "hotfile.com rapidshare.com mediafire.com +## uploading.com depositfiles.com zshare.net filepost.com filefactory.com +## 2shared.com zippyshare.com slingfile.com wuala.com filetram.com +## 4shared.com rabidfiles.com" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-dojin() { sitelist=$(echo "hentairules.net fakku.net hentaifromhell.net" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-icons() { sitelist=$(echo "iconseeker.com iconarchive.com iconfinder.com +## deviantart.com veryicon.com iconspedia.com" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-keygen() { sitelist=$(echo "crack.ms/cracks/crack.ms?id" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-music() { url=$(echo "https://encrypted.google.com/search?hl=en&q= +## intitle:index.of+mp3+"$@"+-html+-htm+-txt"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-packages() { sitelist=$(echo "sourceforge.net github.com archlinux.org/packages +## freecode.com/projects gnome.org/extension python.org/pypi gentoo.org/package" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-pastebin() { sitelist=$(echo "pastebin.com paste2.org pastie.org snipt.net +## heypasteit.com/clip pastee.org shell-fu.org commandlinefu.com catonmat.net +## linuxconfig.net github.com bitbucket.org slexy.org stackoverflow.com +## askubuntu.com superuser.com dotfiles.org dotshare.it gitorious.org +## serverfault.com wikia.com stackexchange.com" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-piratebay() { url=$(echo "http://thepiratebay.org/search/$@" \ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-porn() { sitelist=$(echo "youporn.com redtube.com xvideos.com xhamster.com +## tube8.com grayvee.com pornhub.com/view_video.php?viewkey tnaflix.com +## youjizz.com hardsextube.com/video drtuber.com/video pornoxo.com limesteam.com +## motherless.com xnxx.com cliphunter.com extremetube.com/video" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-reader() { url=$(echo "https://encrypted.google.com/reader/view/#search/$@" \ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-search() { url=$(echo "https://encrypted.google.com/search?hl=en&q=$@" \ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-serial() { sitelist=$(echo "freeserials.com/serials/download.php?id= serials.ws/d.php?n" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-torrent() { sitelist=$(echo "eztv.it thepiratebay.se torrentzap.com fenopy.com +## torrindex.com h33t.com tokyotosho.info nyaa.eu" \ +## | sed 's/ /\+OR\+site\:/g') +## url=$(echo "https://encrypted.google.com/search?hl=en&q=$@+site:$sitelist"\ +## | sed 's/ /+/g'); $BROWSER $url; } +##gg-translate() { +## $BROWSER http://translate.google.com/#auto/en/"$*" ;} +## +###}}} +############################################################ +###-------- Search for Files {{{ +###------------------------------------------------------ +### http://askubuntu.com/questions/460535/how-do-i-tell-locate-to-keep-the-index-of-an-external-hdd +##updatedb-external() { +## if [ $# -lt 1 ] +## then +## echo -e "create private updatedb" +## echo -e "\nUsage:\n$0 <filename.db> <path>" +## echo -e "\nexample:\n$0 bingbong /media/bingbong" +## return 1 +## fi +## mkdir -p ~/.updatedb +## updatedb -l 0 -o ~/.updatedb/"$1.db" -U "$2" +##} +## +##@locate-external() { +## if [ $# -lt 1 ] +## then +## echo -e "locate using private updatedb" +## echo -e "\nUsage:\n$0 <keywords>" +## echo -e "\nexample:\n$0 dragon ball z" +## echo -e "\nending extension:\n$0 naruto mkv$" +## echo -e "\nOR operator:\n$0 '(naruto|blech)'" +## echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +## echo -e "\nupdate database:\nsudo updatedb" +## echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +## return 1 +## fi +## keyword=$(echo "$@" | sed -e 's/ /.*/g' -e 's:|:\\|:g' -e 's:(:\\(:g' -e 's:):\\):g') +## locate -d ~/.updatedb/bingbong.db -ir "$keyword" | vim -R - +##} +## +##@find() { +## if [ $# -lt 1 ] +## then +## echo -e "find files recursively in current folder" +## echo -e "\nUsage:\n$0 <keywords>" +## echo -e "\nexample:\n$0 dragon ball z" +## echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +## return 1 +## fi +## keyword=$(echo "*$@*" | sed -e 's/ /*/g') +## find . -type f -iname $keyword | vim -R - +##} +## +### find starting at current dir and go recursively to sub dir +### @search() { +### if [ $# -lt 1 ] +### then +### echo -e "search for files " +### echo -e "\nUsage:\n$0 <keywords>" +### echo -e "\nexample:\n$0 dragon ball z" +### echo -e "\nending extension:\n$0 naruto mkv$" +### echo -e "\nOR operator:\n$0 '(naruto|blech)'" +### echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +### echo -e "\nupdate database:\nsudo updatedb" +### echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +### return 1 +### fi +### keyword=$(echo "*$@*" | sed -e 's/ /*/g') +### find -type f -iname $keyword | vim -R - +### } +## +### find current dir files bigger than X size +### useage: @size <filesize> <keyword> +##@size() { +## keyword=$(echo "*${@:2}*" | sed -e 's/ /*/g') +## find -type f -size +${1}M -iname $keyword | vim -R - ;} +## +### search pdf files in current dir for keywords inside the pdfs +### http://www.commandlinefu.com/commands/view/9189 +##@pdfgrep() { +## if [ $# -lt 1 ] +## then +## echo -e "search all pdf in current directory recursively for keyword inside the pdfs" +## echo -e "\nUsage:\n$0 <keyword>" +## echo -e "\nexample:\n$0 homework" +## echo -e "\n$0 'school transcript'" +## +## return 1 +## fi +## find -iname \*.pdf -print0 | xargs -0 pdfgrep -in "$@" +##} +## +##@locate() { +## if [ $# -lt 1 ] +## then +## echo -e "search for files using updatedb" +## echo -e "\nUsage:\n$0 <keywords>" +## echo -e "\nexample:\n$0 dragon ball z" +## echo -e "\nending extension:\n$0 naruto mkv$" +## echo -e "\nOR operator:\n$0 '(naruto|blech)'" +## echo -e "$0 '(naruto|bleach) (mkv|mp4)'" +## echo -e "\nupdate database:\nsudo updatedb" +## echo -e "\nquit vim:\nShift+ZZ or Shift+ZQ" +## return 1 +## fi +## # escape spaces, pipe and parentheses +## keyword=$(echo "$@" | sed -e 's/ /.*/g' -e 's:|:\\|:g' -e 's:(:\\(:g' -e 's:):\\):g') +## locate -ir "$keyword" | vim -R - +##} +## +###}}} +############################################################ +###-------- IPTV {{{ +###------------------------------------------------------ +### http://database.freetuxtv.net/WebStream/ +### http://www.thestreamdb.com/ +### http://pclosmag.com/html/Issues/201104/page19.html +## +##IPTVPLAYER=mplayer +##itv-tech-twit() { "$IPTVPLAYER" "http://bglive-a.bitgravity.com/twit/live/high" ;} +###}}} +############################################################ +###-------- Internet Videos - Castalba.tv {{{ +###------------------------------------------------------ +### http://castalba.tv/channels +### Animation, Documentary, Entertainment, Sports, News +## +### sample of fail capture links +###rtmpdump -r "rtmp://live.castalba.tv/calive" -a "calive" -f "LNX 11,2,202,243" -W "http://static.castalba.tv/player.swf" -p "http://castalba.tv/channel/6768" -y "174956" -o 174956.flv +## +##CTVPLAYER=mplayer +##ctv-news-aljazeera() { rtmpdump -v -r "rtmp://aljazeeraflashlivefs.fplive.net/aljazeeraflashlive-live" \ +## -a "aljazeeraflashlive-live" \ +## -f "LNX 11,2,202,261" \ +## -W "http://static.castalba.tv/player.swf" \ +## -p "http://castalba.tv/channel/4182" \ +## -y "aljazeera_eng_low" | "$CTVPLAYER" - ;} +## +###}}} +############################################################ +###-------- GNOME 2 configs {{{ +###------------------------------------------------------ +## +### function h-framebuffer() { +### echo -e ' +### mplayer -vo fbdev -fs -vf scale=1280:-3 FileName +### mplayer -vo fbdev -fs -vf scale=-3:1024 FileName +### +### on Arch linux use fbdev2 +### mplayer -vo fbdev2 +### +### vlc video_file +### vlc --vout fb video_file +### '} +### function h-gconf-tweaks() { +### echo -e " +### #Wallpaper Changer +### bash -c 'gconftool-2 -t str -s /desktop/gnome/background/picture_filename "$(find ~/Pictures/Wallpapers -type f | shuf -n1)"' +### +### compiz --replace +### metacity --replace +### emerald --replace +### xkill +### gnome-system-monitor +### gnome-search-tool --hidden +### +### #Dont Dim When Asking for Password +### gconftool-2 --type boolean --set /apps/gksu/disable-grab "True" +### gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":close" +### +### #Button Placement +### gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":minimize,maximize,close" +### gconftool-2 --set "/apps/metacity/general/button_layout" --type string ":close" +### +### #Middle Click Minimize +### gconftool-2 --set "/apps/metacity/general/action_middle_click_titlebar" --type string "minimize" +### +### #Hide Desktop Icon Drives +### gconftool-2 --set "/apps/nautilus/desktop/volumes_visible" --type boolean "false" +### +### #Disable Lock on Idle +### gconftool-2 --set "/apps/gnome-power-manager/lock/gnome_keyring_hibernate" --type boolean "false" +### gconftool-2 --set "/apps/gnome-power-manager/lock/hibernate" --type boolean "false" +### gconftool-2 --set "/apps/gnome-power-manager/lock/suspend" --type boolean "false" +### +### #Enable Metacity Compositing +### gconftool-2 --set '/apps/metacity/general/compositing_manager' --type boolean "true" +### +### #Disable Screensaver +### gconftool-2 --set '/apps/gnome-screensaver/idle_activation_enabled' --type boolean "false" +### gconftool-2 --set '/apps/gnome-screensaver/lock_enabled' --type boolean "false" +### +### #Clock Format +### gconftool-2 --set '/apps/panel/applets/clock_screen0/prefs/format' --type string "custom" +### gconftool-2 --set '/apps/panel/applets/clock_screen0/prefs/custom_format' --type string "%a %b/%d/%y, %I:%M %p" +### +### #AWN Auto Hide +### Set awn setting behavior: Custom | Autohide mode: Fade Out | Icon Effects: Simple +### gconftool-2 --set '/apps/instances/avant-window-navigator/panel-1/panel/intellihide_mode' --type string "0" +### +### #AWN OLD WAY TO AUTO HIDE +### gconftool-2 --set '/apps/awn-applet-taskmanager/intellihide' --type boolean "false" +### +### # Default Open App, LINK CLICK +### gconftool-2 -t string -s /desktop/gnome/url-handlers/magnet/command "/usr/bin/transmission-gtk %s" +### gconftool-2 -s /desktop/gnome/url-handlers/magnet/needs_terminal false -t bool +### gconftool-2 -t bool -s /desktop/gnome/url-handlers/magnet/enabled true +### +### +### "} +## +## +### }}} +############################################################ +###-------- Clean Stuff {{{ +###------------------------------------------------------ +## +### http://www.commandlinefu.com/commands/view/954 +##symlinks() { find . -type l ! -exec test -e {} \; -print ;} +##symlinks-delete() { find . -type l ! -exec test -e {} \; -print0 | xargs -0 rm ;} +##rm-except() { +## find . -type f -not -name '*copy*' | xargs rm +##} +### --// Cleanup //-- +##cleanup () { +## echo -e '\e[1;31m * Cleaning Thumbnails * \e[1;37m' +## rm -rfv ~/.thumbnails/* +## rm -rfv ~/.cache/thumbnails/* +## echo -e '\e[1;31m * Removing cache * \e[1;37m' +## rm -rfv ~/.cache/chromium/* +## rm -rfv ~/.cache/vlc/* +## echo -e '\e[1;31m * Cleaning Trash * \e[1;37m' +## gvfs-trash --empty +##} +##d-swiggle() { find . -type f -name '*~' -exec rm -v {} \; ;} +##d-url() { find . -type f -iname '*.url' -exec rm -v {} \; ;} +##d-thumbsdb() { find . -type f -iname 'Thumbs.db' -exec rm -v {} \; ;} +##swiggle() { find . -name *~ -delete ;} +##cleanlinks() { +## # not in the repos: inspired by http://www.xfree86.org/4.8.0/cleanlinks.1.html +## # delete empty folder +## find . -type d -empty -print0 | xargs -0 rmdir +## # delete broken symlinks +## find . -type l -xtype l | xargs -l rm +##} +### }}} +############################################################ +###-------- Logitech K810 Keyboard {{{ +###------------------------------------------------------ +## +##k810-battery() { echo Logitech K810 Battery: $(cat /sys/class/power_supply/hid-00:1f:20:a8:08:47-battery/capacity) ;} +##k810-resync() { echo -e 'connect 00:1F:20:A8:08:47 \nexit' | bluetoothctl ;} +### }}} +############################################################ +###-------- TMSU (File Tagging CLI) {{{ +###------------------------------------------------------ +## +##tmsu-add() { tmsu tag --tags "$@" ;} +##tmsu-list() { tmsu tags ;} +##tmsu-repair() { tmsu repair "$@" ;} +##tmsu-search() { tmsu files "$@" ;} +##fzf-tmsu() { +## nohup xdg-open "$(tmsu files "$@" | fzf -e -i )" >/dev/null 2>&1& +## +## # if cancle or fail then exit +## if [ $? -ne 0 ] +## then +## exit +## fi +##} +### }}} +############################################################ +###-------- Remote Desktop {{{ +###------------------------------------------------------ +## +##rdp-winxp() { rdesktop -u administrator -g 1920x1020 192.168.1.150:3389 -r sound:local ;} +##rdp-win7() { rdesktop -u bonster -g 1920x1020 192.168.1.152:3389 -r sound:local ;} +## +### }}} +############################################################ +###-------- Surfraw Bookmarks {{{ +###------------------------------------------------------ +### surfraw completions testing +### https://blogs.oracle.com/AlejandroVargas/entry/awk_examples +### removes empty line, removes comments, prints 1st word, sort abc ordered +### +##showbookmarks() { awk 'NF != 0 && !/#/ {print $1}' ~/.config/surfraw/bookmarks | sort -n ;} +## +###}}} +############################################################ +###-------- WINE Gaming {{{ +###------------------------------------------------------ +### get newest version +##syu-winetrickz() { cd ~/Programs/appz/winetricks; rm -f winetricks; \ +## wget http://www.kegel.com/wine/winetricks; chmod +x winetricks ;} +## +### http://wiki.winehq.org/winetricks +### change wineprefix location so winetricks can be use on it +##set-wineprefix() { +## WINEPREFIX="$PWD" +## echo "ex: /home/username/.PlayOnLinux/wineprefix/Office2007" +## echo "wineprefix is now set to: $WINEPREFIX" +##} +## +## +###}}} +############################################################ +###-------- DPKG {{{ +###------------------------------------------------------ +## +##alias pydeb='sudo python setup.py --command-packages=stdeb.command debianize' +##alias dp-installed='dpkg --get-selections | grep $1' +##alias dp-deb-show='dpkg --info' #to examine archive files +##alias dp-deb-content='dpkg --contents' #to list their contents. +##whichpkg() { dpkg -S $( which $1 ); } #lookup for what package uses this command +##cmdpkg() { PACKAGE=$(dpkg -S $(which $1) | cut -d':' -f1); echo "[${PACKAGE}]"; dpkg -s "${PACKAGE}" ;} +## +## +##alias dp-history-install='cat /var/log/dpkg.log | grep "install "' +##alias dp-history-upgrade='cat /var/log/dpkg.log | grep upgrade' +##alias dp-history-remove='cat /var/log/dpkg.log | grep remove' +##dp-history-rollback() { cat /var/log/dpkg.log | grep upgrade | grep "$2" -A10000000 | grep "$3" -B10000000 |awk '{print $4"="$5}';} +## +## +##dp-hold() +##{ +##echo -n "Please enter the package you wish to put a hold on: +##" +##read progID +##echo "$progID hold" |sudo dpkg --set-selections +##} +## +##dp-unhold() +##{ +##echo -n "Please enter the package you wish to remove the hold on: +##" +##read progID +##echo "$progID install" |sudo dpkg --set-selections +##} +## +## +##killkernel() { #Removes all unused kernel, except the newest one +## dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r \ +## | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' \ +## | xargs sudo apt-get -y purge ;} +## +### }}} +############################################################ +###-------- Renaming Case {{{ +###------------------------------------------------------ +## +##alias renameit="ls | rename -v 's/ /_/g'" #change files with spaces to underscore +##single-to-doubles() { +### for bash shell only +## for i in ?.jpg; do mv $i 0$i; done +## for i in ?.png; do mv $i 0$i; done +## for i in ?.PNG; do mv $i 0$i; done +##} +##doubles-to-triples() { +## for i in ??.jpg; do mv $i 0$i; done +## for i in ??.png; do mv $i 0$i; done +##} +##string-lowercase() { echo "$@" | tr '[:upper:]' '[:lower:]' ;} # converts string to lowercase +## +### http://stackoverflow.com/a/3211670 +##nametodigit() { +## local a=1 +## for i in `ls -v | grep -i "$1"`; do +## new=$(printf "%04d.$1" "$a") #04 pad to length of 4 +## mv -- "${i}" "${new}" +## let a=a+1 +## done +##} +## +##paddy() { +##for file in foo[0-9]*.png; do +## # strip the prefix ("foo") off the file name +## postfile=${file#foo} +## # strip the postfix (".png") off the file name +## number=${postfile%.png} +## # subtract 1 from the resulting number +## i=$((number-1)) +## # copy to a new name in a new folder +## cp ${file} ../newframes/$(printf foo%08d.png $i) +##done +##} +## +## +## +### http://www.walkingrandomly.com/?p=2850 +### adds leading zeros to digits in filenames +## +##padme() { +## num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'` +## paddednum=`printf "%03d" $num` +## echo ${1/$num/$paddednum} +##} +## +### http://www.walkingrandomly.com/?p=2850 +##zeropadding() { +## num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'` +## paddednum=`printf "%03d" $num` +## echo ${1/$num/$paddednum} +##} +## +## +## +##zeropad() { for i in "$@" ;do mv $i `padme $i`; done ;} +### http://www.youtube.com/watch?v=rE7ISiKoNec +###lower case bash/zsh +### lowercase() { +### # [bash] https://www.garron.me/en/bits/rename-files-from-uppercase-to-lowercase.html +### for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; done +### # [zsh] https://lorenzod8n.wordpress.com/category/zsh/ +### for file in *; do mv $file ${file:l}; done +### ;} +## +### http://stackoverflow.com/a/11824856 +##lowercase-extension() { find . -name '*.*' -exec sh -c ' a=$(echo "$0" | sed -r "s/([^.]*)\$/\L\1/"); [ "$a" != "$0" ] && mv "$0" "$a" ' {} \; ;} +### }}} +############################################################ +###-------- Keyboard related {{{ +###------------------------------------------------------ +## +##touchpad-toggle() { synclient TouchpadOff=$(synclient -l | grep -c ‘TouchpadOff.*=.*0’) ;} +##lang-toggle() { setxkbmap -option grp:alt_caps_toggle "us,jp" ;} +##vim-toggle() { +### https://xpressrazor.wordpress.com/2014/03/30/script-to-toggle-keys +### toggle caplock and esc key +##if xmodmap -pke | egrep -i "escape" | egrep -i "keycode.*9.*"; then +## echo "Changing from original to mapped" +## xmodmap -e "clear lock" +## xmodmap -e "keycode 66 = Escape" +## xmodmap -e "keycode 9 = Caps_Lock" +## xmodmap -e "add Lock = Caps_Lock" +##else +## echo "Changing back from mapped to original" +## xmodmap -e "clear lock" +## xmodmap -e "keycode 9 = Escape" +## xmodmap -e "keycode 66 = Caps_Lock" +## xmodmap -e "add Lock = Caps_Lock" +##fi +##} +### }}} +############################################################ +###-------- Function Informations {{{ +###------------------------------------------------------ +## +##function osr { shutdown -r now; } +##function osh { shutdown -h now; } +## +##function mfloppy { mount /dev/fd0 /mnt/floppy; } +##function umfloppy { umount /mnt/floppy; } +## +##function mdvd { mount -t iso9660 -o ro /dev/dvd /mnt/dvd; } +##function umdvd { umount /mnt/dvd; } +## +##function mcdrom { mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom; } +##function umcdrom { umount /mnt/cdrom; } +## +## +##function dub { du -sclb $@; } +##function duk { du -sclk $@; } +##function dum { du -sclm $@; } +## +##function dfk { df -PTak $@; } +##function dfm { df -PTam $@; } +##function dfh { df -PTah $@; } +##function dfi { df -PTai $@; } +### }}} +############################################################ +###-------- OCR {{{ +###------------------------------------------------------ +## +##ocr2clipboard() { +## # folder to dump it to +## DIR=/tmp +## +## # scale up the image resolution for better ocr-ing +## convert "$1" -resize 5000 "$DIR"/image_out.png +## # ocr the scaled image +## tesseract "$DIR"/image_out.png "$DIR"/result +## # copy to the clipboard +## xclip -selection clipboard -i "$DIR"/result.txt +##} +### }}} +############################################################ +###-------- Midi Music {{{ +###------------------------------------------------------ +## +##midplayer() { adlmidi "$1" > /dev/null 2>&1 ;} +### https://wiki.archlinux.org/index.php/FluidSynth#Standalone_mode +##midi-fluidsynth() { fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/fluidr3/FluidR3GM.SF2 "$1" ;} +### }}} +############################################################ +###-------- SSD TRIM {{{ +###------------------------------------------------------ +## +### http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html +##trim-check() { +### sudo hdparm -I /dev/sda | grep "TRIM supported" +## sudo hdparm -I /dev/"$1" | awk '/.*TRIM supported.*/{ if ($1 == "*") print "Yes, TRIM is enabled"; else print "No, TRIM is not enabled." ;}' +##} +##trim-fstrim() { sudo fstrim -v "$1" ;} +##gen-cron-trim() { sudo cp ~/.scripts/trim /etc/cron.daily/ ;} +### }}} +############################################################ +###-------- OLD CFG {{{ +###------------------------------------------------------ +## +##cfg-ghsync() { $EDITOR ~/.scripts/ghsync-script.sh ;} +##cfg-dircolors() { $EDITOR ~/.dircolors ;} +##cfg-percol() { $EDITOR ~/.percol.d/rc.py ;} +##cfg-sourcelist() { sudo $EDITOR /etc/apt/sources.list ;} +##cfg-pacman() { sudo $EDITOR /etc/pacman.conf ;} +##cfg-pacman-mirrorlist() { sudo $EDITOR /etc/pacman.d/mirrorlist ;} +### http://blog.dotsmart.net/2011/09/30/change-font-size-in-chrome-devtools/ +##cfg-chromium-devtoolsize() { $EDITOR ~/.config/chromium/Default/User\ StyleSheets/Custom.css ;} +##cfg-chromium-noscript() { $EDITOR ~/.config/chromium/Default/Extensions/odjhifogjcknibkahlpidmdajjpkkcfn/*/CHANGE__PASSWORD__HERE.js ;} +##cfg-timidity() { sudo $EDITOR /etc/timidity++/timidity.cfg ;} +##cfg-xdg-mine() { $EDITOR ~/.local/share/applications/mimeapps.list ;} +##rld-screenlayout() { ~/.screenlayout/reload_monitor.sh ;} +## +### }}} +############################################################ +###-------- IMGUR {{{ +###------------------------------------------------------ +## +### imgur album downloader +### https://github.com/alexgisby/imgur-album-downloader +### tutorial video: https://www.youtube.com/watch?v=dW4co9f5Ors +##imguralbum() { python ~/.scripts/imgur-album-downloader/imguralbum.py "$@" ;} +## +##imguralbum_cbz() { +## # usage: imguralbum [link] [filename] +## +## local IMGUR_SAVE_PATH=/tmp +## +## # make a temp folder +## # mkdir -p "$IMGUR_SAVE_PATH"/"$2" +## +## #download album +## python ~/.scripts/imgur-album-downloader/imguralbum.py "$1" "$IMGUR_SAVE_PATH"/"$2" +## +## #create zip archive using .cbz extension for comics +## zip -r "${2%/}.cbz" "$IMGUR_SAVE_PATH"/"$2" +## +## #delete temp folder +## rm -rf "$IMGUR_SAVE_PATH"/"$2" +##} +### }}} +############################################################ +## +##quicksynergy-daemon() { /usr/bin/synergys --daemon --config ~/.quicksynergy/synergy.conf ;} +### mutt background fix +##COLORFGBG="default;default" +## +##jdownloader() { nohup java -jar ~/.scripts/JDownloader/JDownloader.jar >/dev/null 2>&1& } +## +## +##date-global() { +### use tzselect to find timezone listing +## local SHOWTIMEZONE="$( +## alias date='date +"%a %D %l:%M %p"' +## echo "Current Location:" "$(date)" +## echo "USA LosAngeles:" "$(TZ='America/Los_Angeles' date)" +## echo "Canada Alberta:" "$(TZ='America/Edmonton' date)" +## echo "USA NewYork:" "$(TZ='America/New_York' date)" +## echo "EU London:" "$(TZ='Europe/London' date)" +## echo "Bangladesh Dhaka:" "$(TZ='Asia/Dhaka' date)" +## echo "China Xinjiang:" "$(TZ='Asia/Urumqi' date)" +## echo "Vietnam Saigon:" "$(TZ='Asia/Ho_Chi_Minh' date)" +## echo "China Beijing:" "$(TZ='Asia/Shanghai' date)" +## echo "HK HongKong:" "$(TZ='Asia/Hong_Kong' date)" +## echo "Japan Tokyo:" "$(TZ='Asia/Tokyo' date)" +## )" +## echo "$SHOWTIMEZONE" | column -t +##} +## +### http://stackoverflow.com/a/13541721 +##git-sync-ignorelist() { git rm --cached `git ls-files -i --exclude-from=.gitignore` ;} +## +##mp3cut() { +## +## # example: cut from 5s to 10s; mpgtx -s file.mp3 "[00:05-00:10]" -b file-output +## mpgtx -s "$1" "["$2":"$3"-"$4":"$5"]" -b "${1%.*}"-output."${1##*.}" +## +## } +## +##mpv-saveposition() { mpv --save-position-on-quit "$@" ;} +##mplayer-createplaylist() { ls --ignore="*.m3u" --ignore="*.pos" | grep -i "$1" | sort -u > "$1".m3u ;} +## +## +## +###List files only, the advantage is that it works just like normal 'ls' so you could do 'lf -al | grep blah' etc. +##lf () { +##ls -1p $@ | grep -v '\/$' +##} +## +## +##qrdecode() { zbarimg -S\*.disable -Sqrcode.enable "$1" -q | sed '1s/^[^:]\+://'; } +## +###checkexist() { +###if which lynx >/dev/null; then +### echo exists +###else +### echo does not exist +###fi +###} +## +##pvcp() { +## # a better cp with pv; http://jrenard.info/blog/a-better-cp-with-pv.html +## SOURCE=$1 +## +## if [ -d $2 ] +## then +## DESTINATION=$2/`basename $SOURCE` +## else +## DESTINATION=$2 +## fi +## +## pv ${SOURCE} | > ${DESTINATION} +##} +## +### http://www.falsyana.com/2010/linux/cp-mv-with-a-progress-bar/ +### http://unix.stackexchange.com/questions/2577/move-files-with-progress-bar +### slower then regular mv or cp +###alias cp='rsync --progress -ah' +###alias mv='rsync --progress -ah --remove-sent-files' +## +## +## +### Readablity CLI +### Removes junk from websites and just give you the body of the post +### requires python2-2.7 & python2-chardet +### https://github.com/buriy/python-readability +### ebook-convert from http://manual.calibre-ebook.com/cli/ebook-convert.html +##readability2html() { +## python2.7 -m readability.readability -u "$1" > /tmp/"$2".html +## ebook-convert /tmp/"$2".html ~/Downloads/"$2".epub +##} +## +##compile-cpp() { g++ -Wall -o "${1%.cpp}" "$1" ; } +## +###mplayer playlist +##mplist(){ mplayer -playlist <(tree -aif "$1" | awk '/\.(mp3|wav|ogg|avi|mpg|iso)$/'); } +###mplist(){ mplayer -playlist <(find "$1" -regex '.*\.\(mp3\|wav\|ogg\|avi\|mpg\|iso\)' | sort); } +## +##zombie-process() { ps aux | awk '{ print $8 " " $2 }' | grep -w Z ;} +## +##getexe() { +## TEMPFILE1=$(mktemp) +## TEMPFILE2=$(mktemp) +## INPUTFILE="$1" +## # Extract raw version resource: +## wrestool --extract --raw --type=version "$INPUTFILE" > $TEMPFILE1 +## +## if [ -s $TEMPFILE1 ] +## then +## # Search for a sane version string. +## # This (especially the final regexp) took me really long time to figure out. Am I that lame? +## VERSION=$(< $TEMPFILE1 \ +## tr '\0, ' '\t.\0' \ +## | sed 's/\t\t/_/g' \ +## | tr -c -d '[:print:]' \ +## | sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p' +## ) +## echo $VERSION +## fi +##} +##function etym(){ +## for term in "$@" +## do +## url="etymonline.com/index.php?term=$term" +## curl -s $url | grep "<dd " | +## sed -e 's/<a[^>]*>\([^<]*\)<[^>]*>/:\1:/g' -e 's/<[^>]*>//g' | +## fold -sw `[ $COLUMNS -lt 80 ] && echo $COLUMNS || echo 79 ` +## echo +## done +##} +##DISTRO=$(cat /etc/*-release | head -1 | awk -F\" '{print $(NF-1)}') +##alias m-windowmanager="wmctrl -m | grep "Name:" | awk '{print $2}'" +##mbuffer() { +## mplayer -vo fbdev $1 -fs -subcp ${2:-cp1251} -vf scale=${3:-1280:720} +##} +### MPlayer on /dev/ttyN +## alias fbmplayer='mplayer -vo fbdev2 -vf scale=1280:1024 "$@"' +##lanshare() { +## echo "Test Server: http://127.0.0.1:8000 or http://localhost:8000" +## echo "Server IP (LAN): $(ifconfig eth0 | awk '/inet / {print $2}' | cut -d\: -f2):8000" +## echo "Server IP (WWW): $(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"):8000" +## echo "Hit Ctrl+C to Stop Sharing" +## python2 -m SimpleHTTPServer +##} +## +## +##menu() { +## { tput smcup ; clear; } >/dev/tty +## [ -n "$LINES" ] || local LINES=$(tput lines) +## local val; val=$(slmenu -i -l $((LINES-1)) -p "${1:->}") +## local ret=$? +## tput rmcup > /dev/tty +## printf %s\\n "$val" +## return $ret +##} +##normalizeaudio() { sox --norm "$1" "${1%.*}"."$0"."${1##*.}" ;} +### usage: combine-zip file.zip -- join splited zip (z01, z02 ..etc) +##unsplit_zip() { zip -s- "$1" -O "${1%.*}"-unsplited.zip ;} +## +### usage: combine-001 file.avi.001 -- only requires the 1st file +##unsplit_001() { lxsplit -j "$1" ;} +## +### mkvinfo filename.mkv +### mkvextract tracks filename.mkv 2:subs.ass +### mkvextract tracks filename.mkv 2:subs.srt +### mkvextract attachments filename.mkv 1:BAARS___.TTF +### put the font files into ~/.fonts and then run `fc-cache -vf' +### cd to flac +### flac to wav +### wav to cd +### split bin/cue audio +## +### -b = -b:v +### -av = audio bitrate +## +### gif, vob, m4v, mov, wmv, wma, vob, cd_mp3, cd_flac, avi +### mp4 subtitles burn in hardcoded +## +##web2png() { CutyCapt --url="$1" --out=web2png_output.png ;} +### url shortener +##tiny-isgd() { wget -qO - "http://is.gd/create.php?format=simple&url=$1" ;} +### create qrcode +##qrcode() { link=$(echo "http://qrcode.kaywa.com/img.php?s=8&d=$@" | sed 's/ /+/g'); $BROWSER $link ;} +##quicktime() { mplayer -rtsp-stream-over-tcp -user-agent QuickTime/7.6.4 ;} # -cache 3072 +## +### http://sourceforge.net/projects/lesspipe/ +### tutorial video: https://www.youtube.com/watch?v=ZEHxG1OhIFo +###export LESSOPEN='|/usr/bin/lesspipe.sh %s' +###export LESS='-R' +## +### Source-Highlight +###export LESSOPEN='|/usr/bin/src-hilite-lesspipe.sh %s' +###export LESS='R' +## +### http://zameermanji.com/blog/2012/12/30/using-vim-as-manpager/ +### export MANPAGER="/bin/sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu noma' -\"" +## +## # Goes up many dirs as the number passed as argument, if none goes up by 1 by default +## +## +### REMIND ME, ITS IMPORTANT! +## # usage: remindme <time> <text> +## # e.g.: remindme 10m "omg, the pizza" +## remindme() { sleep $1 && zenity --info --text "$2" & } +## # +## +### https://github.com/Daenyth/dotfiles/blob/master/.bashrc +### Environment variables +### if have less; then +### export PAGER='less' +### unset LESSCHARSET # Fix manpages looking funky +### export LESS='--ignore-case --line-numbers --hilite-unread -z-4 --hilite-search --LONG-PROMPT --no-init --quit-if-one-screen --quit-on-intr --RAW-CONTROL-CHARS' +### # Colorized less, woohoo +### export LESS_TERMCAP_mb=$'\E[01;31m' +### export LESS_TERMCAP_md=$'\E[01;31m' +### export LESS_TERMCAP_me=$'\E[0m' +### export LESS_TERMCAP_se=$'\E[0m' +### export LESS_TERMCAP_so=$'\E[01;44;33m' +### export LESS_TERMCAP_ue=$'\E[0m' +### export LESS_TERMCAP_us=$'\E[01;32m' +### elif have most; then +### export PAGER='most' +### else +### export PAGER='more' +### fi +## +## +## +## +### +### Run a command x times +### http://www.stefanoforenza.com/how-to-repeat-a-shell-command-n-times/ +### +##runx() { +## n=$1 +## shift +## while [ $(( n -= 1 )) -ge 0 ] +## do +## "$@" +## done +##} +## +### ask() -- ask user a yes/no question +##function ask() +##{ +## echo -n "$@" '[y/N] ' ; read ans +## case "$ans" in +## y*|Y*) return 0 ;; +## *) return 1 ;; +## esac +##} +## +## +### vim: set filetype=sh: +##alias cue2flac="find -type f -name '*.cue' -execdir cue2tracks -R -n 19 -o '%N. %p ─ %t' {} \;" +## +## +### Git Shortcuts! ## +### alias g="git" +### alias gr="git rm -rf" +### alias gs="git status" +### alias ga="g add" +### alias gc="git commit -m" +### alias gp="git push origin master" +### alias gl="git pull origin master" +## +### load rbenv if available +##if command -v rbenv >/dev/null; then +## eval "$(rbenv init - --no-rehash)" +##fi +### https://github.com/nicknisi/dotfiles/blob/master/zsh/functions.zsh +### print available colors and their numbers +##function colours() { +## for i in {0..255}; do +## printf "\x1b[38;5;${i}m colour${i}" +## if (( $i % 5 == 0 )); then +## printf "\n" +## else +## printf "\t" +## fi +## done +##} +## +## +### Start an HTTP server from a directory, optionally specifying the port +##function server() { +## local port="${1:-8000}" +## open "http://localhost:${port}/" +## # Set the default Content-Type to `text/plain` instead of `application/octet-stream` +## # And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files) +## python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port" +##} +## +### Escape UTF-8 characters into their 3-byte format +##function escape() { +## printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u) +## echo # newline +##} +## +### Decode \x{ABCD}-style Unicode escape sequences +##function unidecode() { +## perl -e "binmode(STDOUT, ':utf8'); print \"$@\"" +## echo # newline +##} +## +## +## +## +#function xtrct { +# if [ -z "$1" ]; then +# # display usage if no parameters given +# echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>" +# else +# if [ -f "$1" ] ; then +# NAME=${1%.*} +# #mkdir $NAME && cd $NAME +# case "$1" in +# *.tar.bz2) tar xvjf ./"$1" ;; +# *.tar.gz) tar xvzf ./"$1" ;; +# *.tar.xz) tar xvJf ./"$1" ;; +# *.lzma) unlzma ./"$1" ;; +# *.bz2) bunzip2 ./"$1" ;; +# *.rar) unrar x -ad ./"$1" ;; +# *.gz) gunzip ./"$1" ;; +# *.tar) tar xvf ./"$1" ;; +# *.tbz2) tar xvjf ./"$1" ;; +# *.tgz) tar xvzf ./"$1" ;; +# *.zip) unzip ./"$1" ;; +# *.Z) uncompress ./"$1" ;; +# *.7z) 7z x ./"$1" ;; +# *.xz) unxz ./"$1" ;; +# *.exe) cabextract ./"$1" ;; +# *) echo "extract: '$1' - unknown archive method" ;; +# esac +# else +# echo "'$1' - file does not exist" +# fi +#fi +#} +## +## +## +## +##function thumbify() { +## if [ -f $1 ]; then +## cp $1 thumb-$1 +## if [ $2 ]; then +## mogrify -resize $2 thumb-$1 +## else +## mogrify -resize 250x250 thumb-$1 +## fi +## else +## echo "$1: not a regular file" +## fi +##} +## +## +##alias cadate='TZ=America/Los_Angeles date' +##alias frdate='TZ=Europe/Paris date' +##alias ozdate='TZ=Australia/Brisbane date' +## +##alias myip='wget -qO- http://ipecho.net/plain ; echo' +## +### no line wrapping in less +##export LESS=$LESS" -S" +## +##alias vless="/usr/share/vim/vim74/macros/less.sh" +## +## +## +### Shortcut to get the disk size of a directory and contents +##sizeof() { +## du -ch "$1" | grep total +##} +## +### Shortcut to change directory and list contents +##cdls() { +## if [ -d "$1" ]; then +## cd "$1" +## ls +## else +## echo "bash: cl: '$1': Directory not found" +## fi +##} +## +## +## +### super stealth background launch +##function daemon +##{ +## (exec "$@" >&/dev/null &) +##} +## +## # Do something and receive a desktop alert when it completes `sudo apt-get install something | alert` +## alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +## +## +## # Search for files and page it +## function search() { find . -iname "*$@*" | less; } +## # nohup "$@" > /dev/null 2>&1 < /dev/null & +## +## +## # *.dmg) hdiutil mount $1 ;; +## +## +## +## +## +##function lsofg() +##{ +## if [ $# -lt 1 ] || [ $# -gt 1 ]; then +## echo "grep lsof" +## echo "usage: losfg [port/program/whatever]" +## else +## lsof | grep -i $1 | less +## fi +##} +## +## +## +##function psg() +##{ +## if [ $# -lt 1 ] || [ $# -gt 1 ]; then +## echo "grep running processes" +## echo "usage: psg [process]" +## else +## ps aux | grep USER | grep -v grep +## ps aux | grep -i $1 | grep -v grep +## fi +##} +## +######## convert binaries +### copyright 2007 - 2010 Christopher Bratusek +##function bin2all() { +## if [[ $1 ]]; then +## echo "binary $1 = octal $(bin2oct $1)" +## echo "binary $1 = decimal $(bin2dec $1)" +## echo "binary $1 = hexadecimal $(bin2hex $1)" +## echo "binary $1 = base32 $(bin2b32 $1)" +## echo "binary $1 = base64 $(bin2b64 $1)" +## echo "binary $1 = ascii $(bin2asc $1)" +## fi +##} +## +######## DVD to ISO +##function dvd2iso() +##{ +### to get desired device +##df -h -x tmpfs -x usbfs +##echo -n "Using the information in the terminal window, please enter the appropriate DVD drive: +##" +##read DVDDEVICE +##echo -n "Please enter a name for the ISO file you will create: +##" +##read XVIDNAME +##pv "$DVDDEVICE" | dd of="$XVIDNAME".iso +##} +## +######## DVD to VOB +### requires vobcopy: sudo apt-get install vobcopy +### alias dvd2vob='vobcopy -i /dev/dvd -o ~/ -l' +## +##function daemon() +##{ +## (exec "$@" >&/dev/null &) +##} +## +##function geniso() { +## # copyright 2007 - 2010 Christopher Bratusek +## if [[ $CD_WRITER ]]; then +## dd $DD_OPTS if=$CD_WRITER of="$1" +## else dd $DD_OPTS if=/dev/dvdrw of="$1" +## fi +##} +## +##function lowercase() +##{ +## for file ; do +## filename=${file##*/} +## case "$filename" in +## */*) dirname==${file%/*} ;; +## *) dirname=.;; +## esac +## nf=$(echo $filename | tr A-Z a-z) +## newname="${dirname}/${nf}" +## if [ "$nf" != "$filename" ]; then +## mv "$file" "$newname" +## echo "lowercase: $file --> $newname" +## else +## echo "lowercase: $file not changed." +## fi +## done +##} +## +## +# function rip_orig() { +# handbrake -i /dev/dvd -o ${HOME}/${1}.mp4 -L -U -F -f mp4 -e x264 -b 4000 -B 192 +# } +## +#################################################### +### Slow down CPU and IO for process and its # +### offsprings # +#################################################### +## +######## requires gawk: sudo apt-get install gawk +##function slow2() { ionice -c3 renice -n 20 $(pstree `pidof $1` -p -a -u -A|gawk 'BEGIN{FS=","}{print $2}'|cut -f1 -d " ") ; } +## +## +## +## +#################################################### +### ISO-writer # +#################################################### +## +##function writeiso() { +## # copyright 2007 - 2010 Christopher Bratusek +## if [[ $CD_WRITER ]]; then +## cdrecord dev=$CD_WRITER "$1" +## else cdrecord deV=/dev/dvdrw "$1" +## fi +##} +## +##alias cdcopy='pv /dev/cdrom | dd of=cd.iso' # to backup a cd from a cdrom drive to an ISO +## +##alias diskcopy='pv /dev/dvd | dd of=disk.iso' # to backup the disc (cd/dvd/whatever) to an ISO +##alias floppycopy='pv /dev/fd0 | dd of=floppy.image' # to duplicate a floppy disk to hard drive image file +##alias partitioncopy='sudo pv /dev/sda1 | dd of=/dev/sda2 bs=4096 conv=notrunc,noerror' # to duplicate one hard disk partition to another +##alias restore-sda='sudo pv /dev/hda | dd of=/dev/sda bs=64k conv=notrunc,noerror' # to restore from ??? to the existing drive +##alias scsicopy='sudo pv /dev/scd0 | dd of=cd.iso' # if cdrom is scsi} +## +##alias extundelete-d='sudo extundelete "$1" --restore-directory "$2"' # restore all files possible from specified dir. ("$2" = path/to/directory) +##alias extundelete-f='sudo extundelete "$1" --restore-files "$2"' # restore list of files (use to restore single file) ("$2" = filename) +##alias extundelete-r='sudo extundelete "$1" --restore-all' # restore all files possible to undelete +##alias blankcd='cdrecord -v dev=/dev/cdrom blank=fast gracetime=3' +##alias blankdvd='cdrecord -v dev=/dev/dvd blank=fast gracetime=3' +##alias rdp='rdesktop -u "$USER" -g 1600x1200 -D -r disk:home=/home -r clipboard:PRIMARYCLIPBOARD' # quick full screen RDP connection +## +#################################################### +### Remastersys stuff # +#################################################### +## +##alias remastersys-backup-custom='sudo remastersys backup custom.iso' # to make a livecd/dvd backup and call the iso custom.iso +##alias remastersys-backup='sudo remastersys backup' # to make a livecd/dvd backup of your system +##alias remastersys-clean='sudo remastersys clean' # to clean up temporary files of remastersys +##alias remastersys-dist-cdfs='sudo remastersys dist cdfs' # to make a distributable livecd/dvd filesystem only +##alias remastersys-dist-custom='sudo remastersys dist iso custom.iso' # to make a distributable iso named custom.iso but only if cdfs is present +##alias remastersys-dist='sudo remastersys dist' # to make a distributable livecd/dvd of your system +## +## +### Kill all the tabs in Chrome to free up memory +### [C] explained: http://www.commandlinefu.com/commands/view/402/exclude-grep-from-your-grepped-output-of-ps-alias-included-in-description +##alias chromekill="ps ux | grep '[C]hrome Helper --type=renderer' | grep -v extension-process | tr -s ' ' | cut -d ' ' -f2 | xargs kill" +## +## +## +##mountiso() { mkdir -p "$HOME"/.gvfs/"${1%.*}" && gvfs-mount "$1" "$HOME"/.gvfs/"${1%.*}" ;} +## +##resize_images() { +## if [ $# -lt 1 ]; then +## echo -e "Usage: $0 <file_name>" +## echo -e "\nsingle: $0 file.m4a" +## echo -e "\nmultiple: $0 file1.m4a file2.m4a file3.m4a" +## echo -e "\nwildcard: $0 *" +## echo -e "\nwildcard: $0 *.jpg" +## return 1 +## fi +## +## myArray=( "${@:2}" ) +## for arg in "${myArray[@]}"; do +## convert "$arg" -monitor -resize "$1" "${arg%.*}""$1"_resized."${arg##*.}" +## done +##} +### If piping something in, copy it. +### If just doing `clip`, paste it. +##function clip { [ -t 0 ] && pbpaste || pbcopy;} +## +## +##sbg(){ +## ("$@" & disown ) >/dev/null 2>&1 </dev/null +## which "$1" >/dev/null 2>&1 +##} +## +##alias netlisten='lsof -i -P | grep LISTEN' #listening ports +###internetinfo | Usage: ii +##function ii() # get current host related info +##{ +## echo -e "\n${RED}Kernel Information:$NC " ; uname -a +## echo -e "\n${RED}Users logged on:$NC " ; w -h +## echo -e "\n${RED}Current date :$NC " ; date +## echo -e "\n${RED}Machine stats :$NC " ; uptime +## echo -e "\n${RED}Memory stats :$NC " ; free +## echo -e "\n${RED}Disk Usage :$NC " ; df -Th +## echo -e "\n${RED}LAN Information :$NC" ; netinfoLAN +## echo +##} +## +##dd_clone() { +## if [ $# -lt 2 ]; then +## echo -e "image or clone <image|drive|parition> including free space and verify data" +## echo -e "\nUsage: $0 <input> <output>" +## echo -e "\nExample: $0 /dev/sdX /tmp/output.dd" +## echo -e "\n$0 /dev/sdX /dev/sdY" +## echo -e "\n$0 /tmp/output.img /dev/sdX" +## echo -e "\n$0 /dev/cdrom /tmp/output.iso" +## echo -e "\nList All Drives: sudo fdisk -l" +## echo -e "\nRequirement: pv dcfldd" +## return 1 +## fi +## +## sudo sh -c " +## # clone +## pv -tpreb "$1" | dcfldd of="$2" bs=4M +## # verify data match or mismatch +## dcfldd if="$1" vf="$2" +## " +##} +## +##verify_md5sum() { pv "$1" | md5sum ;} +## +##formatme() { +## sudo mkdosfs -n 'Label' -I /dev/sdd +##} +## +## +##### Full Disk Clone and Restore +##clonezilla_disk_cloning() { +## if [ $# -lt 2 ]; then +## echo -e "clone fulldisk device to image" +## echo -e "\nUsage: $0 <output_file> <device>" +## echo -e "\nExample: $0 laptop_fulldisk_2015_12_25_img sdx" +## echo -e "\nNote: device does not have numbers at the end (sdx)" +## return 1 +## fi +## sudo /usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 5000000 -sc -p true savedisk "$1" "$2" +##} +## +##clonezilla_disk_restore() { +## if [ $# -lt 2 ]; then +## echo -e "restore fulldisk image to device" +## echo -e "\nUsage: $0 <input_file> <device>" +## echo -e "\nExample: $0 laptop_fulldisk_2015_12_25_img sdx1" +## echo -e "\nNote: partitions usually have numbers at the end (sdx1)" +## return 1 +## fi +## sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -p true restoredisk "$1" "$2" +##} +## +##### Partition Clone and Restore +##clonezilla_partition_cloning() { +## if [ $# -lt 2 ]; then +## echo -e "clone device partition to image" +## echo -e "\nUsage: $0 <output_file> <device>" +## echo -e "\nExample: $0 desktop_partition_2016_12_25_img sdx" +## echo -e "\nNote: device does not have numbers at the end (sdx)" +## return 1 +## fi +## sudo /usr/sbin/ocs-sr -q2 -c -j2 -z1p -i 5000000 -sc -p true saveparts "$1" "$2" +##} +## +##clonezilla_partition_restore() { +## if [ $# -lt 2 ]; then +## echo -e "restore image to device partition" +## echo -e "\nUsage: $0 <input_file> <device>" +## echo -e "\nExample: $0 desktop_partition_2016_12_25_img sdx1" +## echo -e "\nNote: partitions usually have numbers at the end (sdx1)" +## return 1 +## fi +## sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -c -r -j2 -k -p true restoreparts "$1" "$2" +##} +## +### http://stackoverflow.com/a/22049344 +##killall-zombies() { kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }') ;} +## +##m-disconnect() { nmcli d disconnect enp5s0 ;} +##m-connect() { nmcli d connect enp5s0 ;} +##mount-image() { +## if [ $# -lt 1 ] +## then +## echo -e "concatenate multiple pdf files into one single pdf" +## echo -e "\nUsage:\n$0 <pdfs>" +## echo -e "\nexample:\n$0 file1.pdf file2.pdf file3.pdf" +## echo -e "\n$0 *.pdf" +## +## return 1 +## fi +## +## mkdir "/tmp/$1" +## mount -t vfat -o loop,ro,noexec "$1" "/tmp/$1" +## +##} +## +##cmus-alarm() { +## cmus-remote -p -v 100 +## +##} +## +## +##lynx-mp3() { lynx -dump "$1" | awk '/http/ && /mp3/ {print $2}' ;} +## +##nap() { +## ~/.bin/nap-1.5.4.linux-amd64/nap \ +## -r \ +## -s 108.19.45.179:7777 \ +## -s 108.19.45.179:8888 \ +## -s share-it.loginto.me:3456 \ +## -s 84.24.69.59:6436 \ +## -s spica.sytes.net:8888 \ +## -s 98.202.75.0:8877 \ +## -s 87.13.117.33:8888 \ +## -s 79.103.107.173:5995 \ +## -s 79.31.239.174:8888 \ +## "$@" +##} +## +##cfg-nap() { $EDITOR ~/.nap/napconf ;} +## +## +### http://twit.altervista.org/linux-2/how-to-copy-an-entire-commandline-using-just-the-keyboard.html +### alias copylastcommand='echo "!!" | xclip -selection clipboard' +### alias copylastcommand='history -p !! | xsel -ib' +### alias copylastcommand='$(history -p !-1) | xsel -ib' +## +##color_term() { +## for i in {0..255} ; do +## printf "\x1b[38;5;${i}mcolour${i}\n" +## done +##} +## +##vcsi-width-3x5() { +## vcsi "$2" -t -w "$1" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +##} +##convert2image_jpg() { +## if [ $# -lt 1 ] +## then +## echo -e "convert images to jpg" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.bmp pic3.png" +## echo -e "\n$0 *.png" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## convert -quality 50% "$arg" "${arg%.*}.jpg" +## done +##} +## +##vcsi-1280-3x4() { +## if [ $# -lt 1 ] +## then +## echo -e "vcsi" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +## +## myArray=( "$@" ) +## for arg in "${myArray[@]}"; do +## vcsi "$arg" -t -w 1024 --background-color 000000 --metadata-font-color ffffff -g 2x5 --end-delay-percent 20 +## done +##} +## +##vcsi-auto-3x5() { +## eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +## get_width=${streams_stream_0_width} +## vcsi "$1" -t -w "$get_width" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +##} +## +##vsheet() { +## +## # generate sheet +## eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$1") +## get_width=${streams_stream_0_width} +## vcsi "$1" -t -w "$get_width" --background-color 000000 --metadata-font-color ffffff -g 3x5 --end-delay-percent 20 +## +## concat_jpg mpv-*.jpg *.png +## image-resize-1920x1080 concatoutput.jpg +## mv concatoutput_1920x1080_resized.jpg cover.jpg +## +## +##} +## +## +## +### http://productivefoss.blogspot.com.au/2015/05/exploring-notification-system-ii-how-to.html?m=1 +### http://www.webupd8.org/2016/03/translate-any-text-you-select-on-your.html +## +## +##publicpickups() { +## if [ $# -lt 1 ] +## then +## echo -e "resize pictures to another resolution" +## echo -e "\nUsage:\n$0 <picture>" +## echo -e "\nexample:\n$0 pic1.png pic2.png pic3.png" +## echo -e "\n$0 *.jpg" +## +## return 1 +## fi +# +# myArray=( "$@" ) +# for arg in "${myArray[@]}"; do +# # AUTHORS=$( echo "$arg" | awk -F_ '{print $2 " " $3}' | sed -e "s/\b\(.\)/\u\1/g" ) +# AUTHORS=$( echo "$arg" | awk -F_ '{print $2}' | sed -e "s/\b\(.\)/\u\1/g" ) +# cmx-add $cbsuper -e -a "$AUTHORS" -t "$arg" -T "korn,pov,amatuer" -c "${arg}.jpg" +# done +#} +# +########################################################### +########################################################### +## +## #-------- Functions #-------- }}} +# --- }}} +########################################################################## diff --git a/.bashrc.d/04options.bash.linux b/.bashrc.d/04options.bash.linux new file mode 100755 index 0000000..42ac5d8 --- /dev/null +++ b/.bashrc.d/04options.bash.linux @@ -0,0 +1,52 @@ +############################################################################### +# +# Bind commands - Auto completion --- {{{ +# +############################################################################### + +#bind 'set completion-ignore-case on' +#bind 'set show-all-if-ambiguous on' + +############################################################################### +# +# Bind commands - Auto completion --- }}} +# +############################################################################### +############################################################################### +# +# History control --- {{{ +# +############################################################################### + +# append to the history file, don't overwrite it + +#shopt -s histappend + +############################################################################### +# +# History control --- }}} +# +############################################################################### +############################################################################### +# +# STARTUP MESSAGES --- {{{ +# +############################################################################### + +#prompt +clear +echo "Welcome to ${HOSTNAME}" +#neofetch +ip_show +echo +startup_diskUsage + +echo +w +prompt_bash + +############################################################################### +# +# STARTUP MESSAGES --- }}} +# +############################################################################### diff --git a/.bashrc.d/04options.bash.osx b/.bashrc.d/04options.bash.osx new file mode 100755 index 0000000..bcb58fc --- /dev/null +++ b/.bashrc.d/04options.bash.osx @@ -0,0 +1,57 @@ +############################################################################### +# +# Bind commands - Auto completion --- {{{ +# +############################################################################### + +bind 'set completion-ignore-case on' +bind 'set show-all-if-ambiguous on' + +############################################################################### +# +# Bind commands - Auto completion --- }}} +# +############################################################################### +############################################################################### +# +# History control --- {{{ +# +############################################################################### + +# append to the history file, don't overwrite it + +shopt -s histappend + +############################################################################### +# +# History control --- }}} +# +############################################################################### +############################################################################### +# +# STARTUP MESSAGES --- {{{ +# +############################################################################### + +prompt +clear +echo "Welcome to "`scutil --get ComputerName`"/"`ipconfig getifaddr en0` "["`sw_vers -productName`"@"`sw_vers -productVersion`"]" +echo +echo -e "Ethernet:\t `ipconfig getifaddr en0 `" +echo -e "WiFi:\t\t `ipconfig getifaddr en1 `" +echo -e "External:\t `wget -qO - http://icanhazip.com`" +echo + +### Startup messages +df -hl | grep 'disk0s2' | awk '{print "MacOSX-HD :" $4"/"$2" free ("$5" used)"}' +df -hl | grep 'disk0s4' | awk '{print "MacOSX-Data :"$4"/"$2" free ("$5" used)"}' +df -hl | grep 'disk0s12' | awk '{print "MacOSX-Data2 :"$4"/"$2" free ("$5" used)"}' +df -hl | grep 'disk0s11' | awk '{print "MacOSX-Data3 :"$4"/"$2" free ("$5" used)"}' +echo +w + +############################################################################### +# +# STARTUP MESSAGES --- }}} +# +############################################################################### diff --git a/.cheat/adb b/.cheat/adb new file mode 100755 index 0000000..e75da67 --- /dev/null +++ b/.cheat/adb @@ -0,0 +1,19 @@ +# show a list of devices +adb devices + +#display realtime log of your device +adb logcat -v long > logcat.txt + +#install app +adb install /path/to/apk/file + + +# get directory listing +adb shell 'ls /sdcard/directory' + +# pulling +adb pull /path/to/be/pulled/from /path/to/be/pulled/to + + +# pushing +adb push /path/to/be/pushed/from /path/to/be/pushed/to diff --git a/.cheat/cheat/.nmcli.swp b/.cheat/cheat/.nmcli.swp Binary files differnew file mode 100644 index 0000000..6365447 --- /dev/null +++ b/.cheat/cheat/.nmcli.swp diff --git a/.cheat/cheat/conda b/.cheat/cheat/conda new file mode 100644 index 0000000..e0df93f --- /dev/null +++ b/.cheat/cheat/conda @@ -0,0 +1,84 @@ +# Managing Conda/Anaconda +# ======================= +conda info verify conda is installed, check version # + +conda update conda Update conda package and environment manager + +conda update anaconda Update anaconda meta package + +# Managing Environments +# ===================== +conda info --envsi Get a list of environments, active + or environment shown with * +conda info -e + +conda create --name snowflakes biopython Create an environment and install + or program(s) +conda create -n snowflakes biopython + +source activate snowflakes Activate the new enviroment to use it + +conda create -n bunnies python=3.4 astroid Create new environment and specify python version + +conda create -n flowers --clone snowflakes make exact copy of environment + +conda remove -n flowers --all delete an environment + +conda env export > puppies.yml save current environment to a file + +conda env create -f puppies.yml load environment from file + +# Managing Python +# =============== +conda search --full-name python Check versions of python available to install + or +conda search -f python + +conda create -n snakes python=3.4 Install different version of Python in new environment + +# Managing Conda .condarc configuration +# ===================================== +conda config --get Get all keys and values from my .condarc file + +conda config --get channels Get value of the key channels from .condarc file + +conda config --add channels pandas Add a new value to channels so conda looks for + packages in this location. + +# Managing packages, including Python +# =================================== +conda list View list of packages and versions installed in active + environment + +conda search beautiful-soup Search for a package to see if it is available to conda install + +conda install -n bunnies beautiful-soup Install a new package + +conda update beautiful-soup Update a package in the current environment + +conda search --override-channels -c pandas bottleneck Search for a package in a specific location (the + pandas channel on Anaconda.org) + +conda install -c pandas bottleneck Install a package from a specific channel + +conda search --override-channels -c defaults beautiful-soup Search for a package to see if it is available from + the Anaconda repository + +source activate bunnies Activate the environment where you want to +pip install see install a package and install it with pip (included + with Anaconda and Miniconda) + +conda install iopro accelerate Install commercial Continuum packages + +conda skeleton pypi pyinstrument Build a Conda package from a Python Package Index +conda build pyinstrument (PyPI) Package + +# Removing packages, environments or channels +# =========================================== +conda remove --name bunnies beautiful-soup Remove one package from any named environment + +conda remove beautiful-soup Remove one package from the active environment + +conda remove --name bunnies beautiful-soup astroid Remove multiple packages from any environment + +conda remove --name snakes --all Remove an environment diff --git a/.cheat/cheat/i3 b/.cheat/cheat/i3 new file mode 100644 index 0000000..edec20a --- /dev/null +++ b/.cheat/cheat/i3 @@ -0,0 +1,92 @@ +##################################################### +# +# --- Key Bindings List --- {{{ +# +##################################################### +# +# $mod+{} +# ======= +# $mod+a focus parent +# $mod+b split h +# $mod+d exec --no-startup-id dmenu_run +# $mod+e exec --no-startup-id $term -e "mutt -F ~/.muttrc" +# $mod+f fullscreen toggle +# $mod+h focus left +# $mod+j focus down +# $mod+k focus up +# $mod+l focus right +# $mod+m exec --no-startup-id /usr/bin/mplayer +# $mod+n border normal +# $mod+r exec --no-startup-id $term -e ranger +# $mod+t layout toggle split +# $mod+u border none +# $mod+v split v +# $mod+w exec --no-startup-id $browser +# $mod+y border pixel 2 +# $mod+z split v, layout stacking +# $mod+space focus mode_toggle +# $mod+Return exec --no-startup-id +# $mod+grave exec --no-startup-id $HOME/bin/scripts/any_term_dropdown.sh +# $mod+F11 exec --no-startup-id amixer set Master 5%- +# $mod+F12 exec --no-startup-id amixer set Master 5%+ +# $mod+F1 exec --no-startup-id xbacklight -dec 5 +# $mod+F2 exec --no-startup-id xbacklight -inc 5 +# $mod+F4 mode "$mode_system" +# +# ======= +# $mod+Shift+{} +# ======= +# $mod+Shift+c reload +# $mod+Shift+d exec --no-startup-id rofi -show run -lines 10 -eh 2 -width 80 \ +# -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) \ +# -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" \ +# -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 12" +# $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut.\ +# Do you really want to exit i3? This will end your X session.' -b \ +# 'Yes, exit i3' 'i3-msg exit'" +# $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +# $mod+Shift+h move left +# $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +# $mod+Shift+j move down +# $mod+Shift+k move up +# $mod+Shift+l move right +# $mod+Shift+m exec --no-startup-id /usr/bin/mpv +# $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +# $mod+Shift+q kill +# $mod+Shift+r restart +# $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +# $mod+Shift+u resize shrink height 10 px or 10 ppt +# $mod+Shift+w exec --no-startup-id /usr/local/bin/eclipse/eclipse +# $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +# $mod+Shift+space floating toggle +# $mod+Shift+Return exec --no-startup-id $term -e tmux +# +# ======= +# $mod+Ctrl+{} +# ======= +# $mod+Ctrl+r mode "resize" +# $mod+Ctrl+d gaps inner current set 0; gaps outer current set 0 +# $mod+Ctrl+t gaps inner current set 15; gaps outer current set 15 + +# $mod+Ctrl+i resize grow height 10 px or 10 ppt +# $mod+Ctrl+o resize grow width 10 px or 10 ppt +# $mod+Ctrl+u resize shrink height 10 px or 10 ppt +# $mod+Ctrl+y resize shrink width 10 px or 10ppt + +# $mod+Ctrl+h gaps inner current plus 5 +# $mod+Ctrl+j gaps outer current minus 5 +# $mod+Ctrl+k gaps outer current plus 5 +# $mod+Ctrl+l gaps inner current minus 5 +# $mod+Ctrl+space exec --no-startup-id $HOME/bin/scripts/rofi-scripts-collection/rofi-bangs.sh \ +# -font "System San Francisco Display 12" +# $mod+Ctrl+Return exec --no-startup-id guake +# +# ======= + + +##################################################### +# +# --- }}} +# +##################################################### + diff --git a/.cheat/cheat/luna b/.cheat/cheat/luna new file mode 100644 index 0000000..c19eae5 --- /dev/null +++ b/.cheat/cheat/luna @@ -0,0 +1,234 @@ +#Connect to any (known) WAP in range (or simply turn on WiFi): + +luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"enabled"}' +luna-send -n 1 palm://com.palm.wifi/findnetworks '{""}' + + +#Disconnect from WiFi: + +luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"disabled"}' + +#Turn Bluetooth ON: + +luna-send -n 1 palm://com.palm.btmonitor/monitor/radioon '{"visible":true, "connectable":true}' + +#Turn Bluetooth OFF: + +luna-send -n 1 palm://com.palm.btmonitor/monitor/radiooff {} + +#Using luna-send to refresh the Launcher panel. + +luna-send -n 1 palm://com.palm.applicationManager/rescan {} + + +#Get a list of all installed apps: + +luna-send -n 1 "palm://com.palm.applicationManager/listLaunchPoints" "{}" + + +#Using luna-send to launch an application: + +luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\"} +luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\",\"params\":{\"scene\":\"page\",\"target\":\"http://www.google.com\"}} + + +#Using luna-send to download a file to /media/internal/downloads/: + +luna-send -n 1 palm://com.palm.downloadmanager/download {\"target\":\"http://www.google.com/index.html\"} + + +#Using luna-send to first import and then set the wallpaper image: + +luna-send -n 1 palm://com.palm.systemservice/wallpaper/importWallpaper {"target": "/media/internal/wallpapers/your_file.jpg" } +luna-send -n 1 palm://com.palm.systemservice/setPreferences {"wallpaper": {"wallpaperName": "your_file.jpg", "wallpaperFile": "/media/internal/wallpapers/your_file.jpg"}} + + + +#Using luna-send to control the palm progress animation (The pulsing "palm" logo seen at boot): + +luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"start\"} +luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"stop\"} + +#TODO: These should probably be plugged into the Tracker app. + + +luna-send -n 1 palm://com.palm.location/setUseGps {\"useGps\":\"true\"} +luna-send -n 1 palm://com.palm.location/setAutoLocate {\"autoLocate\":\"true\"} +luna-send -n 1 palm://com.palm.location/getCurrentPosition {} + + +#List all of the processes which are running: + +sudo luna-send -n 1 palm://com.palm.applicationManager/running {} +** Message: serviceResponse Handling: 2, { "running": [ { "id": "com.palm.launcher", "processid": "1006" }, { "id": "com.palm.systemui", "processid": "1007" }, { "id": "com.palm.app.email", "processid": "1000" }, { "id": "com.palm.app.phone", "processid": "1001" }, { "id": "com.palm.app.contacts", "processid": "1002" }, { "id": "com.palm.app.camera", "processid": "1003" }, { "id": "com.palm.app.messaging", "processid": "1004" }, { "id": "com.palm.app.calendar", "processid": "1005" }, { "id": "com.palm.app.phone", "processid": "1008" }, { "id": "com.palm.app.camera", "processid": "1014" } ] } + + +#Close a process: + +luna-send -n 1 "palm://com.palm.applicationManager/close" "{\"processId\":\"1058\"}" + + +#Activate the vibrator: + +luna-send -n 1 palm://com.palm.vibrate/vibrate {\"period\":1,\"duration\":1000\} + +#The duration value is in milliseconds and can be adjusted as desired. + + +#Photos Info - list album and image from mediadb.db3: + +luna-send -n 1 luna://com.palm.mediadb/image/listalbums {} + +luna-send -n 1 luna://com.palm.mediadb/image/listimages {} + + +#Set system volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/system/setVolume '{"volume":80}' + + +#Set media volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/media/setVolume '{"volume":80}' + + +#Set ringtone volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/ringtone/setVolume '{"volume":100}' + + +#Dial a number - this actually calls the number, not just setup + +luna-send -n 1 palm://com.palm.telephony/dial '{"number":"8001234567"}' + + + +#Hang up a phone call :-) There are ways to end specific types of calls but I think this is good enough for now. Let me know if you want the other methods. + +luna-send -n 1 palm://com.palm.telephony/hangupAll {} + + +#Send a text message - only need to change phone "value" and "messageText" + +luna-send -n 1 palm://com.palm.messaging/sendMessageFromCompose '{"recipientJSONArray": [{"lastName": "", "pictureLoc": "", "contactCount": 1, "displayText": "", "firstName": "", "pictureLocBig": "", "imAvailability": 6, "pictureLocSquare": "", "contactDisplay": "", "Person_id": "", "personId": "", "type": "phone", "value": "8165551234", "alreadyValidated": true, "prefix": "to$A", "identifier": ""}], "messageText": "Content of message here"}' + + +#set phone to no roam (home network only) + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"homeonly"}' + + +#set phone to auto roam + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"any"}' + + +#set phone to roam only + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"roamonly"}' + + +#Applications + +#Notes (view notes): + +luna-send -n 1 palm://com.palm.notes/getNotes {} + + +#Storage + +#Enter usb storage mode: + +luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false} + + +#Exit usb storage mode (toggle): + +luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false} + +#Airplane Mode + +#Enable Airplane Mode: + +luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":true}' + + +#Disable Airplane Mode: + +luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":false}' + +# Fix messaging thread problem (from Grabber5.0 +# http://forums.webosnation.com/palm-pre-2/272900-sms-issue-messages-can-no-longer-displayed-conversation.html) + +"The hardest part is tracking down the person id if you have a lot of contacts. + +You have to get the id of the chat thread and the person, using Impostah. +The easiest thing to do is save the object to a file while viewing it in Impostah +(you will prob have to change the filename, as the display name for the chat thread +and person id are likely the same, and that is what is used for the default filename. +I prefixed the chat thread filename with "chatthread"). Finding the person id can take +a while if you have a lot of contacts. + +Then run this command, filling in the chat thread id and person id. +The phone# is probably not required, but I supplied it anyway, just copying the value from the chat thread." + + +#Person object and chatthread object saved from Impostah so we can grab the chatthread id +#and person id for the merge command. +# +##Update chat thread person id and locked flag. Reply address prob not necessary (it is not changing) + +luna-send -n 1 -a com.palm.app.messaging luna://com.palm.db/merge ' +{"objects":[{"_id":"XXXXXXXX","personId":"XXXXXXX","flags":{"locked":false},"replyAddress":"(999) 555-1212"}]}' + +# +#Get chatthread to confirm changes. +# + +luna-send -n 1 -a com.palm.app.messaging luna://com.palm.db/get '{"ids":["XXXXXXXX"]}' + + +# Use palm-install to install ipk +Usage: palm-install [OPTION...] [PACKAGE | APP_ID] +Install or remove applications from a HP webOS device. + +Options: +-d, --device=DEVICE Specify DEVICE to use + --device-list List the available devices +-l, --list List the installed applications +-r, --remove Remove applications instead of installing +--version Display version info and exit +--help Display this help and exit + +PACKAGE is the file path of the package to install, +e.g. ~/projects/packages/com.example.app_1.0_all.ipk. + +APP_ID is the id of the application to remove. + +DEVICE is a unique identifier which matches a device name, type, or id +(as returned by the device-list option). e.g. Use "usb" for a usb-connected +device, or "tcp" for an emulator (note: emulator must be running). If not +specified, the first device found is used. + +# Install package +palm-install ~/projects/packages/com.example.app_1.0_all.ipk + +# Remove application +palm-install -r com.example.app + +# List applications on default device +palm-install -l + +# List applications on usb device +palm-install -d usb -l + +# List applications on emulator +palm-install -d tcp -l + +# Make apps fit the whole screen Pre3 +# transfer metadata.json to the folder of each application not working correctly +# +# /media/cryptofs/apps/usr/palm/applications/(whatever app) +# +# metadata.json can be found at /MacOSX-Data1/Computing/Palm/webos/Archive/games patch/metadata.json + diff --git a/.cheat/cheat/nmcli b/.cheat/cheat/nmcli new file mode 100644 index 0000000..cd38bf4 --- /dev/null +++ b/.cheat/cheat/nmcli @@ -0,0 +1,52 @@ +# Desc: Command line interface to NetworkManager + +# Connect to a wireless access point - Parameters: +# <wiface> -- the name of your wireless interface +# <ssid> -- the SSID of the access point +# <pass> -- the WiFi password +nmcli d wifi connect <ssid> password <pass> iface <wiface> + +# Disconnect from WiFi - Parameters: +# <wiface> -- the name of your wireless interface +nmcli d wifi disconnect iface <wiface> + +# Get WiFi status (enabled / disabled) +nmcli radio wifi + +# Enable / Disable WiFi +nmcli radio wifi <on|off> + +# Show all available WiFi access points +nmcli dev wifi list + +# Refresh the available WiFi connection list +nmcli dev wifi rescan + +# Show all available connections +nmcli con + +# Show only active connections +nmcli con show --active + +# Review the available devices +nmcli dev status + +# Add a dynamic ethernet connection - parameters: +# <name> -- the name of the connection +# <iface_name> -- the name of the interface +ncmli con add type ethernet con-name <name> ifname <iface_name> + +# Bring up the ethernet connection +nmcli con up <name> + +# Bring Wifi radio up, connect to SSID, switch on vpn +nmcli radio wifi on +nmcli con up <SSID> +vpn_<loc>_up + + +# Switch off vpn, disconnect from SSID, bring Wifi radio down +vpn_<loc>_dn +nmcli con down <SSID> +nmcli radio wifi off + diff --git a/.cheat/cheat/sed b/.cheat/cheat/sed new file mode 100644 index 0000000..e22c97a --- /dev/null +++ b/.cheat/cheat/sed @@ -0,0 +1,17 @@ +# To replace all occurrences of "day" with "night" and write to stdout: +sed 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" within file.txt: +sed -i 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" on stdin: +echo 'It is daytime' | sed 's/day/night/g' + +# To remove leading spaces +sed -i -r 's/^\s+//g' file.txt + +# To remove empty lines and print results to stdout: +sed '/^$/d' file.txt + +# To replace newlines in multiple lines +sed ':a;N;$!ba;s/\n//g' file.txt diff --git a/.cheat/cheat/ssh b/.cheat/cheat/ssh new file mode 100644 index 0000000..e4087a9 --- /dev/null +++ b/.cheat/cheat/ssh @@ -0,0 +1,53 @@ +# To ssh via pem file (which normally needs 0600 permissions): +ssh -i /path/to/file.pem user@example.com + +# To connect on an non-standard port: +ssh -p 2222 user@example.com + +# To connect and forward the authentication agent +ssh -A user@example.com + +# To execute a command on a remote server: +ssh -t user@example.com 'the-remote-command' + +# To tunnel an x session over SSH: +ssh -X user@example.com + +# Redirect traffic with a tunnel between local host (port 8080) and a remote +# host (remote.example.com:5000) through a proxy (personal.server.com): +ssh -f -L 8080:remote.example.com:5000 user@personal.server.com -N + +# To launch a specific x application over SSH: +ssh -X -t user@example.com 'chromium-browser' + +# To create a SOCKS proxy on localhost and port 9999 +ssh -D 9999 user@example.com + +# -X use an xsession, -C compress data, "-c blowfish" use the encryption blowfish +ssh user@example.com -C -c blowfish -X + +# For more information, see: +# http://unix.stackexchange.com/q/12755/44856 + +# Copy files and folders through ssh from remote host to pwd with tar.gz compression +# when there is no rsync command available +ssh user@example.com "cd /var/www/Shared/; tar zcf - asset1 asset2" | tar zxf - + +# Set up SSH Passwordless login using ssh keygen +# +# 1. On client, generate public/private keys + +ssh-keygen -t rsa + +# 2. Login to server and make sure that a .ssh directory exists in user's home directory. Create it otherwise. +# +# 3. Use ssh from client to upload the public key to the server, and place it in the users's .ssh directory and call it authorized_keys + +[user@client]$ cat .ssh/id_rsa.pub | ssh user@server 'cat >> .ssh/authorized_keys' + +# 4. Set Permissions on server + +[user@client]$ ssh user@server 'chmod 700 .ssh; chmod 640 .ssh/authorized_keys' + +# 5. Can now login to server with the use of password. + diff --git a/.cheat/cheat/w3mtips b/.cheat/cheat/w3mtips new file mode 100644 index 0000000..eb1b027 --- /dev/null +++ b/.cheat/cheat/w3mtips @@ -0,0 +1,34 @@ +# The list of external browsers assigned to w3m are as follows: +# +#extbrowser /home/opensuse/vgg/anaconda3/bin/qutebrowser +#extbrowser2 bash -c 'transmission-remote -a "$0" && notify-send -t 3000 -i emblem-downloads "Adding Torrent" "$0" ' +#extbrowser3 bash -c 'echo -n "$0" | xclip -selection clipboard && notify-send -t 3000 -i edit-copy "W3M URL Yank To Clipboard" "$0"' +#extbrowser4 bash -c 'TS_SOCKET=/tmp/ytdl ts /home/opensuse/vgg/anaconda3/bin/youtube-dl "$0" && notify-send -t 3000 -i package-x-generic "youtube-dl: Downloading" "$0" ' +#extbrowser5 bash -c 'TS_SOCKET=/tmp/w3m ts /usr/bin/aria2c -j 1 -c -d $HOME/Downloads "$0" && notify-send -t 3000 -i package-x-generic "Aria2c: Downloading" "$0" ' +#extbrowser6 bash -c 'TS_SOCKET=/tmp/mpv ts /usr/bin/mpv --ontop --force-window --autofit=500x200 --geometry=-15-50 "$0" && notify-send -t 3000 -i video-x-generic "MPV Queue" "$0"' +#extbrowser7 /usr/bin/firefox +# +# To browse current document using external browsers, use the following Key bindings: + +# For external browser (i.e. qutebrowser see above list) +M + +# to send torrent link to transmission-remote +2M + +# to copy hyperlink to clipboard +3M + +# to download link via youtube-dl +4M + +# to download link via aria +5M + +# to send link to mpv +6M + +# or via firefox +7M + +To browse the link using external browsers, prefix the above key bindings with the ESC key. diff --git a/.cheat/cheat/weechat b/.cheat/cheat/weechat new file mode 100644 index 0000000..869ca07 --- /dev/null +++ b/.cheat/cheat/weechat @@ -0,0 +1,17 @@ +# Set unread marker on all windows +Ctrl-s Ctrl-u + +# Switch buffer left +Ctrl-p, Alt-left +# Switch buffer right +Ctrl-n, Alt-right +# Next buffer with activity +Alt-a +# Switch buffers +#Alt-0...9 +Ctrl-x + +# Scroll buffer title +F9/F10 +# Scroll nick list +F11/F12 diff --git a/.cheat/cheat/youtube-dl b/.cheat/cheat/youtube-dl new file mode 100644 index 0000000..2ff3536 --- /dev/null +++ b/.cheat/cheat/youtube-dl @@ -0,0 +1,20 @@ +# To download a video in 720p MP4: +youtube-dl -f 22 example.com/watch?v=id + +# To download a video in 720p MP4 or WebM or FLV: +youtube-dl -f 22/45/120 + +# To list all available formats of a video: +youtube-dl -F example.com/watch?v=id + +# To download a video to /$uploader/$date/$title.$ext: +youtube-dl -o '%(uploader)s/%(date)s/%(title)s.%(ext)s' example.com/watch?v=id + +# To download a video playlist starting from a certain video: +youtube-dl --playlist-start 5 example.com/watch?v=id&list=listid + +# To simulate a download with youtube-dl: +youtube-dl -s example.com/watch?v=id + +# For all video formats see +# http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs diff --git a/.cheat/conda b/.cheat/conda new file mode 100755 index 0000000..6959e6b --- /dev/null +++ b/.cheat/conda @@ -0,0 +1,84 @@ +Managing Conda/Anaconda +======================= +conda info verify conda is installed, check version # + +conda update conda Update conda package and environment manager + +conda update anaconda Update anaconda meta package + +Managing Environments +===================== +conda info --envsi Get a list of environments, active + or environment shown with * +conda info -e + +conda create --name snowflakes biopython Create an environment and install + or program(s) +conda create -n snowflakes biopython + +source activate snowflakes Activate the new enviroment to use it + +conda create -n bunnies python=3.4 astroid Create new environment and specify python version + +conda create -n flowers --clone snowflakes make exact copy of environment + +conda remove -n flowers --all delete an environment + +conda env export > puppies.yml save current environment to a file + +conda env create -f puppies.yml load environment from file + +Managing Python +=============== +conda search --full-name python Check versions of python available to install + or +conda search -f python + +conda create -n snakes python=3.4 Install different version of Python in new environment + +Managing Conda .condarc configuration +===================================== +conda config --get Get all keys and values from my .condarc file + +conda config --get channels Get value of the key channels from .condarc file + +conda config --add channels pandas Add a new value to channels so conda looks for + packages in this location. + +Managing packages, including Python +=================================== +conda list View list of packages and versions installed in active + environment + +conda search beautiful-soup Search for a package to see if it is available to conda install + +conda install -n bunnies beautiful-soup Install a new package + +conda update beautiful-soup Update a package in the current environment + +conda search --override-channels -c pandas bottleneck Search for a package in a specific location (the + pandas channel on Anaconda.org) + +conda install -c pandas bottleneck Install a package from a specific channel + +conda search --override-channels -c defaults beautiful-soup Search for a package to see if it is available from + the Anaconda repository + +source activate bunnies Activate the environment where you want to +pip install see install a package and install it with pip (included + with Anaconda and Miniconda) + +conda install iopro accelerate Install commercial Continuum packages + +conda skeleton pypi pyinstrument Build a Conda package from a Python Package Index +conda build pyinstrument (PyPI) Package + +Removing packages, environments or channels +=========================================== +conda remove --name bunnies beautiful-soup Remove one package from any named environment + +conda remove beautiful-soup Remove one package from the active environment + +conda remove --name bunnies beautiful-soup astroid Remove multiple packages from any environment + +conda remove --name snakes --all Remove an environment diff --git a/.cheat/dvdlinux b/.cheat/dvdlinux new file mode 100644 index 0000000..fbccb6b --- /dev/null +++ b/.cheat/dvdlinux @@ -0,0 +1,28 @@ +Make sure the following are installed: + +ffmpeg, dvdauthor, genisoimage, growisofs, dvd+rw-tools + +enter the following: + +$ export VIDEO_FORMAT=PAL # This is used later when the DVD is being authored. + +now need to convert the video file into mpg format: + +$ ffmpeg -i yourfile.mkv -target pal-dvd -aspect 16:9 yournewfile.mpg + +Now we can use dvdauthor + +$ mkdir DVD +$ dvdauthor -o DVD -t yournewfile.mpg # -o defines the output folder, -t defines the title file. + # Repeat this for as many files as you want on the dvd. +$ dvdauthor -i DVD -T # This defines the TOC. + +We are now ready to convert the DVD to an iso to burn + +genisoimage -dvd-video -o yourimage.iso + +Once this is ready to burn can use k3b or on the command line use: + +$ growisofs -dvd-compat -Z /dev/sr0=yourimage.iso + +Ref: https://www.linux.com/blog/how-convert-video-file-iso-burn-dvd diff --git a/.cheat/gpg b/.cheat/gpg new file mode 100644 index 0000000..8bc5b42 --- /dev/null +++ b/.cheat/gpg @@ -0,0 +1,173 @@ +# Create a key + + gpg --gen-key + + +# Show keys + + To list a summary of all keys + + gpg --list-keys + + To show your public key + + gpg --armor --export + + To show the fingerprint for a key + + gpg --fingerprint KEY_ID + +# Search for keys + + gpg --search-keys 'user@emailaddress.com' + + +# To Encrypt a File + + gpg --encrypt --recipient 'user@emailaddress.com' example.txt + + +# To Decrypt a File + + gpg --output example.txt --decrypt example.txt.gpg + + +# Export keys + + gpg --output ~/public_key.txt --armor --export KEY_ID + gpg --output ~/private_key.txt --armor --export-secret-key KEY_ID + + Where KEY_ID is the 8 character GPG key ID. + + Store these files to a safe location, such as a USB drive, then + remove the private key file. + + shred -zu ~/private_key.txt + +# Import keys + + Retrieve the key files which you previously exported. + + gpg --import ~/public_key.txt + gpg --allow-secret-key-import --import ~/private_key.txt + + Then delete the private key file. + + shred -zu ~/private_key.txt + +# Revoke a key + + Create a revocation certificate. + + gpg --output ~/revoke.asc --gen-revoke KEY_ID + + Where KEY_ID is the 8 character GPG key ID. + + After creating the certificate import it. + + gpg --import ~/revoke.asc + + Then ensure that key servers know about the revokation. + + gpg --send-keys KEY_ID + +# Signing and Verifying files + + If youre uploading files to launchpad you may also want to include + a GPG signature file. + + gpg -ba filename + + or if you need to specify a particular key: + + gpg --default-key <key ID> -ba filename + + This then produces a file with a .asc extension which can be uploaded. + If you need to set the default key more permanently then edit the + file ~/.gnupg/gpg.conf and set the default-key parameter. + + To verify a downloaded file using its signature file. + + gpg --verify filename.asc + +# Signing Public Keys + + Import the public key or retrieve it from a server. + + gpg --keyserver <keyserver> --recv-keys <Key_ID> + + Check its fingerprint against any previously stated value. + + gpg --fingerprint <Key_ID> + + Sign the key. + + gpg --sign-key <Key_ID> + + Upload the signed key to a server. + + gpg --keyserver <keyserver> --send-key <Key_ID> + +# Change the email address associated with a GPG key + + gpg --edit-key <key ID> + adduid + + Enter the new name and email address. You can then list the addresses with: + + list + + If you want to delete a previous email address first select it: + + uid <list number> + + Then delete it with: + + deluid + + To finish type: + + save + + Publish the key to a server: + + gpg --send-keys <key ID> + +# Creating Subkeys + + Subkeys can be useful if you don't wish to have your main GPG key + installed on multiple machines. In this way you can keep your + master key safe and have subkeys with expiry periods or which may be + separately revoked installed on various machines. This avoids + generating entirely separate keys and so breaking any web of trust + which has been established. + + gpg --edit-key <key ID> + + At the prompt type: + + addkey + + Choose RSA (sign only), 4096 bits and select an expiry period. + Entropy will be gathered. + + At the prompt type: + + save + + You can also repeat the procedure, but selecting RSA (encrypt only). + To remove the master key, leaving only the subkey/s in place: + + gpg --export-secret-subkeys <subkey ID> > subkeys + gpg --export <key ID> > pubkeys + gpg --delete-secret-key <key ID> + + Import the keys back. + + gpg --import pubkeys subkeys + + Verify the import. + + gpg -K + + Should show sec# instead of just sec. diff --git a/.cheat/i3 b/.cheat/i3 new file mode 100755 index 0000000..edec20a --- /dev/null +++ b/.cheat/i3 @@ -0,0 +1,92 @@ +##################################################### +# +# --- Key Bindings List --- {{{ +# +##################################################### +# +# $mod+{} +# ======= +# $mod+a focus parent +# $mod+b split h +# $mod+d exec --no-startup-id dmenu_run +# $mod+e exec --no-startup-id $term -e "mutt -F ~/.muttrc" +# $mod+f fullscreen toggle +# $mod+h focus left +# $mod+j focus down +# $mod+k focus up +# $mod+l focus right +# $mod+m exec --no-startup-id /usr/bin/mplayer +# $mod+n border normal +# $mod+r exec --no-startup-id $term -e ranger +# $mod+t layout toggle split +# $mod+u border none +# $mod+v split v +# $mod+w exec --no-startup-id $browser +# $mod+y border pixel 2 +# $mod+z split v, layout stacking +# $mod+space focus mode_toggle +# $mod+Return exec --no-startup-id +# $mod+grave exec --no-startup-id $HOME/bin/scripts/any_term_dropdown.sh +# $mod+F11 exec --no-startup-id amixer set Master 5%- +# $mod+F12 exec --no-startup-id amixer set Master 5%+ +# $mod+F1 exec --no-startup-id xbacklight -dec 5 +# $mod+F2 exec --no-startup-id xbacklight -inc 5 +# $mod+F4 mode "$mode_system" +# +# ======= +# $mod+Shift+{} +# ======= +# $mod+Shift+c reload +# $mod+Shift+d exec --no-startup-id rofi -show run -lines 10 -eh 2 -width 80 \ +# -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) \ +# -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" \ +# -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 12" +# $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut.\ +# Do you really want to exit i3? This will end your X session.' -b \ +# 'Yes, exit i3' 'i3-msg exit'" +# $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +# $mod+Shift+h move left +# $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +# $mod+Shift+j move down +# $mod+Shift+k move up +# $mod+Shift+l move right +# $mod+Shift+m exec --no-startup-id /usr/bin/mpv +# $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +# $mod+Shift+q kill +# $mod+Shift+r restart +# $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +# $mod+Shift+u resize shrink height 10 px or 10 ppt +# $mod+Shift+w exec --no-startup-id /usr/local/bin/eclipse/eclipse +# $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +# $mod+Shift+space floating toggle +# $mod+Shift+Return exec --no-startup-id $term -e tmux +# +# ======= +# $mod+Ctrl+{} +# ======= +# $mod+Ctrl+r mode "resize" +# $mod+Ctrl+d gaps inner current set 0; gaps outer current set 0 +# $mod+Ctrl+t gaps inner current set 15; gaps outer current set 15 + +# $mod+Ctrl+i resize grow height 10 px or 10 ppt +# $mod+Ctrl+o resize grow width 10 px or 10 ppt +# $mod+Ctrl+u resize shrink height 10 px or 10 ppt +# $mod+Ctrl+y resize shrink width 10 px or 10ppt + +# $mod+Ctrl+h gaps inner current plus 5 +# $mod+Ctrl+j gaps outer current minus 5 +# $mod+Ctrl+k gaps outer current plus 5 +# $mod+Ctrl+l gaps inner current minus 5 +# $mod+Ctrl+space exec --no-startup-id $HOME/bin/scripts/rofi-scripts-collection/rofi-bangs.sh \ +# -font "System San Francisco Display 12" +# $mod+Ctrl+Return exec --no-startup-id guake +# +# ======= + + +##################################################### +# +# --- }}} +# +##################################################### + diff --git a/.cheat/luna b/.cheat/luna new file mode 100755 index 0000000..9980219 --- /dev/null +++ b/.cheat/luna @@ -0,0 +1,236 @@ +#Connect to any (known) WAP in range (or simply turn on WiFi): + +luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"enabled"}' +luna-send -n 1 palm://com.palm.wifi/findnetworks '{""}' + + +#Disconnect from WiFi: + +luna-send -n 1 palm://com.palm.wifi/setstate '{"state":"disabled"}' + +#Turn Bluetooth ON: + +luna-send -n 1 palm://com.palm.btmonitor/monitor/radioon '{"visible":true, "connectable":true}' + +#Turn Bluetooth OFF: + +luna-send -n 1 palm://com.palm.btmonitor/monitor/radiooff {} + +#Using luna-send to refresh the Launcher panel. + +luna-send -n 1 palm://com.palm.applicationManager/rescan {} + + +#Get a list of all installed apps: + +luna-send -n 1 "palm://com.palm.applicationManager/listLaunchPoints" "{}" + + +#Using luna-send to launch an application: + +luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\"} +luna-send -n 1 palm://com.palm.applicationManager/launch {\"id\":\"com.palm.app.browser\",\"params\":{\"scene\":\"page\",\"target\":\"http://www.google.com\"}} + + +#Using luna-send to download a file to /media/internal/downloads/: + +luna-send -n 1 palm://com.palm.downloadmanager/download {\"target\":\"http://www.google.com/index.html\"} + + +#Using luna-send to first import and then set the wallpaper image: + +luna-send -n 1 palm://com.palm.systemservice/wallpaper/importWallpaper {"target": "/media/internal/wallpapers/your_file.jpg" } +luna-send -n 1 palm://com.palm.systemservice/setPreferences {"wallpaper": {"wallpaperName": "your_file.jpg", "wallpaperFile": "/media/internal/wallpapers/your_file.jpg"}} + + + +#Using luna-send to control the palm progress animation (The pulsing "palm" logo seen at boot): + +luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"start\"} +luna-send -n 1 palm://com.palm.systemmanager/runProgressAnimation {\"state\":\"stop\"} + +#TODO: These should probably be plugged into the Tracker app. + + +luna-send -n 1 palm://com.palm.location/setUseGps {\"useGps\":\"true\"} +luna-send -n 1 palm://com.palm.location/setAutoLocate {\"autoLocate\":\"true\"} +luna-send -n 1 palm://com.palm.location/getCurrentPosition {} + + +#List all of the processes which are running: + +sudo luna-send -n 1 palm://com.palm.applicationManager/running {} +** Message: serviceResponse Handling: 2, { "running": [ { "id": "com.palm.launcher", "processid": "1006" }, { "id": "com.palm.systemui", "processid": "1007" }, { "id": "com.palm.app.email", "processid": "1000" }, { "id": "com.palm.app.phone", "processid": "1001" }, { "id": "com.palm.app.contacts", "processid": "1002" }, { "id": "com.palm.app.camera", "processid": "1003" }, { "id": "com.palm.app.messaging", "processid": "1004" }, { "id": "com.palm.app.calendar", "processid": "1005" }, { "id": "com.palm.app.phone", "processid": "1008" }, { "id": "com.palm.app.camera", "processid": "1014" } ] } + + +#Close a process: + +luna-send -n 1 "palm://com.palm.applicationManager/close" "{\"processId\":\"1058\"}" + + +#Activate the vibrator: + +luna-send -n 1 palm://com.palm.vibrate/vibrate {\"period\":1,\"duration\":1000\} + +#The duration value is in milliseconds and can be adjusted as desired. + + +#Photos Info - list album and image from mediadb.db3: + +luna-send -n 1 luna://com.palm.mediadb/image/listalbums {} + +luna-send -n 1 luna://com.palm.mediadb/image/listimages {} + + +#Set system volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/system/setVolume '{"volume":80}' + + +#Set media volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/media/setVolume '{"volume":80}' + + +#Set ringtone volume - "volume" range is 0-100 + +luna-send -n 1 palm://com.palm.audio/ringtone/setVolume '{"volume":100}' + + +#Dial a number - this actually calls the number, not just setup + +luna-send -n 1 palm://com.palm.telephony/dial '{"number":"8001234567"}' + + + +#Hang up a phone call :-) There are ways to end specific types of calls but I think this is good enough for now. Let me know if you want the other methods. + +luna-send -n 1 palm://com.palm.telephony/hangupAll {} + + +#Send a text message - only need to change phone "value" and "messageText" + +luna-send -n 1 palm://com.palm.messaging/sendMessageFromCompose '{"recipientJSONArray": [{"lastName": "", "pictureLoc": "", "contactCount": 1, "displayText": "", "firstName": "", "pictureLocBig": "", "imAvailability": 6, "pictureLocSquare": "", "contactDisplay": "", "Person_id": "", "personId": "", "type": "phone", "value": "8165551234", "alreadyValidated": true, "prefix": "to$A", "identifier": ""}], "messageText": "Content of message here"}' + + +#set phone to no roam (home network only) + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"homeonly"}' + + +#set phone to auto roam + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"any"}' + + +#set phone to roam only + +luna-send -n 1 palm://com.palm.telephony//roamModeSet '{"mode":"roamonly"}' + + +#Applications + +#Notes (view notes): + +luna-send -n 1 palm://com.palm.notes/getNotes {} + + +#Storage + +#Enter usb storage mode: + +luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false} + + +#Exit usb storage mode (toggle): + +luna-send -n 1 palm://com.palm.storage/diskmode/enterMSM {\"user-confirmed\":true,\"enterIMasq\":false} + +#Airplane Mode + +#Enable Airplane Mode: + +luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":true}' + + +#Disable Airplane Mode: + +luna-send -n 1 palm://com.palm.systemservice/setPreferences '{"airplaneMode":false}' + +# Fix messaging thread problem (from Grabber5.0 +# http://forums.webosnation.com/palm-pre-2/272900-sms-issue-messages-can-no-longer-displayed-conversation.html) + +"The hardest part is tracking down the person id if you have a lot of contacts. + +You have to get the id of the chat thread and the person, using Impostah. +The easiest thing to do is save the object to a file while viewing it in Impostah +(you will prob have to change the filename, as the display name for the chat thread +and person id are likely the same, and that is what is used for the default filename. +I prefixed the chat thread filename with "chatthread"). Finding the person id can take +a while if you have a lot of contacts. + +Then run this command, filling in the chat thread id and person id. +The phone# is probably not required, but I supplied it anyway, just copying the value from the chat thread." + + +#Person object and chatthread object saved from Impostah so we can grab the chatthread id +#and person id for the merge command. +# +##Update chat thread person id and locked flag. Reply address prob not necessary (it is not changing) + +luna-send -n 1 -a com.palm.app.messaging luna://com.palm.db/merge ' +{"objects":[{"_id":"XXXXXXXX","personId":"XXXXXXX","flags":{"locked":false},"replyAddress":"(999) 555-1212"}]}' + +# +#Get chatthread to confirm changes. +# + +luna-send -n 1 -a com.palm.app.messaging luna://com.palm.db/get '{"ids":["XXXXXXXX"]}' + + +# Use palm-install to install ipk +Usage: palm-install [OPTION...] [PACKAGE | APP_ID] +Install or remove applications from a HP webOS device. + +Options: +-d, --device=DEVICE Specify DEVICE to use + --device-list List the available devices +-l, --list List the installed applications +-r, --remove Remove applications instead of installing +--version Display version info and exit +--help Display this help and exit + +PACKAGE is the file path of the package to install, +e.g. ~/projects/packages/com.example.app_1.0_all.ipk. + +APP_ID is the id of the application to remove. + +DEVICE is a unique identifier which matches a device name, type, or id +(as returned by the device-list option). e.g. Use "usb" for a usb-connected +device, or "tcp" for an emulator (note: emulator must be running). If not +specified, the first device found is used. + +# Install package +palm-install ~/projects/packages/com.example.app_1.0_all.ipk + +# Remove application +palm-install -r com.example.app + +# List applications on default device +palm-install -l + +# List applications on usb device +palm-install -d usb -l + +# List applications on emulator +palm-install -d tcp -l + +# Make apps fit the whole screen Pre3 +# transfer metadata.json to the folder of each application not working correctly +# +# /media/cryptofs/apps/usr/palm/applications/(whatever app) +# +# metadata.json can be found at /MacOSX-Data1/Computing/Palm/webos/Archive/games patch/metadata.json + +# Place Pre3 in recovery mode. +Reboot with letter R pressed, and the pre3 will reboot into recovery mode. Can then connect to USB to doctor. diff --git a/.cheat/nmcli b/.cheat/nmcli new file mode 100755 index 0000000..cd38bf4 --- /dev/null +++ b/.cheat/nmcli @@ -0,0 +1,52 @@ +# Desc: Command line interface to NetworkManager + +# Connect to a wireless access point - Parameters: +# <wiface> -- the name of your wireless interface +# <ssid> -- the SSID of the access point +# <pass> -- the WiFi password +nmcli d wifi connect <ssid> password <pass> iface <wiface> + +# Disconnect from WiFi - Parameters: +# <wiface> -- the name of your wireless interface +nmcli d wifi disconnect iface <wiface> + +# Get WiFi status (enabled / disabled) +nmcli radio wifi + +# Enable / Disable WiFi +nmcli radio wifi <on|off> + +# Show all available WiFi access points +nmcli dev wifi list + +# Refresh the available WiFi connection list +nmcli dev wifi rescan + +# Show all available connections +nmcli con + +# Show only active connections +nmcli con show --active + +# Review the available devices +nmcli dev status + +# Add a dynamic ethernet connection - parameters: +# <name> -- the name of the connection +# <iface_name> -- the name of the interface +ncmli con add type ethernet con-name <name> ifname <iface_name> + +# Bring up the ethernet connection +nmcli con up <name> + +# Bring Wifi radio up, connect to SSID, switch on vpn +nmcli radio wifi on +nmcli con up <SSID> +vpn_<loc>_up + + +# Switch off vpn, disconnect from SSID, bring Wifi radio down +vpn_<loc>_dn +nmcli con down <SSID> +nmcli radio wifi off + diff --git a/.cheat/sed b/.cheat/sed new file mode 100755 index 0000000..e22c97a --- /dev/null +++ b/.cheat/sed @@ -0,0 +1,17 @@ +# To replace all occurrences of "day" with "night" and write to stdout: +sed 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" within file.txt: +sed -i 's/day/night/g' file.txt + +# To replace all occurrences of "day" with "night" on stdin: +echo 'It is daytime' | sed 's/day/night/g' + +# To remove leading spaces +sed -i -r 's/^\s+//g' file.txt + +# To remove empty lines and print results to stdout: +sed '/^$/d' file.txt + +# To replace newlines in multiple lines +sed ':a;N;$!ba;s/\n//g' file.txt diff --git a/.cheat/ssh b/.cheat/ssh new file mode 100755 index 0000000..e83bcce --- /dev/null +++ b/.cheat/ssh @@ -0,0 +1,34 @@ +# To ssh via pem file (which normally needs 0600 permissions): +ssh -i /path/to/file.pem user@example.com + +# To connect on an non-standard port: +ssh -p 2222 user@example.com + +# To connect and forward the authentication agent +ssh -A user@example.com + +# To execute a command on a remote server: +ssh -t user@example.com 'the-remote-command' + +# To tunnel an x session over SSH: +ssh -X user@example.com + +# Redirect traffic with a tunnel between local host (port 8080) and a remote +# host (remote.example.com:5000) through a proxy (personal.server.com): +ssh -f -L 8080:remote.example.com:5000 user@personal.server.com -N + +# To launch a specific x application over SSH: +ssh -X -t user@example.com 'chromium-browser' + +# To create a SOCKS proxy on localhost and port 9999 +ssh -D 9999 user@example.com + +# -X use an xsession, -C compress data, "-c blowfish" use the encryption blowfish +ssh user@example.com -C -c blowfish -X + +# For more information, see: +# http://unix.stackexchange.com/q/12755/44856 + +# Copy files and folders through ssh from remote host to pwd with tar.gz compression +# when there is no rsync command available +ssh user@example.com "cd /var/www/Shared/; tar zcf - asset1 asset2" | tar zxf - diff --git a/.cheat/w3mtips b/.cheat/w3mtips new file mode 100755 index 0000000..6fa4536 --- /dev/null +++ b/.cheat/w3mtips @@ -0,0 +1,34 @@ +# The list of external browsers assigned to w3m are as follows: +# +#extbrowser ${HOME}/anaconda3/bin/qutebrowser +#extbrowser2 bash -c 'transmission-remote -a "$0" && notify-send -t 3000 -i emblem-downloads "Adding Torrent" "$0" ' +#extbrowser3 bash -c 'echo -n "$0" | xclip -selection clipboard && notify-send -t 3000 -i edit-copy "W3M URL Yank To Clipboard" "$0"' +#extbrowser4 bash -c 'TS_SOCKET=/tmp/ytdl ts ${HOME}/anaconda3/bin/youtube-dl "$0" && notify-send -t 3000 -i package-x-generic "youtube-dl: Downloading" "$0" ' +#extbrowser5 bash -c 'TS_SOCKET=/tmp/w3m ts /usr/bin/aria2c -j 1 -c -d $HOME/Downloads "$0" && notify-send -t 3000 -i package-x-generic "Aria2c: Downloading" "$0" ' +#extbrowser6 bash -c 'TS_SOCKET=/tmp/mpv ts /usr/bin/mpv --ontop --force-window --autofit=500x200 --geometry=-15-50 "$0" && notify-send -t 3000 -i video-x-generic "MPV Queue" "$0"' +#extbrowser7 /usr/bin/firefox +# +# To browse current document using external browsers, use the following Key bindings: + +# For external browser (i.e. qutebrowser see above list) +M + +# to send torrent link to transmission-remote +2M + +# to copy hyperlink to clipboard +3M + +# to download link via youtube-dl +4M + +# to download link via aria +5M + +# to send link to mpv +6M + +# or via firefox +7M + +To browse the link using external browsers, prefix the above key bindings with the ESC key. diff --git a/.cheat/weechat b/.cheat/weechat new file mode 100755 index 0000000..06bbe39 --- /dev/null +++ b/.cheat/weechat @@ -0,0 +1,25 @@ +# Set unread marker on all windows +Ctrl-s Ctrl-u + +# Switch buffer left +Ctrl-p, Alt-left +# Switch buffer right +Ctrl-n, Alt-right +# Next buffer with activity +Alt-a +# Switch buffers +#Alt-0...9 +Ctrl-x + +# Scroll buffer title +F9/F10 +# Scroll nick list +F11/F12 +### vimode (https://github.com/GermainZ/weechat-vimode) +/script install vimode.py +# enable vimode status indicator +# /set weechat.bar.input.items "[input_prompt]+(away),[input_search], [input_paste], input_text" +/set weechat.bar.input.items "[mode_indicator]+[input_prompt]+(away),[input_search], [input_paste], input_text,[vi_buffer]" +# show line numbers ( q/Q/m = quote/yank ; use :7 to jump to line 7) +/set weechat.bar.vi_line_numbers.hidden off +/save diff --git a/.cheat/youtube-dl b/.cheat/youtube-dl new file mode 100755 index 0000000..2ff3536 --- /dev/null +++ b/.cheat/youtube-dl @@ -0,0 +1,20 @@ +# To download a video in 720p MP4: +youtube-dl -f 22 example.com/watch?v=id + +# To download a video in 720p MP4 or WebM or FLV: +youtube-dl -f 22/45/120 + +# To list all available formats of a video: +youtube-dl -F example.com/watch?v=id + +# To download a video to /$uploader/$date/$title.$ext: +youtube-dl -o '%(uploader)s/%(date)s/%(title)s.%(ext)s' example.com/watch?v=id + +# To download a video playlist starting from a certain video: +youtube-dl --playlist-start 5 example.com/watch?v=id&list=listid + +# To simulate a download with youtube-dl: +youtube-dl -s example.com/watch?v=id + +# For all video formats see +# http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs diff --git a/.cheat/yum b/.cheat/yum new file mode 100644 index 0000000..c4dc4af --- /dev/null +++ b/.cheat/yum @@ -0,0 +1,261 @@ +#---------------------------------------------- +# +# To install the latest version of a package: + +$ yum install {package-name} + +# +#---------------------------------------------- +# +# To reinstall a package: + +$ yum reinstall {package-name} + +# +#---------------------------------------------- +# +# To perform a local install: + +$ yum localinstall {package-name} + +# +#---------------------------------------------- +# +# To install all updates/patches + +$ yum update + +# +#---------------------------------------------- +# +# To fix an interrupted update + +$ yum-complete-transaction + +# If this doesn't work type in the following: + +$ yum history + +# This will list the yum transactions. A * will indicate an +# interrupted/aborted transaction. Take note of the transaction number, +# then yupe the following: + +$ yum history redo force-reinstall [transaction ID] + +# Alternatively, undo and then redo the transaction as follows: + +$ yum history undo [transaction ID] +$ yum history redo [transaction ID] + +# +#---------------------------------------------- +# +# To install updates for specific package + +$ yum update {package-name} + +# +#---------------------------------------------- +# +# To downgrade a specific package + +$ yum downgrade {package-name} + +# +#---------------------------------------------- +# +# To updates package to specific version. +## First find a list of all duplicates + +$ yum --showduplicates list {package-name} + +## Now update to particular version + +$ yum update-to {package-name}-{version} + +# +#---------------------------------------------- +# +# To display a list of updated software and security fixes + +$ yum list updates + +# +#---------------------------------------------- +# +# To find out whether updates exist for already installed packages + +$ yum check-update + +# +#---------------------------------------------- +# +# To remove a package: + +$ yum remove {package-name} +$ yum erase {package-name} + +# +#---------------------------------------------- +# +# To remove unneeded packages/deps: + +$ yum autoremove + +# +#---------------------------------------------- +# +# To search for a package: + +$ yum search {package-name} + +# +#---------------------------------------------- +# +# To find what package installs a program: + +$ yum whatprovides </path/to/program> + +# +#---------------------------------------------- +# +# To find the dependencies of a package: + +$ yum deplist {package-name} + +# +#---------------------------------------------- +# +# To find information about a package: + +$ yum info {package-name} + +# +#---------------------------------------------- +# +# List all installed packages + +$ yum list installed + +# +#---------------------------------------------- +# +# List packages containing a certain keyword: + +$ yum list <package_name_or_word_to_search> + +# +#---------------------------------------------- +# +# To download the source RPM for a package: + +$ yumdownloader --source {package-name} + +# (You have to install yumdownloader first, which is installed by the yum-utils package) +# +#---------------------------------------------- +# +# Clean Yum Cache + +$ yum clean all + +## To check local rpm database for problems + +$ yum check + +# +#---------------------------------------------- +# +# List currently enabled repositories: + +$ yum repolist + +# +#---------------------------------------------- +# +# To see info about enabled repositories: + +$ yum repoinfo {repo-name} + +# +#---------------------------------------------- +# +# To work with a given repository: + +$ yum repo-pkgs {repo-name} <list|installed|remove|upgrade|reinstall|info> {package-name} + +# +#---------------------------------------------- +# +# To add a yum repo + +$ yum-config-manager --add-repo {repo-url} + +# +#---------------------------------------------- +# +# To enable a yum repo + +$ yum-config-manager --enable {repo-id} + +## use `yum repolist all` to list all repo ids. + +# +#---------------------------------------------- +# +# To disable a yum repo + +$ yum-config-manager --disable {repo-id} + +# +#---------------------------------------------- +# +# To view yum history + +$ yum history + +or + +$ yum history list + +# Lots of things that you can do with this. Checkout +# https://www.cyberciti.biz/faq/yum-history-command/ + +# +#---------------------------------------------- +# +# To list available groups from all yum repos. +# + +$ yum groups list + +or + +$ yum grouplist + +# +#---------------------------------------------- +# +# To view group description/list of packages it contains etc. +# + +$ yum groups info "GROUP NAME" + +# +#---------------------------------------------- +# +# To install a group of packages +# + +$ yum groups install "GROUP NAME" + +# +#---------------------------------------------- +# +# To remove a group of packages +# + +$ yum groups remove "GROUP NAME" + +# +#---------------------------------------------- diff --git a/.cht.sh/history b/.cht.sh/history new file mode 100644 index 0000000..9313170 --- /dev/null +++ b/.cht.sh/history @@ -0,0 +1,10 @@ +help +go reverse a list +python random list elements +python list random elements +cd python +python +random +dictionary comprehension +help +exit diff --git a/.config/afew/config b/.config/afew/config new file mode 100644 index 0000000..4fdb8cd --- /dev/null +++ b/.config/afew/config @@ -0,0 +1,7 @@ +# This is the default filter chain +[SpamFilter] +[KillThreadsFilter] +[ListMailsFilter] +[ArchiveSentMailsFilter] +[InboxFilter] + diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml new file mode 100644 index 0000000..944ecf0 --- /dev/null +++ b/.config/alacritty/alacritty.yml @@ -0,0 +1,648 @@ +# Colors (One Darker) +colors: + # Default colors + primary: + background: "#1e2127" + foreground: "#abb2bf" + # + # Normal colors + normal: + black: "#1e2127" + red: "#e06c75" + green: "#98c379" + yellow: "#d19a66" + blue: "#61afef" + magenta: "#c678dd" + cyan: "#56b6c2" + white: "#abb2bf" + + # Bright colors + bright: + black: "#5c6370" + red: "#e06c75" + green: "#98c379" + yellow: "#d19a66" + blue: "#61afef" + magenta: "#c678dd" + cyan: "#56b6c2" + white: "#ffffff" + +background_opacity: 0.9 + +font: + normal: + family: "monospace" + style: Regular + bold: + family: "monospace" + style: Bold + italic: + family: "monospace" + style: Italic + bold_italic: + family: "monospace" + style: Bold Italic + + # Point size + size: 10.0 + + offset: + x: -1 + y: -1 + +window: + padding: + x: 2 + y: 2 + +scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + multiplier: 10 + +# If `true`, bold text is drawn using the bright color variants. +draw_bold_text_with_bright_colors: true + +selection: + semantic_escape_chars: ',│`|:"'' ()[]{}<>' + + # When set to `true`, selected text will be copied to both the primary and + # the selection clipboard. Otherwise, it will only be copied to the selection + # clipboard. + save_to_clipboard: true + +# Live config reload (changes require restart) +live_config_reload: true + +key_bindings: + - { key: V, mods: Control|Shift, action: Paste } + - { key: C, mods: Control|Shift, action: Copy } + - { key: Key0, mods: Control, action: ResetFontSize } + - { key: Equals, mods: Control, action: IncreaseFontSize } + - { key: Add, mods: Control, action: IncreaseFontSize } + - { key: Subtract, mods: Control, action: DecreaseFontSize } + - { key: Minus, mods: Control, action: DecreaseFontSize } +# Configuration for Alacritty, the GPU enhanced terminal emulator. + +# Any items in the `env` entry below will be added as +# environment variables. Some entries may override variables +# set by alacritty itself. +env: + # TERM variable + # + # This value is used to set the `$TERM` environment variable for + # each instance of Alacritty. If it is not present, alacritty will + # check the local terminfo database and use `alacritty` if it is + # available, otherwise `xterm-256color` is used. + TERM: alacritty + +#window: + # Window dimensions (changes require restart) + # + # Specified in number of columns/lines, not pixels. + # If both are `0`, this setting is ignored. + #dimensions: + # columns: 0 + # lines: 0 + + # Window position (changes require restart) + # + # Specified in number of pixels. + # If the position is not set, the window manager will handle the placement. + #position: + # x: 0 + # y: 0 + + # Window padding (changes require restart) + # + # Blank space added around the window in pixels. This padding is scaled + # by DPI and the specified value is always added at both opposing sides. + #padding: + # x: 0 + # y: 0 + + # Spread additional padding evenly around the terminal content. + #dynamic_padding: false + + # Window decorations + # + # Values for `decorations`: + # - full: Borders and title bar + # - none: Neither borders nor title bar + # + # Values for `decorations` (macOS only): + # - transparent: Title bar, transparent background and title bar buttons + # - buttonless: Title bar, transparent background, but no title bar buttons + #decorations: full + + # Startup Mode (changes require restart) + # + # Values for `startup_mode`: + # - Windowed + # - Maximized + # - Fullscreen + # + # Values for `startup_mode` (macOS only): + # - SimpleFullscreen + #startup_mode: Windowed + + # Window title + #title: Alacritty + + # Window class (Linux/BSD only): + #class: + # Application instance name + # instance: Alacritty + # General application class + #general: Alacritty + + # GTK theme variant (Linux/BSD only) + # + # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`. + # Set this to `None` to use the default theme variant. + #gtk_theme_variant: None + +#scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + #history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + #multiplier: 3 + +# Font configuration +#font: + # Normal (roman) font face + #normal: + # Font family + # + # Default: + # - (macOS) Menlo + # - (Linux/BSD) monospace + # - (Windows) Consolas + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Regular + + # Bold font face + #bold: + # Font family + # + # If the bold family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Bold + + # Italic font face + #italic: + # Font family + # + # If the italic family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Italic + + # Bold italic font face + #bold_italic: + # Font family + # + # If the bold italic family is not specified, it will fall back to the + # value specified for the normal font. + #family: monospace + + # The `style` can be specified to pick a specific face. + #style: Bold Italic + + # Point size + #size: 11.0 + + # Offset is the extra space around each character. `offset.y` can be thought of + # as modifying the line spacing, and `offset.x` as modifying the letter spacing. + #offset: + # x: 0 + # y: 0 + + # Glyph offset determines the locations of the glyphs within their cells with + # the default being at the bottom. Increasing `x` moves the glyph to the right, + # increasing `y` moves the glyph upwards. + #glyph_offset: + # x: 0 + # y: 0 + + # Thin stroke font rendering (macOS only) + # + # Thin strokes are suitable for retina displays, but for non-retina screens + # it is recommended to set `use_thin_strokes` to `false` + # + # macOS >= 10.14.x: + # + # If the font quality on non-retina display looks bad then set + # `use_thin_strokes` to `true` and enable font smoothing by running the + # following command: + # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO` + # + # This is a global setting and will require a log out or restart to take + # effect. + #use_thin_strokes: true + +# If `true`, bold text is drawn using the bright color variants. +#draw_bold_text_with_bright_colors: false + +# Colors (Tomorrow Night Bright) +#colors: + # Default colors + #primary: + # background: '#000000' + # foreground: '#eaeaea' + + # Bright and dim foreground colors + # + # The dimmed foreground color is calculated automatically if it is not present. + # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors` + # is `false`, the normal foreground color will be used. + #dim_foreground: '#9a9a9a' + #bright_foreground: '#ffffff' + + # Cursor colors + # + # Colors which should be used to draw the terminal cursor. If these are unset, + # the cursor color will be the inverse of the cell color. + #cursor: + # text: '#000000' + # cursor: '#ffffff' + + # Selection colors + # + # Colors which should be used to draw the selection area. If selection + # background is unset, selection color will be the inverse of the cell colors. + # If only text is unset the cell text color will remain the same. + #selection: + # text: '#eaeaea' + # background: '#404040' + + # Normal colors + #normal: + # black: '#000000' + # red: '#d54e53' + # green: '#b9ca4a' + # yellow: '#e6c547' + # blue: '#7aa6da' + # magenta: '#c397d8' + # cyan: '#70c0ba' + # white: '#eaeaea' + + # Bright colors + #bright: + # black: '#666666' + # red: '#ff3334' + # green: '#9ec400' + # yellow: '#e7c547' + # blue: '#7aa6da' + # magenta: '#b77ee0' + # cyan: '#54ced6' + # white: '#ffffff' + + # Dim colors + # + # If the dim colors are not set, they will be calculated automatically based + # on the `normal` colors. + #dim: + # black: '#000000' + # red: '#8c3336' + # green: '#7a8530' + # yellow: '#97822e' + # blue: '#506d8f' + # magenta: '#80638e' + # cyan: '#497e7a' + # white: '#9a9a9a' + + # Indexed Colors + # + # The indexed colors include all colors from 16 to 256. + # When these are not set, they're filled with sensible defaults. + # + # Example: + # `- { index: 16, color: '#ff00ff' }` + # + #indexed_colors: [] + +# Visual Bell +# +# Any time the BEL code is received, Alacritty "rings" the visual bell. Once +# rung, the terminal background will be set to white and transition back to the +# default background color. You can control the rate of this transition by +# setting the `duration` property (represented in milliseconds). You can also +# configure the transition function by setting the `animation` property. +# +# Values for `animation`: +# - Ease +# - EaseOut +# - EaseOutSine +# - EaseOutQuad +# - EaseOutCubic +# - EaseOutQuart +# - EaseOutQuint +# - EaseOutExpo +# - EaseOutCirc +# - Linear +# +# Specifying a `duration` of `0` will disable the visual bell. +#visual_bell: +# animation: EaseOutExpo +# duration: 0 +# color: '#ffffff' + +# Background opacity +# +# Window opacity as a floating point number from `0.0` to `1.0`. +# The value `0.0` is completely transparent and `1.0` is opaque. +#background_opacity: 1.0 + +#selection: + #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" + + # When set to `true`, selected text will be copied to the primary clipboard. + #save_to_clipboard: false + +# Allow terminal applications to change Alacritty's window title. +#dynamic_title: true + +#cursor: + # Cursor style + # + # Values for `style`: + # - ▇ Block + # - _ Underline + # - | Beam + #style: Block + + # If this is `true`, the cursor will be rendered as a hollow box when the + # window is not focused. + #unfocused_hollow: true + +# Live config reload (changes require restart) +#live_config_reload: true + +# Shell +# +# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`. +# Entries in `shell.args` are passed unmodified as arguments to the shell. +# +# Default: +# - (macOS) /bin/bash --login +# - (Linux/BSD) user login shell +# - (Windows) powershell +shell: + program: /bin/zsh + args: + - --login + +# Startup directory +# +# Directory the shell is started in. If this is unset, or `None`, the working +# directory of the parent process will be used. +#working_directory: None + +# WinPTY backend (Windows only) +# +# Alacritty defaults to using the newer ConPTY backend if it is available, +# since it resolves a lot of bugs and is quite a bit faster. If it is not +# available, the the WinPTY backend will be used instead. +# +# Setting this option to `true` makes Alacritty use the legacy WinPTY backend, +# even if the ConPTY backend is available. +#winpty_backend: false + +# Send ESC (\x1b) before characters when alt is pressed. +#alt_send_esc: true + +#mouse: + # Click settings + # + # The `double_click` and `triple_click` settings control the time + # alacritty should wait for accepting multiple clicks as one double + # or triple click. + #double_click: { threshold: 300 } + #triple_click: { threshold: 300 } + + # If this is `true`, the cursor is temporarily hidden when typing. + #hide_when_typing: false + + url: + # URL launcher + # + # This program is executed when clicking on a text which is recognized as a URL. + # The URL is always added to the command as the last parameter. + # + # When set to `None`, URL launching will be disabled completely. + # + Default: + # - (macOS) open + - (Linux/BSD) xdg-open + # - (Windows) explorer + #launcher: + #program: xdg-open + #args: [] + + # URL modifiers + # + # These are the modifiers that need to be held down for opening URLs when clicking + # on them. The available modifiers are documented in the key binding section. + #modifiers: None + +# Mouse bindings +# +# Mouse bindings are specified as a list of objects, much like the key +# bindings further below. +# +# To trigger mouse bindings when an application running within Alacritty captures the mouse, the +# `Shift` modifier is automatically added as a requirement. +# +# Each mouse binding will specify a: +# +# - `mouse`: +# +# - Middle +# - Left +# - Right +# - Numeric identifier such as `5` +# +# - `action` (see key bindings) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, action: PasteSelection } + +# Key bindings +# +# Key bindings are specified as a list of objects. For example, this is the +# default paste binding: +# +# `- { key: V, mods: Control|Shift, action: Paste }` +# +# Each key binding will specify a: +# +# - `key`: Identifier of the key pressed +# +# - A-Z +# - F1-F24 +# - Key0-Key9 +# +# A full list with available key codes can be found here: +# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants +# +# Instead of using the name of the keys, the `key` field also supports using +# the scancode of the desired key. Scancodes have to be specified as a +# decimal number. This command will allow you to display the hex scancodes +# for certain keys: +# +# `showkey --scancodes`. +# +# Then exactly one of: +# +# - `chars`: Send a byte sequence to the running application +# +# The `chars` field writes the specified string to the terminal. This makes +# it possible to pass escape sequences. To find escape codes for bindings +# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside +# of tmux. Note that applications use terminfo to map escape sequences back +# to keys. It is therefore required to update the terminfo when changing an +# escape sequence. +# +# - `action`: Execute a predefined action +# +# - Copy +# - Paste +# - PasteSelection +# - IncreaseFontSize +# - DecreaseFontSize +# - ResetFontSize +# - ScrollPageUp +# - ScrollPageDown +# - ScrollLineUp +# - ScrollLineDown +# - ScrollToTop +# - ScrollToBottom +# - ClearHistory +# - Hide +# - Minimize +# - Quit +# - ToggleFullscreen +# - SpawnNewInstance +# - ClearLogNotice +# - ReceiveChar +# - None +# +# (macOS only): +# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space +# +# - `command`: Fork and execute a specified command plus arguments +# +# The `command` field must be a map containing a `program` string and an +# `args` array of command line parameter strings. For example: +# `{ program: "alacritty", args: ["-e", "vttest"] }` +# +# And optionally: +# +# - `mods`: Key modifiers to filter binding actions +# +# - Command +# - Control +# - Option +# - Super +# - Shift +# - Alt +# +# Multiple `mods` can be combined using `|` like this: +# `mods: Control|Shift`. +# Whitespace and capitalization are relevant and must match the example. +# +# - `mode`: Indicate a binding for only specific terminal reported modes +# +# This is mainly used to send applications the correct escape sequences +# when in different modes. +# +# - AppCursor +# - AppKeypad +# - Alt +# +# A `~` operator can be used before a mode to apply the binding whenever +# the mode is *not* active, e.g. `~Alt`. +# +# Bindings are always filled by default, but will be replaced when a new +# binding with the same triggers is defined. To unset a default binding, it can +# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for +# a no-op if you do not wish to receive input characters for that binding. +# +# If the same trigger is assigned to multiple actions, all of them are executed +# at once. +#key_bindings: + # (Windows, Linux, and BSD only) + #- { key: V, mods: Control|Shift, action: Paste } + #- { key: C, mods: Control|Shift, action: Copy } + #- { key: Insert, mods: Shift, action: PasteSelection } + #- { key: Key0, mods: Control, action: ResetFontSize } + #- { key: Equals, mods: Control, action: IncreaseFontSize } + #- { key: Add, mods: Control, action: IncreaseFontSize } + #- { key: Subtract, mods: Control, action: DecreaseFontSize } + #- { key: Minus, mods: Control, action: DecreaseFontSize } + + # (Windows only) + #- { key: Return, mods: Alt, action: ToggleFullscreen } + + # (macOS only) + #- { key: Key0, mods: Command, action: ResetFontSize } + #- { key: Equals, mods: Command, action: IncreaseFontSize } + #- { key: Add, mods: Command, action: IncreaseFontSize } + #- { key: Minus, mods: Command, action: DecreaseFontSize } + #- { key: K, mods: Command, action: ClearHistory } + #- { key: K, mods: Command, chars: "\x0c" } + #- { key: V, mods: Command, action: Paste } + #- { key: C, mods: Command, action: Copy } + #- { key: H, mods: Command, action: Hide } + #- { key: M, mods: Command, action: Minimize } + #- { key: Q, mods: Command, action: Quit } + #- { key: W, mods: Command, action: Quit } + #- { key: F, mods: Command|Control, action: ToggleFullscreen } + + #- { key: Paste, action: Paste } + #- { key: Copy, action: Copy } + #- { key: L, mods: Control, action: ClearLogNotice } + #- { key: L, mods: Control, chars: "\x0c" } + #- { key: PageUp, mods: Shift, action: ScrollPageUp, mode: ~Alt } + #- { key: PageDown, mods: Shift, action: ScrollPageDown, mode: ~Alt } + #- { key: Home, mods: Shift, action: ScrollToTop, mode: ~Alt } + #- { key: End, mods: Shift, action: ScrollToBottom, mode: ~Alt } + +#debug: + # Display the time it takes to redraw each frame. + #render_timer: false + + # Keep the log file after quitting Alacritty. + #persistent_logging: false + + # Log level + # + # Values for `log_level`: + # - None + # - Error + # - Warn + # - Info + # - Debug + # - Trace + #log_level: Warn + + # Print all received window events. + #print_events: false diff --git a/.config/alacritty/alacritty.yml.orig b/.config/alacritty/alacritty.yml.orig new file mode 100644 index 0000000..b2c6d37 --- /dev/null +++ b/.config/alacritty/alacritty.yml.orig @@ -0,0 +1,88 @@ +# Colors (One Darker) +colors: + # Default colors + primary: + background: "#1e2127" + foreground: "#abb2bf" + # + # Normal colors + normal: + black: "#1e2127" + red: "#e06c75" + green: "#98c379" + yellow: "#d19a66" + blue: "#61afef" + magenta: "#c678dd" + cyan: "#56b6c2" + white: "#abb2bf" + + # Bright colors + bright: + black: "#5c6370" + red: "#e06c75" + green: "#98c379" + yellow: "#d19a66" + blue: "#61afef" + magenta: "#c678dd" + cyan: "#56b6c2" + white: "#ffffff" + +background_opacity: 0.8 + +font: + normal: + family: "Hack" + style: Regular + bold: + family: "Hack" + style: Bold + italic: + family: "Hack" + style: Italic + bold_italic: + family: "Hack" + style: Bold Italic + + # Point size + size: 12.0 + + offset: + x: 0 + y: 0 + +window: + padding: + x: 2 + y: 2 + +scrolling: + # Maximum number of lines in the scrollback buffer. + # Specifying '0' will disable scrolling. + history: 10000 + + # Number of lines the viewport will move for every line scrolled when + # scrollback is enabled (history > 0). + multiplier: 10 + +# If `true`, bold text is drawn using the bright color variants. +draw_bold_text_with_bright_colors: true + +selection: + semantic_escape_chars: ',│`|:"'' ()[]{}<>' + + # When set to `true`, selected text will be copied to both the primary and + # the selection clipboard. Otherwise, it will only be copied to the selection + # clipboard. + save_to_clipboard: true + +# Live config reload (changes require restart) +live_config_reload: true + +key_bindings: + - { key: V, mods: Control|Shift, action: Paste } + - { key: C, mods: Control|Shift, action: Copy } + - { key: Key0, mods: Control, action: ResetFontSize } + - { key: Equals, mods: Control, action: IncreaseFontSize } + - { key: Add, mods: Control, action: IncreaseFontSize } + - { key: Subtract, mods: Control, action: DecreaseFontSize } + - { key: Minus, mods: Control, action: DecreaseFontSize } diff --git a/.config/bashtop/bashtop.cfg b/.config/bashtop/bashtop.cfg new file mode 100644 index 0000000..e9d61d9 --- /dev/null +++ b/.config/bashtop/bashtop.cfg @@ -0,0 +1,30 @@ +#? Config file for bashtop v. 0.8.16 + +#* Color theme, looks for a .theme file in "$HOME/.config/bashtop/themes", "Default" for builtin default theme +color_theme="solarized_dark" + +#* Update time in milliseconds, increases automatically if set below internal loops processing time, recommended 2000 ms or above for better sample times for graphs +update_ms="2500" + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu responsive" +#* "cpu lazy" updates sorting over time, "cpu responsive" updates sorting directly at a cpu usage cost +proc_sorting="cpu lazy" + +#* Reverse sorting order, "true" or "false" +proc_reversed="false" + +#* Check cpu temperature, only works if "sensors" command is available and have values for "Package" and "Core" +check_temp="true" + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable +draw_clock="%X" + +#* Update main ui when menus are showing, set this to false if the menus is flickering too much for comfort +background_update="true" + +#* Custom cpu model name, empty string to disable +custom_cpu_name="" + +#* Enable error logging to "$HOME/.config/bashtop/error.log", "true" or "false" +error_logging="true" + diff --git a/.config/bashtop/error.log b/.config/bashtop/error.log new file mode 100644 index 0000000..a8cec60 --- /dev/null +++ b/.config/bashtop/error.log @@ -0,0 +1,11 @@ + +New instance of bashtop version: 0.8.16 Pid: 4890 +RTNETLINK answers: Network is unreachable +16:34:28 ERROR: On line 237 +16:34:28 ERROR: On line 237 +/bin/bashtop: line 950: net_history_upload: bad array subscript +16:34:31 ERROR: On line 1260 +/bin/bashtop: line 950: net_history_upload: bad array subscript +16:34:34 ERROR: On line 1260 (MUTED!) +/bin/bashtop: line 950: net_history_upload: bad array subscript +/bin/bashtop: line 950: net_history_upload: bad array subscript diff --git a/.config/bashtop/themes/default_black.theme b/.config/bashtop/themes/default_black.theme new file mode 100644 index 0000000..3a590a7 --- /dev/null +++ b/.config/bashtop/themes/default_black.theme @@ -0,0 +1,89 @@ +#Bashtop theme with default colors and black background +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#00" + +# Main text color +theme[main_fg]="#cc" + +# Title color for boxes +theme[title]="#ee" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#90" + +# Background color of selected item in processes box +theme[selected_bg]="#7e2626" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ee" + +# Color of inactive/disabled text +theme[inactive_fg]="#40" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#0de756" + +# Cpu box outline color +theme[cpu_box]="#3d7b46" + +# Memory/disks box outline color +theme[mem_box]="#8a882e" + +# Net up/down box outline color +theme[net_box]="#423ba5" + +# Processes box outline color +theme[proc_box]="#923535" + +# Box divider line and small boxes line color +theme[div_line]="#30" + +# Temperature graph colors +theme[temp_start]="#4897d4" +theme[temp_mid]="#5474e8" +theme[temp_end]="#ff40b6" + +# CPU graph colors +theme[cpu_start]="#50f095" +theme[cpu_mid]="#f2e266" +theme[cpu_end]="#fa1e1e" + +# Mem/Disk free meter +theme[free_start]="#223014" +theme[free_mid]="#b5e685" +theme[free_end]="#dcff85" + +# Mem/Disk cached meter +theme[cached_start]="#0b1a29" +theme[cached_mid]="#74e6fc" +theme[cached_end]="#26c5ff" + +# Mem/Disk available meter +theme[available_start]="#292107" +theme[available_mid]="#ffd77a" +theme[available_end]="#ffb814" + +# Mem/Disk used meter +theme[used_start]="#3b1f1c" +theme[used_mid]="#d9626d" +theme[used_end]="#ff4769" + +# Download graph colors +theme[download_start]="#231a63" +theme[download_mid]="#4f43a3" +theme[download_end]="#b0a9de" + +# Upload graph colors +theme[upload_start]="#510554" +theme[upload_mid]="#7d4180" +theme[upload_end]="#dcafde"
\ No newline at end of file diff --git a/.config/bashtop/themes/flat-remix-light.theme b/.config/bashtop/themes/flat-remix-light.theme new file mode 100644 index 0000000..51a25d1 --- /dev/null +++ b/.config/bashtop/themes/flat-remix-light.theme @@ -0,0 +1,89 @@ +#Bashtop theme with flat-remix colors +#by Daniel Ruiz de Alegría <daniel@drasite.com> + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="#737680" + +# Title color for boxes +theme[title]="#272a34" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#90" + +# Background color of selected item in processes box +theme[selected_bg]="#b8174c" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ff" + +# Color of inactive/disabled text +theme[inactive_fg]="#40" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#367bf0" + +# Cpu box outline color +theme[cpu_box]="#367bf0" + +# Memory/disks box outline color +theme[mem_box]="#19a187" + +# Net up/down box outline color +theme[net_box]="#fd3535" + +# Processes box outline color +theme[proc_box]="#4aaee6" + +# Box divider line and small boxes line color +theme[div_line]="#50" + +# Temperature graph colors +theme[temp_start]="#367bf0" +theme[temp_mid]="#b8174c" +theme[temp_end]="#d41919" + +# CPU graph colors +theme[cpu_start]="#367bf0" +theme[cpu_mid]="#4aaee6" +theme[cpu_end]="#54bd8e" + +# Mem/Disk free meter +theme[free_start]="#811035" +theme[free_mid]="#b8174c" +theme[free_end]="#d41919" + +# Mem/Disk cached meter +theme[cached_start]="#2656a8" +theme[cached_mid]="#4aaee6" +theme[cached_end]="#23bac2" + +# Mem/Disk available meter +theme[available_start]="#fea44c" +theme[available_mid]="#fd7d00" +theme[available_end]="#fe7171" + +# Mem/Disk used meter +theme[used_start]="#12715f" +theme[used_mid]="#19a187" +theme[used_end]="#23bac2" + +# Download graph colors +theme[download_start]="#367bf0" +theme[download_mid]="#19a187" +theme[download_end]="#4aaee6" + +# Upload graph colors +theme[upload_start]="#8c42ab" +theme[upload_mid]="#b8174c" +theme[upload_end]="#d41919" diff --git a/.config/bashtop/themes/flat-remix.theme b/.config/bashtop/themes/flat-remix.theme new file mode 100644 index 0000000..54585e7 --- /dev/null +++ b/.config/bashtop/themes/flat-remix.theme @@ -0,0 +1,89 @@ +#Bashtop theme with flat-remix colors +#by Daniel Ruiz de Alegría <daniel@drasite.com> + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="#E6E6E6" + +# Title color for boxes +theme[title]="#ff" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#90" + +# Background color of selected item in processes box +theme[selected_bg]="#b8174c" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ff" + +# Color of inactive/disabled text +theme[inactive_fg]="#40" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#367bf0" + +# Cpu box outline color +theme[cpu_box]="#367bf0" + +# Memory/disks box outline color +theme[mem_box]="#19a187" + +# Net up/down box outline color +theme[net_box]="#fd3535" + +# Processes box outline color +theme[proc_box]="#4aaee6" + +# Box divider line and small boxes line color +theme[div_line]="#50" + +# Temperature graph colors +theme[temp_start]="#367bf0" +theme[temp_mid]="#b8174c" +theme[temp_end]="#d41919" + +# CPU graph colors +theme[cpu_start]="#367bf0" +theme[cpu_mid]="#4aaee6" +theme[cpu_end]="#54bd8e" + +# Mem/Disk free meter +theme[free_start]="#811035" +theme[free_mid]="#b8174c" +theme[free_end]="#d41919" + +# Mem/Disk cached meter +theme[cached_start]="#2656a8" +theme[cached_mid]="#4aaee6" +theme[cached_end]="#23bac2" + +# Mem/Disk available meter +theme[available_start]="#fea44c" +theme[available_mid]="#fd7d00" +theme[available_end]="#fe7171" + +# Mem/Disk used meter +theme[used_start]="#12715f" +theme[used_mid]="#19a187" +theme[used_end]="#23bac2" + +# Download graph colors +theme[download_start]="#367bf0" +theme[download_mid]="#19a187" +theme[download_end]="#4aaee6" + +# Upload graph colors +theme[upload_start]="#8c42ab" +theme[upload_mid]="#b8174c" +theme[upload_end]="#d41919" diff --git a/.config/bashtop/themes/greyscale.theme b/.config/bashtop/themes/greyscale.theme new file mode 100644 index 0000000..442a82f --- /dev/null +++ b/.config/bashtop/themes/greyscale.theme @@ -0,0 +1,89 @@ +#Bashtop grayscale theme +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#00" + +# Main text color +theme[main_fg]="#bb" + +# Title color for boxes +theme[title]="#cc" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#90" + +# Background color of selected item in processes box +theme[selected_bg]="#ff" + +# Foreground color of selected item in processes box +theme[selected_fg]="#00" + +# Color of inactive/disabled text +theme[inactive_fg]="#30" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#90" + +# Cpu box outline color +theme[cpu_box]="#90" + +# Memory/disks box outline color +theme[mem_box]="#90" + +# Net up/down box outline color +theme[net_box]="#90" + +# Processes box outline color +theme[proc_box]="#90" + +# Box divider line and small boxes line color +theme[div_line]="#30" + +# Temperature graph colors +theme[temp_start]="#50" +theme[temp_mid]="" +theme[temp_end]="#ff" + +# CPU graph colors +theme[cpu_start]="#50" +theme[cpu_mid]="" +theme[cpu_end]="#ff" + +# Mem/Disk free meter +theme[free_start]="#50" +theme[free_mid]="" +theme[free_end]="#ff" + +# Mem/Disk cached meter +theme[cached_start]="#50" +theme[cached_mid]="" +theme[cached_end]="#ff" + +# Mem/Disk available meter +theme[available_start]="#50" +theme[available_mid]="" +theme[available_end]="#ff" + +# Mem/Disk used meter +theme[used_start]="#50" +theme[used_mid]="" +theme[used_end]="#ff" + +# Download graph colors +theme[download_start]="#30" +theme[download_mid]="" +theme[download_end]="#ff" + +# Upload graph colors +theme[upload_start]="#30" +theme[upload_mid]="" +theme[upload_end]="#ff"
\ No newline at end of file diff --git a/.config/bashtop/themes/gruvbox_dark.theme b/.config/bashtop/themes/gruvbox_dark.theme new file mode 100644 index 0000000..0399b03 --- /dev/null +++ b/.config/bashtop/themes/gruvbox_dark.theme @@ -0,0 +1,89 @@ +#Bashtop gruvbox (https://github.com/morhetz/gruvbox) theme +#by BachoSeven + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#1d2021" + +# Main text color +theme[main_fg]="#a89984" + +# Title color for boxes +theme[title]="#ebdbb2" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#d79921" + +# Background color of selected items +theme[selected_bg]="#282828" + +# Foreground color of selected items +theme[selected_fg]="#fabd2f" + +# Color of inactive/disabled text +theme[inactive_fg]="#282828" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#98971a" + +# Cpu box outline color +theme[cpu_box]="#a89984" + +# Memory/disks box outline color +theme[mem_box]="#a89984" + +# Net up/down box outline color +theme[net_box]="#a89984" + +# Processes box outline color +theme[proc_box]="#a89984" + +# Box divider line and small boxes line color +theme[div_line]="#a89984" + +# Temperature graph colors +theme[temp_start]="#458588" +theme[temp_mid]="#d3869b" +theme[temp_end]="#fb4394" + +# CPU graph colors +theme[cpu_start]="#b8bb26" +theme[cpu_mid]="#d79921" +theme[cpu_end]="#fb4934" + +# Mem/Disk free meter +theme[free_start]="#4e5900" +theme[free_mid]="" +theme[free_end]="#98971a" + +# Mem/Disk cached meter +theme[cached_start]="#458588" +theme[cached_mid]="" +theme[cached_end]="#83a598" + +# Mem/Disk available meter +theme[available_start]="#d79921" +theme[available_mid]="" +theme[available_end]="#fabd2f" + +# Mem/Disk used meter +theme[used_start]="#cc241d" +theme[used_mid]="" +theme[used_end]="#fb4934" + +# Download graph colors +theme[download_start]="#3d4070" +theme[download_mid]="#6c71c4" +theme[download_end]="#a3a8f7" + +# Upload graph colors +theme[upload_start]="#701c45" +theme[upload_mid]="#b16286" +theme[upload_end]="#d3869b" diff --git a/.config/bashtop/themes/monokai.theme b/.config/bashtop/themes/monokai.theme new file mode 100644 index 0000000..b539402 --- /dev/null +++ b/.config/bashtop/themes/monokai.theme @@ -0,0 +1,89 @@ +#Bashtop monokai theme +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#272822" + +# Main text color +theme[main_fg]="#F8F8F2" + +# Title color for boxes +theme[title]="#F8F8F2" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#F92672" + +# Background color of selected item in processes box +theme[selected_bg]="#7a1137" + +# Foreground color of selected item in processes box +theme[selected_fg]="#F8F8F2" + +# Color of inactive/disabled text +theme[inactive_fg]="#595647" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#A6E22E" + +# Cpu box outline color +theme[cpu_box]="#75715E" + +# Memory/disks box outline color +theme[mem_box]="#75715E" + +# Net up/down box outline color +theme[net_box]="#75715E" + +# Processes box outline color +theme[proc_box]="#75715E" + +# Box divider line and small boxes line color +theme[div_line]="#595647" + +# Temperature graph colors +theme[temp_start]="#F8F8F2" +theme[temp_mid]="" +theme[temp_end]="#F92672" + +# CPU graph colors +theme[cpu_start]="#F8F8F2" +theme[cpu_mid]="#b05475" +theme[cpu_end]="#F92672" + +# Mem/Disk free meter +theme[free_start]="#75715E" +theme[free_mid]="a9c474" +theme[free_end]="#e2f5bc" + +# Mem/Disk cached meter +theme[cached_start]="#75715E" +theme[cached_mid]="#66D9EF" +theme[cached_end]="#aae7f2" + +# Mem/Disk available meter +theme[available_start]="#75715E" +theme[available_mid]="#E6DB74" +theme[available_end]="#f2ecb6" + +# Mem/Disk used meter +theme[used_start]="#75715E" +theme[used_mid]="#F92672" +theme[used_end]="#ff87b2" + +# Download graph colors +theme[download_start]="#2d2042" +theme[download_mid]="#7352a8" +theme[download_end]="#ccaefc" + +# Upload graph colors +theme[upload_start]="#570d33" +theme[upload_mid]="#cf277d" +theme[upload_end]="#fa91c7"
\ No newline at end of file diff --git a/.config/bashtop/themes/monokai_nobg.theme b/.config/bashtop/themes/monokai_nobg.theme new file mode 100644 index 0000000..ab8d483 --- /dev/null +++ b/.config/bashtop/themes/monokai_nobg.theme @@ -0,0 +1,89 @@ +#Bashtop monokai theme no background version +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="#F8F8F2" + +# Title color for boxes +theme[title]="#F8F8F2" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#F92672" + +# Background color of selected item in processes box +theme[selected_bg]="#7a1137" + +# Foreground color of selected item in processes box +theme[selected_fg]="#F8F8F2" + +# Color of inactive/disabled text +theme[inactive_fg]="#595647" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#A6E22E" + +# Cpu box outline color +theme[cpu_box]="#75715E" + +# Memory/disks box outline color +theme[mem_box]="#75715E" + +# Net up/down box outline color +theme[net_box]="#75715E" + +# Processes box outline color +theme[proc_box]="#75715E" + +# Box divider line and small boxes line color +theme[div_line]="#595647" + +# Temperature graph colors +theme[temp_start]="#F8F8F2" +theme[temp_mid]="" +theme[temp_end]="#F92672" + +# CPU graph colors +theme[cpu_start]="#F8F8F2" +theme[cpu_mid]="#b05475" +theme[cpu_end]="#F92672" + +# Mem/Disk free meter +theme[free_start]="#75715E" +theme[free_mid]="a9c474" +theme[free_end]="#e2f5bc" + +# Mem/Disk cached meter +theme[cached_start]="#75715E" +theme[cached_mid]="#66D9EF" +theme[cached_end]="#aae7f2" + +# Mem/Disk available meter +theme[available_start]="#75715E" +theme[available_mid]="#E6DB74" +theme[available_end]="#f2ecb6" + +# Mem/Disk used meter +theme[used_start]="#75715E" +theme[used_mid]="#F92672" +theme[used_end]="#ff87b2" + +# Download graph colors +theme[download_start]="#2d2042" +theme[download_mid]="#7352a8" +theme[download_end]="#ccaefc" + +# Upload graph colors +theme[upload_start]="#570d33" +theme[upload_mid]="#cf277d" +theme[upload_end]="#fa91c7"
\ No newline at end of file diff --git a/.config/bashtop/themes/solarized_dark.theme b/.config/bashtop/themes/solarized_dark.theme new file mode 100644 index 0000000..6069823 --- /dev/null +++ b/.config/bashtop/themes/solarized_dark.theme @@ -0,0 +1,89 @@ +#Bashtop solarized theme +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#002b36" + +# Main text color +theme[main_fg]="#eee8d5" + +# Title color for boxes +theme[title]="#fdf6e3" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#b58900" + +# Background color of selected items +theme[selected_bg]="#073642" + +# Foreground color of selected items +theme[selected_fg]="#d6a200" + +# Color of inactive/disabled text +theme[inactive_fg]="#073642" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#bad600" + +# Cpu box outline color +theme[cpu_box]="#586e75" + +# Memory/disks box outline color +theme[mem_box]="#586e75" + +# Net up/down box outline color +theme[net_box]="#586e75" + +# Processes box outline color +theme[proc_box]="#586e75" + +# Box divider line and small boxes line color +theme[div_line]="#586e75" + +# Temperature graph colors +theme[temp_start]="#268bd2" +theme[temp_mid]="#ccb5f7" +theme[temp_end]="#fc5378" + +# CPU graph colors +theme[cpu_start]="#adc700" +theme[cpu_mid]="#d6a200" +theme[cpu_end]="#e65317" + +# Mem/Disk free meter +theme[free_start]="#4e5900" +theme[free_mid]="" +theme[free_end]="#bad600" + +# Mem/Disk cached meter +theme[cached_start]="#114061" +theme[cached_mid]="" +theme[cached_end]="#268bd2" + +# Mem/Disk available meter +theme[available_start]="#705500" +theme[available_mid]="" +theme[available_end]="#edb400" + +# Mem/Disk used meter +theme[used_start]="#6e1718" +theme[used_mid]="" +theme[used_end]="#e02f30" + +# Download graph colors +theme[download_start]="#3d4070" +theme[download_mid]="#6c71c4" +theme[download_end]="#a3a8f7" + +# Upload graph colors +theme[upload_start]="#701c45" +theme[upload_mid]="#d33682" +theme[upload_end]="#f56caf"
\ No newline at end of file diff --git a/.config/bashtop/themes/whiteout.theme b/.config/bashtop/themes/whiteout.theme new file mode 100644 index 0000000..23c8ebe --- /dev/null +++ b/.config/bashtop/themes/whiteout.theme @@ -0,0 +1,89 @@ +#Bashtop "whiteout" theme +#by aristocratos + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#FFFFFF", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#ff" + +# Main text color +theme[main_fg]="#30" + +# Title color for boxes +theme[title]="#10" + +# Higlight color for keyboard shortcuts +theme[hi_fg]="#284d75" + +# Background color of selected item in processes box +theme[selected_bg]="#15283d" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ff" + +# Color of inactive/disabled text +theme[inactive_fg]="#dd" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#03521d" + +# Cpu box outline color +theme[cpu_box]="#1a361e" + +# Memory/disks box outline color +theme[mem_box]="#3d3c14" + +# Net up/down box outline color +theme[net_box]="#1a1742" + +# Processes box outline color +theme[proc_box]="#3b1515" + +# Box divider line and small boxes line color +theme[div_line]="#80" + +# Temperature graph colors +theme[temp_start]="#184567" +theme[temp_mid]="#122c87" +theme[temp_end]="#9e0061" + +# CPU graph colors +theme[cpu_start]="#0b8e44" +theme[cpu_mid]="#a49104" +theme[cpu_end]="#8d0202" + +# Mem/Disk free meter +theme[free_start]="#b0d090" +theme[free_mid]="#70ba26" +theme[free_end]="#496600" + +# Mem/Disk cached meter +theme[cached_start]="#26c5ff" +theme[cached_mid]="#74e6fc" +theme[cached_end]="#0b1a29" + +# Mem/Disk available meter +theme[available_start]="#ffb814" +theme[available_mid]="#ffd77a" +theme[available_end]="#292107" + +# Mem/Disk used meter +theme[used_start]="#ff4769" +theme[used_mid]="#d9626d" +theme[used_end]="#3b1f1c" + +# Download graph colors +theme[download_start]="#8d82de" +theme[download_mid]="#413786" +theme[download_end]="#130f29" + +# Upload graph colors +theme[upload_start]="#f590f9" +theme[upload_mid]="#722e76" +theme[upload_end]="#2b062d"
\ No newline at end of file diff --git a/.config/castero/castero.conf b/.config/castero/castero.conf new file mode 100644 index 0000000..aaee07e --- /dev/null +++ b/.config/castero/castero.conf @@ -0,0 +1,238 @@ +# castero configuration file +# https://github.com/xgi/castero + + +[client] +# Whether to ask for confirmation before deleting a feed. +# default: False +delete_feed_confirmation = True + +# The minimum number of feeds before the client asks you for confirmation +# after pressing the reload key. +# default: 10 +reload_feeds_threshold = 10 + +# The maximum number of episodes to retain per feed. Set to -1 for no limit. +# default: -1 +max_episodes = -1 + +# Whether to keep episodes in the client even if they are no longer present on +# the feed (i.e. the RSS feed only shows the x most recent episodes). +# default: False +retain_absent_episodes = False + +# Hide vertical borders between menus. +# default: False +disable_vertical_borders = False + +# Whether to remove HTML tags from feed/episode descriptions. +# default: True +clean_html_descriptions = True + +# Whether to right-align the current episode time/duration. +# default: False +right_align_time = False + +# The display refresh delay, in ms. Lower for better responsiveness but higher +# CPU usage. +# default: 70 +refresh_delay = 70 + +# The external player to use for media playback. +# If the given player is not valid or a dependency is not met, the client will +# instead try to use the first valid interface. +# Available players (in order of precedence): +# mpv, vlc +# default: (blank) +player = mpv + + +[feeds] +# Whether to reload/refresh your feeds when the client starts. Depending on how +# many feeds you have, this operation may take a long time. +# default: False +reload_on_start = False + + +[downloads] +# The (absolute) location to save episodes downloaded for offline playback. Set +# to blank or whitespaces to disable -- the client will default to either +# $XDG_DATA_DIR, if set, otherwise ~/.local/share/castero/downloaded +# default: (blank) +custom_download_dir = + +# The timeout for network requests, in seconds. The same value is used for +# connection and read timeouts. +# default: 3 +request_timeout = 3 + + +[colors] +# Available colors for all fields are: +# black, blue, cyan, green, magenta, red, white, yellow, transparent (background), +# integer from -1 to 255 if terminal supports 256 colors +# NOTE: Background transparency only works on compatible terminals with compositing + +# The foreground (text) color of the main interface. +# default: yellow +color_foreground = yellow + +# The background color of the main interface. +# default: black +color_background = black + +# The foreground (text) color of selected items. +# default: black +color_foreground_alt = white + +# The background color of selected items. +# default: white +color_background_alt = black + +# The foreground (text) color of marked items. Paired with color_background. +# default: green +color_foreground_dim = green + +# The foreground (text) color of status lines. Paired with color_background. +# default: white +color_foreground_status = white + +# The foreground (text) color of menu headings. Paired with color_background. +# default: yellow +color_foreground_heading = yellow + +# The foreground (text) color of dividers. Paired with color_background. +# default: white +color_foreground_dividers = white + +[playback] +# The distance to move forward when pressing seek keys, in seconds. +# default: 30 +seek_distance_forward = 30 + +# The distance to move backward when pressing seek keys, in seconds. +# default: 10 +seek_distance_backward = 10 + +# The default playback speed. See also the rate_increase/rate_decrease keys. +# default: 1.0 +default_playback_speed = 1.0 + + +[keys] +# Keybindings for controlling the client. Entries may not be blank, but may +# overlap -- however, only one operation will be performed for each key press. +# Please see this page for a list of available key names: +# https://docs.python.org/3/library/curses.html#constants + +# Show the help menu. +# default: h +key_help = ? + +# Exit the client +# default: q +key_exit = q + +# Add a feed. +# default: a +key_add_feed = a + +# Delete the selected feed. +# default: d +key_delete = d + +# Reload/refresh feeds. +# default: r +key_reload = r + +# Save episode for offline playback. +# default: s +key_save = s + +# Navigate up. +# default: UP +key_up = k + +# Navigate right. +# default: RIGHT +key_right = l + +# Navigate down. +# default: DOWN +key_down = j + +# Navigate left. +# default: LEFT +key_left = h + +# Scroll menu up. +# default: PPAGE +key_scroll_up = K + +# Scroll menu down. +# default: NPAGE +key_scroll_down = J + +# Play selected feed/episode. +# default: ENTER +key_play_selected = ENTER + +# Add selected feed/episode to queue. +# default: SPACE +key_add_selected = SPACE + +# Clear the queue. +# default: c +key_clear = c + +# Go to the next episode in the queue. +# default: n +key_next = n + +# Invert the order of the menu. +# default: i +key_invert = i + +# Filter the contents of the menu. Press again to clear the filter. +# default: / +key_filter = / + +# Mark the episode as played/unplayed. +# default: i +key_mark_played = m + +# Pause/play the current episode. +# default: p +key_pause_play = p + +# Alternate binding for key_pause_play -- make identical to disable. +# default: k +key_pause_play_alt = p + +# Seek forward. +# default: f +key_seek_forward = f + +# Alternate binding for key_seek_forward -- make identical to disable. +# default: l +key_seek_forward_alt = f + +# Seek backward. +# default: b +key_seek_backward = b + +# Alternate binding for key_seek_backward -- make identical to disable. +# default: j +key_seek_backward_alt = b + +# Increase playback speed. +# default: ] +key_rate_increase = ] + +# Decrease playback speed. +# default: [ +key_rate_decrease = [ + +# Show episode URL. +# default: u +key_show_url = u diff --git a/.config/cava/config b/.config/cava/config new file mode 100644 index 0000000..55b2daf --- /dev/null +++ b/.config/cava/config @@ -0,0 +1,139 @@ +## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. Autosens must be turned off for this to take effect. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-200). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + + +[input] + +# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'. +# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +; method = pulse +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + + + +[output] + +# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'. +# 'noncurses' is for systems that does not suport ncurses. +# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +; method = ncurses + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' averages both channels and outputs left to right lowest to highest frequencies. +; channels = stereo + +# Raw output target. A fifo will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + + + +[color] + +# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. +# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a +# terminal that can change color definitions such as Gnome-terminal or rxvt. +; background = black +; foreground = cyan + +# Gradient mode, only hex defined colors are supported, background must also be defined in hex +# or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will +# not able to restore color definitions on exit, simply restart your terminal to restore colors. +; gradient = 0 +; gradient_color_1 = '#0099ff' +; gradient_color_2 = '#ff3399' + + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +; integral = 70 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 1 +; waves = 0; + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +; ignore = 0 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more then one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/.config/htop/htoprc b/.config/htop/htoprc new file mode 100644 index 0000000..b9f526d --- /dev/null +++ b/.config/htop/htoprc @@ -0,0 +1,26 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +fields=0 48 17 18 38 39 40 2 46 47 49 1 +sort_key=46 +sort_direction=1 +hide_threads=0 +hide_kernel_threads=1 +hide_userland_threads=0 +shadow_other_users=0 +show_thread_names=0 +show_program_path=1 +highlight_base_name=0 +highlight_megabytes=1 +highlight_threads=1 +tree_view=0 +header_margin=1 +detailed_cpu_time=0 +cpu_count_from_zero=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +delay=15 +left_meters=AllCPUs Memory Swap +left_meter_modes=1 1 1 +right_meters=Tasks LoadAverage Uptime +right_meter_modes=2 2 2 diff --git a/.config/keepassx/config.ini b/.config/keepassx/config.ini new file mode 100644 index 0000000..bb10e2e --- /dev/null +++ b/.config/keepassx/config.ini @@ -0,0 +1,17 @@ +[Options] +LastKeyLocation= +LastKeyType=Password + +[UI] +MainWindowGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\x1d\0\0\0\x31\0\0\x4\xe2\0\0\x3\x2\0\0\0 \0\0\0\x34\0\0\x4\xdf\0\0\x2\xff\0\0\0\0\0\0) +VSplitterPos=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\x1e\0\0\0\x46\0\x1\0\0\0\x4\x1\0\0\0\x1) +HSplitterPos=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x2\0\0\x34\x80\0\0\x16\x80\x1\0\0\0\x4\x1\0\0\0\x2) +ShowStatusbar=true +Columns=11111000000 +ColumnOrder="0,1,2,3,4,5,6,7,8,9,10" +ColumnSizes="166,166,166,166,166,166,166,166,166,166,166" +ColumnSort=0 +ColumnSortOrder=0 + +[FileDlgHistory] +ENTRY0=MainWindow_FileOpen, /home/archlinux/vgg/Documents/, 1 diff --git a/.config/keepassx/keepassx2.ini b/.config/keepassx/keepassx2.ini new file mode 100644 index 0000000..5008af6 --- /dev/null +++ b/.config/keepassx/keepassx2.ini @@ -0,0 +1,12 @@ +[General] +ShowToolbar=true +LastDir=/home/archlinux/vgg/Documents +LastDatabases=/home/archlinux/vgg/Documents/20151120.kdbx +LastKeyFiles=@Variant(\0\0\0\x1c\0\0\0\0) +LastOpenedDatabases=/home/archlinux/vgg/Documents/20151120.kdbx + +[GUI] +MainWindowGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\x1d\0\0\0\x31\0\0\x4\xe2\0\0\x3\x2\0\0\0 \0\0\0\x34\0\0\x4\xdf\0\0\x2\xff\0\0\0\0\0\0) +SplitterState=@Invalid() +EntryListColumnSizes=150, 150, 100 +EntrySearchColumnSizes=@Invalid() diff --git a/.config/mpd/database b/.config/mpd/database Binary files differnew file mode 100644 index 0000000..43b514b --- /dev/null +++ b/.config/mpd/database diff --git a/.config/mpd/log b/.config/mpd/log new file mode 100644 index 0000000..d17ae25 --- /dev/null +++ b/.config/mpd/log @@ -0,0 +1,14951 @@ +Mar 30 10:36 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 10:36 : exception: Failed to open '/home/archlinux/vgg/.config/mpd/state': No such file or directory +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/01 - Pietro Mascagni - Cavalleria rusticana - Prelude, O Lola ch'hai di latti la cammisa.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/03 - Pietro Mascagni - Cavalleria rusticana - Regina Coeli...Inneggiamo il signor non-e morto.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/11 - Ruggero Leoncavallo - Pagliacci - E Allor perche, di, tu m'hai stragato.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/09 - Ruggero Leoncavallo - Pagliacci - Si Puo- Si Puo.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/12 - Ruggero Leoncavallo - Pagliacci - Vesti la giubba.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/02 - Pietro Mascagni - Cavalleria rusticana - Il Cavallo Scalpita.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/07 - Pietro Mascagni - Cavalleria rusticana - Viva il vino spumeggiante.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/10 - Ruggero Leoncavallo - Pagliacci - Qual Fiamma avea nel guardo.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/08 - Ruggero Leoncavallo - Pagliacci - Prologue.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/04 - Pietro Mascagni - Cavalleria rusticana - Voi lo sapete, O Mamma.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/06 - Pietro Mascagni - Cavalleria rusticana - Intermezzo.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/05 - Pietro Mascagni - Cavalleria rusticana - Santuzza's Tearful Pleas.mp3 +Mar 30 10:36 : update: added Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/13 - Ruggero Leoncavallo - Pagliacci - No, Pagliaccio non son...slavvia, casi tembile.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/09 - Handel - Music For The Royal Fireworks.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/10 - J.S. Bach - Toccata and Fugue.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/07 - Tchaikovsky - Nutcracker Suite.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/06 - Tchaikovsky - Swan Lake.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/03 - Beethoven - Moonlight.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/02 - Beethoven - Fur Elise.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/11 - Mendelssohn - Wedding March.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/05 - Tchaikovsky - 1812.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/01 - Beethoven - Symphony No. 5.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/13 - Tchaikovsky - Piano Concerto No.1.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/04 - Vavaldi - The Four Seasons.mp3 +Mar 30 10:36 : update: added Classical/Classics Collection/08 - Chopin - Funeral March.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/02 - Choral II. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/08 - Allegro Assai Vivace. Alla Marcia.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/10 - Allegro Energico, Sempre Ben Marcato.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/03 - Choral III. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/09 - Andante Maestoso - Adagio Ma Non Troppo, Ma Divoto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/05 - Adagio Molto E Cantabile - Andante Moderato - Tempo I - Andant.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/04 - Choral IV. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/07 - Presto - Recitativo - Allegro Assai.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/11 - Allegro Ma Non Tanto - Poco Adagio - Tempo I - Poco Adagio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/06 - Presto - Allegro Ma Non Troppo - Tempo I - Vivace - Tempo I - Adagio Cantabile - Tempo I.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/12 - Poco Allegro, Stringendo Il Tempo, Sempre Piu Allegro - Prestissimo.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 9/01 - Choral I. Allegro Ma Non Troppo, Un Poco Maestoso.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- IV. Storm and Tempest.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- III. Merry gathering of the country folk.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- II. Scene by the brook.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- I. Awakening of happy feelings on arriving in the country.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- V. Shepherds' Song- Happy and thankful feelings after the storm.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 3/Prometheus Overture, Op.43.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 IV In E Flat Major, Op.55- Marcia funebre. Adagio assai.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 III In E Flat Major, Op.55- Finale. Allegro molto - Poco andante - Presto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 I In E Flat Major, Op.55- Scherzo. Allegro vivace.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 II In E Flat Major, Op.55- Allegro con brio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - II Adagio, Symphony No. 4 in Bb Major.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - IV Allegro ma non troppo, Symphony No. 4 in Bb Major.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - I Adagio - Allegro vivace, Symphony No. 4 in Bb Major.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - III Allegro vivace - Trio-Un poco meno Allergo, Symphony No. 4 in Bb Major.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegro vivace.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegretto scherzando.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Tempo di Menuetto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegro vivace e con brio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 I in D major, op.36- Scherzo (Allegro).mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 IV in D major, op.36- Larghetto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 II in D major, op.36- Adagio molto - Allegro con brio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 III in D major, op.36- Allegro molto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- IV. Adagio - Allegro molto e vivace.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- I. Adagio molto - Allegro con brio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- III. Menuetto- Allegro molto e vivace.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- II. Andante cantibile con moto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - I Allegro con brio, Symphony No. 5 in C minor.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - II Andante con moto, Symphony No. 5 in C minor.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - III Allegro, Symphony No. 5 in C minor.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - IV Allegro - Presto, Symphony No. 5 in C minor.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Coriolan Overture, Op.62.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- I. Poco sostenuto - Vivace.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- IV. Allegro con brio.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Egmont Overture, Op.84.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- III. Presto - Assai meno presto.mp3 +Mar 30 10:36 : update: added Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/07. Kids Taunt JudasMary Hears JesusKids Chase Judas.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/05. Carpenter FlashbackDe Toolah de Tabla.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/13. Mary Goes to Jesus.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/12. Vast WorldMoment of TruthBearing the Cross.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/11. Mary Wipes Up BloodThe StoningPilate Washes Hands.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/10. Pilate Orders ScourgingFlagellationDark ChoirDisciples.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/06. Peter Denies Jesus.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/16. Peaceful but PrimitiveProcession.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/08. Judas Hangs HimselfJesus Brought to PilateJesus Speaks Latin.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/14. Song of Complaint (Traditional).mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/04. Judas Sees Jesus AgainCaiphas Walks to the Temple.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/17. Simon Is Dismissed.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/01. The Olive Garden.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/03. Jesus ArrestedMary Awakens Afraid.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/09. Pilate’s TruthUprising.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/15. Breath of the Spirit.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD1/02. Satan Appears.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/08. Peaceful but PrimitiveProcession (Original Ending).mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/12. Promotional Trailer Music.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/11. Teaser Trailer Music.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/01. CrucifixionRaising the CrossGesmas Taunts JesusRaven Attacks Gesmas.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/02. It Is Done.mp3 +Mar 30 10:36 : update: added Classical/The Passion of the Christ (10th aniversary)/CD2/07. Bearing the Cross (Extended Album Version).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/05. Panis angelicus (Franck).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/04. Ave Maria (Schubert).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/10. Frondi tenere ... Ombra mai fu (Handel).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/08. Ave verum Corpus (Mozart).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/12. Domine Deus (Rossini).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/02. Sancta Maria (Mascagni).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/16. Gloria a te, Cristo Gesu (LecotFrie).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/09. Der Engel (Wagner).mp3 +Mar 30 10:36 : update: added Classical/Andrea Bocelli - Arias Sacras/14. Silent night (Gruber).mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 007 - Regina Coeli.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 001 - Sancta Dei Genitrix.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 006 - Auxilium Christianorum.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 003 - Advocata Nostra.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 002 - Mater Ecclesiae.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 005 - Causa Nostrae Laetitiae.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 004 - Benedicta Tu.mp3 +Mar 30 10:36 : update: added Classical/Alma Mater - Music From The Vatican/Track 008 - Magistra Nostra.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/08.Don Giovanni La Ci Darem La Mano.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/13.Ave Verum Corpus.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/03.Cosi Fan Tutte Soave Sia Il Vento.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/04.Violin Sonata K.378 Andantino.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/12.Symphony No.25 Allegro Con Brio.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/02.Horn Concerto No.4 Rondo Allegro Vivace.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/11.Marriage Of Figaro Voi Che Sapete.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/07.String Quartet 'Hunt' Minuetto.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/10.Piano Concerto No.20 Allegro Assai.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/01.Serenade No.13 'Eine Kleine Nachtmusik' Allegro.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/06.Symphony No.40 Molto Allegro.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/09.German Dance No.3 'Sleigh Ride'.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 1/05.Requiem Confutatis And Lacrymosa.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/09.Serenade For Winds K.361 Menuetto.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/10.Clarinet Quintet Larghetto.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/05.Symphony No.41 'Jupiter' Molto Allegro.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/02.Clarinet Concerto Adagio.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/03.Mass In C Minor Kyrie.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/07.Piano Sonata No.11 Rondo Alla Turca.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/01.Marriage Of Figaro Overture.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/11.Violin Concerto No.5 Tempo Di Minuetto.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/04.Piano Concerto No.21 Andante.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/08.Flute And Harp Concerto Andantino.mp3 +Mar 30 10:36 : update: added Classical/Wolfgang Amadeus Mozart - The VERY Best 2-CD Box Set/Disc 2/06.Die Zauberflote Der Holle Rache.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/16 - the treatment feat. manchild.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/11 - groovin' on sunshine.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/10 - treasure hunt feat. sugar candy.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/20 - move!.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/15 - interlude 3_ the harder they come.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/17 - stay tuned feat. sojoum.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/18 - interlude 4_ ya'll there.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/01 - intro.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/05 - interlude 1_ journey.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/07 - a request.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/02 - where it all started feat. dj dna.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/14 - saturday night live feat. surreal.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/22 - outro.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/04 - you are now tuned in feat. adam l.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/19 - floor rock.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/13 - the find feat. sto the 89th key.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/12 - interlude 2_ at the oasis.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/08 - mind power.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/21 - long ago feat. othello.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/09 - your love feat. tiffany simpson.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - The Find/03 - that sound feat. noelle.mp3 +Mar 30 10:36 : update: added HipHop/Mending/BlessedBrokenShared.mp3 +Mar 30 10:36 : update: added HipHop/Mending/Paradox X - instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/Lift.mp3 +Mar 30 10:36 : update: added HipHop/Mending/GoOutside - Instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/Forecast.mp3 +Mar 30 10:36 : update: added HipHop/Mending/LastTime.mp3 +Mar 30 10:36 : update: added HipHop/Mending/Forecast - Instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/BlessedBrokenShared - Instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/Paradox X.mp3 +Mar 30 10:36 : update: added HipHop/Mending/DontYouKnow.mp3 +Mar 30 10:36 : update: added HipHop/Mending/He'llComeBack - Instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/IDon'tBelieveThem.mp3 +Mar 30 10:36 : update: added HipHop/Mending/NotWorthy.mp3 +Mar 30 10:36 : update: added HipHop/Mending/HereLies - Instr.mp3 +Mar 30 10:36 : update: added HipHop/Mending/He'llComeBack.mp3 +Mar 30 10:36 : update: added HipHop/Mending/GoOutside.mp3 +Mar 30 10:36 : update: added HipHop/Mending/ManVsSelf.mp3 +Mar 30 10:36 : update: added HipHop/Mending/HereLies.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/SundaysOnItsWay.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/FireTriedSmiles.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/DontSleep.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/Forms.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/Perceptions.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/ColdCastleBlues.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/CantBeBought.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/ordained.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/LeastOfThese.mp3 +Mar 30 10:36 : update: added HipHop/Ordained/Credo.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/School_of_the_Eucharist-Fr_Stan_Fortuna.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/The_Struggle-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Beautiful_To_Me-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Platinum_Poison-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Beyond_Comprehension-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/The_Son_Still_Shines-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Kiddkapps_III-Kiddkapps.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Love_Is.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Kiddkapps_I-Kiddkapps.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Man_of_Fire-manCHILD_Fr_Pontifex.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Since_You_Been_Around-Righteous_B.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Spirtual_High-MC_Just.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Not_Hip_Hop-Point_5_Covenant.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/No_Regrets-flow.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Intro-DJ86.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Supernatural-MC Just.mp3 +Mar 30 10:36 : update: added HipHop/MassMatics/Kiddkapps_II-kiddkapps.mp3 +Mar 30 10:36 : update: added HipHop/The Ultimate Remix .mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/08-Check the Rhime.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/11-Same Ol' Thing.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/16-Clap Your Hands.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/03-Can I Kick It.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/18-Peace, Prosperity & Paper.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/12-Buggin' Out.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/10-Scenario.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/15-Glamour & Glitz.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/05-Electric Relaxation.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/07-I Left My Wallet in El Segundo.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/14-Jazz (We've Got).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/09-Lyrics to Go (Tumblin' Dice remix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/06-Mr. Incognito.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/04-One, Two, Shit.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/17-The Night He Got Caught.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/02-Award Tour.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/13-Bonita Applebum.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2003 - Hits,Rarities and Remixes/01-Oh My God (remix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/11 Baby Phife's Return.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/08 Mind Power.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/09 The Hop.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/13 What Really Goes On.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/07 1nce Again feat. Tammy Lucas.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/05 Crew.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/16 Stressed Out [Baby Phife Version.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/14 Word Play.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/03 Motivators.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/06 The Pressure.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/04 Jam.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/02 Get A Hold.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/12 Separate_Together.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/15 Stressed Out feat. Faith Evans.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/10 Keeping It Moving.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/11 Jazz (We've Got).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/06 Show Business.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/08 The Infamous Date Rape.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/07 Vibes Anf Stuff.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/01 Excursions.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/09 Check The Rhime.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/04 Butter.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/14 Scenario.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/12 Skypager.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/15 Check The Rhime (Mr. Muhammad's m.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/05 Verses From The Abstract.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/02 Buggin' Out.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/10 Everything Is Fair.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/13 What_.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1991 - The Low End Theory/03 Rap Promoter.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/08 It's Yours.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/05 Stressed Out Remix (Raphae.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/10 Game Day ft.Rodney Hampton.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/11 Glamour & Glitz.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/13 Hey.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/04 Can I Kick It (Phase 5 Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/01 Oh My God (UK Flavor Radio).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/02 Mardi Gras At Midnight ft..mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/07 ICU (Doin' It) ft.Erykah B.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/03 The Remedy ft. Common.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/06 Scenario (Remix) ft.The Le.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/14 Rumble in the Jungle ft.Fugees & Busta Rhymes.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/16 That Shit ft.Jay Dee.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/09 Jam (Remix) ft.Consequence.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/15 Practice Session.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/2006 - The Lost Tribes/12 Weekendz ft.Consequence.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/04. A Tribe Called Quest - Can I Kick It.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/16. A Tribe Called Quest - Keeping It Moving.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/05. A Tribe Called Quest - Scenario.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/06. A Tribe Called Quest - Buggin' Out.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/12. A Tribe Called Quest - Oh My God.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/13. A Tribe Called Quest - Stressed Out.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/17. A Tribe Called Quest - Find A Way.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/03. A Tribe Called Quest - Award Tour.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/02. A Tribe Called Quest - Bonita Applebum.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/18. A Tribe Called Quest - Sucka Nigga.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/08. A Tribe Called Quest - Electric Relaxation.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/07. A Tribe Called Quest - If The Papes Come.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/11. A Tribe Called Quest - Hot Sex.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/10. A Tribe Called Quest - I Left My Wallet In El Segundo.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/19. A Tribe Called Quest - Vivrant Thing.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/15. A Tribe Called Quest - Description Of A Fool.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/09. A Tribe Called Quest - Jazz (We've Got).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/01. A Tribe Called Quest - Check The Rhime.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD1) (1999) (320kbps)/14. A Tribe Called Quest - Luck Of Lucien.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/04. A Tribe Called Quest - Can I Kick It (Extended Boilerhouse Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/06. A Tribe Called Quest - Bonita Applebum (Hootie Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/01. A Tribe Called Quest - Bonita Applebum (12'' Why Edit).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/05. A Tribe Called Quest - Scenario (Young Nation Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/02. A Tribe Called Quest - I Left My Wallet In El Segundo (Vampire Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/07. A Tribe Called Quest - Oh My God (UK Flavour Radio Mix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1999 - The Anthology/A Tribe Called Quest - The Anthology (CD2) (1999) (320kbps)/03. A Tribe Called Quest - Pubic Enemy (Saturday Night Virus Discomix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/08 His Name Is Mutty Ranks.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/21 One Two S__t ft. Busta Rhymes.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/10 Pad & Pen ft. D-Life.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/12 Hot 4 U.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/17 Money Amker.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/05 Like It Like That.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/09 Give Me ft. Noerega.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/15 Rock Rock Y'all.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/13 Against The Wolrd.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/01 Start It Up.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/11 Busta's Lament.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/22 The Night He Got Caught.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/16 Scenario (Remix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/19 Oh My God (Remix).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/03 Da Booty.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/14 The Love.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/18 Hot Sex.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/04 Steppin' It Up With Busta Rhymes.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/07 4 Moms ft. Spanky.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/20 Jazz (We've Got).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/06 Common Ground (Get It Goin' On).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1998 - The Love Movement/02 Find A Way.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/16 Can I Kick It_ (Extended Bollerho.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/03 After Hours.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/10 Rhythm (Devoted To The Art Of Mov.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/11 Mr. Muhammad.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/08 Can I Kick It_.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/04 Footprints.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/13 Go Ahead In The Rain.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/09 Youthful Expression.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/15 Bonita Applebum (12_ Why_ Version.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/05 I Left My Wallet In El Segundo.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/14 Description Of A Fool.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/01 Push It Along.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/07 Bonita Applebum.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/12 Ham 'n' Eggs.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/06 Public Enemy.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1990 - Peoples Instinctive Travels And The Path/02 Luck Of Lucien.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/08 Electric Relaxation.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/01 Midnight Marauders Tour Intro.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/14 God Lives Through.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/07 We Can Get Down.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/13 Lyrics To Go.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/04 8 Million Stories.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/11 Keep It Rollin'.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/15 Hot Sex.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/06 Midnight.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/05 Sucka Nigga.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/16 Electric Relaxation (Relax Yourse.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/10 Oh My God.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/12 The Chase, Part II.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/09 Clap Your Hands.mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/02 Steve Biko (Stir It Up).mp3 +Mar 30 10:36 : update: added HipHop/A Tribe Called Quest/1993 - Midnight Marauders/03 Award Tour.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/03. Sh.Fe.Mcs.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/05. I Be Blowin'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/06. Stix & Stonz.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/04. Patti Dooke.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/02. I Am I Be.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/01. In the Woods.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/01. The Grind Date (Wale Oyejid Remix).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/04. Hold Tight.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/05. The Grind Date (Inhumanz Mash-Up).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/03. Stay Away Ft. Pete Rock and Rob-O.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/02. Do the Damn Thang.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/09. Reverse your steps.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/02. Live @ the Dugout 87'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/10. You got it.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/16 - The Corner.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/20. Live in Tokyo.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/07. Respect.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/12. Just Havin A Ball.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/04. Friends.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/13. What if.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/18. What the fx@k #3.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/06. Go out and get it.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/15. Wasn't For You.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/01. Impossible Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/08. Beef.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/05 - What the fx@k #1.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/14. Relax.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/03. Voodoo Circus.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/19. Freedom Train.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/11. What the fx@k #2.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/07. Sweet Dreams (Clean Version).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/05. Big Brother Beat.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/13. Me Myself And I (Badmarsh + Shri Remix).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/01. Stakes Is High (Remix).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/06. More Than U Know.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/09. Potholes In My Lawn (Live, 1996).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/04. I.C. Y'All.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/12. Stakes Is High (DJ Spinna - Original Vocal).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/11. Itz Soweezee (Hot) (De La Remix).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/02. Oodles Of O's.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/08. The Magic Number.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/03. Trouble In The Water.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/10. The Hustle.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/06. Keepin The Faith.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/04. Buddy (Feat Jungle Bros Q-Tip And Phife).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/11. The Bizness (Feat Common).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/08. In The Woods (Feat Shortie).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/15. Baby Phat.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/03. Jenifa Taught Me (Derwin's Revenge).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/02. Say No Go.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/01. Me Myself And I.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/14. All Good (Feat Chaka Khan).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/10. 4 More (Feat Zhane).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/16. Oooh (Feat Redman).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/07. Breakadawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/09. Ego Trippin (Part 2).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/12. Stakes Is High.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/13. Long Islands Degrees.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/05. Ring Ring Ring (Ha Ha Hey).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/18. Oooh..mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/07. Roller Skating Jam 'Named Saturdays'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/19. All Good_ (featuring Chaka Khan).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/16. Copa (Cabanga).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/15. Millie Pulled A Pistol On Santa.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/13. Watch Out.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/02. Say No Go.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/14. Held Down (featuring Cee-Lo).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/06. Ring Ring Ring (Ha Ha Hey).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/12. Simply.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/01. Eye Know.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/08. Jenifa Taught Me (Derwin's Revenge).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/17. Baby Phat (featuring Devin the Dude + E. Yummy Bingham).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/10. Keepin' the Faith.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/05. Buddy (with Jungle Brothers and Q-Tip from A Tribe Called Quest).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/04. Me Myself and I (LP Version).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/09. Breakadawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/03. En Focus.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/11. Thru Ya City.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/07. It's Like That.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/11. No.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/09. Days of Our Lives.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/12. Rock Co.kane Flow.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/08. He Comes.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/03. Much More.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/05. The Grind Date.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/06. Church.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/10. Come On Down.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/01. The Future.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/02. Verbal Clap.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/04. Shopping Bags (She Got From You).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/11. A Little Bit Of Soap.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/10. Take It Off.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/13. Potholes In My Lawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/08. Transmitting Live From Mars.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/24. Plug Tunin.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/03. Change In Speak.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/14. Say No Go.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/07. Ghetto Thang.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/21. This Is A Recording 4 Living In A Fulltime Era (L.I.F.E.).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/17. De La Orgee.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/20. Me Myself And I.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/01. Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/22. I Can Do Anything (Delacratic).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/06. Jenifa Taught Me (Derwin's Revenge).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/16. Plug Tunin (Last Chance To Comprehend).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/09. Eye Know.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/02. The Magic Number.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/15. Do As De La Does.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/12. Tread Water.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/05. Can U Keep A Secret.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/23. D.A.I.S.Y. Age.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/19. Description.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/04. Cool Breeze On The Rocks.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/18. Buddy Feat. The Jungle Brothers & Q-Tip.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/14. Eye Know (The Know It All Mix).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/09. Brain Washed Follower.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/04. Skip To My Loop.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/03. Jenifa (Taught Me) (12' Version).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/08. What's More (From The Soundtrack To Hell On 1st Ave).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/10. Say No Go (New Keys Vocal).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/11. The Mack Daddy On The Left.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/12. Double Huey Skit.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/01. Freedom Of Speak (We Got Three Minutes).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/06. Me Myself And I (OBLAPOS MODE).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/05. Potholes In My Lawn (12' Version).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/13. Ghetto Thang (Ghetto Ximer).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/07. Ain't Hip To Be Labeled A Hippie.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/02. Strickly Dan Stuckle.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/08. Baby Baby Baby Baby Ooh Baby.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/03. The Bizness feat. Common.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/06. Brakes.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/15. Pony Ride feat. Truth Enola.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/09. Long Island Degrees.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/12. 4 More feat. Zhane.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/16. Stakes Is High.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/07. Dog Eat Dog.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/02. Supa Emcees.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/11. Itzsoweeze (HOT).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/01. Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/10. Betta Listen.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/05. Dinninit.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/13. Big Brother Beat feat. Mos Def.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/17. Sunshine.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/04. Wonce Again Long Island.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/14. Down Syndrome.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/17. It's American.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/06. Held Down Ft. Cee-Lo.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/13. Pawn Star Ft. Shell Council.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/07. Reverend Do Good #1.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/15. Reverend Do Good #3.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/12. Am I Worth You Ft. Glenn Lewis.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/08. Watch Out Ft. Jose 'Perico' Hernandez.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/01. Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/04. Simply.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/10. Reverend Do Good #2.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/11. The Sauce Ft. Philly Black.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/03. Baby Phat Ft. Devin the Dude & Elizabeth 'Yummy' Bingham.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/16. Peer Pressure.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/14. What We Do (For Love) Ft. Slick Rick.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/02. Bionix.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/09. Special Ft. Elizabeth 'Yummy' Bingham.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/05. Simply Havin.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/18. Trying People.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/07. Shwingalokate.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/05. Big Brother Beat Ft Mos Def.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/13. Buddy Ft Jungle Bros.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/03. Supa Emcees.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/04. Potholes in My Lawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/11. The Bizness Ft Common.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/14. Stakes is High.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/09. Oodles of O's.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/15. Goodbyes.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/08. Ego Trippin Part Two.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/12. Itzsoweezee (Hot).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/10. The Bitch in You Ft Common.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/01. Maseo Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/02. Breakadawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/06. Me Myself and I.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/13. Breakadawn.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/12. In The Woods.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/05. I Be Blowin'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/11. I Am I Be.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/06. Long Island Wildin'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/04. Patti Dooke.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/08. Paul's Revenge.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/10. Area.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/09. 3 Days Later.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/01. Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/02. Eye Patch.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/15. Stone Age.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/14. Dave Has A Problem...Seriously.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/07. Ego Trippin' [Part Two].mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1993 - Buhloone Mindstate/03. En Focus.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/05. Thru Ya City (feat. D.V. Alias Khrist).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/02. U Can Do (Life).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/01. SPITKICKER.COM (Say R.).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/07. View.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/03. My Writes (feat. Tash & J-Ro of Tha Liks and Xzibit).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/14. Copa (Cabanga).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/09. All Good (feat. Chaka Khan).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/04. Ooh (feat. Redman).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/10. Declaration.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/11. Squat! (feat. Mike D & Ad Rock of The Beastie Boys).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/12. Words from the Chief Rocker.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/06. I. C. Y'all (feat. Busta Rhymes).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/16. The Art of Getting Jumped.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/15. Foolin'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/08. Set the Mood (feat. Indeed).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/17. U Don't Wanna B.D.S. (feat. Freddie Foxxx).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/13. With Me.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/22. WRMS- Cat's In Control.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/24. Shwingalokate.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/25. Fanatic Of The B Word.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/19. Pass The Plugs.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/10. Skit 2.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/23. Skit 4.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/11. My Brother's A Basehead.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/15. Millie Pulled A Pistol On Santa.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/06. Johnny's Dead Aka Vincent Mason (live from the BK lounge).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/16. Who Do U Worship.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/01. Intro.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/21. Ring Ring Ring (Ha Ha Hey).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/27. Skit 5.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/07. A Roller Skating Jam Named 'Saturdays'.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/03. Talkin' Bout Hey Love.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/18. Kicked Out The House.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/09. Bitties In The BK Lounge.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/14. Rap De Rap Show.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/26. Keepin' The Faith.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/12. Let, Let Me In.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/02. Oodles Of O's.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/04. Pease Porridge.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/20. Not Over Till The Fat Lady Plays The Demo.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/13. Afro Connections At A Hi 5 (In The Eye Of The Hoodlum).mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/17. Skit 3.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/08. WRMS' Dedication To The Bitty.mp3 +Mar 30 10:36 : update: added HipHop/De La Soul/studio/1991 - De La Soul Is Dead/05. Skit 1.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/12 - Lightheaded - Poetry in Motion.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/08 - Lightheaded - That's HOw it is.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/02 - Lightheaded - Lightheaded Anthom.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/01 - Lightheaded - Intro.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/03 - Lightheaded - P.T. Cruise.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/07 - Lightheaded - Street Corners.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/04 - Lightheaded - Pure With Intention.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/10 - Lightheaded - Never Square.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/15 - Lightheaded - Lah Lah Land.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/16 - Lightheaded - Rock-On.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/13 - Lightheaded - Completion.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/11 - Lightheaded - Pure Thoughts.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/06 - Lightheaded - The Top.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/14 - Lightheaded - Outro.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/05 - Lightheaded - Blink of an Eye.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Pure Thoughts/09 - Lightheaded - Selfless.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/12-braille-survival_movement_remix_instrumental-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/11-braille-that_feeling_instrumental-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/06-braille-this_year_remix-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/02-braille-everything_changed-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/04-braille-leave_behind-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/05-braille-fresh_coast-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/01-braille-cooling_out-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/09-braille-survival_movement_remix-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/08-braille-enter-gritty-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/03-braille-that_feeling-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/07-braille-survival_movement-whoa.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Extra Box For Japan EP/10-braille-cooling_out_instrumental-whoa.mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/8. Element Freestyle.mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/1. Intro.mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/2. Subway Theme.mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/5. The Champ.mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/4. The Goodfoot (featuring Wonder Brown).mp3 +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/3. Same Team Suckas (Flashback).mp3 +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : update: added HipHop/TheRockIsSteady/7. Boombaptism (Recap).mp3 +Mar 30 10:36 : update: added HipHop/Rakim_-_Legends_Of_The_Microphone_Full_Album_ALL4HIPHOP_Made.mp3 +Mar 30 10:36 : update: added HipHop/paradox.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/11 - double dose.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/07 - constantly growing (ft. speech).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/03 - calculated risk (ft. mr. j & manchild).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/02 - submission hold.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/09 - many stories (ft. barry hampton).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/10 - raise the dead (ft. poems).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/13 - mental guards (snitch blade).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/08 - blessed man.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/17 - addvice (ft. dj bombay).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/16 - the cure.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/06 - remember your path (ft. rob swift).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/14 - get it right (ft. ragen fykes).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/01 - beautiful humanity.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/04 - the iv (ft. rob swift).mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/05 - main squeeze.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/15 - restless.mp3 +Mar 30 10:36 : update: added HipHop/Braille - The IV Edition/12 - counter attack (ft. theory hazit & dj idull).mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/07. Not Afraid - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/15. Love The Way You Lie ft. Rihanna - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/04. Won't Back Down ft. Pink - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/06. Going Through Changes - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/14. Almost Famous - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/02. Talkin' 2 Myself - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/09. No Love ft. Lil Wayne - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/13. So Bad - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/05. W.T.P. - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/16. You're Never Over - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/12. 25 To Life - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/11. Cinderella Man - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/03. On Fire - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/17. Untitled - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/06 - Fine and Free (ft. Vivian Green).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/05 - Connection (ft. Kem).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/14 - Infinite (ft. Blackalicious).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/04 - Look to the Sun [Solar].mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/16 - Living Legend (ft. David Sanborn).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/02 - State of Clarity (ft. Common & Bob James).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/07 - Wait on Me (ft. Raheem DeVaughn).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/13 - Universal Struggle (ft. Brownman).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/08 - International (ft. Bobby Valentino).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/11 - The Jazz Style (ft. Omar).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/03 - Stand Up [Some Things'll Never Change] (ft. Damian Marley).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/10 - Fly Magnetic (ft. Dionne Farris).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/09 - This is Art (ft. Ronnie Laws).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/01 - Cuz I'm Jazzy (ft. Slum Village).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/12 - Follow the Signs (ft. Shelley Harland).mp3 +Mar 30 10:36 : update: added HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/15 - Kissed the World (ft. Caron Wheeler).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/09 Organic.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/15-othello-oblivious_enlight_ft_braille-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/14 Good Will Chopping (feat. Redcloud).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/04 Heart (feat. Destro).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/03-othello-seasons_greetings_ft_sirens_echos-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/03 Seasons Greetings (feat. Sirens Echos).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/02 Rock Rock C'Mon.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/16 No Mic for Thai (feat. Hipknotics).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/08-othello-elevator_music-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/12-othello-how_ya_livin_ft_malachi_perez_deep6-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/14-othello-good_will_chopping_ft_redcloud-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/11 Laugh Track.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/07-othello-lobby_ft_hipknotics-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/12 How Ya Livin (feat. Malachi Perez & Deep6).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/06-othello-relax_urself-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/10-othello-heir_borne_ft_ohmega_watts_of_lightheaded-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/11-othello-laugh_track-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/13-othello-contingent-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/04-othello-heart_ft_destro_of_old_dominion-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/13 Contingent.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/15 Oblivious Enlight (feat. Braille).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/01-othello-first_floor-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/06 Relax Urself.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/09-othello-organic-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/05 Consider It (feat. Pageone).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/01 First Floor.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/07 Lobby (feat. Hipknotics).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/02-othello-rock_rock_cmon-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/08 Elevator Music.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/10 Heir Borne (feat. Ohmega Watts).mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/16-othello-no_mic_for_thai_ft_hipknotics-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Elevator Music/05-othello-consider_it_ft_pageone_of_lojique-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/15-farewell.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/09-peripheral_drift.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/08-silhouette_ft_d_minor.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/11-rot.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/05-cycle_ft_surreal.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/04-alive_at_the_assembly_line_ft_propaganda_and_vursatyl.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/14-fly_ft_ohmega_watts_and_braille.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/12-work_epic.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/06-r_a_p_s_.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/10-shallow_ft_pigeon_john.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/02-lets_just.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/13-shoot_past_ft_olivia_warfield.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/07-smooth_it_out.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/03-place_to_be.mp3 +Mar 30 10:36 : update: added HipHop/Othello - Alive At The Assembly Line/01-...and_always.mp3 +Mar 30 10:36 : update: added HipHop/50 Cent - Big Rich Town (feat. Joe).mp4 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/15 Doctrine Is Dangerous.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/07 That Will Make You Sin.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/12 You Have A Generational Curse.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/08 Speak It Into Existence.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/09 You're Not Filled With The Holy Spirit If You Don't Speak In Tongues.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/14 Just Believe God.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/04 I Feel The Spirit.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/10 That's The Devil.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/01 Don't Put Your Mouth On The Man Of God.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/03 This Is God's House.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/13 She's Not Anointed.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/02 The Bible Is God's Rule Book.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/00 Introduction.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/06 God Wants You To Be Rich.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/05 I Have Peace About This Decision.mp3 +Mar 30 10:36 : update: added HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/11 God Heals Those Who Have Faith.mp3 +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/07) Skepticold.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/13) Hardrock.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/11) Megaphone.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/04) Broken Heart.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/09) Found Her.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/15) Parachutes and Ladders.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/01) Sky Dive Intro.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/03) For Life.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/14) Stay Together.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/10) From The Pulpit.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/06) Fill It In.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/05) Thats My Word.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/02) Its Nineteen.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/12) Work That Way.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/08) Heart of God.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Cloudnineteen/Braille - Cloudnineteen/16) Frankenstein Bonus.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/11_it_goes.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/09_sketches_of_belize.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/25_another_perfect_day.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/06_oasis.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/24_live_and_direct_(remix).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/18_help_wanted_(remix_1).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/19_help_wanted_(remix_2).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/14_sphere.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/04_from_49_to_50.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/15_st._james.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/01_intro.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/21_what_is_love.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/10_fascinated_daily.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/13_do_right.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/07_bzc_scenery.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/12_broke_my_heart.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/08_where_do_i_go.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/26_go_(mixtape_verse).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/16_olds_cool_rhyming.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/17_nickel_and_dime.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/06 White Noise (Featuring Common Child, Propaganda, & Afaar).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/15 Ruined For Life.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/11 Put 'Em Together.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/03 Help Wanted.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/01 Stay Tuned.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/04 Bloodline (Featuring Mellow Drum Addict & Sev Statik).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/16 Seeds (Featuring Playdough).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/08 Hard Rock (Featuring SameOldJake & Othello).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/13 Brief Interruption (Featuring Kaboose).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/02 Broken.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/05 Groundwork.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/10 Life Of An Artist (Featuring Jeremiah Bonds).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/07 On Second Thought.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/09 Snapshots (Featuring Metermaids - Sentence & Swell).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/14 Obstacles.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/Paradox - Called To Mind/12 Let Your Life Speak (Featuring Gina Chavez).mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/23_without_you.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/20_color.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/27_peace.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/02_paydirt.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/22_penny_for_your_thoughts.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/03_use_what_you_got.mp3 +Mar 30 10:36 : update: added HipHop/ParadoxPlus/05_moonboots.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/LovesNot.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/WhereDoIGo.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/PurposeCallingVocation.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/HipHop.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/ManFullyAlive.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/Breathe.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/EvolutionOfAPrimate.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/Bless.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/NarrowGate.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/Mortified.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/ToGetBy.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/SpeakArtistically.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/CodeBlue.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/PieceOfMyMind.mp3 +Mar 30 10:36 : update: added HipHop/MassMaticsV2/BeforeMe.mp3 +Mar 30 10:36 : update: added HipHop/06.EndOfTheRoad.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/15-guru-kissed_the_world_feat._caron_wheeler-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/08-guru-international_feat._bobby_valentino-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/05-guru-connections_feat._kem-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/02-guru-state_of_clarity_feat._common_and_bob_james-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/14-guru-infinite_feat._blackalicous-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/03-guru-stand_up_feat._damian_marley-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/09-guru-this_is_art_feat._ronny_laws-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/10-guru-fly_magnetic_feat._dionne_farris-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/13-guru-universal_struggle_feat._brownman-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/11-guru-the_jazz_style_feat._omar-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/04-guru-look_to_the_sun_(solar)-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/01-guru-cuz_im_jazzy_feat._slum_village-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/07-guru-wait_on_me_feat._raheem_devaughn-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/16-guru-living_legend_feat._david_sanborn-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/06-guru-fine_and_free_feat._vivian_green-ftd.mp3 +Mar 30 10:36 : update: added HipHop/Guru-Jazzmatazz_Vol._4 [2007]/12-guru-follow_the_signs_feat._shelley_harland-ftd.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/GetOver-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Souplude.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Koolude.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/BeatDrops-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/LiveAsItGets.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/TheClap.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/TheClap-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Scrillalude.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Rain-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Goodnight.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Rain.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Heronomics.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/Dessertlude.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/GetOver-ReRun.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/SettleForLess-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/GetOver.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/MoveMerchants.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/LiveAsItGets-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/SettleForLess.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/MoveMerchants-Instr.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/StopDontMove.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/FirstTime.mp3 +Mar 30 10:36 : update: added HipHop/MoveMerchants/BeatDrops.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/04_Up.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/08_Revenge (The Right Way).mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/07_Resurrect Me.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/01_Get Well Soon.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/03_Complexicated.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/10_Surgical.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/05_Poison.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/02_Give Myself.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/06_Shoeless Joe.mp3 +Mar 30 10:36 : update: added HipHop/Weapon Aid/Weapon Aid/09_Nothing Left To Say.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_01_.C.R.E.A.M_.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_11_.Gravel_Pit.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_02_.Method_Man_(Skunk_Mix).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_14_.Uzi_(Pinky_Ring).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_10_.Triumph_(feat._Cappadonna).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_12_.Protect_Ya_Neck_(The_Jump_Off).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_04_.Wu-Tang_Clan_Aint_Nuthing_Ta_F_Wit.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_07_.Da_Mystery_Of_Chessboxin.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_05_.Can_It_Be_All_So_Simple.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_16_.Diesel_(feat._RZA,_Method_Man,_U-God,_Raekwon_Ol_Dirty).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_13_.Sucker_M.C.s.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_06_.Shame_On_A_Nigga.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_03_.Protect_Ya_Neck_(Bloody_Version).mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_09_.Its_Yourz.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_15_.Shaolin_Worldwide.mp3 +Mar 30 10:36 : update: added HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_08_.Reunited.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/11-lightheaded-wrong_way-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/02-lightheaded-timeless-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/07-lightheaded-short_stories-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/03-lightheaded-in_the_building-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/05-lightheaded-showcase-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/13-lightheaded-eye_to_eye-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/09-lightheaded-afraid_of_the_dark-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/08-lightheaded-soul_power-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/12-lightheaded-uhh-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/06-lightheaded-bing_pong-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/15-lightheaded-surprise_cypher_remix-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/04-lightheaded-individually_wrapped-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/10-lightheaded-unconditional-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/01-lightheaded-orientation-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Lightheaded - Wrong Way/14-lightheaded-speak_your_peace-gcp.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - No Omega.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Pass the Hand Grenade.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Strong Island.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/01-rakim-hip_hop.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Uplift.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/08 Satisfaction Guaranteed.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/12_20_2013_Rakim_-_Madiba__Nelson_Mandela_Tribute_.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/07 - New_York_To_Cali_(Produced_By_Clark_Kent).mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - We'll Never Stop [Featuring Connie McKendrick].mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Paid in Full.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Relax With Pep.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - I Know You Got Soul.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - It's been a long time.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - The mystery (who is God).mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - When i'm flowin.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - What's Going On-.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim-02-Once_Upon_A_Rhyme-gtp.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Flow Forever.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/classic_rmx[2].mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Shades of black.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Follow the Leader.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Stay a while.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Remember that.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Step Back.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Heat it up.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Know the Ledge.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/01-rakim_ft._kelly_price-light_em_up-chr.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/09 Working For You.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/14 Dedicated.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Waiting for the World to End.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/02-rakim-love_4_sale.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Guess who's back.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - No Competition.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Musical Massacre.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim-05-Tryin_Ta_Write_Rhymes-gtp.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Finest Ones [Featuring Clark Kent].mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Track 26.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Move the Crowd.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - The saga begins.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Set 'Em Straight.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - It's the R.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - The Punisher.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - Real Shit.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/03-rakim-word_on_the_street.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Keep 'Em Eager to Listen.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/07 Holy Are U.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - What's on Your Mind-.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/12. Rakim - Man with a Gun.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/01. Rakim - Milk & Honey.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/11 Put It All To Music.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Don't Sweat the Technique.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - The 18th letter.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Untouchables.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Put Your Hands Together.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/06 Won't Be Long ft. Tracey Horton.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Let the Rhythm Hit 'Em.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim-04-How_Im_Livin-gtp.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - In the Ghetto.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/10 Message In The Song ft. Destiny Griffin.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/13 Still In Love.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim-Bring It On.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/artist - Cold feeling.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/04 Man Above ft. Tracey Horton.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - All Night Long.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Kick Along.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim Watch This (Prod Domingo) (DotGotIt.com).mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Lyrics of Fury.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - How I Get Down.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - As the Rhyme Goes On.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - Microphone Fiend.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - I Know.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Rakim - When I B on Tha Mic.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/Eric B. & Rakim - I Ain't No Joke.mp3 +Mar 30 10:36 : update: added HipHop/Rakim/02 - Hypnotic.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/16 silver morning.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/20 not quite seleah.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/03 Hiji Zuru STYLE.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/12 dead season.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/23 Who's Theme.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/18 in position.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/10 haiku [interlude].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/02 nightshift.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/15 kodama [interlude].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/17 bracelet.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/09 sanctuary ship.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/13 decade [interlude].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/08 a space in air in space in air [interlude].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/01 just forget.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/14 world without words.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/07 the million way of drum.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/22 here and there.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/06 set it off.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/21 labyrinth statistic.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/19 night out.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/04 the stroll.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/11 tsurugi no mai.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - impression/05 death wish.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/03. Blue Velvet.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/11. Steroid.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/07. Lost Highway feat. 601 aka KazokuüiAlphaüj.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/09. San Francisco.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/12. Kido feat. 967 aka Gumuna.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/06. Star Diva feat. 893 aka La Melomania.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/15. Deep Blue feat. Con-NYC.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/13. Islam Radio feat. 343 aka Dj Shunsuke.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/14. S501.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/04. Jet Set Radio.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/01. Operator To Help You.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/05. Tanoshii Drive.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/10. Pillow Jam.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/02. g.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo Episode 26 ED Album - #501 - Midicronica/08. Skit.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/05 paranoid.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/01 vagrancy.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/14 pretending toüc.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/19 YOU feat. kazami.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/17 sincerely.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/04 loading zone.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/03 judgment on.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/16 I sighed.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/08 sneak chamber.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/18 numbernineümback in TYOün.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/15 seventythree.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/13 tubedümdrum please !!!ün.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/11 dry.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/09 new dimension.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/06 silver children.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/02 mist.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/10 raw material.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/12 breeezin'.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - masta/07 the long way of drums.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo image single - YOU ~Himawari~ [kazami]/03 YOU.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo image single - YOU ~Himawari~ [kazami]/02 YOU feat. kazami.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo image single - YOU ~Himawari~ [kazami]/01 YOU ~Himawari~.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/16 the updater.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/14 deeper than words.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/07 absolute.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/02 yet why not.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/12 process.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/13 reflective.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/06 flip.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/01 thank you.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/18 FLY[SMALL CIRCLE OF FRIENDS].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/09 tuned.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/10 no icon.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/03 strike back.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/11 stretch out.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/05 mists.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/17 offers.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/15 2 messages.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/04 let me know what U think.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/samurai champloo music records - playlist [Tsutchie - fat jon]/08 adapt myself.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/17 Shiki no Uta.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/06 1st samurai.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/08 624 part2.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/10 no way back.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/04 transcendence.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/14 ask.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/01 battlecry [Nujabes feat.Shing02].mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/11 funkin.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/05 mystline.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/03 aruarian dance.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/09 genome.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/15 how you feel.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/12 stay.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/13 chambers.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/02 the space between two world.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/07 ole.mp3 +Mar 30 10:36 : update: added HipHop/Samurai Champloo/Samurai Champloo - depature/16 624 part1.mp3 +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/1 Native Lungs.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/2 Feel It.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/8 Nightmare Walking.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/12 DeepRest.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/13 Finally Arrive.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/4 We Will Remember.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/3 Death In Me.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/6 Rhymes On Everything.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/7 The New Raw.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/11 48 Prisons.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/9 Too Many Tomorrows.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/10 Step It Up.mp3 +Mar 30 10:36 : update: added HipHop/Braille - Native Lungs/Braille - Native Lungs/5 The Hardway.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/10 Como Se Dice.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/07 Change This World.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/01 The City.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/11 Art Ambidextrous.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/05 Interlude.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/08 Beautiful Pain.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/03 Lean.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/02 So Help Me.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/04 Inheritance.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/06 I Hate It.mp3 +Mar 30 10:36 : update: added HipHop/Art Ambidextrous/Art Ambidextrous/09 Dig.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 02_-_opposite_side.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 08_-_conquered.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 07_-_in_the_place_tonight_(rock_rock_reprise).mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 09_-_peace.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 05_-_classic.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 06_-_no_mic_4_thai.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 03_-_organic.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 04_-_right_now.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 10_-_rock_rock.mp3 +Mar 30 10:36 : update: added HipHop/Othello & Hipknotics - Classic/Othello & Hipknotics - Classic - 01_-_let's_begin.mp3 +Mar 30 10:36 : update: added HipHop/26_TheBangers.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/15-acts 29 - when the smoke clears.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/17-acts 29 - confessions ft. tiffany simpso.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/01-acts 29 - intro.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/10-acts 29 - posse on burnside.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/11-acts 29 - missionary dater.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/02-acts 29 - see clear.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/13-acts 29 - hurts to see ft. tiffany simps.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/05-acts 29 - sp 2001.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/03-acts 29 - blank minds.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/16-acts 29 - come on ft. kate partridge.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/14-acts 29 - we know.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/12-acts 29 - family life ft. othello of loj.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/07-acts 29 - overnight.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/08-acts 29 - deja vu.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/04-acts 29 - shoot out.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/09-acts 29 - statements.mp3 +Mar 30 10:36 : update: added HipHop/Acts29 - Under Exposed/06-acts 29 - sweet tooth ft. tiffany simpso.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/108-ohmega_watts-roc_the_bells_(ft._lightheaded).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/209-ohmega_watts-adaptacao_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/104-ohmega_watts-shorty_shouts.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/204-ohmega_watts-shorty_shouts_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/114-ohmega_watts-found_(cap_on_clap_off_interlude).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/117-ohmega_watts-freak_out.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/206-ohmega_watts-few_and_far_between_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/201-ohmega_watts-whats_it_worth_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/214-ohmega_watts-found_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/208-ohmega_watts-roc_the_bells_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/102-ohmega_watts-triple_double_(ft._theory_hazit).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/110-ohmega_watts-saywhayusay_(teaspoon_of_sugar_interlude).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/207-ohmega_watts-eyes_and_ears_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/113-ohmega_watts-memory_lane_(ft._genahral_victor).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/106-ohmega_watts-few_and_far_between.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/213-ohmega_watts-memory_lane_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/109-ohmega_watts-adaptacao_ft._tita_lima.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/116-ohmega_watts-the_platypus_strut.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/103-ohmega_watts-no_delay_(ft._surreal_of_the_sound_providers).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/101-ohmega_watts-whats_it_worth.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/115-ohmega_watts-work_for_wealth_(ft._ragen_fykes_and_barry_hampton_of_triple_grip).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/105-ohmega_watts-model_citizen.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/107-ohmega_watts-eyes_and_ears_(ft._jneiro_jarel_and_shape_of_broad_minds).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/205-ohmega_watts-model_citizen_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/203-ohmega_watts-no_delay_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/112-ohmega_watts-dedicated.mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/211-ohmega_watts-are_you_satisfied_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/212-ohmega_watts-dedicated_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/111-ohmega_watts-are_you_satisfied_(ft._sugarpie_desanto).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/210-ohmega_watts-saywhayusay_(instrumental).mp3 +Mar 30 10:36 : update: added HipHop/Ohmega Watts - Watts Happening/118-ohmega_watts-gone_with_the_wind.mp3 +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/07 Violent Feminine with DJ Sean P.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/06 Leon Is King with Sivion.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/09 Arrowsmitherines.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/02 Stickabush.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/05 Kick In TheDoors with Othello and Theory Hazit.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/10 Bending Benson.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/04 Nirvanding with Chucky Sly.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/01 Modest Mouseketeer.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/08 Pearls of a Pig Jam with Sev Statik.mp3 +Mar 30 10:36 : update: added HipHop/Writer Dye Official MP3 Masters/Writer Dye Official MP3 Masters/03 Adidas Have 3 White Stripes.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/02. Money Fight.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/08. The Hottest.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/04. Future Bright.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/09. Murda She Wrote.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/05. Bad Moves.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/06. Muévelo.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/10. RITMO (Bad Boys For Life) (Remix).mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/07. Damn I Love Miami.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/01. Uptown II.mp3 +Mar 30 10:36 : update: added HipHop/BadBoysForLife/03. RITMO (Bad Boys For Life).mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/01. Locomotive.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/04. Japanese Folk Song.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/02. I Didn't Know About You (Take 4).mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/09. Green Chimneys.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/05. Between The Devil And The Deep Blue Sea.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/03. Straight, No Chaser.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/07. This Is My Story, This Is My Song.mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/08. I Didn't Know About You (Take 1).mp3 +Mar 30 10:36 : update: added Jazz/Straight No Chaser/06. We See.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/In_Your_Sunshine.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/December.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Fruit_Of_Another.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Give_Me_A_Sign.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Oh.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Be_Yourself.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/I'll_Be_fine.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Heaven.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Angel_Eyes.mp3 +Mar 30 10:36 : update: added Jazz/Janita/Janita - I'll Be Fine/Firefly.mp3 +Mar 30 10:36 : update: added Jazz/Art Blakey And The Jazz Messangers Blue Note 4003 (Full Album).mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Time After Time-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Shout-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Human Nature-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Jean Pierre-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Once Upon A Summertime-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Bye Bye Blackbird-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Concierto De Aranjuez-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/I Don't Wanna Be Kissed (By Anyone But You)-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/So What-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Miles-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/'Round Midnight-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/It Ain't Necessarily So-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/MilesDavies/Summertime-Miles Davis.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/05 And I Love It.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/07 It's For Real.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/06 Pusshhhhhh.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/01 The Intro.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/10 Murs Inatra.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/02 Are You Ready.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/09 Love The Way.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/03 Nina Ross.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/08 Marry Me.mp3 +Mar 30 10:36 : update: added Jazz/9thWonderMursSweetLord/04 Free.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/09.laid it.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/04.rooster poot.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/06.hustle bird.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/01.rattlesnake.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/10.varee.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/08.hollywood hump.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/07.spinning.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/02.introducing the players.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/03.what it is.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/11.she locked it.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Rattlesnake_75/05.gone forever.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD1/04 Ohio Players - Fire.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD1/01 Ohio Players - Skin Tight.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD1/05 Ohio Players - I Want to Be Free.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD1/02 Ohio Players - Jive Turkey.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD1/03 Ohio Players - Heaven Must Be Like this.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/05 Ohio Players - Feel the Beat (Everybody Disco).mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/03 Ohio Players - Far East Mississippi.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/12 Ohio Players - Everybody Up.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/07 Ohio Players - Body Vibes.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/09 Ohio Players - Good Luck Charm.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/10 Ohio Players - Funk-O-Nots.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/06 Ohio Players - O-H-I-O.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/08 Ohio Players - Merry-Go-Round.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/04 Ohio Players - Only a Child Can Love.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/11 Ohio Players - Time Slips Away.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/02 Ohio Players - Bi-Centennial.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players/Ohio Players - Gold (2008) CD2/01 Ohio Players - Who'd She Cool.mp3 +Mar 30 10:36 : update: added Jazz/With or Without.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/02_Enrico_Pieranunzi_-_The_Flight_of_Belphegor.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/03_Francesco_Negro_-_Koala.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/10_Andrea_Beneventano_-_Lua_Branca.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/05_Stefania_Tallini_4T._-_Absence.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/06_Raffaele_Genovese_-_Fire_and_Ice.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/08_Andrea_Lubrani_Trio_-_Song_for_Tita.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/01_Enrico_Pieranunzi_-_Prolusion.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/07_Andrea_Beneventano_-_Donna_Quee.mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/09_Simone_Morbidelli_-_Blue_Moss_(Piano_Forte).mp3 +Mar 30 10:36 : update: added Jazz/Modern Jazz Piano/04_Simone_Morbidelli_-_Picture_of_You.mp3 +Mar 30 10:36 : update: added Jazz/NATHAN DAVIS/THE HIP WALK/THE HIP WALK 04 YESTERDAYS 320kbps.mp3 +Mar 30 10:36 : update: added Jazz/NATHAN DAVIS/THE HIP WALK/THE HIP WALK 05 THAT KAYCEE THING 320kbps.mp3 +Mar 30 10:36 : update: added Jazz/NATHAN DAVIS/THE HIP WALK/THE HIP WALK 02 WHILE CHILDREN SLEEP 320kbps.mp3 +Mar 30 10:36 : update: added Jazz/NATHAN DAVIS/THE HIP WALK/NATHAN DAVIS THE HIP WALK 01 THE HIP WALK 320kbps.mp3 +Mar 30 10:36 : update: added Jazz/NATHAN DAVIS/THE HIP WALK/THE HIP WALK 03 TRAIN OF THOUGHT 320kbps.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(01) [Santana] Singing Winds, Crying Beasts.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(09) [Santana] El Nicoya.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(07) [Santana] Samba Pa Ti.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(02) [Santana] Black Magic Woman - Gypsy Queen.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(06) [Santana] Mother’s Daughter.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(05) [Santana] Se a Cabo.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(08) [Santana] Hope You’re Feeling Better.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(03) [Santana] Oye Como Va.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#2 Santana II (Abraxas) [1970]/(04) [Santana] Incident at Neshabur.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(01) [Santana] Batuka.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(04) [Santana] Toussaint L'Overture.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(02) [Santana] No One To Depend On.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(09) [Santana] Para Los Rumberos.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(05) [Santana] Everybody's Everything.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(03) [Santana] Taboo.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(06) [Santana] Guajira.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(07) [Santana] Jungle Strut.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#3 Santana III [1971]/(08) [Santana] Everything's Coming Our Way.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(09) [Santana] Soul Sacrifice.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(02) [Santana] Evil Ways.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(08) [Santana] You Just Don't Care.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(03) [Santana] Shades of Time.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(01) [Santana] Waiting.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(06) [Santana] Persuasion.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(05) [Santana] Jingo.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(04) [Santana] Savor.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#1 Santana I (Santana) [1969]/(07) [Santana] Treat.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(11) [Santana] Blues Magic.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(04) [Santana] Fillmore East.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(14) [Santana] You And I.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(15) [Santana] Come As You Are.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(02) [Santana] Shake It.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(16) [Santana] Forgiveness.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(10) [Santana] Caminando.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(08) [Santana] All Aboard.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(05) [Santana] Love Makes The World Go Round.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(07) [Santana] Choo Choo.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(03) [Santana] Anywhere You Want To Go.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(06) [Santana] Freedom In Your Mind.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(09) [Santana] Sueños.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(13) [Santana] Leave Me Alone.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(12) [Santana] Echizo.mp3 +Mar 30 10:36 : update: added Jazz/Santana I, II, III & IV (1969-2016)/#4 Santana IV [2016]/(01) [Santana] Yambu.mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 12 - come down (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 06 - matteo's affair (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 02 - what's up with joe (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 10 - interludes are great #2 (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 16 - summer heat (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 18 - interludes are great #3 (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 13 - nothin' betta (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 11 - green light (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 15 - laws and rules (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 09 - my neighbour likes house music (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 21 - interludes are great #4.mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 17 - was it (krewcial, dee ferguson).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 14 - lonely earl (grazzhoppa).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 05 - interludes are great #1(lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 07 - gordon lovers (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 22 - outro.mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 01 - intro (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 19 - the hour after (dvl).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 08 - meanwhile on the west coast (krewcial, kazi, ohno).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 04 - byrds fly high (lefto).mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 20 - all together.mp3 +Mar 30 10:36 : update: added Jazz/Out of The Blue/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/out of blue - 03 - a night in tijuana (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/04 - Soul Survivor.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/08 - Crank That.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/09 - Shawty.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/05 - Splash Waterfalls.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/07 - Walk It Out.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/10 - A Bay Bay ( Mike Phillips Version).mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/02 - A Bay Bay.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/01 - Get Low.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/11 - Bridging The Great Divide.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/03 - Salt Shaker.mp3 +Mar 30 10:36 : update: added Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/06 - Sensual Seduction.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/02 N.Y.C.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/13 Shine.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/15 Best Place in the World.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/07 Love Is a Beautiful Thing.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/01 House Is Not a Home.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/01 Keep on Smilin'.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/08 She's So Shy.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/06 Unconditional.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/12 Where Do We Go from Here-.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/14 Your Love.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/04 Wounded Bird.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/03 Would I Lie to You-.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/10 Be a Little Easy on Me.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/03 24-7-365.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/05 Peace of Mind.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/09 I Can't Find the Words.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/11 Vowel Song.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/06 Sunshine & Happiness.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/04 Hurt No More.mp3 +Mar 30 10:36 : update: added Jazz/Charles & Eddie/10 Little Piece of Heaven.mp3 +Mar 30 10:36 : update: added Jazz/J_Rawls/j rawls and middle child - rawls and middle (2008)/02-j.rawls_and_middle_child_-_til_the_sun_comes.mp3 +Mar 30 10:36 : update: added Jazz/J_Rawls/j rawls and middle child - rawls and middle (2008)/01-j.rawls_and_middle_child_-_rawls_and_middle_(intro).mp3 +Mar 30 10:36 : update: added Jazz/J_Rawls/02-j.rawls_and_middle_child_-_til_the_sun_comes.mp3 +Mar 30 10:36 : update: added Jazz/J_Rawls/01-j.rawls_and_middle_child_-_rawls_and_middle_(intro).mp3 +Mar 30 10:36 : update: added Jazz/J_Rawls/03-j.rawls_and_middle_child_-_lovers_on_a_stroll.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/21 - James Sclavunos, Grinderman, Warren Ellis, Martyn Casey, Nick Cave - Palaces of Montezuma.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/11 - Emiliana Torrini - Gun.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/01 - Massive Attack - Paradise Circus.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/13 - Suede - She.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/14 - Paul Englishby - The Children.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/20 - Paul Englishby - Alice.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/17 - Marilyn Manson - Sweet Dreams (Are Made of This).mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/08 - Paul Englishby - John Luther.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/10 - Paul Englishby - Unlucky Young Couple.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/18 - Paul Englishby - He's Behind You.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/05 - Gil Scott-Heron - Me and the Devil.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/15 - Joan as Police Woman - Flash.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/03 - Heavy, The - Big Bad Wolf.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/09 - Nina Simone - Don't Let Me Be Misunderstood.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/16 - Paul Englishby - Double Crossed.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/12 - Paul Englishby - Attack in the Attic.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/06 - Paul Englishby - Luther Does Things His Way.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/22 - Kasabian - Black Whistler.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/19 - Hanni El Khatib - I Got a Thing.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/04 - Paul Englishby - Carnage.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/02 - Paul Englishby - The First Case.mp3 +Mar 30 10:36 : update: added Jazz/IdrisElbaPresentsLuther/07 - Robert Plant - Satan Your Kingdom Must Come Down.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/10 - Burn This Disco Out.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/01 - Don't Stop 'Til You Get Enough.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/09 - It's The Falling In Love.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/03 - Workin' Day And Night.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/05 - Off The Wall.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/08 - I Can't Help It.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/02 - Rock With You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/04 - Get On The Floor.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/07 - She's Out Of My Life.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1979] Off The Wall/06 - Girlfriend.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/Michael jackson - Rock With You(classical slow).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/09 - The Lady In My Life.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/05 - Beat It.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/07 - Human Nature.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/01 - Wanna Be Startin' Somethin'.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/03 - The Girl Is Mine.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/04 - Thriller.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/08 - P.Y.T. (Pretty Young Thing).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/02 - Baby Be Mine.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1982] Thriller/06 - Billie Jean.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/02 - The way you make me feel.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/09 - Dirty Diana.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/05 - Just good Friends.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/11 - Leave me alone.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/07 - Man in the Mirror.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/03 - Speed Demon.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/10 - Smooth Criminal.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/04 - Liberian Girl.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/08 - I just cant stop loving you.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/01 - Bad.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1987] Bad/06 - Another Part of me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/Michael Jackson - Burn This Disco Out(multitrack Mix).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/09 - Johnny Raven.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/07 - Euphoria.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/08 - Morning Glow.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/02 - Up Again.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/01 - With a Child's Heart.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/03 - All the Things You Are.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/04 - Happy (Love Theme from _Lady Si.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/05 - Too Young.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/10 - Music and Me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1973] Music & Me/06 - Doggin' Around.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/09 - You Are Not Alone.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/15 - Smile.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/08 - Come Together.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/14 - Little Susie.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/05 - Earth Song.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/11 - Tabloid Junkie.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/04 - This Time Around.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/03 - Stranger In Moscow.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/13 - History.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/01 - Scream.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/12 - 2 Bad.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/06 - D.S.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/10 - Childhood.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/02 - They Don't Care About Us.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/07 - Money.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/05 - She's Out Of My Life.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/01- Billie Jean.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/11 - The Girl Is Mine.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/03 - Black Or White.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/07 - I Just Cant Stop Loving You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/10 - Beat It.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/08 - Man In The Mirror.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/15 - Heal The World.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/14 - Wanna Be Startin' Somethin'.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/06 - Bad.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/09 - Thriller.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/13 - Don't Stop 'Til You Get Enough.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/12 - Remember The Time.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/02 - The Way You Make Me Feel.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/04 - Rock With You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/14 - Dangerous.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/06 - Can't Let Her Get Away.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/02 - Why You Wanna Trip On Me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/03 - In The Closet.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/01 - Jam.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/13 - Gone Too Soon.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/08 - Black Or White.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/07 - Heal The World.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/10 - Give In To Me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/09 - Who Is It.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/05 - Remember The Time.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/11 - Will You Be There.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/04 - She Drives Me Wild.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1991] Dangerous/12 - Keep The Faith.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/03 - Girl Don't Take Your Love from Me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/07 - Wings of My Love.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/10 - You've Got a Friend.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/05 - Got to Be There.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/08 - Maria (You Were the Only One).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/04 - In Our Small Way.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/06 - Rockin' Robin.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/09 - Love Is Here and Now You're Gone.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/01 - Ain't No Sunshine.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Got to Be There/02 - I Wanna Be Where You Are.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/Michael Jackson - Don't Stop 'til You Get Enough.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/Michael Jackson - I Can't Help It (Original Demo) (Audio HQ).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/08 - In Our Small Way.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/03 - People Make The World Go Round.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/02 - Greatest Show On Earth.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/04 - We've Got A Good Thing Going.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/01 - Ben.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/10 - You Can Cry On My Shoulder.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/07 - What Goes Around Comes Around.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/06 - My girl.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/05 - Everybody's Somebody's Fool.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1972] Ben/09 - Shoo Be Doo Be Doo Da Day.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/12 - Don't Walk Away.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/10 - You Are My Life.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/05 - Heaven Can Wait.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/09 - 2000 Watts.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/15 - Whatever Happens.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/01 - Unbreakable.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/16 - Threatened.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/14 - The Lost Children.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/03 - Invincible.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/02 - Heartbreaker.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/08 - Speechless.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/06 - You Rock My World.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/11 - Privacy.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/13 - Cry.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/07 - Butterflies.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2001] Invincible/04 - Break of Dawn.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/08 - (I Can't Make It) Another Day (Featuring Lenny Kravitz).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/04 - (I Like) The Way You Love Me.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/03 - Keep Your Head Up.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/07 - Breaking News.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/06 - Best Of Joy.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/09 - Behind The Mask.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/05 - Monster (Featuring 50 Cent).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/01 - Hold My Hand (Duet With Akon).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/10 - Much To Soon.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2010] Michael/02 - Hollywood Tonight.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/09 - Dear Michael.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/04 - Cinderella Stay Awhile.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/05 - We've Got Forever.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/02 - Take Me Back.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/06 - Just A Little Bit Of You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/07 - You Are There.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/08 - Dapper-Dan.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/01 - We're Almost There.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/03 - One Day In Your Life.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[1975] Forever, Michael/10 - I'll Come Home To You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/10 Chicago (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/16 XSCAPE (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/05 Slave to the Rhythm.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/13 Slave to the Rhythm (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/07 Blue Gangsta.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/02 Chicago.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/08 XSCAPE.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/12 A Place with No Name (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/11 Loving You (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/17 Love Never Felt So Good.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/14 Do You Know Where Your Children Are (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/03 Loving You.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/06 Do You Know Where Your Children Are.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/04 A Place with No Name.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/09 Love Never Felt So Good (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/15 Blue Gangsta (Original Version).mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/01 Love Never Felt So Good.mp3 +Mar 30 10:36 : update: added Jazz/MichaelJackson/Michael Jackson - Off The Wall.mp3 +Mar 30 10:36 : update: added Jazz/Kiff On - Nés Funky/04 - Miss.mp3 +Mar 30 10:36 : update: added Jazz/Kiff On - Nés Funky/02 - N+® Funky.mp3 +Mar 30 10:36 : update: added Jazz/Kiff On - Nés Funky/01 - La Kiffonisation est en marche.mp3 +Mar 30 10:36 : update: added Jazz/Kiff On - Nés Funky/03 - Kung-Fu Funk.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/06-lonnie_liston_smith_-_springtime_magic.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/01-lonnie_liston_smith_-_sunburst.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/08-lonnie_liston_smith_-_explorations.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/04-lonnie_liston_smith_-_bright_moments.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/03-lonnie_liston_smith_-_floating_through_space.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/05-lonnie_liston_smith_-_we_can_dream.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/07-lonnie_liston_smith_-_loveland.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/02-lonnie_liston_smith_-_journey_into_love.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 02 - Mardi Gras (Carnival).mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 06 - Between Here And There.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 04 - Mongotee.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 07 - Renaissance.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 03 - Starlight And You.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 01 - Space Lady.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 05 - A Song Of Love.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/08 LONNIE LISTON SMITH - Free and Easy.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/05 LONNIE LISTON SMITH - On The Real Side.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/01 LONNIE LISTON SMITH - In The Park.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/07 LONNIE LISTON SMITH - Give Peace a Chance (Make Love Not War).MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/03 LONNIE LISTON SMITH - Speak About It.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/06 LONNIE LISTON SMITH - The Enchantress.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/02 LONNIE LISTON SMITH - Love is the Answer.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/04 LONNIE LISTON SMITH - Bridge Through Time.MP3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/07 Visions of a New World (Phase II).mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/01 Chance for Peace.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/04 Devika [Goddess Chants].mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/05 Sunset.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/02 Love Beams.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/06 Visions of a New World (Phase I).mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/08 Summer Nights.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/03 Colors of the Rainbow.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/04 Voodoo Woman.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/02 Desert Nights.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/03 Summer Days.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/01 Expansions.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/06 Shadows.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/05 Peace.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/expansions-75/expansions-75/07 My Love.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/01- get down everybody (it's time for world peace).mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/05 - peace & love.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/09 - golden dreams.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/04 - meditations.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/07 - goddess of love.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/02 - quiet dawn.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/06 - beautiful woman.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/03 - sunbeams.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/10 - journey into space.mp3 +Mar 30 10:36 : update: added Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/08 - inner beauty.mp3 +Mar 30 10:36 : update: added Jazz/10 Louis Armstrong - What a Wonderful World.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/B2 -The Sound Of Windwood.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/A1 - Draw Your Breaks.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/B5 - Anata (I Wish You Were Here With Me).mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/A3 - Creepin'.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/B4 - The Butterfly In A Stone Garden.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/B1 - Asa Branca.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/A2 - Cajun Moon.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/A4 - Easter Rising.mp3 +Mar 30 10:36 : update: added Jazz/Herbie Mann/Herbie Mann Feat. Cissy Houston - Surprises/B3 - Cricket Dance.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/08 Dave McMurray Nautilus.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/14 Dave McMurray Good Day.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/12 Dave McMurray Big Dreams.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/06 Dave McMurray I Want You.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/05 Dave McMurray Gar Z.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/11 Dave McMurray Chow Main Street.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/04 Dave McMurray Just An Illusion.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/10 Dave McMurray Searching.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/13 Dave McMurray The Jazz Life (Remix).mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/09 Dave McMurray Let It Go.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/07 Dave McMurray How Come U Don't Call Me Any More.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/03 Dave McMurray My Brother And Me (Remix).mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/02 Dave McMurray Feel The Need.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/The Best of/01 Dave McMurray Walk In The Night.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/Nu Life Stories/02 Searching.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/Nu Life Stories/01 Sunday Morning.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/Nu Life Stories/04 Good Day.mp3 +Mar 30 10:36 : update: added Jazz/Dave McMurray/Nu Life Stories/03 Detroit 2 Cali.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/03 - Ohio Players - Glad To Know Your Mine.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/04 - Ohio Players - Don't Fight My Love.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/06 - Ohio Players - Can You Still Love Me.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/02 - Ohio Players - Merry Go Round.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/07 - Ohio Players - O-H-I-O.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/05 - Ohio Players - Body Vibes.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/01 - Ohio Players - Angel.mp3 +Mar 30 10:36 : update: added Jazz/Ohio Players - Angel/08 - Ohio Players - Faith.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/06-pieces_of_peace-yesterdays_visions.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/04-pieces_of_peace-i_still_care.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/01-pieces_of_peace-cease_fire.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/07-pieces_of_peace-pollution-instrumental.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/02-pieces_of_peace-pollution.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/03-pieces_of_peace-flunky_for_your_love.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/08-pieces_of_peace-yesterdays_visions-instrumental_alt_take.mp3 +Mar 30 10:36 : update: added Jazz/Pieces Of Peace/Pieces Of Peace-Pieces Of Peace-2007/05-pieces_of_peace-peace_and_blessings.mp3 +Mar 30 10:36 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 10:36 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/A1 Time Is On Your Side.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/B3 I'd Rather Have You.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/B2 Where Have All The Flowers Gone.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/A3 Make It With You.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/A2 They Don't See.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/B4 Mom.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/A4 Power.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Last Days And Time/B1 Remember The Children.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/05 C'Mon Children.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/06 This World Today.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/01 Help Somebody.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/04 Fan The Fire.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/02 Moment Of Truth.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/07 Bad Tune.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/03 Love Is Life.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A1 Time Is On Your Side.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B3 I'd Rather Have You.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B2 Where Have All The Flowers Gone.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A3 Make It With You.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A2 They Don't See.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B4 Mom.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A4 Power.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B1 Remember The Children.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/05 C'Mon Children.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/06 This World Today.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/01 Help Somebody.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/04 Fan The Fire.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/02 Moment Of Truth.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/07 Bad Tune.mp3 +Mar 30 10:36 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire/03 Love Is Life.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/16. Comfort You.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/13 Let It Rain.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/05. How Could It Be.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/15. New York.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/14. What I'm Lookin' 4(Ain't No Mountain Hight Enought).mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/17. Close2Me.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/02 Open Your Eyes.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/12 Fly Baby.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/14 What I'm Lookin' 4 (Ain't No Mountain High Enough).mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/06. Forever For You.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/09 I Can't Doo Dat.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/13. Let It Rain.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/18. True Friends (And Family).mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/01 Can Ya Feel It_.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/18 True Friends (And Family).mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/02. Open Your Eyes.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/05 How Could It Be.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/08. Never.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/10. 4 Life.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/04. Harder Than That.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/06 Forever For You.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/09. I Can't Doo Dat.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/10 4 Life.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/16 Comfort You.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/07. Cool.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/11. Tradition.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/15 New York.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/01. Can Ya Feel It.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/07 Cool.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/12. Fly Baby.mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/03. Feel It (In The Air Tonight).mp3 +Mar 30 10:36 : update: added Jazz/Naturally7_Ready_II_Fly/04 Harder Than That.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/02 - Bassin' (featuring Paul Jackson, Jr.).mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/01 - Stop Watch (featuring Everette Harp).mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/12 - Paradise.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/11 - Forever Love.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/05 - Dreamin'.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/08 - Your Will (featuring Oleta Adams).mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/03 - Movin'.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/06 - Feeling Better.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/04 - It's Good to Have Friends.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/10 - Autumn Nights.mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/07 - Te Quiero (featuring Earl Klugh).mp3 +Mar 30 10:36 : update: added Jazz/Al Turner - Movin' 2008/09 - I'll Follow You.mp3 +Mar 30 10:36 : update: added Jazz/Black Finger/BLACK FINGER - From Shibuya With Love (2007)/10. Hajime Yoshizawa — Waltz For Jason.wma +Mar 30 10:36 : update: added Jazz/Black Finger/BLACK FINGER - From Shibuya With Love (2007)/1. Black Finger — Theme Of Black Finger.wma +Mar 30 10:36 : update: added Jazz/Black Finger/BLACK FINGER - From Shibuya With Love (2007)/3. Root Soul — Fuselage.wma +Mar 30 10:36 : update: added Jazz/Black Finger/BLACK FINGER - From Shibuya With Love (2007)/2. Sleepwalker — Ignition Heads.wma +Mar 30 10:36 : update: added Jazz/Black Finger/BLACK FINGER - From Shibuya With Love (2007)/11. Masa Collective — Love Is Everywhere.wma +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Arrastao.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/I Can't Believe You Love Me.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/1,2,3.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Uptight (Everything's Alright).mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Studewood.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/There Is A Time (Le Temps).mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Turkish Black.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Mohair Sam.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Walk On By.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Walkin' My Cat Named Dog.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/The Shadow Do.mp3 +Mar 30 10:36 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Hey Girl.mp3 +Mar 30 10:36 : update: added Jazz/Did You Ever.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/01 Asylum 7 Ft. Magestik Legend - Hold Your Weight.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/02 Automation Alley - Runnin'.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/03 Metasyons - Givin Up.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/04 Draztik - Spit Fire.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/05 D. Allie - Change The Name.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 1/06 USM (Metasyons, Asylum 7 & Five-Ill) - Froze Tongue.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/01 Metasyons - R.O.A.R.A..mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/02 USM - USM Represent.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/03 Five-Ill w_ Asylum 7 - Real Talk.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/04 D. Allie Feat. PL - Let It Knock.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/06 Asylum 7 - State of Mind.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2.zip/USM - Samplers 1 & 2/Sampler 2/Draztik - Second Nature.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/04 Draztik - Spit Fire.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/05 D. Allie - Change The Name.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/06 USM (Metasyons, Asylum 7 & Five-Ill) - Froze Tongue.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/01 Asylum 7 Ft. Magestik Legend - Hold Your Weight.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/02 Automation Alley - Runnin'.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 1/03 Metasyons - Givin Up.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/03 Five-Ill w_ Asylum 7 - Real Talk.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/06 Asylum 7 - State of Mind.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/04 D. Allie Feat. PL - Let It Knock.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/02 USM - USM Represent.mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/01 Metasyons - R.O.A.R.A..mp3 +Mar 30 10:36 : update: added Jazz/USM - Samplers 1 & 2/USM - Samplers 1 & 2/Sampler 2/Draztik - Second Nature.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/06 Caffeine.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/20 Vibin' (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/16 Open Mic (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/05 I'm Into You.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/01 Coffee House Swingin' f. Nile River.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/17 I'm Into You (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/11 Perculating (G' Mornin') (bonus track).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/14 Bookworm (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/18 Caffeine (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/15 Cafe Au Lait (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/10 Smitten.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/12 The Shift Change (bonus track).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/03 Cafe Au Lait.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/04 Open Mic.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/09 I'll Be....mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/21 I'll Be....mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/08 Vibin'.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/07 Cup O' Tea.mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/13 Coffee House Swingin' (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/19 Cup O' Tea (INS).mp3 +Mar 30 10:36 : update: added Jazz/Coffee House Swingers/02 Bookworm.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Jazz/JazzMix/Scenius_Jazz_Mix.mpeg +Mar 30 10:36 : update: added Jazz/JazzMix/Repercussions - Slice Of Heaven.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Jazz/JazzMix/thisisjazzclub.mpeg +Mar 30 10:36 : update: added Jazz/JazzMix/Repercussions - Test Of Time.mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 04 - byrds fly high (lefto).mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 03 - a night in tijuana (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 02 - what's up with joe (lefto).mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 01 - intro (krewcial).mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Repercussions - Promise Me Nothing.mp3 +Mar 30 10:36 : ffmpeg/mp3: Skipping 470 bytes of junk at 0. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Jazz/JazzMix/Jizzazzle_Batfreak.mpeg +Mar 30 10:36 : update: added Jazz/JazzMix/Repercussions - Find Your Way.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Jazz/JazzMix/Spiny_Norman_-_Its_Jazz_Baby.mpeg +Mar 30 10:36 : update: added Jazz/JazzMix/Wu-Tang_Clan_-_C.R.E.A.M._(Godfather_Mix).mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Jazz/JazzMix/this.is...labels.mpeg +Mar 30 10:36 : update: added Jazz/JazzMix/70's Fusion.mp3 +Mar 30 10:36 : update: added Jazz/JazzMix/Repercussions - Love Like The Sun.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/07 - A Love To Come Home To.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/05 - Can't Stop Lovin' You.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/08 - Really Don't Miss You.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/06 - Sista.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/02 - What I Wanna Do (winterlude).mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/01 - Without Love.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/04 - Lock Down.mp3 +Mar 30 10:36 : update: added Jazz/V...As in Veronica (1995)/03 - Unnecessary Trip.mp3 +Mar 30 10:36 : update: added Jazz/Piero Piccioni - Lucky Luciano [1973]/Lucky Luciano - 01 - Underground Sketches.mp3 +Mar 30 10:36 : update: added Jazz/Piero Piccioni - Lucky Luciano [1973]/Lucky Luciano - 03 - In Point Of Love.mp3 +Mar 30 10:36 : update: added Jazz/Piero Piccioni - Lucky Luciano [1973]/Lucky Luciano - 04 - Conjectures.mp3 +Mar 30 10:36 : update: added Jazz/Piero Piccioni - Lucky Luciano [1973]/Lucky Luciano - 05 - Red Shift.mp3 +Mar 30 10:36 : update: added Jazz/Piero Piccioni - Lucky Luciano [1973]/Lucky Luciano - 02 - Magic Of New York.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/17 - John Legend - So Gone.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/07 - John Legend - Hold On Longer.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/20 - John Legend - For the First Time.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/02 - John Legend - The Beginning.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/06 - John Legend - All Of Me.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/10 - John Legend - What If I Told You- (Interlude).mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/14 - John Legend - You & I (Nobody In The World).mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/13 - John Legend - Angel (Feat. Stacy Barthe) (Interlude).mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/11 - John Legend - Dreams.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/01 - John Legend - Love In The Future (Intro).mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/16 - John Legend - Caught Up.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/09 - John Legend - Tomorrow.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/18 - John Legend - We Loved It (feat. Seal).mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/08 - John Legend - Save The Night.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/12 - John Legend - Wanna Be Loved.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/15 - John Legend - Asylum.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/03 - John Legend - Open Your Eyes.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/04 - John Legend - Made To Love.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/19 - John Legend - Aim High.mp3 +Mar 30 10:36 : update: added Jazz/John Legend - Love in the Future/05 - John Legend - Who Do We Think We Are (Feat. Rick Ross).mp3 +Mar 30 10:36 : update: added Jazz/Rio/02 Ester Dean & Carlinhos Brown - Let Me Take You To Rio (Blu's Arrival).mp3 +Mar 30 10:36 : update: added Jazz/Rio/09-ester_dean-take_you_to_rio.mp3 +Mar 30 10:36 : update: added Jazz/Rio/01 Jesse Eisenberg, Jamie Foxx, Anne Hathaway, George Lopez, will.i.am & The Rio Singers - Real In Rio.mp3 +Mar 30 10:36 : update: added Jazz/Rio/07-taio_cruz-telling_the_world.mp3 +Mar 30 10:36 : update: added Jazz/Rio/04-will.i.am_jamie_foxx_and_anne_hathaway-hot_wings_(i_wanna_party).mp3 +Mar 30 10:36 : update: added Jazz/Rio/12 Bebel Gilberto - Samba De Orly.mp3 +Mar 30 10:36 : update: added Jazz/Rio/09 Ester Dean - Take You To Rio.mp3 +Mar 30 10:36 : update: added Jazz/Rio/06 Jamie Foxx - Fly Love.mp3 +Mar 30 10:36 : update: added Jazz/Rio/13-sergio_mendes-valsa_carioca.mp3 +Mar 30 10:36 : update: added Jazz/Rio/08-siedah_garrett_carlinhos_brown_mikael_mutti_and_davi_vieira-funky_monkey.mp3 +Mar 30 10:36 : update: added Jazz/Rio/13 Sérgio Mendes - Valsa Carioca.mp3 +Mar 30 10:36 : update: added Jazz/Rio/04 Jesse Eisenberg, Jamie Foxx, Anne Hathaway, George Lopez, will.i.am & The Rio Singers - Hot Wings (I Wanna Party).mp3 +Mar 30 10:36 : update: added Jazz/Rio/12-bebel_gilberto-samba_de_orly.mp3 +Mar 30 10:36 : update: added Jazz/Rio/08 Siedah Garrett, Carlinhos Brown, Mikael Mutti & Davi Vieira - Funky Monkey.mp3 +Mar 30 10:36 : update: added Jazz/Rio/03 Sergios Mendez feat. Gracinha Leporace - Mas Que Nada (2011 Rio Version).mp3 +Mar 30 10:36 : update: added Jazz/Rio/05 Jemaine Clement - Pretty Bird.mp3 +Mar 30 10:36 : update: added Jazz/Rio/06-jamie_foxx-fly_love.mp3 +Mar 30 10:36 : update: added Jazz/Rio/02-ester_dean_and_carlinhos_brown-let_me_take_you_to_rio_(blus_arrival).mp3 +Mar 30 10:36 : update: added Jazz/Rio/07 Taio Cruz - Telling The World.mp3 +Mar 30 10:36 : update: added Jazz/Rio/01-jesse_eisenberg_jamie_foxx_anne_hathaway_george_lopez_will.i.am_and_the_rio_singers-real_in_rio.mp3 +Mar 30 10:36 : update: added Jazz/Rio/10-mikael_mutti-balanco_carioca.mp3 +Mar 30 10:36 : update: added Jazz/Rio/11-carlinhos_brown_and_mikael_mutti-sapo_cai.mp3 +Mar 30 10:36 : update: added Jazz/Rio/03-sergios_mendez_feat._gracinha_leporace-mas_que_nada_(2011_rio_version).mp3 +Mar 30 10:36 : update: added Jazz/Rio/05-jemaine_clement-pretty_bird.mp3 +Mar 30 10:36 : update: added Jazz/Rio/10 Mikael Mutti - Balanco Carioca.mp3 +Mar 30 10:36 : update: added Jazz/Rio/11 Carlinhos Brown & Mikael Mutti - Sapo Cai.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/07 Moonwalk.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/11 There’s A Break In The Road.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/19 Big Mac [Instrumental][Instrumental].mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/15 Cissy Strut.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/03 Hercules.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/06 One Nation Under A Groove [Instrumental][Instrumental].mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/02 Harlem Clavinette.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/04 Night People.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/14 Freddie’s Dead.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/08 A Piece Of The Action.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/09 Give Me Your Love.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/18 Electric Spanking Of War Babies.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/10 Sneakin’ Sally Through The Alley.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/16 From A Whisper To A Scream.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/13 If You Don’t Want My Love.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/20 Struttin’ On Sunday.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/17 I Don’t Dig No Phoney.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/01 Superfly.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/05 Junkie Chase [Instrumental][Instrumental].mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 1/12 The Message.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/16 Holly Wants To Go To California.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/20 Chase [Instrumental][Instrumental].mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/07 Funky Man.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/04 (We Gotta) Bust Out Of The Ghetto.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/03 The Bottle.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/18 Poppin’ Popcorn.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/11 Funky Soul.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/09 I Gotcha.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/13 Gator Tail.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/15 Do It Right.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/08 Louie.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/14 Koochie, Koochie, Koochie.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/06 Back Against The Wall.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/12 9 ‘Till 5.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/19 The Funky Judge.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/05 That Thang.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/17 Get Ta’ Steppin’.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/10 A Heavy Dude.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/02 Quicksand.mp3 +Mar 30 10:36 : update: added Jazz/Undercover Brother/CDs/Undercover Brother- The Badass Blaxpoitation Collection Disc 2/01 Let’s Do It Again.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/12 Surrounded (Instrumental).mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/04 Relax (Matt. 11_13).mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/06 Adore You.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/09 All Of Your Love.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/08 So Amazing.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/13 Lift Your Hands (Instrumental).mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/03 Do Your Will.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/01 Draw Me Lord.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/07 Keep On Praising Him.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/11 Amazing Grace (Medley).mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/10 Today Lord.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/02 Lift Your Hands.mp3 +Mar 30 10:36 : update: added Jazz/Juleea/Draw Me Lord/05 Surrounded.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/10 A Talk_ Bluesology_Black History_Jaws_The Revolution Will Not Be Televised 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/01 Offering 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/11 Winter in America (Solo Version) 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/04 Ain't No Such Thing As Superman 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/09 Alluswe 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/02 The Liberation Song (Red, Black And Green) 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/08 Western Sunrise 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/07 Winter in America 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/05 Pardon Our Analysis (We Beg Your Pardon) 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/03 Must Be Something 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/06 Guerilla 1.m4a +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/04 Corners.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/08 Late Last Night.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/06 Push Come To Shove.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/01 Shut Um Down.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/02 Alien (Hold On To Your Dreams).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/05 1980.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/07 Shah Mot.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/1980/03 Willing.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/14 A Sign Of The Ages.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/02 Sex Education - Ghetto Style.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/07 Home Is Where The Hatred Is.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/11 Did You Hear What They Said-.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/16 The Needle's Eye.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/03 The Get Out Of The Ghetto Blues.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/08 Brother.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/06 Pieces Of A Man.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/09 Save The Children.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/05 Lady Day And John Coltrane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/13 I Think I'll Call It Morning.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/01 The Revolution Will Not Be Televised.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/04 No Knock.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/17 The Prisoner.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/10 Whitey On The Moon.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/12 When You Are Who You Are.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/15 Or Down You Fall.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/08 A Sign Of The Ages.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/09 Or Down You Fall.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/04 Home Is Where The Hatred Is.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/05 When You Are Who You Are.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/03 Lady Day and John Coltrane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/02 Save The Children.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/06 I Think I'll Call It A Morning.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/01 The Revolution Will Not Be Tel.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/10 The Needle's Eye.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/11 The Prisoner.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Pieces of a Man/07 Pieces Of A Man.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/07 Black History_ The World.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/06 Ready or Not.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/01 Fast Lane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/03 No Exit.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/04 Blue Collar.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Moving Target/02 Washington, D.C..mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/15 A Legend In His Own Mind.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/12 Fast Lane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/11 H2Ogate Blues.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/08 Angel Dust.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/03 Winter In America.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/10 Washington D.C..mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/05 Ain't No Such Thing As A Superman.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/13 Lady Day And John Coltrane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/14 Your Daddy Loves You (for Gia Louise).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/06 Re-Ron.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/01 The Revolution Will Not Be Televised.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/02 The Bottle.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/04 Johannesburg.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/09 'B' Movie.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/07 Shut 'Em Down.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/04 Morning Thoughts.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/02 Grandma's Hands.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/05 Inner City Blues.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/01 Storm Music.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/03 Is That Jazz.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Reflections/07 B Movie.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/08 Show Bizness.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/06 Three Miles Down.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/01 Angel Dust.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/09 Prayer for Everybody_To Be Free.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/07 Angola, Louisiana.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/05 Better Days Ahead.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/03 Cane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/04 Third World Revolution.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Secrets/02 Madison Avenue.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/04 Beginnings (First Minute Of A New Day).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/07 A Lovely Day.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/01 Johannesburg.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/05 Essex.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/02 A Toast To The People.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/06 Fell Together.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/02 The Summer Of 42.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/From South Africa To South Carolina/04 South Carolina (Barnwell).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/03 A Very Precious Time.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/08 H2Ogate Blues.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/10 Winter In America (Live).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/07 Your Daddy Loves You.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/04 Back Home.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/11 Song For Bobby Smith (Alternate Take).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/01 Peace Go With You, Brother (As-Salaam-Alaikum).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/02 Rivers Of My Fathers.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/13 The Bottle - Guan Guanco (Live).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/06 Song For Bobby Smith.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/09 Peace Go With You, Brother (As-Salaam-Alaikum).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/12 Your Daddy Loves You (Live).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/05 The Bottle.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Winter In America/14 Winter In America.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/08 Delta Man (Where Im Comin From).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/02 Song Of The Wind.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/05 Under The Hammer.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/07 Tuskeegee 626.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/09 95 South (All Of The Places We've Been).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/06 We Almost Lost Detroit.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/03 Racetrack In France.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/01 Hello Suday Hello Road.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Bridges/04 Vildgolia (Deaf,Dumb,And Blind).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/10 The Vulture.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/09 Whitey On The Moon.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/08 Plastic Pattern People.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/12 Paint It Black.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/07 Evolution (And Flashback).mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/05 Small Talk At 125th And Lenox.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/04 Comment #1.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/11 Enough.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/02 Omen.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/13 Who'll Pay Repartions For My S.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/03 Brother.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/06 The Subject Was Faggots.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/01 The Revolution Will Not Be Tel.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/14 Everyday.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/07 Home Is Where The Hatred Is.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/03 New York City.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/01 It's Your World.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/08 Bicentennial Blues.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/06 Must Be Something.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/05 Trane.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/09 The Bottle.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/10 Sharing.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/04 17th Street.mp3 +Mar 30 10:36 : update: added Jazz/Gill Scott-Heron/It's Your World/02 Possum Slim.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/05 - Tryin' to be me.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/06 - What it is.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/10. I Love You so much.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/02 - Get it on.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/03 - Get on off me.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/01 - Reach for it.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/09. All Fed up.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/08 - Why do you stay here.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/07 - What's happening over there.mp3 +Mar 30 10:36 : update: added Jazz/Ebony Rhythm Funk Campaign/Ebony Rhythm Funk Campaign/04 - If i close my eyes.mp3 +Mar 30 10:36 : update: added Jazz/soulchef.mp3 +Mar 30 10:36 : update: added Jazz/Charlie Parker/Charlie Parker With Strings/Charlie Parker With Strings - 11. They Can't Take That Away From Me.mp3 +Mar 30 10:36 : update: added Jazz/Charlie Parker/Charlie Parker With Strings/Charlie Parker With Strings - 12. Easy To Love.mp3 +Mar 30 10:36 : update: added Jazz/Charlie Parker/Charlie Parker With Strings/Charlie Parker With Strings - 1. Just Friends.mp3 +Mar 30 10:36 : update: added Jazz/Charlie Parker/Charlie Parker With Strings/Charlie Parker With Strings - 10. East Of The Sun (And West Of The Moon).mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/10-We Can Do It.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/08-Nights Out in the Jungle.mp3 +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/12-Carla.mp3 +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/03-Cloud 9.mp3 +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/02-Automaton.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/06-Something About You.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/07-Summer Girl.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/11-Vitamin.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/09-Dr Buzz.mp3 +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/05-Hot Property.mp3 +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/01-Shake It On.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 10:36 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 10:36 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 10:36 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 10:36 : update: added Jazz/Jamiroquai - Automaton (2017)/04-Superfresh.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/05-dwele_-_dim_the_lights_(feat.raheem_devaughn)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/07-dwele_-_how_i_deal_(feat.slum_village)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/01-dwele_-_wants_(intro)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/08-dwele_-_hangover-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/10-dwele_-_detroit_sunrise_(feat.monica_blaire_and_lloyd_dwayne)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/03-dwele_-_grown-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/13-dwele_-_love_you_right-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/15-dwele_-_whats_not_to_love-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/17-dwele_-_i_wanna_(feat._dj_quik)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/12-dwele_-_i_understand-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/04-dwele_-_dodgin_your_phone_(feat.david_banner)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/11-dwele_-_women_(intro)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/02-dwele_-_i_wish-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/14-dwele_-_more_than_a_(interlude)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/09-dwele_-_my_people-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/06-dwele_-_world_(intro)-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Dwele_-_W.Ants_W.Orld_W.Omen_(W.W.W.)-2010-YSP/16-dwele_-_give_me_a_chance-ysp.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/01 - Soulful Strut.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/10 - Uptown.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/05 - I Can Count The Times.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/07 - Headman's Haunt.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/06 - Village Groove.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/03 - Play That Groove For Me.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/04 - Bordertown.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/09 - Mystical Force.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/02 - Can You Stop The Rain.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/08 - Poacher Man.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/02 - Yor Love.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/05 - Next Exit.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/08-Summer Chill.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/06 - I Miss Home.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/03 - Only For You.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/01 - Take Five.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/09 - Till You Return To Me.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/04 - Greene Street.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/07 - Love Like This.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/10- Get On Up.mp3 +Mar 30 10:36 : update: added Jazz/Grover Washington Jr/next_exit/Next Exit/11 - Check Out Grover.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Greatdayndamornin'-Booty-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Untitled (How Does It Feel)-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Left And Right-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Devil's Pie-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/The Root-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Playa Playa-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Feel Like Makin' Love-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/One Mo'Gin-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Spanish Joint-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Africa-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Send It On-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/Chicken Grease-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/D'Angelo Voodoo Full Album/The Line-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Time to Know (Be Waltz).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - On the Run.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cat Blues (Mr. Scruff remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Kawaisou na Faye (High Socks).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Bad Dog No Biscuits.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 2.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Hamduche.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - NY Rush.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Felt Tip Pen.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cats On Mars (DMX Krew remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Words That We Couldn't Say.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Yo Pumpkin Head.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Rain (female vocal version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Waste Land.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Forever Broke (Fila Brazillia remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Fantaisie Sign (Ian Pooley remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Piano Black.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Doggy Dog I.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - March for Koala.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Bindy.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Space Lion (4 Hero remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Rush (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Tank! (Luke Vibert remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Tank! (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Ave Maria.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Odd Ones.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Road To The West.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Wo Qui Non Coin.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Call Me Call Me (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Mushroom Hunting.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Clutch.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Powder.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Adieu.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Rush.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cosmic Dare (Pretty with a Pistol).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Vitamin A.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Gateway.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cosmos.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cats on Mars.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Egg and I.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Diggin'.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Pot City (Yab's dub).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Forever Broke.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Ask DNA.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Wo Qui Non Coin (Shonbori Short version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Fingers.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - ELM.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 6.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Black Coffee.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Singing Sea.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Old School Game.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Fantaisie Sign.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Farewell Blues.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Spy.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Piano Solo (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Miwaku no Horse Riding (Go Go Cactus Man) - Sung by Andy.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - No Money.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Real Folk Blues (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Tank!.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Space Lion.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Waltz for Zizi.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Eyeball.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - SF Game Center.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Too Good Too Bad.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Vitamin C.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 3.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Piano Black (Ian O'Brien remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Pot City.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - See You Space Cowboy.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Singing Sea II.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - 23 Hanashi.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 1.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Tank! (The Power of Kung Food remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - 7 Minutes.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Sasurai no Cowboy (Cowboy Bebop Theme) - Sung by Ed.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Doggy Dog II.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 5.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Is It Real.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Chicken Bone.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Vitamin B.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Open 24 Hours.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Rouya.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Fe.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Piano Bar I.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Dijurido.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Musawe.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Goodnight Julia.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Sax Quartet.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - What Planet Is This.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - See You Space Cowboy (Not Final Mix Mountain Root).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Telephone Shopping.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Go Go Cactus Man (guitar version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Sasurai no Cowboy (Cowboy Bebop Theme) - Sung by Ein.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - 3.14.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - You Make Me Cool.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Slipper Sleaze.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Blue.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Too Good Too Bad (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Rain (male vocal version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Fe (DJ Vadim remix).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Flying Teapot.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Egg and You.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Radio Free Mars Talk 4.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Spokey Dorkey.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Cat Blues.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Want It All Back (Clavient Haterr version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Bad Dog No Biscuits (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Space Lion (Orgel version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Mushroom Hunting (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Autumn In Ganymede.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - American Money.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Stella By Moor.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Memory.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Don't Bother None (long version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Kabuto ga ni Kodai no Sakana.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Give and Take.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Tank! (TV version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Road to the West (with rhythm).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Butterfly.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Dont Bother None.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Gotta Knock A Little Harder.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Meteor.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Encore Un Verre.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Pushing The Sky.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Go Go Cactus Man.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - What Planet Is This (live version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Kawaisou na Faye (Lip Cream).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Car 24.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Real Folk Blues.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Want It All Back.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Doggy Dog III.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Call Me Call Me.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Live in Baghdad.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Green Bird.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Adieu (long version).mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - No Reply.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Amusement Park.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - Digging My Potato.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - The Real Man.mp3 +Mar 30 10:36 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop - PAPA Plastic.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/07 - quincy jones - just a man.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/04 - quincy jones - boogie joe the grinder.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/01 - quincy jones - body heat.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/02 - quincy jones - soul saga.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/05 - quincy jones - everything must change.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/06 - quincy jones - one track mind.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/03 - quincy jones - everything must change.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/08 - quincy jones - along came betty.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/05 - Rock With You.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/03 - Cool Joe, Mean Joe (Killer Joe).mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/01 - Jook Joint Intro.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/06 - Moody's Mood For Love.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/04 - You Put A Move On My Heart.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/02 - Let The Good Times Roll.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 07 - One Hundred ways.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 04 - Betcha Wouldn't Hurt me.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 09 - Turn On The Action.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 03 - Just Once.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 08 - Velas.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 02 - The Dude.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 01 - Ai No Corrida.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 06 - Razzamatazz.mp3 +Mar 30 10:36 : update: added Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 05 - Somethin' Special.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/06 Rainbows.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/04 Let Me Touch The Wind.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/03 Neptune.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/02 Constant Throb - Part Two.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/07 Crystaled Tears.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/05 California Jazz Dance.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/01 Constant Throb - Part One.mp3 +Mar 30 10:36 : update: added Jazz/John Klemmer/John Klemmer - Constant Throb 1971/08 Precious Leaf .mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/08 Desafinado [45 RPM Issue].mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/02 Samba Dees Days.mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/05 One Note Samba.mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/06 É Luxo Só.mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/01 Desafinado.mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/03 O Pato (The Duck).mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/04 Samba Triste.mp3 +Mar 30 10:36 : update: added Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/07 Baia.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/06. Anything to Make It Through.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/03. AZUR (As You Are).mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/07. All These Things Remind Me.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/01. Baby I've Got to Know.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/05. Love Is So Cold (feat. D'Angelo).mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/09. Sunshine.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/08. Get to Heaven.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/04. Suddenly.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/10. Picture in My Heart.mp3 +Mar 30 10:36 : update: added Jazz/Stuart Zender/Stuart Zender - Azur/02. Say I Want You.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/09. Ramsey Lewis - Love For A Day.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/01. Ray Barretto - Pastime Paradise.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/13. Rodney Franklin - On The Path.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/11. Lonnie Liston Smith - In The Park.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/10. Cedar Walton - Latin America.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/03. Mongo Santamaria - Cloud Nine.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/08. Asha Puthli - Right Down Here.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/07. George Benson - So What .mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/05. Bill Withers - Kissing My Love.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/12. Os Ipanemas - Consolacao.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/14. Antonio Carlos Jobim - Brazil.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/06. Esther Phillips - Home Is Where The Hatred Is.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/04. Deodato - Also sprach Zarathustra.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/1 - Diggin' Deeper - The Roots of Acid Jazz Vol. 1/02. Billy Paul - Am I Black Enough For You.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/04. Ramsey Lewis - Living For The City.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/11. Ray Barretto - The Old Castle.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/03. Esther Phillips - Use Me.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/02. Lonnie Smith - Sideman.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/06. Eric Gale - Lookin' Good.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/09. Mongo Santamaria - Ricky Tick.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/07. Freddie Hubbard - Midnight At The Oasis.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/10. Os Ipanemas - Berimbáu.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/12. Tom Scott & The L.A. Express - Nunya.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/13. George Duke - Sugar Loaf Mountain.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/08. Lee Ritenour - Wild Rice.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/05. George Benson - I Remember Wes.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/01. Deodato - Super Strut.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/2 - Diggin' Deeper - The Roots of Acid Jazz Vol. 2/14. Herbie Hancock - Just Around The Corner.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/07. Willie Bobo - Always There.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/12. Maynard Ferguson - The Fly.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/05. Deodato - Skyscrapers.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/09. Art Blakey - Cubano Chant.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/08. Webster Lewis - El Bobo.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/06. Patti Austin - Little Baby.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/04. Isley Brothers - Take Inventory.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/10. Dave Pike - Besame Mucho.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/03. Stanley Turrentine - Storm.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/02. George Benson - Return of the Prodigal Son.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/14. Herbie Hancock - Gentle Thoughts.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/11. Tom Scott - Sneakin' In The Back.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/01. Lalo Schifrin - Jaws.mp3 +Mar 30 10:36 : update: added Jazz/Diggin' Deeper - The Roots of Acid Jazz - Vol. 1 2 3 - Box Set/Music/3 - Diggin' Deeper - The Roots of Acid Jazz Vol. 3/13. Hank Crawford - Sugar Free.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/You're my life.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/I can find a way to your heart.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/Mr Weatherman.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/If you don't want me.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/We are through.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/Just for a little while.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/Somewhere.mp3 +Mar 30 10:36 : update: added Jazz/Water&Power/Ain't no hurt like the hurt you get.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/08 Mr. Funky Samba.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/03 Expresso Madureira.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/05 Cravo E Canela.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/11 Casa Forte.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/02 Vigidal.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/12 Chega Mais.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/09 Samboreando.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/06 Maria Fumaca.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/10 Rio de Fevereiro.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/07 Miss Sheryl.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/01 Gafiera Universal.mp3 +Mar 30 10:36 : update: added Jazz/Banda Black Rio/The_Best_of_Banda_Black_Rio_by_Nazarious/04 Leblon Via Vaz Lobo.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(01) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Perdido.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(11) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Lullaby Of Birdland.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(11) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Lullaby Of Birdland.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(09) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Cherokee.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(09) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Cherokee.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(02) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Salt Peanuts.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(01) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Perdido.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(07) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Embraceable You.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(03) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] All The Things You Are.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(06) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] A Night In Tunisia.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(03) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] All The Things You Are.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(07) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Embraceable You.flac +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(02) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Salt Peanuts.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.mp3 +Mar 30 10:36 : update: added Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(06) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] A Night In Tunisia.flac +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/06 Smile.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/04 Sway With Me.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/08 Experiment on Me.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/07 Lonely Gun.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/02 So Thick (feat. Baby Goth).mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/01 Boss Bitch.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/13 It_s A Man_s Man_s Man_s World (w.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/11 Feeling Good.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/09 Danger.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/05 Joke's on You.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/10 Bad Memory.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/12 Invisible Chains.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/14 I'm Gonna Love You Just a Little.mp3 +Mar 30 10:36 : update: added Jazz/Birds of Prey The Album/03 Diamonds.mp3 +Mar 30 10:36 : update: added Jazz/Off the Beaten Track.mp3 +Mar 30 10:36 : update: added Jazz/70s_Japanese_Jazz_Mix_Jazz-funk_Soul_Jazz_Rare_groove_Drum_Breaks...mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/04-jazpresso-chaos.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/10-jazpresso-air_duct.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/07-jazpresso-wabi.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/03-jazpresso-time_is_right.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/08-jazpresso-moons.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/02-jazpresso-nocloud.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/06-jazpresso-pine_under.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/09-jazpresso-air_duct_introduction.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/05-jazpresso-eeriedance.mp3 +Mar 30 10:36 : update: added Jazz/Jazpresso/Jazpresso - Eeriedance (2008)/01-jazpresso-kurage.mp3 +Mar 30 10:36 : update: added Jazz/Etta James - Stormy Weather-audiotrack.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/07 Joe Henderson- Lush Life.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/01 Frank Morgan - Lullaby.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/10 Louis Armstrong - What a Wonderful World.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/02 John Coltrane - Soul Eyes.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/09 Clifford Brown - Willow Weep for Me.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/08 Art Pepper- Straight life.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/06 Sonny Rollins - For All We Know.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/05 Frank Morgan - Mood Indigo.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/04 Bill Evans - My Foolish Heart.mp3 +Mar 30 10:36 : update: added Jazz/Dark Sacred Night - The Music Of Harry Bosch/03 Art Pepper and the Hollywood All Stars - My Funny Valentine.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A4- THE MEMORY_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A3- HIGHER_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A5- COME OUT AND PLAY_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A2- BABY I NEED YOUR LOVE_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A1-Domelo (Give IT TO ME)_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A6- BETTER DAYS_01.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/02 - henceforth.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/04 - red, black & green.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/03 - day dreaming.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/07 - papa was a rolling stone.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/06 - rhythms of your mind.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/01 - ain't no sunshine.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/05 - cocoa butter.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/01 • hey uh - what you say come on.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/02 • the golden rod.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/03 • keep on walking.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/04 • you and me my love.mp3 +Mar 30 10:36 : update: added Jazz/Roy Ayers/a_tear_to_a_smile__1975_/Roy Ayers - A Tear To A Smile (1975)/Roy Ayers - 01 - 2000 Black.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/02-jazz_liberatorz_-_slow_down.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/12-curumin_-_solidao_gasolina.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/11-45_-_lost_vibes.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/10-diytokion_-_round_trip.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/03-the_globetraddas_-_love.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/07-asayake_production_-_spinning_a_hold.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/06-brown_tempo_-_homeage.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/08-bulljun_-_aquarium_mood.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/04-dj_deckstream_feat_junji_chiba_-_creeper.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/05-valentin_-_walking.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/01-iman_-_take_my_hand.mp3 +Mar 30 10:36 : update: added Jazz/Saudade Cocomo/09-elefante_mecanico_-_no_te_enamores.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/01 - Solo Moderna - Socialized Jazz Beats - Rare Features Ra.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/03 - Gianni De Luca - Socialized Jazz Beats - Make Sense.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/13 - Combo Moderna - Socialized Jazz Beats - Mambossa 72.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/04 - Frank Montis - Socialized Jazz Beats - A Facade (Phil M.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/06 - Combo Moderna - Socialized Jazz Beats - Ghetto Stomp (G.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/02 - Tom Beek - Socialized Jazz Beats - Mr DJ (Phil Martin R.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/05 - Cookin' Quintet - Socialized Jazz Beats - Little Sunflo.mp3 +Mar 30 10:36 : update: added Jazz/Socialized Jazz Beats/07 - Phil Martin - Socialized Jazz Beats - Sweet & Mellow (B.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/09 the end theme.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/01 Title theme.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/06 Kidnapped.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/03 The red rooster.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/02 Randolph & Dearborn.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/07 Run fay run.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/04 Joe Bell.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/08 Bun's o'plenty.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/05 Hung up on my baby.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/01 Isaac Hayes - Walk On By.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/03 Isaac Hayes - One Woman.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/04 Isaac Hayes - By The Time I Get To Phoenix.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/02 Isaac Hayes - Hyperbolicsyllablicsesquedalymistic.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Hot Buttered Soul/01 Isaac Hayes - Walk On By.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Hot Buttered Soul/03 Isaac Hayes - One Woman.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Hot Buttered Soul/04 Isaac Hayes - By The Time I Get To Phoenix.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Hot Buttered Soul/02 Isaac Hayes - Hyperbolicsyllablicsesquedalymistic.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/09 the end theme.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/01 Title theme.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/06 Kidnapped.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/03 The red rooster.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/02 Randolph & Dearborn.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/07 Run fay run.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/04 Joe Bell.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/08 Bun's o'plenty.mp3 +Mar 30 10:36 : update: added Jazz/Isaac Hayes/Three Tough Guys/05 Hung up on my baby.mp3 +Mar 30 10:36 : update: added Jazz/Jus Say Hi ft Mangaliso asi.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/01. What Is Love.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/08. Batucada Familia.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/14. What Is Love.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/07. Don't Go Away (feat. UAKTI).mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/12. Favo De Mel.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/13. It's A Jungle Out Here.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/10. I Will Survive.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/06. It's A Jungle Out Here (feat. UAKTI) [Brazilian Version].mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/11. Bola Viva.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/02. Rio Rio (feat. B.o.B).mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/04. Welcome Back.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/09. Poisonous Love.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/05. O Vida.mp3 +Mar 30 10:36 : update: added Jazz/Rio 2/03. Beautiful Creatures.mp3 +Mar 30 10:36 : update: added Jazz/SoulChef - Long Hot Summer (Full Album)-EG_OKio6fSE.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/02. Innocent Man.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/05. Be the Man.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/16. Your Way or the Rope.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/19. Healed.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/04. Bitter End.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/03. Skin.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/14. Fade to Nothing.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/13. The Fire.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/11. As You Are.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/09. Ego.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/17. Lay My Body Down.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/18. Wolves.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/06. Love You Any Less.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/01. Human.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/15. Life In Her Yet.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/07. Odetta.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/10. Arrow.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/12. Die Easy.mp3 +Mar 30 10:36 : update: added Jazz/HUMAN DELUXE/08. Grace.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/20 Vibin' (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/16 Open Mic (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/05 I'm Into You.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/17 I'm Into You (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/11 Perculating (G' Mornin') (bonus track).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/14 Bookworm (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/18 Caffeine (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/15 Cafe Au Lait (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/10 Smitten.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/12 The Shift Change (bonus track).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/03 Cafe Au Lait.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/04 Open Mic.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/09 I'll Be....mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/21 I'll Be....mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/08 Vibin'.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/07 Cup O' Tea.mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/13 Coffee House Swingin' (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/19 Cup O' Tea (INS).mp3 +Mar 30 10:36 : update: added Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Memories_of_You-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Foggy_Day-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Autumn_Leaves-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Cherokee-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/The_Song_is_You-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/In_the_Afterglow-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Goodbye-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Soon_All_Will_Know-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/Caravan-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/April_in_Paris-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Wynton Marsalis/New_Orleans-Wynton_Marsalis.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/07. something.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/03. tin tin deo.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/04 midnight special.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/05. i can see clearly now.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/02. let's stay together.mp3 +Mar 30 10:36 : update: added Jazz/Junior Mance/The Junior Mance Touch/01. zabuda.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/11. Hymn for Tunisia.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/06. Eames in Dub.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/08. Black Colossus.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/16. Virgo Nocturna.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/13. One for Toshi.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/12. The Last Bohemian (Alternate Take).mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/01. Hypotenaus.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/15. Waltz of the Fellaheen.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/07. Turtleneck.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/02. Blues for BL.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/09. Promise.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/10. The Garden of Pasiphae.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/03. Amalfi Coast (Alternate Take).mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/14. Blow.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/04. Esquema da Sophia, Pt. II.mp3 +Mar 30 10:36 : update: added Jazz/Afternoons in Stereo - A Jazz Odyssey/05. The Great Aerial Ocean.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(8) [Charles Mingus] Things Ain`t What They Used To Be.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(5) [Charles Mingus] Gunslinging Bird.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(6) [Charles Mingus] Goodbye Pork Pie Hat.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(3) [Charles Mingus] Far Wells, Mill Valley.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(4) [Charles Mingus] Bird Calls.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(7) [Charles Mingus] Jelly Roll.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(2) [Charles Mingus] Fables Of Faubus.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(1) [Charles Mingus] Better Git In Your Soul.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 05 - Beautiful Brother Of Mine.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 07 - Love To Keep You In My Mind.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 02 - Keep On Keeping Up.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 04 - We Got To Have Peace.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 01 - Get Down.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 03 - Underground.mp3 +Mar 30 10:36 : update: added Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 06 - Now You're Gone.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/07 Here I Am (Come and Take Me).mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/05 La-La for You.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/08 You Say It.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/09 Oh Me, Oh My (Dreams in My Arms).mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/06 Driving Wheel.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/02 Look What You Done for Me.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/03 Sha-La-La (Make Me Happy).mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/10 Let It Shine.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/04 Full of Fire.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_2/Al Green [Madacy] Disc 2/01 You Ought to Be with Me.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/02 L-O-V-E (Love).mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/09 My Girl.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/07 How Can You Mend A Broken Heart-.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/06 One Woman.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/04 I Feel Good.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/01 I'm Still in Love with You.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/10 Take Me to the River.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/03 Belle.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/08 Unchained Melody.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green_disc_3/Al Green [Madacy] Disc 3/05 Smile a Little Bit More.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/08 I Can't Get Next to You.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/05 Let's Get Married.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/06 Keep Me Cryin'.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/04 Tired of Being Alone.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/10 I Tried to Tell Myself.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/09 Right Now, Right Now.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/02 Call Me (Come Back Home).mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/01 Let's Stay Together.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/03 Livin' for You.mp3 +Mar 30 10:36 : update: added Jazz/Al Green/al_green__disc_1/Al Green [Madacy] Disc 1/07 Love and Happiness.mp3 +Mar 30 10:36 : update: added Jazz/Weakness.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/05 - Do Ya.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/06 - Wishing Well.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/02 - Don't Sleep.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/03 - We Funk to Quick.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/01 - Strawberries.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/07 - He Thinks She Don't Know.mp3 +Mar 30 10:36 : update: added Jazz/Smooth/Reality (1998)/04 - Anything I Like.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/11 GG Train.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/10 Pedal Point Blues.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/06 Bird Calls.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/02 Goodbye Pork Pie Hat.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/03 Boogie Stop Shuffle.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/04 Self-Portrait In Three Colors.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/12 Girl Of My Dreams.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/05 Open Letter To Duke.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/09 Jelly Roll.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/01 Better Git It In Your Soul.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/08 Pussy Cat Dues.mp3 +Mar 30 10:36 : update: added Jazz/Charles Mingus Mingus Ah Um/07 Fable Of Faubus.mp3 +Mar 30 10:36 : update: added Jazz/Jill_Scott_Soulful_House_Music_Mix_by_JaBig.mp3 +Mar 30 10:36 : update: added Jazz/Hank Crawford/Hank Crawford-Wild Flower 1973/B1 - You've Got It Bad Girl.mp3 +Mar 30 10:36 : update: added Jazz/Hank Crawford/Hank Crawford-Wild Flower 1973/A3 - Mr. Blues.mp3 +Mar 30 10:36 : update: added Jazz/Hank Crawford/Hank Crawford-Wild Flower 1973/A2 - Wildflower.mp3 +Mar 30 10:36 : update: added Jazz/Hank Crawford/Hank Crawford-Wild Flower 1973/B2 - Good Morning Heartache.mp3 +Mar 30 10:36 : update: added Jazz/Hank Crawford/Hank Crawford-Wild Flower 1973/A1 - Corazon.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/06-naturally_7-more_than_words.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/14-naturally_7-say_you_love_me.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/07-naturally_7-what_im_lookin_4.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/09-naturally_7-heaven_knows.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/11-naturally_7-let_it_rain_(harmony_mix).mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/02-naturally_7-feel_it_(in_the_air_tonight).mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/08-naturally_7-closer_now.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/12-naturally_7-u_cant_hear_me.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/13-naturally_7-bridge_over_trouble_water.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/10-naturally_7-it_is_what_it_is.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/04-naturally_7-gone_with_the_wind.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/03-naturally_7-as_tears_go_by.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/15-naturally_7-amazing_grace.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/05-naturally_7-broken_wings.mp3 +Mar 30 10:36 : update: added Jazz/Naturally 7 - Wall Of Sound (2009)/01-naturally_7-wall_of_sound.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/01. Pray For Rain feat. Tunde Adebimpe.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/06. Flat Of The Blade feat. Guy Garvey.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/05. Psyche feat. Martina Topley-Bird.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/04. Girl I Love You feat. Horace Andy.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/08. Rush Minute.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/07. Paradise Circus feat. Hope Sandoval.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/02. Babel feat. Martina Topley-Bird.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/10. Atlas Air.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/09. Saturday Come Slow fea. Damon Albarn.mp3 +Mar 30 10:36 : update: added Jazz/Massive Attack - Heligoland/03. Splitting The Atom feat. Horace Andy.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/01. Jestofunk - Say It Again.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/05. Montefiori Cocktail - Sofisticata (Nicola Conte's Soft Samba mix).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/14. Soul Quality Quartet - Sad Detting.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/06. The Easy Access Orchestra - Las Chicas (King Kooba remix).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/13. Blender - Trouble Jazz (Jazz Club mix).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/09. Bossa Nostra - Groovin' On.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/02. Capiozzo & Mecco - The Howl.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/03. Max Sedgley - Devil Inside.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/10. Gazzara - Keep Yourself Together.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/11. Ltj Xperience - Keep On Groovin.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/15. Orange Factory - Body Tight.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/04. Jerome Van Rossum - Truth.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/12. Black & Brown - Still Under Funk.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/07. Belladonna - Drummers Paradise.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.3 (2012)/08. Black Mighty Orchestra - I Love You So Much.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/02 2 Men 4 Soul - Spread Your Sax.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/11 DJ Rodriguez - Bitches & Friends.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/07 Jerome Van Rossum - Nublado Mezclado.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/04 Freedom Or Not - Feel It (jazzy rmx).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/03 DJ Rodriguez - 4 Steps.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/09 Bossa Nostra feat. Vicky Ander - Home Is Where The Ha.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/13 Voo Doo Phunk - Starsky.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/05 Live Tropical Fish - Time Is Moving.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/01 Jestofunk - I'm Gonna Love You (jazzy trip).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/08 Michael Allen - Deep Inside (Funky Dog mix).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/06 Key Tronics Ensemble - Anamaria (Tito Valdez rmx '96).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/12 Instant Cities - Make Up Your Mind.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.1 (1998)/10 Ohm Guru - Tokio Station [Sic].mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/01 Voo Doo Phunk - THE PARTY.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/03 Jestofunk - The ghetto.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/14 Freedoom Or Not - Loosen Up.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/12 Clan Greco - Rotation.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/15 Bossa Nostra - Kontaminazione II.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/06 Ohm Guru - Jazz Brake.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/13 Gazzara - Better Things To Do.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/04 Legato feat. Karen Jones - Till You Take My Love.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/08 Chiefs Of Relief - The 9th Guest.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/02 DJ Rodriguez - Maestro's Theme.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/07 Jerome Van Rossum - Chittagong Groove.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/11 Sorace - Lifetime (Instrumental Jazz).mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/10 Live Tropical Fish - P.I..mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/09 Man Sueto - Sentimental Song.mp3 +Mar 30 10:36 : update: added Jazz/Acid Jazz On The Rocks Collection (1998-2012) 3CD 2012/Vol.2 (1998)/05 2 Men 4 Soul - Ribbon In The Sky.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/10 - What's Up, What's Up.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/02 - Riders On the Storm.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/06 - Rock It.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/13 - Calvados.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/11 - From Stockholm to Bejing.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/09 - Le Sunset.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/03 - Mo Stuff.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/08 - Freedom Jazz Dance.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/05 - Anytime Anywhere.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/04 - Fonk Da World.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/12 - New Morning.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/07 - Amtrak.mp3 +Mar 30 10:36 : update: added Jazz/Fonk Da World [2001]/01 - Booty Rock.mp3 +Mar 30 10:36 : update: added Jazz/70s Japanese Jazz Mix (Jazz-funk, Soul Jazz, Rare groove, Drum Breaks..).m4a +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/04-murs-the_pain-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/02-murs-bad_man-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/05-murs-trevor_an_them-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/01-murs-intro-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/06-murs-freak_these_tales-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Murs-Murs_316_The_9th_Edition-2004/03-murs-316-ftd.mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/10 Rose Royce - Im Going Down (Cover Version).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/06 Roy Ayers - Everybody Loves the Sunshine (Sampled For my Life).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/03 Kenny Burke - Risin to the Top(Sampled For Love No Limit Remix).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/14 Aretha Franklin - Natural Woman (Cover Version).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/02 Curtis Mayfield - Your so Good to Me(Sampled For Be Happy).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/01 Betty Wright - Clean Up Woman (Sampled For Rea Llove).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/17 Rick James - (Sampled For Love is all We Need).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/12 Al Green - Im so Glad your Mine (Sampled For Time).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/18 The Trammps - Rubber Band (Sampled For the Game Love).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/07 Marvin Gaye & Tammi Terrell - Youre all I.mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/04 Mary Jane Girls - All Night Long (Sampled For all Night Long).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/13 The Stylistics - You Are Everything (Sampled For Everything).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/08 Barry White - Its Ecstasy When you Lay (Sampled For you Bring Me).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/16 Debarge - A Cream (Cover Version).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/11 Roy Ayers - Searchin' (Sampled For Searchin).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/15 Debra Laws - Very Special (Sampled For Whats the 411).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/09 Curtis Mayfield - Your so Good to Me (Sampled For Be Happy).mp3 +Mar 30 10:36 : update: added Jazz/Gold Digging/VA - Gold Digging - As Sampled By Mary J Blige (2007)/05 Rufus - Sweet Thing (Cover Version).mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 (Gloryhallastoopid) Pin The Tail On The Funky.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 Supergroovalisticprosifunkstication.MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/George Clinton - Hey Good Lookin' (Booty Enhanced Remix).mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/01 Bop Gun (Endangered Species).mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/06 Flash Light.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 Agony Of Defeet.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/George Clinton - Knee Deep (Midnight Mix) (feat. Digital Underground).mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 The Big Bang Theory.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 Funkentelechy.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 - Funkadelic - One Nation Under A Groove.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/03 - George Clinton & The P-Funk All Stars - Some Next Shit.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 Ride On.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/03 Dr. Funkenstein.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 Mothership Connection (Star Child).MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 Side Effects.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 Pumpin' It Up.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/05 One of Those Funk Things.MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/08 May We Bang You-.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 Gamin' on Ya!.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/03 - Funkadelic - Freak Of The Week.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/02 Rumpofsteelskin.MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/George Clinton - Booty Body Ready For the Plush Funk.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 Aqua Boogie (A Psychoalphadiscobetabioaquadoloop).MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/04 - Funkadelic - Cholly (Funk Getting Ready To Roll.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/01 P-Funk (Wants to Get Funked Up).MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/01 Up for the Down Stroke.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/01 Chocolate City.mp3 +Mar 30 10:36 : update: added Jazz/P-Funk/06 Give Up the Funk (Tear the Roof off the Sucker).MP3 +Mar 30 10:36 : update: added Jazz/P-Funk/03 Copycat.mp3 +Mar 30 10:36 : update: added Misc/RFF - JR - 08 Mar 11 - Podcast - How To Make A Good Lent.mp3 +Mar 30 10:36 : update: added Misc/BFS9.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/lunchbreak2.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/491028UWHVHW.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/508674UIFHHW.mpeg +Mar 30 10:36 : update: added Misc/Training/furnace.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/494760KFTULX.mpeg +Mar 30 10:36 : update: added Misc/Training/Dax2.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/508679FGVKBF.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/494755KDGSWZ.mpeg +Mar 30 10:36 : update: added Misc/Training/Brad-Pilon_ESE.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492889PPGKIS.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/493528UMJFQR.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/503335DMCEUY.mpeg +Mar 30 10:36 : update: added Misc/Training/19c59b1e-13ad-8488-8d80-73e0fa244a96.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492634VBPSLD.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/Tabata 20-10's.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492900JPQVPD.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/500791TSLARX.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/501670UXLKPQ.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport4.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerdFatloss.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/500125OKKOXH.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/494756MELVZD.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/494763HLVWEK.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/CBTTY.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/oaintroduction.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/winedebate.mpeg +Mar 30 10:36 : update: added Misc/Training/MN2124_6_16_2007_1078532.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/Feb1408.mpeg +Mar 30 10:36 : update: added Misc/Training/JaysonHunter2.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/501687GYUOMB.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/493522ASDRQV.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/telesem2.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/TheFitCast095.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/517151SIPKTX.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport2.mpeg +Mar 30 10:36 : update: added Misc/Training/0f6e2502-f943-d33d-d628-e1c458ae56df.mp3 +Mar 30 10:36 : update: added Misc/Training/edt2.flv +Mar 30 10:36 : ffmpeg/mp3: Skipping 313 bytes of junk at 2048. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/walk,080203,vennari,_evoltion,042306_file_edited_for_re_broadcast.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/CharlesStanleyInterview.mpeg +Mar 30 10:36 : update: added Misc/Training/Biu Gee..wmv +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport6.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/503352YQGHIN.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/frontsight.mpeg +Mar 30 10:36 : update: added Misc/Training/AbsExpertBlog_1.mp3 +Mar 30 10:36 : update: added Misc/Training/cst_ck.mpeg +Mar 30 10:36 : update: added Misc/Training/Brad-Pilon-Nutrition-Expert-Interview_TT-Members.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/5956787261577-001.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/telesem3.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/Feb708.mpeg +Mar 30 10:36 : update: added Misc/Training/8c1218c2-a0c4-8945-2c84-12c2db8b3ba4.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/491026MOZWMI.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492567AHIQKA.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/scottangietransformation.mpeg +Mar 30 10:36 : update: added Misc/Training/RobPoulos.mp3 +Mar 30 10:36 : update: added Misc/Training/edt3.flv +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/501680ACANRZ.mpeg +Mar 30 10:36 : update: added Misc/Training/Warp Speed Fat Loss.flv +Mar 30 10:36 : update: added Misc/Training/239e9c25-9142-ef71-a6a6-eaeefd5a39cd.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/493525DLRLIG.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/497043PZHVTN.mpeg +Mar 30 10:36 : update: added Misc/Training/dr-mohr-teleseminar.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd2.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/508680QFKYRV.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/508682OJTNBK.mpeg +Mar 30 10:36 : update: added Misc/Training/combatAbs.mp3 +Mar 30 10:36 : update: added Misc/Training/CraigBallantyneFatLossExperts2007.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492631SKTWJE.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/lunchbreak1.mpeg +Mar 30 10:36 : update: added Misc/Training/CraigBallantyne_ScottT_teleseminar.mp3 +Mar 30 10:36 : update: added Misc/Training/Jay.mp3 +Mar 30 10:36 : update: added Misc/Training/fdd51953-c728-3940-5b92-a0b95e9b9925.mp3 +Mar 30 10:36 : update: added Misc/Training/carb_rotations.mp3 +Mar 30 10:36 : update: added Misc/Training/VnceDelMonte.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/503340JDSIKL.mpeg +Mar 30 10:36 : update: added Misc/Training/RyanLee.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/500121NWFZWH.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/506785GZURVD.mpeg +Mar 30 10:36 : update: added Misc/Training/Marc-David-MP3.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/7650899351322-001.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/493521IIWEIZ.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/501685ZLUDMM.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/501683RIYGFX.mpeg +Mar 30 10:36 : update: added Misc/Training/508709DSTEVA.mpeg +Mar 30 10:36 : update: added Misc/Training/Wooden Dummy..wmv +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport3.mpeg +Mar 30 10:36 : update: added Misc/Training/edt1.flv +Mar 30 10:36 : update: added Misc/Training/CraigBallantyne_ScottT_teleseminar2.mp3 +Mar 30 10:36 : update: added Misc/Training/Turbulence-Training-for-Fat-Loss-Audio-Guide.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/telesem4.mpeg +Mar 30 10:36 : update: added Misc/Training/Dax.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/1366613431731-001.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/Ferruggia.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/503345KXSWZY.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/telesem1.mpeg +Mar 30 10:36 : update: added Misc/Training/carb_rotation.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/492904GTJVVG.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/1850536761938-001.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/lunchbreak3.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/lunchbreak4.mpeg +Mar 30 10:36 : update: added Misc/Training/ba118e25-d5a9-dc23-38c7-7b13ff12eaf6.mp3 +Mar 30 10:36 : update: added Misc/Training/CraigBallantyne_ScottT_teleseminar3.mp3 +Mar 30 10:36 : update: added Misc/Training/wingtsun_english_high.mov +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport1.mpeg +Mar 30 10:36 : update: added Misc/Training/f4a060a7-e59f-23d0-d6ec-e10d58419d1c.mp3 +Mar 30 10:36 : update: added Misc/Training/60b9f765-51a3-f25d-1026-8b8ec88a57a8.mp3 +Mar 30 10:36 : update: added Misc/Training/JaysonHunter1.mp3 +Mar 30 10:36 : update: added Misc/Training/brad_pilon.m4a +Mar 30 10:36 : update: added Misc/Training/Top_10_Business_Mistakes.mp3 +Mar 30 10:36 : update: added Misc/Training/cst_snt.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/MuslceNerdSupplements.mpeg +Mar 30 10:36 : update: added Misc/Training/edt5.flv +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/musclenerd_FreeReport5.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/500009EWMXCU.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/494757UUMUHT.mpeg +Mar 30 10:36 : update: added Misc/Training/6504ae11-6190-3652-3a41-6d5728276a3a.mp3 +Mar 30 10:36 : update: added Misc/Training/edt4.flv +Mar 30 10:36 : update: added Misc/Training/Alwyn_07.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Misc/Training/MG_JeffA.mpeg +Mar 30 10:36 : update: added Misc/BFS4.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/datLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/toiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lengMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/peng.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chimHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wongLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yuLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/punMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/boMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gonMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/minLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheutHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaanMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yitLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pouMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ouMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ninLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yauHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pinMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/noiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tinHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone3.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yimHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/noLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/goiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chinLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaamHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hanMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naaiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tekMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hiuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dipHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wunLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fanMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bouLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chekMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/choMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/low.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gongMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lihngLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nouLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jekMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mingLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/muiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tyunLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/houMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/peiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/angHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/beHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/honLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yoHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bitHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheuiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mauLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jingLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/limLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kapHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/neHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leunLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chyuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/puiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/miuLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jengLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lapHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/choHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kuiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tiuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waakLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dyutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/siMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/samHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/liHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ninLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/boHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/joMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/songHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yauLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chyunHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seunMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/loMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/joiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chinMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daamLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hingHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tingLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeunHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seungLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chiuHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hamMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaauHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jiuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gengMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/futLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yunLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chinHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaanLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maaiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hangLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/matLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/biHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/beiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/singHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jouLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/niHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maangLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paaiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sinHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daaiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kyunLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lakLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jauLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wuLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/putMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dingLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/meMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/feHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeutHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wuLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/choLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seuiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/linLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chouMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jimLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baakMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tiuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngoiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ginMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deuiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheungmr.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/simLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waangLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/titMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pingLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hotMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/houLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/panLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gapHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/meiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jyuHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/munLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gotMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gauLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lamLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/neiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waaiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ginLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jamHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/toLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chengHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deuiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/feiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/himHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/joLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/goMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lipLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/butLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hingLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yipLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kingHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/siuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/high.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gimMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/souLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gonHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chikMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tengHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/funHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/onHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheunHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kekLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/latHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jyuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/feiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/louMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mengLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/janHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaangLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lingLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/noLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/soiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ditMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/oiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/neuiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nipLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/longLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dengMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/satHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/linLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hoMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yingHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/souHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/beiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/eiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaamMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tiuLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/siHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chongMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/banMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faatLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/syutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yiuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/beiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/manLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/choLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ganLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/choiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bamHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wingLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mokLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baanMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kimLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nanMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/muiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chinLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwongMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geuiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heuiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/timLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaamHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gamMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/meHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/siLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nimLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/biuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hungMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yinLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/loiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/liuLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pekMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sinHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haaiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/katHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kaauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bunMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaauHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/changLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bengMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/woLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/giuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/piuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/namLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/toiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ningLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wuiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/syuHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/auMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/meiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone2.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/amMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/oHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chouLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/deunLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aaMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/middle.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jyunMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lukMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwuiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone6.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mouLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kyuht.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/souMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gunHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nyunLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/japHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chingLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fuLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yaiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeungLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/peiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waanMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kongMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/joiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheutLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yaLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngoLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/danHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bingMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaapHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mitLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/poMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wanMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeuiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/diHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kuHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone7.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/watHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mingLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hengHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/neungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dimMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/makLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leuiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hoiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gamHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/litLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/lyunLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dekLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/timhf.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/linLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwaangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naauLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yunLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gouHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seungMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keuiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/patHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sekLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/touMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeukMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/koiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/weiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mungLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/singMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/faanMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nongLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aaHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seunLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yamMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yungLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dangMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jauHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chungLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/guiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daaiHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wongLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saamHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/oLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaanLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chauHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/syutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwingMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kiuLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dakLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwoMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hinHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dyunMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeunMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yimLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jimHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gyunHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/buiHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/teunLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jingMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/geMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mouLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leungLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ungMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gunMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/syunMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngouLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/doiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/munLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaatMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maauHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chapHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dauMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeuiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jyuLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jeLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heuiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dipLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone5.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/douMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/miuLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/matHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/goMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kukHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/pungMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaamMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jakHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/touLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/likLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yatLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saangMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngonMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kaaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/aamHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/siuMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gauMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tangLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sukLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hoiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fuiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/napHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dinLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/foHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone4.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jyutMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chaaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/diuLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/heuHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bunMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/louLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/teuiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haaiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/goHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bakLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/wutLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/naiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kwaaiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaamMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jaamLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/nganLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/soMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheungMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chungLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hekMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/doHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/niuLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jangHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeunLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/baaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwikHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/paMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gingHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jikLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/teuMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laangLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/cheuiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/syuLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gaaiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laiLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/moHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kinLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hongHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/bokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ganMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gipMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/leiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chitMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/batLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/waiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jingHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/taaiMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gengMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yanLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/seLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/sungMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jinMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/keuiHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gokMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/jatHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/ngaauLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/kapLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laamLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/binHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/binMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/batHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/dangHT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaatMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/guMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/laauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yeuiLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/haiMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saanLT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/hyunMR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maaiLR.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/chungLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tauLF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/tone1.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/yamHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/fanHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/maakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gwaakMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/saapMT.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/daht.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/gungHF.mp3 +Mar 30 10:36 : update: added Misc/Cantones_sounds/mLF.mp3 +Mar 30 10:36 : update: added Misc/Warp20Speed20Fat20Loss.flv +Mar 30 10:36 : update: added Misc/20080928-Seder-Meals-Violate-the-1st-Commandment.mp3 +Mar 30 10:36 : update: added Misc/Thomas Aquinas in 90 Minutes/ThomasAquinasin90MinutesUnabridged.mp3 +Mar 30 10:36 : update: added Misc/talk_HTMAT.mp3 +Mar 30 10:36 : update: added Misc/RFF - MB - - 17 Dec 10.mp3 +Mar 30 10:36 : update: added Misc/KettleBellSecrets13.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act IV.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act II.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act V.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act I.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act III.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_4-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_3-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_8-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_6-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_2-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_1-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_9-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_7-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - The Tempest/The_Tempest_5-9.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_05-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_17-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_21-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_26-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_15-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_01-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_29-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_08-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_16-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_20-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_02-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_10-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_14-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_12-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_11-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_25-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_24-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_22-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_18-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_07-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_19-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_06-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_27-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_28-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_23-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_04-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_03-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_13-29.mp3 +Mar 30 10:36 : update: added Misc/Shakespeare - Macbeth/Macbeth_09-29.mp3 +Mar 30 10:36 : update: added Misc/FBC1.mp3 +Mar 30 10:36 : update: added Misc/fricomedy_20080321-1900.mp3 +Mar 30 10:36 : ffmpeg/flv: Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT +Mar 30 10:36 : ffmpeg/flv: Packet mismatch 0 5537 5537 +Mar 30 10:36 : update: added Misc/Edgar_Mitchell_UFO_interview_on_Kerrang_Radio_23_july_2008.flv +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20071017.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20071003.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/FunknFaith/Episode02_Mixtape_vol1.mpeg +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20071010.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070307.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070321.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070207.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20061221.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070111.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20061227.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070314.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070214.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070131.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070117.mp3 +Mar 30 10:36 : update: added Gospel/FunknFaith/faf20070228.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Battle_Cry-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/School_of_the_Eucharist-Fr_Stan_Fortuna.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/The_Struggle-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Beautiful_To_Me-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Platinum_Poison-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Beyond_Comprehension-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/The_Son_Still_Shines-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Kiddkapps_III-Kiddkapps.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Love_Is.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Kiddkapps_I-Kiddkapps.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Man_of_Fire-manCHILD_Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Since_You_Been_Around-Righteous_B.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Spirtual_High-MC_Just.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Not_Hip_Hop-Point_5_Covenant.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/No_Regrets-flow.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Intro-DJ86.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Supernatural-MC Just.mp3 +Mar 30 10:36 : update: added Gospel/MassMatics/Kiddkapps_II-kiddkapps.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/08-aaron_neville-tell_me_what_kind_of_man_jesus_is-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/11-aaron_neville-im_so_glad_trouble_dont_last-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/10-aaron_neville-meetin_at_the_building-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/06-aaron_neville-you_ve_got_to_move-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/12-aaron_neville-theres_a_god_somewhere-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/03-aaron_neville-i_done_made_up_my_mind-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/01-aaron_neville-stand_by_me-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/05-aaron_neville-dont_let_him_ride-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/07-aaron_neville-oh_freedom-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/02-aaron_neville-i_know_ive_been_changed-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/09-aaron_neville-i_want_to_live_so_god_can_use_me-snook.mp3 +Mar 30 10:36 : update: added Gospel/Aaron_Neville-I_Known_Ive_Been_Changed-2011/04-aaron_neville-i_am_a_pilgrim-snook.mp3 +Mar 30 10:36 : ffmpeg/flv: Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT +Mar 30 10:36 : ffmpeg/flv: Packet mismatch 0 4295 4295 +Mar 30 10:36 : update: added Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_-1.flv +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-18.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-14.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-11.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-19.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-02.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-09.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-12.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-16.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-10.mp3 +Mar 30 10:36 : update: added Gospel/Blind Faith/49stories-01.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/09-Track9.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/10-Track10.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/02-Track2.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/08-Track8.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/07-Track7.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/10-Track10.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/08-Track8.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/17-Track17.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/06-Track6.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/14-Track14.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/16-Track16.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/03-Track3.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/05-Track5.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/15-Track15.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/15-Track15.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/01-Track1.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/09-Track9.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/04-Track4.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/12-Track12.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/16-Track16.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/04-Track4.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/11-Track11.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/14-Track14.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/01-Track1.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/07-Track7.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/11-Track11.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/03-Track3.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/05-Track5.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/13-Track13.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/02-Track2.wav +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/12-Track12.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/06-Track6.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/17-Track17.mp3 +Mar 30 10:36 : update: added Gospel/Point5Covenant/Listen.Learn/13-Track13.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/02-marvin_winans-my_story.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/07-marvin_winans-joy.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/06-marvin_winans-i_shall_never.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/03-marvin_winans-just_dont_wanna_know.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/09-marvin_winans-come_in_out_of_the_rain.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/01-marvin_winans-alone_but_not_alone.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/08-marvin_winans-im_over_it_now.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/04-marvin_winans-i_still_believe.mp3 +Mar 30 10:36 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/05-marvin_winans-prelude.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20071017.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20071003.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/Episode02_Mixtape_vol1.mpeg +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20071010.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070307.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070321.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070207.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20061221.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070111.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20061227.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070314.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070214.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070131.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070117.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FunknFaith/faf20070228.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Battle_Cry-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/School_of_the_Eucharist-Fr_Stan_Fortuna.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/The_Struggle-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Beautiful_To_Me-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Platinum_Poison-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Beyond_Comprehension-mayd_by_GOD.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/The_Son_Still_Shines-Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Kiddkapps_III-Kiddkapps.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Love_Is.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Kiddkapps_I-Kiddkapps.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Man_of_Fire-manCHILD_Fr_Pontifex.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Since_You_Been_Around-Righteous_B.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Spirtual_High-MC_Just.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Not_Hip_Hop-Point_5_Covenant.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/No_Regrets-flow.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Intro-DJ86.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Supernatural-MC Just.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/MassMatics/Kiddkapps_II-kiddkapps.mp3 +Mar 30 10:36 : ffmpeg/flv: Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT +Mar 30 10:36 : ffmpeg/flv: Packet mismatch 0 4295 4295 +Mar 30 10:36 : update: added Gospel/Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_-1.flv +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-18.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-14.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-11.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-19.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-02.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-09.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-12.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-16.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-10.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Blind Faith/49stories-01.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/02 - Track 2.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/03 - Track 3.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/16 - Track 16.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/05 - Track 5.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/04 - Track 4.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/13 - Track 13.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/15 - Track 15.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/17 - Track 17.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/07 - Track 7.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/12 - Track 12.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/09 - Track 9.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/11 - Track 11.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/14 - Track 14.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/08 - Track 8.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/10 - Track 10.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/06 - Track 6.wav +Mar 30 10:36 : update: added Gospel/Gospel/Point5Covenant/Listen.Learn/01 - Track 1.wav +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/02-marvin_winans-my_story.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/07-marvin_winans-joy.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/06-marvin_winans-i_shall_never.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/03-marvin_winans-just_dont_wanna_know.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/09-marvin_winans-come_in_out_of_the_rain.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/01-marvin_winans-alone_but_not_alone.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/08-marvin_winans-im_over_it_now.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/04-marvin_winans-i_still_believe.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/05-marvin_winans-prelude.mp3 +Mar 30 10:36 : ffmpeg/flv: Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT +Mar 30 10:36 : ffmpeg/flv: Packet mismatch 0 4295 4295 +Mar 30 10:36 : update: added Gospel/Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_.flv +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/The Sign-The Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/CIA_Shock_Troops-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Ad_Majorem_Dei_Gloriam-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Shock_Troops-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Karol_Watywa_and_Rosary-Mix-The-Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/53_Beads_on_a_String-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/A Sign of The Times/AMDG-The_Apologist.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/19SuperCatholicHeroes.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/10The-Unconvertible-Intro.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/15ApologistsNo-Nos.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/04Skit1-Ideal-Fan.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/14NewCatholicWorld.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/20OutroSkit.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/07CatholicDetectiveA.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/02Let-the-Son-Shine-in.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/05My-Favorite-things.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/18Tranformed.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/16HolyGhostRiders.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/13LearnLatin.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/06Holy-Silence-(Shut-up!).mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/12Addiction.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/09BarrenWalls.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/08CommercialBreak.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/17St.MariaGoretti.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/11CatholicPlatform.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/01Intro-Roman-Phatness.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/03Good-Times-Bad-Times.mpeg +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/After Mass.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/All They Want Is Love.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Broke Pockets.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Butta on ma Pancakes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Do Right.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Feel the Vibe.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Footprints.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Hidden Track - Diggn it.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Holy Wateraholics Meeting Part 1.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Is this whatcha want.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Let the Beat Spin.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/More Holy Wateraholics Meeting Part2.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/No Way Out.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Priest in the Hood.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Prolific.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Say What.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Sentiments.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Street Manna.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Say_What.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Priest_in_the_Hood.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Broke_Pockets.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/More_Holy_Wateraholics_Meeting_Part_2.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Street_Manna.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/After_Mass.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Butta_on_ma_Pancakes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Hidden_Track_-_Diggn_it.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Do_Right.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Footprints.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/No_Way_Out.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/All_They_Want_Is_Love.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Sentiments.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Prolific.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Feel_the_Vibe.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Let_the_Beat_Spin.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Is_this_whatcha_want.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Holy_Wateraholics_Meeting_Part_1.mp3 +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2215. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/St.MichaeltheArchangel.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2204. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/OHolySoulofChrist.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2206. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/MarytheMotherofGod.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2207. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/HolySoulsinPurgatory.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2198. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/SuddenDeath.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2202. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/SoRomanCatholic.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2200. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/TheAssumption.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2198. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/ServeChrist.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2212. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/HowtoWriteCatholicRhymes.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2211. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/Gospel/The Apologist D-Major/Very Marian/Earthlydad-EternalFather.mpeg +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/03-raymond_and_co--no_limits-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/08-raymond_and_co--i_know_youll_remember-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/09-raymond_and_co--changed-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/04-raymond_and_co--fire-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/01-raymond_and_co--since_i_found_you-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/06-raymond_and_co--crazy_faith-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/10-raymond_and_co--we_wait-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/07-raymond_and_co--he_can_do_it-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/02-raymond_and_co--playing_games-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Raymond & Co/Playing Game [2004]/05-raymond_and_co--representin-aes.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/Box Of History/Braille-BoxOfHistory-DJIDull.mp3 +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track16.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track7.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track1.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track14.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track3.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track6.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track8.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track9.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track5.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track13.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track15.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track4.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track11.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track17.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track10.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track12.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track18.wav +Mar 30 10:36 : update: added Gospel/Gospel/FrStan/SacroSong3/Track2.wav +Mar 30 10:36 : ffmpeg/flv: Missing AMF_END_OF_OBJECT in AMF_DATA_TYPE_OBJECT +Mar 30 10:36 : ffmpeg/flv: Packet mismatch 0 4295 4295 +Mar 30 10:36 : update: added Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_.flv +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/The Sign-The Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/CIA_Shock_Troops-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/Ad_Majorem_Dei_Gloriam-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/Shock_Troops-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/Karol_Watywa_and_Rosary-Mix-The-Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/53_Beads_on_a_String-The_Apologist.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/A Sign of The Times/AMDG-The_Apologist.mp3 +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/19SuperCatholicHeroes.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/10The-Unconvertible-Intro.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/15ApologistsNo-Nos.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/04Skit1-Ideal-Fan.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/14NewCatholicWorld.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/20OutroSkit.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/07CatholicDetectiveA.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/02Let-the-Son-Shine-in.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/05My-Favorite-things.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/18Tranformed.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/16HolyGhostRiders.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/13LearnLatin.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/06Holy-Silence-(Shut-up!).mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/12Addiction.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/09BarrenWalls.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/08CommercialBreak.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/17St.MariaGoretti.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/11CatholicPlatform.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/01Intro-Roman-Phatness.mpeg +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Thesauri Catholici/03Good-Times-Bad-Times.mpeg +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/After Mass.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/All They Want Is Love.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Broke Pockets.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Butta on ma Pancakes.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Do Right.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Feel the Vibe.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Footprints.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Hidden Track - Diggn it.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Holy Wateraholics Meeting Part 1.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Is this whatcha want.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Let the Beat Spin.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/More Holy Wateraholics Meeting Part2.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/No Way Out.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Priest in the Hood.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Prolific.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Say What.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Sentiments.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Street Manna.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Say_What.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Priest_in_the_Hood.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Broke_Pockets.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/More_Holy_Wateraholics_Meeting_Part_2.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Street_Manna.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/After_Mass.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Butta_on_ma_Pancakes.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Hidden_Track_-_Diggn_it.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Do_Right.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Footprints.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/No_Way_Out.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/All_They_Want_Is_Love.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Sentiments.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Prolific.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Feel_the_Vibe.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Let_the_Beat_Spin.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Is_this_whatcha_want.mp3 +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/StreetMannaAlbum/Holy_Wateraholics_Meeting_Part_1.mp3 +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2215. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/St.MichaeltheArchangel.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2204. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/OHolySoulofChrist.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2206. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/MarytheMotherofGod.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2207. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/HolySoulsinPurgatory.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2198. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/SuddenDeath.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2202. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/SoRomanCatholic.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2200. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/TheAssumption.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2198. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/ServeChrist.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2212. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/HowtoWriteCatholicRhymes.mpeg +Mar 30 10:36 : ffmpeg/mp3: Skipping 10 bytes of junk at 2211. +Mar 30 10:36 : ffmpeg/mp3: Estimating duration from bitrate, this may be inaccurate +Mar 30 10:36 : update: added Gospel/The Apologist D-Major/Very Marian/Earthlydad-EternalFather.mpeg +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/03-raymond_and_co--no_limits-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/08-raymond_and_co--i_know_youll_remember-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/09-raymond_and_co--changed-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/04-raymond_and_co--fire-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/01-raymond_and_co--since_i_found_you-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/06-raymond_and_co--crazy_faith-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/10-raymond_and_co--we_wait-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/07-raymond_and_co--he_can_do_it-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/02-raymond_and_co--playing_games-aes.mp3 +Mar 30 10:36 : update: added Gospel/Raymond & Co/Playing Game [2004]/05-raymond_and_co--representin-aes.mp3 +Mar 30 10:36 : update: added Gospel/Box Of History/Braille-BoxOfHistory-DJIDull.mp3 +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track16.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track7.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track1.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track14.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track3.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track6.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track8.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track9.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track5.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track13.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track15.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track4.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track11.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track17.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track10.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track12.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track18.wav +Mar 30 10:36 : update: added Gospel/FrStan/SacroSong3/Track2.wav +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/11-limp_bizkit-the_truth.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/04-limp_bizkit-break_stuff.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/08-limp_bizkit-my_way.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/03-limp_bizkit-nookie.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/07-limp_bizkit-rollin_(air_raid_vehicle).mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/05-limp_bizkit-re-arranged.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/09-limp_bizkit-eat_you_alive.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/06-limp_bizkit-take_a_look_around.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/01-limp_bizkit-counterfeit.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/02-limp_bizkit-faith.mp3 +Mar 30 10:36 : update: added Rock/Limp_Bizkit-Icon-2011-H3X/10-limp_bizkit-behind_blue_eyes.mp3 +Mar 30 10:36 : update: added Rock/Metallica-Fuel.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 06 - Pity.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 01 - Sinner.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 08 - I Am.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 10 - Told You So.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 09 - Follow.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 07 - Mute.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 11 - Sermon.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 05 - Reminded.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 04 - All Over Me.mp3 +Mar 30 10:36 : update: added Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/3 - Disturbed - Stupify .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/2 - Disturbed - The Game .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/5 - Disturbed - Violence Fetish .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/11 - Disturbed - Droppin' Plates .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/10 - Disturbed - Shout 2000 .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/7 - Disturbed - Numb .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/12 - Disturbed - Meaning Of Life .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/9 - Disturbed - Conflict .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/4 - Disturbed - Down With The Sickness .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/1 - Disturbed - Voices .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/8 - Disturbed - Want .mp3 +Mar 30 10:36 : update: added Rock/Disturbed/Sickness/6 - Disturbed - Fear .mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/09 - Anne-Marie - Ciao Adios.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/06 - Craig David - 7 Days.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/12 - George Ezra - Don't Worry, Be Happy.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/13 - Miley Cyrus - Malibu.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/14 - The XX - My Love.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/01 - Ed Sheeran - Castle On The Hill.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/10 - Dua Lipa feat. Miguel - Rollin' - Did You See.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/08 - Rita Ora - Your Song.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/07 - The Script - Changes.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/04 - Harry Styles - Wild Thoughts.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/03 - Paul Simon - Graceland.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/11 - London Grammar - Oh Woman Oh Man.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/05 - Rag'n'Bone Man - Human.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/15 - Disciples - Slide.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/16 - Paramore - Passionfruit.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD1/02 - P!nk - What About Us.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/13 - Years & Years - Olly Murs.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/15 - Starboy - Panic! At The Disco.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/12 - Rockabye - Louisa Johnson.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/09 - Freedom - Rag'n'Bone Man.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/10 - Sign of the Times - Kygo & Ellie Goulding.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/07 - Say You Won't Let Go - James Arthur.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/03 - Everything Now - Arcade Fire.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/11 - Don't Matter Now - George Ezra.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/16 - Big for Your Boots - Stormzy.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/02 - Hands to Myself - Kings Of Leon.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/06 - The Chain - Harry Styles.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/04 - Purple Rain - London Grammar.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/05 - My Sharona - Royal Blood.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/01 - Let There Be Rock - Foo Fighters.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/14 - Too Good - Zara Larsson.mp3 +Mar 30 10:36 : update: added Rock/BBC Radio 1's Live Lounge 2017 - Various/CD2/08 - Teardrops - Move On Up - Rudimental feat. Bridget.mp3 +Mar 30 11:31 : client: [0] opened from 127.0.0.1:35876 +Mar 30 11:31 : client: [0] closed +Mar 30 11:39 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/22 ocean eyes (live).mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/13 hostage.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/08 you should see me in a crown.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/12 i love you.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/02 listen before i go (live).mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/18 idontwannabeyouanymore.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/07 when the party's over.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/11 lovely.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/10 my strange addiction.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/03 everything i wanted.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/04 bad guy.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/20 my boy.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/17 xanny.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/14 bellyache.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/16 &burn.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/15 Six Feet Under.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/01 come out and play (live).mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/06 all the good girls go to hell.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/21 COPYCAT.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/09 ocean eyes.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/05 bury a friend.mp3 +Mar 30 12:28 : update: added Jazz/Billie Eilish - Essentials/19 come out and play.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/20 Vibin' (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/19 Cup O' Tea (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/18 Caffeine (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/17 I'm Into You (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/16 Open Mic (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/15 Cafe Au Lait (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/14 Bookworm (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/13 Coffee House Swingin' (INS).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/12 The Shift Change (bonus track).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/11 Perculating (G' Mornin') (bonus track).mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/10 Smitten.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/09 I'll Be....mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/08 Vibin'.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/07 Cup O' Tea.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/06 Caffeine.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/05 I'm Into You.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/04 Open Mic.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/03 Cafe Au Lait.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/02 Bookworm.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/01 Coffee House Swingin' f. Nile River.mp3 +Mar 30 12:30 : update: removing Jazz/Coffee House Swingers/21 I'll Be....mp3 +Mar 30 12:30 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 12:30 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:30 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:30 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:30 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 12:31 : update: removing Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 03 - a night in tijuana (krewcial).mp3 +Mar 30 12:31 : update: removing Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 02 - what's up with joe (lefto).mp3 +Mar 30 12:31 : update: removing Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 01 - intro (krewcial).mp3 +Mar 30 12:31 : update: removing Jazz/JazzMix/Krewcial & Lefto Out Of The Blue -- Blue Note Sidetracks Vol. 5 2004/lefto & krewcial - out of blue - 04 - byrds fly high (lefto).mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/01 - Ohio Players - Angel.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/02 - Ohio Players - Merry Go Round.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/08 - Ohio Players - Faith.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/07 - Ohio Players - O-H-I-O.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/06 - Ohio Players - Can You Still Love Me.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/05 - Ohio Players - Body Vibes.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/04 - Ohio Players - Don't Fight My Love.mp3 +Mar 30 12:31 : update: removing Jazz/Ohio Players - Angel/03 - Ohio Players - Glad To Know Your Mine.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/03 - Ohio Players - Glad To Know Your Mine.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/04 - Ohio Players - Don't Fight My Love.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/06 - Ohio Players - Can You Still Love Me.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/02 - Ohio Players - Merry Go Round.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/07 - Ohio Players - O-H-I-O.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/05 - Ohio Players - Body Vibes.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/01 - Ohio Players - Angel.mp3 +Mar 30 12:31 : update: added Jazz/Ohio Players/Ohio Players - Angel/08 - Ohio Players - Faith.mp3 +Mar 30 12:31 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 12:31 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:31 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:31 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:31 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 12:35 : update: removing Jazz/70s Japanese Jazz Mix (Jazz-funk, Soul Jazz, Rare groove, Drum Breaks..).m4a +Mar 30 12:35 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 12:35 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:35 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:35 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:35 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 12:44 : update: removing Jazz/10 Louis Armstrong - What a Wonderful World.mp3 +Mar 30 12:44 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 12:44 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 12:44 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 12:44 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 12:44 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track10.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track1.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Box Of History/Braille-BoxOfHistory-DJIDull.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-19.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-18.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-16.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-14.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-12.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-11.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-10.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-09.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-02.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Blind Faith/49stories-01.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_.flv +Mar 30 12:47 : update: removing Gospel/Gospel/Naturally_Seven__quot_Feel_it__in_the_air_tonight__quot___MUSIC_VIDEO_-1.flv +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/09-marvin_winans-come_in_out_of_the_rain.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/08-marvin_winans-im_over_it_now.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/07-marvin_winans-joy.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/06-marvin_winans-i_shall_never.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/05-marvin_winans-prelude.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/04-marvin_winans-i_still_believe.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/03-marvin_winans-just_dont_wanna_know.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/02-marvin_winans-my_story.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/01-marvin_winans-alone_but_not_alone.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/TheAssumption.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/SuddenDeath.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/St.MichaeltheArchangel.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/SoRomanCatholic.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/ServeChrist.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/OHolySoulofChrist.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/MarytheMotherofGod.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/HowtoWriteCatholicRhymes.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/HolySoulsinPurgatory.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Very Marian/Earthlydad-EternalFather.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/20OutroSkit.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/19SuperCatholicHeroes.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/18Tranformed.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/17St.MariaGoretti.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/16HolyGhostRiders.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/15ApologistsNo-Nos.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/14NewCatholicWorld.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/13LearnLatin.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/12Addiction.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/11CatholicPlatform.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/10The-Unconvertible-Intro.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/09BarrenWalls.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/08CommercialBreak.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/07CatholicDetectiveA.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/06Holy-Silence-(Shut-up!).mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/05My-Favorite-things.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/04Skit1-Ideal-Fan.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/03Good-Times-Bad-Times.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/02Let-the-Son-Shine-in.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/Thesauri Catholici/01Intro-Roman-Phatness.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Street_Manna.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Sentiments.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Say_What.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Prolific.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Priest_in_the_Hood.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/No_Way_Out.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/More_Holy_Wateraholics_Meeting_Part_2.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Let_the_Beat_Spin.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Is_this_whatcha_want.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Holy_Wateraholics_Meeting_Part_1.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Hidden_Track_-_Diggn_it.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Footprints.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Feel_the_Vibe.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Do_Right.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Butta_on_ma_Pancakes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/Broke_Pockets.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/All_They_Want_Is_Love.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/After_Mass.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Street Manna.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Sentiments.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Say What.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Prolific.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Priest in the Hood.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/No Way Out.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/More Holy Wateraholics Meeting Part2.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Let the Beat Spin.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Is this whatcha want.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Holy Wateraholics Meeting Part 1.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Hidden Track - Diggn it.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Footprints.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Feel the Vibe.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Do Right.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Butta on ma Pancakes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/Broke Pockets.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/All They Want Is Love.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/StreetMannaAlbum/StreetMannaAlbum.zip/StreetMannaAlbum/After Mass.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/53_Beads_on_a_String-The_Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/AMDG-The_Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Ad_Majorem_Dei_Gloriam-The_Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Shock_Troops-The_Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/CIA_Shock_Troops-The_Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/The Sign-The Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/The Apologist D-Major/A Sign of The Times/Karol_Watywa_and_Rosary-Mix-The-Apologist.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/10-raymond_and_co--we_wait-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/09-raymond_and_co--changed-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/08-raymond_and_co--i_know_youll_remember-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/07-raymond_and_co--he_can_do_it-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/06-raymond_and_co--crazy_faith-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/05-raymond_and_co--representin-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/04-raymond_and_co--fire-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/03-raymond_and_co--no_limits-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/02-raymond_and_co--playing_games-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Raymond & Co/Playing Game [2004]/01-raymond_and_co--since_i_found_you-aes.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/17 - Track 17.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/16 - Track 16.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/15 - Track 15.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/14 - Track 14.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/13 - Track 13.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/12 - Track 12.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/11 - Track 11.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/10 - Track 10.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/09 - Track 9.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/08 - Track 8.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/07 - Track 7.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/06 - Track 6.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/05 - Track 5.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/04 - Track 4.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/03 - Track 3.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/02 - Track 2.wav +Mar 30 12:47 : update: removing Gospel/Gospel/Point5Covenant/Listen.Learn/01 - Track 1.wav +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Love_Is.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Kiddkapps_III-Kiddkapps.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Beautiful_To_Me-mayd_by_GOD.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/No_Regrets-flow.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Platinum_Poison-Fr_Pontifex.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Kiddkapps_II-kiddkapps.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Since_You_Been_Around-Righteous_B.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/The_Struggle-mayd_by_GOD.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/The_Son_Still_Shines-Fr_Pontifex.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Spirtual_High-MC_Just.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Battle_Cry-mayd_by_GOD.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Kiddkapps_I-Kiddkapps.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/School_of_the_Eucharist-Fr_Stan_Fortuna.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Not_Hip_Hop-Point_5_Covenant.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Beyond_Comprehension-mayd_by_GOD.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Supernatural-MC Just.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Man_of_Fire-manCHILD_Fr_Pontifex.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/MassMatics/Intro-DJ86.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20071017.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20071010.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20071003.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070321.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070314.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070307.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070228.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070214.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070207.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070131.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070117.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20070111.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20061227.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/faf20061221.mp3 +Mar 30 12:47 : update: removing Gospel/Gospel/FunknFaith/Episode02_Mixtape_vol1.mpeg +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track9.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track8.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track7.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track6.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track5.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track4.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track3.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track2.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track18.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track17.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track16.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track15.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track14.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track13.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track12.wav +Mar 30 12:47 : update: removing Gospel/Gospel/FrStan/SacroSong3/Track11.wav +Mar 30 14:59 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 14:59 : client: [0] opened from 127.0.0.1:39086 +Mar 30 15:00 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:00 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:00 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:00 : exception: nested: failed to connect: Connection refused +Mar 30 15:01 : client: [0] closed +Mar 30 15:01 : client: [1] opened from 127.0.0.1:39652 +Mar 30 15:01 : client: [1] closed +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Mar 30 15:01 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 15:01 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 15:01 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 15:01 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 15:01 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 15:01 : update: updating Misc/Warp20Speed20Fat20Loss.flv +Mar 30 15:03 : client: [2] opened from 127.0.0.1:40370 +Mar 30 15:03 : player: played "HipHop/A Tribe Called Quest/2006 - The Lost Tribes/01 Oh My God (UK Flavor Radio).mp3" +Mar 30 15:03 : client: [2] closed +Mar 30 15:12 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:17 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:17 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:25 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:25 : exception: nested: failed to connect: Connection refused +Mar 30 15:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:26 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" +Mar 30 15:27 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:27 : exception: nested: failed to connect: Connection refused +Mar 30 15:27 : exception: Bad playlist name +Mar 30 15:29 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:29 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:29 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:29 : exception: nested: failed to connect: Connection refused +Mar 30 15:29 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:31 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:32 : client: [0] opened from 127.0.0.1:51558 +Mar 30 15:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:32 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:32 : exception: nested: failed to connect: Connection refused +Mar 30 15:32 : client: [0] closed +Mar 30 15:32 : client: [1] opened from 127.0.0.1:51634 +Mar 30 15:32 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:32 : client: [1] closed +Mar 30 15:33 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:33 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:33 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:33 : exception: nested: failed to connect: Connection refused +Mar 30 15:33 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:33 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:33 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:34 : client: [0] opened from 127.0.0.1:52344 +Mar 30 15:34 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:34 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:34 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:34 : exception: nested: failed to connect: Connection refused +Mar 30 15:34 : client: [0] closed +Mar 30 15:34 : client: [1] opened from 127.0.0.1:52396 +Mar 30 15:34 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:34 : client: [1] closed +Mar 30 15:37 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:38 : client: [0] opened from 127.0.0.1:53882 +Mar 30 15:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:38 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:38 : exception: nested: failed to connect: Connection refused +Mar 30 15:38 : client: [0] closed +Mar 30 15:38 : client: [1] opened from 127.0.0.1:53958 +Mar 30 15:38 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:38 : client: [1] closed +Mar 30 15:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:40 : client: [0] opened from 127.0.0.1:54804 +Mar 30 15:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:40 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:40 : exception: nested: failed to connect: Connection refused +Mar 30 15:40 : client: [0] closed +Mar 30 15:40 : client: [1] opened from 127.0.0.1:54904 +Mar 30 15:40 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:40 : client: [1] closed +Mar 30 15:43 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:43 : client: [0] opened from 127.0.0.1:55870 +Mar 30 15:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:43 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:43 : exception: nested: failed to connect: Connection refused +Mar 30 15:43 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:43 : exception: nested: failed to connect: Connection refused +Mar 30 15:43 : player: problems opening audio device while playing "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:43 : client: [0] closed +Mar 30 15:43 : client: [1] opened from 127.0.0.1:55960 +Mar 30 15:43 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:43 : client: [1] closed +Mar 30 15:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:44 : client: [0] opened from 127.0.0.1:56386 +Mar 30 15:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:44 : exception: Failed to open "My Pulse Output" (pulse) +Mar 30 15:44 : exception: nested: failed to connect: Connection refused +Mar 30 15:44 : client: [0] closed +Mar 30 15:44 : alsa_output: Decoder is too slow; playing silence to avoid xrun +Mar 30 15:44 : client: [1] opened from 127.0.0.1:56514 +Mar 30 15:44 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:44 : client: [1] closed +Mar 30 15:45 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:46 : client: [0] opened from 127.0.0.1:56994 +Mar 30 15:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:46 : client: [0] closed +Mar 30 15:46 : client: [1] opened from 127.0.0.1:57090 +Mar 30 15:46 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:46 : client: [1] closed +Mar 30 15:49 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 15:51 : player: played "HipHop/A Tribe Called Quest/1996 - Beats, Rhymes and Life/01 Phony Rappers.mp3" +Mar 30 15:55 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" + +Mar 30 16:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 16:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 16:44 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" +Mar 30 16:48 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" +Mar 30 16:49 : player: played "Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3" +Mar 30 16:56 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/10 - So Simple.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/01 - Harlem's Nocturne.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/14 - Samsonite Man.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/11 - When You Really Love Someone.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/05 - You Don't Know My Name.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/02 - Karma.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/09 - Wake Up.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/08 - Dragon Days.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/07 - Diary.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/15 - Nobody Not Really (Interlude).mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/13 - Slow Down.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/06 - If I Ain't Got You.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/12 - Feeling U, Feeling Me (Interlude).mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/03 - Heartburn.mp3 +Mar 30 17:18 : update: added Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/04 - Medley If I Was Your WomanWalk on By.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/01 - Harlem's Nocturne.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/02 - Karma.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/03 - Heartburn.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/04 - Medley If I Was Your WomanWalk on By.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/05 - You Don't Know My Name.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/06 - If I Ain't Got You.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/07 - Diary.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/14 - Samsonite Man.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/13 - Slow Down.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/12 - Feeling U, Feeling Me (Interlude).mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/11 - When You Really Love Someone.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/10 - So Simple.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/09 - Wake Up.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/08 - Dragon Days.mp3 +Mar 30 18:11 : update: removing Jazz/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/15 - Nobody Not Really (Interlude).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 05 - Wait To You See Me Smile.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 02 - Love Is Blind.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 06 - That's How Strong My Love Is.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 07 - Un-Thinkable (I'm Ready).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 15 - Through It All.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 13 - How It Feels To Fly.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 16 - Pray For Forgiveness.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 03 - Doesn't Mean Anything.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 14 - Empire State Of Mind (Part II) Broken Down.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 11 - This Bed.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 08 - Love Is My Disease.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 01 - Element Of Freedom (Intro).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 09 - Like The Sea.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 12 - Distance And Time.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 04 - Try Sleeping With A Broken Heart.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 10 - Put It In A Love Song ft. Beyonce.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/05. Alicia Keys - If I Was Your Woman-Walk On By.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/16. Alicia Keys - Goodbye.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/01. Alicia Keys - Go Ahead.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/11. Alicia Keys - The Thing About Love.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/15. Alicia Keys - Wake Up.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/09. Alicia Keys - Nobody Not Really.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/17. Alicia Keys - So Simple.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/13. Alicia Keys -Butterflyz.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/02. Alicia Keys - Heartburn.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/04. Alicia Keys - Tell You Something (Nana's Reprise).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/12. Alicia Keys - Dragon Days.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/07. Alicia Keys - I Need You.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/08. Alicia Keys - Stolen Moments.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/06. Alicia Keys - Lovin U.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/10. Alicia Keys - Troubles.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/18. Alicia Keys - Streets Of New York (City Life).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/14. Alicia Keys - Lesson Learned (featuring John Mayer).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/01. Alicia Keys - Teenage Love Affair.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/10. Alicia Keys - Where Do We Go From Here.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/12. Alicia Keys - Superwoman.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/05. Alicia Keys - Fallin.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/17. Alicia Keys - Every Little Bit Hurts.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/14. Alicia Keys - Karma.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/13. Alicia Keys - Girlfriend.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/09. Alicia Keys - You Don't Know My Name.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/06. Alicia Keys - Like You'll Never See Me Again.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/03. Alicia Keys - No One.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/08. Alicia Keys - A Woman's Worth.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/11. Alicia Keys - Diary (Feat. Tony! Toni! Tone'!).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/02. Alicia Keys - Gangsta Lovin'.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/16. Alicia Keys - How Come You Don't Call Me.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/07. Alicia Keys - Unbreakable.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/18. Alicia Keys - Someday We'll All Be Free.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/02 - Alicia Keys - Brand New Me.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/04 - Alicia Keys - Listen To Your Heart.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/05 - Alicia Keys - New Day.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/09 - Alicia Keys - Not Even The King.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/07 - Alicia Keys - Fire We Make (Ft. Maxwell).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/01 - Alicia Keys - Do Novo Adagio (Intro).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/11 - Alicia Keys - Limitedless.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/12 - Alicia Keys - One Thing.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/03 - Alicia Keys - When It's All Over.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/06 - Alicia Keys - Girl On Fire (Inferno Version)(Ft. Nicki Minaj).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/13 - Alicia Keys - 1 0 1.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/10 - Alicia Keys - That's When I Knew.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/08 - Alicia Keys - Tears Always Win.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/10 - So Simple.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/01 - Harlem's Nocturne.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/14 - Samsonite Man.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/11 - When You Really Love Someone.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/05 - You Don't Know My Name.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/02 - Karma.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/09 - Wake Up.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/08 - Dragon Days.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/07 - Diary.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/15 - Nobody Not Really (Interlude).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/13 - Slow Down.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/06 - If I Ain't Got You.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/12 - Feeling U, Feeling Me (Interlude).mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/03 - Heartburn.mp3 +Mar 30 18:11 : update: added Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/04 - Medley If I Was Your WomanWalk on By.mp3 +Mar 30 18:11 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 18:11 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:11 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:11 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:11 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/01. Alicia Keys - Teenage Love Affair.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/02. Alicia Keys - Gangsta Lovin'.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/17. Alicia Keys - So Simple.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/16. Alicia Keys - Goodbye.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/15. Alicia Keys - Wake Up.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/14. Alicia Keys - Lesson Learned (featuring John Mayer).mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/13. Alicia Keys -Butterflyz.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/12. Alicia Keys - Dragon Days.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/11. Alicia Keys - The Thing About Love.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/10. Alicia Keys - Troubles.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/09. Alicia Keys - Nobody Not Really.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/08. Alicia Keys - Stolen Moments.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/07. Alicia Keys - I Need You.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/06. Alicia Keys - Lovin U.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/05. Alicia Keys - If I Was Your Woman-Walk On By.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/05. Alicia Keys - If I Was Your Woman-Walk On By.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/04. Alicia Keys - Tell You Something (Nana's Reprise).mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/02. Alicia Keys - Heartburn.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/01. Alicia Keys - Go Ahead.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 2/18. Alicia Keys - Streets Of New York (City Life).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/16. Alicia Keys - Goodbye.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/18. Alicia Keys - Someday We'll All Be Free.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/17. Alicia Keys - Every Little Bit Hurts.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/16. Alicia Keys - How Come You Don't Call Me.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/14. Alicia Keys - Karma.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/13. Alicia Keys - Girlfriend.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/12. Alicia Keys - Superwoman.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/11. Alicia Keys - Diary (Feat. Tony! Toni! Tone'!).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/01. Alicia Keys - Go Ahead.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/10. Alicia Keys - Where Do We Go From Here.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/09. Alicia Keys - You Don't Know My Name.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/08. Alicia Keys - A Woman's Worth.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/07. Alicia Keys - Unbreakable.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/06. Alicia Keys - Like You'll Never See Me Again.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/05. Alicia Keys - Fallin.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Mar 30 18:12 : update: removing Jazz/Alicia Keys/Alicia Keys-Greatest Hits/CD 1/03. Alicia Keys - No One.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/11. Alicia Keys - The Thing About Love.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/15. Alicia Keys - Wake Up.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/09. Alicia Keys - Nobody Not Really.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/17. Alicia Keys - So Simple.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/13. Alicia Keys -Butterflyz.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/02. Alicia Keys - Heartburn.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/04. Alicia Keys - Tell You Something (Nana's Reprise).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/12. Alicia Keys - Dragon Days.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/07. Alicia Keys - I Need You.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/08. Alicia Keys - Stolen Moments.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/06. Alicia Keys - Lovin U.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/10. Alicia Keys - Troubles.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/18. Alicia Keys - Streets Of New York (City Life).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/14. Alicia Keys - Lesson Learned (featuring John Mayer).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/01. Alicia Keys - Teenage Love Affair.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/10. Alicia Keys - Where Do We Go From Here.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/12. Alicia Keys - Superwoman.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/05. Alicia Keys - Fallin.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/17. Alicia Keys - Every Little Bit Hurts.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/14. Alicia Keys - Karma.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/13. Alicia Keys - Girlfriend.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/09. Alicia Keys - You Don't Know My Name.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/06. Alicia Keys - Like You'll Never See Me Again.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/03. Alicia Keys - No One.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/08. Alicia Keys - A Woman's Worth.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/11. Alicia Keys - Diary (Feat. Tony! Toni! Tone'!).mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/02. Alicia Keys - Gangsta Lovin'.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/16. Alicia Keys - How Come You Don't Call Me.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/07. Alicia Keys - Unbreakable.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/18. Alicia Keys - Someday We'll All Be Free.mp3 +Mar 30 18:12 : update: added Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Untitled (How Does It Feel)-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/The Root-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/The Line-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Spanish Joint-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Send It On-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Playa Playa-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/One Mo'Gin-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Left And Right-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Greatdayndamornin'-Booty-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Feel Like Makin' Love-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Devil's Pie-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Chicken Grease-audiotrack.mp3 +Mar 30 18:12 : update: removing Jazz/D'Angelo Voodoo Full Album/Africa-audiotrack.mp3 +Mar 30 18:12 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Mar 30 18:12 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Mar 30 18:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Mar 30 18:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Mar 30 18:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Greatdayndamornin'-Booty-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Untitled (How Does It Feel)-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Left And Right-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Devil's Pie-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/The Root-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Playa Playa-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Feel Like Makin' Love-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/One Mo'Gin-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Spanish Joint-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Africa-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Send It On-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/Chicken Grease-audiotrack.mp3 +Mar 30 18:12 : update: added Jazz/D'Angelo Voodoo/The Line-audiotrack.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/02 - henceforth.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/04 - red, black & green.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/03 - day dreaming.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/07 - papa was a rolling stone.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/06 - rhythms of your mind.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/01 - ain't no sunshine.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - Red Black & Green (1973)/05 - cocoa butter.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/07 - papa was a rolling stone.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/06 - rhythms of your mind.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/05 - cocoa butter.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/04 - red, black & green.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/03 - day dreaming.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/02 - henceforth.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/red_black___green__1973_/Roy Ayers - Red Black & Green (1973)/01 - ain't no sunshine.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/roy ayers - everybody loves the sunshine (1976)/01 • hey uh - what you say come on.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/roy ayers - everybody loves the sunshine (1976)/02 • the golden rod.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/roy ayers - everybody loves the sunshine (1976)/03 • keep on walking.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/roy ayers - everybody loves the sunshine (1976)/04 • you and me my love.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/04 • you and me my love.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/03 • keep on walking.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/02 • the golden rod.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/everybody_loves_the_sunshine__1976_/roy ayers - everybody loves the sunshine (1976)/01 • hey uh - what you say come on.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers - A Tear To A Smile (1975)/Roy Ayers - 01 - 2000 Black.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/a_tear_to_a_smile__1975_/Roy Ayers - A Tear To A Smile (1975)/Roy Ayers - 01 - 2000 Black.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A1-Domelo (Give IT TO ME)_01.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A2- BABY I NEED YOUR LOVE_01.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A3- HIGHER_01.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A4- THE MEMORY_01.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A5- COME OUT AND PLAY_01.mp3 +Mar 30 18:14 : update: removing Jazz/Roy Ayers/Vibrations_1976/Roy Ayers Ubiquity - Vibrations 1976/A6- BETTER DAYS_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A4- THE MEMORY_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A3- HIGHER_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A5- COME OUT AND PLAY_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A2- BABY I NEED YOUR LOVE_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A1-Domelo (Give IT TO ME)_01.mp3 +Mar 30 18:14 : update: added Jazz/Roy Ayers/Roy Ayers Ubiquity - Vibrations 1976/A6- BETTER DAYS_01.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/07 Visions of a New World (Phase II).mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/01 Chance for Peace.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/04 Devika [Goddess Chants].mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/05 Sunset.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/02 Love Beams.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/06 Visions of a New World (Phase I).mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/08 Summer Nights.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Visions of a New World [1975]/03 Colors of the Rainbow.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/08 Summer Nights.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/07 Visions of a New World (Phase II).mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/06 Visions of a New World (Phase I).mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/05 Sunset.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/04 Devika [Goddess Chants].mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/03 Colors of the Rainbow.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/02 Love Beams.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/visions_of_a_new_world_1975/Visions of a New World [1975]/01 Chance for Peace.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/08 LONNIE LISTON SMITH - Free and Easy.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/07 LONNIE LISTON SMITH - Give Peace a Chance (Make Love Not War).MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/06 LONNIE LISTON SMITH - The Enchantress.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/05 LONNIE LISTON SMITH - On The Real Side.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/04 LONNIE LISTON SMITH - Bridge Through Time.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/03 LONNIE LISTON SMITH - Speak About It.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/02 LONNIE LISTON SMITH - Love is the Answer.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/love_is_the_answer-80/love is the answer-80/01 LONNIE LISTON SMITH - In The Park.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/08 LONNIE LISTON SMITH - Free and Easy.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/05 LONNIE LISTON SMITH - On The Real Side.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/01 LONNIE LISTON SMITH - In The Park.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/07 LONNIE LISTON SMITH - Give Peace a Chance (Make Love Not War).MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/03 LONNIE LISTON SMITH - Speak About It.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/06 LONNIE LISTON SMITH - The Enchantress.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/02 LONNIE LISTON SMITH - Love is the Answer.MP3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/love is the answer-80/04 LONNIE LISTON SMITH - Bridge Through Time.MP3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/07 My Love.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/06 Shadows.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/05 Peace.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/04 Voodoo Woman.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/03 Summer Days.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/02 Desert Nights.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/expansions-75/expansions-75/01 Expansions.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/04 Voodoo Woman.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/02 Desert Nights.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/03 Summer Days.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/01 Expansions.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/06 Shadows.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/05 Peace.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/expansions-75_/07 My Love.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 02 - Mardi Gras (Carnival).mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 06 - Between Here And There.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 04 - Mongotee.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 07 - Renaissance.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 03 - Starlight And You.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 01 - Space Lady.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 05 - A Song Of Love.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 07 - Renaissance.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 06 - Between Here And There.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 05 - A Song Of Love.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 04 - Mongotee.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 03 - Starlight And You.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 02 - Mardi Gras (Carnival).mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Renaissance_1977/Renaissance[1977]/Lonnie Liston Smith And The Cosmic Echoes - 01 - Space Lady.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/01- get down everybody (it's time for world peace).mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/10 - journey into space.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/09 - golden dreams.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/08 - inner beauty.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/07 - goddess of love.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/06 - beautiful woman.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/05 - peace & love.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/04 - meditations.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/03 - sunbeams.mp3 +Mar 30 18:15 : update: removing Jazz/Lonnie Liston Smith/Reflections_of_a_Golden_Dream_1976/Reflections of a Golden Dream [1976]/02 - quiet dawn.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/01- get down everybody (it's time for world peace).mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/05 - peace & love.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/09 - golden dreams.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/04 - meditations.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/07 - goddess of love.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/02 - quiet dawn.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/06 - beautiful woman.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/03 - sunbeams.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/10 - journey into space.mp3 +Mar 30 18:15 : update: added Jazz/Lonnie Liston Smith/Reflections of a Golden Dream [1976]/08 - inner beauty.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/06-lonnie_liston_smith_-_springtime_magic.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/01-lonnie_liston_smith_-_sunburst.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/08-lonnie_liston_smith_-_explorations.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/04-lonnie_liston_smith_-_bright_moments.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/03-lonnie_liston_smith_-_floating_through_space.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/05-lonnie_liston_smith_-_we_can_dream.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/07-lonnie_liston_smith_-_loveland.mp3 +Mar 30 18:16 : update: added Jazz/Lonnie Liston Smith/Loveland [1978]/02-lonnie_liston_smith_-_journey_into_love.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/01-lonnie_liston_smith_-_sunburst.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/02-lonnie_liston_smith_-_journey_into_love.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/03-lonnie_liston_smith_-_floating_through_space.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/04-lonnie_liston_smith_-_bright_moments.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/05-lonnie_liston_smith_-_we_can_dream.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/06-lonnie_liston_smith_-_springtime_magic.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/07-lonnie_liston_smith_-_loveland.mp3 +Mar 30 18:16 : update: removing Jazz/Lonnie Liston Smith/Loveland_1978/Loveland [1978]/08-lonnie_liston_smith_-_explorations.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/01 - Get Low.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/02 - A Bay Bay.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/03 - Salt Shaker.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/04 - Soul Survivor.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/05 - Splash Waterfalls.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/06 - Sensual Seduction.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/07 - Walk It Out.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/08 - Crank That.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/11 - Bridging The Great Divide.mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/10 - A Bay Bay ( Mike Phillips Version).mp3 +Mar 30 18:17 : update: removing Jazz/Hidden Beach Recordings/Hidden Beach Recordings/Unwrapped Volume 5/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/09 - Shawty.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/04 - Soul Survivor.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/08 - Crank That.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/09 - Shawty.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/05 - Splash Waterfalls.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/07 - Walk It Out.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/10 - A Bay Bay ( Mike Phillips Version).mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/02 - A Bay Bay.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/01 - Get Low.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/11 - Bridging The Great Divide.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/03 - Salt Shaker.mp3 +Mar 30 18:17 : update: added Jazz/Hidden Beach Recordings/Unwrapped Vol. 5.0_ The Collipark Cafe Sessions/06 - Sensual Seduction.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/04 - Bordertown.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/01 - Soulful Strut.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/02 - Can You Stop The Rain.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/03 - Play That Groove For Me.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/05 - I Can Count The Times.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/06 - Village Groove.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/07 - Headman's Haunt.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/08 - Poacher Man.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/09 - Mystical Force.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/soulful_strut/Soulful Strut/10 - Uptown.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/01 - Soulful Strut.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/10 - Uptown.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/05 - I Can Count The Times.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/07 - Headman's Haunt.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/06 - Village Groove.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/03 - Play That Groove For Me.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/04 - Bordertown.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/09 - Mystical Force.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/02 - Can You Stop The Rain.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Soulful Strut/08 - Poacher Man.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/11 - Check Out Grover.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/10- Get On Up.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/09 - Till You Return To Me.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/08-Summer Chill.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/07 - Love Like This.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/06 - I Miss Home.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/05 - Next Exit.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/04 - Greene Street.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/03 - Only For You.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/02 - Yor Love.mp3 +Mar 30 18:17 : update: removing Jazz/Grover Washington Jr/next_exit/Next Exit/01 - Take Five.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/02 - Yor Love.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/05 - Next Exit.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/08-Summer Chill.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/06 - I Miss Home.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/03 - Only For You.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/01 - Take Five.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/09 - Till You Return To Me.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/04 - Greene Street.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/07 - Love Like This.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/10- Get On Up.mp3 +Mar 30 18:17 : update: added Jazz/Grover Washington Jr/Next Exit/11 - Check Out Grover.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 07 - Love To Keep You In My Mind.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 06 - Now You're Gone.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 05 - Beautiful Brother Of Mine.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 04 - We Got To Have Peace.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 03 - Underground.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 02 - Keep On Keeping Up.mp3 +Mar 30 18:18 : update: removing Jazz/Curtis Mayfield/Curtis_Mayfield_-_Roots/Curtis Mayfield - Roots/Curtis Mayfield - 01 - Get Down.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 05 - Beautiful Brother Of Mine.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 07 - Love To Keep You In My Mind.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 02 - Keep On Keeping Up.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 04 - We Got To Have Peace.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 01 - Get Down.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 03 - Underground.mp3 +Mar 30 18:18 : update: added Jazz/Curtis Mayfield/Curtis Mayfield - Roots/Curtis Mayfield - 06 - Now You're Gone.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/The Shadow Do.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/1,2,3.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Walk On By.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Mohair Sam.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Arrastao.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Uptight (Everything's Alright).mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Hey Girl.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/There Is A Time (Le Temps).mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/I Can't Believe You Love Me.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Studewood.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Walkin' My Cat Named Dog.mp3 +Mar 30 18:18 : update: removing Jazz/Crusaders/JazzCrusaders_TalkThatTalk/JazzCrusaders_TalkThatTalk/Turkish Black.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Arrastao.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/I Can't Believe You Love Me.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/1,2,3.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Uptight (Everything's Alright).mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Studewood.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/There Is A Time (Le Temps).mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Turkish Black.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Mohair Sam.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Walk On By.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Walkin' My Cat Named Dog.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/The Shadow Do.mp3 +Mar 30 18:18 : update: added Jazz/Crusaders/JazzCrusaders_TalkThatTalk_/Hey Girl.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/01-marvin_winans-alone_but_not_alone.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/02-marvin_winans-my_story.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/03-marvin_winans-just_dont_wanna_know.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/04-marvin_winans-i_still_believe.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/05-marvin_winans-prelude.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/06-marvin_winans-i_shall_never.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/07-marvin_winans-joy.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/08-marvin_winans-im_over_it_now.mp3 +Mar 30 18:19 : update: removing Gospel/Winans/Marvin Winans - Alone But Not Alone 2007/Marvin Winans - Alone But Not Alone 2007/Nouveau dossier (5)/09-marvin_winans-come_in_out_of_the_rain.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/02-marvin_winans-my_story.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/07-marvin_winans-joy.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/06-marvin_winans-i_shall_never.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/03-marvin_winans-just_dont_wanna_know.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/09-marvin_winans-come_in_out_of_the_rain.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/01-marvin_winans-alone_but_not_alone.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/08-marvin_winans-im_over_it_now.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/04-marvin_winans-i_still_believe.mp3 +Mar 30 18:19 : update: added Gospel/Winans/Marvin Winans - Alone But Not Alone 2007_/Nouveau dossier (5)/05-marvin_winans-prelude.mp3 +Mar 31 10:07 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 10:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 10:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 10:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 10:52 : player: played "Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3" +Mar 31 10:55 : player: played "Jazz/COFFEE HOUSE SWINGER/03 Cafe Au Lait.mp3" +Mar 31 10:58 : player: played "Jazz/COFFEE HOUSE SWINGER/04 Open Mic.mp3" +Mar 31 11:01 : player: played "Jazz/COFFEE HOUSE SWINGER/05 I'm Into You.mp3" +Mar 31 11:30 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Mar 31 15:54 : player: played "Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3" +Mar 31 15:55 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 15:55 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 17:06 : player: played "Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3" +Mar 31 17:12 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 17:12 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Mar 31 17:41 : update: added Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3 +Apr 01 01:41 : player: played "Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3" +Apr 01 10:29 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 01 10:29 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/01. Armin Van Buuren feat. Candace Sosa - Runaway.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/04. SAINt JHN - Roses (Imanbek Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/12. El Capon - Shut Up Chicken.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/08. Meduza feat. Becky Hill & GOODBOYS - Lose Control.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/30. Spatarini feat. Zonenaxis - My Self.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/22. RSAC - NBA (Rompasso Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/25. Tones & I - Dance Monkey (FIRON'KEY RMX).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/11. Audiosoulz - Dancefloor.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/02. Yves V & Ilkay Sencan feat. Emie - Not So Bad.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/16. Serge Legran & DJ DimixeR - Bam Barabam (Boostereo Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/36. Oliver Heldens & Mesto - The G.O.A.T.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/38. R3hab x Елена Темникова - Where You Wanna Be.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/21. Platon & Joolay - Over.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/40. CLOUDLESS - Drown Me Down (Malyar Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/27. Alan Walker feat. ASAP Rocky - Live Fast (PUBGM) (DJ Noiz Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/35. NERVO & Plastik Funk & Tim Morrison - Dare Me.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/37. Dynoro feat. Ina Wroldsen - Obsessed (Tiesto Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/15. Hangover Boss & SYBM! - Make My Day.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/03. Monolink - Return To Oz (ARTBAT Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/26. Zivert - Beverly Hills (A. Rassevich Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/33. Saweetie & Galxara - Sway With Me.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/31. Halsey - You Should Be Sad (Tiesto Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/28. Andrey Exx & Airsand - Losing My Mind (Roelbeat & Ivan Summer Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/34. Choomba - La Luh.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/05. Верка Сердючка - Make It Rain Champagne.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/20. Quarantino - Broken Love.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/19. Tiesto & 7 Skies feat. RebMoe - My Frequency.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/10. Mari Ferrari & M.Z.I & S-Elm feat. Vianne - Drop Dead.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/23. David Guetta & Morten feat. RAYE - Make It To Heaven.mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/39. Roddy Ricch - The Box (Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/17. George Grey - Why You Lie To Me (Nikko Culture Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/07. The Chainsmokers & Illenium feat. Lennon Stella - Takeaway (SONDR Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/29. Y2K & Bbno$ - Lalala (IPUNKZ Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/18. Rompasso - Kamikaze (Agilar & Danny May Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/13. Zhoneus Deep - Feels Like (NeZhDan Remix).mp3 +Apr 01 11:26 : update: added HipHop/Kiss FM Top 40 [29.03] (2020)/09. Will Armex - Love Is Gone (Remix).mp3 +Apr 01 11:27 : exception: Failed to access /home/archlinux/vgg/Music/HipHop/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]: No such file or directory +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/01. Armin Van Buuren feat. Candace Sosa - Runaway.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/02. Yves V & Ilkay Sencan feat. Emie - Not So Bad.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/40. CLOUDLESS - Drown Me Down (Malyar Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/39. Roddy Ricch - The Box (Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/38. R3hab x Елена Темникова - Where You Wanna Be.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/37. Dynoro feat. Ina Wroldsen - Obsessed (Tiesto Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/36. Oliver Heldens & Mesto - The G.O.A.T.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/35. NERVO & Plastik Funk & Tim Morrison - Dare Me.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/34. Choomba - La Luh.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/33. Saweetie & Galxara - Sway With Me.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/31. Halsey - You Should Be Sad (Tiesto Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/30. Spatarini feat. Zonenaxis - My Self.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/29. Y2K & Bbno$ - Lalala (IPUNKZ Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/28. Andrey Exx & Airsand - Losing My Mind (Roelbeat & Ivan Summer Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/27. Alan Walker feat. ASAP Rocky - Live Fast (PUBGM) (DJ Noiz Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/26. Zivert - Beverly Hills (A. Rassevich Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/25. Tones & I - Dance Monkey (FIRON'KEY RMX).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/23. David Guetta & Morten feat. RAYE - Make It To Heaven.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/22. RSAC - NBA (Rompasso Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/21. Platon & Joolay - Over.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/20. Quarantino - Broken Love.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/19. Tiesto & 7 Skies feat. RebMoe - My Frequency.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/18. Rompasso - Kamikaze (Agilar & Danny May Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/17. George Grey - Why You Lie To Me (Nikko Culture Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/16. Serge Legran & DJ DimixeR - Bam Barabam (Boostereo Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/15. Hangover Boss & SYBM! - Make My Day.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/13. Zhoneus Deep - Feels Like (NeZhDan Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/12. El Capon - Shut Up Chicken.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/11. Audiosoulz - Dancefloor.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/10. Mari Ferrari & M.Z.I & S-Elm feat. Vianne - Drop Dead.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/09. Will Armex - Love Is Gone (Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/08. Meduza feat. Becky Hill & GOODBOYS - Lose Control.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/07. The Chainsmokers & Illenium feat. Lennon Stella - Takeaway (SONDR Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/05. Верка Сердючка - Make It Rain Champagne.mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/04. SAINt JHN - Roses (Imanbek Remix).mp3 +Apr 01 11:27 : update: removing HipHop/Kiss FM Top 40 [29.03] (2020)/03. Monolink - Return To Oz (ARTBAT Remix).mp3 +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:27 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:27 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Apr 01 11:27 : update: added Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/01. Armin Van Buuren feat. Candace Sosa - Runaway.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/04. SAINt JHN - Roses (Imanbek Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/12. El Capon - Shut Up Chicken.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/08. Meduza feat. Becky Hill & GOODBOYS - Lose Control.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/30. Spatarini feat. Zonenaxis - My Self.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/22. RSAC - NBA (Rompasso Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/25. Tones & I - Dance Monkey (FIRON'KEY RMX).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/11. Audiosoulz - Dancefloor.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/02. Yves V & Ilkay Sencan feat. Emie - Not So Bad.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/16. Serge Legran & DJ DimixeR - Bam Barabam (Boostereo Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/36. Oliver Heldens & Mesto - The G.O.A.T.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/38. R3hab x Елена Темникова - Where You Wanna Be.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/21. Platon & Joolay - Over.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/40. CLOUDLESS - Drown Me Down (Malyar Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/27. Alan Walker feat. ASAP Rocky - Live Fast (PUBGM) (DJ Noiz Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/35. NERVO & Plastik Funk & Tim Morrison - Dare Me.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/37. Dynoro feat. Ina Wroldsen - Obsessed (Tiesto Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/15. Hangover Boss & SYBM! - Make My Day.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/03. Monolink - Return To Oz (ARTBAT Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/26. Zivert - Beverly Hills (A. Rassevich Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/33. Saweetie & Galxara - Sway With Me.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/31. Halsey - You Should Be Sad (Tiesto Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/28. Andrey Exx & Airsand - Losing My Mind (Roelbeat & Ivan Summer Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/34. Choomba - La Luh.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/05. Верка Сердючка - Make It Rain Champagne.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/20. Quarantino - Broken Love.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/19. Tiesto & 7 Skies feat. RebMoe - My Frequency.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/10. Mari Ferrari & M.Z.I & S-Elm feat. Vianne - Drop Dead.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/23. David Guetta & Morten feat. RAYE - Make It To Heaven.mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/39. Roddy Ricch - The Box (Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/17. George Grey - Why You Lie To Me (Nikko Culture Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/07. The Chainsmokers & Illenium feat. Lennon Stella - Takeaway (SONDR Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/29. Y2K & Bbno$ - Lalala (IPUNKZ Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/18. Rompasso - Kamikaze (Agilar & Danny May Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/13. Zhoneus Deep - Feels Like (NeZhDan Remix).mp3 +Apr 01 11:27 : update: added Dance/Kiss FM Top 40 [29.03] (2020)/09. Will Armex - Love Is Gone (Remix).mp3 +Apr 01 11:28 : exception: Failed to access /home/archlinux/vgg/Music/Jazz/soulchef.mp3: No such file or directory +Apr 01 11:28 : exception: Failed to access /home/archlinux/vgg/Music/Jazz/Jus Say Hi ft Mangaliso asi.mp3: No such file or directory +Apr 01 11:28 : exception: Failed to access /home/archlinux/vgg/Music/Jazz/Massive Attack - Heligoland: No such file or directory +Apr 01 11:28 : exception: Failed to access /home/archlinux/vgg/Music/Jazz/D'Angelo Voodoo: No such file or directory +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/07. Alicia Keys - I Need You.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/06. Alicia Keys - Lovin U.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/05. Alicia Keys - If I Was Your Woman-Walk On By.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/04. Alicia Keys - Tell You Something (Nana's Reprise).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/02. Alicia Keys - Heartburn.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/01. Alicia Keys - Go Ahead.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/18. Alicia Keys - Streets Of New York (City Life).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/18. Alicia Keys - Someday We'll All Be Free.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/17. Alicia Keys - Every Little Bit Hurts.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/16. Alicia Keys - How Come You Don't Call Me.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/14. Alicia Keys - Karma.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/13. Alicia Keys - Girlfriend.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/12. Alicia Keys - Superwoman.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/11. Alicia Keys - Diary (Feat. Tony! Toni! Tone'!).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/10. Alicia Keys - Where Do We Go From Here.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/09. Alicia Keys - You Don't Know My Name.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/08. Alicia Keys - A Woman's Worth.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/07. Alicia Keys - Unbreakable.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/06. Alicia Keys - Like You'll Never See Me Again.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/05. Alicia Keys - Fallin.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/03. Alicia Keys - No One.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/02. Alicia Keys - Gangsta Lovin'.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/01. Alicia Keys - Teenage Love Affair.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/13 - Alicia Keys - 1 0 1.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/12 - Alicia Keys - One Thing.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/11 - Alicia Keys - Limitedless.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/10 - Alicia Keys - That's When I Knew.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/09 - Alicia Keys - Not Even The King.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/08 - Alicia Keys - Tears Always Win.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/07 - Alicia Keys - Fire We Make (Ft. Maxwell).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/06 - Alicia Keys - Girl On Fire (Inferno Version)(Ft. Nicki Minaj).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/05 - Alicia Keys - New Day.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/04 - Alicia Keys - Listen To Your Heart.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/03 - Alicia Keys - When It's All Over.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/02 - Alicia Keys - Brand New Me.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/01 - Alicia Keys - Do Novo Adagio (Intro).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/15 - Nobody Not Really (Interlude).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/14 - Samsonite Man.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/13 - Slow Down.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/12 - Feeling U, Feeling Me (Interlude).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/11 - When You Really Love Someone.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/10 - So Simple.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/09 - Wake Up.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/08 - Dragon Days.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/07 - Diary.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/06 - If I Ain't Got You.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/05 - You Don't Know My Name.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/04 - Medley If I Was Your WomanWalk on By.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/03 - Heartburn.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/02 - Karma.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/01 - Harlem's Nocturne.mp3 +Apr 01 11:28 : update: removing Jazz/Weakness.mp3 +Apr 01 11:28 : update: removing Jazz/Off the Beaten Track.mp3 +Apr 01 11:28 : update: removing Jazz/With or Without.mp3 +Apr 01 11:28 : update: removing Jazz/Jus Say Hi ft Mangaliso asi.mp3 +Apr 01 11:28 : update: removing Jazz/Did You Ever.mp3 +Apr 01 11:28 : update: removing Jazz/soulchef.mp3 +Apr 01 11:28 : update: removing Jazz/SoulChef - Long Hot Summer (Full Album)-EG_OKio6fSE.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/08 - Really Don't Miss You.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/07 - A Love To Come Home To.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/06 - Sista.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/05 - Can't Stop Lovin' You.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/04 - Lock Down.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/03 - Unnecessary Trip.mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/02 - What I Wanna Do (winterlude).mp3 +Apr 01 11:28 : update: removing Jazz/V...As in Veronica (1995)/01 - Without Love.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/07 - He Thinks She Don't Know.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/06 - Wishing Well.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/05 - Do Ya.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/04 - Anything I Like.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/03 - We Funk to Quick.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/02 - Don't Sleep.mp3 +Apr 01 11:28 : update: removing Jazz/Smooth/Reality (1998)/01 - Strawberries.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/Michael Jackson - Don't Stop 'til You Get Enough.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/Michael jackson - Rock With You(classical slow).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/Michael Jackson - Off The Wall.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/Michael Jackson - I Can't Help It (Original Demo) (Audio HQ).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/Michael Jackson - Burn This Disco Out(multitrack Mix).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/17 Love Never Felt So Good.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/16 XSCAPE (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/15 Blue Gangsta (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/14 Do You Know Where Your Children Are (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/13 Slave to the Rhythm (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/12 A Place with No Name (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/11 Loving You (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/10 Chicago (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/09 Love Never Felt So Good (Original Version).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/08 XSCAPE.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/07 Blue Gangsta.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/06 Do You Know Where Your Children Are.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/05 Slave to the Rhythm.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/04 A Place with No Name.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/03 Loving You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/02 Chicago.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2014] XSCAPE (Deluxe)/01 Love Never Felt So Good.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/10 - Much To Soon.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/09 - Behind The Mask.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/08 - (I Can't Make It) Another Day (Featuring Lenny Kravitz).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/07 - Breaking News.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/06 - Best Of Joy.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/05 - Monster (Featuring 50 Cent).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/04 - (I Like) The Way You Love Me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/03 - Keep Your Head Up.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/02 - Hollywood Tonight.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2010] Michael/01 - Hold My Hand (Duet With Akon).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/16 - Threatened.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/15 - Whatever Happens.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/14 - The Lost Children.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/13 - Cry.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/12 - Don't Walk Away.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/11 - Privacy.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/10 - You Are My Life.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/09 - 2000 Watts.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/08 - Speechless.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/07 - Butterflies.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/06 - You Rock My World.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/05 - Heaven Can Wait.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/04 - Break of Dawn.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/03 - Invincible.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/02 - Heartbreaker.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[2001] Invincible/01 - Unbreakable.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/15 - Smile.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/14 - Little Susie.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/13 - History.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/12 - 2 Bad.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/11 - Tabloid Junkie.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/10 - Childhood.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/09 - You Are Not Alone.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/08 - Come Together.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/07 - Money.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/06 - D.S.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/05 - Earth Song.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/04 - This Time Around.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/03 - Stranger In Moscow.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/02 - They Don't Care About Us.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/01 - Scream.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/15 - Heal The World.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/14 - Wanna Be Startin' Somethin'.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/13 - Don't Stop 'Til You Get Enough.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/12 - Remember The Time.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/11 - The Girl Is Mine.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/10 - Beat It.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/09 - Thriller.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/08 - Man In The Mirror.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/07 - I Just Cant Stop Loving You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/06 - Bad.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/05 - She's Out Of My Life.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/04 - Rock With You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/03 - Black Or White.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/02 - The Way You Make Me Feel.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/01- Billie Jean.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/14 - Dangerous.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/13 - Gone Too Soon.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/12 - Keep The Faith.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/11 - Will You Be There.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/10 - Give In To Me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/09 - Who Is It.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/08 - Black Or White.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/07 - Heal The World.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/06 - Can't Let Her Get Away.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/05 - Remember The Time.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/04 - She Drives Me Wild.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/03 - In The Closet.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/02 - Why You Wanna Trip On Me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1991] Dangerous/01 - Jam.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/11 - Leave me alone.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/10 - Smooth Criminal.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/09 - Dirty Diana.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/08 - I just cant stop loving you.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/07 - Man in the Mirror.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/06 - Another Part of me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/05 - Just good Friends.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/04 - Liberian Girl.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/03 - Speed Demon.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/02 - The way you make me feel.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1987] Bad/01 - Bad.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/09 - The Lady In My Life.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/08 - P.Y.T. (Pretty Young Thing).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/07 - Human Nature.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/06 - Billie Jean.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/05 - Beat It.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/04 - Thriller.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/03 - The Girl Is Mine.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/02 - Baby Be Mine.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1982] Thriller/01 - Wanna Be Startin' Somethin'.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/10 - Burn This Disco Out.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/09 - It's The Falling In Love.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/08 - I Can't Help It.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/07 - She's Out Of My Life.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/06 - Girlfriend.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/05 - Off The Wall.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/04 - Get On The Floor.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/03 - Workin' Day And Night.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/02 - Rock With You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1979] Off The Wall/01 - Don't Stop 'Til You Get Enough.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/10 - I'll Come Home To You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/09 - Dear Michael.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/08 - Dapper-Dan.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/07 - You Are There.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/06 - Just A Little Bit Of You.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/05 - We've Got Forever.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/04 - Cinderella Stay Awhile.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/03 - One Day In Your Life.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/02 - Take Me Back.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1975] Forever, Michael/01 - We're Almost There.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/10 - Music and Me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/09 - Johnny Raven.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/08 - Morning Glow.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/07 - Euphoria.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/06 - Doggin' Around.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/05 - Too Young.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/04 - Happy (Love Theme from _Lady Si.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/03 - All the Things You Are.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/02 - Up Again.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1973] Music & Me/01 - With a Child's Heart.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/10 - You've Got a Friend.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/09 - Love Is Here and Now You're Gone.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/08 - Maria (You Were the Only One).mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/07 - Wings of My Love.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/06 - Rockin' Robin.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/05 - Got to Be There.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/04 - In Our Small Way.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/03 - Girl Don't Take Your Love from Me.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/02 - I Wanna Be Where You Are.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Got to Be There/01 - Ain't No Sunshine.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/10 - You Can Cry On My Shoulder.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/09 - Shoo Be Doo Be Doo Da Day.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/08 - In Our Small Way.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/07 - What Goes Around Comes Around.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/06 - My girl.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/05 - Everybody's Somebody's Fool.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/04 - We've Got A Good Thing Going.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/03 - People Make The World Go Round.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/02 - Greatest Show On Earth.mp3 +Apr 01 11:28 : update: removing Jazz/MichaelJackson/[1972] Ben/01 - Ben.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/10. Atlas Air.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/09. Saturday Come Slow fea. Damon Albarn.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/08. Rush Minute.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/07. Paradise Circus feat. Hope Sandoval.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/06. Flat Of The Blade feat. Guy Garvey.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/05. Psyche feat. Martina Topley-Bird.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/04. Girl I Love You feat. Horace Andy.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/03. Splitting The Atom feat. Horace Andy.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/02. Babel feat. Martina Topley-Bird.mp3 +Apr 01 11:28 : update: removing Jazz/Massive Attack - Heligoland/01. Pray For Rain feat. Tunde Adebimpe.mp3 +Apr 01 11:28 : update: removing Jazz/Kiff On - Nés Funky/04 - Miss.mp3 +Apr 01 11:28 : update: removing Jazz/Kiff On - Nés Funky/03 - Kung-Fu Funk.mp3 +Apr 01 11:28 : update: removing Jazz/Kiff On - Nés Funky/02 - N+® Funky.mp3 +Apr 01 11:28 : update: removing Jazz/Kiff On - Nés Funky/01 - La Kiffonisation est en marche.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/19. Healed.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/18. Wolves.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/17. Lay My Body Down.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/16. Your Way or the Rope.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/15. Life In Her Yet.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/14. Fade to Nothing.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/13. The Fire.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/12. Die Easy.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/11. As You Are.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/10. Arrow.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/09. Ego.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/08. Grace.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/07. Odetta.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/06. Love You Any Less.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/05. Be the Man.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/04. Bitter End.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/03. Skin.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/02. Innocent Man.mp3 +Apr 01 11:28 : update: removing Jazz/HUMAN DELUXE/01. Human.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Untitled (How Does It Feel)-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/The Root-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/The Line-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Spanish Joint-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Send It On-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Playa Playa-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/One Mo'Gin-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Left And Right-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Greatdayndamornin'-Booty-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Feel Like Makin' Love-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Devil's Pie-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Chicken Grease-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/D'Angelo Voodoo/Africa-audiotrack.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/14 I'm Gonna Love You Just a Little.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/13 It_s A Man_s Man_s Man_s World (w.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/12 Invisible Chains.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/11 Feeling Good.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/10 Bad Memory.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/09 Danger.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/08 Experiment on Me.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/07 Lonely Gun.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/06 Smile.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/05 Joke's on You.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/04 Sway With Me.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/03 Diamonds.mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/02 So Thick (feat. Baby Goth).mp3 +Apr 01 11:28 : update: removing Jazz/Birds of Prey The Album/01 Boss Bitch.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/22 ocean eyes (live).mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/21 COPYCAT.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/20 my boy.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/19 come out and play.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/18 idontwannabeyouanymore.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/17 xanny.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/16 &burn.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/15 Six Feet Under.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/14 bellyache.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/13 hostage.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/12 i love you.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/11 lovely.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/10 my strange addiction.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/09 ocean eyes.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/08 you should see me in a crown.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/07 when the party's over.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/06 all the good girls go to hell.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/05 bury a friend.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/04 bad guy.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/03 everything i wanted.mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/02 listen before i go (live).mp3 +Apr 01 11:28 : update: removing Jazz/Billie Eilish - Essentials/01 come out and play (live).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 16 - Pray For Forgiveness.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 15 - Through It All.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 14 - Empire State Of Mind (Part II) Broken Down.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 13 - How It Feels To Fly.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 12 - Distance And Time.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 11 - This Bed.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 10 - Put It In A Love Song ft. Beyonce.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 09 - Like The Sea.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 08 - Love Is My Disease.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 07 - Un-Thinkable (I'm Ready).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 06 - That's How Strong My Love Is.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 05 - Wait To You See Me Smile.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 04 - Try Sleeping With A Broken Heart.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 03 - Doesn't Mean Anything.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 02 - Love Is Blind.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 01 - Element Of Freedom (Intro).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/17. Alicia Keys - So Simple.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/16. Alicia Keys - Goodbye.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/15. Alicia Keys - Wake Up.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/14. Alicia Keys - Lesson Learned (featuring John Mayer).mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/13. Alicia Keys -Butterflyz.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/12. Alicia Keys - Dragon Days.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/11. Alicia Keys - The Thing About Love.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/10. Alicia Keys - Troubles.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/09. Alicia Keys - Nobody Not Really.mp3 +Apr 01 11:28 : update: removing Jazz/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/08. Alicia Keys - Stolen Moments.mp3 +Apr 01 11:28 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Apr 01 11:28 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 11:28 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 11:28 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 11:28 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/22 ocean eyes (live).mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/13 hostage.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/08 you should see me in a crown.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/12 i love you.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/02 listen before i go (live).mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/18 idontwannabeyouanymore.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/07 when the party's over.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/11 lovely.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/10 my strange addiction.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/03 everything i wanted.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/04 bad guy.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/20 my boy.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/17 xanny.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/14 bellyache.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/16 &burn.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/15 Six Feet Under.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/01 come out and play (live).mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/06 all the good girls go to hell.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/21 COPYCAT.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/09 ocean eyes.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/05 bury a friend.mp3 +Apr 01 11:28 : update: added Dance/Billie Eilish - Essentials/19 come out and play.mp3 +Apr 01 11:28 : update: added Dance/With or Without.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 05 - Wait To You See Me Smile.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 02 - Love Is Blind.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 06 - That's How Strong My Love Is.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 07 - Un-Thinkable (I'm Ready).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 15 - Through It All.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 13 - How It Feels To Fly.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 16 - Pray For Forgiveness.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 03 - Doesn't Mean Anything.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 14 - Empire State Of Mind (Part II) Broken Down.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 11 - This Bed.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 08 - Love Is My Disease.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 01 - Element Of Freedom (Intro).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 09 - Like The Sea.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 12 - Distance And Time.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 04 - Try Sleeping With A Broken Heart.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 10 - Put It In A Love Song ft. Beyonce.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/05. Alicia Keys - If I Was Your Woman-Walk On By.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/16. Alicia Keys - Goodbye.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/01. Alicia Keys - Go Ahead.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/11. Alicia Keys - The Thing About Love.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/15. Alicia Keys - Wake Up.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/09. Alicia Keys - Nobody Not Really.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/17. Alicia Keys - So Simple.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/13. Alicia Keys -Butterflyz.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/02. Alicia Keys - Heartburn.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/04. Alicia Keys - Tell You Something (Nana's Reprise).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/12. Alicia Keys - Dragon Days.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/07. Alicia Keys - I Need You.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/08. Alicia Keys - Stolen Moments.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/06. Alicia Keys - Lovin U.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/10. Alicia Keys - Troubles.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/18. Alicia Keys - Streets Of New York (City Life).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/14. Alicia Keys - Lesson Learned (featuring John Mayer).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/01. Alicia Keys - Teenage Love Affair.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/10. Alicia Keys - Where Do We Go From Here.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/12. Alicia Keys - Superwoman.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/05. Alicia Keys - Fallin.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/17. Alicia Keys - Every Little Bit Hurts.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/14. Alicia Keys - Karma.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/13. Alicia Keys - Girlfriend.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/09. Alicia Keys - You Don't Know My Name.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/06. Alicia Keys - Like You'll Never See Me Again.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/03. Alicia Keys - No One.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/08. Alicia Keys - A Woman's Worth.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/11. Alicia Keys - Diary (Feat. Tony! Toni! Tone'!).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/02. Alicia Keys - Gangsta Lovin'.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/16. Alicia Keys - How Come You Don't Call Me.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/07. Alicia Keys - Unbreakable.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/18. Alicia Keys - Someday We'll All Be Free.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/02 - Alicia Keys - Brand New Me.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/04 - Alicia Keys - Listen To Your Heart.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/05 - Alicia Keys - New Day.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/09 - Alicia Keys - Not Even The King.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/07 - Alicia Keys - Fire We Make (Ft. Maxwell).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/01 - Alicia Keys - Do Novo Adagio (Intro).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/11 - Alicia Keys - Limitedless.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/12 - Alicia Keys - One Thing.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/03 - Alicia Keys - When It's All Over.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/06 - Alicia Keys - Girl On Fire (Inferno Version)(Ft. Nicki Minaj).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/13 - Alicia Keys - 1 0 1.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/10 - Alicia Keys - That's When I Knew.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Girl On Fire (2012) (320)/08 - Alicia Keys - Tears Always Win.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/10 - So Simple.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/01 - Harlem's Nocturne.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/14 - Samsonite Man.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/11 - When You Really Love Someone.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/05 - You Don't Know My Name.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/02 - Karma.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/09 - Wake Up.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/08 - Dragon Days.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/07 - Diary.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/15 - Nobody Not Really (Interlude).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/13 - Slow Down.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/06 - If I Ain't Got You.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/12 - Feeling U, Feeling Me (Interlude).mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/03 - Heartburn.mp3 +Apr 01 11:28 : update: added Dance/Alicia Keys/Alicia Keys - Diary of Alicia Keys (2003) (mrsjs)/04 - Medley If I Was Your WomanWalk on By.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/10 - Burn This Disco Out.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/01 - Don't Stop 'Til You Get Enough.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/09 - It's The Falling In Love.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/03 - Workin' Day And Night.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/05 - Off The Wall.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/08 - I Can't Help It.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/02 - Rock With You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/04 - Get On The Floor.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/07 - She's Out Of My Life.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1979] Off The Wall/06 - Girlfriend.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/Michael jackson - Rock With You(classical slow).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/09 - The Lady In My Life.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/05 - Beat It.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/07 - Human Nature.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/01 - Wanna Be Startin' Somethin'.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/03 - The Girl Is Mine.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/04 - Thriller.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/08 - P.Y.T. (Pretty Young Thing).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/02 - Baby Be Mine.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1982] Thriller/06 - Billie Jean.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/02 - The way you make me feel.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/09 - Dirty Diana.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/05 - Just good Friends.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/11 - Leave me alone.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/07 - Man in the Mirror.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/03 - Speed Demon.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/10 - Smooth Criminal.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/04 - Liberian Girl.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/08 - I just cant stop loving you.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/01 - Bad.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1987] Bad/06 - Another Part of me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/Michael Jackson - Burn This Disco Out(multitrack Mix).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/09 - Johnny Raven.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/07 - Euphoria.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/08 - Morning Glow.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/02 - Up Again.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/01 - With a Child's Heart.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/03 - All the Things You Are.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/04 - Happy (Love Theme from _Lady Si.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/05 - Too Young.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/10 - Music and Me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1973] Music & Me/06 - Doggin' Around.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/09 - You Are Not Alone.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/15 - Smile.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/08 - Come Together.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/14 - Little Susie.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/05 - Earth Song.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/11 - Tabloid Junkie.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/04 - This Time Around.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/03 - Stranger In Moscow.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/13 - History.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/01 - Scream.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/12 - 2 Bad.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/06 - D.S.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/10 - Childhood.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/02 - They Don't Care About Us.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 2/07 - Money.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/05 - She's Out Of My Life.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/01- Billie Jean.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/11 - The Girl Is Mine.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/03 - Black Or White.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/07 - I Just Cant Stop Loving You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/10 - Beat It.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/08 - Man In The Mirror.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/15 - Heal The World.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/14 - Wanna Be Startin' Somethin'.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/06 - Bad.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/09 - Thriller.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/13 - Don't Stop 'Til You Get Enough.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/12 - Remember The Time.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/02 - The Way You Make Me Feel.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1995] HIStory Past, Present and Future Book I/CD 1/04 - Rock With You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/14 - Dangerous.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/06 - Can't Let Her Get Away.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/02 - Why You Wanna Trip On Me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/03 - In The Closet.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/01 - Jam.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/13 - Gone Too Soon.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/08 - Black Or White.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/07 - Heal The World.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/10 - Give In To Me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/09 - Who Is It.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/05 - Remember The Time.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/11 - Will You Be There.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/04 - She Drives Me Wild.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1991] Dangerous/12 - Keep The Faith.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/03 - Girl Don't Take Your Love from Me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/07 - Wings of My Love.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/10 - You've Got a Friend.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/05 - Got to Be There.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/08 - Maria (You Were the Only One).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/04 - In Our Small Way.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/06 - Rockin' Robin.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/09 - Love Is Here and Now You're Gone.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/01 - Ain't No Sunshine.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Got to Be There/02 - I Wanna Be Where You Are.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/Michael Jackson - Don't Stop 'til You Get Enough.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/Michael Jackson - I Can't Help It (Original Demo) (Audio HQ).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/08 - In Our Small Way.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/03 - People Make The World Go Round.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/02 - Greatest Show On Earth.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/04 - We've Got A Good Thing Going.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/01 - Ben.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/10 - You Can Cry On My Shoulder.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/07 - What Goes Around Comes Around.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/06 - My girl.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/05 - Everybody's Somebody's Fool.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1972] Ben/09 - Shoo Be Doo Be Doo Da Day.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/12 - Don't Walk Away.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/10 - You Are My Life.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/05 - Heaven Can Wait.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/09 - 2000 Watts.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/15 - Whatever Happens.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/01 - Unbreakable.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/16 - Threatened.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/14 - The Lost Children.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/03 - Invincible.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/02 - Heartbreaker.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/08 - Speechless.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/06 - You Rock My World.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/11 - Privacy.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/13 - Cry.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/07 - Butterflies.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2001] Invincible/04 - Break of Dawn.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/08 - (I Can't Make It) Another Day (Featuring Lenny Kravitz).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/04 - (I Like) The Way You Love Me.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/03 - Keep Your Head Up.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/07 - Breaking News.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/06 - Best Of Joy.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/09 - Behind The Mask.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/05 - Monster (Featuring 50 Cent).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/01 - Hold My Hand (Duet With Akon).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/10 - Much To Soon.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2010] Michael/02 - Hollywood Tonight.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/09 - Dear Michael.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/04 - Cinderella Stay Awhile.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/05 - We've Got Forever.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/02 - Take Me Back.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/06 - Just A Little Bit Of You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/07 - You Are There.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/08 - Dapper-Dan.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/01 - We're Almost There.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/03 - One Day In Your Life.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[1975] Forever, Michael/10 - I'll Come Home To You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/10 Chicago (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/16 XSCAPE (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/05 Slave to the Rhythm.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/13 Slave to the Rhythm (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/07 Blue Gangsta.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/02 Chicago.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/08 XSCAPE.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/12 A Place with No Name (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/11 Loving You (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/17 Love Never Felt So Good.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/14 Do You Know Where Your Children Are (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/03 Loving You.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/06 Do You Know Where Your Children Are.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/04 A Place with No Name.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/09 Love Never Felt So Good (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/15 Blue Gangsta (Original Version).mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/[2014] XSCAPE (Deluxe)/01 Love Never Felt So Good.mp3 +Apr 01 11:28 : update: added Dance/MichaelJackson/Michael Jackson - Off The Wall.mp3 +Apr 01 11:28 : update: added Dance/Kiff On - Nés Funky/04 - Miss.mp3 +Apr 01 11:28 : update: added Dance/Kiff On - Nés Funky/02 - N+® Funky.mp3 +Apr 01 11:28 : update: added Dance/Kiff On - Nés Funky/01 - La Kiffonisation est en marche.mp3 +Apr 01 11:28 : update: added Dance/Kiff On - Nés Funky/03 - Kung-Fu Funk.mp3 +Apr 01 11:28 : update: added Dance/Did You Ever.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/07 - A Love To Come Home To.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/05 - Can't Stop Lovin' You.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/08 - Really Don't Miss You.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/06 - Sista.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/02 - What I Wanna Do (winterlude).mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/01 - Without Love.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/04 - Lock Down.mp3 +Apr 01 11:28 : update: added Dance/V...As in Veronica (1995)/03 - Unnecessary Trip.mp3 +Apr 01 11:28 : update: added Dance/soulchef.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/06 Smile.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/04 Sway With Me.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/08 Experiment on Me.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/07 Lonely Gun.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/02 So Thick (feat. Baby Goth).mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/01 Boss Bitch.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/13 It_s A Man_s Man_s Man_s World (w.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/11 Feeling Good.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/09 Danger.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/05 Joke's on You.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/10 Bad Memory.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/12 Invisible Chains.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/14 I'm Gonna Love You Just a Little.mp3 +Apr 01 11:28 : update: added Dance/Birds of Prey The Album/03 Diamonds.mp3 +Apr 01 11:28 : update: added Dance/Off the Beaten Track.mp3 +Apr 01 11:28 : update: added Dance/Jus Say Hi ft Mangaliso asi.mp3 +Apr 01 11:28 : update: added Dance/SoulChef - Long Hot Summer (Full Album)-EG_OKio6fSE.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/02. Innocent Man.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/05. Be the Man.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/16. Your Way or the Rope.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/19. Healed.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/04. Bitter End.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/03. Skin.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/14. Fade to Nothing.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/13. The Fire.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/11. As You Are.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/09. Ego.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/17. Lay My Body Down.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/18. Wolves.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/06. Love You Any Less.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/01. Human.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/15. Life In Her Yet.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/07. Odetta.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/10. Arrow.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/12. Die Easy.mp3 +Apr 01 11:28 : update: added Dance/HUMAN DELUXE/08. Grace.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Greatdayndamornin'-Booty-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Untitled (How Does It Feel)-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Left And Right-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Devil's Pie-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/The Root-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Playa Playa-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Feel Like Makin' Love-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/One Mo'Gin-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Spanish Joint-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Africa-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Send It On-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/Chicken Grease-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/D'Angelo Voodoo/The Line-audiotrack.mp3 +Apr 01 11:28 : update: added Dance/Weakness.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/05 - Do Ya.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/06 - Wishing Well.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/02 - Don't Sleep.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/03 - We Funk to Quick.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/01 - Strawberries.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/07 - He Thinks She Don't Know.mp3 +Apr 01 11:28 : update: added Dance/Smooth/Reality (1998)/04 - Anything I Like.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/01. Pray For Rain feat. Tunde Adebimpe.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/06. Flat Of The Blade feat. Guy Garvey.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/05. Psyche feat. Martina Topley-Bird.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/04. Girl I Love You feat. Horace Andy.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/08. Rush Minute.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/07. Paradise Circus feat. Hope Sandoval.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/02. Babel feat. Martina Topley-Bird.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/10. Atlas Air.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/09. Saturday Come Slow fea. Damon Albarn.mp3 +Apr 01 11:28 : update: added Dance/Massive Attack - Heligoland/03. Splitting The Atom feat. Horace Andy.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Apr 01 11:28 : update: removing Dance/Jorja Smith - Lost & Found (2018) Mp3 (320 kbps) [Hunter]/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Apr 01 11:28 : update: added Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Apr 01 12:05 : update: removing Jazz/Cowboy Bebop Ultimate OST/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3 +Apr 01 12:05 : update: added HipHop/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3 +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 12:05 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 12:05 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 12:05 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:00 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:00 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:00 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +Apr 01 13:03 : update: added HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:03 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:03 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:03 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +Apr 01 13:33 : update: added HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +Apr 01 13:34 : update: removing HipHop/Beyond_the_Spectrum-_The_Creamy_Spy_Chronicles.zip/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 13:34 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 13:34 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 13:34 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 01 14:06 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Apr 01 14:06 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 01 14:06 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 01 14:06 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 01 14:06 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 01 14:06 : update: updating Misc/Warp20Speed20Fat20Loss.flv +Apr 01 14:07 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 01 14:09 : player: played "Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3" +Apr 01 14:12 : player: played "Jazz/COFFEE HOUSE SWINGER/07 Cup O' Tea.mp3" +Apr 01 14:14 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3" +Apr 01 16:46 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Apr 01 16:48 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3" +Apr 02 10:42 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 02 13:23 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 02 13:23 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 02 14:03 : player: played "HipHop/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3" +Apr 02 14:08 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3" +Apr 02 14:27 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3" +Apr 02 16:55 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Apr 03 01:31 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +Apr 03 11:26 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 03 11:26 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 01:16 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +Apr 04 11:41 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 11:41 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 15:37 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +Apr 04 15:39 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 15:39 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 15:46 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +Apr 04 15:46 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 04 15:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 05 19:31 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +Apr 06 10:39 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 06 11:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 06 11:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 06 11:55 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3" +Apr 06 12:01 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3" +Apr 06 12:08 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3" +Apr 06 12:12 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3" +Apr 06 12:16 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3" +Apr 06 12:21 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3" +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:38 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:38 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:38 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:39 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:39 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:39 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : update: updating HipHop/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3 +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:50 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:50 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:50 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : update: updating HipHop/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3 +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:51 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 06 12:51 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 06 12:51 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 06 12:52 : player: played "HipHop/Cowboy Bebop | Lofi Jazzhop Mix-audiotrack.mp3" +Apr 06 17:08 : player: played "Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(1) [Charles Mingus] Better Git In Your Soul.mp3" +Apr 06 17:09 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" +Apr 06 17:12 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3" +Apr 06 17:33 : player: played "HipHop/Rakim/Eric B. & Rakim - Musical Massacre.mp3" +Apr 06 17:37 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/12. Tread Water.mp3" +Apr 06 17:41 : player: played "HipHop/Rakim/Eric B. & Rakim - I Ain't No Joke.mp3" +Apr 06 17:45 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3" +Apr 06 17:48 : player: played "HipHop/Rakim/Eric B. & Rakim - Relax With Pep.mp3" +Apr 06 17:52 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/06. Me Myself And I (OBLAPOS MODE).mp3" +Apr 06 17:56 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/02. U Can Do (Life).mp3" +Apr 06 18:00 : player: played "HipHop/Rakim/artist - Guess who's back.mp3" +Apr 06 18:05 : player: played "HipHop/Eminem/Recovery/02. Talkin' 2 Myself - Eminem.mp3" +Apr 06 18:08 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/02. Eye Patch.mp3" +Apr 06 18:11 : player: played "HipHop/Rakim/artist - Heat it up.mp3" +Apr 06 18:15 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/07. Respect.mp3" +Apr 06 18:19 : player: played "HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/07. Sweet Dreams (Clean Version).mp3" +Apr 06 18:22 : player: played "HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/13. Big Brother Beat feat. Mos Def.mp3" +Apr 06 18:27 : player: played "HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3" +Apr 06 18:49 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/08. Beef.mp3" +Apr 07 10:14 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 10:35 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3" +Apr 07 10:37 : player: played "HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/07. Shwingalokate.mp3" +Apr 07 10:41 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/12. In The Woods.mp3" +Apr 07 10:45 : player: played "HipHop/BadBoysForLife/03. RITMO (Bad Boys For Life).mp3" +Apr 07 10:49 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/15. Stone Age.mp3" +Apr 07 10:53 : player: played "HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/08. He Comes.mp3" +Apr 07 10:53 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/02. Strickly Dan Stuckle.mp3" +Apr 07 11:01 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/14. Eye Know (The Know It All Mix).mp3" +Apr 07 11:04 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 04 - All Over Me.mp3" +Apr 07 11:07 : player: played "HipHop/Rakim/13 Still In Love.mp3" +Apr 07 11:11 : player: played "HipHop/Rakim/01. Rakim - Milk & Honey.mp3" +Apr 07 11:15 : player: played "HipHop/Rakim/artist - The saga begins.mp3" +Apr 07 11:19 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/17. Baby Phat (featuring Devin the Dude + E. Yummy Bingham).mp3" +Apr 07 11:22 : player: played "HipHop/BadBoysForLife/09. Murda She Wrote.mp3" +Apr 07 11:26 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/02. Say No Go.mp3" +Apr 07 11:31 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/18. Trying People.mp3" +Apr 07 12:54 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Apr 07 18:56 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3" +Apr 07 18:58 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 18:58 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 19:17 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 07 19:41 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3" +Apr 07 19:42 : player: played "HipHop/Rakim/Rakim - All Night Long.mp3" +Apr 07 19:46 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3" +Apr 07 19:51 : player: played "HipHop/Rakim/Rakim - All Night Long.mp3" +Apr 07 19:51 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/13. What if.mp3" +Apr 07 19:55 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/01. Eye Know.mp3" +Apr 08 00:19 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/15. Wasn't For You.mp3" +Apr 08 01:23 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 08 01:23 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 08 01:47 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/15. Wasn't For You.mp3" +Apr 08 10:38 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 08 10:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 08 11:00 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 08 11:04 : player: played "HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3" +Apr 08 11:07 : player: played "HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/07. Sweet Dreams (Clean Version).mp3" +Apr 08 11:12 : player: played "HipHop/Rakim/Rakim - I Know.mp3" +Apr 08 11:13 : player: played "Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(1) [Charles Mingus] Better Git In Your Soul.mp3" +Apr 08 11:13 : exception: Failed to play on "My Pulse Output" (pulse): suspended +Apr 08 11:13 : exception: Failed to play on "My Pulse Output" (pulse): suspended +Apr 08 11:13 : player: played "Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(2) [Charles Mingus] Fables Of Faubus.mp3" +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 5.mp3 +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 1.mp3 +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 6.mp3 +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 3.mp3 +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 4.mp3 +Apr 08 13:03 : update: added HipHop/Nujabes (feat. Shing02) Luv (Sic) Series Part 1-6 [320kbps]-CPT/Nujabes (feat. Shing02) Luv (Sic) Part 2.mp3 +Apr 08 13:12 : update: added HipHop/chill beats to quarantine to-audiotrack.mp3 +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:12 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:12 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:12 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:13 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:13 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:13 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : update: updating HipHop/chill beats to quarantine to-audiotrack.mp3 +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:14 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 08 13:14 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 08 13:14 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 08 13:17 : player: played "HipHop/chill beats to quarantine to-audiotrack.mp3" +Apr 08 13:19 : player: played "HipHop/chill beats to quarantine to-audiotrack.mp3" +Apr 08 13:24 : player: played "HipHop/chill beats to quarantine to-audiotrack.mp3" +Apr 08 16:38 : player: played "HipHop/chill beats to quarantine to-audiotrack.mp3" +Apr 08 18:14 : player: played "Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/05 One Note Samba.mp3" +Apr 08 18:26 : ffmpeg/aac: Could not update timestamps for skipped samples. +Apr 08 18:26 : player: played "Jazz/Straight No Chaser/03. Straight, No Chaser.mp3" +Apr 08 18:30 : player: played "Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/04 Ain't No Such Thing As Superman 1.m4a" +Apr 09 02:25 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 09 10:52 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 09 10:52 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 10 00:54 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 10 09:59 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 10 09:59 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Apr 11 00:43 : update: added Dance/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Apr 11 00:43 : update: removing Dance/Jorja Smith - Lost & Found/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/13 Lift Your Hands (Instrumental).mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/12 Surrounded (Instrumental).mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/11 Amazing Grace (Medley).mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/10 Today Lord.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/09 All Of Your Love.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/08 So Amazing.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/07 Keep On Praising Him.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/06 Adore You.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/05 Surrounded.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/04 Relax (Matt. 11_13).mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/03 Do Your Will.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/02 Lift Your Hands.mp3 +Apr 11 00:48 : update: removing Jazz/Juleea/Draw Me Lord/01 Draw Me Lord.mp3 +Apr 11 00:48 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Apr 11 00:48 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 11 00:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 11 00:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 11 00:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/12 Surrounded (Instrumental).mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/04 Relax (Matt. 11_13).mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/06 Adore You.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/09 All Of Your Love.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/08 So Amazing.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/13 Lift Your Hands (Instrumental).mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/03 Do Your Will.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/01 Draw Me Lord.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/07 Keep On Praising Him.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/11 Amazing Grace (Medley).mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/10 Today Lord.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/02 Lift Your Hands.mp3 +Apr 11 00:48 : update: added Gospel/Juleea/Draw Me Lord/05 Surrounded.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/04 Isaac Hayes - By The Time I Get To Phoenix.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/03 Isaac Hayes - One Woman.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/02 Isaac Hayes - Hyperbolicsyllablicsesquedalymistic.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/(1969)_Hot_Buttered_Soul/(1969) Hot Buttered Soul/01 Isaac Hayes - Walk On By.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/09 the end theme.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/07 Run fay run.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/06 Kidnapped.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/05 Hung up on my baby.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/04 Joe Bell.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/03 The red rooster.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/02 Randolph & Dearborn.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/01 Title theme.mp3 +Apr 11 00:49 : update: removing Jazz/Isaac Hayes/Isaac_Hayes_-_Three_Tough_Guys/Isaac Hayes - Three Tough Guys/08 Bun's o'plenty.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A1 Time Is On Your Side.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A2 They Don't See.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B4 Mom.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B3 I'd Rather Have You.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B2 Where Have All The Flowers Gone.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/B1 Remember The Children.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A4 Power.mp3 +Apr 11 00:50 : update: removing Jazz/Earth Wind & Fire/EWF-LDAT_1972/EWF-LDAT 1972/A3 Make It With You.mp3 +Apr 11 00:50 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Apr 11 00:50 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/EWF-70.zip +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/07 Bad Tune.mp3 +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/06 This World Today.mp3 +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/05 C'Mon Children.mp3 +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/04 Fan The Fire.mp3 +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/03 Love Is Life.mp3 +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/02 Moment Of Truth.mp3 +Apr 11 00:51 : exception: Failed to open ZIP file /home/archlinux/vgg/Music/Jazz/Earth Wind & Fire/The_Need_Of_Love-71.zip +Apr 11 00:51 : update: removing Jazz/Earth Wind & Fire/EW_F/Earth, Wind & Fire/01 Help Somebody.mp3 +Apr 11 01:08 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 11 10:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 11 10:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 11 16:14 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 11 16:32 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 11 17:12 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 11 17:12 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 12 02:33 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 12 11:49 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 12 11:49 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 13 00:12 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 13 11:53 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 13 11:53 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 13 12:06 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 13 12:09 : player: played "Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3" +Apr 13 12:15 : player: played "Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 02 - The Dude.mp3" +Apr 13 12:20 : player: played "Jazz/MilesDavies/Human Nature-Miles Davis.mp3" +Apr 13 12:23 : player: played "Jazz/Gill Scott-Heron/Pieces of a Man/09 Or Down You Fall.mp3" +Apr 13 12:27 : player: played "Jazz/Gill Scott-Heron/Bridges/09 95 South (All Of The Places We've Been).mp3" +Apr 13 12:29 : exception: Failed to play on "My Pulse Output" (pulse): disconnected +Apr 13 12:33 : player: played "Jazz/Gill Scott-Heron/It's Your World/02 Possum Slim.mp3" +Apr 13 12:34 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(03) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] All The Things You Are.flac" +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +Apr 13 12:47 : update: removing HipHop/Beyond the Spectrum- The Creamy Spy Chronicles/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +Apr 13 12:47 : update: added HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/06-guru-fine_and_free_feat._vivian_green-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/05-guru-connections_feat._kem-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/04-guru-look_to_the_sun_(solar)-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/03-guru-stand_up_feat._damian_marley-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/02-guru-state_of_clarity_feat._common_and_bob_james-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/01-guru-cuz_im_jazzy_feat._slum_village-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/16-guru-living_legend_feat._david_sanborn-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/15-guru-kissed_the_world_feat._caron_wheeler-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/14-guru-infinite_feat._blackalicous-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/13-guru-universal_struggle_feat._brownman-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/12-guru-follow_the_signs_feat._shelley_harland-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/11-guru-the_jazz_style_feat._omar-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/10-guru-fly_magnetic_feat._dionne_farris-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/09-guru-this_is_art_feat._ronny_laws-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/08-guru-international_feat._bobby_valentino-ftd.mp3 +Apr 13 12:48 : update: removing HipHop/Guru-Jazzmatazz_Vol._4 [2007]/07-guru-wait_on_me_feat._raheem_devaughn-ftd.mp3 +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/15 Doctrine Is Dangerous.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/14 Just Believe God.mp3 +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/13 She's Not Anointed.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/12 You Have A Generational Curse.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/11 God Heals Those Who Have Faith.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/10 That's The Devil.mp3 +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/09 You're Not Filled With The Holy Spirit If You Don't Speak In Tongues.mp3 +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/08 Speak It Into Existence.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/07 That Will Make You Sin.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/06 God Wants You To Be Rich.mp3 +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/05 I Have Peace About This Decision.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/04 I Feel The Spirit.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/03 This Is God's House.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/02 The Bible Is God's Rule Book.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/01 Don't Put Your Mouth On The Man Of God.mp3 +Apr 13 12:48 : update: removing HipHop/LiesMyPastorToldMeAudio/LiesMyPastorToldMeAudio/00 Introduction.mp3 +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/15 Doctrine Is Dangerous.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/07 That Will Make You Sin.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/12 You Have A Generational Curse.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/08 Speak It Into Existence.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/09 You're Not Filled With The Holy Spirit If You Don't Speak In Tongues.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/14 Just Believe God.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/04 I Feel The Spirit.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/10 That's The Devil.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/01 Don't Put Your Mouth On The Man Of God.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/03 This Is God's House.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/13 She's Not Anointed.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/02 The Bible Is God's Rule Book.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/00 Introduction.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/06 God Wants You To Be Rich.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/05 I Have Peace About This Decision.mp3 +Apr 13 12:48 : update: added Gospel/LiesMyPastorToldMeAudio/11 God Heals Those Who Have Faith.mp3 +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 12:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 13 12:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 13 12:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 13 15:47 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Apr 14 00:24 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/03 Art Pepper and the Hollywood All Stars - My Funny Valentine.mp3" +Apr 14 09:11 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 14 09:11 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 14 13:21 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 14 13:24 : player: played "Jazz/MilesDavies/Summertime-Miles Davis.mp3" +Apr 14 13:29 : player: played "Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/10 Washington D.C..mp3" +Apr 14 13:35 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/04 Bill Evans - My Foolish Heart.mp3" +Apr 14 18:42 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Apr 15 02:04 : player: played "Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3" +Apr 15 10:09 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 10:09 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 15:52 : player: played "Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3" +Apr 15 15:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 15:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 17:54 : player: played "Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3" +Apr 15 17:55 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 17:55 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 17:56 : player: played "Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3" +Apr 15 18:02 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 18:02 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 15 18:17 : player: played "Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3" +Apr 16 17:32 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 16 17:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 16 17:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 16 17:48 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/02 John Coltrane - Soul Eyes.mp3" +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:49 : exception: No such song +Apr 16 17:52 : player: played "HipHop/BadBoysForLife/01. Uptown II.mp3" +Apr 16 17:55 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/08. Jenifa Taught Me (Derwin's Revenge).mp3" +Apr 16 17:58 : player: played "HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/01. Intro.mp3" +Apr 16 18:02 : player: played "HipHop/Rakim/Rakim Watch This (Prod Domingo) (DotGotIt.com).mp3" +Apr 16 18:05 : player: played "HipHop/Rakim/artist - Uplift.mp3" +Apr 16 18:09 : player: played "Rock/Limp_Bizkit-Icon-2011-H3X/09-limp_bizkit-eat_you_alive.mp3" +Apr 16 18:13 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/07. A Roller Skating Jam Named 'Saturdays'.mp3" +Apr 16 18:18 : player: played "Rock/Limp_Bizkit-Icon-2011-H3X/06-limp_bizkit-take_a_look_around.mp3" +Apr 16 18:19 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/22. I Can Do Anything (Delacratic).mp3" +Apr 16 18:23 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_13_.Sucker_M.C.s.mp3" +Apr 16 18:26 : player: played "HipHop/Rakim/Eric B. & Rakim - Don't Sweat the Technique.mp3" +Apr 16 18:30 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/07. Ghetto Thang.mp3" +Apr 16 18:34 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/13. Ghetto Thang (Ghetto Ximer).mp3" +Apr 16 18:35 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/01. SPITKICKER.COM (Say R.).mp3" +Apr 16 18:39 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/17. U Don't Wanna B.D.S. (feat. Freddie Foxxx).mp3" +Apr 17 03:04 : player: played "HipHop/Rakim/classic_rmx[2].mp3" +Apr 17 10:22 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 17 10:22 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 17 11:26 : exception: No such directory +Apr 17 11:33 : exception: No such directory +Apr 17 11:36 : exception: No such directory +Apr 17 12:44 : exception: No such directory +Apr 17 12:45 : exception: No such directory +Apr 17 12:49 : exception: Playlist is too large +Apr 17 13:16 : exception: Playlist is too large +Apr 17 13:18 : exception: Playlist is too large +Apr 17 14:15 : exception: Playlist is too large +Apr 17 14:17 : exception: Playlist is too large +Apr 17 14:26 : exception: Playlist is too large +Apr 18 01:54 : player: played "HipHop/Rakim/classic_rmx[2].mp3" +Apr 22 15:10 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 22 15:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 22 15:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 22 15:12 : player: played "HipHop/Rakim/classic_rmx[2].mp3" +Apr 22 15:16 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/13. Ghetto Thang (Ghetto Ximer).mp3" +Apr 22 15:21 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/17. U Don't Wanna B.D.S. (feat. Freddie Foxxx).mp3" +Apr 22 15:22 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/01. Impossible Intro.mp3" +Apr 22 15:36 : player: played "HipHop/Rakim/Eric B. & Rakim - Musical Massacre.mp3" +Apr 22 15:41 : player: played "HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/03. Stay Away Ft. Pete Rock and Rob-O.mp3" +Apr 22 15:44 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/03. En Focus.mp3" +Apr 22 15:47 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_06_.Shame_On_A_Nigga.mp3" +Apr 22 15:52 : player: played "HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/11. The Bizness (Feat Common).mp3" +Apr 22 15:55 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3" +Apr 22 15:58 : player: played "HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/03. Trouble In The Water.mp3" +Apr 22 16:02 : player: played "HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/09. Days of Our Lives.mp3" +Apr 22 16:04 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/04. Skip To My Loop.mp3" +Apr 22 16:04 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/27. Skit 5.mp3" +Apr 22 16:08 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/15. Stone Age.mp3" +Apr 22 16:13 : player: played "HipHop/Rakim/04 Man Above ft. Tracey Horton.mp3" +Apr 22 16:15 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3" +Apr 22 16:21 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_10_.Triumph_(feat._Cappadonna).mp3" +Apr 22 16:25 : player: played "HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/15. Baby Phat.mp3" +Apr 22 16:28 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/16 - The Corner.mp3" +Apr 22 16:52 : player: played "HipHop/Rakim/artist - The mystery (who is God).mp3" +Apr 22 16:56 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/19. Pass The Plugs.mp3" +Apr 22 17:01 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_10_.Triumph_(feat._Cappadonna).mp3" +Apr 22 17:05 : player: played "HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/03. Much More.mp3" +Apr 22 21:04 : player: played "HipHop/Rakim/Rakim - It's the R.mp3" +Apr 23 14:21 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 14:21 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 14:23 : exception: Playlist is too large +Apr 23 14:24 : player: played "HipHop/Rakim/Rakim - It's the R.mp3" +Apr 23 14:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 14:24 : player: played "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p" +Apr 23 16:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 16:53 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 16:53 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 23 17:04 : player: played "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4fm_mf_p" +Apr 25 13:51 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 25 13:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:51 : exception: No such song +Apr 25 13:52 : player: played "HipHop/BadBoysForLife/01. Uptown II.mp3" +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:52 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:54 : exception: No such song +Apr 25 13:55 : player: played "HipHop/BadBoysForLife/01. Uptown II.mp3" +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Spaghetti Junction.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Stankonia (Stanklove) featuring Big Rube & Sleepy Brown.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Xplosion featuring B-Real.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /-.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Gasoline Dreams featuring Khujo Goode From Goode Mob.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Drinkin' Again (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Good Hair (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Humble Mumble featuring Erykah Badu.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /I'm Cool (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Pre-Nump (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /I'll Call Before I Come featuring Gangsta Boo & Eco.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Ms. Jackson.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Slum Beautiful featuring Cee-Lo Goode from Goode Mob.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /B.O.B..mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Cruisin' In The ATL (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Gangsta Sh't featuring Slimm Calhoun, C-Bone & T-Mo Goode from Goode Mob.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Snappin' & Trappin' featuring Killer Mike & J-Sweet.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /D.F. (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Toilet Tisha.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Red Velvet.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Lim & Cookie (Interlude).mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /So Fresh, So Clean.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /We Luv Deez Hoez featuring Back Bone & Big Gipp from Goode Mob.mp3 +Apr 25 13:55 : update: added HipHop/Outkast - Stankonia /Intro.mp3 +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/118-big_boi-last_call_(feat_slimm_calhoun_lil_jon_and_the_east_side_boyz_and_mello)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/101-big_boi-intro-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/213-andre_3000-pink_and_blue-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/102-big_boi-ghettomusick-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/112-big_boi-emac_(interlude)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/203-andre_3000-god_(interlude)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/217-andre_3000-my_favorite_things-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/117-big_boi-dboi_(interlude)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/201-andre_3000-the_love_below_(intro)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/207-andre_3000-prototype-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/204-andre_3000-happy_valentines_day-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/218-andre_3000-take_off_your_cool_(feat_norah_jones)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/119-big_boi-bowtie_(postlude)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/116-big_boi-reset_(feat_khujo_goodie_and_ceelo)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/216-andre_3000-draculas_wedding_(feat_kelis)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/208-andre_3000-she_lives_in_my_lap-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/212-andre_3000-behold_a_lady-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/209-andre_3000-hey_ya-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/113-big_boi-knowing-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/220-andre_3000-a_life_in_the_day_of_benjamin_andre-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/206-andre_3000-where_are_my_panties-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/215-andre_3000-shes_alive-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/109-big_boi-church-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/202-andre_3000-love_hater-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/219-andre_3000-vibrate-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/210-andre_3000-roses-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/205-andre_3000-spread-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/111-big_boi-tomb_of_the_boom_(feat_konkrete_big_gipp_and_ludacris)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/115-big_boi-interlude-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/106-big_boi-the_rooster-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/105-big_boi-the_way_you_move_(feat_sleepy_brown)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/107-big_boi-bust_(feat_killer_mike)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/114-big_boi-flip_flop_rock_(feat_killer_mike_and_jayz)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/103-big_boi-unhappy-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/104-big_boi-bowtie_(feat_sleepy_brown_and_jazze_pha)-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/211-andre_3000-good_day_good_sir-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/108-big_boi-war-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/214-andre_3000-love_in_war-rns.mp3 +Apr 25 13:55 : update: added HipHop/Outkast-Speakerboxxx-The_Love_Below-2CD-2003-RNS/110-big_boi-bamboo_(interlude)-rns.mp3 +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 13:55 : update: removing Jazz/MilesDavies/Time After Time-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Summertime-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Bye Bye Blackbird-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/It Ain't Necessarily So-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Once Upon A Summertime-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Concierto De Aranjuez-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/'Round Midnight-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/I Don't Wanna Be Kissed (By Anyone But You)-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/So What-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Jean Pierre-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Human Nature-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Shout-Miles Davis.mp3 +Apr 25 13:55 : update: removing Jazz/MilesDavies/Miles-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Time After Time-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Shout-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Human Nature-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Jean Pierre-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Once Upon A Summertime-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Bye Bye Blackbird-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Concierto De Aranjuez-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/I Don't Wanna Be Kissed (By Anyone But You)-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/So What-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Miles-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/'Round Midnight-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/It Ain't Necessarily So-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles/Summertime-Miles Davis.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/02-Freddie Freeloader.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/04-All Blues.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/08. Miles Davis - Summertime.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/10. Miles Davis - Ascenseur pour l'echafaud.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/06. Miles Davis - Bye Bye Blackbird.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/09. Miles Davis - Walking.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/01. Miles Davis - Whispering.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/07. Miles Davis - Bemsha Swing.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/03. Miles Davis - Solar.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/02. Miles Davis - Four.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/05. Miles Davis - Round Minight.mp3 +Apr 25 13:55 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/12. Miles Davis - All Blues.mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 13:55 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 13:55 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 13:55 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 13:55 : update: updating Misc/Warp20Speed20Fat20Loss.flv +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:55 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:56 : exception: No such song +Apr 25 13:58 : player: played "HipHop/BadBoysForLife/01. Uptown II.mp3" +Apr 25 13:59 : player: played "HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/15. Goodbyes.mp3" +Apr 25 14:05 : player: played "HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/09. Ego Trippin (Part 2).mp3" +Apr 25 14:10 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/04. Pease Porridge.mp3" +Apr 25 14:15 : player: played "HipHop/Rakim/artist - Remember that.mp3" +Apr 25 14:22 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/14. Eye Know (The Know It All Mix).mp3" +Apr 25 14:27 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/02. U Can Do (Life).mp3" +Apr 25 14:30 : player: played "HipHop/Rakim/12. Rakim - Man with a Gun.mp3" +Apr 25 14:35 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/09. All Good (feat. Chaka Khan).mp3" +Apr 25 14:39 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_11_.Gravel_Pit.mp3" +Apr 25 14:43 : player: played "HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/03. Supa Emcees.mp3" +Apr 25 14:44 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/01. Intro.mp3" +Apr 25 14:49 : player: played "Rock/Disturbed/Sickness/10 - Disturbed - Shout 2000 .mp3" +Apr 25 14:54 : player: played "Rock/Limp_Bizkit-Icon-2011-H3X/11-limp_bizkit-the_truth.mp3" +Apr 25 14:56 : player: played "HipHop/BadBoysForLife/05. Bad Moves.mp3" +Apr 25 15:01 : player: played "HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/11. The Bizness Ft Common.mp3" +Apr 25 15:04 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/08. Watch Out Ft. Jose 'Perico' Hernandez.mp3" +Apr 25 15:07 : exception: No such song +Apr 25 15:07 : exception: No such song +Apr 25 15:07 : exception: No such song +Apr 25 15:07 : exception: No such song +Apr 25 15:07 : exception: No such song +Apr 25 15:09 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/08. Watch Out Ft. Jose 'Perico' Hernandez.mp3" +Apr 25 16:43 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/08. Watch Out Ft. Jose 'Perico' Hernandez.mp3" +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/12 - Hey Baby.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/14 - Cheap Thrills.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/06 - Gimme The Light.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/13 - Crick Neck.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/11 - No Lie.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/07 - Haffi Get De Gal Ya (Hot Gal Today).mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/10 - Paradise.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/01 - Ever Blazin'.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/02 - We Be Burnin'.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/09 - Rockabye.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/04 - Like Glue.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/05 - Get Busy.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/03 - I'm Still In Love With You.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 2/08 - Deport Them.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/02 - Other Side of Love.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/13 - Never Gonna Be The Same.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/10 - So Fine.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/05 - Hold On.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/07 - Got 2 Luv U.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/03 - Touch The Sky.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/06 - She Doesn't Mind.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/14 - Temperature.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/09 - Press It Up.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/11 - Watch Them Roll.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/04 - How Deep Is Your Love.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/01 - Entertainment.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/12 - (When You Gonna) Give It Up To Me.mp3 +Apr 25 17:01 : update: added HipHop/Sean Paul - Singles Collection (2017) (by emi)/CD 1/08 - Hold My Hand.mp3 +Apr 25 18:19 : update: added Dance/E-Z Rollers - Walk this Land.mp3 +Apr 25 18:19 : update: added Dance/Jill Scott Soulful House Music Mix by JaBig.mp3 +Apr 25 18:19 : update: added Dance/Toxic.mp3 +Apr 25 18:19 : update: added Dance/Yummy.mp3 +Apr 25 18:19 : update: added Dance/Jorja Smith - The One.mp3 +Apr 25 18:19 : update: added Dance/Rendezvous At Two - Play With Me [Lyrics on screen].mp3 +Apr 25 18:19 : update: added Dance/De La Soul - Eye Know.mp3 +Apr 25 18:19 : update: added Dance/The Umbrella Academy Soundtrack _ S01E01 _ Phantom of the Opera Medley _ LINDSEY STIRLING .mp3 +Apr 25 18:23 : update: added Dance/black eyed peas - sexy (from the be cool movie), john travolta.mp3 +Apr 25 18:23 : player: played "HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3" +Apr 25 19:14 : player: played "Dance/Did You Ever.mp3" +Apr 25 19:18 : player: played "Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/15. Alicia Keys - Wreckless Love.mp3" +Apr 25 19:22 : player: played "Dance/Billie Eilish - Essentials/08 you should see me in a crown.mp3" +Apr 25 19:25 : player: played "Dance/Billie Eilish - Essentials/09 ocean eyes.mp3" +Apr 25 19:29 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3" +Apr 25 19:38 : player: played "HipHop/BadBoysForLife/07. Damn I Love Miami.mp3" +Apr 25 19:42 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3" +Apr 25 19:48 : player: played "Dance/Billie Eilish - Essentials/16 &burn.mp3" +Apr 25 19:56 : player: played "Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 05 - Wait To You See Me Smile.mp3" +Apr 25 20:03 : player: played "Dance/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3" +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +Apr 25 20:45 : update: added HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:45 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:45 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:45 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 20:45 : update: added /R&B SOUL - THE BEDROOM album vol 5.m4a +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:46 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:46 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:46 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 20:46 : update: added /R&B SOUL - THE BEDROOM album vol 5-audiotrack.mp3 +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:47 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:47 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:47 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 20:47 : update: updating /R&B SOUL - THE BEDROOM album vol 5-audiotrack.mp3 +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 20:48 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 20:48 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 20:48 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 20:48 : update: updating /R&B SOUL - THE BEDROOM album vol 5-audiotrack.mp3 +Apr 25 21:02 : update: removing R&B SOUL - THE BEDROOM album vol 5-audiotrack.mp3 +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 21:02 : update: removing R&B SOUL - THE BEDROOM album vol 5.m4a +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 193. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1220. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1105. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Apr 25 21:02 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Apr 25 21:02 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Apr 25 21:02 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Apr 25 21:04 : exception: Playlist already exists +Apr 25 21:05 : player: played "Dance/Weakness.mp3" +Apr 25 21:06 : player: played "Dance/De La Soul - Eye Know.mp3" +Apr 25 21:07 : exception: Playlist already exists +Apr 25 21:12 : exception: Playlist already exists +Apr 25 21:19 : exception: Playlist already exists +Apr 25 21:23 : player: played "Dance/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3" +Apr 25 22:08 : update: added Dance/Usher - Nice & Slow (Official Video).mp3 +Apr 25 22:09 : update: added Dance/Little Mix - Woman Like Me (Official Video) ft. Nicki Minaj.mp3 +Apr 25 22:09 : update: added Dance/Cardi B & Bruno Mars - Please Me (Official Audio).mp3 +Apr 25 22:10 : update: added Dance/STORMZY - OWN IT (feat. ED SHEERAN & BURNA BOY).mp3 +Apr 25 22:10 : exception: Playlist already exists +Apr 25 22:11 : player: played "Dance/Weakness.mp3" +Apr 25 22:26 : player: played "Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3" +Apr 25 22:29 : player: played "Dance/Birds of Prey The Album/13 It_s A Man_s Man_s Man_s World (w.mp3" +Apr 25 22:33 : player: played "Dance/STORMZY - OWN IT (feat. ED SHEERAN & BURNA BOY).mp3" +Apr 25 22:36 : player: played "Dance/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3" +Apr 25 22:41 : player: played "Dance/soulchef.mp3" +Apr 25 22:44 : player: played "Dance/Birds of Prey The Album/06 Smile.mp3" +Apr 25 22:49 : player: played "Dance/Off the Beaten Track.mp3" +Apr 25 22:51 : player: played "Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3" +Apr 25 22:56 : player: played "Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 03 - Doesn't Mean Anything.mp3" +Apr 25 23:00 : player: played "Dance/Jus Say Hi ft Mangaliso asi.mp3" +Apr 26 01:19 : player: played "Dance/Birds of Prey The Album/03 Diamonds.mp3" +Apr 26 17:07 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 26 17:07 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 27 01:57 : player: played "Dance/Birds of Prey The Album/03 Diamonds.mp3" +Apr 27 10:27 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 27 10:27 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 27 10:28 : player: played "Dance/Birds of Prey The Album/03 Diamonds.mp3" +Apr 27 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 27 13:32 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.flac" +Apr 27 13:40 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3" +Apr 27 13:49 : player: played "Jazz/Charles Mingus Mingus Ah Um/08 Pussy Cat Dues.mp3" +Apr 28 00:48 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3" +Apr 29 17:57 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 29 17:57 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 29 18:01 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3" +Apr 30 13:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 30 13:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 30 13:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Apr 30 13:26 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3" +Apr 30 14:52 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.flac" +May 01 10:08 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 01 10:08 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: No such song +May 01 10:09 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 01 10:09 : player: played "HipHop/BadBoysForLife/01. Uptown II.mp3" +May 01 10:15 : player: played "Rock/Disturbed/Sickness/1 - Disturbed - Voices .mp3" +May 01 10:16 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/22. I Can Do Anything (Delacratic).mp3" +May 01 10:21 : player: played "HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/11. Itz Soweezee (Hot) (De La Remix).mp3" +May 01 10:21 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/27. Skit 5.mp3" +May 01 10:25 : player: played "HipHop/Rakim/Rakim - Strong Island.mp3" +May 01 10:29 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/13. Afro Connections At A Hi 5 (In The Eye Of The Hoodlum).mp3" +May 01 10:34 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/11. I Am I Be.mp3" +May 01 10:38 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3" +May 01 10:42 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 08 - I Am.mp3" +May 01 10:45 : player: played "HipHop/Rakim/Eric B. & Rakim - Kick Along.mp3" +May 01 10:49 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/20. Me Myself And I.mp3" +May 01 10:51 : player: played "HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/08. Baby Baby Baby Baby Ooh Baby.mp3" +May 01 10:55 : player: played "HipHop/Rakim/Eric B. & Rakim - Let the Rhythm Hit 'Em.mp3" +May 01 10:58 : player: played "HipHop/BadBoysForLife/04. Future Bright.mp3" +May 01 10:58 : player: played "HipHop/Rakim/Eric B. & Rakim - Microphone Fiend.mp3" +May 01 11:03 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/14. Say No Go.mp3" +May 01 11:03 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/01. Intro.mp3" +May 01 11:08 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/21. Ring Ring Ring (Ha Ha Hey).mp3" +May 01 11:12 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/12. Simply.mp3" +May 01 11:16 : player: played "HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_12_.Protect_Ya_Neck_(The_Jump_Off).mp3" +May 01 11:17 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/10. Skit 2.mp3" +May 01 11:21 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 01 11:21 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 01 11:21 : player: played "HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/08 - International (ft. Bobby Valentino).mp3" +May 01 11:21 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 01 11:21 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 01 11:21 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 01 11:21 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 01 11:24 : player: played "HipHop/BadBoysForLife/09. Murda She Wrote.mp3" +May 01 11:28 : player: played "HipHop/Eminem/Recovery/03. On Fire - Eminem.mp3" +May 01 11:32 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/13. Watch Out.mp3" +May 01 14:41 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +May 02 01:29 : player: played "HipHop/Eminem/Recovery/14. Almost Famous - Eminem.mp3" +May 04 09:59 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 09:59 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 10:08 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 10:11 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3" +May 04 10:14 : player: played "HipHop/BadBoysForLife/08. The Hottest.mp3" +May 04 10:20 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3" +May 04 10:28 : player: played "HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/03. My Writes (feat. Tash & J-Ro of Tha Liks and Xzibit).mp3" +May 04 10:32 : player: played "HipHop/Eminem/Recovery/04. Won't Back Down ft. Pink - Eminem.mp3" +May 04 10:35 : player: played "HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/02. Bionix.mp3" +May 04 10:40 : player: played "HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3" +May 04 10:43 : player: played "HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/02. Verbal Clap.mp3" +May 04 10:45 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/07. Ain't Hip To Be Labeled A Hippie.mp3" +May 04 10:50 : player: played "HipHop/Eminem/Recovery/16. You're Never Over - Eminem.mp3" +May 04 10:55 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/13. Breakadawn.mp3" +May 04 11:00 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +May 04 11:00 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3': No such file or directory +May 04 11:00 : player: played "HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/07. It's Like That.mp3" +May 04 11:00 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3" +May 04 11:00 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +May 04 11:00 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3': No such file or directory +May 04 11:00 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3" +May 04 11:03 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 06 - Pity.mp3" +May 04 11:10 : player: played "Rock/Disturbed/Sickness/1 - Disturbed - Voices .mp3" +May 04 11:13 : player: played "Rock/Disturbed/Sickness/2 - Disturbed - The Game .mp3" +May 04 11:18 : player: played "Rock/Disturbed/Sickness/3 - Disturbed - Stupify .mp3" +May 04 11:23 : player: played "Rock/Disturbed/Sickness/4 - Disturbed - Down With The Sickness .mp3" +May 04 11:26 : player: played "Rock/Disturbed/Sickness/5 - Disturbed - Violence Fetish .mp3" +May 04 11:29 : player: played "Rock/Disturbed/Sickness/6 - Disturbed - Fear .mp3" +May 04 11:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 11:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 11:45 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 04 11:46 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +May 04 11:48 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 01 - Sinner.mp3" +May 04 11:52 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3" +May 04 11:56 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3" +May 04 11:59 : player: played "Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 04 - All Over Me.mp3" +May 04 12:10 : player: played "HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3" +May 04 12:15 : player: played "HipHop/Eminem/Recovery/02. Talkin' 2 Myself - Eminem.mp3" +May 04 12:18 : player: played "HipHop/Eminem/Recovery/03. On Fire - Eminem.mp3" +May 04 12:23 : player: played "HipHop/Eminem/Recovery/04. Won't Back Down ft. Pink - Eminem.mp3" +May 04 12:27 : player: played "HipHop/Eminem/Recovery/05. W.T.P. - Eminem.mp3" +May 04 12:32 : player: played "HipHop/Eminem/Recovery/06. Going Through Changes - Eminem.mp3" +May 04 12:36 : player: played "HipHop/Eminem/Recovery/07. Not Afraid - Eminem.mp3" +May 04 12:40 : player: played "HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3" +May 04 12:45 : player: played "HipHop/Eminem/Recovery/09. No Love ft. Lil Wayne - Eminem.mp3" +May 04 12:50 : player: played "HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3" +May 04 12:55 : player: played "HipHop/Eminem/Recovery/11. Cinderella Man - Eminem.mp3" +May 04 12:59 : player: played "HipHop/Eminem/Recovery/12. 25 To Life - Eminem.mp3" +May 04 13:04 : player: played "HipHop/Eminem/Recovery/13. So Bad - Eminem.mp3" +May 04 13:09 : player: played "HipHop/Eminem/Recovery/14. Almost Famous - Eminem.mp3" +May 04 13:13 : player: played "HipHop/Eminem/Recovery/15. Love The Way You Lie ft. Rihanna - Eminem.mp3" +May 04 13:18 : player: played "HipHop/Eminem/Recovery/16. You're Never Over - Eminem.mp3" +May 04 13:22 : player: played "HipHop/Eminem/Recovery/17. Untitled - Eminem.mp3" +May 04 23:51 : player: played "HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3" +May 05 10:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 05 10:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 05 10:48 : player: played "HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3" +May 05 10:49 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3 +May 05 10:49 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3': No such file or directory +May 05 10:49 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3': No such file or directory +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3': No such file or directory +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3" +May 05 10:50 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3 +May 05 10:50 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3': No such file or directory +May 05 10:50 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3" +May 05 10:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 05 10:51 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3" +May 05 10:54 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3" +May 05 10:57 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3" +May 05 11:02 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3" +May 05 11:07 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3" +May 05 11:12 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3" +May 05 11:16 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3" +May 05 11:21 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3" +May 05 11:26 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3" +May 05 11:31 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3" +May 05 11:36 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3" +May 05 11:40 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3" +May 05 11:45 : player: played "HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3" +May 14 21:49 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 15 10:30 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 15 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 15 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 15 10:34 : player: played "Rock/Disturbed/Sickness/1 - Disturbed - Voices .mp3" +May 15 10:38 : player: played "Rock/Disturbed/Sickness/2 - Disturbed - The Game .mp3" +May 15 10:43 : player: played "HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/06. Ring Ring Ring (Ha Ha Hey).mp3" +May 15 10:46 : exception: Failed to play on "My Pulse Output" (pulse): suspended +May 15 10:48 : player: played "Rock/Disturbed/Sickness/4 - Disturbed - Down With The Sickness .mp3" +May 15 10:50 : player: played "HipHop/Rakim/Rakim-05-Tryin_Ta_Write_Rhymes-gtp.mp3" +May 15 10:51 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/11. A Little Bit Of Soap.mp3" +May 15 10:58 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/14. Eye Know (The Know It All Mix).mp3" +May 15 11:02 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/11. What the fx@k #2.mp3" +May 15 11:06 : player: played "HipHop/Rakim/Rakim - Strong Island.mp3" +May 15 11:10 : player: played "HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/10. Betta Listen.mp3" +May 15 11:15 : player: played "HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3" +May 15 11:15 : player: played "HipHop/De La Soul/studio/1991 - De La Soul Is Dead/05. Skit 1.mp3" +May 15 11:18 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/11. The Mack Daddy On The Left.mp3" +May 15 11:21 : player: played "HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/02 - State of Clarity (ft. Common & Bob James).mp3" +May 15 11:25 : player: played "HipHop/Rakim/Eric B. & Rakim - Relax With Pep.mp3" +May 15 11:28 : player: played "HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/14. Relax.mp3" +May 15 11:31 : player: played "HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/06. Jenifa Taught Me (Derwin's Revenge).mp3" +May 15 11:34 : player: played "HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/09. Long Island Degrees.mp3" +May 15 11:37 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 15 11:37 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 15 11:37 : player: played "HipHop/De La Soul/studio/1993 - Buhloone Mindstate/09. 3 Days Later.mp3" +May 15 11:37 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 15 11:37 : exception: Failed to decode /home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +May 15 11:37 : exception: nested: Failed to open '/home/archlinux/vgg/Music/HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3': No such file or directory +May 15 11:37 : player: played "HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3" +May 15 11:41 : player: played "HipHop/Rakim/01. Rakim - Milk & Honey.mp3" +May 15 11:46 : player: played "HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3" +May 15 12:15 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +May 15 19:06 : player: played "HipHop/Rakim/Rakim - I Know.mp3" +May 26 12:56 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 26 12:56 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 26 12:56 : player: played "HipHop/Rakim/Rakim - I Know.mp3" +May 31 15:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +May 31 15:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 15 13:26 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 15 13:26 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 15 16:59 : player: played "HipHop/Rakim/Rakim - I Know.mp3" +Jun 29 09:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 29 09:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 29 09:32 : player: played "HipHop/Rakim/Rakim - I Know.mp3" +Jun 29 09:33 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jun 29 09:33 : player: played "http://media-ice.musicradio.com/ClassicFMMP3" +Jun 29 09:40 : player: played "Jazz/Charles Mingus Mingus Ah Um/10 Pedal Point Blues.mp3" +Jun 29 09:44 : player: played "Jazz/MilesDavies/Miles/Time After Time-Miles Davis.mp3" +Jun 29 09:50 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/05 Frank Morgan - Mood Indigo.mp3" +Jun 29 09:58 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/06 Sonny Rollins - For All We Know.mp3" +Jun 29 10:01 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3 +Jun 29 10:01 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3': No such file or directory +Jun 29 10:02 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.flac" +Jun 29 10:02 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3" +Jun 29 10:02 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3 +Jun 29 10:02 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3': No such file or directory +Jun 29 10:02 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3" +Jun 29 10:04 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3" +Jun 29 10:25 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.flac" +Jun 29 10:30 : player: played "Jazz/MilesDavies/Miles/Human Nature-Miles Davis.mp3" +Jun 29 10:34 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(07) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Embraceable You.mp3" +Jun 29 10:37 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3 +Jun 29 10:37 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3': No such file or directory +Jun 29 10:37 : player: played "Jazz/Etta James - Stormy Weather-audiotrack.mp3" +Jun 29 10:37 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3" +Jun 29 10:37 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3 +Jun 29 10:37 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3': No such file or directory +Jun 29 10:37 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3" +Jun 29 10:45 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(02) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Salt Peanuts.mp3" +Jun 29 10:50 : player: played "Jazz/Charles Mingus Mingus Ah Um/03 Boogie Stop Shuffle.mp3" +Jun 29 12:51 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.mp3" +Jun 29 12:59 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(01) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Perdido.mp3" +Jun 29 13:05 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3 +Jun 29 13:05 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3': No such file or directory +Jun 29 13:05 : player: played "Jazz/Charles Mingus Mingus Ah Um/06 Bird Calls.mp3" +Jun 29 13:05 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3" +Jun 29 13:05 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3 +Jun 29 13:05 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3': No such file or directory +Jun 29 13:05 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3" +Jun 29 13:11 : player: played "Jazz/MilesDavies/Miles/'Round Midnight-Miles Davis.mp3" +Jun 29 13:15 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.mp3" +Jun 29 14:15 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.mp3" +Jun 29 14:18 : player: played "Jazz/MilesDavies/Miles/Jean Pierre-Miles Davis.mp3" +Jun 29 14:22 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.flac" +Jun 29 14:24 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.flac" +Jun 29 14:27 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3 +Jun 29 14:27 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3': No such file or directory +Jun 29 14:27 : player: played "Jazz/Dark Sacred Night - The Music Of Harry Bosch/08 Art Pepper- Straight life.mp3" +Jun 29 14:27 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3" +Jun 29 14:27 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3 +Jun 29 14:27 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3': No such file or directory +Jun 29 14:27 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3" +Jun 29 14:27 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/02. Miles Davis - Four.mp3 +Jun 29 14:27 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/02. Miles Davis - Four.mp3': No such file or directory +Jun 29 14:27 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/02. Miles Davis - Four.mp3" +Jun 29 14:27 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/01. Miles Davis - Whispering.mp3 +Jun 29 14:27 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/01. Miles Davis - Whispering.mp3': No such file or directory +Jun 29 14:27 : player: played "Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/01. Miles Davis - Whispering.mp3" +Jun 29 14:27 : exception: Failed to decode /home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3 +Jun 29 14:27 : exception: nested: Failed to open '/home/archlinux/vgg/Music/Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3': No such file or directory +Jun 29 14:27 : player: played "Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3" +Jun 29 14:34 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(06) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] A Night In Tunisia.mp3" +Jun 29 14:50 : player: played "Jazz/MilesDavies/Miles/Concierto De Aranjuez-Miles Davis.mp3" +Jun 29 15:04 : player: played "Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(11) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Lullaby Of Birdland.mp3" +Jul 04 11:00 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 08 21:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 10 14:03 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 11 08:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 11 18:36 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 12 09:11 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 12 11:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 14 08:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 14 10:41 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 17 09:55 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 18 08:55 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 18 09:45 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 18 11:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 18 11:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 18 11:26 : player: played "Misc/Shakespeare - Richard III/Shakespeare - Richard III (1982 BBC)/Richard III Act I.mp3" +Jul 18 12:10 : player: played "Classical/Classics Collection/04 - Vavaldi - The Four Seasons.mp3" +Jul 18 12:19 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - II Adagio, Symphony No. 4 in Bb Major.mp3" +Jul 18 13:18 : exception: Failed to pause "My Pulse Output" (pulse): failed to connect the stream: Connection terminated +Jul 19 00:39 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 19 09:37 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 19 09:37 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 19 10:20 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 19 10:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 19 10:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 00:32 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 08:15 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 08:15 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 08:24 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 08:34 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 08:34 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 12:26 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 13:02 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 13:02 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 13:17 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 13:19 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 13:19 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 21:18 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 21:20 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 21:20 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 22:39 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 22:39 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 22:43 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 20 22:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 20 22:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 01:00 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 21 08:22 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 08:22 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 10:04 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 21 10:37 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 10:37 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 19:22 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 21 19:27 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 19:27 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 20:14 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 21 20:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 20:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 20:58 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 21 21:26 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 21 21:26 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 22 01:54 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 22 10:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 22 10:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 22 12:57 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 22 18:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 22 18:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 22 20:00 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 23 00:43 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 00:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 01:31 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 23 09:43 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 09:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 10:00 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 23 16:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 16:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 18:28 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 23 18:36 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 18:36 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 21:14 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 23 21:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 23 21:16 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 24 00:56 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 24 08:46 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 24 08:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 25 01:33 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 25 08:19 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 25 08:19 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 25 08:46 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 25 08:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 25 08:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 00:33 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 26 09:14 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 09:14 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 10:06 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 26 10:46 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 10:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 18:41 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 26 18:45 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 18:45 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 21:12 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 26 21:13 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 26 21:13 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 01:38 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 27 10:03 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 10:03 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 10:15 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 27 10:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 10:16 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 13:37 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 27 13:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 27 13:47 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 01:23 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 28 08:05 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 08:05 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 08:08 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 28 08:10 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 08:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 11:24 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 28 11:26 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 11:26 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 18:59 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 28 19:01 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 19:01 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 21:14 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 28 21:17 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 28 21:17 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 01:52 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 29 09:32 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 09:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 09:38 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 29 09:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 09:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 09:53 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 29 09:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 09:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 10:35 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 29 10:42 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 10:42 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 21:13 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 29 21:15 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 29 21:15 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 01:23 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 30 08:04 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 08:04 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 08:04 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 30 08:05 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 08:05 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 08:10 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 30 08:11 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 08:11 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 16:49 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 30 16:52 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 30 16:52 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 31 01:49 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 31 08:53 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 31 08:53 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 31 21:41 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Jul 31 21:43 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Jul 31 21:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 01 02:27 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 01 08:36 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 01 08:36 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/04 - Quick Trick.mp3 +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/02 - Close Your Eyes.mp3 +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/06 - Just Coolin'.mp3 +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/03 - Jimerick.mp3 +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/01 - Hipsippy Blues.mp3 +Aug 01 14:09 : update: added Jazz/Art Blakey And The Jazz Messengers - Just Coolin' (2020)/05 - M&M.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/05 - It’s About That Time.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/03 - What I Say.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/01 - Directions.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/08 - Sanctuary (reprise).mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/07 - Funky Tonk.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/04 - Sanctuary.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/06 - Yesternow.mp3 +Aug 01 14:09 : update: added Jazz/Miles Davis - The Lost Septet (2020)/02 - Honky Tonk.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/08 - Sanctuary (reprise).mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/07 - Funky Tonk.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/06 - Yesternow.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/05 - It’s About That Time.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/04 - Sanctuary.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/03 - What I Say.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/02 - Honky Tonk.mp3 +Aug 01 14:10 : update: removing Jazz/Miles Davis - The Lost Septet (2020)/01 - Directions.mp3 +Aug 01 14:10 : update: added Jazz/03. Stevie Wonder - Higher Ground.mp3 +Aug 01 14:10 : update: added Jazz/16. Oscar Peterson - There Will Never Be Another You.mp3 +Aug 01 14:10 : update: added Jazz/01. James Brown - Papa's Got A Brand New Bag (Pts.1 & 2 _ Single Version).mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/12. Miles Davis - All Blues.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/11. Miles Davis - So What.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/10. Miles Davis - Ascenseur pour l'echafaud.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/09. Miles Davis - Walking.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/08. Miles Davis - Summertime.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/07. Miles Davis - Bemsha Swing.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/06. Miles Davis - Bye Bye Blackbird.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/05. Miles Davis - Round Minight.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/04. Miles Davis - Bag's Groove.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/03. Miles Davis - Solar.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/02. Miles Davis - Four.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works (2019)/01. Miles Davis - Whispering.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/05-Flamenco Sketches.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/04-All Blues.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/03-Blue in Green.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/02-Freddie Freeloader.mp3 +Aug 01 14:10 : update: removing Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959) (2013) (320)/01-So What.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/08. Miles Davis - Summertime.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/10. Miles Davis - Ascenseur pour l'echafaud.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/06. Miles Davis - Bye Bye Blackbird.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/09. Miles Davis - Walking.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/01. Miles Davis - Whispering.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/07. Miles Davis - Bemsha Swing.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/03. Miles Davis - Solar.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/11. Miles Davis - So What.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/04. Miles Davis - Bag's Groove.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/02. Miles Davis - Four.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/05. Miles Davis - Round Minight.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - 1951-1959 The Essential Works/12. Miles Davis - All Blues.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/12 Tadd's Delight.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/08 Budo.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/03 Ah-Leu-Cha (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/09 Dear Old Stockholm.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/02 Two Bass Hit.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/01 Two Bass Hit (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/04 Ah-Leu-Cha.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/13 Tadd's Delight (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/07 Budo (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/11 Bye Bye Blackbird.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/06 Little Melonae.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/10 Bye Bye Blackbird (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD1/05 Ah-Leu-Cha (take 5).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD6/04 Straight, No Chaser.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD6/03 My Funny Valentine.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD6/02 Oleo.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD6/01 If I Were a Bell.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/10 Two Bass Hit (Alt Take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/13 Straight, No Chaser (Alt Take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/01 Dear Old Stockholm (Alt Take).mp3 +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1026. +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/07 Sweet Sue, Just You.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/11 Two Bass Hit.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/12 Billy Boy (Trio Only).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/04 Sweet Sue, Just You (First Version).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/03 All Of You.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/05 Sweet Sue, Just You (False Start).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/02 All Of You (Alt Take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/08 Miles Davis Comments.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD2/06 Sweet Sue, Just You (Alt Take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/04 So What.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/08 Flamenco Sketches [take 2].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/07 [Miles Davis comments].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/09 All Blues.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/06 Flamenco Sketches [alt take].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/05 Blue in Green.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/01 Love for Sale.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/03 Freddie Freeloader.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD4/02 Freddie Freeloader [false start].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/08 Fran-Dance (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/07 On Green Dolphin Street.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/02 Milestones (alt take).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/01 Straight, No Chaser.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/06 Dr. Jackle.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/04 Sid's Ahead.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/10 Stella by Starlight.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/09 Fran (dance).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/03 Milestones.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD3/05 Little Melonae.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/02 Teo.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/07 Two Bass Hit.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/06 fra- La Varsovienne].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/04 Ah-Leu-Cha.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/08 Bye Bye Blackbird.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/03 [introduction, by Willis Conover].mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/05 Straight, No Chaser.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/09 The Theme- Miles' Theme.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis & John Coltrane - The Complete Columbia Recordings 1955-1961/CD5/01 Someday My Prince Will Come.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/05 - It’s About That Time.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/03 - What I Say.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/01 - Directions.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/08 - Sanctuary (reprise).mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/07 - Funky Tonk.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/04 - Sanctuary.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/06 - Yesternow.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - The Lost Septet (2020)/02 - Honky Tonk.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959)/01-So What.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959)/03-Blue in Green.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959)/02-Freddie Freeloader.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959)/04-All Blues.mp3 +Aug 01 14:10 : update: added Jazz/MilesDavies/Miles Davis - Kind Of Blue (1959)/05-Flamenco Sketches.mp3 +Aug 01 14:10 : update: added Jazz/03. Herbie Hancock - Cantaloupe Island.mp3 +Aug 01 14:10 : update: added Jazz/17. James Brown - Soul Power.mp3 +Aug 01 14:10 : update: added Jazz/20. Roy Ayers - Running Away.mp3 +Aug 01 14:10 : update: added Jazz/16. Cameo - Word Up.mp3 +Aug 01 14:10 : update: added Jazz/12. Barry White - What A Groove.mp3 +Aug 01 14:10 : update: added Jazz/25. Jackson 5 - Dancing Machine (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/19. John Coltrane - My One And Only Love.mp3 +Aug 01 14:10 : update: added Jazz/Leon Haywood - I Wanna Do Something Freaky To You (1975)-audiotrack.mp3 +Aug 01 14:10 : update: added Jazz/21. McCoy Tyner - When Sunny Gets Blue.mp3 +Aug 01 14:10 : update: added Jazz/14. Kool & The Gang - Good Time Tonight.mp3 +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 1026. +Aug 01 14:10 : update: added Jazz/02. Commodores - Brick House.mp3 +Aug 01 14:10 : update: added Jazz/29. L.T.D. - (Every Time I Turn Around) Back In Love Again.mp3 +Aug 01 14:10 : update: added Jazz/04. Marvin Gaye - Got To Give It Up (Pt. 1).mp3 +Aug 01 14:10 : update: added Jazz/09. Donald Byrd - Cristo Redentor (Remastered).mp3 +Aug 01 14:10 : update: added Jazz/05. Stan Getz - A Nightingale Sang In Berkeley Square.mp3 +Aug 01 14:10 : update: added Jazz/15. Stevie Wonder - Superstition.mp3 +Aug 01 14:10 : update: added Jazz/26. The Brothers Johnson - Stomp! (Single Version).mp3 +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Note: Illegal Audio-MPEG-Header 0x00000000 at offset 4092. +Note: Trying to resync... +Note: Hit end of (available) data during resync. +Aug 01 14:10 : mpg123: mpg123_getformat() failed: Message: I am done with this track. +Aug 01 14:10 : ffmpeg/mp3: Format mp3 detected only with low score of 1, misdetection possible! +Aug 01 14:10 : ffmpeg/mp3: Failed to read frame size: Could not seek to 5119. +Aug 01 14:10 : update: added Jazz/15. Oscar Peterson - Georgia On My Mind.mp3 +Aug 01 14:10 : update: added Jazz/17. Chet Baker - These Foolish Things Remind Me Of You (Instrumental).mp3 +Aug 01 14:10 : update: added Jazz/11. The Bar-Kays - Shake Your Rump To The Funk (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/07. John Coltrane - Ruby, My Dear.mp3 +Aug 01 14:10 : update: added Jazz/04. John Coltrane - Time After Time.mp3 +Aug 01 14:10 : update: added Jazz/14. Bud Powell - Polka Dots And Moonbeams (Rudy Van Gelder_24 Bit Mastering_1998 Digital Remaster).mp3 +Aug 01 14:10 : update: added Jazz/30. Stevie Wonder - I Wish.mp3 +Aug 01 14:10 : update: added Jazz/21. Dazz Band - Let It Whip (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/02. Cannonball Adderley - Mercy, Mercy, Mercy.mp3 +Aug 01 14:10 : update: added Jazz/23. Lou Donaldson - Autumn Nocturne.mp3 +Aug 01 14:10 : update: added Jazz/22. Ohio Players - Fire.mp3 +Aug 01 14:10 : update: added Jazz/13. Herbie Hancock - Watermelon Man (Remastered 2007).mp3 +Aug 01 14:10 : update: added Jazz/05. Isaac Hayes - Theme From Shaft (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/18. Wes Montgomery - A Day In The Life.mp3 +Aug 01 14:10 : update: added Jazz/08. Maceo And The Macks - Cross The Tracks (We Better Go Back).mp3 +Aug 01 14:10 : update: added Jazz/06. Art Blakey - Moanin'.mp3 +Aug 01 14:10 : update: added Jazz/13. James Brown - Bodyheat (1977 Album Version).mp3 +Aug 01 14:10 : update: added Jazz/24. Dyke & The Blazers - Let A Woman Be A Woman - Let A Man Be A Man.mp3 +Aug 01 14:10 : update: added Jazz/27. Diana Ross - I'm Coming Out.mp3 +Aug 01 14:10 : update: added Jazz/06. Lyn Collins - Think (About It) (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/11. Coleman Hawkins - Greensleeves.mp3 +Aug 01 14:10 : update: added Jazz/09. Rick James - Glow (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/20. Stan Getz - Corcovado (Quiet Nights Of Quiet Stars).mp3 +Aug 01 14:10 : update: added Jazz/18. Rick James - Give It To Me Baby.mp3 +Aug 01 14:10 : update: added Jazz/19. Commodores - Machine Gun.mp3 +Aug 01 14:10 : update: added Jazz/22. Charlie Parker - Summertime.mp3 +Aug 01 14:10 : update: added Jazz/10. Roy Hargrove - Trust.mp3 +Aug 01 14:10 : update: added Jazz/28. Rufus - Dance Wit Me.mp3 +Aug 01 14:10 : update: added Jazz/08. John Coltrane - My Little Brown Book.mp3 +Aug 01 14:10 : update: added Jazz/10. Parliament - Give Up The Funk (Tear The Roof Off The Sucker).mp3 +Aug 01 14:10 : update: added Jazz/07. Kool & The Gang - Funky Stuff.mp3 +Aug 01 14:10 : update: added Jazz/24. Thelonious Monk - 'Round Midnight.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/20 - The Sidewinder (Remastered 1999_Rudy Van Gelder Edition).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/5 - Satin Doll (Remastered).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/2 - Blue Train (Remastered 2003).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/28 - At Last (Live 1963_New Era Club).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/22 - The Girl From Ipanema.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/30 - Lover Man (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/17 - Nuages.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/25 - I Put A Spell On You (Album Version).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/9 - St. Thomas (Album Version).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/18 - Someone To Watch Over Me.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/4 - Dat Dere.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/13 - Waltz For Ruth.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/24 - My Funny Valentine (Vocal Version).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/29 - Fever.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/27 - La vie en rose (Single Version).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/7 - Kelly Blue.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/16 - Harlem Air Shaft.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/31 - What A Wonderful World.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/15 - Maiden Voyage (Remastered 1999_Rudy Van Gelder Edition).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/11 - It Never Entered My Mind (Remastered).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/32 - The Girl From Ipanema (2008 Remastered).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/14 - Infant Eyes.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/10 - The Cat.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/12 - Bouncin' With Bud (Rudy Van Gelder Edition _ Remastered 1998).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/3 - Cantaloupe Island.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/21 - Django (Rudy Van Gelder Edition _ Remastered 1999).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/6 - Blues For Philly Joe (Remastered).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/19 - April In Paris.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/23 - Summertime.mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/26 - A Good Man Is Hard To Find (Remastered 2001).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/8 - Manteca (Live At Carnegie Hall _ 1961).mp3 +Aug 01 14:10 : update: added Jazz/NOW Jazz Classics/1 - 'Round Midnight.mp3 +Aug 01 14:10 : update: added Jazz/01. Bill Evans - Autumn Leaves.mp3 +Aug 01 14:10 : update: added Jazz/12. Miles Davis - Jeru.mp3 +Aug 02 01:37 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 02 09:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 09:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 10:08 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 02 10:10 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 10:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 13:35 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 02 13:37 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 13:37 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 21:20 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 02 21:21 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 02 21:21 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 01:04 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 08:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 08:47 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 08:51 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 08:52 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 08:52 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 12:51 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 12:52 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 12:52 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 18:51 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 18:55 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 18:55 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 19:42 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 19:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 19:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 21:00 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 03 21:12 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 03 21:12 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 04 02:29 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 04 08:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 04 08:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 04 09:33 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 04 09:44 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 04 09:44 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/01 - Turn On (The Beat Box) .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/02 - Let's Groove .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/03 - After the Love is Gone .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/05 - Devotion .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/06 - Serpentine Fire .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/08 - Boogie Wonderland (with The Emotions) .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/07 - Love's Holiday .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/10 - Mighty Mighty .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/09 - Saturday Nite .mp3 +Aug 04 23:13 : update: added Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/04 - Fantasy .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/10 - Mighty Mighty .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/09 - Saturday Nite .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/08 - Boogie Wonderland (with The Emotions) .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/07 - Love's Holiday .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/06 - Serpentine Fire .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/05 - Devotion .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/04 - Fantasy .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/03 - After the Love is Gone .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/02 - Let's Groove .mp3 +Aug 04 23:14 : update: removing Jazz/Earth Wind & Fire/Earth, Wind & Fire – The Best Of Earth, Wind & Fire Vol. II (1988) (320)/01 - Turn On (The Beat Box) .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/01 - Turn On (The Beat Box) .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/02 - Let's Groove .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/03 - After the Love is Gone .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/05 - Devotion .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/06 - Serpentine Fire .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/08 - Boogie Wonderland (with The Emotions) .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/07 - Love's Holiday .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/10 - Mighty Mighty .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/09 - Saturday Nite .mp3 +Aug 04 23:14 : update: added Jazz/Earth Wind & Fire/The Best Of Earth, Wind & Fire Vol. II (1988) (320)/04 - Fantasy .mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/In The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Crawling.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Forgotten.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Papercut.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/A Place For My Head.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Points Of Authority.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/With You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Pushing Me Away.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/By Myself.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Runaway.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2000] Linkin Park - Hybrid Theory/Cure For The Itch.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/14. Linkin Park - Papercut.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/16. Linkin Park - Shadow of the Day.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/13. Linkin Park - BURN IT DOWN.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/25. Linkin Park - Until It's Gone.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/11. Linkin Park - What I've Done.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/22. Linkin Park - From the Inside.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/02. Linkin Park - Numb.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/06. Linkin Park feat. Kiiara - Heavy.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/21. Linkin Park - CASTLE OF GLASS.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/09. Linkin Park - New Divide.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/04. Linkin Park - Somewhere I Belong.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/08. Linkin Park - Faint.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/20. Linkin Park feat. Rakim - Guilty All The Same.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/24. Linkin Park - Leave Out All The Rest.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/12. Linkin Park - The Catalyst.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/10. Linkin Park - Breaking The Habit.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/01. Linkin Park - In The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/19. Linkin Park - Given Up.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/17. Jay-Z & Linkin Park - Numb _ Encore.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/23. Linkin Park & Steve Aoki - A LIGHT THAT NEVER COMES.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/05. Linkin Park - One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/03. Linkin Park - One More Light.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/18. Linkin Park - Crawling.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/15. Linkin Park - Waiting for the End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/Linkin Park - Essentials (2020)/07. Linkin Park - Bleed It Out.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/19.-Keys To The Kingdom.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/14.-When They Come For Me.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/05.-Lying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/11.-Bleed It Out.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/02.-With You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/20.-Guilty All The Same.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/07.-Breaking The Habit.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/18.-Burn It Down.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/16.-Lost In The Echo.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/04.-In The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/08.-Dirt Off Your ShoulderLying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/06.-Hit The Floor.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/03.-Points Of Authority.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/21.-Until It's Gone.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/15.-Waiting For The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/17.-In My Remains.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/09.-Points Of Authority99 ProblemsOne Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/01.-One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/12.-Valentine's Day.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/10.-Given Up.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/13.-Burning In The Skies.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Hit the Floor.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Numb.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Foreword.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Faint.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Lying from You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Easier to Run.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Somewhere I Belong.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Figure 09.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/From the Inside.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Don't Stay.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Session.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Breaking the Habit.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/[2003] Linkin Park - Meteora/Nobody's Listening.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/16.-Lost In The Echo.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/15.-Waiting For The End.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/14.-When They Come For Me.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/13.-Burning In The Skies.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/12.-Valentine's Day.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/11.-Bleed It Out.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/10.-Given Up.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/09.-Points Of Authority99 ProblemsOne Step Closer.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/08.-Dirt Off Your ShoulderLying From You.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/07.-Breaking The Habit.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/06.-Hit The Floor.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/05.-Lying From You.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/04.-In The End.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/03.-Points Of Authority.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/02.-With You.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/01.-One Step Closer.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/21.-Until It's Gone.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/20.-Guilty All The Same.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/19.-Keys To The Kingdom.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/18.-Burn It Down.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park (2015) [320] vtwin88cube/17.-In My Remains.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/19.-Keys To The Kingdom.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/14.-When They Come For Me.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/05.-Lying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/11.-Bleed It Out.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/02.-With You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/20.-Guilty All The Same.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/07.-Breaking The Habit.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/18.-Burn It Down.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/16.-Lost In The Echo.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/04.-In The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/08.-Dirt Off Your ShoulderLying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/06.-Hit The Floor.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/03.-Points Of Authority.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/21.-Until It's Gone.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/15.-Waiting For The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/17.-In My Remains.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/09.-Points Of Authority99 ProblemsOne Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/01.-One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/12.-Valentine's Day.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/10.-Given Up.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park/13.-Burning In The Skies.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/21.-Until It's Gone.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/20.-Guilty All The Same.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/19.-Keys To The Kingdom.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/18.-Burn It Down.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/17.-In My Remains.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/16.-Lost In The Echo.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/15.-Waiting For The End.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/14.-When They Come For Me.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/19.-Keys To The Kingdom.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/13.-Burning In The Skies.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/12.-Valentine's Day.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/11.-Bleed It Out.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/10.-Given Up.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/09.-Points Of Authority99 ProblemsOne Step Closer.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/08.-Dirt Off Your ShoulderLying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/14.-When They Come For Me.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/07.-Breaking The Habit.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/06.-Hit The Floor.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/05.-Lying From You.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/04.-In The End.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/03.-Points Of Authority.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/02.-With You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/05.-Lying From You.mp3 +Aug 04 23:15 : update: removing Rock/Linkin Park/The Very Best Of Linkin Park/01.-One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/11.-Bleed It Out.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/02.-With You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/20.-Guilty All The Same.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/07.-Breaking The Habit.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/18.-Burn It Down.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/16.-Lost In The Echo.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/04.-In The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/08.-Dirt Off Your ShoulderLying From You.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/06.-Hit The Floor.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/03.-Points Of Authority.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/21.-Until It's Gone.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/15.-Waiting For The End.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/17.-In My Remains.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/09.-Points Of Authority99 ProblemsOne Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/01.-One Step Closer.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/12.-Valentine's Day.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/10.-Given Up.mp3 +Aug 04 23:15 : update: added Rock/Linkin Park/The Very Best Of Linkin Park (2020)/13.-Burning In The Skies.mp3 +Aug 05 01:58 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 05 09:51 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 05 09:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 05 09:54 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 05 09:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 05 09:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 05 10:06 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 05 10:07 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 05 10:07 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 06 00:03 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 06 09:17 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 06 09:17 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 01:15 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 07 09:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 09:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 13:07 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 07 13:09 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 13:09 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 13:28 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 07 13:30 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 07 13:30 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 08 00:06 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 08 08:22 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 08 08:22 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 08 09:50 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 08 10:27 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 08 10:27 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 08 23:48 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 09 09:19 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 09:19 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 10:12 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 09 10:18 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 10:18 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 10:56 : player: played "Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3" +Aug 09 10:58 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 10:58 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 09 11:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 00:54 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 10 09:07 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 09:07 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 09:08 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 10 09:09 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 09:09 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 21:15 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 10 21:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 10 21:16 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 11 00:39 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 11 09:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 11 09:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/06. Love Hangover.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/04. The Sky's the Limit.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/05. What If.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/10. Queen of Hearts.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/02. Ridin' Solo.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/07. Encore.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/11. Whatcha Say (Acoustic).mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/12. In My Head (Rhythm Remix).mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/01. Whatcha Say.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/08. Fallen.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/14. Ridin' Solo (Justin Michael and Kemal Remix).mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/03. In My Head.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/09. Blind.mp3 +Aug 11 11:04 : update: added Dance/Jason Derulo - 10th Anniversary Deluxe/13. Whatcha Say (Johnny Vicious Remix).mp3 +Aug 11 11:49 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 12 20:15 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 12 20:15 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 12 21:32 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 13 19:59 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 13 19:59 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 13 21:07 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 14 19:51 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 19:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:17 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 14 21:19 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:19 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:32 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 14 21:33 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:33 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:52 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 14 21:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 14 21:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 15 01:56 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 15 09:38 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 15 09:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 15 09:47 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 15 09:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 15 09:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 01:19 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 16 10:35 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 10:35 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 12:00 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 16 12:01 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 12:01 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 13:09 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 16 13:10 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 13:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 16:59 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 16 17:01 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 17:01 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 17:35 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 16 18:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 16 18:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 17 02:11 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 17 09:57 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 17 09:57 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 02:27 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 18 09:46 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 09:46 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 10:51 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 18 10:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 10:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 15:32 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 18 15:45 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 15:45 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 19:11 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 18 19:14 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 18 19:14 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 02:00 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 19 10:42 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 10:42 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 11:22 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 19 11:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 11:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 11:48 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 19 13:02 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 19 13:02 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 20 03:31 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 20 09:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 20 09:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 20 13:32 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 20 13:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 20 13:47 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 20 23:15 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 21 09:35 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 09:35 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:07 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 21 10:09 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:09 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:28 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 21 10:30 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:30 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:49 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 21 10:51 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 21 10:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 22 02:34 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 22 09:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 22 09:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 22 14:07 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 22 14:09 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 22 14:10 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 22 23:53 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 23 09:22 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 23 09:22 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 23 09:22 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 23 09:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 23 09:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 23 09:33 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 23 09:38 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 23 09:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 24 00:41 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 24 08:07 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 24 08:07 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 25 01:04 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 25 09:35 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 25 09:35 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 25 11:57 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 25 12:00 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 25 12:00 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 26 00:05 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 26 09:20 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 26 09:20 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 26 09:42 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 26 09:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 26 09:47 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 26 23:19 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 27 00:14 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 27 00:14 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 27 01:17 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 27 08:51 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 27 08:51 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 27 08:52 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 27 08:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 27 08:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 00:05 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 28 09:40 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 09:40 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 09:40 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 28 09:43 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 09:43 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 09:46 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 28 09:47 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 09:47 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 28 13:07 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 29 12:04 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 29 12:04 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 29 12:04 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 29 17:01 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 29 17:01 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 29 17:24 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 29 17:41 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 29 17:41 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 30 19:04 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 30 19:04 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 30 20:44 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 30 21:08 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 30 21:08 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 01:02 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 31 09:54 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 09:54 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 09:56 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 31 09:57 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 09:57 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 15:14 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 31 15:18 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 15:18 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 16:54 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Aug 31 16:56 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Aug 31 16:56 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 00:18 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 01 09:35 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 09:35 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 09:42 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 01 09:48 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 09:48 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 09:55 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 01 09:59 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 01 09:59 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 00:38 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 02 09:50 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 09:50 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 10:22 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 02 10:24 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 10:24 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 11:28 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 02 11:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 11:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 15:52 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 02 16:08 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 16:08 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 16:29 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 02 16:30 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 02 16:30 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 00:47 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 03 10:03 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 10:03 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 10:05 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 03 10:06 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 10:06 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 10:29 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 03 10:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 10:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 19:45 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 03 19:49 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 03 19:49 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 04 01:53 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 04 09:25 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 04 09:25 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 04 10:40 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 04 10:42 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 04 10:42 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 05 01:02 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 05 09:32 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 05 09:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 05 09:36 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 05 09:37 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 05 09:37 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 06 00:41 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 06 16:30 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 06 16:30 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 06 16:37 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 06 20:16 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 06 20:16 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 06 22:41 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 07 08:31 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 08:31 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 08:38 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 07 12:45 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 12:45 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 12:52 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 07 12:57 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 12:57 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 15:21 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 07 20:20 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 20:20 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 20:31 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 07 20:33 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 07 20:33 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 08 01:01 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 08 08:32 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 08 08:32 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 08 08:37 : player: played "Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3" +Sep 08 08:38 : exception: RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted +Sep 08 08:38 : exception: OutputThread could not get realtime scheduling, continuing anyway: sched_setscheduler failed: Operation not permitted diff --git a/.config/mpd/mpd.conf b/.config/mpd/mpd.conf new file mode 100755 index 0000000..f9cd7dc --- /dev/null +++ b/.config/mpd/mpd.conf @@ -0,0 +1,439 @@ +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "~/Music" +#music_directory "~/.mpd/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +playlist_directory "~/.config/mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "~/.config/mpd/database" +# +# These settings are the locations for the daemon log files for the daemon. +# These logs are great for troubleshooting, depending on your log_level +# settings. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog, otherwise logging is disabled. +# +#log_file "syslog" +log_file "~/.config/mpd/log" +# +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +pid_file "~/.config/mpd/pid" +# +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +state_file "~/.config/mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +sticker_file "~/.config/mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "mpd" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "audio" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other then the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activiation is in use. +# +# For network +bind_to_address "127.0.0.1" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +port "6600" +# +# This setting controls the type of information which is logged. Available +# setting arguments are "default", "secure" or "verbose". The "verbose" setting +# argument is recommended for troubleshooting, though can quickly stretch +# available resources on limited hardware storage. +# +log_level "default" +# +# If you have a problem with your MP3s ending abruptly it is recommended that +# you set this argument to "no" to attempt to fix the problem. If this solves +# the problem, it is highly recommended to fix the MP3 files with vbrfix +# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which +# point gapless MP3 playback can be enabled. +# +# gapless_mp3_playback "yes" # this is deprecated +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +restore_paused "yes" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +auto_update "yes" + +max_output_buffer_size "16384" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. +# +#zeroconf_name "Music Player" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# + +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# + +#input { +# plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +#} +# QOBUZ input plugin +input { + enabled "no" + plugin "qobuz" +# app_id "ID" +# app_secret "SECRET" +# username "USERNAME" +# password "PASSWORD" +# format_id "N" +} + +# TIDAL input plugin +input { + enabled "no" + plugin "tidal" +## token "TOKEN" +# username "USERNAME" +# password "PASSWORD" +# audioquality "Q" +} + +# Decoder ##################################################################### +# + +#decoder { +## plugin "hybrid_dsd" +# enabled "no" +# gapless "no" +#} + +decoder { + plugin "wildmidi" + enabled "no" +# gapless "no" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +# device "hw:0,0" # optional +# mixer_type "hardware" # optional +# mixer_device "default" # optional +# mixer_control "PCM" # optional +# mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "~/.mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +audio_output { + type "pulse" + name "My Pulse Output" +# server "127.0.0.1" # optional + mixer_type "software" # optional +# sink "remote_server_sink" # optional +} + +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "software" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +## An example of a fifo output (for visualisation): +# +audio_output { + type "fifo" + name "toggle_visualiser" + path "/tmp/mpd.fifo" # optional + format "44100:16:2" +} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See <http://www.replaygain.org> for more details about ReplayGain. +# This setting is off by default. +# +#replaygain "auto" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/.config/mpd/mpd.conf.luke b/.config/mpd/mpd.conf.luke new file mode 100644 index 0000000..a8b3428 --- /dev/null +++ b/.config/mpd/mpd.conf.luke @@ -0,0 +1,74 @@ +db_file "~/.config/mpd/database" +log_file "~/.config/mpd/log" +music_directory "~/Music" +playlist_directory "~/.config/mpd/playlists" +pid_file "~/.config/mpd/pid" +state_file "~/.config/mpd/state" +sticker_file "~/.config/mpd/sticker.sql" + +auto_update "yes" + +bind_to_address "127.0.0.1" +port "6600" + +restore_paused "yes" +max_output_buffer_size "16384" + +follow_outside_symlinks "yes" +follow_inside_symlinks "yes" +#audio_output { +# type "alsa" +# name "alsa for audio soundcard" +# mixer_type "software" +#} + +audio_output { +type "fifo" +name "toggle_visualizer" +path "/tmp/mpd.fifo" +format "44100:16:2" +} +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +audio_output { + type "pulse" + name "My Pulse Output" +# server "127.0.0.1" # optional + mixer_type "software" # optional +# sink "remote_server_sink" # optional +} +# QOBUZ input plugin +input { + enabled "no" + plugin "qobuz" +# app_id "ID" +# app_secret "SECRET" +# username "USERNAME" +# password "PASSWORD" +# format_id "N" +} + +# TIDAL input plugin +input { + enabled "no" + plugin "tidal" +## token "TOKEN" +# username "USERNAME" +# password "PASSWORD" +# audioquality "Q" +} + +# Decoder ##################################################################### +# + +#decoder { +## plugin "hybrid_dsd" +# enabled "no" +# gapless "no" +#} + +decoder { + plugin "wildmidi" + enabled "no" +# gapless "no" +} diff --git a/.config/mpd/pid b/.config/mpd/pid new file mode 100644 index 0000000..8ec6294 --- /dev/null +++ b/.config/mpd/pid @@ -0,0 +1 @@ +1811 diff --git a/.config/mpd/playlists/1.m3u b/.config/mpd/playlists/1.m3u new file mode 100644 index 0000000..efcfe85 --- /dev/null +++ b/.config/mpd/playlists/1.m3u @@ -0,0 +1,21 @@ +Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3 +Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3 +Jazz/COFFEE HOUSE SWINGER/03 Cafe Au Lait.mp3 +Jazz/COFFEE HOUSE SWINGER/04 Open Mic.mp3 +Jazz/COFFEE HOUSE SWINGER/05 I'm Into You.mp3 +Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3 +Jazz/COFFEE HOUSE SWINGER/07 Cup O' Tea.mp3 +Jazz/COFFEE HOUSE SWINGER/08 Vibin'.mp3 +Jazz/COFFEE HOUSE SWINGER/09 I'll Be....mp3 +Jazz/COFFEE HOUSE SWINGER/10 Smitten.mp3 +Jazz/COFFEE HOUSE SWINGER/11 Perculating (G' Mornin') (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/12 The Shift Change (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/13 Coffee House Swingin' (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/14 Bookworm (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/15 Cafe Au Lait (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/16 Open Mic (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/17 I'm Into You (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/18 Caffeine (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/19 Cup O' Tea (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/20 Vibin' (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/21 I'll Be....mp3 diff --git a/.config/mpd/playlists/DrowningPool.m3u b/.config/mpd/playlists/DrowningPool.m3u new file mode 100644 index 0000000..1a636e9 --- /dev/null +++ b/.config/mpd/playlists/DrowningPool.m3u @@ -0,0 +1,11 @@ +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 01 - Sinner.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 04 - All Over Me.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 05 - Reminded.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 06 - Pity.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 07 - Mute.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 08 - I Am.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 09 - Follow.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 10 - Told You So.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 11 - Sermon.mp3 diff --git a/.config/mpd/playlists/Jazz1.m3u b/.config/mpd/playlists/Jazz1.m3u new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mpd/playlists/Jazz1.m3u diff --git a/.config/mpd/playlists/Jmx1.m3u b/.config/mpd/playlists/Jmx1.m3u new file mode 100644 index 0000000..2fd7cb5 --- /dev/null +++ b/.config/mpd/playlists/Jmx1.m3u @@ -0,0 +1,268 @@ +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(1) [Charles Mingus] Better Git In Your Soul.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(2) [Charles Mingus] Fables Of Faubus.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(3) [Charles Mingus] Far Wells, Mill Valley.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(4) [Charles Mingus] Bird Calls.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(5) [Charles Mingus] Gunslinging Bird.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(6) [Charles Mingus] Goodbye Pork Pie Hat.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(7) [Charles Mingus] Jelly Roll.mp3 +Jazz/Charles Mingus - The Best Of Charles Mingus (1967) (320)/(8) [Charles Mingus] Things Ain`t What They Used To Be.mp3 +Jazz/Charles Mingus Mingus Ah Um/01 Better Git It In Your Soul.mp3 +Jazz/Charles Mingus Mingus Ah Um/02 Goodbye Pork Pie Hat.mp3 +Jazz/Charles Mingus Mingus Ah Um/03 Boogie Stop Shuffle.mp3 +Jazz/Charles Mingus Mingus Ah Um/04 Self-Portrait In Three Colors.mp3 +Jazz/Charles Mingus Mingus Ah Um/05 Open Letter To Duke.mp3 +Jazz/Charles Mingus Mingus Ah Um/06 Bird Calls.mp3 +Jazz/Charles Mingus Mingus Ah Um/07 Fable Of Faubus.mp3 +Jazz/Charles Mingus Mingus Ah Um/08 Pussy Cat Dues.mp3 +Jazz/Charles Mingus Mingus Ah Um/09 Jelly Roll.mp3 +Jazz/Charles Mingus Mingus Ah Um/10 Pedal Point Blues.mp3 +Jazz/Charles Mingus Mingus Ah Um/11 GG Train.mp3 +Jazz/Charles Mingus Mingus Ah Um/12 Girl Of My Dreams.mp3 +Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3 +Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3 +Jazz/COFFEE HOUSE SWINGER/03 Cafe Au Lait.mp3 +Jazz/COFFEE HOUSE SWINGER/04 Open Mic.mp3 +Jazz/COFFEE HOUSE SWINGER/05 I'm Into You.mp3 +Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3 +Jazz/COFFEE HOUSE SWINGER/07 Cup O' Tea.mp3 +Jazz/COFFEE HOUSE SWINGER/08 Vibin'.mp3 +Jazz/COFFEE HOUSE SWINGER/09 I'll Be....mp3 +Jazz/COFFEE HOUSE SWINGER/10 Smitten.mp3 +Jazz/COFFEE HOUSE SWINGER/11 Perculating (G' Mornin') (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/12 The Shift Change (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/13 Coffee House Swingin' (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/14 Bookworm (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/15 Cafe Au Lait (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/16 Open Mic (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/17 I'm Into You (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/18 Caffeine (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/19 Cup O' Tea (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/20 Vibin' (INS).mp3 +Jazz/COFFEE HOUSE SWINGER/21 I'll Be....mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/09 Clifford Brown - Willow Weep for Me.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/01 Frank Morgan - Lullaby.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/02 John Coltrane - Soul Eyes.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/03 Art Pepper and the Hollywood All Stars - My Funny Valentine.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/05 Frank Morgan - Mood Indigo.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/06 Sonny Rollins - For All We Know.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/07 Joe Henderson- Lush Life.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/04 Bill Evans - My Foolish Heart.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/08 Art Pepper- Straight life.mp3 +Jazz/Dark Sacred Night - The Music Of Harry Bosch/10 Louis Armstrong - What a Wonderful World.mp3 +Jazz/MilesDavies/Time After Time-Miles Davis.mp3 +Jazz/MilesDavies/Summertime-Miles Davis.mp3 +Jazz/MilesDavies/Bye Bye Blackbird-Miles Davis.mp3 +Jazz/MilesDavies/It Ain't Necessarily So-Miles Davis.mp3 +Jazz/MilesDavies/Once Upon A Summertime-Miles Davis.mp3 +Jazz/MilesDavies/Concierto De Aranjuez-Miles Davis.mp3 +Jazz/MilesDavies/'Round Midnight-Miles Davis.mp3 +Jazz/MilesDavies/I Don't Wanna Be Kissed (By Anyone But You)-Miles Davis.mp3 +Jazz/MilesDavies/So What-Miles Davis.mp3 +Jazz/MilesDavies/Jean Pierre-Miles Davis.mp3 +Jazz/MilesDavies/Human Nature-Miles Davis.mp3 +Jazz/MilesDavies/Shout-Miles Davis.mp3 +Jazz/MilesDavies/Miles-Miles Davis.mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/01 - Jook Joint Intro.mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/02 - Let The Good Times Roll.mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/03 - Cool Joe, Mean Joe (Killer Joe).mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/04 - You Put A Move On My Heart.mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/05 - Rock With You.mp3 +Jazz/Quincy Jones/Quincy Jones - 1995 - Q's Jook Joint/06 - Moody's Mood For Love.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/01 - quincy jones - body heat.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/02 - quincy jones - soul saga.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/03 - quincy jones - everything must change.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/04 - quincy jones - boogie joe the grinder.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/05 - quincy jones - everything must change.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/06 - quincy jones - one track mind.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/07 - quincy jones - just a man.mp3 +Jazz/Quincy Jones/Quincy Jones - Body Heat [1974]/08 - quincy jones - along came betty.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 01 - Ai No Corrida.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 02 - The Dude.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 03 - Just Once.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 04 - Betcha Wouldn't Hurt me.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 05 - Somethin' Special.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 06 - Razzamatazz.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 07 - One Hundred ways.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 08 - Velas.mp3 +Jazz/Quincy Jones/Quincy Jones - The Dude (1981)/Quincy Jones - Quincy Jones - The Dude - 09 - Turn On The Action.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/01 Desafinado.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/02 Samba Dees Days.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/03 O Pato (The Duck).mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/04 Samba Triste.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/05 One Note Samba.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/06 É Luxo Só.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/07 Baia.mp3 +Jazz/Stan Getz-Charlie Byrd/Jazz Samba [Bonus Track]/08 Desafinado [45 RPM Issue].mp3 +Jazz/Straight No Chaser/01. Locomotive.mp3 +Jazz/Straight No Chaser/02. I Didn't Know About You (Take 4).mp3 +Jazz/Straight No Chaser/03. Straight, No Chaser.mp3 +Jazz/Straight No Chaser/04. Japanese Folk Song.mp3 +Jazz/Straight No Chaser/05. Between The Devil And The Deep Blue Sea.mp3 +Jazz/Straight No Chaser/06. We See.mp3 +Jazz/Straight No Chaser/07. This Is My Story, This Is My Song.mp3 +Jazz/Straight No Chaser/08. I Didn't Know About You (Take 1).mp3 +Jazz/Straight No Chaser/09. Green Chimneys.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(01) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Perdido.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(01) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Perdido.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(02) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Salt Peanuts.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(02) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Salt Peanuts.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(03) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] All The Things You Are.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(03) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] All The Things You Are.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(04) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Wee.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(05) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Hot House.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(06) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] A Night In Tunisia.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(06) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] A Night In Tunisia.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(07) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Embraceable You.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(07) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Embraceable You.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(08) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Sure Thing.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(09) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Cherokee.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(09) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Cherokee.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(10) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Jubilee.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(11) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Lullaby Of Birdland.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(11) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Lullaby Of Birdland.mp3 +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.flac +Jazz/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t]_/(12) [Dizzy Gillespie-Charlie Parker-Bud Powell-Charles Mingus-Max Roach] Bass-Ically Speaking.mp3 +Jazz/Gill Scott-Heron/1980/01 Shut Um Down.mp3 +Jazz/Gill Scott-Heron/1980/02 Alien (Hold On To Your Dreams).mp3 +Jazz/Gill Scott-Heron/1980/03 Willing.mp3 +Jazz/Gill Scott-Heron/1980/04 Corners.mp3 +Jazz/Gill Scott-Heron/1980/05 1980.mp3 +Jazz/Gill Scott-Heron/1980/06 Push Come To Shove.mp3 +Jazz/Gill Scott-Heron/1980/07 Shah Mot.mp3 +Jazz/Gill Scott-Heron/1980/08 Late Last Night.mp3 +Jazz/Gill Scott-Heron/Bridges/01 Hello Suday Hello Road.mp3 +Jazz/Gill Scott-Heron/Bridges/02 Song Of The Wind.mp3 +Jazz/Gill Scott-Heron/Bridges/03 Racetrack In France.mp3 +Jazz/Gill Scott-Heron/Bridges/04 Vildgolia (Deaf,Dumb,And Blind).mp3 +Jazz/Gill Scott-Heron/Bridges/05 Under The Hammer.mp3 +Jazz/Gill Scott-Heron/Bridges/06 We Almost Lost Detroit.mp3 +Jazz/Gill Scott-Heron/Bridges/07 Tuskeegee 626.mp3 +Jazz/Gill Scott-Heron/Bridges/08 Delta Man (Where Im Comin From).mp3 +Jazz/Gill Scott-Heron/Bridges/09 95 South (All Of The Places We've Been).mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/01 Johannesburg.mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/02 A Toast To The People.mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/02 The Summer Of 42.mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/04 Beginnings (First Minute Of A New Day).mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/04 South Carolina (Barnwell).mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/05 Essex.mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/06 Fell Together.mp3 +Jazz/Gill Scott-Heron/From South Africa To South Carolina/07 A Lovely Day.mp3 +Jazz/Gill Scott-Heron/It's Your World/01 It's Your World.mp3 +Jazz/Gill Scott-Heron/It's Your World/02 Possum Slim.mp3 +Jazz/Gill Scott-Heron/It's Your World/03 New York City.mp3 +Jazz/Gill Scott-Heron/It's Your World/04 17th Street.mp3 +Jazz/Gill Scott-Heron/It's Your World/05 Trane.mp3 +Jazz/Gill Scott-Heron/It's Your World/06 Must Be Something.mp3 +Jazz/Gill Scott-Heron/It's Your World/07 Home Is Where The Hatred Is.mp3 +Jazz/Gill Scott-Heron/It's Your World/08 Bicentennial Blues.mp3 +Jazz/Gill Scott-Heron/It's Your World/09 The Bottle.mp3 +Jazz/Gill Scott-Heron/It's Your World/10 Sharing.mp3 +Jazz/Gill Scott-Heron/Moving Target/01 Fast Lane.mp3 +Jazz/Gill Scott-Heron/Moving Target/02 Washington, D.C..mp3 +Jazz/Gill Scott-Heron/Moving Target/03 No Exit.mp3 +Jazz/Gill Scott-Heron/Moving Target/04 Blue Collar.mp3 +Jazz/Gill Scott-Heron/Moving Target/05 Explanations.mp3 +Jazz/Gill Scott-Heron/Moving Target/06 Ready or Not.mp3 +Jazz/Gill Scott-Heron/Moving Target/07 Black History_ The World.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/01 The Revolution Will Not Be Tel.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/02 Save The Children.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/03 Lady Day and John Coltrane.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/04 Home Is Where The Hatred Is.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/05 When You Are Who You Are.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/06 I Think I'll Call It A Morning.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/07 Pieces Of A Man.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/08 A Sign Of The Ages.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/09 Or Down You Fall.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/10 The Needle's Eye.mp3 +Jazz/Gill Scott-Heron/Pieces of a Man/11 The Prisoner.mp3 +Jazz/Gill Scott-Heron/Reflections/01 Storm Music.mp3 +Jazz/Gill Scott-Heron/Reflections/02 Grandma's Hands.mp3 +Jazz/Gill Scott-Heron/Reflections/03 Is That Jazz.mp3 +Jazz/Gill Scott-Heron/Reflections/04 Morning Thoughts.mp3 +Jazz/Gill Scott-Heron/Reflections/05 Inner City Blues.mp3 +Jazz/Gill Scott-Heron/Reflections/06 Gun.mp3 +Jazz/Gill Scott-Heron/Reflections/07 B Movie.mp3 +Jazz/Gill Scott-Heron/Secrets/01 Angel Dust.mp3 +Jazz/Gill Scott-Heron/Secrets/02 Madison Avenue.mp3 +Jazz/Gill Scott-Heron/Secrets/03 Cane.mp3 +Jazz/Gill Scott-Heron/Secrets/04 Third World Revolution.mp3 +Jazz/Gill Scott-Heron/Secrets/05 Better Days Ahead.mp3 +Jazz/Gill Scott-Heron/Secrets/06 Three Miles Down.mp3 +Jazz/Gill Scott-Heron/Secrets/07 Angola, Louisiana.mp3 +Jazz/Gill Scott-Heron/Secrets/08 Show Bizness.mp3 +Jazz/Gill Scott-Heron/Secrets/09 Prayer for Everybody_To Be Free.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/01 The Revolution Will Not Be Tel.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/02 Omen.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/03 Brother.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/04 Comment #1.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/05 Small Talk At 125th And Lenox.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/06 The Subject Was Faggots.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/07 Evolution (And Flashback).mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/08 Plastic Pattern People.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/09 Whitey On The Moon.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/10 The Vulture.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/11 Enough.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/12 Paint It Black.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/13 Who'll Pay Repartions For My S.mp3 +Jazz/Gill Scott-Heron/Small Talk At 125th And Lenox/14 Everyday.mp3 +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/01 Offering 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/02 The Liberation Song (Red, Black And Green) 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/03 Must Be Something 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/04 Ain't No Such Thing As Superman 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/05 Pardon Our Analysis (We Beg Your Pardon) 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/06 Guerilla 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/07 Winter in America 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/08 Western Sunrise 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/09 Alluswe 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/10 A Talk_ Bluesology_Black History_Jaws_The Revolution Will Not Be Televised 1.m4a +Jazz/Gill Scott-Heron/The First Minute Of New Day (Midnight Band)/11 Winter in America (Solo Version) 1.m4a +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/01 The Revolution Will Not Be Televised.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/02 Sex Education - Ghetto Style.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/03 The Get Out Of The Ghetto Blues.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/04 No Knock.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/05 Lady Day And John Coltrane.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/06 Pieces Of A Man.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/07 Home Is Where The Hatred Is.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/08 Brother.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/09 Save The Children.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/10 Whitey On The Moon.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/11 Did You Hear What They Said-.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/12 When You Are Who You Are.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/13 I Think I'll Call It Morning.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/14 A Sign Of The Ages.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/15 Or Down You Fall.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/16 The Needle's Eye.mp3 +Jazz/Gill Scott-Heron/The Revolution Will Not Be Televised/17 The Prisoner.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/01 The Revolution Will Not Be Televised.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/02 The Bottle.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/03 Winter In America.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/04 Johannesburg.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/05 Ain't No Such Thing As A Superman.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/06 Re-Ron.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/07 Shut 'Em Down.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/08 Angel Dust.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/09 'B' Movie.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/10 Washington D.C..mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/11 H2Ogate Blues.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/12 Fast Lane.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/13 Lady Day And John Coltrane.mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/14 Your Daddy Loves You (for Gia Louise).mp3 +Jazz/Gill Scott-Heron/The Very Best Of Gil Scott Heron/15 A Legend In His Own Mind.mp3 +Jazz/Gill Scott-Heron/Winter In America/01 Peace Go With You, Brother (As-Salaam-Alaikum).mp3 +Jazz/Gill Scott-Heron/Winter In America/02 Rivers Of My Fathers.mp3 +Jazz/Gill Scott-Heron/Winter In America/03 A Very Precious Time.mp3 +Jazz/Gill Scott-Heron/Winter In America/04 Back Home.mp3 +Jazz/Gill Scott-Heron/Winter In America/05 The Bottle.mp3 +Jazz/Gill Scott-Heron/Winter In America/06 Song For Bobby Smith.mp3 +Jazz/Gill Scott-Heron/Winter In America/07 Your Daddy Loves You.mp3 +Jazz/Gill Scott-Heron/Winter In America/08 H2Ogate Blues.mp3 +Jazz/Gill Scott-Heron/Winter In America/09 Peace Go With You, Brother (As-Salaam-Alaikum).mp3 +Jazz/Gill Scott-Heron/Winter In America/10 Winter In America (Live).mp3 +Jazz/Gill Scott-Heron/Winter In America/11 Song For Bobby Smith (Alternate Take).mp3 +Jazz/Gill Scott-Heron/Winter In America/12 Your Daddy Loves You (Live).mp3 +Jazz/Gill Scott-Heron/Winter In America/13 The Bottle - Guan Guanco (Live).mp3 +Jazz/Gill Scott-Heron/Winter In America/14 Winter In America.mp3 diff --git a/.config/mpd/playlists/Stankonia album.m3u b/.config/mpd/playlists/Stankonia album.m3u new file mode 100644 index 0000000..2182996 --- /dev/null +++ b/.config/mpd/playlists/Stankonia album.m3u @@ -0,0 +1,24 @@ +Intro.mp3
+Gasoline Dreams featuring Khujo Goode From Goode Mob.mp3
+I'm Cool (Interlude).mp3
+So Fresh, So Clean.mp3
+Ms. Jackson.mp3
+Snappin' & Trappin' featuring Killer Mike & J-Sweet.mp3
+D.F. (Interlude).mp3
+Spaghetti Junction.mp3
+Lim & Cookie (Interlude).mp3
+I'll Call Before I Come featuring Gangsta Boo & Eco.mp3
+B.O.B..mp3
+Xplosion featuring B-Real.mp3
+Good Hair (Interlude).mp3
+We Luv Deez Hoez featuring Back Bone & Big Gipp from Goode Mob.mp3
+Humble Mumble featuring Erykah Badu.mp3
+Drinkin' Again (Interlude).mp3
+-.mp3
+Red Velvet.mp3
+Cruisin' In The ATL (Interlude).mp3
+Gangsta Sh't featuring Slimm Calhoun, C-Bone & T-Mo Goode from Goode Mob.mp3
+Toilet Tisha.mp3
+Slum Beautiful featuring Cee-Lo Goode from Goode Mob.mp3
+Pre-Nump (Interlude).mp3
+Stankonia (Stanklove) featuring Big Rube & Sleepy Brown.mp3
diff --git a/.config/mpd/playlists/bbc1.m3u b/.config/mpd/playlists/bbc1.m3u new file mode 100644 index 0000000..e82192b --- /dev/null +++ b/.config/mpd/playlists/bbc1.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p diff --git a/.config/mpd/playlists/bbc2.m3u b/.config/mpd/playlists/bbc2.m3u new file mode 100644 index 0000000..cfdae38 --- /dev/null +++ b/.config/mpd/playlists/bbc2.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio2_mf_p diff --git a/.config/mpd/playlists/bbc3.m3u b/.config/mpd/playlists/bbc3.m3u new file mode 100644 index 0000000..f94944a --- /dev/null +++ b/.config/mpd/playlists/bbc3.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_p diff --git a/.config/mpd/playlists/bbc4.m3u b/.config/mpd/playlists/bbc4.m3u new file mode 100644 index 0000000..cc39b23 --- /dev/null +++ b/.config/mpd/playlists/bbc4.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4fm_mf_p diff --git a/.config/mpd/playlists/bbc4x.m3u b/.config/mpd/playlists/bbc4x.m3u new file mode 100644 index 0000000..df12e4b --- /dev/null +++ b/.config/mpd/playlists/bbc4x.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4extra_mf_p diff --git a/.config/mpd/playlists/classicfm.m3u b/.config/mpd/playlists/classicfm.m3u new file mode 100644 index 0000000..5cf477b --- /dev/null +++ b/.config/mpd/playlists/classicfm.m3u @@ -0,0 +1 @@ +http://media-ice.musicradio.com/ClassicFMMP3 diff --git a/.config/mpd/playlists/ewtn b/.config/mpd/playlists/ewtn new file mode 100644 index 0000000..69ed143 --- /dev/null +++ b/.config/mpd/playlists/ewtn @@ -0,0 +1 @@ +http://ewtn.mp3.miisolutions.net/ewtnradioenglish/mp3 diff --git a/.config/mpd/playlists/lofi1.m3u b/.config/mpd/playlists/lofi1.m3u new file mode 100644 index 0000000..a74df5a --- /dev/null +++ b/.config/mpd/playlists/lofi1.m3u @@ -0,0 +1 @@ +HipHop/chill beats to quarantine to-audiotrack.mp3 diff --git a/.config/mpd/playlists/naina.m3u b/.config/mpd/playlists/naina.m3u new file mode 100644 index 0000000..58cfa5e --- /dev/null +++ b/.config/mpd/playlists/naina.m3u @@ -0,0 +1,69 @@ +Jazz/COFFEE HOUSE SWINGER/01 Coffee House Swingin' f. Nile River.mp3 +Jazz/COFFEE HOUSE SWINGER/02 Bookworm.mp3 +Jazz/COFFEE HOUSE SWINGER/03 Cafe Au Lait.mp3 +Jazz/COFFEE HOUSE SWINGER/04 Open Mic.mp3 +Jazz/COFFEE HOUSE SWINGER/05 I'm Into You.mp3 +Jazz/COFFEE HOUSE SWINGER/06 Caffeine.mp3 +Jazz/COFFEE HOUSE SWINGER/07 Cup O' Tea.mp3 +Jazz/COFFEE HOUSE SWINGER/08 Vibin'.mp3 +Jazz/COFFEE HOUSE SWINGER/09 I'll Be....mp3 +Jazz/COFFEE HOUSE SWINGER/10 Smitten.mp3 +Jazz/COFFEE HOUSE SWINGER/11 Perculating (G' Mornin') (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/12 The Shift Change (bonus track).mp3 +Jazz/COFFEE HOUSE SWINGER/21 I'll Be....mp3 +Dance/Birds of Prey The Album/01 Boss Bitch.mp3 +Dance/Birds of Prey The Album/02 So Thick (feat. Baby Goth).mp3 +Dance/Birds of Prey The Album/03 Diamonds.mp3 +Dance/Birds of Prey The Album/04 Sway With Me.mp3 +Dance/Birds of Prey The Album/05 Joke's on You.mp3 +Dance/Birds of Prey The Album/06 Smile.mp3 +Dance/Birds of Prey The Album/07 Lonely Gun.mp3 +Dance/Birds of Prey The Album/08 Experiment on Me.mp3 +Dance/Birds of Prey The Album/09 Danger.mp3 +Dance/Birds of Prey The Album/10 Bad Memory.mp3 +Dance/Birds of Prey The Album/11 Feeling Good.mp3 +Dance/Birds of Prey The Album/12 Invisible Chains.mp3 +Dance/Birds of Prey The Album/13 It_s A Man_s Man_s Man_s World (w.mp3 +Dance/Birds of Prey The Album/14 I'm Gonna Love You Just a Little.mp3 +Dance/Birds of Prey The Album/15 Hit Me With Your Best Shot.mp3 +Dance/Jorja Smith - Lost & Found (320)/01. Lost & Found.mp3 +Dance/Jorja Smith - Lost & Found (320)/02. Teenage Fantasy.mp3 +Dance/Jorja Smith - Lost & Found (320)/03. Where Did I Go¿.mp3 +Dance/Jorja Smith - Lost & Found (320)/04. February 3rd.mp3 +Dance/Jorja Smith - Lost & Found (320)/05. On Your Own.mp3 +Dance/Jorja Smith - Lost & Found (320)/06. The One.mp3 +Dance/Jorja Smith - Lost & Found (320)/07. Wandering Romance.mp3 +Dance/Jorja Smith - Lost & Found (320)/08. Blue Lights.mp3 +Dance/Jorja Smith - Lost & Found (320)/09. Lifeboats (Freestyle).mp3 +Dance/Jorja Smith - Lost & Found (320)/10. Goodbyes.mp3 +Dance/Jorja Smith - Lost & Found (320)/11. Tomorrow.mp3 +Dance/Jorja Smith - Lost & Found (320)/12. Don't Watch Me Cry.mp3 +Dance/black eyed peas - sexy (from the be cool movie), john travolta.mp3 +Dance/De La Soul - Eye Know.mp3 +Dance/Did You Ever.mp3 +Dance/E-Z Rollers - Walk this Land.mp3 +Dance/Jorja Smith - The One.mp3 +Dance/Jus Say Hi ft Mangaliso asi.mp3 +Dance/Off the Beaten Track.mp3 +Dance/Rendezvous At Two - Play With Me [Lyrics on screen].mp3 +Dance/soulchef.mp3 +Dance/Toxic.mp3 +Dance/Weakness.mp3 +Dance/With or Without.mp3 +Dance/Yummy.mp3 +Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 1/04. Alicia Keys - If I Ain't Got You.mp3 +Dance/Alicia Keys/Alicia Keys - Greatest Hits/CD 2/03. Alicia Keys - Rock Wit U.mp3 +Dance/Alicia Keys/Alicia Keys - The Element Of Freedom (Deluxe) CDRip 2009/Alicia Keys - 03 - Doesn't Mean Anything.mp3 +HipHop/BadBoysForLife/01. Uptown II.mp3 +HipHop/BadBoysForLife/02. Money Fight.mp3 +HipHop/BadBoysForLife/03. RITMO (Bad Boys For Life).mp3 +HipHop/BadBoysForLife/04. Future Bright.mp3 +HipHop/BadBoysForLife/05. Bad Moves.mp3 +HipHop/BadBoysForLife/06. Muévelo.mp3 +HipHop/BadBoysForLife/07. Damn I Love Miami.mp3 +HipHop/BadBoysForLife/08. The Hottest.mp3 +HipHop/BadBoysForLife/10. RITMO (Bad Boys For Life) (Remix).mp3 +Dance/Cardi B & Bruno Mars - Please Me (Official Audio).mp3 +Dance/Little Mix - Woman Like Me (Official Video) ft. Nicki Minaj.mp3 +Dance/STORMZY - OWN IT (feat. ED SHEERAN & BURNA BOY).mp3 +Dance/Usher - Nice & Slow (Official Video).mp3 diff --git a/.config/mpd/playlists/radio5live.m3u b/.config/mpd/playlists/radio5live.m3u new file mode 100644 index 0000000..1fc5dbc --- /dev/null +++ b/.config/mpd/playlists/radio5live.m3u @@ -0,0 +1 @@ +http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio5live_mf_p diff --git a/.config/mpd/playlists/talksport.m3u b/.config/mpd/playlists/talksport.m3u new file mode 100644 index 0000000..6872af4 --- /dev/null +++ b/.config/mpd/playlists/talksport.m3u @@ -0,0 +1 @@ +http://webradio.radiomonitor.com/stream/talksport diff --git a/.config/mpd/playlists/training.m3u b/.config/mpd/playlists/training.m3u new file mode 100644 index 0000000..749899b --- /dev/null +++ b/.config/mpd/playlists/training.m3u @@ -0,0 +1,445 @@ +Rock/Disturbed/Sickness/1 - Disturbed - Voices .mp3 +Rock/Disturbed/Sickness/2 - Disturbed - The Game .mp3 +Rock/Disturbed/Sickness/3 - Disturbed - Stupify .mp3 +Rock/Disturbed/Sickness/4 - Disturbed - Down With The Sickness .mp3 +Rock/Disturbed/Sickness/5 - Disturbed - Violence Fetish .mp3 +Rock/Disturbed/Sickness/6 - Disturbed - Fear .mp3 +Rock/Disturbed/Sickness/7 - Disturbed - Numb .mp3 +Rock/Disturbed/Sickness/8 - Disturbed - Want .mp3 +Rock/Disturbed/Sickness/9 - Disturbed - Conflict .mp3 +Rock/Disturbed/Sickness/10 - Disturbed - Shout 2000 .mp3 +Rock/Disturbed/Sickness/11 - Disturbed - Droppin' Plates .mp3 +Rock/Disturbed/Sickness/12 - Disturbed - Meaning Of Life .mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 01 - Sinner.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 02 - Bodies.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 03 - Tear Away.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 04 - All Over Me.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 05 - Reminded.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 06 - Pity.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 07 - Mute.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 08 - I Am.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 09 - Follow.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 10 - Told You So.mp3 +Rock/DrowningPool/Sinner/Drowning Pool - Sinner - 11 - Sermon.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/01-limp_bizkit-counterfeit.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/02-limp_bizkit-faith.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/03-limp_bizkit-nookie.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/04-limp_bizkit-break_stuff.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/05-limp_bizkit-re-arranged.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/06-limp_bizkit-take_a_look_around.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/07-limp_bizkit-rollin_(air_raid_vehicle).mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/08-limp_bizkit-my_way.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/09-limp_bizkit-eat_you_alive.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/10-limp_bizkit-behind_blue_eyes.mp3 +Rock/Limp_Bizkit-Icon-2011-H3X/11-limp_bizkit-the_truth.mp3 +HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3 +HipHop/Eminem/Recovery/02. Talkin' 2 Myself - Eminem.mp3 +HipHop/Eminem/Recovery/03. On Fire - Eminem.mp3 +HipHop/Eminem/Recovery/04. Won't Back Down ft. Pink - Eminem.mp3 +HipHop/Eminem/Recovery/05. W.T.P. - Eminem.mp3 +HipHop/Eminem/Recovery/06. Going Through Changes - Eminem.mp3 +HipHop/Eminem/Recovery/07. Not Afraid - Eminem.mp3 +HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3 +HipHop/Eminem/Recovery/09. No Love ft. Lil Wayne - Eminem.mp3 +HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3 +HipHop/Eminem/Recovery/11. Cinderella Man - Eminem.mp3 +HipHop/Eminem/Recovery/12. 25 To Life - Eminem.mp3 +HipHop/Eminem/Recovery/13. So Bad - Eminem.mp3 +HipHop/Eminem/Recovery/14. Almost Famous - Eminem.mp3 +HipHop/Eminem/Recovery/15. Love The Way You Lie ft. Rihanna - Eminem.mp3 +HipHop/Eminem/Recovery/16. You're Never Over - Eminem.mp3 +HipHop/Eminem/Recovery/17. Untitled - Eminem.mp3 +HipHop/Eminem/Recovery/01. Cold Wind Blows - Eminem.mp3 +HipHop/Eminem/Recovery/02. Talkin' 2 Myself - Eminem.mp3 +HipHop/Eminem/Recovery/03. On Fire - Eminem.mp3 +HipHop/Eminem/Recovery/04. Won't Back Down ft. Pink - Eminem.mp3 +HipHop/Eminem/Recovery/05. W.T.P. - Eminem.mp3 +HipHop/Eminem/Recovery/06. Going Through Changes - Eminem.mp3 +HipHop/Eminem/Recovery/07. Not Afraid - Eminem.mp3 +HipHop/Eminem/Recovery/08. Seduction - Eminem.mp3 +HipHop/Eminem/Recovery/09. No Love ft. Lil Wayne - Eminem.mp3 +HipHop/Eminem/Recovery/10. Space Bound - Eminem.mp3 +HipHop/Eminem/Recovery/11. Cinderella Man - Eminem.mp3 +HipHop/Eminem/Recovery/12. 25 To Life - Eminem.mp3 +HipHop/Eminem/Recovery/13. So Bad - Eminem.mp3 +HipHop/Eminem/Recovery/14. Almost Famous - Eminem.mp3 +HipHop/Eminem/Recovery/15. Love The Way You Lie ft. Rihanna - Eminem.mp3 +HipHop/Eminem/Recovery/16. You're Never Over - Eminem.mp3 +HipHop/Eminem/Recovery/17. Untitled - Eminem.mp3 +HipHop/BadBoysForLife/01. Uptown II.mp3 +HipHop/BadBoysForLife/02. Money Fight.mp3 +HipHop/BadBoysForLife/03. RITMO (Bad Boys For Life).mp3 +HipHop/BadBoysForLife/04. Future Bright.mp3 +HipHop/BadBoysForLife/05. Bad Moves.mp3 +HipHop/BadBoysForLife/06. Muévelo.mp3 +HipHop/BadBoysForLife/07. Damn I Love Miami.mp3 +HipHop/BadBoysForLife/08. The Hottest.mp3 +HipHop/BadBoysForLife/09. Murda She Wrote.mp3 +HipHop/BadBoysForLife/10. RITMO (Bad Boys For Life) (Remix).mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/01 Y U Mad (feat. Megan Thee Stallio.mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/02 Out in Space (feat. Quavo).mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/03 Still Wiz.mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/04 Bammer (feat. Mustard).mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/05 Contact (feat. Tyga).mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/06 Clouds in the Air (feat. K CAMP).mp3 +HipHop/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/Wiz Khalifa - The Saga of Wiz Khalifa Rap Hip-Hop Album (2020) [320] kbps Beats⭐/07 High Today (feat. Logic).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_01_.C.R.E.A.M_.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_02_.Method_Man_(Skunk_Mix).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_03_.Protect_Ya_Neck_(Bloody_Version).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_04_.Wu-Tang_Clan_Aint_Nuthing_Ta_F_Wit.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_05_.Can_It_Be_All_So_Simple.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_06_.Shame_On_A_Nigga.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_07_.Da_Mystery_Of_Chessboxin.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_08_.Reunited.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_09_.Its_Yourz.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_10_.Triumph_(feat._Cappadonna).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_11_.Gravel_Pit.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_12_.Protect_Ya_Neck_(The_Jump_Off).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_13_.Sucker_M.C.s.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_14_.Uzi_(Pinky_Ring).mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_15_.Shaolin_Worldwide.mp3 +HipHop/Wu-Tang_Clan/Wu-Tang_Clan_-_Legend_Of_The_Wu-Tang_Clan_Greatest_Hits_-_16_.Diesel_(feat._RZA,_Method_Man,_U-God,_Raekwon_Ol_Dirty).mp3 +HipHop/06.EndOfTheRoad.mp3 +HipHop/26_TheBangers.mp3 +HipHop/50 Cent - Big Rich Town (feat. Joe).mp4 +HipHop/Rakim/Rakim Watch This (Prod Domingo) (DotGotIt.com).mp3 +HipHop/Rakim/Rakim-Bring It On.mp3 +HipHop/Rakim/classic_rmx[2].mp3 +HipHop/Rakim/12_20_2013_Rakim_-_Madiba__Nelson_Mandela_Tribute_.mp3 +HipHop/Rakim/artist - Cold feeling.mp3 +HipHop/Rakim/07 - New_York_To_Cali_(Produced_By_Clark_Kent).mp3 +HipHop/Rakim/02 - Hypnotic.mp3 +HipHop/Rakim/artist - The 18th letter.mp3 +HipHop/Rakim/artist - Shades of black.mp3 +HipHop/Rakim/artist - Remember that.mp3 +HipHop/Rakim/artist - The saga begins.mp3 +HipHop/Rakim/artist - Stay a while.mp3 +HipHop/Rakim/artist - The mystery (who is God).mp3 +HipHop/Rakim/artist - When i'm flowin.mp3 +HipHop/Rakim/Rakim - Track 26.mp3 +HipHop/Rakim/Eric B. & Rakim - What's on Your Mind-.mp3 +HipHop/Rakim/Eric B. & Rakim - Pass the Hand Grenade.mp3 +HipHop/Rakim/Eric B. & Rakim - The Punisher.mp3 +HipHop/Rakim/Eric B. & Rakim - Relax With Pep.mp3 +HipHop/Rakim/Eric B. & Rakim - What's Going On-.mp3 +HipHop/Rakim/Eric B. & Rakim - Know the Ledge.mp3 +HipHop/Rakim/Eric B. & Rakim - Don't Sweat the Technique.mp3 +HipHop/Rakim/Eric B. & Rakim - Kick Along.mp3 +HipHop/Rakim/Eric B. & Rakim - Follow the Leader.mp3 +HipHop/Rakim/Eric B. & Rakim - Microphone Fiend.mp3 +HipHop/Rakim/Eric B. & Rakim - Lyrics of Fury.mp3 +HipHop/Rakim/Eric B. & Rakim - Put Your Hands Together.mp3 +HipHop/Rakim/Eric B. & Rakim - No Competition.mp3 +HipHop/Rakim/Eric B. & Rakim - Musical Massacre.mp3 +HipHop/Rakim/artist - Heat it up.mp3 +HipHop/Rakim/Eric B. & Rakim - Let the Rhythm Hit 'Em.mp3 +HipHop/Rakim/Eric B. & Rakim - No Omega.mp3 +HipHop/Rakim/Eric B. & Rakim - In the Ghetto.mp3 +HipHop/Rakim/Eric B. & Rakim - Step Back.mp3 +HipHop/Rakim/Eric B. & Rakim - Untouchables.mp3 +HipHop/Rakim/Eric B. & Rakim - Keep 'Em Eager to Listen.mp3 +HipHop/Rakim/Eric B. & Rakim - Set 'Em Straight.mp3 +HipHop/Rakim/01-rakim_ft._kelly_price-light_em_up-chr.mp3 +HipHop/Rakim/01. Rakim - Milk & Honey.mp3 +HipHop/Rakim/12. Rakim - Man with a Gun.mp3 +HipHop/Rakim/Eric B. & Rakim - I Ain't No Joke.mp3 +HipHop/Rakim/Eric B. & Rakim - I Know You Got Soul.mp3 +HipHop/Rakim/Eric B. & Rakim - Move the Crowd.mp3 +HipHop/Rakim/Eric B. & Rakim - Paid in Full.mp3 +HipHop/Rakim/Eric B. & Rakim - As the Rhyme Goes On.mp3 +HipHop/Rakim/artist - It's been a long time.mp3 +HipHop/Rakim/artist - Guess who's back.mp3 +HipHop/Rakim/01-rakim-hip_hop.mp3 +HipHop/Rakim/02-rakim-love_4_sale.mp3 +HipHop/Rakim/03-rakim-word_on_the_street.mp3 +HipHop/Rakim/artist - Uplift.mp3 +HipHop/Rakim/Rakim - Flow Forever.mp3 +HipHop/Rakim/Rakim - When I B on Tha Mic.mp3 +HipHop/Rakim/Rakim - Finest Ones [Featuring Clark Kent].mp3 +HipHop/Rakim/Rakim - All Night Long.mp3 +HipHop/Rakim/Rakim - I Know.mp3 +HipHop/Rakim/Rakim - It's the R.mp3 +HipHop/Rakim/Rakim - Real Shit.mp3 +HipHop/Rakim/Rakim - How I Get Down.mp3 +HipHop/Rakim/Rakim - Strong Island.mp3 +HipHop/Rakim/Rakim - Waiting for the World to End.mp3 +HipHop/Rakim/Rakim - We'll Never Stop [Featuring Connie McKendrick].mp3 +HipHop/Rakim/04 Man Above ft. Tracey Horton.mp3 +HipHop/Rakim/06 Won't Be Long ft. Tracey Horton.mp3 +HipHop/Rakim/07 Holy Are U.mp3 +HipHop/Rakim/08 Satisfaction Guaranteed.mp3 +HipHop/Rakim/09 Working For You.mp3 +HipHop/Rakim/10 Message In The Song ft. Destiny Griffin.mp3 +HipHop/Rakim/11 Put It All To Music.mp3 +HipHop/Rakim/13 Still In Love.mp3 +HipHop/Rakim/14 Dedicated.mp3 +HipHop/Rakim/Rakim-02-Once_Upon_A_Rhyme-gtp.mp3 +HipHop/Rakim/Rakim-04-How_Im_Livin-gtp.mp3 +HipHop/Rakim/Rakim-05-Tryin_Ta_Write_Rhymes-gtp.mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/01 - Cuz I'm Jazzy (ft. Slum Village).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/02 - State of Clarity (ft. Common & Bob James).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/03 - Stand Up [Some Things'll Never Change] (ft. Damian Marley).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/04 - Look to the Sun [Solar].mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/05 - Connection (ft. Kem).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/06 - Fine and Free (ft. Vivian Green).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/07 - Wait on Me (ft. Raheem DeVaughn).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/08 - International (ft. Bobby Valentino).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/09 - This is Art (ft. Ronnie Laws).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/10 - Fly Magnetic (ft. Dionne Farris).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/11 - The Jazz Style (ft. Omar).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/12 - Follow the Signs (ft. Shelley Harland).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/13 - Universal Struggle (ft. Brownman).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/14 - Infinite (ft. Blackalicious).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/15 - Kissed the World (ft. Caron Wheeler).mp3 +HipHop/Guru - Jazzmatazz Vol. 4 - The Hip Hop Jazz Messenger - Back to the Future 2007_/16 - Living Legend (ft. David Sanborn).mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 01 Intro.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 02 Dedicated [#].mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 03 Nickel Bags.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 04 Jettin'.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 05 Where I'm From [#][Remix].mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 06 Three Slim's Dynamite [#].mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 07 Dog It.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 08 Rebirth of Slick (Cool Like Dat).mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 09 Dial 7 (Axioms of Creamy Spies).mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 10 Graffiti.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 11 Pacifics.mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 12 9th Wonder (Blackitolism) [#][Elaine Brown Mix].mp3 +HipHop/Digable Planets/Digable Planets Beyond the Spectrum- The Creamy Spy Chronicles 13 Where I'm From [LP Version].mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/01. Eye Know.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/02. Say No Go.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/03. En Focus.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/04. Me Myself and I (LP Version).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/05. Buddy (with Jungle Brothers and Q-Tip from A Tribe Called Quest).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/06. Ring Ring Ring (Ha Ha Hey).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/07. Roller Skating Jam 'Named Saturdays'.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/08. Jenifa Taught Me (Derwin's Revenge).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/09. Breakadawn.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/10. Keepin' the Faith.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/11. Thru Ya City.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/12. Simply.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/13. Watch Out.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/14. Held Down (featuring Cee-Lo).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/15. Millie Pulled A Pistol On Santa.mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/16. Copa (Cabanga).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/17. Baby Phat (featuring Devin the Dude + E. Yummy Bingham).mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/18. Oooh..mp3 +HipHop/De La Soul/Compilations/2001 - Timeless Australian Release 2003/2001 - Timeless Australian Release 2003/19. All Good_ (featuring Chaka Khan).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/12. Stakes Is High (DJ Spinna - Original Vocal).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/13. Me Myself And I (Badmarsh + Shri Remix).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/01. Stakes Is High (Remix).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/02. Oodles Of O's.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/03. Trouble In The Water.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/04. I.C. Y'All.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/05. Big Brother Beat.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/06. More Than U Know.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/07. Sweet Dreams (Clean Version).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/08. The Magic Number.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/09. Potholes In My Lawn (Live, 1996).mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/10. The Hustle.mp3 +HipHop/De La Soul/Compilations/2004 - De La Mix Tape Remixes, Rarities and Classics @ 192/2004 - De La Mix Tape Remixes, Rarities and Classics/11. Itz Soweezee (Hot) (De La Remix).mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/01. Impossible Intro.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/02. Live @ the Dugout 87'.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/03. Voodoo Circus.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/04. Friends.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/05 - What the fx@k #1.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/06. Go out and get it.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/07. Respect.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/08. Beef.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/09. Reverse your steps.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/10. You got it.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/11. What the fx@k #2.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/12. Just Havin A Ball.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/13. What if.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/14. Relax.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/15. Wasn't For You.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/16 - The Corner.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/17. Freestyle (Dat Shxt) 2006.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/18. What the fx@k #3.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/19. Freedom Train.mp3 +HipHop/De La Soul/Compilations/2006 - The Impossible Mission TV Series - Pt. 1/2006 - The Impossible Mission TV Series - Pt. 1/20. Live in Tokyo.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/01. Me Myself And I.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/02. Say No Go.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/03. Jenifa Taught Me (Derwin's Revenge).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/04. Buddy (Feat Jungle Bros Q-Tip And Phife).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/05. Ring Ring Ring (Ha Ha Hey).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/06. Keepin The Faith.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/07. Breakadawn.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/08. In The Woods (Feat Shortie).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/09. Ego Trippin (Part 2).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/10. 4 More (Feat Zhane).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/11. The Bizness (Feat Common).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/12. Stakes Is High.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/13. Long Islands Degrees.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/14. All Good (Feat Chaka Khan).mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/15. Baby Phat.mp3 +HipHop/De La Soul/Compilations/2007 - The Platinum Collection @ 192/2007 - The Platinum Collection/16. Oooh (Feat Redman).mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/01. In the Woods.mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/02. I Am I Be.mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/03. Sh.Fe.Mcs.mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/04. Patti Dooke.mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/05. I Be Blowin'.mp3 +HipHop/De La Soul/extended plays/1994 - Clear Lake Audiotorium EP @ 192/1994 - Clear Lake Audiotorium EP/06. Stix & Stonz.mp3 +HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/01. The Grind Date (Wale Oyejid Remix).mp3 +HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/02. Do the Damn Thang.mp3 +HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/03. Stay Away Ft. Pete Rock and Rob-O.mp3 +HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/04. Hold Tight.mp3 +HipHop/De La Soul/extended plays/2004 - Days Off EP @ 192/2004 - Days Off EP/05. The Grind Date (Inhumanz Mash-Up).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/01. Intro.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/02. The Magic Number.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/03. Change In Speak.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/04. Cool Breeze On The Rocks.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/05. Can U Keep A Secret.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/06. Jenifa Taught Me (Derwin's Revenge).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/07. Ghetto Thang.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/08. Transmitting Live From Mars.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/09. Eye Know.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/10. Take It Off.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/11. A Little Bit Of Soap.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/12. Tread Water.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/13. Potholes In My Lawn.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/14. Say No Go.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/15. Do As De La Does.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/16. Plug Tunin (Last Chance To Comprehend).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/17. De La Orgee.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/18. Buddy Feat. The Jungle Brothers & Q-Tip.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/19. Description.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/20. Me Myself And I.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/21. This Is A Recording 4 Living In A Fulltime Era (L.I.F.E.).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/22. I Can Do Anything (Delacratic).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/23. D.A.I.S.Y. Age.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Album/24. Plug Tunin.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/01. Freedom Of Speak (We Got Three Minutes).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/02. Strickly Dan Stuckle.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/03. Jenifa (Taught Me) (12' Version).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/04. Skip To My Loop.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/05. Potholes In My Lawn (12' Version).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/06. Me Myself And I (OBLAPOS MODE).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/07. Ain't Hip To Be Labeled A Hippie.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/08. What's More (From The Soundtrack To Hell On 1st Ave).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/09. Brain Washed Follower.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/10. Say No Go (New Keys Vocal).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/11. The Mack Daddy On The Left.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/12. Double Huey Skit.mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/13. Ghetto Thang (Ghetto Ximer).mp3 +HipHop/De La Soul/studio/1989 - 3 Feet High and Rising/Bonus/14. Eye Know (The Know It All Mix).mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/01. Intro.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/02. Oodles Of O's.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/03. Talkin' Bout Hey Love.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/04. Pease Porridge.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/05. Skit 1.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/06. Johnny's Dead Aka Vincent Mason (live from the BK lounge).mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/07. A Roller Skating Jam Named 'Saturdays'.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/08. WRMS' Dedication To The Bitty.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/09. Bitties In The BK Lounge.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/10. Skit 2.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/11. My Brother's A Basehead.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/12. Let, Let Me In.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/13. Afro Connections At A Hi 5 (In The Eye Of The Hoodlum).mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/14. Rap De Rap Show.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/15. Millie Pulled A Pistol On Santa.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/16. Who Do U Worship.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/17. Skit 3.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/18. Kicked Out The House.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/19. Pass The Plugs.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/20. Not Over Till The Fat Lady Plays The Demo.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/21. Ring Ring Ring (Ha Ha Hey).mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/22. WRMS- Cat's In Control.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/23. Skit 4.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/24. Shwingalokate.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/25. Fanatic Of The B Word.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/26. Keepin' The Faith.mp3 +HipHop/De La Soul/studio/1991 - De La Soul Is Dead/27. Skit 5.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/01. Intro.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/02. Eye Patch.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/03. En Focus.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/04. Patti Dooke.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/05. I Be Blowin'.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/06. Long Island Wildin'.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/07. Ego Trippin' [Part Two].mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/08. Paul's Revenge.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/09. 3 Days Later.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/10. Area.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/11. I Am I Be.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/12. In The Woods.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/13. Breakadawn.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/14. Dave Has A Problem...Seriously.mp3 +HipHop/De La Soul/studio/1993 - Buhloone Mindstate/15. Stone Age.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/01. Intro.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/02. Supa Emcees.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/03. The Bizness feat. Common.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/04. Wonce Again Long Island.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/05. Dinninit.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/06. Brakes.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/07. Dog Eat Dog.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/08. Baby Baby Baby Baby Ooh Baby.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/09. Long Island Degrees.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/10. Betta Listen.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/11. Itzsoweeze (HOT).mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/12. 4 More feat. Zhane.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/13. Big Brother Beat feat. Mos Def.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/14. Down Syndrome.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/15. Pony Ride feat. Truth Enola.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/16. Stakes Is High.mp3 +HipHop/De La Soul/studio/1996 - Stakes Is High/1996 - Stakes Is High/17. Sunshine.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/01. SPITKICKER.COM (Say R.).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/02. U Can Do (Life).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/03. My Writes (feat. Tash & J-Ro of Tha Liks and Xzibit).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/04. Ooh (feat. Redman).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/05. Thru Ya City (feat. D.V. Alias Khrist).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/06. I. C. Y'all (feat. Busta Rhymes).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/07. View.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/08. Set the Mood (feat. Indeed).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/09. All Good (feat. Chaka Khan).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/10. Declaration.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/11. Squat! (feat. Mike D & Ad Rock of The Beastie Boys).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/12. Words from the Chief Rocker.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/13. With Me.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/14. Copa (Cabanga).mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/15. Foolin'.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/16. The Art of Getting Jumped.mp3 +HipHop/De La Soul/studio/2000 - AOI Mosaic Thump/2000 - AOI Mosaic Thump/17. U Don't Wanna B.D.S. (feat. Freddie Foxxx).mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/01. Intro.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/02. Bionix.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/03. Baby Phat Ft. Devin the Dude & Elizabeth 'Yummy' Bingham.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/04. Simply.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/05. Simply Havin.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/06. Held Down Ft. Cee-Lo.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/07. Reverend Do Good #1.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/08. Watch Out Ft. Jose 'Perico' Hernandez.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/09. Special Ft. Elizabeth 'Yummy' Bingham.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/10. Reverend Do Good #2.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/11. The Sauce Ft. Philly Black.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/12. Am I Worth You Ft. Glenn Lewis.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/13. Pawn Star Ft. Shell Council.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/14. What We Do (For Love) Ft. Slick Rick.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/15. Reverend Do Good #3.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/16. Peer Pressure.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/17. It's American.mp3 +HipHop/De La Soul/studio/2001 - AOI Bionix/2001 - AOI Bionix/18. Trying People.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/01. Maseo Intro.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/02. Breakadawn.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/03. Supa Emcees.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/04. Potholes in My Lawn.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/05. Big Brother Beat Ft Mos Def.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/06. Me Myself and I.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/07. Shwingalokate.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/08. Ego Trippin Part Two.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/09. Oodles of O's.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/10. The Bitch in You Ft Common.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/11. The Bizness Ft Common.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/12. Itzsoweezee (Hot).mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/13. Buddy Ft Jungle Bros.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/14. Stakes is High.mp3 +HipHop/De La Soul/studio/2004 - Live at Tramps, NYC, 1996 @ 192/2004 - Live at Tramps, NYC, 1996/15. Goodbyes.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/01. The Future.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/02. Verbal Clap.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/03. Much More.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/04. Shopping Bags (She Got From You).mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/05. The Grind Date.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/06. Church.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/07. It's Like That.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/08. He Comes.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/09. Days of Our Lives.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/10. Come On Down.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/11. No.mp3 +HipHop/De La Soul/studio/2004 - The Grind Date/2004 - The Grind Date/12. Rock Co.kane Flow.mp3 diff --git a/.config/mpd/state b/.config/mpd/state new file mode 100644 index 0000000..4c71d00 --- /dev/null +++ b/.config/mpd/state @@ -0,0 +1,89 @@ +sw_volume: 98 +audio_device_state:1:My Pulse Output +audio_device_state:1:toggle_visualiser +state: pause +current: 42 +time: 41.309000 +random: 1 +repeat: 0 +single: 0 +consume: 0 +crossfade: 0 +mixrampdb: 0.000000 +mixrampdelay: -1.000000 +playlist_begin +0:Classical/Classics Collection/01 - Beethoven - Symphony No. 5.mp3 +1:Classical/Classics Collection/02 - Beethoven - Fur Elise.mp3 +2:Classical/Classics Collection/03 - Beethoven - Moonlight.mp3 +3:Classical/Classics Collection/04 - Vavaldi - The Four Seasons.mp3 +4:Classical/Classics Collection/05 - Tchaikovsky - 1812.mp3 +5:Classical/Classics Collection/06 - Tchaikovsky - Swan Lake.mp3 +6:Classical/Classics Collection/07 - Tchaikovsky - Nutcracker Suite.mp3 +7:Classical/Classics Collection/08 - Chopin - Funeral March.mp3 +8:Classical/Classics Collection/09 - Handel - Music For The Royal Fireworks.mp3 +9:Classical/Classics Collection/10 - J.S. Bach - Toccata and Fugue.mp3 +10:Classical/Classics Collection/11 - Mendelssohn - Wedding March.mp3 +11:Classical/Classics Collection/12 - Mozart - Eine Klein Nachtmusik.mp3 +12:Classical/Classics Collection/13 - Tchaikovsky - Piano Concerto No.1.mp3 +13:Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- I. Adagio molto - Allegro con brio.mp3 +14:Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- II. Andante cantibile con moto.mp3 +15:Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- III. Menuetto- Allegro molto e vivace.mp3 +16:Classical/Beethoven-All Symphonies/Symphony No. 1/Symphony 1- IV. Adagio - Allegro molto e vivace.mp3 +17:Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 II in D major, op.36- Adagio molto - Allegro con brio.mp3 +18:Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 IV in D major, op.36- Larghetto.mp3 +19:Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 I in D major, op.36- Scherzo (Allegro).mp3 +20:Classical/Beethoven-All Symphonies/Symphony No. 2/Symphony no.2 III in D major, op.36- Allegro molto.mp3 +21:Classical/Beethoven-All Symphonies/Symphony No. 3/Prometheus Overture, Op.43.mp3 +22:Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 II In E Flat Major, Op.55- Allegro con brio.mp3 +23:Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 IV In E Flat Major, Op.55- Marcia funebre. Adagio assai.mp3 +24:Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 I In E Flat Major, Op.55- Scherzo. Allegro vivace.mp3 +25:Classical/Beethoven-All Symphonies/Symphony No. 3/Symphony No.3 III In E Flat Major, Op.55- Finale. Allegro molto - Poco andante - Presto.mp3 +26:Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - I Adagio - Allegro vivace, Symphony No. 4 in Bb Major.mp3 +27:Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - II Adagio, Symphony No. 4 in Bb Major.mp3 +28:Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - III Allegro vivace - Trio-Un poco meno Allergo, Symphony No. 4 in Bb Major.mp3 +29:Classical/Beethoven-All Symphonies/Symphony No. 4/Op. 60 - IV Allegro ma non troppo, Symphony No. 4 in Bb Major.mp3 +30:Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - I Allegro con brio, Symphony No. 5 in C minor.mp3 +31:Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - II Andante con moto, Symphony No. 5 in C minor.mp3 +32:Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - III Allegro, Symphony No. 5 in C minor.mp3 +33:Classical/Beethoven-All Symphonies/Symphony No. 5/Op. 21 - IV Allegro - Presto, Symphony No. 5 in C minor.mp3 +34:Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- I. Awakening of happy feelings on arriving in the country.mp3 +35:Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- II. Scene by the brook.mp3 +36:Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- III. Merry gathering of the country folk.mp3 +37:Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- IV. Storm and Tempest.mp3 +38:Classical/Beethoven-All Symphonies/Symphony No. 6/Symphony 6- V. Shepherds' Song- Happy and thankful feelings after the storm.mp3 +39:Classical/Beethoven-All Symphonies/Symphony No. 7/Coriolan Overture, Op.62.mp3 +40:Classical/Beethoven-All Symphonies/Symphony No. 7/Egmont Overture, Op.84.mp3 +41:Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- I. Poco sostenuto - Vivace.mp3 +42:Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- II. Allegretto.mp3 +43:Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- III. Presto - Assai meno presto.mp3 +44:Classical/Beethoven-All Symphonies/Symphony No. 7/Symphony No.7 in A major, Op.92- IV. Allegro con brio.mp3 +45:Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegro vivace e con brio.mp3 +46:Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegretto scherzando.mp3 +47:Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Tempo di Menuetto.mp3 +48:Classical/Beethoven-All Symphonies/Symphony No. 8/Symphony no.8 in F major, op.93- Allegro vivace.mp3 +49:Classical/Beethoven-All Symphonies/Symphony No. 9/01 - Choral I. Allegro Ma Non Troppo, Un Poco Maestoso.mp3 +50:Classical/Beethoven-All Symphonies/Symphony No. 9/02 - Choral II. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +51:Classical/Beethoven-All Symphonies/Symphony No. 9/03 - Choral III. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +52:Classical/Beethoven-All Symphonies/Symphony No. 9/04 - Choral IV. Molto Vivace - Presto - Molto Vivace - Presto.mp3 +53:Classical/Beethoven-All Symphonies/Symphony No. 9/05 - Adagio Molto E Cantabile - Andante Moderato - Tempo I - Andant.mp3 +54:Classical/Beethoven-All Symphonies/Symphony No. 9/06 - Presto - Allegro Ma Non Troppo - Tempo I - Vivace - Tempo I - Adagio Cantabile - Tempo I.mp3 +55:Classical/Beethoven-All Symphonies/Symphony No. 9/07 - Presto - Recitativo - Allegro Assai.mp3 +56:Classical/Beethoven-All Symphonies/Symphony No. 9/08 - Allegro Assai Vivace. Alla Marcia.mp3 +57:Classical/Beethoven-All Symphonies/Symphony No. 9/09 - Andante Maestoso - Adagio Ma Non Troppo, Ma Divoto.mp3 +58:Classical/Beethoven-All Symphonies/Symphony No. 9/10 - Allegro Energico, Sempre Ben Marcato.mp3 +59:Classical/Beethoven-All Symphonies/Symphony No. 9/11 - Allegro Ma Non Tanto - Poco Adagio - Tempo I - Poco Adagio.mp3 +60:Classical/Beethoven-All Symphonies/Symphony No. 9/12 - Poco Allegro, Stringendo Il Tempo, Sempre Piu Allegro - Prestissimo.mp3 +61:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/01 - Pietro Mascagni - Cavalleria rusticana - Prelude, O Lola ch'hai di latti la cammisa.mp3 +62:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/02 - Pietro Mascagni - Cavalleria rusticana - Il Cavallo Scalpita.mp3 +63:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/03 - Pietro Mascagni - Cavalleria rusticana - Regina Coeli...Inneggiamo il signor non-e morto.mp3 +64:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/04 - Pietro Mascagni - Cavalleria rusticana - Voi lo sapete, O Mamma.mp3 +65:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/05 - Pietro Mascagni - Cavalleria rusticana - Santuzza's Tearful Pleas.mp3 +66:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/06 - Pietro Mascagni - Cavalleria rusticana - Intermezzo.mp3 +67:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/07 - Pietro Mascagni - Cavalleria rusticana - Viva il vino spumeggiante.mp3 +68:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/08 - Ruggero Leoncavallo - Pagliacci - Prologue.mp3 +69:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/09 - Ruggero Leoncavallo - Pagliacci - Si Puo- Si Puo.mp3 +70:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/10 - Ruggero Leoncavallo - Pagliacci - Qual Fiamma avea nel guardo.mp3 +71:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/11 - Ruggero Leoncavallo - Pagliacci - E Allor perche, di, tu m'hai stragato.mp3 +72:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/12 - Ruggero Leoncavallo - Pagliacci - Vesti la giubba.mp3 +73:Classical/Mascagni - Cavalleria Rusticana ; Leoncavallo - I Pagliacci/13 - Ruggero Leoncavallo - Pagliacci - No, Pagliaccio non son...slavvia, casi tembile.mp3 +playlist_end diff --git a/.config/mpd/sticker.sql b/.config/mpd/sticker.sql Binary files differnew file mode 100644 index 0000000..e884246 --- /dev/null +++ b/.config/mpd/sticker.sql diff --git a/.config/mps-youtube/.cache_py_3.7.3 b/.config/mps-youtube/.cache_py_3.7.3 Binary files differnew file mode 100644 index 0000000..43f6ad5 --- /dev/null +++ b/.config/mps-youtube/.cache_py_3.7.3 diff --git a/.config/mps-youtube/.cache_py_3.8.0 b/.config/mps-youtube/.cache_py_3.8.0 Binary files differnew file mode 100644 index 0000000..a92466b --- /dev/null +++ b/.config/mps-youtube/.cache_py_3.8.0 diff --git a/.config/mps-youtube/cache_py_3.8.0 b/.config/mps-youtube/cache_py_3.8.0 Binary files differnew file mode 100644 index 0000000..633bb58 --- /dev/null +++ b/.config/mps-youtube/cache_py_3.8.0 diff --git a/.config/mps-youtube/config b/.config/mps-youtube/config Binary files differnew file mode 100644 index 0000000..aacdee5 --- /dev/null +++ b/.config/mps-youtube/config diff --git a/.config/mps-youtube/config.json b/.config/mps-youtube/config.json new file mode 100644 index 0000000..8599ec8 --- /dev/null +++ b/.config/mps-youtube/config.json @@ -0,0 +1,33 @@ +{ + "ORDER": "relevance", + "USER_ORDER": "", + "MAX_RESULTS": 19, + "CONSOLE_WIDTH": 80, + "MAX_RES": 2160, + "PLAYER": "mpv", + "PLAYERARGS": "", + "ENCODER": 0, + "NOTIFIER": "", + "CHECKUPDATE": false, + "SHOW_MPLAYER_KEYS": true, + "FULLSCREEN": false, + "SHOW_STATUS": true, + "COLUMNS": "", + "DDIR": "/home/archlinux/vgg/dwhelper", + "OVERWRITE": true, + "SHOW_VIDEO": false, + "SEARCH_MUSIC": false, + "WINDOW_POS": "", + "WINDOW_SIZE": "", + "DOWNLOAD_COMMAND": "", + "LASTFM_USERNAME": "", + "LASTFM_PASSWORD": "", + "LASTFM_API_KEY": "", + "LASTFM_API_SECRET": "", + "AUDIO_FORMAT": "auto", + "VIDEO_FORMAT": "auto", + "API_KEY": "AIzaSyBvw1flyrzeev0ikw1ZUPy2qqADJtAT8YA", + "AUTOPLAY": false, + "SET_TITLE": true, + "MPRIS": true +} diff --git a/.config/mps-youtube/input_history b/.config/mps-youtube/input_history new file mode 100644 index 0000000..bff7b9e --- /dev/null +++ b/.config/mps-youtube/input_history @@ -0,0 +1,530 @@ +set +set ddir /home/opensuse/vgg/dwhelper +user hak5 +quit +exit +quit +exit +? +h +help search +url https://www.youtube.com/watch?v=xRJfqyScIUQ +1 +help +help tips +set player mpv +url https://www.youtube.com/watch?v=xRJfqyScIUQ +1 +help search +help +help basic +help +help config +exit +1 +help +help config +set +set show_video true +url https://www.youtube.com/watch?v=xRJfqyScIUQ +1 +q +h search +user gotbletu / disk mount +user gotbletu +set search_music False +user gotbletu +user gotbletu / disk mount +2 +5 +q +//python curses +//Python-curses +1 +d 2-20 +h +h dow +dv 2-20 +exit +hel +h +dow +h dow +set +exit +/user JT Van V /Am I too old +d 1 +16 +5 +1 +d 1 +23 +exit +/Alex\ Pandrea Every Magician NEEDS to learn this card force CORRECTLY! - MAGIC TUTORIAL +1 +d 1 +22 +q +/Luke\ Smith LaTeX +d 5,14 +h +dow +h dow +/Luke\ Smith LaTeX +dv 5,14 +q +/Luke\ Smith LaTeX +5 +d 5 +21 +q +How to STEAL a playing card from the deck! - Sleight of Hand Tutorial +Chris Ramsay +search +How to STEAL a playing card from the deck! - Sleight of Hand Tutorial +Chris Ramsay +se +sea How to STEAL a playing card from the deck! - Sleight of Hand Tutorial +help searc +/How to STEAL a playing card from the deck! - Sleight of Hand Tutorial +1 +h +quit +exit +h +help down +playurl https://www.youtube.com/watch?v=caRlWlKkw34 +qui +quit +h +dl-co +h dl-co +h +h bas +h +h sea +q +dlurl://www.youtube.com/watch?v=l0QGLMwR-ly +dlurl +help +download +help downloa +:l/www.youtube.com/watch?v=l0QGLMwR-ly +q +dlurl://www.youtube.com/watch?v=l0QGLMwR-ly +u tutorial linux +user tutoriallinux +2 +help +download +help download +user tutoriallinux +dlurl 2 +h +down +help down +user tutoriallinux +d 2 +21 +q +/acts of vengeance +1 +q +help down +dlurl https://www.youtube.com/watch?v=7SWVXPYZLJM +23 +q +user precision boxing +n +> +n +34 +q +h down +h play +userpl tutorialinux +dvpl 16 +dlurl 16 +16 +dlurl 6-11 +dv 6-11 +q +dlurl https://www.youtube.com/watch?v=dum7q6UXiCE +21 +dlurl https://www.youtube.com/watch?v=Mtkicw97zSo +21 +dlurl https://www.youtube.com/watch?v=D3exMO62eW0 +22 +dlurl https://www.youtube.com/watch?v=vxpL8un1djw +22 +dlurl https://www.youtube.com/watch?v=3s7k3tZuEuE +18 +dlurl https://www.youtube.com/watch?v=vLWnYrImrWo +23 +quit +exit +dlurl https://www.youtube.com/watch?v=jYX5FpYZA7c +22 +help +help bas +help search +q +help sort +help search +help config +list +set order date +list +q +exit +/user gotbletu torrtux +/user gotbletu +/torrtux +user gotbletu /torrtux +i 1 +q +exit +/lukesmith +n +? +h +help download +n +p +n +/ lukesmith uberzug +dlurl 1 +dlurl +h download +d 1 +20 +quit +exit +lukesmith uberzug +/lukesmith uberzug +d 1 +20 +q +/virgin most powerful radio +n +p +q +/jon bellion +/jon bellion i robot +q +/rise up andra +hallelujah by karaoke +/hallelujah by karaoke +4 +22 +q +exit +/sucker jonas brothers +1 +help +help download +help encode +/sucker jonas brothers +da 1 +exit +/talk khalid +da 1 +/how long roi sto remix +da 1 +da 18 +/how long roi sto remix +/how long roisto remix +/how long roi sto remix +da 18 +q +exit +/91mm swiss army knife survival mods +dl 2 +20 +q +/91mm swiss army knife survival mods +dl 3 +19 +q +dv 8 +cls +quit +exit +the grandfathers speak +/the grandfathers speak +dv 1 +exit +/gemini man trailer +dv 3 +dv 2 +dv 11 +exit +h +q +/luke smith +q +/pennyworth +d 2 +16 +q +/alfa romeo gt +dl 20 +20 +q +/buyers guide +/alfa romeo 156 +q +h +help download +help search +quit +q +help +help update +help new +q +exit +search senorita shawn mendes +da 5 +search dance the night away twice +da 1 +search love scenario ikon +da 5 +search only you ikon +da 15 +search just right got7 +da 2 +search seesaw bts +da 6 +search someone like me twice +da 13 +search paradise bts +da 2 +search love maze bts +da 7 +search house of cards bts +da 11 +search kieran Lai raindrop droptop +da 1 +q +16 +set +set player mpv --ontop --no-border --force-window --autofit=500x280 --geometry=-15-10 +set player mpv +16 +q +16 +exit +16 +exit +16 +q +/gotbletu +1 +d 1 +18 +q +dl 2 +18 +q +/fire in the sky +dl 17 +q +dl 1 +exit +dl 1 +exit +/fire in the sky +q +/gotbletu +1 +dl 2 +exit +/gotbletu +dl 1 +18 +exit +q +exit +help +help downloa +dapl https://www.youtube.com/watch?v=iILJvqrAQ_w&list=PLEEyQEShYtdW2nMcYxYO_ipvJ_a8b2h1s +q +/charlie puth voicenotes +exit +/charlie puth voicenotes +exit +q +/billie eilish listen before I go +help download +/billie eilish listen before I go +help search +/billie eilish +q +exit +q +/lukesmithxyz pacman +/lukesmithxyz +/lukesmith pacman +d 1 +23 +q +n +q +help search +q +user hailee steinfeld +q +exit +q +set search_music False +exit +set +set ddir /home/shared/Common/dwhelper +exit +q +exit +q +d'angelo voodoo +/d'angelo voodoo +help search +//d'angelo voodoo +d1 +da 1 +exit +/vifm +1 +playurl 1 +h +help basic +q +help +help search +user bobbreenacademy +n +userpl bobbreenacademy +exit +//underground hip hop rare +q +exit +h +help invoke +h +h dl-command +help download +h +help config +q +set +q +/R&B making love +d 14 +q +/R&B making love +q +/R&B making love +d 14 +3 +q +help search +search user viewster sharknado +/sharknado +n +/sharknado full movie +d 10 +11 +/sharknado full movie +n +d 11 +n +q +help down +dlurl https://www.youtube.com/watch?v=4OZip0cgOho +q +dlurl https://www.youtube.com/watch?v=4OZip0cgOho +19 +q +unset download_command +set +set download_command aria2c -x -s 4 %u +set +exit +set +set download_command aria2c -x 4 -s 4 %u +set +exit +set +set download_command +exit +dlurl https://youtu.be/ux8GZAtCN-M +23 +dlurl https://youtu.be/wc__MN2wEJg +16 +dlurl https://youtu.be/JOQJiZ_g3Ho +q +dlurl https://www.youtube.com/watch?v=NEADWopbyWQ +15 +q +dlurl https://www.youtube.com/watch?v=NEADWopbyWQ +15 +q +dlurl https://www.youtube.com/watch?v=czHllvz9bCg +q +help config +help dl-command +help config +set +help config +set ddir +help config +set ddir +set ddir /home/shared/Common/dwhelp/%u +q +dl https://www.youtube.com/watch?v=n7AHRd2nBgc +/PVG100 +/love and mercy faustina trailer +dl 1 2 +dl 1 +18 +dl 2 +18 +n +q +/iraf tutorial +dl 1 +18 +dl 2 +/iraf tutorial +dl 3 +18 +/iraf tutorial +dl 11 +19 +/todays latin mass +help search +/user Oxford Oratory +dl 2 +14 +q +set +/user gotbletu +q +/user gotbletu +q +h +help download +q +set +set order date +exit +/user oxford oratory +set order date +/user oxford oratory +help set +help set order +q +help search +q +user lukesmith +/luke smith thinkpad +q diff --git a/.config/mps-youtube/input_history-04904.tmp b/.config/mps-youtube/input_history-04904.tmp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mps-youtube/input_history-04904.tmp diff --git a/.config/mps-youtube/input_history-05387.tmp b/.config/mps-youtube/input_history-05387.tmp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mps-youtube/input_history-05387.tmp diff --git a/.config/mps-youtube/input_history-07346.tmp b/.config/mps-youtube/input_history-07346.tmp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mps-youtube/input_history-07346.tmp diff --git a/.config/mps-youtube/play_history b/.config/mps-youtube/play_history Binary files differnew file mode 100755 index 0000000..ca6870b --- /dev/null +++ b/.config/mps-youtube/play_history diff --git a/.config/mps-youtube/play_history.m3u b/.config/mps-youtube/play_history.m3u new file mode 100755 index 0000000..45b2768 --- /dev/null +++ b/.config/mps-youtube/play_history.m3u @@ -0,0 +1,182 @@ +#EXTM3U + +#EXTINF:208,reptyr - Reparent a Running Program to a New Terminal - Linux CLI +https://www.youtube.com/watch?v=aXGagfPRM5s +#EXTINF:626,Transdroid - Torrent Manager and Searcher - ANDROID +https://www.youtube.com/watch?v=DawZuAHaVto +#EXTINF:547,F-Droid -- Package Manager - ANDROID +https://www.youtube.com/watch?v=-FWseOjRShs +#EXTINF:626,Transdroid - Torrent Manager and Searcher - ANDROID +https://www.youtube.com/watch?v=DawZuAHaVto +#EXTINF:2,big al! +https://www.youtube.com/watch?v=vLPGPkHr6VY +#EXTINF:41,Action Team Trailer ITV2 +https://www.youtube.com/watch?v=ylZv8SKim94 +#EXTINF:5958,Best Action Jet Li movies Full Length | Fist of legend 2018 Full Movie English HD +https://www.youtube.com/watch?v=43fRBNBk9FI +#EXTINF:6197,Fist of legend 1994 Jet Li HD +https://www.youtube.com/watch?v=aHK0eWrg1IQ +#EXTINF:125,THE OUTSIDER Official Trailer (2018) Jared Leto Yakuza Movie +https://www.youtube.com/watch?v=jZfVqYOGRlA +#EXTINF:75,BENT Official Trailer (2018) +https://www.youtube.com/watch?v=Wk7h6n_qb9k +#EXTINF:106,SCORCHED EARTH Trailer (2018) +https://www.youtube.com/watch?v=Hjuvfbl9O8g +#EXTINF:634,Arch Linux: Is it a meme? +https://www.youtube.com/watch?v=VO9R_WFs9Zc +#EXTINF:584,German Chief Police Instructor: On Knife Defense! +https://www.youtube.com/watch?v=5C3QFhydlxo +#EXTINF:122,The Commuter - Blu-ray Trailer - Liam Neeson, Vera Farmiga +https://www.youtube.com/watch?v=nC5NJNV7xbw +#EXTINF:108,Living Biblically Trailer [HD] +https://www.youtube.com/watch?v=fmjHI8PddXc +#EXTINF:651,ranger - Useful Built-in Features - Linux TUI +https://www.youtube.com/watch?v=eCPktWRmCcI +#EXTINF:107,BATTALION Trailer 2018 Sci Fi Movie HD +https://www.youtube.com/watch?v=jR3FrFJ1nJ4 +#EXTINF:108,BLEEDING STEEL | Official Trailer |(2018) +https://www.youtube.com/watch?v=VcV1ahAbJmU +#EXTINF:143,Daylight's End (2017) Movie Trailer +https://www.youtube.com/watch?v=FLvwYdQo3QE +#EXTINF:493,You Were Never Really Here - Official Movie Review +https://www.youtube.com/watch?v=MVrO-JBzZMk +#EXTINF:144,You were never really here official trailer +https://www.youtube.com/watch?v=ik3mBHiptag +#EXTINF:148,DEN OF THIEVES Trailer (2018) +https://www.youtube.com/watch?v=WyrHF6MrVbA +#EXTINF:300,Rebirth of Slick (Cool Like Dat) - Naturally 7 (Official Video) +https://www.youtube.com/watch?v=fMNggEMMs3w +#EXTINF:2,big al! +https://www.youtube.com/watch?v=vLPGPkHr6VY +#EXTINF:394,Newsboat Filtered Query Feeds - Linux TUI +https://www.youtube.com/watch?v=PUxPUdyCy_U +#EXTINF:90,BLACK WATER Official Trailer (2018) Jean Claude Vandam. +https://www.youtube.com/watch?v=QP9ewIVEJwY +#EXTINF:106,Corbin Nash (2018) Official Movie Trailer [HD] +https://www.youtube.com/watch?v=eeF39rhw-uw +#EXTINF:599,sopcast - Free P2P Internet TV - Linux CLI +https://www.youtube.com/watch?v=Khvo4ge1PLQ +#EXTINF:633,nVLC Browser Extension for W3M - Linux TUI +https://www.youtube.com/watch?v=QczYT67JqYs +#EXTINF:412,qutebrowser - All the Cool Kids should try it! +https://www.youtube.com/watch?v=g2RtjO_jXvY +#EXTINF:300,Rebirth of Slick (Cool Like Dat) - Naturally 7 (Official Video) +https://www.youtube.com/watch?v=fMNggEMMs3w +#EXTINF:300,Rebirth of Slick (Cool Like Dat) - Naturally 7 (Official Video) +https://www.youtube.com/watch?v=fMNggEMMs3w +#EXTINF:5353,Back to the source - Historical European Martial Arts documentary +https://www.youtube.com/watch?v=7DBmNVHTmNs +#EXTINF:561,Doug Marcaida Кarambit Kali +https://www.youtube.com/watch?v=6tjlSSdWU_g +#EXTINF:342,King Reign | Kunle Thomas | Rest in Peace Brother...we love you. +https://www.youtube.com/watch?v=X-732Tx9b4E +#EXTINF:94,May 17, 1992: Beatification of Josemaría Escrivá +https://www.youtube.com/watch?v=oYLb1YDNOEE +#EXTINF:94,May 17, 1992: Beatification of Josemaría Escrivá +https://www.youtube.com/watch?v=oYLb1YDNOEE +#EXTINF:94,May 17, 1992: Beatification of Josemaría Escrivá +https://www.youtube.com/watch?v=oYLb1YDNOEE +#EXTINF:94,May 17, 1992: Beatification of Josemaría Escrivá +https://www.youtube.com/watch?v=oYLb1YDNOEE +#EXTINF:179,San Josemaria Escrivá Fundador del Opus (hecho con Spreaker) +https://www.youtube.com/watch?v=BU7BzHZiGh0 +#EXTINF:3832,JOSE MARIA ESCRIVA - Il film completo di Mondo TV! +https://www.youtube.com/watch?v=I1hAjf7QpXo +#EXTINF:63,Saint Josemaria Escrivá de Balaguer "God awaits us every day" +https://www.youtube.com/watch?v=4H2pBgUTCqU +#EXTINF:1480,Viacrucis San Josemaría Escrivá +https://www.youtube.com/watch?v=gqHjrUgFm0c +#EXTINF:63,Saint Josemaria Escrivá de Balaguer "God awaits us every day" +https://www.youtube.com/watch?v=4H2pBgUTCqU +#EXTINF:63,Saint Josemaria Escrivá de Balaguer "God awaits us every day" +https://www.youtube.com/watch?v=4H2pBgUTCqU +#EXTINF:513,it will make you kING penis leech oil benefits 720p +https://www.youtube.com/watch?v=A6SmAHnfxgo +#EXTINF:513,leech oil benefits your PENIS will be long and strong +https://www.youtube.com/watch?v=YZev9G4WoHk +#EXTINF:120,YOUR HUSBAND WILL BE YOUR kING | LEECH OIL FOR STRONGER P,E,NNIS +https://www.youtube.com/watch?v=57WlUMtGobo +#EXTINF:3600,Thenx: Calisthenics Workout Music +https://www.youtube.com/watch?v=7XxZapdAqy8 +#EXTINF:218,Hallelujah karaoke +https://www.youtube.com/watch?v=arNQyHUFNBA +#EXTINF:175,ALELUIA / HALLELUJAH - Karaoke +https://www.youtube.com/watch?v=Qlyz-YT18rM +#EXTINF:200,Jonas Brothers - Sucker +https://www.youtube.com/watch?v=CnAmeh0-E-U +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:556,torsocks - Access The Tor Network - Linux CLI +https://www.youtube.com/watch?v=0uXFffq-UPU +#EXTINF:1306,gotbletu Terminal Web Browsing Workflow +https://www.youtube.com/watch?v=z-vOQr8Ym-8 +#EXTINF:154,Ranger Video Thumbnails - Linux TUI +https://www.youtube.com/watch?v=-DeurnjTm10 +#EXTINF:8,lukesmith headturn c.avi +https://www.youtube.com/watch?v=MHJYqUCURbk +#EXTINF:765,Vifm and Überzug (Ueberzug) Image Previews +https://www.youtube.com/watch?v=qgxsduCO1pE +#EXTINF:1338,vifm - Vi File Manager - Linux TUI +https://www.youtube.com/watch?v=qPg7m90WXMo +#EXTINF:4444,The Bladed Hand Documentary +https://www.youtube.com/watch?v=fCs6xXAwci0 +#EXTINF:4444,The Bladed Hand Documentary +https://www.youtube.com/watch?v=fCs6xXAwci0 +#EXTINF:233,Cleo Sol - Why Don't You (Audio) +https://www.youtube.com/watch?v=SMpMLTpEXVk +#EXTINF:52,Star Wars Sound Guy | Kevin James +https://www.youtube.com/watch?v=xv7gmsZxnXg +#EXTINF:58,4pcs/set Rubber Bottom Foot Feet Cover for Lenovo Thinkpad X220 X220i +https://www.youtube.com/watch?v=VLxDVnPDPiY diff --git a/.config/mps-youtube/playlist_v2 b/.config/mps-youtube/playlist_v2 Binary files differnew file mode 100755 index 0000000..0a47446 --- /dev/null +++ b/.config/mps-youtube/playlist_v2 diff --git a/.config/mps-youtube/playlists/kepler.m3u b/.config/mps-youtube/playlists/kepler.m3u new file mode 100644 index 0000000..94b4c7f --- /dev/null +++ b/.config/mps-youtube/playlists/kepler.m3u @@ -0,0 +1,4 @@ +#EXTM3U + +#EXTINF:60,Kepler Orrery IV +https://www.youtube.com/watch?v=et7QmD32tjs diff --git a/.config/mps-youtube/transcode b/.config/mps-youtube/transcode new file mode 100755 index 0000000..29f8a37 --- /dev/null +++ b/.config/mps-youtube/transcode @@ -0,0 +1,54 @@ +# transcoding presets for mps-youtube +# VERSION 0 + +# change ENCODER_PATH to the path of ffmpeg / avconv or leave it as auto +# to let mps-youtube attempt to find ffmpeg or avconv +ENCODER_PATH: auto + +# Delete original file after encoding it +# Set to False to keep the original downloaded file +DELETE_ORIGINAL: True + +# ENCODING PRESETS + +# Encode ogg or m4a to mp3 256k +name: MP3 256k +extension: mp3 +valid for: ogg,m4a +command: ENCODER_PATH -i IN -codec:a libmp3lame -b:a 256k OUT.EXT + +# Encode ogg or m4a to mp3 192k +name: MP3 192k +extension: mp3 +valid for: ogg,m4a +command: ENCODER_PATH -i IN -codec:a libmp3lame -b:a 192k OUT.EXT + +# Encode ogg or m4a to mp3 highest quality vbr +name: MP3 VBR best +extension: mp3 +valid for: ogg,m4a +command: ENCODER_PATH -i IN -codec:a libmp3lame -q:a 0 OUT.EXT + +# Encode ogg or m4a to mp3 high quality vbr +name: MP3 VBR good +extension: mp3 +valid for: ogg,m4a +command: ENCODER_PATH -i IN -codec:a libmp3lame -q:a 2 OUT.EXT + +# Encode m4a to ogg +name: OGG 256k +extension: ogg +valid for: m4a +command: ENCODER_PATH -i IN -codec:a libvorbis -b:a 256k OUT.EXT + +# Encode ogg to m4a +name: M4A 256k +extension: m4a +valid for: ogg +command: ENCODER_PATH -i IN -strict experimental -codec:a aac -b:a 256k OUT.EXT + +# Encode ogg or m4a to wma v2 +name: Windows Media Audio v2 +extension: wma +valid for: ogg,m4a +command: ENCODER_PATH -i IN -codec:a wmav2 -q:a 0 OUT.EXT
\ No newline at end of file diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf new file mode 100755 index 0000000..dd0c6ef --- /dev/null +++ b/.config/mpv/input.conf @@ -0,0 +1,11 @@ +Alt+RIGHT add video-rotate 90 +Alt+LEFT add video-rotate -90 +Alt+- add video-zoom -0.25 +Alt+= add video-zoom 0.25 +Alt+j add video-pan-x -0.05 +Alt+l add video-pan-x 0.05 +Alt+i add video-pan-y 0.05 +Alt+k add video-pan-y -0.05 +sub-file=~/tmp/subtitles/subtitles.srt +osd-font-size=10 +geometry=0:+400 diff --git a/.config/mpv/mpv.conf b/.config/mpv/mpv.conf new file mode 100755 index 0000000..575040e --- /dev/null +++ b/.config/mpv/mpv.conf @@ -0,0 +1,144 @@ +# +# Example mpv configuration file +# +# Warning: +# +# The commented example options usually do _not_ set the default values. Call +# mpv with --list-options to see the default values for most options. There is +# no builtin or example mpv.conf with all the defaults. +# +# +# Configuration files are read system-wide from /usr/local/etc/mpv.conf +# and per-user from ~/.config/mpv/mpv.conf, where per-user settings override +# system-wide settings, all of which are overridden by the command line. +# +# Configuration file settings and the command line options use the same +# underlying mechanisms. Most options can be put into the configuration file +# by dropping the preceding '--'. See the man page for a complete list of +# options. +# +# Lines starting with '#' are comments and are ignored. +# +# See the CONFIGURATION FILES section in the man page +# for a detailed description of the syntax. +# +# Profiles should be placed at the bottom of the configuration file to ensure +# that settings wanted as defaults are not restricted to specific profiles. + +################## +# video settings # +################## + +# Start in fullscreen mode by default. +fs=no + +# force starting with centered window +geometry=50%:50% +#geometry=640+10+2000 + +# don't allow a new window to have a size larger than 90% of the screen size +autofit-larger=50%x50% + +# Do not close the window on exit. +#keep-open=yes + +# Do not wait with showing the video window until it has loaded. (This will +# resize the window once video is loaded. Also always shows a window with +# audio.) +#force-window=immediate + +# Disable the On Screen Controller (OSC). +#osc=no + +# Keep the player window on top of all other windows. +ontop=yes + +# Specify default video driver (see --vo=help for a list). +# This one selects high quality video scaling etc. - can cause problems with +# some drivers and GPUs. +#vo=opengl-hq + +# Force video to lock on the display's refresh rate, and change video and audio +# speed to some degree to ensure synchronous playback - can cause problems +# with some drivers and desktop environments. +#video-sync=display-resample + +# Enable hardware decoding if available. Often, this does not work with all +# video outputs, but should work well with default settings on most systems. +# If performance or energy usage is an issue, forcing the vdpau or vaapi VOs +# may or may not help. +#hwdec=auto + +################## +# audio settings # +################## + +# Specify default audio driver (see --ao=help for a list). +#ao=alsa + +# Disable softvol usage, and always use the system mixer if available. +#softvol=no + +# Do not filter audio to keep pitch when changing playback speed. +audio-pitch-correction=no + +# Output 5.1 audio natively, and upmix/downmix audio with a different format. +#audio-channels=5.1 +# Disable any automatic remix, _if_ the audio output accepts the audio format. +# of the currently played file. See caveats mentioned in the manpage. +# (This is the default.) +#audio-channels=auto + +################## +# other settings # +################## + +# Pretend to be a web browser. Might fix playback with some streaming sites, +# but also will break with shoutcast streams. +#user-agent="Mozilla/5.0" + +# cache settings +# +# Use 150MB input cache by default. The cache is enabled for network streams only. +#cache-default=153600 +# +# Use 150MB input cache for everything, even local files. +#cache=153600 +# +# Disable the behavior that the player will pause if the cache goes below a +# certain fill size. +#cache-pause=no +# +# Read ahead about 5 seconds of audio and video packets. +#demuxer-readahead-secs=5.0 +# +# Raise readahead from demuxer-readahead-secs to this value if a cache is active. +#cache-secs=50.0 + +# Display English subtitles if available. +#slang=en + +# Play Finnish audio if available, fall back to English otherwise. +#alang=fi,en + +# Change subtitle encoding. For Arabic subtitles use 'cp1256'. +# If the file seems to be valid UTF-8, prefer UTF-8. +#sub-codepage=utf8:cp1256 + + +# You can also include other configuration files. +#include=/path/to/the/file/you/want/to/include + + +############ +# Profiles # +############ + +# The options declared as part of profiles override global default settings, +# but only take effect when the profile is active. + +# The following profile can be enabled on the command line with: --profile=invert + +#[invert] +# The profile forces this video filter: +#vf-add=flip diff --git a/.config/mpv/mpvClipboard.log b/.config/mpv/mpvClipboard.log new file mode 100644 index 0000000..5a11944 --- /dev/null +++ b/.config/mpv/mpvClipboard.log @@ -0,0 +1,2 @@ +[25/May/20 15:13:57] /home/archlinux/vgg/macosxd3/Media/Linkin Park - Essentials (2020)/01. Linkin Park - In The End.mp3 |time=43 +[14/Aug/20 21:44:26] /home/archlinux/vgg/macosxd3/Media/Series/Watchmen/watchmen.s01e02.repack.web.h264-tbs[ettv].mkv |time=3 diff --git a/.config/mpv/scripts/SmartCopyPaste-II-2.2.lua b/.config/mpv/scripts/SmartCopyPaste-II-2.2.lua new file mode 100644 index 0000000..4e2f33f --- /dev/null +++ b/.config/mpv/scripts/SmartCopyPaste-II-2.2.lua @@ -0,0 +1,406 @@ +-- Copyright (c) 2020, Eisa AlAwadhi +-- License: BSD 2-Clause License + +-- Creator: Eisa AlAwadhi +-- Project: SmartCopyPaste-II +-- Version: 2.2 + +local utils = require 'mp.utils' +local msg = require 'mp.msg' +local protocols +local extensions +local pasted = false + +----------------------------USER CUSTOMIZATION SETTINGS----------------------------------- +--These settings are for users to manually change some options in the script. +--Keybinds can be defined in the bottom of the script. + +local device = nil --nil is for automatic device detection, OR manually change to: 'windows' or 'mac' or 'linux' + +local linux_copy = 'xclip -silent -selection clipboard -in' --copy command that will be used in Linux. OR write a different command +local linux_paste = 'xclip -selection clipboard -o' --paste command that will be used in Linux. OR write a different command + +local mac_copy = 'pbcopy' --copy command that will be used in MAC. OR write a different command +local mac_paste = 'pbpaste' --paste command that will be used in MAC. OR write a different command + +local windows_copy = 'powershell' --'powershell' is for using windows powershell to copy. OR write the copy command, e.g: ' clip' +local windows_paste = 'powershell' --'powershell' is for using windows powershell to paste. OR write the paste command + +local paste_anything = false --false is for specific paste based on the specified extensions and protocols. OR change to true so paste accepts anything (not recommended to change this). + +if not paste_anything then + protocols = { --add below (after a comma) any protocol you want SmartCopyPaste to work with; e.g: ,'ftp://' + 'https?://' ,'magnet:' + } + extensions = { --add below (after a comma) any extension you want SmartCopyPaste to work with; e.g: ,'pdf' + --video & audio + 'ac3', 'a52', 'eac3', 'mlp', 'dts', 'dts-hd', 'dtshd', 'true-hd', 'thd', 'truehd', 'thd+ac3', 'tta', 'pcm', 'wav', 'aiff', 'aif', 'aifc', 'amr', 'awb', 'au', 'snd', 'lpcm', 'yuv', 'y4m', 'ape', 'wv', 'shn', 'm2ts', 'm2t', 'mts', 'mtv', 'ts', 'tsv', 'tsa', 'tts', 'trp', 'adts', 'adt', 'mpa', 'm1a', 'm2a', 'mp1', 'mp2', 'mp3', 'mpeg', 'mpg', 'mpe', 'mpeg2', 'm1v', 'm2v', 'mp2v', 'mpv', 'mpv2', 'mod', 'tod', 'vob', 'vro', 'evob', 'evo', 'mpeg4', 'm4v', 'mp4', 'mp4v', 'mpg4', 'm4a', 'aac', 'h264', 'avc', 'x264', '264', 'hevc', 'h265', 'x265', '265', 'flac', 'oga', 'ogg', 'opus', 'spx', 'ogv', 'ogm', 'ogx', 'mkv', 'mk3d', 'mka', 'webm', 'weba', 'avi', 'vfw', 'divx', '3iv', 'xvid', 'nut', 'flic', 'fli', 'flc', 'nsv', 'gxf', 'mxf', 'wma', 'wm', 'wmv', 'asf', 'dvr-ms', 'dvr', 'wtv', 'dv', 'hdv', 'flv','f4v', 'f4a', 'qt', 'mov', 'hdmov', 'rm', 'rmvb', 'ra', 'ram', '3ga', '3ga2', '3gpp', '3gp', '3gp2', '3g2', 'ay', 'gbs', 'gym', 'hes', 'kss', 'nsf', 'nsfe', 'sap', 'spc', 'vgm', 'vgz', 'm3u', 'm3u8', 'pls', 'cue', + --images + "ase", "art", "bmp", "blp", "cd5", "cit", "cpt", "cr2", "cut", "dds", "dib", "djvu", "egt", "exif", "gif", "gpl", "grf", "icns", "ico", "iff", "jng", "jpeg", "jpg", "jfif", "jp2", "jps", "lbm", "max", "miff", "mng", "msp", "nitf", "ota", "pbm", "pc1", "pc2", "pc3", "pcf", "pcx", "pdn", "pgm", "PI1", "PI2", "PI3", "pict", "pct", "pnm", "pns", "ppm", "psb", "psd", "pdd", "psp", "px", "pxm", "pxr", "qfx", "raw", "rle", "sct", "sgi", "rgb", "int", "bw", "tga", "tiff", "tif", "vtf", "xbm", "xcf", "xpm", "3dv", "amf", "ai", "awg", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "gbr", "odg", "svg", "stl", "vrml", "x3d", "sxd", "v2d", "vnd", "wmf", "emf", "art", "xar", "png", "webp", "jxr", "hdp", "wdp", "cur", "ecw", "iff", "lbm", "liff", "nrrd", "pam", "pcx", "pgf", "sgi", "rgb", "rgba", "bw", "int", "inta", "sid", "ras", "sun", "tga", + --other types + 'torrent' + } +---------------------------END OF USER CUSTOMIZATION SETTINGS------------------------ +else + protocols = {''} + extensions = {''} +end + +if not device then + if os.getenv('windir') ~= nil then + device = 'windows' + elseif os.execute '[ -d "/Applications" ]' == 0 and os.execute '[ -d "/Library" ]' == 0 or os.execute '[ -d "/Applications" ]' == true and os.execute '[ -d "/Library" ]' == true then + device = 'mac' + else + device = 'linux' + end +end + +function handleres(res, args) + if not res.error and res.status == 0 then + return res.stdout + else + msg.error("There was an error getting "..device.." clipboard: ") + msg.error(" Status: "..(res.status or "")) + msg.error(" Error: "..(res.error or "")) + msg.error(" stdout: "..(res.stdout or "")) + msg.error("args: "..utils.to_string(args)) + return '' + end +end + +function os.capture(cmd, raw) + local f = assert(io.popen(cmd, 'r')) + local s = assert(f:read('*a')) + f:close() + if raw then return s end + s = string.gsub(s, '^%s+', '') + s = string.gsub(s, '%s+$', '') + s = string.gsub(s, '[\n\r]+', ' ') + return s +end + +local function get_extension(path) + match = string.match(path, '%.([^%.]+)$' ) + if match == nil then + return 'nomatch' + else + return match + end +end + +local function get_extentionpath(path) + match = string.match(path,'(.*)%.([^%.]+)$') + if match == nil then + return 'nomatch' + else + return match + end +end + +local function has_extension (tab, val) + for index, value in ipairs(tab) do + if value == val then + return true + end + end + + return false +end + +local function starts_protocol (tab, val) + for index, value in ipairs(tab) do + if (val:find(value) == 1) then + return true + end + end + return false +end + + +function get_clipboard() +local clip + if device == 'linux' then + clip = os.capture(linux_paste, false) + return clip + elseif device == 'windows' then + if windows_paste == 'powershell' then + local args = { + 'powershell', '-NoProfile', '-Command', [[& { + Trap { + Write-Error -ErrorRecord $_ + Exit 1 + } + $clip = Get-Clipboard -Raw -Format Text -TextFormatType UnicodeText + if ($clip) { + $clip = $clip + } + else { + $clip = Get-Clipboard -Raw -Format FileDropList + } + $u8clip = [System.Text.Encoding]::UTF8.GetBytes($clip) + [Console]::OpenStandardOutput().Write($u8clip, 0, $u8clip.Length) + }]] + } + return handleres(utils.subprocess({ args = args, cancellable = false }), args) + else + clip = os.capture(windows_paste, false) + return clip + end + elseif device == 'mac' then + clip = os.capture(mac_paste, false) + return clip + end + return '' +end + + +function set_clipboard(text) + local pipe + if device == 'linux' then + pipe = io.popen(linux_copy, 'w') + pipe:write(text) + pipe:close() + elseif device == 'windows' then + if windows_copy == 'powershell' then + local res = utils.subprocess({ args = { + 'powershell', '-NoProfile', '-Command', string.format([[& { + Trap { + Write-Error -ErrorRecord $_ + Exit 1 + } + Add-Type -AssemblyName PresentationCore + [System.Windows.Clipboard]::SetText('%s') + }]], text) + } }) + else + pipe = io.popen(windows_copy,'w') + pipe:write(text) + pipe:close() + end + elseif device == 'mac' then + pipe = io.popen(mac_copy,'w') + pipe:write(text) + pipe:close() + end + return '' +end + + +local function copy() + local filePath = mp.get_property_native('path') + + if (filePath ~= nil) then + local time = math.floor(mp.get_property_number('time-pos')) + set_clipboard(filePath..' |time='..tostring(time)) + mp.osd_message('Copied & Bookmarked:\n'..filePath..' |time='..tostring(time)) + + local copyLog = (os.getenv('APPDATA') or os.getenv('HOME')..'/.config')..'/mpv/mpvClipboard.log' + local copyLogAdd = io.open(copyLog, 'a+') + + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), filePath..' |time='..tostring(time))) + copyLogAdd:close() + else + mp.osd_message('Failed to Copy\nNo Video Found') + end +end + + +local function copy_path() + local filePath = mp.get_property_native('path') + + if (filePath ~= nil) then + set_clipboard(filePath) + mp.osd_message('Copied & Bookmarked Video Only:\n'..filePath) + + local copyLog = (os.getenv('APPDATA') or os.getenv('HOME')..'/.config')..'/mpv/mpvClipboard.log' + local copyLogAdd = io.open(copyLog, 'a+') + + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), filePath)) + copyLogAdd:close() + else + return false + end +end + + +function paste() + local clip = get_clipboard() + clip = string.gsub(clip, "[\r\n]" , "") + + local filePath = mp.get_property_native('path') + local time + + if string.match(clip, '(.*) |time=') then + videoFile = string.match(clip, '(.*) |time=') + time = string.match(clip, ' |time=(.*)') + elseif string.match(clip, '^\"(.*)\"$') then + videoFile = string.match(clip, '^\"(.*)\"$') + else + videoFile = clip + end + + local currentVideoExtension = string.lower(get_extension(videoFile)) + local currentVideoExtensionPath = (get_extentionpath(videoFile)) + + local copyLog = (os.getenv('APPDATA') or os.getenv('HOME')..'/.config')..'/mpv/mpvClipboard.log' + local copyLogAdd = io.open(copyLog, 'a+') + local copyLogOpen = io.open(copyLog, 'r+') + + local linePosition + local videoFound = '' + local logVideo + local logVideoTime + + for line in copyLogOpen:lines() do + + linePosition = line:find(']') + line = line:sub(linePosition + 2) + + if line.match(line, '(.*) |time=') == filePath then + videoFound = line + end + end + + logVideo = string.match(videoFound, '(.*) |time=') + logVideoTime = string.match(videoFound, ' |time=(.*)') + + if (filePath == videoFile) and (time ~= nil) then + mp.commandv('seek', time, 'absolute', 'exact') + mp.osd_message('Resumed to Copied Time') + elseif (filePath == logVideo) and (logVideoTime ~= nil) then + mp.commandv('seek', logVideoTime, 'absolute', 'exact') + mp.osd_message('Resumed to Last Logged Time') + elseif (filePath ~= nil) and (logVideoTime == nil) then + mp.osd_message('No Copied Time Found') + elseif (filePath == nil) and has_extension(extensions, currentVideoExtension) and (currentVideoExtensionPath~= '') then + mp.commandv('loadfile', videoFile) + mp.osd_message('Pasted:\n'..videoFile) + + if (time ~= nil) then + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile..' |time='..tostring(time))) + else + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile)) + end + elseif (filePath == nil) and (starts_protocol(protocols, videoFile)) then + mp.commandv('loadfile', videoFile) + mp.osd_message('Pasted:\n'..videoFile) + + if (time ~= nil) then + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile..' |time='..tostring(time))) + else + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile)) + end + elseif (filePath == nil) and not has_extension(extensions, currentVideoExtension) and not (starts_protocol(protocols, videoFile)) then + copyLogLastOpen = io.open(copyLog, 'r+') + + for line in copyLogLastOpen:lines() do + lastVideoFound = line + end + + if (lastVideoFound ~= nil) then + linePosition = lastVideoFound:find(']') + lastVideoFound = lastVideoFound:sub(linePosition + 2) + + if string.match(lastVideoFound, '(.*) |time=') then + videoFile = string.match(lastVideoFound, '(.*) |time=') + else + videoFile = lastVideoFound + end + + mp.commandv('loadfile', videoFile) + mp.osd_message('Pasted Last Logged Item:\n'..videoFile) + else + mp.osd_message('Failed to Paste\nPasted Unsupported Item:\n'..clip) + end + copyLogLastOpen:close() + end + + pasted = true + copyLogAdd:close() + copyLogOpen:close() +end + +function paste_playlist() + local clip = get_clipboard() + clip = string.gsub(clip, "[\r\n]" , "") + + local filePath = mp.get_property_native('path') + local time + + if string.match(clip, '(.*) |time=') then + videoFile = string.match(clip, '(.*) |time=') + time = string.match(clip, ' |time=(.*)') + elseif string.match(clip, '^\"(.*)\"$') then + videoFile = string.match(clip, '^\"(.*)\"$') + else + videoFile = clip + end + + local copyLog = (os.getenv('APPDATA') or os.getenv('HOME')..'/.config')..'/mpv/mpvClipboard.log' + local copyLogAdd = io.open(copyLog, 'a+') + local copyLogOpen = io.open(copyLog, 'r+') + + local currentVideoExtension = string.lower(get_extension(videoFile)) + local currentVideoExtensionPath = (get_extentionpath(videoFile)) + + if has_extension(extensions, currentVideoExtension) and (currentVideoExtensionPath~= '') or (starts_protocol(protocols, videoFile)) then + mp.commandv('loadfile', videoFile, 'append-play') + mp.osd_message('Pasted Into Playlist:\n'..videoFile) + + if (time ~= nil) then + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile..' |time='..tostring(time))) + else + copyLogAdd:write(('[%s] %s\n'):format(os.date('%d/%b/%y %X'), videoFile)) + end + else + mp.osd_message('Failed to Add Into Playlist\nPasted Unsupported Item:\n'..clip) + end + + pasted = true + copyLogAdd:close() + copyLogOpen:close() +end + +mp.register_event('end-file', function() + pasted = false +end) + +mp.register_event('file-loaded', function() + if (pasted == true) then + local clip = get_clipboard() + local time = string.match(clip, ' |time=(.*)') + local videoFile = string.match(clip, '(.*) |time=') + local filePath = mp.get_property_native('path') + + if (filePath == videoFile) and (time ~= nil) then + mp.commandv('seek', time, 'absolute', 'exact') + end + else + return false + end +end) + +---------------------------KEYBINDS CUSTOMIZATION SETTINGS--------------------------------- +if device == 'mac' then --MAC OS Keybinds + mp.add_key_binding('Meta+c', 'copy', copy) + mp.add_key_binding('Meta+C', 'copyCaps', copy) + mp.add_key_binding('Meta+v', 'paste', paste) + mp.add_key_binding('Meta+V', 'pasteCaps', paste) + + mp.add_key_binding('Meta+alt+c', 'copy-path', copy_path) + mp.add_key_binding('Meta+alt+C', 'copy-pathCaps', copy_path) + mp.add_key_binding('Meta+alt+v', 'paste-playlist', paste_playlist) + mp.add_key_binding('Meta+alt+V', 'paste-playlistCaps', paste_playlist) +else --Windows and Linux Keybinds + mp.add_key_binding('ctrl+c', 'copy', copy) + mp.add_key_binding('ctrl+C', 'copyCaps', copy) + mp.add_key_binding('ctrl+v', 'paste', paste) + mp.add_key_binding('ctrl+V', 'pasteCaps', paste) + + mp.add_key_binding('ctrl+alt+c', 'copy-path', copy_path) + mp.add_key_binding('ctrl+alt+C', 'copy-pathCaps', copy_path) + mp.add_key_binding('ctrl+alt+v', 'paste-playlist', paste_playlist) + mp.add_key_binding('ctrl+alt+V', 'paste-playlistCaps', paste_playlist) +end +---------------------END OF KEYBINDS CUSTOMIZATION SETTINGS--------------------------------- diff --git a/.config/mpv/scripts/UndoRedo-1.5.2.lua b/.config/mpv/scripts/UndoRedo-1.5.2.lua new file mode 100644 index 0000000..3916e74 --- /dev/null +++ b/.config/mpv/scripts/UndoRedo-1.5.2.lua @@ -0,0 +1,222 @@ +-- Copyright (c) 2020, Eisa AlAwadhi +-- License: BSD 2-Clause License + +-- Creator: Eisa AlAwadhi +-- Project: UndoRedo +-- Version: 1.5.2 + +local utils = require 'mp.utils' +local seconds = 0 +local countTimer = 0 +local seekTime = 0 + +local seekNumber = 0 +local currentIndex = 0 +local seekTable = {} +local seeking = 0 + +local undoRedo = 0 + +local pause = false + +seekTable[0] = 0 + +mp.register_event('file-loaded', function() + filePath = mp.get_property('path') + + timer = mp.add_periodic_timer(0.1, function() + seconds = seconds + 0.1 + end) + + if (pause == true) then + timer:stop() + else + timer:resume() + end + + timer2 = mp.add_periodic_timer(0.1, function() + countTimer = countTimer + 0.1 + + if (countTimer == 0.6) then + + if (seeking == 0) then + + if (pause == true) then + seconds = seconds + else + seconds = seconds - 0.7 + end + + seekTable[currentIndex] = seekTable[currentIndex] + seconds + seconds = 0 + + seekNumber = currentIndex + 1 + currentIndex = seekNumber + seekTime = math.floor(mp.get_property_number('time-pos')) + table.insert(seekTable, seekNumber, seekTime) + + undoRedo = 0 + + elseif (seeking == 1) then + seeking = 0 + end + + end + + end) + + timer2:stop() +end) + + +mp.register_event('seek', function() + timer2:resume() + countTimer = 0 +end) + +mp.register_event('pause', function() + timer:stop() + pause = true +end) + +mp.register_event('unpause', function() + timer:resume() + pause = false +end) + +mp.register_event('end-file', function() + if timer ~= nil then + timer:kill() + end + if timer2 ~= nil then + timer2:kill() + end + seekNumber = 0 + currentIndex = 0 + undoRedo = 0 + seconds = 0 + countTimer = 0 + seekTable[0] = 0 +end) + +local function undo() + if (filePath ~= nil) and (currentIndex > 0) and (seeking == 0) then + + if (pause == true) then + seconds = seconds + else + seconds = seconds - 0.7 + end + + seekTable[currentIndex] = seekTable[currentIndex] + seconds + seconds=0 + + currentIndex = currentIndex - 1 + + if (seekTable[currentIndex] < 0) then + seekTable[currentIndex] = 0 + end + + mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact') + + seeking = 1 + undoRedo = 1 + + mp.osd_message('Undo') + elseif (filePath ~= nil) and (countTimer > 0) and (countTimer < 0.6) then + mp.osd_message('Seeking Still Running') + elseif (filePath ~= nil) and (currentIndex == 0) then + mp.osd_message('No Undo Found') + end +end + +local function redo() + if (filePath ~= nil) and (currentIndex < seekNumber) and (seeking == 0) then + + if (pause == true) then + seconds = seconds + else + seconds = seconds - 0.7 + end + + seekTable[currentIndex] = seekTable[currentIndex] + seconds + seconds = 0 + + currentIndex = currentIndex + 1 + + if (seekTable[currentIndex] < 0) then + seekTable[currentIndex] = 0 + end + + mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact') + + seeking = 1 + undoRedo = 0 + + mp.osd_message('Redo') + elseif (filePath ~= nil) and (countTimer > 0) and (countTimer < 0.6) then + mp.osd_message('Seeking Still Running') + elseif (filePath ~= nil) and (currentIndex == seekNumber) then + mp.osd_message('No Redo Found') + end +end + +local function undoRedo() + if (filePath ~= nil) and (countTimer > 0.5) and (undoRedo == 0) then + + if (pause == true) then + seconds = seconds + else + seconds = seconds - 0.7 + end + + seekTable[currentIndex] = seekTable[currentIndex] + seconds + seconds = 0 + + currentIndex = currentIndex - 1 + + if (seekTable[currentIndex] < 0) then + seekTable[currentIndex] = 0 + end + + mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact') + mp.osd_message('Undo') + seeking = 1 + undoRedo = 1 + elseif (filePath ~= nil) and (countTimer > 0.5) and (undoRedo == 1) then + + if (pause == true) then + seconds = seconds + else + seconds = seconds - 0.7 + end + + seekTable[currentIndex] = seekTable[currentIndex] + seconds + seconds = 0 + + currentIndex = currentIndex + 1 + + if (seekTable[currentIndex] < 0) then + seekTable[currentIndex] = 0 + end + + mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact') + mp.osd_message('Redo') + seeking = 1 + undoRedo = 0 + elseif (filePath ~= nil) and (countTimer > 0) and (countTimer < 0.6) then + mp.osd_message('Seeking Still Running') + elseif (filePath ~= nil) and (countTimer == 0) then + mp.osd_message('No Undo Found') + end +end + + +mp.add_key_binding("ctrl+z", "undo", undo) +mp.add_key_binding("ctrl+Z", "undoCaps", undo) + +mp.add_key_binding("ctrl+y", "redo", redo) +mp.add_key_binding("ctrl+Y", "redoCaps", redo) + +mp.add_key_binding("ctrl+alt+z", "undoRedo", undoRedo) +mp.add_key_binding("ctrl+alt+Z", "undoRedoCaps", undoRedo) diff --git a/.config/mpv/scripts/easycrop.lua b/.config/mpv/scripts/easycrop.lua new file mode 100644 index 0000000..b3a84a7 --- /dev/null +++ b/.config/mpv/scripts/easycrop.lua @@ -0,0 +1,253 @@ +local msg = require('mp.msg') +local assdraw = require('mp.assdraw') + +local script_name = "easycrop" + +-- Number of crop points currently chosen (0 to 2) +local points = {} +-- True if in cropping selection mode +local cropping = false +-- Original value of osc property +local osc_prop = false + +-- Helper that converts two points to top-left and bottom-right +local swizzle_points = function (p1, p2) + if p1.x > p2.x then p1.x, p2.x = p2.x, p1.x end + if p1.y > p2.y then p1.y, p2.y = p2.y, p1.y end +end + +local clamp = function (val, min, max) + assert(min <= max) + if val < min then return min end + if val > max then return max end + return val +end + +local video_space_from_screen_space = function (ssp) + -- Video native dimensions and screen size + local vid_w = mp.get_property("width") + local vid_h = mp.get_property("height") + local osd_w = mp.get_property("osd-width") + local osd_h = mp.get_property("osd-height") + + -- Factor by which the video is scaled to fit the screen + local scale = math.min(osd_w/vid_w, osd_h/vid_h) + + -- Size video takes up in screen + local vid_sw, vid_sh = scale*vid_w, scale*vid_h + + -- Video offset within screen + local off_x = math.floor((osd_w - vid_sw)/2) + local off_y = math.floor((osd_h - vid_sh)/2) + + local vsp = {} + + -- Move the point to within the video + vsp.x = clamp(ssp.x, off_x, off_x + vid_sw) + vsp.y = clamp(ssp.y, off_y, off_y + vid_sh) + + -- Convert screen-space to video-space + vsp.x = math.floor((vsp.x - off_x) / scale) + vsp.y = math.floor((vsp.y - off_y) / scale) + + return vsp +end + +local screen_space_from_video_space = function (vsp) + -- Video native dimensions and screen size + local vid_w = mp.get_property("width") + local vid_h = mp.get_property("height") + local osd_w = mp.get_property("osd-width") + local osd_h = mp.get_property("osd-height") + + -- Factor by which the video is scaled to fit the screen + local scale = math.min(osd_w/vid_w, osd_h/vid_h) + + -- Size video takes up in screen + local vid_sw, vid_sh = scale*vid_w, scale*vid_h + + -- Video offset within screen + local off_x = math.floor((osd_w - vid_sw)/2) + local off_y = math.floor((osd_h - vid_sh)/2) + + local ssp = {} + ssp.x = vsp.x * scale + off_x + ssp.y = vsp.y * scale + off_y + return ssp +end + +-- Wrapper that converts RRGGBB / RRGGBBAA to ASS format +local ass_set_color = function (idx, color) + assert(color:len() == 8 or color:len() == 6) + local ass = "" + + -- Set alpha value (if present) + if color:len() == 8 then + local alpha = 0xff - tonumber(color:sub(7, 8), 16) + ass = ass .. string.format("\\%da&H%X&", idx, alpha) + end + + -- Swizzle RGB to BGR and build ASS string + color = color:sub(5, 6) .. color:sub(3, 4) .. color:sub(1, 2) + return "{" .. ass .. string.format("\\%dc&H%s&", idx, color) .. "}" +end + +local draw_rect = function (p1, p2) + local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height") + + ass = assdraw.ass_new() + + -- Draw overlay over surrounding unselected region + + ass:draw_start() + ass:pos(0, 0) + + ass:append(ass_set_color(1, "000000aa")) + ass:append(ass_set_color(3, "00000000")) + + local l = math.min(p1.x, p2.x) + local r = math.max(p1.x, p2.x) + local u = math.min(p1.y, p2.y) + local d = math.max(p1.y, p2.y) + + ass:rect_cw(0, 0, l, osd_h) + ass:rect_cw(r, 0, osd_w, osd_h) + ass:rect_cw(l, 0, r, u) + ass:rect_cw(l, d, r, osd_h) + + ass:draw_stop() + + -- Draw border around selected region + + ass:new_event() + ass:draw_start() + ass:pos(0, 0) + + ass:append(ass_set_color(1, "00000000")) + ass:append(ass_set_color(3, "000000ff")) + ass:append("{\\bord2}") + + ass:rect_cw(p1.x, p1.y, p2.x, p2.y) + + ass:draw_stop() + + mp.set_osd_ass(osd_w, osd_h, ass.text) +end + +local draw_fill = function () + local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height") + + ass = assdraw.ass_new() + ass:draw_start() + ass:pos(0, 0) + + ass:append(ass_set_color(1, "000000aa")) + ass:append(ass_set_color(3, "00000000")) + ass:rect_cw(0, 0, osd_w, osd_h) + + ass:draw_stop() + mp.set_osd_ass(osd_w, osd_h, ass.text) +end + +local draw_clear = function () + local osd_w, osd_h = mp.get_property("osd-width"), mp.get_property("osd-height") + mp.set_osd_ass(osd_w, osd_h, "") +end + +local draw_cropper = function () + if #points == 1 then + local p1 = screen_space_from_video_space(points[1]) + local p2 = {} + p2.x, p2.y = mp.get_mouse_pos() + draw_rect(p1, p2) + end +end + +local uncrop = function () + mp.command("no-osd vf del @" .. script_name .. ":crop") +end + +local crop = function(p1, p2) + swizzle_points(p1, p2) + + local w = p2.x - p1.x + local h = p2.y - p1.y + local ok, err = mp.command(string.format( + "no-osd vf add @%s:crop=%s:%s:%s:%s", script_name, w, h, p1.x, p1.y)) + + if not ok then + mp.osd_message("Cropping failed") + points = {} + end +end + +local easycrop_stop = function () + mp.set_property("osc", osc_prop) + cropping = false + mp.remove_key_binding("easycrop_mouse_btn0") + draw_clear() +end + +local mouse_btn0_cb = function () + if not cropping then + return + end + + local mx, my = mp.get_mouse_pos() + table.insert(points, video_space_from_screen_space({ x = mx, y = my })) + + if #points == 2 then + crop(points[1], points[2]) + easycrop_stop() + end +end + +local easycrop_start = function () + -- Cropping requires swdec or hwdec with copy-back + local hwdec = mp.get_property("hwdec-current") + if hwdec == nil then + return mp.msg.error("Cannot determine current hardware decoder mode") + end + -- Check whitelist of ok values + local valid_hwdec = { + ["no"] = true, -- software decoding + -- Taken from mpv manual + ["videotoolbox-co"] = true, + ["vaapi-copy"] = true, + ["dxva2-copy"] = true, + ["d3d11va-copy"] = true, + ["mediacodec"] = true + } + if not valid_hwdec[hwdec] then + return mp.osd_message("Cropping requires swdec or hwdec with copy-back (see mpv manual)") + end + + -- Just clear the current crop and return, if there is one + if #points ~= 0 then + uncrop() + points = {} + return + end + + -- Hide OSC + osc_prop = mp.get_property("osc") + mp.set_property("osc", "no") + + cropping = true + mp.add_forced_key_binding("mouse_btn0", "easycrop_mouse_btn0", mouse_btn0_cb) + draw_fill() +end + +local easycrop_activate = function () + if cropping then + easycrop_stop() + else + easycrop_start() + end +end + +mp.add_key_binding("mouse_move", draw_cropper) +mp.observe_property("osd-width", "native", draw_cropper) +mp.observe_property("osd-height", "native", draw_cropper) + +mp.add_key_binding("c", "easy_crop", easycrop_activate) diff --git a/.config/mpv/scripts/interactive-video.lua b/.config/mpv/scripts/interactive-video.lua new file mode 100644 index 0000000..dff046a --- /dev/null +++ b/.config/mpv/scripts/interactive-video.lua @@ -0,0 +1,905 @@ +local utils = require "mp.utils" +local msg = require "mp.msg" + + +--[[ Utility functions ]]------------------------------------------------------ + +-- Change this to `msg.info' to see debug messages on mpv output. +local msg_debug = msg.debug + +-- Count elements in a table. +function count(tbl) + local n = 0 + for _ in pairs(tbl) do n = n + 1 end + return n +end + +-- Make a copy a table (but not of its elements). +function shallow_copy(orig) + local copy + if type(orig) == "table" then + copy = {} + for key, val in pairs(orig) do + copy[key] = val + end + else + copy = orig + end + return copy +end + +-- Round to nearest integer. +math.round = function(x) + return math.floor(x + 0.5) +end + + +--[[ Time functions ]]--------------------------------------------------------- + +-- Only used for rounding purposes: having the exact value is not necessary. +-- Default to 25fps (i.e., 40ms). +local frame_duration = 40 + +-- Get frame duration from container-fps property. +function update_frame_duration() + local fps = mp.get_property_number("container-fps") or 25 + frame_duration = 1000 / (fps > 0 and fps or 25) +end +mp.register_event("file-loaded", update_frame_duration) + +-- Round time position (in ms) to a multiple of frame_duration. +function round_to_frame(time) + return math.round(math.round(time / frame_duration) * frame_duration) +end + +-- Time position of previous frame. +function prev_frame(time) + return round_to_frame(time - frame_duration) +end + +-- Format time position (in ms) as hh:mm:ss.msc. +function time_to_string(time) + return string.format("%02d:%02d:%06.3f", + math.floor(time / 3600000), + math.floor(time / 60000) % 60, + (time % 60000) / 1000) +end + +-- Retrieve the time-pos property (in ms) and round it to a frame position. +function get_time_pos() + local t = (mp.get_property_number("time-pos") or 0) * 1000 - frame_duration + return round_to_frame(t) +end + +-- Seek playback to given time position (in ms). +function set_time_pos(time) + msg_debug("seek to: " .. time_to_string(time)) + local t = round_to_frame(time + frame_duration) / 1000 + mp.set_property_number("time-pos", t) +end + +-- Retrieve the duration property (in ms) and round it to a frame position. +function get_duration() + local t = (mp.get_property_number("duration") or 0) * 1000 - frame_duration + return round_to_frame(t) +end + + +--[[ Global data and state variables ]]---------------------------------------- + +local initial_segment, segments, moments, preconditions, segment_groups +local state = { active = false } + + +--[[ Apply impression ]]------------------------------------------------------- + +function apply_impression(impression) + if impression == nil then + return + + elseif impression.type == "userState" then + for var, val in pairs(impression.data.persistent or {}) do + msg_debug("set variable: " .. var .. " = " .. + utils.to_string(val) .. " (was: " .. + utils.to_string(state.vars[var]) .. ")") + state.vars[var] = val + end + + else + msg.error("Invalid type of impression data: " .. + utils.to_string(impression.type)) + end +end + + +--[[ Evaluate precondition ]]-------------------------------------------------- + +function eval_precondition(cond) + if cond == nil then + return true + + elseif type(cond) ~= "table" then + return cond + + elseif #cond == 0 then + msg.error("Empty precondition expression") + + elseif cond[1] == "not" and #cond == 2 then + return not eval_precondition(cond[2]) + + elseif cond[1] == "and" then + for i = 2, #cond do + if not eval_precondition(cond[i]) then return false end + end + return true + + elseif cond[1] == "or" then + for i = 2, #cond do + if eval_precondition(cond[i]) then return true end + end + return false + + elseif cond[1] == "eql" and #cond == 3 then + return eval_precondition(cond[2]) == eval_precondition(cond[3]) + + elseif cond[1] == "persistentState" and #cond == 2 then + return state.vars[cond[2]] + + else + msg.error("Invalid precondition: " .. utils.to_string(cond)) + end + + return false +end + + +--[[ Format strings for displaying choices on OSD ]]--------------------------- + +function format_osd_choices(choices) + local osd_choices = {} + for i = 1, #choices do + local str = "" + for j, ch in ipairs(choices) do + local b = i == j + str = str .. "{\\fscx70\\fscy70\\an5" + .. "\\pos(" .. ((2*j-1) / (2*#choices)) .. ",0.048)}" + .. (i == j and "{\\c&HFFFFFF&}[ " or "{\\c&H7F7F7F&}") + .. ch.text + .. (i == j and " ]" or "") + .. "\n" + end + table.insert(osd_choices, str) + end + return osd_choices +end + + +--[[ Update OSD according to current state ]]---------------------------------- + +function update_osd() + -- Multiple-choice input. + if state.osd_choices and type(state.osd_input) == "number" then + mp.set_osd_ass(1, 1, state.osd_choices[state.osd_input]) + + -- Code entry input. + elseif state.osd_prompt and type(state.osd_input) == "string" then + mp.set_osd_ass(1, 1, "{\\fscx70\\fscy70\\an4\\pos(0.02,0.048)}" .. + state.osd_prompt .. " " .. state.osd_input .. "_\n") + + -- Nothing to display. + else + mp.set_osd_ass(0, 0, "") + end +end + + +--[[ Navigation and input control functions ]]--------------------------------- + +-- Dummy function. +function cmd_nop() +end + +-- Seek forward. +function cmd_fwd(sec, skip) + return function() + process_events(get_time_pos() + sec * 1000, { no_skip = not skip, + ffwd = true }) + end +end + +-- Seek backward. +function cmd_bwd(sec, skip) + return function() + rewind(sec * 1000, { no_skip = not skip }) + end +end + +-- Select next choice. +function cmd_input_next() + if state.osd_input < #state.osd_choices then + state.osd_input = state.osd_input + 1 + else + state.osd_input = 1 + end + update_osd() +end + +-- Select previous choice. +function cmd_input_prev() + if state.osd_input > 1 then + state.osd_input = state.osd_input - 1 + else + state.osd_input = #state.osd_choices + end + update_osd() +end + +-- Input character. +function cmd_input_char(char) + return function() + state.osd_input = state.osd_input .. char + update_osd() + end +end + +-- Delete last input character. +function cmd_input_backspace() + if string.len(state.osd_input) > 0 then + state.osd_input = string.sub(state.osd_input, 1, -2) + update_osd() + end +end + +-- Submit current input. +function cmd_input_submit() + state.osd_choices = nil + state.osd_prompt = nil + table.insert(state.events, 1, { time = get_time_pos(), type = "submit", + mom_id = state.osd_mom_id }) + update_osd() + update_controls() +end + + +--[[ Key mappings for control functions ]]------------------------------------- + +-- Merge key mappings. +-- Mappings in map1 take precedence over those in map2. +function mapping_merge(map1, map2) + for key, ctrl in pairs(map2) do + map1[key] = map1[key] or ctrl + end +end + +-- Key mapping for navigation. +local nav_mapping = { + ["RIGHT"] = { "iv-nav-right", cmd_fwd( 10), {repeatable=true} }, + ["SHIFT+RIGHT"] = { "iv-nav-sright", cmd_fwd( 10,true), {repeatable=true} }, + ["LEFT"] = { "iv-nav-left", cmd_bwd( 10), {repeatable=true} }, + ["SHIFT+LEFT"] = { "iv-nav-sleft", cmd_bwd( 10,true), {repeatable=true} }, + ["UP"] = { "iv-nav-up", cmd_fwd( 60), {repeatable=true} }, + ["SHIFT+UP"] = { "iv-nav-sup", cmd_fwd( 60,true), {repeatable=true} }, + ["DOWN"] = { "iv-nav-down", cmd_bwd( 60), {repeatable=true} }, + ["SHIFT+DOWN"] = { "iv-nav-sdown", cmd_bwd( 60,true), {repeatable=true} }, + ["PGUP"] = { "iv-nav-pgup", cmd_fwd(1/0), {repeatable=true} }, + ["SHIFT+PGUP"] = { "iv-nav-spgup", cmd_fwd(600,true), {repeatable=true} }, + ["PGDWN"] = { "iv-nav-pgdwn", cmd_bwd(600), {repeatable=true} }, + ["SHIFT+PGDWN"] = { "iv-nav-spgdwn", cmd_bwd(600,true), {repeatable=true} }, +} + +-- Control mapping for multiple-choice input. +local input_choice_mapping = { + ["RIGHT"] = { "iv-input-right", cmd_input_next, { repeatable = true } }, + ["LEFT"] = { "iv-input-left", cmd_input_prev, { repeatable = true } }, + ["ENTER"] = { "iv-input-enter", cmd_input_submit }, +} +for _, key in ipairs({ "UP", "DOWN", "PGUP", "PGDWN" }) do + input_choice_mapping[key] = { "iv-nop-"..key, cmd_nop } +end +mapping_merge(input_choice_mapping, nav_mapping) + +-- Control mapping for code entry input. +local input_code_mapping = { + ["BS"] = { "iv-input-bs", cmd_input_backspace, { repeatable = true } }, + ["ENTER"] = { "iv-input-enter", cmd_input_submit }, +} +for _, key in ipairs({ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }) do + input_code_mapping[key] = { "iv-input-" ..key, cmd_input_char(key) } + input_code_mapping["KP"..key] = { "iv-input-kp"..key, cmd_input_char(key) } +end +for _, key in ipairs({ "RIGHT", "LEFT", "UP", "DOWN", "PGUP", "PGDWN" }) do + input_code_mapping[key] = { "iv-nop-" ..key, cmd_nop } +end +mapping_merge(input_code_mapping, nav_mapping) + + +--[[ Update controls according to current state ]]----------------------------- + +local current_mapping + +function update_controls() + local new_mapping + + if state.active then + -- Multiple-choice input. + if state.osd_choices and type(state.osd_input) == "number" then + new_mapping = input_choice_mapping + + -- Code entry input. + elseif state.osd_prompt and type(state.osd_input) == "string" then + new_mapping = input_code_mapping + + -- No input: only navigation controls. + else + new_mapping = nav_mapping + end + end + + if new_mapping ~= current_mapping then + -- Remove current control bindings. + for key, ctrl in pairs(current_mapping or {}) do + mp.remove_key_binding(ctrl[1]) + end + + -- Register new control bindings. + current_mapping = new_mapping + for key, ctrl in pairs(current_mapping or {}) do + mp.add_forced_key_binding(key, table.unpack(ctrl)) + end + end +end + + +--[[ Deactivate interactive video playback ]]---------------------------------- + +function deactivate() + mp.unregister_event(on_tick) + state = { active = false } + update_osd() + update_controls() +end + + +--[[ Retrieve first valid segment from segment group ]]------------------------ + +function resolve_segment_group(group_id) + for _, seg_id in ipairs(segment_groups[group_id] or {}) do + if type(seg_id) == "table" and seg_id.segmentGroup then + seg_id = resolve_segment_group(seg_id.segmentGroup) + if seg_id then return seg_id end + else + local cond_id = seg_id + if type(seg_id) == "table" then + cond_id = seg_id.precondition + seg_id = seg_id.segment + end + if eval_precondition(preconditions[cond_id]) then + return seg_id + end + end + end + return nil +end + + +--[[ Load segment and schedule all related events in the event queue ]]-------- + +function load_segment(seg_id) + msg_debug("load segment: " .. seg_id) + state.seg_id = seg_id + + state.events = {} + + -- Add moment-related events. + for i, mom in ipairs(moments[state.seg_id] or {}) do + table.insert(state.events, { time = mom.startMs, + type = "start", mom_id = i }) + table.insert(state.events, { time = prev_frame(mom.endMs), + type = "end", mom_id = i }) + if string.sub(mom.type, 1, 6) == "scene:" then + table.insert(state.events, { time = mom.uiDisplayMS, + type = "display", mom_id = i }) + table.insert(state.events, { time = prev_frame(mom.uiHideMS), + type = "hide", mom_id = i }) + end + end + + -- Sort moment-related events. + table.sort(state.events, function(ev1, ev2) + if ev1.time ~= ev2.time or ev1.mom_id ~= ev2.mom_id then + return ev1.time < ev2.time + elseif ev1.type ~= ev2.type then + return ev1.type == "start" or ev2.type == "end" or + (ev1.type == "display" and ev2.type == "hide") + else + return false + end + end) + + -- Add segment start and end events. + local seg = segments[state.seg_id] + table.insert(state.events, 1, { time = seg.startTimeMs, + type = "start_seg" }) + table.insert(state.events, { time = prev_frame(seg.endTimeMs or + get_duration()), + type = "end_seg" }) +end + + +--[[ Process all pending events until given (or current) time position ]]------ + +function process_events(time, flags) + time = time or get_time_pos() + flags = flags or {} + + local seek = flags.ffwd + + if not state.events then return end + while #state.events > 0 and time >= state.events[1].time do + -- Pop first event from queue. + local ev = state.events[1] + table.remove(state.events, 1) + + msg_debug("process event: " .. time_to_string(ev.time) .. " " .. + string.format("%-10s", ev.type) .. + state.seg_id .. (ev.mom_id and ("/" .. ev.mom_id) or "") .. + ((ev.type == "submit" or ev.type == "end") and state.osd_input + and (" (" .. utils.to_string(state.osd_input) .. ")") or "")) + + local next_seg_id = nil + + -- Moment-related event? + if ev.mom_id then + local mom = moments[state.seg_id][ev.mom_id] + + -- Start of new moment? + if ev.type == "start" then + -- Check precondition, and remove all moments related to this event + -- if it is not satisfied. + if not eval_precondition(mom.precondition) then + for i = #state.events, 1, -1 do + if state.events[i].mom_id == ev.mom_id then + table.remove(state.events, i) + end + end + else + apply_impression(mom.impressionData) + end + + -- Scene-related event? + elseif string.sub(mom.type, 1, 6) == "scene:" then + -- Display user input controls. + if ev.type == "display" then + state.osd_mom_id = ev.mom_id + if mom.config.hasMultipleChoiceInput then + state.osd_prompt = "Enter code:" + state.osd_input = "" + else + state.osd_choices = format_osd_choices(mom.choices) + state.osd_input = mom.defaultChoiceIndex + 1 + end + if state.hist[state.hist_idx].inputs[ev.mom_id] then + state.osd_input = state.hist[state.hist_idx].inputs[ev.mom_id] + end + if flags.no_skip and time > ev.time then + time = ev.time + seek = true + end + + -- Hide user input controls. + elseif ev.type == "hide" then + state.osd_choices = nil + state.osd_prompt = nil + state.osd_mom_id = nil + + -- Select branch according to user input. + elseif ev.type == "end" or + (ev.type == "submit" and + not mom.config.disableImmediateSceneTransition) then + -- Record input in history. + -- Clear all forward history if input different from recorded one. + local hist = state.hist[state.hist_idx] + if state.osd_input ~= hist.inputs[ev.mom_id] then + hist.inputs[ev.mom_id] = state.osd_input + for i, mi in ipairs(moments[state.seg_id]) do + if string.sub(mi.type, 1, 6) == "scene:" and + mi.startMs >= mom.endMs then + hist.inputs[i] = nil + end + end + for i = #state.hist, state.hist_idx+1, -1 do + state.hist[i] = nil + end + end + + -- Find corresponding choice. + local choice + if mom.config.hasMultipleChoiceInput then + for _, ch in ipairs(mom.choices) do + if not ch.code or state.osd_input == ch.code then + choice = ch + break + end + end + if not choice then + msg.error("No choice available for input '" .. state.osd_input .. + "' in moment " .. state.seg_id .. "/" .. ev.mom_id) + deactivate() + return + end + else + choice = mom.choices[state.osd_input] + end + apply_impression(choice.impressionData) + + -- Select next segment accordingly. + if not (mom.trackingInfo and + mom.trackingInfo.optionType == "fakeOption") then + next_seg_id = choice.segmentId or resolve_segment_group(choice.sg) + if not next_seg_id then + msg.error("No segment for choice '" .. choice.id .. "' " .. + "of moment " .. state.seg_id .. "/" .. ev.mom_id) + deactivate() + return + end + end + state.osd_input = nil + end + end + + -- Start of current segment? + elseif ev.type == "start_seg" then + state.hist_idx = state.hist_idx + 1 + if not state.hist[state.hist_idx] then + state.hist[state.hist_idx] = { seg_id = state.seg_id, + vars = shallow_copy(state.vars), + inputs = {} } + end + + -- End of current segment? + elseif ev.type == "end_seg" then + next_seg_id = resolve_segment_group(state.seg_id) or + next(segments[state.seg_id].next) + if not next_seg_id then + msg.debug("No segment after " .. state.seg_id .. "; " .. + "assuming end of video") + deactivate() + mp.commandv("playlist-next", "force") + return + end + end + + -- Load next segment? + if next_seg_id then + local cur_seg = segments[state.seg_id] + local next_seg = segments[next_seg_id] + + -- If next segment does not directly follow current segment, + -- we need to jump. + if next_seg.startTimeMs ~= cur_seg.endTimeMs then + if flags.ffwd then + time = next_seg.startTimeMs + time - prev_frame(cur_seg.endTimeMs) + else + time = next_seg.startTimeMs + end + seek = true + + -- Also jump if skipping end of current segment. + elseif time < next_seg.startTimeMs then + time = next_seg.startTimeMs + seek = true + end + + load_segment(next_seg_id) + end + end + + -- Jump to current time position, if required. + if seek then + set_time_pos(time) + end + + -- Update OSD and controls according to current state. + update_osd() + update_controls() +end + + +--[[ Seek backwards and rewind history ]]-------------------------------------- + +function rewind(delay, flags) + flags = flags or {} + + if state.hist_idx == 0 then return end + + local time = get_time_pos() + local seg_id = state.hist[state.hist_idx].seg_id + local first = true + + -- Keep rewinding from segment to segment until delay is consumed. + while delay > 0 and (first or state.hist_idx > 1) do + if first then + first = false + else + state.hist_idx = state.hist_idx - 1 + seg_id = state.hist[state.hist_idx].seg_id + time = segments[seg_id].endTimeMs + end + + -- If in no-skip mode, find previous scene, if any. + if flags.no_skip then + local prev_mom + for _, mom in ipairs(moments[seg_id]) do + if string.sub(mom.type, 1, 6) == "scene:" and + time - delay <= mom.uiDisplayMS and mom.uiDisplayMS < time and + (not prev_mom or prev_mom.uiDisplayMS < mom.uiDisplayMS) then + prev_mom = mom + end + end + if prev_mom then + time = prev_mom.uiDisplayMS + delay = 0 + break + end + end + + -- Rewind until start of current segment. + delay = delay - time + segments[seg_id].startTimeMs + time = segments[seg_id].startTimeMs + end + + -- Adjust actual time. + if delay < 0 then + time = time - delay + end + + -- Load current segment and state variables from history. + load_segment(seg_id) + shallow_copy(state.vars, state.hist[state.hist_idx].vars) + state.hist_idx = state.hist_idx - 1 + state.osd_choices = nil + state.osd_prompt = nil + + -- Re-run current segment's history forward until actual time. + process_events(time, { ffwd = true }) +end + + +--[[ Load and check JSON data files, if any, on file load ]]------------------- + +function on_start_file(_) + deactivate() + + -- Look for JSON data files. + + local dir = utils.split_path(mp.get_property("path")) + local base = mp.get_property("filename/no-ext") + local seg = utils.join_path(dir, base .. ".seg.json") + local ivm = utils.join_path(dir, base .. ".ivm.json") + if not (utils.file_info(seg) and utils.file_info(ivm)) then + return + end + msg.info("Found JSON data files for interactive video playback:\n" .. + " seg: " .. seg .. "\n" .. + " ivm: " .. ivm) + + -- Read and parse JSON data files. + + local file + file = io.open(seg, "r") + if not file then + msg.error("Cannot read from " .. seg) + return + end + seg = utils.parse_json(file:read("*a")) + file:close() + + file = io.open(ivm, "r") + if not file then + msg.error("Cannot read from " .. ivm) + return + end + ivm = utils.parse_json(file:read("*a")) + file:close() + + -- Initialize data from JSON structures. + + segments = seg.segments + initial_segment = seg.initialSegment + local video_id = "" .. (seg.viewableId or "") + + if not segments then + msg.error( "segments not found in JSON data files") + return + elseif not initial_segment then + msg.error("initialSegment not found in JSON data files") + return + elseif not video_id then + msg.error( "viewableId not found in JSON data files") + return + end + + if ivm.videos and ivm.videos[video_id] and + ivm.videos[video_id].interactiveVideoMoments then + ivm = ivm.videos[video_id].interactiveVideoMoments.value + else + ivm = nil + end + if not ivm then + msg.error("interactiveVideoMoments not found in JSON data files") + return + end + + moments = ivm.momentsBySegment + preconditions = ivm.preconditions + segment_groups = ivm.segmentGroups + state.vars = shallow_copy(ivm.stateHistory) + + if not moments then + msg.error("momentsBySegment not found in JSON data files") + return + elseif not preconditions then + msg.error( "preconditions not found in JSON data files") + return + elseif not segment_groups then + msg.error( "segmentGroups not found in JSON data files") + return + elseif not state.vars then + msg.error( "stateHistory not found in JSON data files") + return + end + + -- Sanity checks. + + local fail = false + + -- Check segment history. + if not (ivm.segmentHistory and #ivm.segmentHistory == 1 and + ivm.segmentHistory[1] == initial_segment) then + msg.error("Invalid segmentHistory" .. + ": expected " .. utils.to_string({ initial_segment }) .. + ", got " .. utils.to_string(ivm.segmentHistory)) + fail = true + end + + -- Check segments. + for k, seg in pairs(segments) do + if (seg.endTimeMs or 1/0) <= seg.startTimeMs then + msg.error("Segment " .. k .. " ends before it starts") + fail = true + end + local has_scene = false + for i, mom in ipairs(moments[k] or {}) do + if string.sub(mom.type, 1, 6) == "scene:" and + not (mom.trackingInfo and + mom.trackingInfo.optionType == "fakeOption") then + has_scene = true + break + end + end + if count(seg.next) > 1 and not has_scene and not segment_groups[k] then + msg.error("Segment " .. k .. " requires a branching moment " .. + "or a segment group") + fail = true + end + end + + -- Check moments. + local n_moments = 0 + for k, ml in pairs(moments) do + n_moments = n_moments + #ml + for i, mi in ipairs(ml) do + local ki = k .. "/" .. i + + if mi.endMs <= mi.startMs then + msg.error("Moment " .. ki .. " ends before it starts") + fail = true + end + if mi.startMs < segments[k].startTimeMs then + msg.error("Moment " .. ki .. " starts before its segment does") + fail = true + end + if mi.endMs > (segments[k].endTimeMs or 1/0) then + msg.error("Moment " .. ki .. " ends after its segment does") + fail = true + end + + -- Scene moments. + if string.sub(mi.type, 1, 6) == "scene:" then + if not mi.choices then + msg.error("Moment " .. ki .. " has no branching choices") + fail = true + end + if not (mi.uiDisplayMS and mi.uiHideMS) then + msg.error("Moment " .. ki .. " has no display interval") + fail = true + else + if mi.uiHideMS <= mi.uiDisplayMS then + msg.error("Moment " .. ki .. "'s display interval is empty") + fail = true + end + if mi.uiDisplayMS < mi.startMs or mi.uiHideMS >= mi.endMs then + msg.warn ("Moment " .. ki .. "'s display interval overflows " .. + "out of bounds") + end + end + if mi.endMs < (segments[k].endTimeMs or 1/0) and + not (mi.trackingInfo and + mi.trackingInfo.optionType == "fakeOption") then + msg.warn ("Moment " .. ki .. " ends before its segment does") + end + + for j, mj in ipairs(ml) do + local kj = k .. "/" .. j + if i ~= j and mi.startMs <= mj.startMs and mj.startMs < mi.endMs then + msg.error("Moment " .. kj .. " starts while " .. ki .. + " is active") + fail = true + end + end + + -- Notification moments. + elseif mi.type == "notification:playbackImpression" then + if mi.choices then + msg.error("Moment " .. ki .. " has branching choices") + fail = true + end + if not mi.impressionData then + msg.warn ("Moment " .. ki .. " has no impression data") + end + + elseif mi.type == "notification:action" then + if mi.choices then + msg.error("Moment " .. ki .. " has branching choices") + fail = true + end + + else + msg.error ("Moment " .. ki .. " has invalid type: " .. mi.type) + fail = true + end + end + end + + if fail then + deactivate() + return + end + + -- Display stats. + + msg.verbose("Loaded JSON data files:\n" .. + " " .. count(segments) .. " segments\n" .. + " " .. n_moments .. " interactive moments\n" .. + " " .. count(preconditions) .. " preconditions\n" .. + " " .. count(segment_groups) .. " segment groups\n" .. + " " .. count(state.vars) .. " state variables") + + state.active = true + state.hist_idx = 0 + state.hist = {} + update_controls() +end + + +--[[ Jump to initial segment at beginning of playback ]]----------------------- + +function on_file_loaded(_) + if not state.active then return end + mp.register_event("tick", on_tick) + load_segment(initial_segment) + process_events(segments[initial_segment].startTimeMs, { ffwd = true }) +end + + +--[[ Process queued events on each frame ]]------------------------------------ + +function on_tick(_) + process_events() +end + + +--[[ Register script entry-point events ]]------------------------------------- + +mp.register_event("start-file", on_start_file) +mp.register_event("file-loaded", on_file_loaded) diff --git a/.config/mpv/scripts/mpvmenu b/.config/mpv/scripts/mpvmenu new file mode 100644 index 0000000..5a7d4ce --- /dev/null +++ b/.config/mpv/scripts/mpvmenu @@ -0,0 +1,454 @@ +#!/usr/bin/env python3 + +import argparse +import json +import logging +import os +import os.path +import signal +import socket +import subprocess +import time + +import gi +gi.require_version('Gtk', '3.0') # noqa +from gi.repository import Gtk + +CONNECT_RETRY_DELAY = 2.0 + + +LOGGER = logging.getLogger(__name__) +WORK_DIR = os.getcwd() + +post_menu_action = None + + +class RPC: + def __init__(self, path): + self.path = path + self.socket = socket.socket(socket.AF_UNIX, + socket.SOCK_STREAM) + connected = False + while not connected: + try: + logging.debug("Attempting to connect to RPC.") + self.socket.connect(self.path) + connected = True + except socket.error: + logging.debug("Connection attempt failed.") + time.sleep(CONNECT_RETRY_DELAY) + self.file = self.socket.makefile("rw", 65536) + + def send_line(self, s): + self.file.write(s + "\n") + self.file.flush() + + def recv_line(self): + return self.file.readline(1024) + + def send_cmd(self, *args): + self.send_line(json.dumps({"command": args})) + + def recv_data(self): + s = self.recv_line() + if not s: + return None + return json.loads(s) + + def get_result(self): + dat = {} + while not ("error" in dat): + dat = self.recv_data() + return dat + + def command(self, *args): + self.send_cmd(*args) + dat = self.get_result() + success = (dat["error"] == "success") + return (success, dat["data"] if success else None) + + def set_prop(self, prop, value): + self.send_cmd("set_property", prop, value) + return self.get_result()["error"] == "success" + + def get_prop(self, prop): + self.send_cmd("get_property", prop) + dat = self.get_result() + return dat["data"] if dat["error"] == "success" else None + + +class OPT: + NORMAL = 0 + CHECK = 1 + SEP = 2 + SLIDER = 3 + + def __init__(self, name=None, typ=NORMAL, + init=None, activate=None): + self.name = name + self.typ = typ + self.init_ = init + self.activate_ = activate + + def init(self): + if self.init_: + return self.init_() + + def activate(self): + if self.activate_: + return self.activate_() + else: + LOGGER.debug("Option {} activated.".format(self.name)) + + +SEP = OPT(typ=OPT.SEP) + + +class TOGGLE(OPT): + def __init__(self, name, prop): + OPT.__init__(self, name, OPT.CHECK) + self.prop = prop + + def init(self): + self.state = rpc.get_prop(self.prop) + # In case we got None, because this property "vanished" + # for some reason, default to False. + if self.state is None: + LOGGER.warn("Can't get value for toggle property {}." + " No need to panic though.".format(self.prop)) + self.state = False + LOGGER.debug("initial state for {} : {}." + .format(self.prop, self.state)) + + def activate(self): + rpc.set_prop(self.prop, not self.state) + LOGGER.debug("Property {} change: {} -> {}." + .format(self.prop, self.state, not self.state)) + + +class FILTER_TOGGLE(OPT): + def __init__(self, name, filter_type, filter_name, filter_opts): + OPT.__init__(self, name, OPT.CHECK) + self.ft = "af" if filter_type[0] == "a" else "vf" + self.filter_name = filter_name + self.filter_opts = filter_opts + + def init(self): + self.state = (self.filter_name in map(lambda x: x["name"], + rpc.get_prop(self.ft))) + + def activate(self): + # Note: af/vf toggle command might be removed/changed later. + rpc.command(self.ft, "toggle", self.filter_name+"="+self.filter_opts) + + +class COMMAND(OPT): + def __init__(self, name, *args): + OPT.__init__(self, name, OPT.NORMAL) + self.args = args + + def activate(self): + rpc.command(*self.args) + + +class OPT_SET_PROP(OPT): + def __init__(self, name, prop, value): + OPT.__init__(self, name, OPT.NORMAL) + self.prop = prop + self.value = value + + def activate(self): + rpc.set_prop(self.prop, self.value) + + +def get_track_info(): + info = {"video": [], "audio": [], "sub": []} + for i in range(rpc.get_prop("track-list/count")): + N = str(i) + type_ = rpc.get_prop("track-list/" + N + "/type") + track = { + "id": rpc.get_prop("track-list/" + N + "/id"), + "src-id": rpc.get_prop("track-list/" + N + "/src-id"), + "title": rpc.get_prop("track-list/" + N + "/title"), + "lang": rpc.get_prop("track-list/" + N + "/lang"), + "default": rpc.get_prop("track-list/" + N + "/default"), + } + if rpc.get_prop("track-list/" + N + "/external"): + track["filename"] = rpc.get_prop("track-list/" + N + + "/external-filename") + info[type_].append(track) + return info + + +def to_abs_path(path): + return os.path.normpath(os.path.join(WORK_DIR, path)) + + +def load_file_run_dialog(title): + dialog = Gtk.FileChooserDialog(title, None, + Gtk.FileChooserAction.OPEN, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) + dialog.set_current_folder(os.path.dirname( + to_abs_path(rpc.get_prop("path")))) + filename = "" + if (dialog.run() == Gtk.ResponseType.OK): + filename = dialog.get_filename() + dialog.destroy() + Gtk.main_quit() + return filename + + +def load_sub_file(): + filename = load_file_run_dialog("Choose a subtitle file") + if filename: + rpc.command("sub_add", filename) + LOGGER.debug("Subtitle file to load: {}.".format(filename)) + else: + LOGGER.debug("Subtitle file load dlg canceled.") + + +def load_file(): + filename = load_file_run_dialog("Choose a subtitle file") + if filename: + rpc.command("loadfile", filename) + + +def post_menu_action_factory(act): + def func(): + global post_menu_action + post_menu_action = act + return func + + +def dl_subs(): + path = to_abs_path(rpc.get_prop("path")) + try: + logging.debug("Calling subdownloader.") + status = subprocess.call(["subdownloader", "--rename-video", + "-V", path]) + logging.debug("Subdownloader exited with status: {}".format(status)) + rpc.command("rescan-external-files") + except OSError: + dialog = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO, + Gtk.ButtonsType.OK, + "Subdownloader required") + dialog.format_secondary_text("Currently, this option requires" + + "\nsubdownloader to be installed.") + dialog.run() + dialog.destroy() + Gtk.main_quit() + + +def about(): + dialog = Gtk.AboutDialog(program_name="MPVMenu", + comments="Popup menu for MPV", + logo_icon_name="") + dialog.run() + dialog.destroy() + Gtk.main_quit() + + +class Layout: + def __init__(self, *args): + if len(args) > 1 and isinstance(args[0], str): + self.name = args[0] + args = args[1:] + self.items = args + + +class TracklistLayout(Layout): + TYPE_VIDEO = 0 + TYPE_AUDIO = 1 + TYPE_SUB = 2 + + def __init__(self, name, typ): + self.typ = typ + self.name = name + + @property + def items(self): + typ = ("video", "audio", "sub")[self.typ] + tracklist = get_track_info()[typ] + return list(map(self.track_info_to_opt, tracklist)) + + def track_info_to_opt(self, track): + prop = ("vid", "aid", "sid")[self.typ] + id_ = track["id"] + title = " "+track["title"] if track["title"] else " Untitled" + lang = " ("+track["lang"]+")" if track["lang"] else "" + default = " (default)" if track["default"] else "" + name = "{}{}{}{}".format(id_, title, + lang, default) + return OPT_SET_PROP(name, prop, track["id"]) + + +layout = Layout( + Layout( + "File", + OPT("Open file", activate=load_file), + SEP, + COMMAND("Quit mpv", "quit"), + COMMAND("Quit mpv (watch later)", "quit_watch_later"), + OPT("Quit mpvmenu", activate=exit) + ), + Layout( + "Playback", + TOGGLE("Pause", "pause"), + Layout( + "Rewind", + COMMAND("3 seconds", "seek", "-3"), + COMMAND("10 seconds", "seek", "-10"), + COMMAND("1 minute", "seek", "-60") + ), + Layout( + "Fast forward", + COMMAND("3 seconds", "seek", "3"), + COMMAND("10 seconds", "seek", "10"), + COMMAND("1 minute", "seek", "60") + ), + ), + Layout( + "Playlist", + COMMAND("Previous", "playlist_prev"), + COMMAND("Next", "playlist_next") + ), + Layout( + "Audio", + TracklistLayout("Select audio track", + TracklistLayout.TYPE_AUDIO), + TOGGLE("Mute", "mute"), + Layout( + "Audio Filters", + FILTER_TOGGLE("Dynamic Range Compression", + "a", "drc", "2:1") + ) + ), + Layout( + "Video", + TracklistLayout("Select video track", + TracklistLayout.TYPE_VIDEO), + TOGGLE("Fullscreen", "fullscreen") + ), + Layout( + "Subtitles", + TracklistLayout("Select subtitle track", + TracklistLayout.TYPE_SUB), + TOGGLE("Enabled", "sub-visibility"), + OPT("Load subtitles from file", activate=load_sub_file), + OPT("Download subtitles", + activate=post_menu_action_factory(dl_subs)) + ), + SEP, + Layout("Help", OPT("About", activate=about)), +) + + +class Menu(Gtk.Menu): + def __init__(self, layout): + Gtk.Menu.__init__(self) + self.process_layout(layout) + self.action = "" + self.show_all() + self.connect("selection-done", + self.on_selection_done) + self.popup(None, None, + None, None, + 2, + Gtk.get_current_event_time()) + self.activation_handled = False + + def on_selection_done(self, widget): + Gtk.main_quit() + return True + + def on_menu_item_activate(self, widget): + global action + if not self.activation_handled: + widget.activate() + self.activation_handled = True + return True + + def on_menu_item_btn(self, widget, evt): + if evt.button != 1: + return False + return self.on_menu_item_activate(widget) + + def process_layout(self, layout, menu=None): + if not menu: + menu = self + for item in layout.items: + if isinstance(item, Layout): + menu_item = Gtk.MenuItem(item.name) + submenu = Gtk.Menu() + menu_item.set_submenu(submenu) + menu.append(menu_item) + self.process_layout(item, submenu) + else: + if item.typ == OPT.SEP: + menu_item = Gtk.SeparatorMenuItem() + else: + item.init() + if item.typ == OPT.CHECK: + menu_item = Gtk.CheckMenuItem(item.name) + menu_item.set_active(item.state) + else: + menu_item = Gtk.MenuItem(item.name) + menu_item.activate = item.activate + menu_item.connect("activate", + self.on_menu_item_activate) + # workaround for bug #695488 + menu_item.connect("button-press-event", + self.on_menu_item_btn) + menu.append(menu_item) + + +def run_client(script_message): + global rpc + global post_menu_action + rpc = RPC("/var/run/user/{}/mpv.sock".format(os.getuid())) + + wd = rpc.get_prop("working-directory") + if wd: + WORK_DIR = wd # noqa + else: + LOGGER.warn("Can't get mpv's working directory,", + "using current working dir of this script.") + + while True: + dat = rpc.recv_data() + if not dat: + break + # dispatch + if "event" in dat: + # event + if dat["event"] == "client-message" and \ + dat["args"][0] == script_message: + menu = Menu(layout) # noqa + Gtk.main() + if post_menu_action: + logging.debug("Calling post menu action.") + post_menu_action() + post_menu_action = None + + +if __name__ == "__main__": + arg_parser = argparse.ArgumentParser(description="Show a menu" + + " when an action occurs in MPV.") + arg_parser.add_argument("--log-level", type=str, choices=["debug", "info", + "warn", "error"], + default="warn", help="logging level") + arg_parser.add_argument("--script-message", type=str, default="popup_menu", + help="custom script message to trigger the menu") + args = arg_parser.parse_args() + + logging.basicConfig(level=getattr(logging, args.log_level.upper()), + format="[%(asctime)s] %(levelname)s in " + + "%(funcName)s at %(lineno)d: %(message)s") + + signal.signal(signal.SIGINT, signal.SIG_DFL) + while True: + try: + run_client(args.script_message) + except (BrokenPipeError, ConnectionResetError): + pass diff --git a/.config/mpv/scripts/notify-send.lua b/.config/mpv/scripts/notify-send.lua new file mode 100644 index 0000000..e0c022d --- /dev/null +++ b/.config/mpv/scripts/notify-send.lua @@ -0,0 +1,99 @@ +local utils = require "mp.utils" + +local cover_filenames = { "cover.png", "cover.jpg", "cover.jpeg", + "folder.jpg", "folder.png", "folder.jpeg", + "AlbumArtwork.png", "AlbumArtwork.jpg", "AlbumArtwork.jpeg" } + +function notify(summary, body, options) + local option_args = {} + for key, value in pairs(options or {}) do + table.insert(option_args, string.format("--%s=%s", key, value)) + end + return mp.command_native({ + "run", "notify-send", unpack(option_args), + summary, body, + }) +end + +function escape_pango_markup(str) + return string.gsub(str, "([\"'<>&])", function (char) + return string.format("&#%d;", string.byte(char)) + end) +end + +function notify_media(title, origin, thumbnail) + return notify(escape_pango_markup(title), origin, { + -- For some inscrutable reason, GNOME 3.24.2 + -- nondeterministically fails to pick up the notification icon + -- if either of these two parameters are present. + -- + -- urgency = "low", + -- ["app-name"] = "mpv", + + -- ...and this one makes notifications nondeterministically + -- fail to appear altogether. + -- + -- hint = "string:desktop-entry:mpv", + + icon = thumbnail or "mpv", + }) +end + +function file_exists(path) + local info, _ = utils.file_info(path) + return info ~= nil +end + +function find_cover(dir) + -- make dir an absolute path + if dir[1] ~= "/" then + dir = utils.join_path(utils.getcwd(), dir) + end + + for _, file in ipairs(cover_filenames) do + local path = utils.join_path(dir, file) + if file_exists(path) then + return path + end + end + + return nil +end + +function notify_current_media() + local path = mp.get_property_native("path") + + local dir, file = utils.split_path(path) + + -- TODO: handle embedded covers and videos? + -- potential options: mpv's take_screenshot, ffprobe/ffmpeg, ... + -- hooking off existing desktop thumbnails would be good too + local thumbnail = find_cover(dir) + + local title = file + local origin = dir + + local metadata = mp.get_property_native("metadata") + if metadata then + function tag(name) + return metadata[string.upper(name)] or metadata[name] + end + + title = tag("title") or title + origin = tag("artist_credit") or tag("artist") or "" + + local album = tag("album") + if album then + origin = string.format("%s — %s", origin, album) + end + + local year = tag("original_year") or tag("year") + if year then + origin = string.format("%s (%s)", origin, year) + end + end + + return notify_media(title, origin, thumbnail) +end + +mp.register_event("file-loaded", notify_current_media) diff --git a/.config/mpv/scripts/webtorrent-hook.lua b/.config/mpv/scripts/webtorrent-hook.lua new file mode 100644 index 0000000..cc66b56 --- /dev/null +++ b/.config/mpv/scripts/webtorrent-hook.lua @@ -0,0 +1,136 @@ +-- TODO prefetch if next in playlist? +-- TODO handle torrent with multiple video files (if webtorrent can print json) +-- - don't close kill webtorrent while still videos unplayed? or in playlist? +-- - store titles/info when starting webtorrent and check stream-open-filename +-- for any item in playlist to see if it matches stored entry + +local settings = { + close_webtorrent = true, + remove_files = true, + download_directory = "/tmp/webtorrent", + webtorrent_flags = "", + webtorrent_verbosity = "speed" +} + +(require "mp.options").read_options(settings, "webtorrent-hook") + +local open_videos = {} + +-- http://lua-users.org/wiki/StringRecipes +local function ends_with(str, ending) + return ending == "" or str:sub(-#ending) == ending +end + +-- https://stackoverflow.com/questions/132397/get-back-the-output-of-os-execute-in-lua +function os.capture(cmd, decolorize, raw) + if decolorize then + -- https://github.com/webtorrent/webtorrent-cli/issues/132 + -- TODO webtorrent should have a way to just print json information with + -- no colors + -- https://stackoverflow.com/questions/19296667/remove-ansi-color-codes-from-a-text-file-using-bash/30938702#30938702 + cmd = cmd .. " | sed -r 's/\\x1B\\[(([0-9]{1,2})?(;)?([0-9]{1,2})?)?[m,K,H,f,J]//g'" + end + local f = assert(io.popen(cmd, 'r')) + local s = assert(f:read('*a')) + f:close() + if raw then return s end + s = string.gsub(s, '^%s+', '') + s = string.gsub(s, '%s+$', '') + -- s = string.gsub(s, '[\n\r]+', ' ') + return s +end + +function read_file(file) + local fh = assert(io.open(file, "rb")) + local contents = fh:read("*all") + fh:close() + return contents +end + +function play_torrent() + local url = mp.get_property("stream-open-filename") + if (url:find("magnet:") == 1 or url:find("peerflix://") == 1 + or url:find("webtorrent://") == 1 or ends_with(url, "torrent")) then + if url:find("webtorrent://") == 1 then + url = url:sub(14) + end + if url:find("peerflix://") == 1 then + url = url:sub(12) + end + + os.execute("mkdir -p " .. settings.download_directory) + -- don't reuse files (so multiple mpvs works) + local output_file = settings.download_directory + .. "/webtorrent-output-" .. mp.get_time() .. ".log" + -- --keep-seeding is to prevent webtorrent from quitting once the download + -- is done + local webtorrent_command = "webtorrent " + .. settings.webtorrent_flags + .. " --out '" .. settings.download_directory .. "' --keep-seeding '" + .. url .. "' &> " .. output_file .. " & echo $!" + local pid = os.capture(webtorrent_command) + mp.msg.info("Waiting for webtorrent server") + + local url_command = "tail -f " .. output_file + .. " | awk '/Server running at:/ {print $4; exit}'" + local url = os.capture(url_command, true) + mp.msg.info("Webtorrent server is up") + + local title_command = "awk '/(Seeding|Downloading): / " + .. "{gsub(/(Seeding|Downloading): /, \"\"); print; exit}' " + .. output_file + local title = os.capture(title_command, true) + mp.msg.verbose("Setting media title to: " .. title) + mp.set_property("force-media-title", title) + + local path + if title then + path = settings.download_directory .. "/" .. title + end + open_videos[url] = {title=title,path=path,pid=pid} + + mp.set_property("stream-open-filename", url) + + if settings.webtorrent_verbosity == "speed" then + local printer_pid + local printer_pid_file = settings.download_directory + .. "/webtorrent-printer-" .. mp.get_time() .. ".pid" + os.execute("tail -f " .. output_file + .. " | awk '/Speed:/' ORS='\r' & echo -n $! > " + .. printer_pid_file) + printer_pid = read_file(printer_pid_file) + mp.register_event("file-loaded", + function() + os.execute("kill " .. printer_pid) + end + ) + end + end +end + +function webtorrent_cleanup() + local url = mp.get_property("stream-open-filename") + if settings.close_webtorrent and open_videos[url] then + local title = open_videos[url].title + local path = open_videos[url].path + local pid = open_videos[url].pid + + if pid then + mp.msg.verbose("Closing webtorrent for " .. title) + os.execute("kill " .. pid) + end + + if settings.remove_files then + if path then + mp.msg.verbose("Removing media file for " .. title) + os.execute("rm -r '" .. path .. "'") + end + end + + open_videos[url] = {} + end +end + +mp.add_hook("on_load", 50, play_torrent) + +mp.add_hook("on_unload", 10, webtorrent_cleanup) diff --git a/.config/mpv/watch_later/0C1ADB3AF0B707724A2089855957CBD1 b/.config/mpv/watch_later/0C1ADB3AF0B707724A2089855957CBD1 new file mode 100755 index 0000000..21e439c --- /dev/null +++ b/.config/mpv/watch_later/0C1ADB3AF0B707724A2089855957CBD1 @@ -0,0 +1 @@ +start=289.366667 diff --git a/.config/mpv/watch_later/0F889B2F5365362796408B979967EE2E b/.config/mpv/watch_later/0F889B2F5365362796408B979967EE2E new file mode 100644 index 0000000..cf5f33e --- /dev/null +++ b/.config/mpv/watch_later/0F889B2F5365362796408B979967EE2E @@ -0,0 +1 @@ +start=939.960000 diff --git a/.config/mpv/watch_later/488683831FDE0EC6BCF9CBF1C7E74488 b/.config/mpv/watch_later/488683831FDE0EC6BCF9CBF1C7E74488 new file mode 100644 index 0000000..67f42ba --- /dev/null +++ b/.config/mpv/watch_later/488683831FDE0EC6BCF9CBF1C7E74488 @@ -0,0 +1 @@ +start=2.969633 diff --git a/.config/mpv/watch_later/533BDF1A0D7E0CDF991484442A6339E4 b/.config/mpv/watch_later/533BDF1A0D7E0CDF991484442A6339E4 new file mode 100755 index 0000000..d5f7967 --- /dev/null +++ b/.config/mpv/watch_later/533BDF1A0D7E0CDF991484442A6339E4 @@ -0,0 +1 @@ +start=1.400000 diff --git a/.config/mpv/watch_later/5AAA9D654D3330AA0E70641D90273C82 b/.config/mpv/watch_later/5AAA9D654D3330AA0E70641D90273C82 new file mode 100644 index 0000000..75647f9 --- /dev/null +++ b/.config/mpv/watch_later/5AAA9D654D3330AA0E70641D90273C82 @@ -0,0 +1 @@ +start=1.334667 diff --git a/.config/mpv/watch_later/6CFA806481681DD742151CEB8C869D11 b/.config/mpv/watch_later/6CFA806481681DD742151CEB8C869D11 new file mode 100644 index 0000000..2b5c7b7 --- /dev/null +++ b/.config/mpv/watch_later/6CFA806481681DD742151CEB8C869D11 @@ -0,0 +1,3 @@ +start=3734.792969 +osd-level=3 +pause=yes diff --git a/.config/mpv/watch_later/729B1EA73253DFBDA2059A48708309C2 b/.config/mpv/watch_later/729B1EA73253DFBDA2059A48708309C2 new file mode 100644 index 0000000..bc85f3b --- /dev/null +++ b/.config/mpv/watch_later/729B1EA73253DFBDA2059A48708309C2 @@ -0,0 +1 @@ +start=3.795000 diff --git a/.config/mpv/watch_later/95E11B3A5B89BE9BB61A7CF58917C703 b/.config/mpv/watch_later/95E11B3A5B89BE9BB61A7CF58917C703 new file mode 100755 index 0000000..259193c --- /dev/null +++ b/.config/mpv/watch_later/95E11B3A5B89BE9BB61A7CF58917C703 @@ -0,0 +1 @@ +start=1.533333 diff --git a/.config/mpv/watch_later/A886B4B4658EC2EE3338EA97169D51C3 b/.config/mpv/watch_later/A886B4B4658EC2EE3338EA97169D51C3 new file mode 100644 index 0000000..37cdf27 --- /dev/null +++ b/.config/mpv/watch_later/A886B4B4658EC2EE3338EA97169D51C3 @@ -0,0 +1,2 @@ +start=262.462200 +osd-level=3 diff --git a/.config/mpv/watch_later/BDE1B7DD20A6156BF14F815048C8C938 b/.config/mpv/watch_later/BDE1B7DD20A6156BF14F815048C8C938 new file mode 100755 index 0000000..0621c42 --- /dev/null +++ b/.config/mpv/watch_later/BDE1B7DD20A6156BF14F815048C8C938 @@ -0,0 +1 @@ +start=1.866667 diff --git a/.config/mpv/watch_later/D06453D5ECC647181B9A40F626560C7C b/.config/mpv/watch_later/D06453D5ECC647181B9A40F626560C7C new file mode 100644 index 0000000..f95dffe --- /dev/null +++ b/.config/mpv/watch_later/D06453D5ECC647181B9A40F626560C7C @@ -0,0 +1 @@ +start=2745.432000 diff --git a/.config/mpv/watch_later/F1606355253CA7F0BEAC5248CD9E5253 b/.config/mpv/watch_later/F1606355253CA7F0BEAC5248CD9E5253 new file mode 100644 index 0000000..cf92384 --- /dev/null +++ b/.config/mpv/watch_later/F1606355253CA7F0BEAC5248CD9E5253 @@ -0,0 +1,3 @@ +start=241.700000 +osd-level=3 +fullscreen=yes diff --git a/.config/msmtp/config b/.config/msmtp/config new file mode 100644 index 0000000..0885ae4 --- /dev/null +++ b/.config/msmtp/config @@ -0,0 +1,27 @@ +defaults +auth on +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +logfile ~/.config/msmtp/msmtp.log + +account herts +host outlook.office365.com +port 587 +from v.graffagnino@herts.ac.uk +user vg17aar@herts.ac.uk +passwordeval "pass mutt-wizard-herts" + +account xyz +host mail.graffagnino.xyz +port 587 +from vito@graffagnino.xyz +user vito +passwordeval "pass mutt-wizard-xyz" + +account bt +host mail.btinternet.com +port 465 +from v.graffagnino@btinternet.com +user v.graffagnino@btinternet.com +passwordeval "pass mutt-wizard-bt" + diff --git a/.config/msmtp/msmtp.log b/.config/msmtp/msmtp.log new file mode 100644 index 0000000..5bd3a78 --- /dev/null +++ b/.config/msmtp/msmtp.log @@ -0,0 +1,2 @@ +Sep 08 11:34:07 host=outlook.office365.com tls=on auth=on user=vg17aar@herts.ac.uk from=v.graffagnino@herts.ac.uk recipients=t.spriggs@herts.ac.uk mailsize=8034 smtpstatus=250 smtpmsg='250 2.0.0 OK <20200908103405.dejb5lxyv7cjfxoc@MBP83-ARCH.graffagnino.com> [Hostname=CWLP265MB0772.GBRP265.PROD.OUTLOOK.COM]' exitcode=EX_OK +Sep 08 11:58:03 host=outlook.office365.com tls=on auth=on user=vg17aar@herts.ac.uk from=v.graffagnino@herts.ac.uk recipients=t.spriggs@herts.ac.uk mailsize=8986 smtpstatus=250 smtpmsg='250 2.0.0 OK <20200908105801.6rcpbuhk77kjgyax@MBP83-ARCH.graffagnino.com> [Hostname=CWLP265MB0772.GBRP265.PROD.OUTLOOK.COM]' exitcode=EX_OK diff --git a/.config/mutt/.mailsynclastrun b/.config/mutt/.mailsynclastrun new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/mutt/.mailsynclastrun diff --git a/.config/mutt/.signature b/.config/mutt/.signature new file mode 100755 index 0000000..c4c0d00 --- /dev/null +++ b/.config/mutt/.signature @@ -0,0 +1,12 @@ +Dr Vito G. Graffagnino + +Centre for Astrophysics Research +School of Physics, Astronomy and Mathematics, +University of Hertfordshire +College Lane +Hatfield +AL10 9AB + +v.graffagnino@herts.ac.uk + +Tel: 01707 286358 diff --git a/.config/mutt/accounts/1-herts.muttrc b/.config/mutt/accounts/1-herts.muttrc new file mode 100755 index 0000000..5cd10ba --- /dev/null +++ b/.config/mutt/accounts/1-herts.muttrc @@ -0,0 +1,40 @@ +# vim: filetype=neomuttrc +# muttrc file for account herts +color status cyan default +unmailboxes * +set realname = "Dr. Vito G. Graffagnino" +set from = "v.graffagnino@herts.ac.uk" +set sendmail = "msmtp -a herts" +alias me Dr. Vito G. Graffagnino <v.graffagnino@herts.ac.uk> +set signature = "/home/archlinux/vgg/.config/mutt/.signature" +set folder = "/Mail/herts" +set header_cache = /Mail/mutt-wizard/herts/headers +set message_cachedir = /Mail/mutt-wizard/herts/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index S "<shell-escape>mbsync -V herts<enter><shell-escape>notmuch new<enter>" "run mbsync to sync herts" + +set spoolfile = "+INBOX" +set record = "+Sent Items" +set postponed = "+Drafts" +set trash = "" +mailboxes "=INBOX" "=Sent Items" "=INBOX.HR" "=INBOX.arXiv" "=INBOX.Library" "=Outbox" "=INBOX.CoolNews" "=INBOX.Teaching" "=INBOX.SpareRoom" "=INBOX.LMS" "=INBOX.SPH" "=INBOX.BobBingham" "=INBOX.Admin" "=INBOX.Students" "=INBOX.HelpDesk" "=INBOX.vgg" "=INBOX.astropy" "=INBOX.Procurement" "=INBOX.Nature" "=INBOX.BarryKellett" "=INBOX.PAM" "=INBOX.Martin" "=INBOX.DespinaLambrou" "=INBOX.RAS" "=INBOX.SEPnet" "=INBOX.SysAdmin" "=Drafts" "=INBOX.X-Ray" "=INBOX.Research" "=INBOX.LukeSmith" "=INBOX.Misc" "=INBOX.BadAstronomy" "=INBOX.StarFormationNewsletter" "=INBOX.Training" "=INBOX.Templates" +macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox" # mw-autogenerated +macro index,pager Mi "<save-message>=INBOX<enter>" "move mail to inbox" # mw-autogenerated +macro index,pager Ci "<copy-message>=INBOX<enter>" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "<change-folder>=Sent Items<enter>" "go to sent" # mw-autogenerated +macro index,pager Ms "<save-message>=Sent Items<enter>" "move mail to sent" # mw-autogenerated +macro index,pager Cs "<copy-message>=Sent Items<enter>" "copy mail to sent" # mw-autogenerated +macro index,pager gd "<change-folder>=Drafts<enter>" "go to drafts" # mw-autogenerated +macro index,pager Md "<save-message>=Drafts<enter>" "move mail to drafts" # mw-autogenerated +macro index,pager Cd "<copy-message>=Drafts<enter>" "copy mail to drafts" # mw-autogenerated +macro index,pager gt "<change-folder>=Templates<enter>" "go to templates" # mw-autogenerated +macro index,pager Mt "<save-message>=Templates<enter>" "move mail to templates" # mw-autogenerated +macro index,pager Ct "<copy-message>=Templates<enter>" "copy mail to templates" # mw-autogenerated +#vgg + diff --git a/.config/mutt/accounts/2-xyz.muttrc b/.config/mutt/accounts/2-xyz.muttrc new file mode 100755 index 0000000..e2c6488 --- /dev/null +++ b/.config/mutt/accounts/2-xyz.muttrc @@ -0,0 +1,37 @@ +# vim: filetype=neomuttrc +# muttrc file for account xyz +color status blue default +unmailboxes * +set realname = "Vito G. Graffagnino" +set from = "vito@graffagnino.xyz" +set sendmail = "msmtp -a xyz" +alias me Vito G. Graffagnino <vito@graffagnino.xyz> +set folder = "/home/archlinux/vgg/.local/share/mail/xyz" +set header_cache = /Mail/mutt-wizard/xyz/headers +set message_cachedir = /Mail/mutt-wizard/xyz/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index S "<shell-escape>mailsync -V xyz<enter><shell-escape>notmuch new<enter>" "run mbsync to sync xyz" + +set spoolfile = "+INBOX" +set record = "+Sent" +set postponed = "+Drafts" +set trash = "" +mailboxes "=Junk" "=INBOX" "=Drafts" "=Sent" +macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox" # mw-autogenerated +macro index,pager Mi "<save-message>=INBOX<enter>" "move mail to inbox" # mw-autogenerated +macro index,pager Ci "<copy-message>=INBOX<enter>" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "<change-folder>=Sent<enter>" "go to sent" # mw-autogenerated +macro index,pager Ms "<save-message>=Sent<enter>" "move mail to sent" # mw-autogenerated +macro index,pager Cs "<copy-message>=Sent<enter>" "copy mail to sent" # mw-autogenerated +macro index,pager gd "<change-folder>=Drafts<enter>" "go to drafts" # mw-autogenerated +macro index,pager Md "<save-message>=Drafts<enter>" "move mail to drafts" # mw-autogenerated +macro index,pager Cd "<copy-message>=Drafts<enter>" "copy mail to drafts" # mw-autogenerated +macro index,pager gj "<change-folder>=Junk<enter>" "go to junk" # mw-autogenerated +macro index,pager Mj "<save-message>=Junk<enter>" "move mail to junk" # mw-autogenerated +macro index,pager Cj "<copy-message>=Junk<enter>" "copy mail to junk" # mw-autogenerated diff --git a/.config/mutt/accounts/3-bt.muttrc b/.config/mutt/accounts/3-bt.muttrc new file mode 100755 index 0000000..4b0dba0 --- /dev/null +++ b/.config/mutt/accounts/3-bt.muttrc @@ -0,0 +1,33 @@ +# vim: filetype=neomuttrc +# muttrc file for account bt +set realname = "Vito G. Graffagnino" +set from = "v.graffagnino@btinternet.com" +set sendmail = "msmtp -a bt" +alias me Vito G. Graffagnino <v.graffagnino@btinternet.com> +set folder = "/home/archlinux/vgg/.local/share/mail/bt" +set header_cache = /home/archlinux/vgg/.cache/mutt-wizard/bt/headers +set message_cachedir = /home/archlinux/vgg/.cache/mutt-wizard/bt/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index S "<shell-escape>mbsync -V bt<enter><shell-escape>notmuch new<enter>" "run mbsync to sync bt" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+Sent" +set postponed = "+Drafts" +set trash = "+Trash" +mailboxes "=UoH" "=RC_News" "=vgg" "=Astro.AstrophysicalJournalLetters" "=luneos-dev" "=Astro" "=shurgard" "=astropy" "=capone" "=RC" "=Donna" "=Friends" "=Saved" "=HeinnieHaynes" "=Training" "=paypal" "=Astro.AstronomicalJournal" "=vpnreactor" "=CIN_DW.2019" "=Astro.AstrophysicalJournal" "=Life" "=Trash" "=INBOX" "=Astro.Coolnews" "=CIN_DW" "=Astro.ResearchInAstronomyAndAstrophysics" "=Palm" "=ultimateknife" "=Drafts" "=CIN_DW.2018" "=stagecoach" "=Amazon" "=Astro.mendeley" "=Astro.SCS" "=Astro.AstrophysicalJournalSupplement" "=Astro.IOP" "=Spam" "=Ebay" "=ToRead" "=Sent" +macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox" # mw-autogenerated +macro index,pager Mi "<save-message>=INBOX<enter>" "move mail to inbox" # mw-autogenerated +macro index,pager Ci "<copy-message>=INBOX<enter>" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "<change-folder>=Sent<enter>" "go to sent" # mw-autogenerated +macro index,pager Ms "<save-message>=Sent<enter>" "move mail to sent" # mw-autogenerated +macro index,pager Cs "<copy-message>=Sent<enter>" "copy mail to sent" # mw-autogenerated +macro index,pager gd "<change-folder>=Drafts<enter>" "go to drafts" # mw-autogenerated +macro index,pager Md "<save-message>=Drafts<enter>" "move mail to drafts" # mw-autogenerated +macro index,pager Cd "<copy-message>=Drafts<enter>" "copy mail to drafts" # mw-autogenerated diff --git a/.config/mutt/certificates b/.config/mutt/certificates new file mode 100755 index 0000000..8c4c741 --- /dev/null +++ b/.config/mutt/certificates @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAyMjEyMDAwMFowcDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTEvMC0GA1UEAxMmRGlnaUNlcnQgU0hBMiBIaWdoIEFzc3Vy +YW5jZSBTZXJ2ZXIgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2 +4C/CJAbIbQRf1+8KZAayfSImZRauQkCbztyfn3YHPsMwVYcZuU+UDlqUH1VWtMIC +Kq/QmO4LQNfE0DtyyBSe75CxEamu0si4QzrZCwvV1ZX1QK/IHe1NnF9Xt4ZQaJn1 +itrSxwUfqJfJ3KSxgoQtxq2lnMcZgqaFD15EWCo3j/018QsIJzJa9buLnqS9UdAn +4t07QjOjBSjEuyjMmqwrIw14xnvmXnG3Sj4I+4G3FhahnSMSTeXXkgisdaScus0X +sh5ENWV/UyU50RwKmmMbGZJ0aAo3wsJSSMs5WqK24V3B3aAguCGikyZvFEohQcft +bZvySC/zA/WiaJJTL17jAgMBAAGjggFJMIIBRTASBgNVHRMBAf8ECDAGAQH/AgEA +MA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw +NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy +dC5jb20wSwYDVR0fBEQwQjBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQuY29t +L0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDA9BgNVHSAENjA0MDIG +BFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ +UzAdBgNVHQ4EFgQUUWj/kK8CB3U8zNllZGKiErhZcjswHwYDVR0jBBgwFoAUsT7D +aQP4v0cB1JgmGggC72NkK8MwDQYJKoZIhvcNAQELBQADggEBABiKlYkD5m3fXPwd +aOpKj4PWUS+Na0QWnqxj9dJubISZi6qBcYRb7TROsLd5kinMLYBq8I4g4Xmk/gNH +E+r1hspZcX30BJZr01lYPf7TMSVcGDiEo+afgv2MW5gxTs14nhr9hctJqvIni5ly +/D6q1UEL2tU2ob8cbkdJf17ZSHwD2f2LSaCYJkJA69aSEaRkCldUxPUd1gJea6zu +xICaEnL6VpPX/78whQYwvwt/Tv9XBZ0k7YXDK/umdaisLRbvfXknsuvCnQsH6qqF +0wGjIChBWUMo0oHjqvbsezt3tkBigAVBRQHvFwY+3sAzm2fTYS5yh+Rp/BIAV0Ae +cPUeybQ= +-----END CERTIFICATE----- diff --git a/.config/mutt/mailcap b/.config/mutt/mailcap new file mode 100755 index 0000000..6adcf0d --- /dev/null +++ b/.config/mutt/mailcap @@ -0,0 +1,12 @@ +text/html; qutebrowser %s ; needsterminal; nametemplate=%s.html +text/html; w3m -I %{charset} -T text/html; copiousoutput; +#text/html; mv %s %s.html && qutebrowser %s.html > /dev/null; needsterminal; +text/html; openfile %s ; +text/plain; $EDITOR %s ; +image/*; muttimage %s ; copiousoutput +video/*; setsid mpv --quiet %s &; copiousoutput +application/pdf; mv %s %s.pdf && zathura %s.pdf > /dev/null; needsterminal; +application/pdf; openfile %s ; +application/pgp-encrypted; gpg -d '%s'; copiousoutput; +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; xdg-open %s +application/*; xdg-open %s diff --git a/.config/mutt/mutt_alias b/.config/mutt/mutt_alias new file mode 100755 index 0000000..e38740e --- /dev/null +++ b/.config/mutt/mutt_alias @@ -0,0 +1,64 @@ +alias proc procurement-cln <procurement-cln@herts.ac.uk> +alias jgeach \"Geach, James\" <j.geach@herts.ac.uk> +alias mjh Martin Hardcastle <m.j.hardcastle@herts.ac.uk> +alias helpdesk \"helpdesk@herts.ac.uk\" <helpdesk@herts.ac.uk> +alias melvyn Melvyn Chong <m.chong4@herts.ac.uk> +alias Stuart_McAleer Stuart McAleeer <Stuart_McAleer@dell.com> +alias gwen \"Williams, Gwenllian\" <g.williams9@herts.ac.uk> +alias ben Ben Burningham <b.burningham@herts.ac.uk> +alias elena \"Gonzalez Egea, Elena\" <e.gonzalez-egea@herts.ac.uk> +alias jdale \"Dale, James\" <j.dale3@herts.ac.uk> +alias dpinfield \"Pinfield, David\" <d.j.pinfield@herts.ac.uk> +alias elias \"Brinks, Elias\" <e.brinks@herts.ac.uk> +alias donna-rl \"Rodgers-Lee, Donna\" <d.rodgers-lee@herts.ac.uk> +alias ralf \"Napiwotzki, Ralf\" <r.napiwotzki@herts.ac.uk> +alias jan \"Webb, Jan\" <j.webb@herts.ac.uk> +alias tabs \"Tanvir, Tabassum\" <t.tanvir@herts.ac.uk> +alias naina \"Bloom, Naina\" <n.bloom2@herts.ac.uk> +alias maria \"Aristidou, Maria\" <m.aristidou@herts.ac.uk> +alias ronny \"Errmann, Ronny\" <r.errmann@herts.ac.uk> +alias max Maksym Lisogorskyi <m.lisogorskyi@gmail.com> +alias kristen \"Coppin, Kristen\" <k.coppin@herts.ac.uk> +alias mubela \"Mutale, Mubela\" <m.mutale@herts.ac.uk> +alias kush Kushatha Ntwaetsile <kushkelly@gmail.com> +alias simonellacott Simon Ellacott <simon.ellacott1@gmail.com> +alias mohammed Mohammed Basith Awan <mo.b.awan.uk@gmail.com> +alias sugata \"Kaviraj, Sugata\" <s.kaviraj@herts.ac.uk> +alias sam \"Rolfe, Samantha\" <s.rolfe2@herts.ac.uk> +alias janet j.drew@herts.ac.uk +alias chiaki \"Kobayashi, Chiaki\" <c.kobayashi@herts.ac.uk> +alias jo \"Ramasawmy, Joanna\" <j.ramasawmy@herts.ac.uk> +alias t.garratt \"Garratt, Tracy\" <t.garratt@herts.ac.uk> +alias mariaM \"Monguio Montells, Maria\" <m.monguio@herts.ac.uk> +alias astronomers astronomers list <astronomers@herts.ac.uk> +alias kim Kim Virgo-Sheriff <k.virgo-sheriff@herts.ac.uk> +alias benB Ben Burningham <b.burningham@herts.ac.uk> +alias repo Repographics <Repographics> +alias luke Luke Smith <luke@lukesmith.xyz> +alias rajasree Rajasree Valiya Parambath Meethal <r.meethal@herts.ac.uk> +alias lsmith Leigh Smith <lsmith@ast.cam.ac.uk> +alias soheil Soheil Davari <s.davari@herts.ac.uk> +alias janis Janis Chevalier <j.e.chevalier@herts.ac.uk> +alias ole Ole Steuernagel <o.steuernagel@herts.ac.uk> +alias kas \"Vahidi, Kas\" <Kas.Vahidi@insight.com> +alias jonathan Jonathan Westcott <jonathan.westcott123@hotmail.co.uk> +alias kathy Kathy Head <k.head@herts.ac.uk> +alias Dipali \"Patel, Dipali\" <Dipali.Patel@insight.com> +alias paulc Paul Canoville <p.canoville@hotmail.co.uk> +alias jaffa Sarah Jaffa <s.jaffa@herts.ac.uk> +alias martinkrause Martin Krause <m.g.h.krause@herts.ac.uk> +alias t.de-vuyst Tom De Vuyst <t.de-vuyst@herts.ac.uk> +alias maya Maya Horton <mayahortonarts@hotmail.com> +alias k.coppin Kristen Coppin <k.coppin@herts.ac.uk> +alias spriggs Thomas Spriggs <t.spriggs@herts.ac.uk> +alias jaime Jaime Vargas Gonzalez <j.i.vargas-gonzalez@herts.ac.uk> +alias vijay Vijay Mahatma <v.mahatma2@herts.ac.uk> +alias stilianos Stilianos Vidalis <s.vidalis@herts.ac.uk> +alias joe Joseph Williams <j.williams30@herts.ac.uk> +alias cs-msc ardramadhu285@gmail.com,dshivani0279@yahoo.in,racerics@gmail.com,ravishankar7.b@gmail.com +alias calum Calum Morris <c.morris6@herts.ac.uk> +alias w.e.martin William Martin <w.e.martin@herts.ac.uk> +alias p.choochalerm Piyamas Choochalerm <p.choochalerm@herts.ac.uk> +alias ryan Ryan Jackson <r.jackson9@herts.ac.uk> +alias pahn Piyamas Choochalerm <p.choochalerm@herts.ac.uk> +alias bill William Martin <w.e.martin@herts.ac.uk> diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc new file mode 100644 index 0000000..70ef3e9 --- /dev/null +++ b/.config/mutt/muttrc @@ -0,0 +1,74 @@ +# vim: filetype=neomuttrc +source /usr/share/mutt-wizard/mutt-wizard.muttrc # mw-autogenerated +source /home/shared/dotfiles/private/.mutt/colors.muttrc +# -------- Setting {{{ +#------------------------------------------------------ +# Set default text editor +set editor = "$EDITOR + -c 'set textwidth=72' -c 'set wrap' -c 'set spell spelllang=en' " +set pager_context=4 +set pager_index_lines=10 +set pager_stop +set text_flowed=yes +# }}} +# ------- Account hooks {{{ +#------------------------------------------------------ +account-hook '1-herts.muttrc' 'set imap_user=vg17aar@herts.ac.uk imap_pass=`pass mutt-wizard-herts`' +account-hook '2-xyz.muttrc' 'set imap_user=vito imap_pass=`pass mutt-wizard-xyz`' +account-hook '3-bt.muttrc' 'set imap_user=v.graffagnino@btinternet imap_pass=`pass mutt-wizard-bt`' +# +# }}} +# ------- Folder hooks {{{ +#------------------------------------------------------ +folder-hook '1-herts.muttrc' 'source ~/.config/mutt/accounts/1-herts.muttrc' +folder-hook '2-xyz.muttrc' 'source ~/.config/mutt/accounts/2-xyz.muttrc' +folder-hook '3-bt.muttrc' 'source ~/.config/mutt/accounts/4-bt.muttrc' +# }}} + +# source default account +source $HOME/.config/mutt/accounts/1-herts.muttrc # mw-autogenerated + +macro index,pager <F7> '<sync-mailbox><refresh><enter-command>source $HOME/.config/mutt/accounts/1-herts.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to v.graffagnino@herts.ac.uk" # mw-autogenerated + +macro index,pager <F8> '<sync-mailbox><refresh><enter-command>source $HOME/.config/mutt/accounts/2-xyz.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to vito@graffagnino.xyz" # mw-autogenerated + + +macro index,pager <F9> '<sync-mailbox><enter-command>source /home/archlinux/vgg/.config/mutt/accounts/3-bt.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to v.graffagnino@btinternet.com" # mw-autogenerated + +#-------- Basic config, you can leave this as is {{{ +#------------------------------------------------------ +set certificate_file = $HOME/.config/mutt/certificates +set mailcap_path = $HOME/.config/mutt/mailcap +set imap_check_subscribed +set mail_check = 500 +set timeout = 0 +set imap_keepalive = 200 +set imap_idle = yes +set move = no +set include +set sort = 'reverse-date' +set sort_aux = 'reverse-last-date-received' +set auto_tag = yes +hdr_order Date From To Cc +auto_view text/html +alternative_order text/plain text/html * +bind editor <Tab> complete-query +bind editor ^T complete +bind editor <space> noop +bind index,pager \CP sidebar-prev # Ctrl-Shift-P - Previous Mailbox +bind index,pager \CN sidebar-next # Ctrl-Shift-N - Next Mailbox +bind index,pager \CO sidebar-open # Ctrl-Shift-O - Open Highlighted Mailbox +mono bold bold +mono underline underline +mono indicator reverse +# }}} + +macro index,pager \cb "<enter-command>set pipe_decode =yes<enter><pipe-message>urlview<Enter><enter-command>set pipe_decode = no<enter>" "call urlview to extract URLs out of a message" + +macro attach,compose \cb "<pipe-entry> urlview<Enter>" "call urlview to extract URLs out of a message" + +macro index,pager \cy "<enter-command>set pipe_decode = yes<enter><pipe-message> w3m<Enter><enter-command>set pipe_decode =no<enter>" "call w3m to extract URLs out of a message" + +macro attach,compose \cy "<pipe-entry> w3m<Enter>" "call w3m to extract URLs out of a message" + +macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>read -p 'Enter a search term to find with notmuch: ' x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/ for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern" +#source ~/.config/mutt/mutt_alias diff --git a/.config/ncmpcpp/bindings b/.config/ncmpcpp/bindings new file mode 100644 index 0000000..8961d1a --- /dev/null +++ b/.config/ncmpcpp/bindings @@ -0,0 +1,479 @@ +############################################################## +## This is the example bindings file. Copy it to ## +## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ## +## and set up your preferences ## +############################################################## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "shift-up" +# select_item +# scroll_up +# +#def_key "down" +# scroll_down +# +#def_key "shift-down" +# select_item +# scroll_down +# +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "insert" +# select_item +# +#def_key "enter" +# enter_directory +# +#def_key "enter" +# toggle_output +# +#def_key "enter" +# run_action +# +#def_key "enter" +# play_item +# +#def_key "space" +# add_item_to_playlist +# +#def_key "space" +# toggle_lyrics_update_on_song_change +# +#def_key "space" +# toggle_visualization_type +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_browser_items +# +#def_key "delete" +# delete_stored_playlist +# +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift-tab" +# previous_screen +# +#def_key "f1" +# show_help +# +#def_key "1" +# show_playlist +# +#def_key "2" +# show_browser +# +#def_key "2" +# change_browse_mode +# +#def_key "3" +# show_search_engine +# +#def_key "3" +# reset_search_engine +# +#def_key "4" +# show_media_library +# +#def_key "4" +# toggle_media_library_columns_mode +# +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl-h" +# jump_to_parent_directory +# +#def_key "ctrl-h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +def_key "f" + seek_forward +# +def_key "b" + seek_backward +# +def_key "r" + toggle_repeat +# +def_key "z" + toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl-s" +# sort_playlist +# +#def_key "ctrl-s" +# toggle_browser_sort_mode +# +#def_key "ctrl-s" +# toggle_media_library_sort_mode +# +#def_key "ctrl-r" +# reverse_playlist +# +#def_key "ctrl-f" +# apply_filter +# +#def_key "ctrl-_" +# select_found_items +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "ctrl-v" +# select_range +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# fetch_lyrics_in_background +# +#def_key "alt-l" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl-l" +# toggle_screen_lock +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# add_random_items +# +#def_key "ctrl-p" +# set_selected_items_priority +# +#def_key "q" +# quit +# +# +#def_key "f" +# find +#def_key "f" +# find_item_forward + +def_key "+" + show_clock +def_key "=" + volume_up + +def_key "j" + scroll_down +def_key "k" + scroll_up + +def_key "ctrl-u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "ctrl-d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "h" + previous_column +def_key "l" + next_column + +def_key "." + show_lyrics + +def_key "n" + next_found_item +def_key "N" + previous_found_item + +# not used but bound +def_key "J" + move_sort_order_down +def_key "K" + move_sort_order_up +def_key "h" + jump_to_parent_directory +def_key "l" + enter_directory +def_key "l" + run_action +def_key "l" + play_item +def_key "m" + show_media_library +def_key "m" + toggle_media_library_columns_mode +def_key "t" + show_tag_editor +def_key "v" + show_visualizer +def_key "G" + move_end +def_key "g" + move_home +#jump_to_position_in_song +def_key "U" + update_database +def_key "s" + reset_search_engine +def_key "s" + show_search_engine +#def_key "f" +# show_browser +#def_key "f" +# change_browse_mode +def_key "x" + delete_playlist_items +def_key "P" + show_playlist diff --git a/.config/ncmpcpp/config b/.config/ncmpcpp/config new file mode 100644 index 0000000..2c9eda4 --- /dev/null +++ b/.config/ncmpcpp/config @@ -0,0 +1,537 @@ +############################################################################## +## This is the example configuration file. Copy it to $HOME/.ncmpcpp/config ## +## or $XDG_CONFIG_HOME/ncmpcpp/config and set up your preferences. ## +############################################################################## +# +ncmpcpp_directory = ~/.config/ncmpcpp +# +## +## Directory for storing downloaded lyrics. It defaults to ~/.lyrics since other +## MPD clients (eg. ncmpc) also use that location. +## +# +lyrics_directory = ~/.local/share/lyrics +# +##### connection settings ##### +# +#mpd_host = localhost +# +#mpd_port = 6600 +# +#mpd_connection_timeout = 5 +# +## Needed for tag editor and file operations to work. +## +mpd_music_dir = "~/Music" +# +#mpd_crossfade_time = 5 +# +##### music visualizer ##### +## +## Note: In order to make music visualizer work you'll need to use mpd fifo +## output, whose format parameter has to be set to 44100:16:1 for mono +## visualization or 44100:16:2 for stereo visualization. Example configuration +## (it has to be put into mpd.conf): +## +## audio_output { +## type "fifo" +## name "Visualizer feed" +## path "/tmp/mpd.fifo" +## format "44100:16:2" +## } +## +# +#visualizer_fifo_path = /tmp/mpd.fifo +# +## +## Note: Below parameter is needed for ncmpcpp to determine which output +## provides data for visualizer and thus allow syncing between visualization and +## sound as currently there are some problems with it. +## +# +#visualizer_output_name = Visualizer feed +# +## +## If you set format to 44100:16:2, make it 'yes'. +## +#visualizer_in_stereo = yes +# +## +## Note: Below parameter defines how often ncmpcpp has to "synchronize" +## visualizer and audio outputs. 30 seconds is optimal value, but if you +## experience synchronization problems, set it to lower value. Keep in mind +## that sane values start with >=10. +## +# +#visualizer_sync_interval = 30 +# +## +## Note: To enable spectrum frequency visualization you need to compile ncmpcpp +## with fftw3 support. +## +# +## Available values: spectrum, wave, wave_filled, ellipse. +## +visualizer_type = spectrum +# +#visualizer_look = ●卐 +#visualizer_look = 卐 +# +#visualizer_color = blue, cyan, green, yellow, magenta, red +# +## Alternative subset of 256 colors for terminals that support it. +## +#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 +# +##### system encoding ##### +## +## ncmpcpp should detect your charset encoding but if it failed to do so, you +## can specify charset encoding you are using here. +## +## Note: You can see whether your ncmpcpp build supports charset detection by +## checking output of `ncmpcpp --version`. +## +## Note: Since MPD uses UTF-8 by default, setting this option makes sense only +## if your encoding is different. +## +# +#system_encoding = "" +# +##### delays ##### +# +## Time of inactivity (in seconds) after playlist highlighting will be disabled +## (0 = always on). +## +#playlist_disable_highlight_delay = 5 +# +## Defines how long messages are supposed to be visible. +## +message_delay_time = 1 +# +##### song format ##### +## +## For a song format you can use: +## +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## +## If you want to make sure that a part of the format is displayed only when +## certain tags are present, you can archieve it by grouping them with brackets, +## e.g. '{%a - %t}' will be evaluated to 'ARTIST - TITLE' if both tags are +## present or '' otherwise. It is also possible to define a list of +## alternatives by providing several groups and separating them with '|', +## e.g. '{%t}|{%f}' will be evaluated to 'TITLE' or 'FILENAME' if the former is +## not present. +## +## Note: If you want to set limit on maximal length of a tag, just put the +## appropriate number between % and character that defines tag type, e.g. to +## make album take max. 20 terminal cells, use '%20b'. +## +## In addition, formats support markers used for text attributes. They are +## followed by character '$'. After that you can put: +## +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set +## +## If you don't want to use a non-color attribute anymore, just put it again, +## but this time insert character '/' between '$' and attribute character, +## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename with +## reversed colors. +## +## If you want to use 256 colors and/or background colors in formats (the naming +## scheme is described below in section about color definitions), it can be done +## with the syntax $(COLOR), e.g. to set the artist tag to one of the +## non-standard colors and make it have yellow background, you need to write +## $(197_yellow)%a$(end). Note that for standard colors this is interchangable +## with attributes listed above. +## +## Note: colors can be nested. +## +# +song_list_format = {$4%a - }{%t}|{$8%f$9}$R{$3(%l)$9} +# +song_status_format = $b{{$8"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$8%f} +# +song_library_format = {%n - }{%t}|{%f} +# +alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +# +alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} +# +current_item_prefix = $(cyan)$r$b +# +current_item_suffix = $/r$(end)$/b +# +current_item_inactive_column_prefix = $(magenta)$r +# +current_item_inactive_column_suffix = $/r$(end) +# +#now_playing_prefix = $b +# +#now_playing_suffix = $/b +# +#browser_playlist_prefix = "$2playlist$9 " +# +#selected_item_prefix = $6 +# +#selected_item_suffix = $9 +# +#modified_item_prefix = $3> $9 +# +## +## Note: attributes are not supported for the following variables. +## +#song_window_title_format = {%a - }{%t}|{%f} +## +## Note: Below variables are used for sorting songs in browser. The sort mode +## determines how songs are sorted, and can be used in combination with a sort +## format to specify a custom sorting format. Available values for +## browser_sort_mode are "name", "mtime", "format" and "noop". +## +# +#browser_sort_mode = name +# +#browser_sort_format = {%a - }{%t}|{%f} {(%l)} +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of the column)[color of the column]{displayed tag} +## +## Note: Width is by default in %, if you want a column to have fixed size, add +## 'f' after the value, e.g. (10)[white]{a} will be the column that take 10% of +## screen (so the real width will depend on actual screen size), whereas +## (10f)[white]{a} will take 10 terminal cells, no matter how wide the screen +## is. +## +## - color is optional (if you want the default one, leave the field empty). +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, separated with +## character ':', e.g. {lr:Length} gives you right aligned column of lengths +## named "Length". +## +## - define sequence of tags, that have to be displayed in case predecessor is +## empty in a way similar to the one in classic song format, i.e. using '|' +## character, e.g. {a|c|p:Owner} creates column named "Owner" that tries to +## display artist tag and then composer and performer if previous ones are not +## available. +## +# +#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each time song changes. Useful for +## notifications etc. +## +#execute_on_song_change = "" +# +## +## Note: Custom command that will be executed each time player state +## changes. The environment variable MPD_PLAYER_STATE is set to the current +## state (either unknown, play, pause, or stop) for its duration. +## +# +#execute_on_player_state_change = "" +# +#playlist_show_mpd_host = no +# +#playlist_show_remaining_time = no +# +#playlist_shorten_total_times = no +# +#playlist_separate_albums = no +# +## +## Note: Possible display modes: classic, columns. +## +playlist_display_mode = columns +# +browser_display_mode = columns +# +#search_engine_display_mode = classic +# +#playlist_editor_display_mode = classic +# +#discard_colors_if_item_is_selected = yes +# +#show_duplicate_tags = true +# +#incremental_seeking = yes +# +#seek_time = 1 +# +#volume_change_step = 2 +# +#autocenter_mode = no +# +#centered_cursor = no +# +## +## Note: You can specify third character which will be used to build 'empty' +## part of progressbar. +## +progressbar_look = -> +# +## Available values: database, playlist. +## +#default_place_to_search_in = database +# +## Available values: classic, alternative. +## +#user_interface = classic +# +#data_fetching_delay = yes +# +## Available values: artist, album_artist, date, genre, composer, performer. +## +media_library_primary_tag = album_artist +# +media_library_albums_split_by_date = no +# +## Available values: wrapped, normal. +## +#default_find_mode = wrapped +# +#default_tag_editor_pattern = %n - %t +# +#header_visibility = yes +# +#statusbar_visibility = yes +# +#titles_visibility = yes +# +#header_text_scrolling = yes +# +#cyclic_scrolling = no +# +#lines_scrolled = 2 +# +#lyrics_fetchers = lyricwiki, azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet +# +#follow_now_playing_lyrics = no +# +#fetch_lyrics_for_current_song_in_background = no +# +#store_lyrics_in_song_dir = no +# +#generate_win32_compatible_filenames = yes +# +#allow_for_physical_item_deletion = no +# +## +## Note: If you set this variable, ncmpcpp will try to get info from last.fm in +## language you set and if it fails, it will fall back to english. Otherwise it +## will use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = en +# +#space_add_mode = add_remove +# +#show_hidden_files_in_local_browser = no +# +## +## How shall screen switcher work? +## +## - "previous" - switch between the current and previous screen. +## - "screen1,...,screenN" - switch between given sequence of screens. +## +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock, +## lyrics, last_fm. +## +#screen_switcher_mode = playlist, browser +# +## +## Note: You can define startup screen by choosing screen from the list above. +## +startup_screen = media_library +# +## +## Note: You can define startup slave screen by choosing screen from the list +## above or an empty value for no slave screen. +## +#startup_slave_screen = "" +# +#startup_slave_screen_focus = no +# +## +## Default width of locked screen (in %). Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = 50 +# +#ask_for_locked_screen_width_part = yes +# +#jump_to_now_playing_song_at_start = yes +# +#ask_before_clearing_playlists = yes +# +#clock_display_seconds = no +# +display_volume_level = no +# +#display_bitrate = no +# +#display_remaining_time = no +# +## Available values: none, basic, extended, perl. +## +#regular_expressions = perl +# +## +## Note: if below is enabled, ncmpcpp will ignore leading "The" word while +## sorting items in browser, tags in media library, etc. +## +ignore_leading_the = yes +# +## +## Note: if below is enabled, ncmpcpp will ignore diacritics while searching and +## filtering lists. This takes an effect only if boost was compiled with ICU +## support. +## +#ignore_diacritics = no +# +#block_search_constraints_change_if_items_found = yes +# +#mouse_support = yes +# +#mouse_list_scroll_whole_page = yes +# +#empty_tag_marker = <empty> +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = no +# +#media_library_sort_by_mtime = no +# +#enable_window_title = yes +# +## +## Note: You can choose default search mode for search engine. Available modes +## are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, but +## if your mpd is on a remote machine, downloading big database to process +## it can take a while +## +## - 3 - match only exact values (this mode uses mpd function for searching in +## database and local one for searching in current playlist) +## +# +#search_engine_default_search_mode = 1 +# +external_editor = vim +# +## Note: set to yes if external editor is a console application. +## +use_console_editor = yes +# +##### colors definitions ##### +## +## It is possible to set a background color by setting a color value +## "<foreground>_<background>", e.g. red_black will set foregound color to red +## and background color to black. +## +## In addition, for terminals that support 256 colors it is possible to set one +## of them by using a number in range [1, 256] instead of color name, +## e.g. numerical value corresponding to red_black is 2_1. To find out if the +## terminal supports 256 colors, run ncmpcpp and check out the bottom of the +## help screen for list of available colors and their numerical values. +## +## What is more, there are two special values for the background color: +## "transparent" and "current". The first one explicitly sets the background to +## be transparent, while the second one allows you to preserve current +## background color and change only the foreground one. It's used implicitly +## when background color is not specified. +## +## Moreover, it is possible to attach format information to selected color +## variables by appending to their end a colon followed by one or more format +## flags, e.g. black:b or red:ur. The following variables support this syntax: +## visualizer_color, color1, color2, empty_tag_color, volume_color, +## state_line_color, state_flags_color, progressbar_color, +## progressbar_elapsed_color, player_state_color, statusbar_time_color, +## alternative_ui_separator_color. +## +## Note: due to technical limitations of older ncurses version, if 256 colors +## are used there is a possibility that you'll be able to use only colors with +## transparent background. +# +#colors_enabled = yes +# +empty_tag_color = magenta +# +#header_window_color = magenta +# +#volume_color = default +# +#state_line_color = default +# +#state_flags_color = default:b +# +main_window_color = white +# +#color1 = white +# +#color2 = green +# +progressbar_color = black:b +# +progressbar_elapsed_color = blue:b +# +statusbar_color = red +# +statusbar_time_color = cyan:b +# +#player_state_color = default:b +# +#alternative_ui_separator_color = black:b +# +#window_border_color = green +# +#active_window_border = red +# diff --git a/.config/ncmpcpp/error.log b/.config/ncmpcpp/error.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/ncmpcpp/error.log diff --git a/.config/ncpamixer.conf b/.config/ncpamixer.conf new file mode 100644 index 0000000..6146856 --- /dev/null +++ b/.config/ncpamixer.conf @@ -0,0 +1,96 @@ +"theme" = "default" + +# Default theme { + "theme.default.default_indicator" = "♦ " + "theme.default.bar_style.bg" = "░" + "theme.default.bar_style.fg" = "█" + "theme.default.bar_style.indicator" = "█" + "theme.default.bar_style.top" = "▁" + "theme.default.bar_style.bottom" = "▔" + "theme.default.bar_low.front" = 2 + "theme.default.bar_low.back" = 0 + "theme.default.bar_mid.front" = 3 + "theme.default.bar_mid.back" = 0 + "theme.default.bar_high.front" = 1 + "theme.default.bar_high.back" = 0 + "theme.default.volume_low" = 2 + "theme.default.volume_mid" = 3 + "theme.default.volume_high" = 1 + "theme.default.volume_peak" = 1 + "theme.default.volume_indicator" = -1 + "theme.default.selected" = 2 + "theme.default.default" = -1 + "theme.default.border" = -1 + "theme.default.dropdown.selected_text" = 0 + "theme.default.dropdown.selected" = 2 + "theme.default.dropdown.unselected" = -1 +# } +# c0r73x theme { + "theme.c0r73x.default_indicator" = "■ " + "theme.c0r73x.bar_style.bg" = "■" + "theme.c0r73x.bar_style.fg" = "■" + "theme.c0r73x.bar_style.indicator" = "■" + "theme.c0r73x.bar_style.top" = "" + "theme.c0r73x.bar_style.bottom" = "" + "theme.c0r73x.bar_low.front" = 0 + "theme.c0r73x.bar_low.back" = -1 + "theme.c0r73x.bar_mid.front" = 0 + "theme.c0r73x.bar_mid.back" = -1 + "theme.c0r73x.bar_high.front" = 0 + "theme.c0r73x.bar_high.back" = -1 + "theme.c0r73x.volume_low" = 6 + "theme.c0r73x.volume_mid" = 6 + "theme.c0r73x.volume_high" = 6 + "theme.c0r73x.volume_peak" = 1 + "theme.c0r73x.volume_indicator" = 15 + "theme.c0r73x.selected" = 6 + "theme.c0r73x.default" = -1 + "theme.c0r73x.border" = -1 + "theme.c0r73x.dropdown.selected_text" = 0 + "theme.c0r73x.dropdown.selected" = 6 + "theme.c0r73x.dropdown.unselected" = -1 +# } +# Keybinds { + "keycode.9" = "switch" # tab + "keycode.13" = "select" # enter + "keycode.27" = "quit" # escape + "keycode.99" = "dropdown" # c + "keycode.113" = "quit" # q + "keycode.109" = "mute" # m + "keycode.100" = "set_default" # d + "keycode.108" = "volume_up" # l + "keycode.104" = "volume_down" # h + "keycode.261" = "volume_up" # arrow right + "keycode.260" = "volume_down" # arrow left + "keycode.107" = "move_up" # k + "keycode.106" = "move_down" # j + "keycode.259" = "move_up" # arrow up + "keycode.258" = "move_down" # arrow down + "keycode.338" = "page_up" # page up + "keycode.339" = "page_down" # page down + "keycode.76" = "tab_next" # L + "keycode.72" = "tab_prev" # H + "keycode.265" = "tab_playback" # f1 + "keycode.266" = "tab_recording" # f2 + "keycode.267" = "tab_output" # f3 + "keycode.268" = "tab_input" # f4 + "keycode.269" = "tab_config" # f5 + "keycode.f.80" = "tab_playback" # f1 VT100 + "keycode.f.81" = "tab_recording" # f2 VT100 + "keycode.f.82" = "tab_output" # f3 VT100 + "keycode.f.83" = "tab_input" # f4 VT100 + "keycode.f.84" = "tab_config" # f5 VT100 + "keycode.71" = "move_last" # G + "keycode.103" = "move_first" # g +# "keycode.48" = "set_volume_100" # 0 + "keycode.48" = "set_volume_0" # 0 + "keycode.49" = "set_volume_10" # 1 + "keycode.50" = "set_volume_20" # 2 + "keycode.51" = "set_volume_30" # 3 + "keycode.52" = "set_volume_40" # 4 + "keycode.53" = "set_volume_50" # 5 + "keycode.54" = "set_volume_60" # 6 + "keycode.55" = "set_volume_70" # 7 + "keycode.56" = "set_volume_80" # 8 + "keycode.57" = "set_volume_90" # 9 +# }
\ No newline at end of file diff --git a/.config/neofetch/config.conf b/.config/neofetch/config.conf new file mode 100644 index 0000000..4215642 --- /dev/null +++ b/.config/neofetch/config.conf @@ -0,0 +1,771 @@ +# Neofetch config file +# https://github.com/dylanaraps/neofetch + + +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "CPU Usage" cpu_usage + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Install Date" install_date + # info "Locale" locale # This only works on glibc systems. + + info line_break + info cols + info line_break +} + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'off', 'tiny' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'off', 'tiny' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# off: '2 days, 10 hours, 3 minutes' +# tiny: '2d 10h 3m' +uptime_shorthand="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand. +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +disk_subtitle="mount" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# Google Play +# Spotify +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# elisa +# exaile +# gnome-music +# guayadeque +# iTunes$ +# juk +# lollypop +# mocp +# mopidy +# mpd +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# spotify +# tomahawk +# xmms2d +# yarock +music_player="auto" + +# Print the Artist and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Chelsea Dagger' +song_shorthand="off" + + +# Install Date + + +# Whether to show the time in the output +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --install_time +# +# Example: +# on: 'Thu 14 Apr 2016 11:50 PM' +# off: 'Thu 14 Apr 2016' +install_time="on" + +# Set time format in the output +# +# Default: '24h' +# Values: '12h', '24h' +# Flag: --install_time_format +# +# Example: +# 12h: 'Thu 14 Apr 2016 11:50 PM' +# 24h: 'Thu 14 Apr 2016 23:50' +install_time_format="12h" + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '7' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 7) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --cpu_display +# --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +cpu_display="off" +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'catimg', 'jp2a', 'iterm2', 'off', 'termpix', 'pixterm', 'tycat', 'w3m' +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# +# NOTE: Arch and Ubuntu have 'old' logo variants. +# Change this to 'arch_old' or 'ubuntu_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to 'Lubuntu', 'Xubuntu', 'Ubuntu-GNOME' or 'Ubuntu-Budgie' to use the flavors. +# NOTE: Arch, Crux and Gentoo have a smaller logo variant. +# Change this to 'arch_small', 'crux_small' or 'gentoo_small' to use the small logos. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Scrot Options + + +# Whether or not to always take a screenshot +# You can manually take a screenshot with "--scrot" or "-s" +# +# Default: 'off' +# Values: 'on', 'off' +# Flags: --scrot +# -s +scrot="off" + +# Screenshot Program +# Neofetch will automatically use whatever screenshot tool +# is installed on your system. +# +# If 'neofetch -v' says that it couldn't find a screenshot +# tool or you're using a custom tool then you can change +# the option below to a custom command. +# +# Default: 'auto' +# Values: 'auto' 'cmd -flags' +# Flag: --scrot_cmd +scrot_cmd="auto" + +# Screenshot Filename +# What to name the screenshots +# +# Default: 'neofetch-$(date +%F-%I-%M-%S-${RANDOM}).png' +# Values: 'string' +# Flag: --scrot_name +scrot_name="neofetch-$(date +%F-%I-%M-%S-${RANDOM}).png" + +# Image upload host +# Where to upload the image. +# +# Default: 'teknik' +# Values: 'imgur', 'teknik' +# Flag: --image_host +# +# NOTE: If you'd like another image host to be added to Neofetch. +# Open an issue on github. +image_host="teknik" + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" + +# Config version. +# +# NOTE: Don't change this value, neofetch reads this to determine +# how to handle backwards compatibility. +config_version="3.4.0" diff --git a/.config/new_neovim/coc-settings.json b/.config/new_neovim/coc-settings.json new file mode 100644 index 0000000..a11d575 --- /dev/null +++ b/.config/new_neovim/coc-settings.json @@ -0,0 +1,73 @@ +{ + // suggestions + // "suggest.echodocSupport": true, + // TODO add more labels and give them cool glyphs + "suggest.completionItemKindLabels": { + "text": "t", + "method": "m", + "function": "f" + }, + + // diagnostics + "diagnostic.errorSign": "✗", + "diagnostic.warningSign": "⚠", + "diagnostic.infoSign": "", + "diagnostic.hintSign": " ", + // "diagnostic.displayByAle": true, + + // codelens TODO what does this get me? + // "codeLens.enable": true, + + // list + "list.indicator": ">", + "list.selectedSignText": " ", + + // autoformat + "coc.preferences.formatOnSaveFiletypes": [ + "css", + "markdown", + "javascript", + "html", + "yaml", + "json", + "python" + ], + "coc.preferences.hoverTarget": "float", + + // python config + "python.linting.enabled": true, + "python.linting.pylintEnabled": true, + + // snippets + "snippets.ultisnips.directories": ["UltiSnips", "~/.config/nvim/utils/snips"], + + // explorer + "explorer.width": 30, + "explorer.icon.enableNerdfont": true, + "explorer.previewAction.onHover": false, + "explorer.icon.enableVimDevicons": false, + "explorer.keyMappings": { + "<cr>": ["expandable?", "expand", "open"], + "v": "open:vsplit" + }, + + "languageserver": { + "bash": { + "command": "bash-language-server", + "args": ["start"], + "filetypes": ["sh"], + "ignoredRootPaths": ["~"] + }, + "clangd": { + "command": "clangd", + "rootPatterns": ["compile_flags.txt", "compile_commands.json"], + "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"] + } + + } + + // TODO language servers + // TODO g:coc_global_extensions + // TODO b:coc_suggest_disable=1 GOYO + // TODO add to paths.vim g:coc_node_path +} diff --git a/.config/new_neovim/general/functions.vim b/.config/new_neovim/general/functions.vim new file mode 100644 index 0000000..58db6b1 --- /dev/null +++ b/.config/new_neovim/general/functions.vim @@ -0,0 +1,9 @@ +" Turn spellcheck on for markdown files +augroup auto_spellcheck + autocmd BufNewFile,BufRead *.md setlocal spell +augroup END + +" Remove trailing whitespaces automatically before save +" augroup strip_ws +" autocmd BufWritePre * call utils#stripTrailingWhitespaces() +" augroup END diff --git a/.config/new_neovim/general/paths.vim b/.config/new_neovim/general/paths.vim new file mode 100644 index 0000000..12ba27c --- /dev/null +++ b/.config/new_neovim/general/paths.vim @@ -0,0 +1,4 @@ +let g:ruby_host_prog='rvm system do neovim-ruby-host' +let g:python_host_prog='/usr/bin/python2' +let g:python3_host_prog='/usr/bin/python3' + diff --git a/.config/new_neovim/general/settings.vim b/.config/new_neovim/general/settings.vim new file mode 100644 index 0000000..751b725 --- /dev/null +++ b/.config/new_neovim/general/settings.vim @@ -0,0 +1,43 @@ +set iskeyword+=- " treat dash separated words as a word text object" +set formatoptions-=cro " Stop newline continution of comments + +syntax enable " Enables syntax highlighing +set hidden " Required to keep multiple buffers open multiple buffers +set nowrap " Display long lines as just one line +set encoding=utf-8 " The encoding displayed +set pumheight=10 " Makes popup menu smaller +set fileencoding=utf-8 " The encoding written to file +set ruler " Show the cursor position all the time +set cmdheight=2 " More space for displaying messages +set splitbelow " Horizontal splits will automatically be below +set splitright " Vertical splits will automatically be to the right +set t_Co=256 " Support 256 colors +set conceallevel=0 " So that I can see `` in markdown files +set tabstop=2 " Insert 2 spaces for a tab +set shiftwidth=2 " Change the number of space characters inserted for indentation +set smarttab " Makes tabbing smarter will realize you have 2 vs 4 +set expandtab " Converts tabs to spaces +set smartindent " Makes indenting smart +set autoindent " Good auto indent +set laststatus=2 " Always display the status line +set number relativenumber " Line numbers +set cursorline " Enable highlighting of the current line +set background=dark " tell vim what the background color looks like +set noshowmode " We don't need to see things like -- INSERT -- anymore +set nobackup " This is recommended by coc +set nowritebackup " This is recommended by coc +set shortmess+=c " Don't pass messages to |ins-completion-menu|. +set signcolumn=yes " Always show the signcolumn, otherwise it would shift the text each time +set updatetime=300 " Faster completion +set timeoutlen=100 " By default timeoutlen is 1000 ms +set clipboard=unnamedplus " Copy paste between vim and everything else +set incsearch + +" au! BufWritePost $MYVIMRC source % " auto source when writing to init.vm alternatively you can run :source $MYVIMRC +autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o + + +"If you forget to sudo before calling vim use the following to be +"able to write the file. +cnoremap w!! %!sudo tee > /dev/null % + diff --git a/.config/new_neovim/init.vim b/.config/new_neovim/init.vim new file mode 100644 index 0000000..10ad6a0 --- /dev/null +++ b/.config/new_neovim/init.vim @@ -0,0 +1,8 @@ +BASENAME='/home/archlinux/vgg/.config/new_neovim' +source $BASENAME/vim-plug/plugins.vim +source $BASENAME/general/settings.vim +source $BASENAME/keys/mappings.vim +source $BASENAME/themes/onedark.vim +source $BASENAME/themes/airline.vim + + diff --git a/.config/new_neovim/keys/mappings.vim b/.config/new_neovim/keys/mappings.vim new file mode 100644 index 0000000..929414b --- /dev/null +++ b/.config/new_neovim/keys/mappings.vim @@ -0,0 +1,73 @@ +" g Leader key +let mapleader="," +let localleader=",," +nnoremap <Space> <Nop> +map <leader>v :edit $MYVIMRC<CR> + +" Better indenting +vnoremap < <gv +vnoremap > >gv + +" Better nav for omnicomplete +inoremap <expr> <c-j> ("\<C-n>") +inoremap <expr> <c-k> ("\<C-p>") + +" TAB in general mode will move to text buffer +nnoremap <silent> <TAB> :bnext<CR> +" SHIFT-TAB will go back +nnoremap <silent> <S-TAB> :bprevious<CR> + +" Use control-c instead of escape +nnoremap <silent> <C-c> <Esc> +" <TAB>: completion. +inoremap <silent> <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" + +" Better window navigation +nnoremap <C-h> <C-w>h +nnoremap <C-j> <C-w>j +nnoremap <C-k> <C-w>k +nnoremap <C-l> <C-w>l + +" Use alt + hjkl to resize windows +nnoremap <silent> <M-j> :resize -2<CR> +nnoremap <silent> <M-k> :resize +2<CR> +nnoremap <silent> <M-h> :vertical resize -2<CR> +nnoremap <silent> <M-l> :vertical resize +2<CR> + +" Copy selected text to system clipboard (requires gvim/nvim/vim-x11 installed): +vnoremap <C-c> "+y +map <C-p> "+P + +" Binary File Settings ---- {{{ +" +" Hex read +nmap <leader>hr :%!xxd<CR> :set filetype=xxd<CR> +" Hex write +nmap <leader>hw :%!xxd -r<CR> :set binary<CR> :set filetype=xxd<CR> +" +" }}} +" Info Pages Settings ----- {{{ +" +" Set up the reading of info from within vim (use :Info whatever) + +nnoremap <F1> :exe ":Info ".expand("<cword>")<CR> + +" +" }}} +" Terminal Emulator ----- {{{ +" +" +tnoremap <Esc> <C-\><C-n> + +" Usel alt+hjkl to move between windows + +tnoremap <A-h> <C-\><C-n><C-w>h +tnoremap <A-j> <C-\><C-n><C-w>j +tnoremap <A-k> <C-\><C-n><C-w>k +tnoremap <A-l> <C-\><C-n><C-w>l +nnoremap <A-h> <C-w>h +nnoremap <A-j> <C-w>j +nnoremap <A-k> <C-w>k +nnoremap <A-l> <C-w>l +" +" }}} diff --git a/.config/new_neovim/keys/which-key.vim b/.config/new_neovim/keys/which-key.vim new file mode 100644 index 0000000..87eda18 --- /dev/null +++ b/.config/new_neovim/keys/which-key.vim @@ -0,0 +1,170 @@ +" Map leader to which_key +nnoremap <silent> <leader> :silent WhichKey '<Space>'<CR> +vnoremap <silent> <leader> :silent <c-u> :silent WhichKeyVisual '<Space>'<CR> + +" Create map to add keys to +let g:which_key_map = {} +" Define a separator +let g:which_key_sep = '→' +" set timeoutlen=100 + + +" Not a fan of floating windows for this +let g:which_key_use_floating_win = 0 + +" Change the colors if you want +highlight default link WhichKey Operator +highlight default link WhichKeySeperator DiffAdded +highlight default link WhichKeyGroup Identifier +highlight default link WhichKeyDesc Function + +" Hide status line +autocmd! FileType which_key +autocmd FileType which_key set laststatus=0 noshowmode noruler + \| autocmd BufLeave <buffer> set laststatus=2 noshowmode ruler + +" Single mappings +let g:which_key_map['/'] = [ '<Plug>NERDCommenterToggle' , 'comment' ] +let g:which_key_map['.'] = [ ':e $MYVIMRC' , 'open init' ] +let g:which_key_map[';'] = [ ':Commands' , 'commands' ] +let g:which_key_map['='] = [ '<C-W>=' , 'balance windows' ] +let g:which_key_map[','] = [ 'Startify' , 'start screen' ] +let g:which_key_map['d'] = [ ':bd' , 'delete buffer'] +let g:which_key_map['e'] = [ ':CocCommand explorer' , 'explorer' ] +let g:which_key_map['f'] = [ ':Files' , 'search files' ] +let g:which_key_map['h'] = [ '<C-W>s' , 'split below'] +let g:which_key_map['q'] = [ 'q' , 'quit' ] +let g:which_key_map['r'] = [ ':RnvimrToggle' , 'ranger' ] +let g:which_key_map['S'] = [ ':SSave' , 'save session' ] +let g:which_key_map['T'] = [ ':Rg' , 'search text' ] +let g:which_key_map['v'] = [ '<C-W>v' , 'split right'] +let g:which_key_map['w'] = [ 'w' , 'write' ] +let g:which_key_map['z'] = [ 'Goyo' , 'zen' ] + +" Group mappings + +" b is for buffer +let g:which_key_map.b = { + \ 'name' : '+buffer' , + \ '1' : ['b1' , 'buffer 1'] , + \ '2' : ['b2' , 'buffer 2'] , + \ 'd' : ['bd' , 'delete-buffer'] , + \ 'f' : ['bfirst' , 'first-buffer'] , + \ 'h' : ['Startify' , 'home-buffer'] , + \ 'l' : ['blast' , 'last-buffer'] , + \ 'n' : ['bnext' , 'next-buffer'] , + \ 'p' : ['bprevious' , 'previous-buffer'] , + \ '?' : ['Buffers' , 'fzf-buffer'] , + \ } + +" s is for search +let g:which_key_map.s = { + \ 'name' : '+search' , + \ '/' : [':History/' , 'history'], + \ ';' : [':Commands' , 'commands'], + \ 'a' : [':Ag' , 'text Ag'], + \ 'b' : [':BLines' , 'current buffer'], + \ 'B' : [':Buffers' , 'open buffers'], + \ 'c' : [':Commits' , 'commits'], + \ 'C' : [':BCommits' , 'buffer commits'], + \ 'f' : [':Files' , 'files'], + \ 'g' : [':GFiles' , 'git files'], + \ 'G' : [':GFiles?' , 'modified git files'], + \ 'h' : [':History' , 'file history'], + \ 'H' : [':History:' , 'command history'], + \ 'l' : [':Lines' , 'lines'] , + \ 'm' : [':Marks' , 'marks'] , + \ 'M' : [':Maps' , 'normal maps'] , + \ 'p' : [':Helptags' , 'help tags'] , + \ 'P' : [':Tags' , 'project tags'], + \ 's' : [':Snippets' , 'snippets'], + \ 'S' : [':Colors' , 'color schemes'], + \ 't' : [':Rg' , 'text Rg'], + \ 'T' : [':BTags' , 'buffer tags'], + \ 'w' : [':Windows' , 'search windows'], + \ 'y' : [':Filetypes' , 'file types'], + \ 'z' : [':FZF' , 'FZF'], + \ } + +" g is for git +let g:which_key_map.g = { + \ 'name' : '+git' , + \ 'a' : [':Git add .' , 'add all'], + \ 'A' : [':Git add %' , 'add current'], + \ 'b' : [':Git blame' , 'blame'], + \ 'B' : [':GBrowse' , 'browse'], + \ 'c' : [':Git commit -m "autocommit"' , 'commit'], + \ 'd' : [':Git diff' , 'diff'], + \ 'D' : [':Gdiffsplit' , 'diff split'], + \ 'g' : [':GGrep' , 'git grep'], + \ 'G' : [':Gstatus' , 'status'], + \ 'h' : [':GitGutterLineHighlightsToggle' , 'highlight hunks'], + \ 'H' : ['<Plug>(GitGutterPreviewHunk)' , 'preview hunk'], + \ 'j' : ['<Plug>(GitGutterNextHunk)' , 'next hunk'], + \ 'k' : ['<Plug>(GitGutterPrevHunk)' , 'prev hunk'], + \ 'l' : [':Git log' , 'log'], + \ 'p' : [':Git push' , 'push'], + \ 'P' : [':Git pull' , 'pull'], + \ 'r' : [':GRemove' , 'remove'], + \ 's' : ['<Plug>(GitGutterStageHunk)' , 'stage hunk'], + \ 't' : [':GitGutterSignsToggle' , 'toggle signs'], + \ 'u' : ['<Plug>(GitGutterUndoHunk)' , 'undo hunk'], + \ 'v' : [':GV' , 'view commits'], + \ 'V' : [':GV!' , 'view buffer commits'], + \ } + +" l is for language server protocol +let g:which_key_map.l = { + \ 'name' : '+lsp' , + \ '.' : [':CocConfig' , 'config'], + \ ';' : ['<Plug>(coc-refactor)' , 'refactor'], + \ 'a' : ['<Plug>(coc-codeaction)' , 'line action'], + \ 'A' : ['<Plug>(coc-codeaction-selected)' , 'selected action'], + \ 'b' : [':CocNext' , 'next action'], + \ 'B' : [':CocPrev' , 'prev action'], + \ 'c' : [':CocList commands' , 'commands'], + \ 'd' : ['<Plug>(coc-definition)' , 'definition'], + \ 'D' : ['<Plug>(coc-declaration)' , 'declaration'], + \ 'e' : [':CocList extensions' , 'extensions'], + \ 'f' : ['<Plug>(coc-format-selected)' , 'format selected'], + \ 'F' : ['<Plug>(coc-format)' , 'format'], + \ 'h' : ['<Plug>(coc-float-hide)' , 'hide'], + \ 'i' : ['<Plug>(coc-implementation)' , 'implementation'], + \ 'I' : [':CocList diagnostics' , 'diagnostics'], + \ 'j' : ['<Plug>(coc-float-jump)' , 'float jump'], + \ 'l' : ['<Plug>(coc-codelens-action)' , 'code lens'], + \ 'n' : ['<Plug>(coc-diagnostic-next)' , 'next diagnostic'], + \ 'N' : ['<Plug>(coc-diagnostic-next-error)' , 'next error'], + \ 'o' : ['<Plug>(coc-openlink)' , 'open link'], + \ 'O' : [':CocList outline' , 'outline'], + \ 'p' : ['<Plug>(coc-diagnostic-prev)' , 'prev diagnostic'], + \ 'P' : ['<Plug>(coc-diagnostic-prev-error)' , 'prev error'], + \ 'q' : ['<Plug>(coc-fix-current)' , 'quickfix'], + \ 'r' : ['<Plug>(coc-rename)' , 'rename'], + \ 'R' : ['<Plug>(coc-references)' , 'references'], + \ 's' : [':CocList -I symbols' , 'references'], + \ 't' : ['<Plug>(coc-type-definition)' , 'type definition'], + \ 'u' : [':CocListResume' , 'resume list'], + \ 'U' : [':CocUpdate' , 'update CoC'], + \ 'v' : [':Vista!!' , 'tag viewer'], + \ 'z' : [':CocDisable' , 'disable CoC'], + \ 'Z' : [':CocEnable' , 'enable CoC'], + \ } + + +" t is for toggle +let g:which_key_map.t = { + \ 'name' : '+toggle' , + \ 'c' : [':ColorizerToggle' , 'colorizer'], + \ 'e' : [':CocCommand explorer' , 'explorer'], + \ 'n' : [':set nonumber!' , 'line-numbers'], + \ 'r' : [':set norelativenumber!' , 'relative line nums'], + \ 's' : [':let @/ = ""' , 'remove search highlight'], + \ 't' : [':FloatermToggle' , 'terminal'], + \ 'v' : [':Vista!!' , 'tag viewer'], + \ } + +" Register which key map +call which_key#register('<Space>', "g:which_key_map") + + diff --git a/.config/new_neovim/plug-config/coc.vim b/.config/new_neovim/plug-config/coc.vim new file mode 100644 index 0000000..709f971 --- /dev/null +++ b/.config/new_neovim/plug-config/coc.vim @@ -0,0 +1,157 @@ + " let g:coc_global_extensions = [ + " \ 'coc-snippets', + " \ 'coc-actions', + " \ 'coc-emmet', + " \ 'coc-pairs', + " \ 'coc-tsserver', + " \ 'coc-floaterm', + " \ 'coc-html', + " \ 'coc-css', + " \ 'coc-cssmodules', + " \ 'coc-yaml', + " \ 'coc-python', + " \ 'coc-explorer', + " \ 'coc-svg', + " \ 'coc-prettier', + " \ 'coc-vimlsp', + " \ 'coc-flutter', + " \ 'coc-xml', + " \ 'coc-yank', + " \ 'coc-json', + " \ 'coc-vimtex', + " \ ] + +" Use tab for trigger completion with characters ahead and navigate. +inoremap <silent><expr> <TAB> + \ pumvisible() ? "\<C-n>" : + \ <SID>check_back_space() ? "\<TAB>" : + \ coc#refresh() +inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" + +function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' +endfunction + +" Use <c-space> to trigger completion. +inoremap <silent><expr> <c-space> coc#refresh() + +" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current +" position. Coc only does snippet and additional edit on confirm. +if exists('*complete_info') + inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" +else + imap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" +endif + +" GoTo code navigation. +nmap <silent> gd <Plug>(coc-definition) +nmap <silent> gy <Plug>(coc-type-definition) +nmap <silent> gi <Plug>(coc-implementation) +nmap <silent> gr <Plug>(coc-references) + +" Use K to show documentation in preview window. +nnoremap <silent> K :call <SID>show_documentation()<CR> + +function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('<cword>') + else + call CocAction('doHover') + endif +endfunction + +" Highlight the symbol and its references when holding the cursor. +autocmd CursorHold * silent call CocActionAsync('highlight') + +" Symbol renaming. +" nmap <leader>rn <Plug>(coc-rename) + +augroup mygroup + autocmd! + " Setup formatexpr specified filetype(s). + autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') + " Update signature help on jump placeholder. + autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') +augroup end + +" Applying codeAction to the selected region. +" Example: `<leader>aap` for current paragraph +" xmap <leader>a <Plug>(coc-codeaction-selected) +" nmap <leader>a <Plug>(coc-codeaction-selected) + +" Remap keys for applying codeAction to the current line. +" nmap <leader>ac <Plug>(coc-codeaction) +" Apply AutoFix to problem on the current line. +" nmap <leader>qf <Plug>(coc-fix-current) + +" Introduce function text object +" NOTE: Requires 'textDocument.documentSymbol' support from the language server. +xmap if <Plug>(coc-funcobj-i) +xmap af <Plug>(coc-funcobj-a) +omap if <Plug>(coc-funcobj-i) +omap af <Plug>(coc-funcobj-a) + +" Use <TAB> for selections ranges. +" NOTE: Requires 'textDocument/selectionRange' support from the language server. +" coc-tsserver, coc-python are the examples of servers that support it. +" nmap <silent> <TAB> <Plug>(coc-range-select) +" xmap <silent> <TAB> <Plug>(coc-range-select) + +" Add `:Format` command to format current buffer. +command! -nargs=0 Format :call CocAction('format') + +" Add `:Fold` command to fold current buffer. +command! -nargs=? Fold :call CocAction('fold', <f-args>) + +" Add `:OR` command for organize imports of the current buffer. +command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + +" Add (Neo)Vim's native statusline support. +" NOTE: Please see `:h coc-status` for integrations with external plugins that +" provide custom statusline: lightline.vim, vim-airline. +set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} + +" Mappings using CoCList: +" Show all diagnostics. +" TODO add these to which key +" nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> +" " Manage extensions. +" nnoremap <silent> <space>e :<C-u>CocList extensions<cr> +" " Show commands. +" nnoremap <silent> <space>c :<C-u>CocList commands<cr> +" " Find symbol of current document. +" nnoremap <silent> <space>o :<C-u>CocList outline<cr> +" " Search workspace symbols. +" nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> +" " Do default action for next item. +" nnoremap <silent> <space>j :<C-u>CocNext<CR> +" " Do default action for previous item. +" nnoremap <silent> <space>k :<C-u>CocPrev<CR> +" " Resume latest coc list. +" nnoremap <silent> <space>p :<C-u>CocListResume<CR> + +" Explorer +let g:coc_explorer_global_presets = { +\ 'floating': { +\ 'position': 'floating', +\ }, +\ 'floatingLeftside': { +\ 'position': 'floating', +\ 'floating-position': 'left-center', +\ 'floating-width': 30, +\ }, +\ 'floatingRightside': { +\ 'position': 'floating', +\ 'floating-position': 'right-center', +\ 'floating-width': 30, +\ }, +\ 'simplify': { +\ 'file.child.template': '[selection | clip | 1] [indent][icon | 1] [filename omitCenter 1]' +\ } +\ } +"nmap <silent> <space>e :CocCommand explorer<CR> +" nnoremap <silent> <leader>e :CocCommand explorer<CR> +" nmap <space>f :CocCommand explorer --preset floatingRightside<CR> +autocmd BufEnter * if (winnr("$") == 1 && &filetype == 'coc-explorer') | q | endif + diff --git a/.config/new_neovim/themes/airline.vim b/.config/new_neovim/themes/airline.vim new file mode 100644 index 0000000..80fad2e --- /dev/null +++ b/.config/new_neovim/themes/airline.vim @@ -0,0 +1,34 @@ +"let g:airline_theme='luna' +let g:airline_theme='onedark' + +if !exists('g:airline_symbols') + let g:airline_symbols = {} +endif + +let g:airline_powerline_fonts = 1 + " unicode symbols +let g:airline_left_sep = '▶' +let g:airline_right_sep = '◀' +let g:airline_symbols.crypt = '🔒' +let g:airline_symbols.linenr = '☰' +let g:airline_symbols.maxlinenr = '㏑' +let g:airline_symbols.branch = '⎇' +let g:airline_symbols.paste = 'Þ' +let g:airline_symbols.spell = 'Ꞩ' +let g:airline_symbols.notexists = 'Ɇ' +let g:airline_symbols.whitespace = 'Ξ' +let g:powerline_pycmd='py3' + +" enable tabline +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#left_sep = '▶' +let g:airline#extensions#tabline#right_sep = '◀' + +set showtabline 2 + +set timeoutlen=300 ttimeoutlen=0 +set laststatus=2 " always display the status line +set statusline=%F "Full path to the file +set statusline+=\ -\ "Separator +set statusline+=%-4{fugitive#statusline()} "If using git, show branch being used + diff --git a/.config/new_neovim/themes/onedark.vim b/.config/new_neovim/themes/onedark.vim new file mode 100644 index 0000000..99ad7bb --- /dev/null +++ b/.config/new_neovim/themes/onedark.vim @@ -0,0 +1,23 @@ +" onedark.vim override: Don't set a background color when running in a terminal; +if (has("autocmd") && !has("gui_running")) + augroup colorset + autocmd! + let s:white = { "gui": "#ABB2BF", "cterm": "145", "cterm16" : "7" } + autocmd ColorScheme * call onedark#set_highlight("Normal", { "fg": s:white }) " `bg` will not be styled since there is no `bg` setting + augroup END +endif + +hi Comment cterm=italic +let g:onedark_hide_endofbuffer=1 +let g:onedark_terminal_italics=1 +let g:onedark_termcolors=256 + +syntax on +colorscheme onedark + + +" checks if your terminal has 24-bit color support +if (has("termguicolors")) + set termguicolors + hi LineNr ctermbg=NONE guibg=NONE +endif diff --git a/.config/new_neovim/vim-plug/plugins.vim b/.config/new_neovim/vim-plug/plugins.vim new file mode 100644 index 0000000..d569804 --- /dev/null +++ b/.config/new_neovim/vim-plug/plugins.vim @@ -0,0 +1,49 @@ +" auto-install vim-plug + +if ! filereadable(expand('~/.config/new_neovim/autoload/plug.vim')) + echo "Downloading junegunn/vim-plug to manage plugins..." + silent !mkdir -p ~/.config/nvim/autoload/ + silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim +endif + +call plug#begin('~/.config/new_neovim/plugged') +Plug 'alok/notational-fzf-vim' +Plug 'dbeniamine/cheat.sh-vim' +Plug 'dbeniamine/vim-mail' +Plug 'honza/vim-snippets' +Plug 'jalvesaq/Nvim-R' +Plug 'jalvesaq/vimcmdline' +Plug 'jceb/vim-orgmode' +Plug 'jnurmine/Zenburn' +Plug 'joshdick/onedark.vim' +Plug 'junegunn/fzf.vim' +Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +Plug 'junegunn/goyo.vim' +Plug 'junegunn/Limelight.vim' +Plug 'liuchengxu/vim-which-key' " See what keys do like in emacs +Plug 'morhetz/gruvbox' +Plug 'nelstrom/vim-markdown-preview' +Plug 'neoclide/coc.nvim', {'branch': 'release'} +Plug 'pangloss/vim-javascript' +Plug 'PotatoesMaster/i3-vim-syntax' +Plug 'scrooloose/nerdtree' +Plug 'scrooloose/nerdcommenter' " Comment stuff out +Plug 'sheerun/vim-polyglot' +Plug 'SirVer/ultisnips' +Plug 'suan/vim-instant-markdown', {'for': 'markdown'} +Plug 'szymonmaszke/vimpyter' +Plug 'terryma/vim-multiple-cursors' +Plug 'tmhedberg/SimpylFold' +Plug 'tpope/timl' +Plug 'tpope/vim-markdown' +Plug 'tpope/vim-surround' +Plug 'tpope/vim-fugitive' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'vim-latex/vim-latex' +Plug 'vifm/vifm.vim' +Plug 'vimwiki/vimwiki' +Plug 'voldikss/vim-floaterm' +Plug 'xuhdev/vim-latex-live-preview' +call plug#end() + diff --git a/.config/newsboat/config b/.config/newsboat/config new file mode 100755 index 0000000..4e98e96 --- /dev/null +++ b/.config/newsboat/config @@ -0,0 +1,133 @@ +#-------- settings {{{ +#------------------------------------------------------ +# +#notify-xterm yes +auto-reload no +reload-time 30 + +external-url-viewer "urlview" +#reload-only-visible-feeds yes +#suppress-first-reload yes +refresh-on-startup no +# reload-only-visible-feeds yes +user-agent "Liferea/1.4.14 (Linux; en_US.UTF8; http://liferea.sf.net/)" +article-sort-order date-asc +confirm-exit yes +browser ~/bin/scripts/urlportal.sh +#browser $BROWSERCLI +pager "w3m /usr/lib/w3m/cgi-bin/treat_as_url.cgi %f" +#download-full-page yes # for feeds with link only then dl full page +download-retries 4 +download-timeout 60 +save-path ~/dwhelper +feedlist-format " %n %4i %11u %t -- %T" +#articlelist-format "%4i %f %D %?T?|%-17T| ?%t" +#notify-format "%d new articles (%n unread articles, %f unread feeds)" +show-read-feeds no +show-read-articles yes +notify-program "/usr/bin/notify-send" +#goto-next-feed no +max-items 1000 +#refresh-on-startup no +text-width 72 +#prepopulate-query-feeds yes +#}}} +#-------- podboat {{{ +#------------------------------------------------------ +download-path "~/Downloads/Podcasts" +max-downloads 5 +player "$PLAYER" + +# send any links to queue in URL view +# http://www.newsboat.org/doc/newsboat.html#_macro_support +macro E set browser "echo %u >> ~/.newsboat/queue" ; open ; set browser ~/bin/scripts/urlportal.sh +# }}} +#-------- old reader {{{ +#------------------------------------------------------ + +#urls-source "oldreader" +#oldreader-login "v.graffagnino@btinternet.com" +#oldreader-password "N9\Ch0n\H@n9" + +# }}} +#-------- themes {{{ +#------------------------------------------------------ +# include ~/.newsboat/themes/tronlegacy_by_gotbletu.theme +# include ~/.newsboat/themes/tronlegacy_clu_by_gotbletu.theme +# include ~/.newsboat/themes/tronlegacy_rinzler_by_gotbletu.theme + +# }}} +color listnormal cyan default +color listfocus black yellow standout bold +color listnormal_unread blue default +color listfocus_unread yellow default bold +color info red black bold +color article cyan default + +highlight article "(^Feed:.*|^Title:.*|^Author:.*)" red default bold +highlight article "(^Link:.*|^Date:.*)" default default +highlight article "https?://[^ ]+" green default + +highlight article "^(Title):.*$" blue default +highlight article "\\[[0-9][0-9]*\\]" magenta default bold +highlight article "\\[image\\ [0-9]+\\]" green default bold +highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold +highlight article ":.*\\(link\\)$" cyan default +highlight article ":.*\\(image\\)$" blue default +highlight article ":.*\\(embedded flash\\)$" magenta default + +#-------- Hotkey {{l{ +#------------------------------------------------------ + +# vim like navigation +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key m toggle-show-read-feeds +bind-key ^D pagedown +bind-key ^U pageup +bind-key / open-search tagselection + + +bind-key i sort +bind-key I rev-sort + +bind-key g home all +bind-key G end all + +unbind-key l +bind-key l open +bind-key h quit +bind-key ESC hard-quit +bind-key a toggle-article-read +bind-key n next-unread +bind-key N prev-unread +bind-key D pb-download +bind-key x pb-delete +bind-key U show-urls + +# use macro prefix key ( default: , ) +macro i set browser "tmux split-window && tmux send-keys '$IMAGEVIEWER %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +# open in cli web-browser +macro o set browser "tmux split-window && tmux send-keys '$BROWSERCLI %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +# read reddit comments with rtv (reddit terminal viewer) +macro r set browser "tmux split-window && tmux send-keys '/bin/tuir -l %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +#macro r set browser "tmux split-window && tmux send-keys '/usr/bin/rtv -l %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro m set browser "setsid nohup mpv"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +# add video or audio to play queue using mpv (requires: task-spooler, mpv, youtube-dl) +macro q set browser "tsp mpv --ontop --no-border --force-window --autofit=500x280 --geometry=-15-10 %u"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro t set browser "tsp youtube-dl --add-metadata -ic -f best"; open-in-browser ; set browser urlportal.sh +macro a set browser "tsp youtube-dl --add-metadata -xic -f bestaudio/best"; open-in-browser ; set browser urlportal.sh +macro y set browser "tmux split-window && tmux break-pane && tmux rename-window 'mpsyt-dl' && tmux send-keys 'mpsyt dlurl %u && tmux kill-window -t mpsyt-dl \n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro c set browser "tmux split-window && tmux send-keys '/usr/bin/mpv %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro w set browser "tmux split-window && tmux send-keys '$BROWSER %u && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro z set browser "zathura"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +# c copies the link to the clipboard. +macro x set browser "echo -n %u | xclip -selection clipboard"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +# read saved files +macro s set browser "tmux split-window && tmux send-keys 'ranger ~/.newsboat/saved_articles && tmux kill-pane\n'"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +macro d set browser "dmenuhandler"; open-in-browser ; set browser ~/bin/scripts/urlportal.sh +#}}} diff --git a/.config/newsboat/history.cmdline b/.config/newsboat/history.cmdline new file mode 100644 index 0000000..1e198f8 --- /dev/null +++ b/.config/newsboat/history.cmdline @@ -0,0 +1,100 @@ +1 +1 +124 +107 +1 +191 +1 +200 +203 +124 +1 +182 +124 +1 +184 +164 +1 +107 +1 +107 +1 +1 +1 +124 +129 +139 +184 +124 +124 +1 +184 +124 +183 +164 +139 +184 +124 +2 +1 +5 +1 +1 +1 +1 +1 +1 +1 +3 +124 +1 +1 +1 +1 +1 +1 +1 +2 +1 +1 +1 +1 +1 +1 +3 +1 +1 +1 +1 +1 +1 +124 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +1 +2 +messages +q +107 +124 +129 +160 +183 +q +1 +2 +q +2 +2 diff --git a/.config/newsboat/history.search b/.config/newsboat/history.search new file mode 100644 index 0000000..c7a676a --- /dev/null +++ b/.config/newsboat/history.search @@ -0,0 +1,35 @@ +Dice +militant +arch +reddit +reddit +reddit +reddit +Taylor +merger +massive +magnet +nerdist +null +null byte +Luke +DataCamp +Python Tutorial +Nerdist +Marian +Sensus Fidelium +Gospel +youtube +Church Militant +Church Militant YouTube +youtube church militant +youtube Church Militant +youtube +Church Militant +Church Militant +Python +python +Brodie +Brodie +Sens +kevin diff --git a/.config/newsboat/queue b/.config/newsboat/queue new file mode 100755 index 0000000..4291bb5 --- /dev/null +++ b/.config/newsboat/queue @@ -0,0 +1 @@ +https://talkpython.fm/episodes/download/227/maintainable-data-science-tips-for-non-developers.mp3 "/home/archlinux/vgg/Downloads/Podcasts/maintainable-data-science-tips-for-non-developers.mp3" diff --git a/.config/newsboat/rss.xml b/.config/newsboat/rss.xml new file mode 100755 index 0000000..16bef1c --- /dev/null +++ b/.config/newsboat/rss.xml @@ -0,0 +1,777 @@ +<?xml version="1.0" encoding="utf-8"?> +<?xml-stylesheet type="text/css" href="rss.css" ?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + +<channel> +<title>The Latest from Luke</title> +<description>Updates from Luke Smith. Throw this in your RSS feeder for instant updates!</description> +<language>en-us</language> +<link>https://lukesmith.xyz/rss.xml</link> +<atom:link href="https://lukesmith.xyz/rss.xml" rel="self" type="application/rss+xml" /> +<image> +<title>The Latest from Luke</title> +<url>https://lukesmith.xyz/pix/luke_cs.gif</url> +<link>https://lukesmith.xyz/rss.xml</link> +</image> + +<item> +<title>Video on newsboat and RSS feed</title> +<guid isPermaLink="false">newsboat</guid> +<pubDate> Wed, 11 Apr 2018 09:42:50 -0700</pubDate> +<link>https://www.youtube.com/watch?v=dUFCRqs822w</link> +<description><![CDATA[<p>A little video on newsboat and RSS feeds. Welcome, if you're just now getting into RSS feeds!</p>]]></description> +</item> + +<item> +<title>dmenu is more than an "application launcher"!</title> +<guid isPermaLink="false">dmenu1</guid> +<pubDate> Sat, 07 Apr 2018 11:37:53 -0700</pubDate> +<link>https://www.youtube.com/watch?v=R9m723tAurA</link> +<description><![CDATA[<p>I've been playing around with dmenu a little recently, and the way it was intended to be used! In this video, I show some little scripts that exploit dmenu's extensibility to get a lot of functionality out of this little suckless program.</p>]]></description> +</item> + +<item> +<title>wtf i hate linux now! Mac OS is best, and other comments.</title> +<guid isPermaLink="false">aprilfools2018</guid> +<pubDate> Sat, 31 Mar 2018 22:25:03 -0700</pubDate> +<link>https://forum.lukesmith.xyz/thread-426.html</link> +<description><![CDATA[<p>I gave the forum a little makeover</p>]]></description> +</item> + +<item> +<title>tripcode!Q/7 fixes my X220</title> +<guid isPermaLink="false">tripcodex220video</guid> +<pubDate> Mon, 26 Mar 2018 13:47:26 -0700</pubDate> +<link>https://www.youtube.com/watch?v=zV1f8raveZo</link> +<description><![CDATA[<p>Watch tripcode!Q/7's video repairing my X220. It's all there!</p>]]></description> +</item> + +<item> +<title>Oral defense next week</title> +<guid isPermaLink="false">oralssoon</guid> +<pubDate> Fri, 23 Mar 2018 15:01:12 -0700</pubDate> +<description><![CDATA[<p>I've been preparing for my oral defense in my doctoral program and some other things recently, adding up to one of the more full months I've had in a while. (So if you're curious why I haven't been putting up as much as usual, that's why). For those who don't know what this means, I wrote two qualifying papers as required for my PhD, and afterwards, our department requires an oral defense of both of them, in front of a committee of my choosing from the department.</p> + +<p>For those who want to know, my committee is Mike Hammond, Tom Bever, Massimo Piatelli-Palmarini, Simin Karimi and Robert Henderson. The only one who non-linguists may be familiar with is Massimo, notorious for his book "What Darwin Got Wrong" with Jerry Fodor, but a couple of the others might have a Wikipedia article or talks on YouTUbe if anyone is interested.</p> + +<p>Anyway, after passing this, I'll be officially allowed to start on my dissertation (and after finishing that, I'll be doing another defense of that). I was sort of thinking of recording this defense for public consumption, although I don't think I'm strictly speaking allowed to, as the event is supposed to be private. (I think this has traditionally been just for the privacy of the defender, which I obviously don't care about).</p> + +<p>After this is over, I'll the ABD (all but dissertation, as they say) and will have more time on my hands.</p>]]></description> +</item> + +<item> +<title>LiberaPay now added (It's better than Paypal and Patreon)</title> +<guid isPermaLink="false">liberapay</guid> +<pubDate> Thu, 22 Mar 2018 09:52:16 -0700</pubDate> +<link>https://liberapay.com/LukeSmith</link> +<description><![CDATA[<p>A lot of people said that they'd like to fund the channel/me, but are (understandably) nervous about Patreon and Paypal. I've now added a <a href="https://liberapay.com/LukeSmith">LiberaPay account</a>, which is a much freer and privacy respecting platform, which also doesn't take a slice off the top fo every transfer.</p> + +<p>If you don't trust Patreon or Paypal (which you shouldn't really), throw your support in via LiberaPay. It'd honestly be better generally to get channel funding there anyway!</p>]]></description> +</item> + +<item> +<title>Luke Smith and Noam Chomsky (and my position in the field)</title> +<guid isPermaLink="false">meetnoam</guid> +<pubDate> Sat, 17 Mar 2018 22:47:18 -0700</pubDate> +<description><![CDATA[<p>Noam Chomsky and I finally formally met this evening at Simin Karimi's Noruz Party. We've run into each other in the halls from time to time, but this was the first time we officially spoke. This sounds like a somewhat bloggish thing to mention, and knowing me, I felt no overwhelming need to speak with him, but Tom Bever insisted on introducing us.</p> + +<p>Tom introduced me in too glowing terms, a nice, yet not so meaningful gesture considering Noam is more than half deaf nowadays, especially in the bustle of the party. People had actually be lining up to see him; it looked sort of like people paying respect to a mafia don, but Tom unceremoniously pushed aside everyone else and invited me to talk to Noam directly.</p> + +<p>We spoke a bit about my projects on prosodically driven syntax and the quantifier scope project, and he entreated me to talk to him later to get more in depth. He didn't divulge if he knew about me, granted, he's definitely heard of me from Tom and others in the department and we've spoken on email chains, but I'm not sure what or if he could've been expected to remember considering that he's less involved than the other faculty.</p> + +<p>I still don't plan on going into the field, but there was an aura of momentousness to the event. A couple people were taking pictures of us and I got a couple comments afterward that remarked on the potential significance of our first meeting.</p> + +<p>Either way it is sort of funny. Someone mentioned to me a bit ago that a lot of the grad students in the field know Arizona as "the place where Luke Smith is", which is hilarious for many reasons, and would probably be upsetting for a lot of the syntacticians here, but most strange now that Noam is here (a lot of people assume he's still at MIT since it's only been a year or so). I've never been plugged into academic politics, I don't actually plan on publishing before I leave the field and I've never even been to the LSA, but between the YouTube channel and targeted pressure from several people, I have a level of notoriety unexpected by me.</p> + +<p>So the disaster scenario for "some people out there" is that something comes of this: that I become in the popular eye "the Linguist" that at least some normal people know about, or even worse, some kind of next logical step from Chomsky, catapulted to prominence in a way similar to how Noam's political rabble-rousing popularized him. And of course the elephant in the room is the political differences: there's a huge irony in some kind of mantle being passed from a Jewish anarcho-communist who grew up on a kibbutz to a goyish low-church Borderer who voted for Trump and has only barely managed to slip into the cracks of academia given his political disposition. If I were to obtain a well-known position in academia, I would be doing a lot of good for the re-enfranchisement of the White Right in the opinion-molding class.</p> + +<p>That's not to say that my ascendancy in the field is even probable if I do stay, but the mere fact there's greater than a 2% chance of it would certainly have surprised me 15, 10, 5 or even 2 years ago. The only question is what aspects of my life am I willing to give up to continue to stoke the fires of this potentiality, or if I can continue to tolerate this lifestyle. On one hand, I've put up with every lie, manipulation, character assassination and "technicality" that could be thrown at me from this department, mostly without flinching, and my detractors are starting to sound like boys-who-cried-wolfs. On the other hand, a cabin for my family in the woods generally sounds like a better lifestyle.</p> +]]></description> +</item> + +<item> +<title>Linguistics Isn't 60 Years Old!:Pāṇinian Approaches to Language</title> +<guid isPermaLink="false">paninisimin</guid> +<pubDate> Thu, 15 Mar 2018 17:53:51 -0700</pubDate> +<link>https://www.youtube.com/watch?v=8yZ91YUdRfY</link> +<description><![CDATA[<p>A guest lecture I gave in Simin Karimi's "Major Works in Syntax" class, a very brief talk about the Indian/Paninian tradition in linguistics. She expressed interest in having me again, so there might be a Part 2 to this focusing on mostly Medieval European thought.</p>]]></description> +</item> + +<item> +<title>New LARBS format; 2.0 coming soon.</title> +<guid isPermaLink="false">larbscoming</guid> +<pubDate> Sat, 10 Mar 2018 19:36:15 -0700</pubDate> +<link>https://github.com/lukesmithxyz/larbs</link> +<description><![CDATA[<p>I've developed a more robust framework for implementing LARBS that will make it considerably easier and more elegant to manage packages. Now all packages are read in one single csv file and are processed based on whether the user chose their package group and whether the package is in the main repos or only in the AUR (this detection is now done automatically).</p> + +<p>There's also now a (mostly) ncurses based interface during installation and, if it means anything, I've considerably reduced the size of the script seeing that the deployment method is now less <i>ad hoc</i>.</p> + +<p>I'm hoping to "officially" re-release the scripts very soon, in fact, after this they may not actually change much at all until I do, all is needed is a little testing. You're welcome to try it yourself now and see the results.</p>]]></description> +</item> + +<item> +<title>I've been unironically playing the best game ever again: Deus Ex</title> +<guid isPermaLink="false">deusexinstall</guid> +<pubDate> Fri, 09 Mar 2018 12:59:44 -0700</pubDate> +<description><![CDATA[<p>I installed Deus Ex (yes, of course the original) on my Arch Desktop, just for laughs and because I wanted to quickly replay and get tired of it. Installation on Linux wasn't too difficult since there's an OpenGL renderer from the Mac port, and aside from that all I needed to install was some lib32 pulseaudio/alsa things. It runs really smooth and clean on a Linux machine if it means anything.</p> + +<p>Don't expect me to end up becoming a game streamer, especially with (>proprietary software), but it was fairly refreshing to play a game with genuinely good storyline and development again. Obviously it lacks the features of a modern game, but back then video games were far enough away from real life so that you could rely on your imagination to fill in the gaps, which arguably makes for a better experience.</p>]]></description> +</item> + +<item> +<title>Suckless sent of video creation?</title> +<guid isPermaLink="false">sentvideos</guid> +<pubDate> Thu, 08 Mar 2018 14:44:19 -0700</pubDate> +<link>https://tools.suckless.org/sent/</link> +<description><![CDATA[<p>A little bit ago I talked about how I've been using suckless <a href="https://tools.suckless.org/sent/">sent</a>, which is a minimalist presentation format. It lacks features aside from the basics: text on slides (which is automatically sized for each one) and the ability to have images (only one per slide, again, autosized).</p> + +<p>I've always looked for a more effective way to make meme videos, by which I mean the videos like my distro-hopping or Mac videos, where I more or less narrate a stream of memes and some text. Traditionally I did this in Blender, but that could be very time consuming, taking several days of constant work to put out a 10 minute video.</p> + +<p>It actually hit me that sent would be a very good replacement for Blender (strangely enough), in that I can just write a presentation, put in images, etc., load it in sent, and record my screen while narrating. I.e., no video editing/tweaking/compiling or work time other than assembling my "script" for the video, in the different memes and text I'll be talking about.</p> + +<p>I think I'll try this out pretty soon. Hopefully I can get in a place where I can put videos like that out relatively commonly.</p>]]></description> +</item> + +<item> +<title>Arch Linux: Is it a meme? (video)</title> +<guid isPermaLink="false">archisameme</guid> +<pubDate> Thu, 08 Mar 2018 11:56:22 -0700</pubDate> +<link>https://www.youtube.com/watch?v=VO9R_WFs9Zc</link> +<description><![CDATA[<p>Here I talk about some misunderstandings about Arch Linux and some reasons it's worth using. It's not the best distro (there is none), but I keep coming back to Arch for a couple reasons.</p>]]></description> +</item> + +<item> +<title>mutt-wizard Now Has an Autosync and Notification Option!</title> +<guid isPermaLink="false">muttwizsync</guid> +<pubDate> Tue, 06 Mar 2018 10:28:20 -0700</pubDate> +<link>https://github.com/LukeSmithxyz/mutt-wizard</link> +<description><![CDATA[<p>I've added a new options to the mutt-wizard which will automatically add a cronjob that runs a script that smartly syncs offlineimap at the interval you want if there's an internet connection.</p> + +<p>It also checks to see if new mail has been downloaded, and if it has, will provide a brief little notification ding! Enjoy!</p>]]></description> +</item> + +<item> +<title>Clean out your RSS feed cache!</title> +<guid isPermaLink="false">rssfeedclean</guid> +<pubDate> Mon, 05 Mar 2018 19:01:27 -0700</pubDate> +<link>https://lukesmith.xyz</link> +<description><![CDATA[<p>I've cleaned up and added all the frills to my RSS feed to maximize the compatibility with different readings. The temporary downside is that long-time users will probably have to clean out their RSS cache for my feed, otherwise you'll see lots of duplicate entries!</p> + +<p>Don't be afraid, everything will still be here, but you can fee free to clean out your RSS cache and reload to clean everything up!</p>]]></description> +</item> + +<item> +<title>Quantifier Scope Is All Just Fun and Games! (video)</title> +<pubDate>Mon, 05 Mar 2018 16:50:57 MST</pubDate> +<link>https://www.youtube.com/watch?v=5w_PMpQiGL0</link> +<description><![CDATA[<p>A presentation I gave a couple weeks back to prospective graduate students on a recent linguistics project. I argued that quantifier scope is extra-linguistic, not determined by the narrow syntax and am building, with some colleagues a general account of quantifier scope in Game Theoretic terms.</p>]]></description> +<guid isPermaLink="false">funandgames</guid> +</item> + +<item> +<title>From Arch Linux to Parabola: How-To and System Management! (video)</title> +<pubDate>Sun, 04 Mar 2018 20:51:30 MST</pubDate> +<link>https://www.youtube.com/watch?v=4Jx-5Zp28VQ</link> +<description><![CDATA[<p>In this video I go through how to migrate an Arch Linux install to Parabola GNU/Linux-libre, which is a 100% free software distribution! Check it out!</p>]]></description> +<guid isPermaLink="false">arch2para</guid> +</item> + +<item> +<title>NEWS: Arch Linux Install and Config; and X220 Repair (video)</title> +<pubDate>Fri, 02 Mar 2018 23:25:54 MST</pubDate> +<link>https://www.youtube.com/watch?v=6Ke9ZNC9a5k</link> +<description><![CDATA[<p>tripcode!Q/7, who also makes YouTube videos, volunteered to try to fix my X220, so I'll be sending it to him next week. Also, two major Patreon incentives were met last month: the Arch Linux install and the Arch Linux graphical environment setup! Expect those within a week or so!</p>]]></description> +<guid isPermaLink="false">tripcode</guid> +</item> + +<item> +<title>BRAINLET Luke Destroys his ThinkPad X220!!! (Press F) (video)</title> +<pubDate>Thu, 01 Mar 2018 10:40:23 MST</pubDate> +<link>https://www.youtube.com/watch?v=3X1LUlnhIAI</link> +<description><![CDATA[<p>Check the video out! When fixing my X220 I made some bad electrical contact and fried the screen connector. What does this mean for the channel? Let's find out!</p>]]></description> +<guid isPermaLink="false">destx220</guid> +</item> + +<item> +<title>Easy, No BS Slide Presentations with SENT! (suckless) (video)</title> +<pubDate>Sun, 25 Feb 2018 11:28:15 MST</pubDate> +<link>https://www.youtube.com/watch?v=aCLCl96eNaI</link> +<description><![CDATA[<p>I've been playing around with sent recently, which is a good way to immediately make slide presentations. Check it out!</p>]]></description> +<guid isPermaLink="false">sucklesssent</guid> +</item> + +<item> +<title>You're not "Autistic." You're normal. (video)</title> +<pubDate>Mon, 19 Feb 2018 11:42:49 MST</pubDate> +<link>https://www.youtube.com/watch?v=YAsxztU189k</link> +<description><![CDATA[<p>I wanted to talk about a mindset I get a lot from some of my subscribers. Sure, a lot of it is just making fun, but some people get hard on themselves for having hobbies or not socializing how they think they should be. I address this in this video.</p>]]></description> +<guid isPermaLink="false">autistic</guid> +</item> + +<item> +<title>Now You Can Auto-Configure Mutt and OfflineIMAP! (video)</title> +<pubDate>Sat, 17 Feb 2018 23:08:29 MST</pubDate> +<link>https://www.youtube.com/watch?v=SsEJz9f9VMQ</link> +<description><![CDATA[<p>Video out on the now completed mutt/offlineIMAP wizard. Try it yourself! It will give a fully featured terminal email setup with offline backups for offline browsering and safe password storage.</p> + +<p>I also put out a brief video on how to generate a public/private key pair in GnuPG <a href="https://www.youtube.com/watch?v=DMGIlj7u7Eo">here</a>, which is needed for the auto-confige script.</p>]]></description> +<guid isPermaLink="false">muttwiz</guid> +</item> + +<item> +<title>Working on a email wizard for mutt and offlineIMAP configs</title> +<pubDate>Sat, 10 Feb 2018 08:31:10 MST</pubDate> +<link>https://www.youtube.com/watch?v=1h-Qr_Ricik</link> +<description><![CDATA[<p>A brief video showing what I have so far on the mutt auto-config.</p>]]></description> +<guid isPermaLink="false">muttwizprep</guid> +</item> + +<item> +<title>Working on a mutt wizard</title> +<pubDate>Fri, 09 Feb 2018 23:55:54 MST</pubDate> +<link>https://github.com/LukeSmithxyz/mutt-wizard</link> +<description><![CDATA[<p>I think I'll put a video up on this tomorrow, but I'm starting to put together an ncurses script that will automatically configure mutt, offlineIMAP, notmuch, and everything else you need for a fully featured offline terminal email service, all with basically no user effort beyond putting in their email and password.</p> + +<p>If you're a mutt user, you can help me by sending me your email server settings if they're not already in the autoconf/domains.csv file.</p>]]></description> +<guid isPermaLink="false">muttwiznot</guid> +</item> + +<item> +<title>We Have a Forum! (and on the Future!)</title> +<pubDate>Fri, 09 Feb 2018 16:41:35 MST</pubDate> +<link>https://www.youtube.com/watch?v=5MC3wR63FHs</link> +<description><![CDATA[<p>I hope you enjoyed the brief week of no newfriends on the forum. In this video I announce the forum to the wider channel and talk about some of my plans in the near future.</p>]]></description> +<guid isPermaLink="false">forumvid</guid> +</item> + +<item> +<title>How to Actually Get Good at GNU/Linux (video)</title> +<pubDate>Thu, 08 Feb 2018 09:46:52 MST</pubDate> +<link>https://www.youtube.com/watch?v=nNuz-Trx0a4</link> +<description><![CDATA[<p>A daily reminder on the importance of RTFMing!</p>]]></description> +<guid isPermaLink="false">man</guid> +</item> + +<item> +<title>i3: Managing Windows and Webcams for screencasting</title> +<pubDate>Tue, 06 Feb 2018 09:00:07 MST</pubDate> +<link>https://www.youtube.com/watch?v=JkqxYZ7-sQM</link> +<description><![CDATA[<p>A little vid on window management in i3wm, where I show how I manage my webcam and keep it with the properties I want.</p>]]></description> +<guid isPermaLink="false">i3webcams</guid> +</item> + +<item> +<title>Dropdown Terminals and Scratchpads in i3wm! (video)</title> +<pubDate>Mon, 05 Feb 2018 10:29:15 MST</pubDate> +<link>https://www.youtube.com/watch?v=q-l7DnDbiiU</link> +<description><![CDATA[<p>I talk about how to configure and customize i3wm/i3-gaps scratchpads and dropdown terminals.</p>]]></description> +<guid isPermaLink="false">i3dropdown</guid> +</item> + +<item> +<title>Mac Users: Don't Say T*rx on My Channel (T*rxroaches BTFO!) (video)</title> +<pubDate>Sat, 03 Feb 2018 09:52:12 MST</pubDate> +<link>https://www.youtube.com/watch?v=WUCuMqBlSqE</link> +<description><![CDATA[<p>I banned the word "torx" on my comment section to clean up some mess. Why? Watch to find out!</p>]]></description> +<guid isPermaLink="false">torx</guid> +</item> + +<item> +<title>Forum is now open to public (but only YOU know!)</title> +<pubDate>Fri, 02 Feb 2018 20:34:09 MST</pubDate> +<link>https://forum.lukesmith.xyz/</link> +<description><![CDATA[<p>I mentioned making a forum for subscribers and I've been working on it a little for the past few days. The link is at <a href="https://forum.lukesmith.xyz/">https://forum.lukesmith.xyz/</a>. I haven't posted this on YouTube or Twitter yet, but I'll go ahead and tell all of you who follow my RSS feed now.</p> + +<p>Registration should be free and open and you should be able to post on the boards I've made so far, so feel free to, if fact, please do and go ahead and find any bugs, start dialogue etc. If everything works out, I'll probably announce it on the channel next week.</p>]]></description> +<guid isPermaLink="false">forumrss</guid> +</item> + +<item> +<title>LARBS preparing for release</title> +<pubDate>Mon, 29 Jan 2018 11:55:53 MST</pubDate> +<link>https://larbs.xyz</link> +<description><![CDATA[<p>If you track my Github, you may've noticed I've been making some bigger changes to my LARBS and voidrice repositories, preparing for a re-release of LARBS with more fanfare, and more tutorial videos to go along with it (I've also updated https://larbs.xyz to HTTPS since that's a more legit concern).</p> + +<p>There have been a lot of little improvements, and I'm hoping to have a lot of the small kinks worked out before then.</p> + +<p>There is one thing I'd really like and don't know if it exists, and that is a kind of mutt config generator or wizard, that will automatically detect your email provider's servers and set the more annoying settings by itself. I've put some documentation up about how to configure mutt so far, but I really wish there were a way to make it easier for users.</p> +]]></description> +<guid isPermaLink="false">larbssoon</guid> +</item> + +<item> +<title>RSS readers: You can now use HTTPS!</title> +<pubDate>Sun, 28 Jan 2018 21:59:34 MST</pubDate> +<link>https://lukesmith.xyz/rss.xml</link> +<description><![CDATA[<p>Just as a note, you can feel free to use https://lukesmith.xyz/rss.xml as the feed URL in your feed reader as I've finally gotten SSL/HTTPS for my website.</p>]]></description> +<guid isPermaLink="false">https</guid> +</item> + +<item> +<title>What programs do I use?</title> +<pubDate>Sun, 28 Jan 2018 10:51:07 MST</pubDate> +<link>https://lukesmith.xyz/programs.html</link> +<description><![CDATA[<p>I get a lot of questions about what particular programs I use for this or that. For people who don't want to troll every video of mine to find the answers, I put up a little page on my website (in link) that lists all the main stuff I use.</p>]]></description> +<guid isPermaLink="false">programsiuse</guid> +</item> + +<item> +<title>Dataframes in R: Columns subsets and more! (video)</title> +<pubDate>Sat, 27 Jan 2018 09:55:20 MST</pubDate> +<link>https://www.youtube.com/watch?v=DDzVtu24dbk</link> +<description><![CDATA[<p>A video on how to create modify and extract data from columns and rows in R. We talk about some of the more extensible functions that are like advanced loops in one command!</p>]]></description> +<guid isPermaLink="false">rdataframes</guid> +</item> + +<item> +<title>Playing Around with Functions in R (video)</title> +<pubDate>Sat, 27 Jan 2018 09:54:37 MST</pubDate> +<link>https://www.youtube.com/watch?v=pgRvPNo6HaY</link> +<description><![CDATA[<p>A video on some of the basic functions in R, summaries, means, simple plots and more!</p>]]></description> +<guid isPermaLink="false">rfunctions</guid> +</item> + +<item> +<title>Stats in R: Basics of a Beefy Calculatory (video)</title> +<pubDate>Wed, 24 Jan 2018 16:42:06 MST</pubDate> +<link>https://www.youtube.com/watch?v=WlCWQrKQQI4</link> +<description><![CDATA[<p>Here's the first in a series on R, the mathematical/statistical programming language!</p> + +<p>Here I talk about the basics: the arithmetic, variables and the logic of vectors in R, and how R differs from typical programming languages.</p>]]></description> +<guid isPermaLink="false">rintro</guid> +</item> + +<item> +<title>Selecting terminal URLs with URLview (video)</title> +<pubDate>Mon, 22 Jan 2018 21:37:49 MST</pubDate> +<link>https://www.youtube.com/watch?v=IgzpAjFgbCw</link> +<description><![CDATA[<p>A brief video on URLview, which makes urls on the terminal easy to follow!]]></description> +<guid isPermaLink="false">urlview</guid> +</item> + +<item> + <title>Hard Reset on the Voidrice Repository</title> + <pubDate>Sun, 21 Jan 2018 23:13:23 MST</pubDate> + <link>https://github.com/LukeSmithxyz/voidrice</link> + <description><![CDATA[<p>After several months and 70-something commits, I decided to hard reset and recommit my voidrice repository. Nothing's gone of course, there are a lot of forks and mirrors out there and I'm recommiting the files as they are today.</p> + <p>This might sound like a strange thing to do, but the repo files were getting huge (around 20MB for a repo for less than 2MB of files). I tried all the typical options, garbage collecting, even tree filtering, but couldn't reduce the size, and a small size is what I need for LARBS.</p> + <p>The main reason it got so big was when I naïvely included an enormous font system with the repo a while back to make it more accessible to Parabola users. I didn't realize how much of a pain it would be to deal with for its ease.</p> + <p>I'm planning a bigger, fuller release of LARBS, so I want to have everything clean and accessible. I may upload the old bloated repository as well on Github, maybe a "voidrice classic" and keep it as it is now, but there's a lot I've learned about system management so I like the clean feeling.</p>]]></description> +<guid isPermaLink="false">hardreset</guid> +</item> + +<item> + <title>st: suckless's Simple Terminal (video)</title> + <pubDate>Sun, 21 Jan 2018 15:40:09 MST</pubDate> + <link>https://www.youtube.com/watch?v=FJmm7wl4JUI</link> + <description><![CDATA[<p>I actually got a worthwhile suckless terminal configuration going. Check out the video, and also <a href="https://github.com/LukeSmithxyz/st">my git repo</a> with my particular build.</p> + <p>It has transparency and scrollback, and a lot of helpful bindings, but also all the typical perks of st: excellent unicode compatibility and general non-bugginess.</p>]]></description> +<guid isPermaLink="false">st</guid> +</item> + +<item> + <title>An Intro to R Markdown (video)</title> + <pubDate>Fri, 19 Jan 2018 17:34:22 MST</pubDate> + <link>https://www.youtube.com/watch?v=4J5a0JWIF-0</link> + <description><![CDATA[<p>A brief intro R markdown. I talk about what it does and how to compile it in vim, with a lot of its features like inline code and different output formats..</p>]]></description> +<guid isPermaLink="false">rmarkdownintro</guid> +</item> + +<item> + <title>The Virgin LaTeX vs. the CHAD R Markdown (Video)</title> + <pubDate>Fri, 19 Jan 2018 07:50:16 MST</pubDate> + <link>https://www.youtube.com/watch?v=LWScm5WI3fo</link> + <description><![CDATA[<p>I've been using R markdown as a general document formatting paradigm. It has all the perks of LaTeX but is much more manageable and with much more transparent syntax.</p> + <p>I'll be putting up another video on it soon!</p>]]></description> +<guid isPermaLink="false">chadrmarkdown</guid> +</item> + +<item> + <title>Returning to Arizona</title> + <pubDate>Fri, 05 Jan 2018 17:18:11 EST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>I'll be returning to Arizona and all my equipment tomorrow and hopefully will be fully cured of the flu I've had the past week. After that, I'll have more videos coming out, probably in the typical 'spree' release schedule.</p>]]></description> +<guid isPermaLink="false">returningarizona</guid> +</item> + +<item> + <title>URXVT, Basics and Configuration (VIDEO)</title> + <pubDate>Wed, 20 Dec 2017 20:43:13 EST</pubDate> + <link>https://www.youtube.com/watch?v=eaBf_yFHps8</link> + <description><![CDATA[<p>A video on urxvt, including the basics, transparency with i3 and perl scripts that do all of the magic for you.</p>]]></description> +<guid isPermaLink="false">urxvt</guid> +</item> + +<item> + <title>Linguistics Videos! (Coming Whether I like it or not!)</title> + <pubDate>Wed, 20 Dec 2017 16:16:57 EST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>I've been rehired by the linguistics department (so I'm now working for both them and Information Sciences) and part of my assignment next semester will be making video lectures for an introductory lingusitics course.</p> + <p>One of the reasons I got this assignment is my history on YouTube, and given that, I'm going to <em>actually</em> end up making the linguistics videos I've been promising here and there.</p> + <p>The initial content will probably be very introductory, but if I get momentum in making the videos, I'll probably expand the range past what my assignment is.</p>]]></description> +<guid isPermaLink="false">linguisticsvids</guid> +</item> + +<item> + <title>Yup! Vim has a spell-checker. (VIDEO)</title> + <pubDate>Wed, 20 Dec 2017 23:38:41 EST</pubDate> + <link>https://www.youtube.com/watch?v=ez1XBUqbS68</link> + <description><![CDATA[<p>A video on vim's built-in spellchecker, along with all the default bindings and possibilities, and how to use dictionaries from other languages, etc.</p>]]></description> +<guid isPermaLink="false">vimspell</guid> +</item> + +<item> + <title>Video on Net Neutrality</title> + <pubDate>Mon, 18 Dec 2017 23:54:52 MST</pubDate> + <link>https://www.youtube.com/watch?v=RgbeB79Dss0</link> + <description><![CDATA[<p>Well, my check from Comcast cleared a little late, but now I've finally taken to defending Pajeet Pai's "corporate takeover of the internet". Reddit-friends on suicide watch.</p>]]></description> +<guid isPermaLink="false">netneut</guid> +</item> + +<item> + <title>sc-im: A Vim-inspired Excel replacement!</title> + <pubDate>Sat, 16 Dec 2017 09:24:05 MST</pubDate> + <link>https://www.youtube.com/watch?v=K_8_gazN7h0</link> + <description><![CDATA[<p>Thanks to a viewer, Michael Novella for showing me this! It's a pretty sweet terminal spreadsheet editor with vim-like bindings. Lots of fun and a good potential replacement for LibreOffice calc.</p>]]></description> +<guid isPermaLink="false">sc-im1</guid> +</item> + +<item> + <title>ThinkPad T420 Overview</title> + <pubDate>Fri, 15 Dec 2017 16:42:34 MST</pubDate> + <link>https://www.youtube.com/watch?v=dPOLYXi2tGg</link> + <description><![CDATA[<p>A brief overview of the ThinkPad T420, one of the best ThinkPads for new ThinkPad users. Sturdy, modern yet still with the classic design.</p>]]></description> +<guid isPermaLink="false">t420</guid> +</item> + +<item> + <title>"Which ThinkPad Should I Get?"</title> + <pubDate>Wed, 13 Dec 2017 17:58:22 MST</pubDate> + <link>https://www.youtube.com/watch?v=La3sb5y7e-k</link> + <description><![CDATA[<p>New video up on ThinkPads: the different kinds, what's popular, what's free and what's a meme.</p>]]></description> +<guid isPermaLink="false">whichthinkpad</guid> +</item> + +<item> + <title>Shortcut sync for bash, ranger and qutebrowser</title> + <pubDate>Wed, 13 Dec 2017 16:00:51 MST</pubDate> + <link>https://www.youtube.com/watch?v=wxlJAGiRY0o</link> + <description><![CDATA[<p>See the link; I had come up with the idea for a script a while ago, but I figured it was worth redoing and making a little more robust. The idea is to keep the same aliases across qutebrowser, ranger and bash for cding to or moving/downloading files to certain directories. Check out the video or the Github repository for more info.</p>]]></description> +<guid isPermaLink="false">shortcut2</guid> +</item> + +<item> + <title>ThinkPad week is on!</title> + <pubDate>Wed, 13 Dec 2017 11:30:18 MST</pubDate> + <link>https://youtube.com/c/LukeSmithxyz</link> + <description><![CDATA[<p>I teased doing a series on ThinkPads a couple weeks ago, but other work bogged me down. Now that classes and end of the semester administrivia are over, I'm going to have a big lump of videos coming out in the next couple days—Expect them! And it's not just ThinkPads!</p>]]></description> +<guid isPermaLink="false">thinkpadweek</guid> +</item> + +<item> + <title>Battlestation and Apartment Tour Part II</title> + <pubDate>Thu, 23 Nov 2017 10:21:11 MST</pubDate> + <link>https://www.youtube.com/watch?v=btYBY7jKzv4</link> + <description><![CDATA[<p>My current apartment, bigger and more liveable, still no anime!</p>]]></description> +<guid isPermaLink="false">battle2</guid> +</item> + +<item> + <title>Some channel announcements!</title> + <pubDate>Tue, 21 Nov 2017 22:26:24 MST</pubDate> + <link>https://www.youtube.com/watch?v=Cu-Bwr814wc</link> + <description><![CDATA[<p>Bitchute, Patreon, my to-do list and much more! Check it out!</p>]]></description> +<guid isPermaLink="false">bitchutepattodo</guid> +</item> + +<item> + <title>Make the Internet Decentralized Again!</title> + <pubDate>Tue, 21 Nov 2017 09:16:26 MST</pubDate> + <link>https://www.youtube.com/watch?v=Mtkicw97zSo</link> + <description><![CDATA[<p>I'm reuploading some portions of my interview with Michael Perilloux. They'll be popping up over the rest of the week. In this segment, we talk about efforts to decentralize the internet again.</p>]]></description> +<guid isPermaLink="false">decentralized</guid> +</item> + +<item> + <title>Markdown and Pandoc for Easy Presentations...</title> + <pubDate>Mon, 20 Nov 2017 17:52:23 MST</pubDate> + <link>https://www.youtube.com/watch?v=dum7q6UXiCE</link> + <description><![CDATA[<p>I've started to use Markdown and Pandoc to get my briefer presentations done. I strongly recommend it.</p> + <p>You can avoid the main of LibreOffice and the encumbering syntax of LaTeX/Beamer all in one.</p>]]></description> +<guid isPermaLink="false">pandocpres</guid> +</item> + +<item> + <title>On EOMA68 comuters</title> + <pubDate>Mon, 20 Nov 2017 23:14:02 MST</pubDate> + <link>https://www.youtube.com/watch?v=KvHUDHqSeuM</link> + <description><![CDATA[<p>Since people have expressed interest, I did a little video on the EOMA68 to advertise the thing. You can get one that ships out next summer.</p> + <p>It's one of the few computers with actual innovation behind it, and really propose a decntralized alternative.</p>]]></description> +<guid isPermaLink="false">eoma68on</guid> +</item> + +<item> + <title>Limitations cause greatness!</title> + <pubDate>Sat, 18 Nov 2017 22:56:25 MST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>Alright, it's that time of year where I have to start finalizing my research projects, which means I'll be really hard-pressed for time. If that means anything, it's that I'll probably be producing <em>more</em> content than usual.</p> + + <p>I'm the kind of person who when in a pinch goes the extra mile, which is good now just because I've been putting out a whole lot less content than I had wanted this semester. Good news is (a) I now have the will to do more hardcore video editing and (b) I found a way to cheat!</p> + + <p>That said, I do have a lot of personal work to finish, two qualifying papers, a paper on the evolution of rationality, a corpus of Latin and probably some other stuff I've forgotten. For me that just means more limitations, and thus more motivation for output I'll probably also put out videos on my academic projects, but only as a little bonus.</p> + + <p>First things first, I have a series on de-Googling coming soon, with a couple videos coming out next week.</p>]]></description> +<guid isPermaLink="false">limitationscause</guid> +</item> + +<item> + <title>On Purism Laptops</title> + <pubDate>Mon, 06 Nov 2017 23:33:07 MST</pubDate> + <link>https://www.youtube.com/watch?v=nwcOpf30SfY</link> + <description><![CDATA[<p>I give my 2 cents on Purism laptops. My subscribers give their 2 cents on my now shaved head.</p>]]></description> +<guid isPermaLink="false">purismlaptops</guid> +</item> + +<item> + <title>My book library: the autistic thing I've done this weekend...</title> + <pubDate>Sun, 05 Nov 2017 17:25:11 MST</pubDate> + <link>http://lukesmith.xyz/library.html</link> + <description><![CDATA[<p>I created a catalogue of all of my books for online viewing, for those who want to see them for reviews. This is also sort of a personal thing, so I can have records before my collection becomes too large.</p>]]></description> +<guid isPermaLink="false">libraryhtml</guid> +</item> + +<item> + <title>Block Ads, Tracking, Porn and whatever else with /etc/hosts</title> + <pubDate>Sat, 04 Nov 2017 09:53:58 MST</pubDate> + <link>https://www.youtube.com/watch?v=VPfpCVW7ZvM</link> + <description><![CDATA[<p>New video up on creating your own firewall with /etc/hosts. An extremely easy way to limit the potentially malicious IPs your machine can connect to.</p>]]></description> +<guid isPermaLink="false">blockadsporn</guid> +</item> + +<item> + <title>Luke on Golden Age</title> + <pubDate>Mon, 23 Oct 2017 23:03:49 MST</pubDate> + <link>http://www.socialmatter.net/2017/10/23/golden-age-episode-4-software-freedom/</link> + <description><![CDATA[<p>I've made an appearance on Social Matter's podcast "The Golden Age".</p> + <p>Host Michael Perilloux and I talk about software freedom, decentralization and privacy in the context of the Restoration and Neoreactionary politics.</p> + <p>Check the podcast out <a href="http://www.socialmatter.net/2017/10/23/golden-age-episode-4-software-freedom/">here</a>, and then <a href="http://socialmatter.net">SocialMatter.net</a> for even more.</p>]]></description> +<guid isPermaLink="false">lukegoldenage</guid> +</item> + +<item> + <title>10,000 subscribers!</title> + <pubDate>Thu, 19 Oct 2017 21:34:41 MST</pubDate> + <link>https://youtube.com/c/lukesmithxyz</link> + <description><![CDATA[<p>A big day! I've hit 10,000 subscribers. I had no idea that anyone outside of a couple weebs on 4chan would ever actually see my channel...</p> + <p>I've come a long way. My two most popular videos (distrohopping and Apple/Mac) were both made before I had <em>100</em> subscribers, now I have a hundred times that, and both those videos are individually at over 130,000 views.</p> + <p>Looking back at my system of a year ago I can't help shaking my head either; I've improved so much and have brought a lot of people with me on this year-long (but ongoing) journey!</p>]]></description> +<guid isPermaLink="false">10000subs</guid> +</item> + +<item> + <title>Housecleaning...</title> + <pubDate>Thu, 19 Oct 2017 02:56:51 MST</pubDate> + <link>http://lukesmith.xyz/videos.html</link> + <description><![CDATA[<p>YouTube does a bad job of making older content on your channel accesible to new viewers. To partially counteract that, I've decided to put a gallery of all my YouTube videos (with thumbnails) on my website for browsing, indexed by topic.</p>]]></description> +<guid isPermaLink="false">housecleaning</guid> +</item> + +<item> + <title>The Podcast is Really Happening</title> + <pubDate>Sun, 15 Oct 2017 22:17:46 MST</pubDate> + <link>https://www.youtube.com/watch?v=8SPD35ETwuk</link> + <description><![CDATA[<p>Last month, my colleague Ryan and I put out a brief introductory podcast episode, planning a series on academic affairs. We never planned out how frequent these would come out, and due to a series of life effects, it might look like it was a one time thing.</p> + <p>The feedback we got though was overwhelming and encouraging, especially given how little most of my subscribers probably cared about the issues before hand. I also had a lot of grad students in the field email glowingly. Even better was the "negative" attention we got, mostly from the Old Guard and the typical pearl-clutchers in our department. The very gall of us to serve as faces to the universal discontentment.</p> + <p>Ryan was witness to a particularly embarrassing encounter with a certaie professor absolutely apoplectic about the podcast, and recounted it to me with much gusto, variegated with uncontrollable laughter.</p> + <p>Needless to say, the more episodes are in the tubes. We're enjoying where this is going already.</p>]]></description> +<guid isPermaLink="false">podcast</guid> +</item> + +<item> + <title>Out of Town: LARBS coming soon</title> + <pubDate>Fri, 29 Sep 2017 10:32:45 EDT</pubDate> + <link>https://github.com/LukeSmithxyz/LARBS</link> + <description><![CDATA[<p>I'll be out of town for the weekend on personal reason, away from my microphone, etc. So don't expect videos until Tuesday! Around then, I will probably be finishing up the LARBS (see link) which I plan on releasing then. That will make a lot of things easier for a lot of people (including me).</p>]]></description> +<guid isPermaLink="false">outoftownlarbs</guid> +</item> + +<item> + <title>No Relation! EP1: Noam Chomsky Joins Us in Hell (Arizona)</title> + <pubDate>Sun, 17 Sep 2017 09:09:21 MST</pubDate> + <link>https://www.youtube.com/watch?v=8SPD35ETwuk</link> + <description><![CDATA[<p>Starting a new podcast with my colleague Ryan Smith (no relation).</p> + <p>To christen our first episode, we discuss Noam Chosmky joining us at the University of Arizona and our general disenchantment with the generative program.</p>]]></description> +<guid isPermaLink="false">norel1</guid> +</item> + +<item> + <title>Automatic Ricing Script Part 2. (COMING SOON)</title> + <pubDate>Mon, 11 Sep 2017 21:43:33 MST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>I've decided to remake install scripts for Arch/Parabola since they were pretty popular last time, and I've made some pretty big changes since then.</p> + <p>Expect them sometime this week. It actually saves me a lot of time doing this, and is a lot of fun making the documentation [autism intensifies].]]></description> +<guid isPermaLink="false">newlarbssoon</guid> +</item> + +<item> + <title>Some busy work and imminent plans</title> + <pubDate>Mon, 11 Sep 2017 13:42:54 MST</pubDate> + <link>https://youtube.com/c/LukeSmithxyz</link> + <description><![CDATA[<p>I have some real-world work to do this week, I have to finish writing a website and have to do some data analysis for a study, probably in R. If that ends up being interesting, I might actually just post a stream of it.</p> + <p>Otherwise, this week I'll probably put up a Battlestation video, and possibly the first of a linguistics-themed podcast.</p>]]></description> +<guid isPermaLink="false">imminentplans</guid> +</item> + +<item> + <title>Reworking the website backend</title> + <pubDate>Fri, 08 Sep 2017 22:06:17 MST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>I had some free time this afternoon, so I decided to optimize by website backend. I've started to compile my website offline with a bash script that preemptively loads the required php commands. That's a marginal economy on the server-side, but mostly just an excuse to get something done.</p>]]></description> +<guid isPermaLink="false">websitebackend</guid> +</item> + +<item> + <title>My mpd/ncmpcpp Setup</title> + <pubDate>Fri, 08 Sep 2017 23:46:23 MST</pubDate> + <link>https://www.youtube.com/watch?v=sZIEdI9TS2U</link> + <description><![CDATA[<p>A brief overview of mpd and ncmpcpp and my setup with them.</p> + <p>As always, dotfiles are on Github.</p>]]></description> +<guid isPermaLink="false">mpdncmpcpp</guid> +</item> + +<item> + <title>Why I Went 2 Years with No Internet at Home</title> + <pubDate>Thu, 07 Sep 2017 20:03:51 MST</pubDate> + <link>https://www.youtube.com/watch?v=kiMcX3Fa2Us</link> + <description><![CDATA[<p>A lot of people have asked about this on some of my videos... from 2015 to a month ago, I lived without internet at my home. This video is on why I recommend it.</p>]]></description> +<guid isPermaLink="false">2yearwointernet</guid> +</item> + +<item> + <title>Muh RSS</title> + <pubDate>Thu, 07 Sep 2017 20:02:05 MST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[<p>I've been neglecting my RSS feed recently, considering it's a pretty robust syndication platform, I plan on remedying that.</p> + <p>This might take the form of me starting a formal blog... I haven't yet, but I already have a WP server configured and might be employing it soon.</p>]]></description> +<guid isPermaLink="false">muhrss</guid> +</item> + +<item> + <title>Video out on how I manage my website</title> + <pubDate>Sun, 27 Aug 2017 17:38:27 MST</pubDate> + <link>https://www.youtube.com/watch?v=azkWYxyqh3Y</link> + <description><![CDATA[<p>Check out the link for details. I talk about my new paradigm for editing my website. I do plan on writing up a guide for newbies about how to start their own websites. There'll be an accompanying video too, since that's what people watch.</p>]]></description> +<guid isPermaLink="false">managewebsite</guid> +</item> + +<item> + <title>Mastering my website</title> + <pubDate>Sat, 26 Aug 2017 21:10:55 MST</pubDate> + <link>http://lukesmith.xyz</link> + <description><![CDATA[You can't see any changes on my actual website, but I've just implemented a totally new paradigm for editing and updating it.</p> + + <p>I hate the internet. I like not being connected. But I pretty often have ideas for what to add to my website when I'm outside of the WWW.</p> + + <p>Traditionally, I just had to remember what I wanted to change and do it when I came back into the realm of wifi, but now I'm just keeping an entire "repository" of my website on my computer here.</p> + + <p>I can edit it offline, and when I get back to a reliable connection, I "push" the changes with rsync via ssh.</p> + + <p>There are other huge advantages to this as well. I don't have to worry about maintaining another vimrc on the serverside, and I don't have to worry about the lag common over ssh. Plus, I have an extra little backup in case of disaster with Host Gator.</p> + + <p>All in all, a good development.</p>]]></description> +<guid isPermaLink="false">masteringwebsite</guid> +</item> + +<item> + <title>Finally using Vid.Me, lol</title> + <pubDate>Sat, 26 Aug 2017 15:19:18 MST</pubDate> + <link>https://vid.me/LukeSmith</link> + <description><![CDATA[I've had some backups of earlier videos on <a href="https://vid.me/LukeSmith">Vid.Me</a> for a while, but with all the ZUCCing going on with Google and YouTube, I figure it's best to keep more recent back ups as well. + + <p>Thankfully, Vid.Me always for pretty easy migration of YouTube videos, without me having to reentrer metadata, so it should be pretty easy to upkeep everything.]]></description> +<guid isPermaLink="false">vidme</guid> +</item> + +<item> +<title>Video on calcurse, also news to come</title> +<pubDate>Sat, 26 Aug 2017 13:44:57 MST</pubDate> +<link>https://www.youtube.com/watch?v=hvc-pHjbhdE</link> +<description><![CDATA[New video out on calcurse, expect actually more content soon. I'm hoping at least two videos per week. + +<p>Probably today or tomorrow I'm going to be putting out a video on recent events in my life. Long story short: I was fired. I'm going to be posting a Patreon link to make up for some of the lost money, but leaving the (((university))) is a long-overdue development.]]></description> +<guid isPermaLink="false">calcurse</guid> +</item> + +<item> +<title>i3wm video is out!</title> +<pubDate>Tue, 1 Aug 2017 12:49:52 MST</pubDate> +<link>https://www.youtube.com/watch?v=-BOW61luzF4</link> +<description><![CDATA[Here it is, new i3 video, going over my revamping of my configs and other notes, especially for new subscribers.]]></description> +<guid isPermaLink="false">i3wmchad</guid> +</item> + +<item> +<title>Battlestation Video (Part 1)!</title> +<pubDate>Sun, 30 Jul 2017 14:36:10 MST</pubDate> +<link>https://www.youtube.com/watch?v=np5rFh0FcfU</link> +<description><![CDATA[New video up on my computer setup in my current appartment. I go over all the basics, but no so much the books or my other computers. I'lll do that in Part 2, which I'll release next month when I move into my new place.]]></description> +<guid isPermaLink="false">battle1</guid> +</item> + +<item> +<title>Am I *done* configuring i3?</title> +<pubDate>Fri, 28 Jul 2017 11:57:17 MST</pubDate> +<link>https://github.com/LukeSmithxyz/voidrice</link> +<description><![CDATA[I've push some minor changes and cleaning up to my i3 configs. Several months ago, I was always making huge changes all the time, but now I daresay that I've nearly *perfected* what I'm aiming at... + +<p>Changes will still come, but only trickle in as they come to me. By in large, I feel like I've converge on what I've been looking for when I started ricing. + +<p>Expect a video on my i3 configs soon. There will be overlap with previous vids, but I feel like this one is much more refined now.]]></description> +<guid isPermaLink="false">donei3</guid> +</item> + +<item> +<title>Wallpapers now public</title> +<pubDate>Sat, 22 Jul 2017 11:17:34 MST</pubDate> +<link>https://github.com/LukeSmithxyz/wallpapers</link> +<description><![CDATA[After a lot of requests, I've decided to upload all of my wallpapers into a Github repository. Check out the link for the full deal.]]></description> +<guid isPermaLink="false">wallpapers</guid> +</item> + +<item> +<title>Corebooting/Librebooting Soon</title> +<pubDate>Fri, 21 Jul 2017 10:09:34 MST</pubDate> +<link>https://paypal.me/LukeMSmith</link> +<description><![CDATA[I've settled back home after an abnormally long trek across country. Now that I have, I've started to accumulate the tools I'll need to begin Librebooting or Corebooting machines via Rasberry Pi.<p> + +Some materials are still shipping, and I'm not 100% sure how long it will take for preparation, but I'm hoping to have at least a video Corebooting my X220 up by the time our classes begin this time next month. ]]></description> +<guid isPermaLink="false">corelibre</guid> +</item> + +<item> +<title>How to Go Pro on YouTube!</title> +<pubDate>Wed, 28 Jun 2017 19:59:15 MST</pubDate> +<link>https://www.youtube.com/watch?v=g66Jhxi-gg0</link> +<description><![CDATA[For the 5,000 subscribers mark. I also think I'll use this as a channel greeter for non-subscribed users. Next in terms of actual content, I'm thinking of a video detailing ffmpeg and possibly a partially satirical video on distros.]]></description> +<guid isPermaLink="false">gopro5000</guid> +</item> + +<item> +<title>5,000 subscribers mark and returning home</title> +<pubDate>Wed, 28 Jun 2017 13:34:58 MST</pubDate> +<link>https://youtube.com/c/LukeSmithxyz</link> +<description><![CDATA[It looks like I've hit 5,000 subscribers several days ago. I haven't been able to add new videos recently, due to some summer travels and me taking a general break. I'll be returnung to Arizona within the week though, and will add some more videos then. Possibily a 5,000 subs celebration vid in the meantime...]]></description> +<guid isPermaLink="false">5000subs</guid> +</item> + +<item> +<title>New RSS feed</title> +<link>http://lukesmith.xyz/rss.xml</link> +<pubDate>Tue, 13 Jun 2017 10:09:35 MST</pubDate> +<description><![CDATA[I'm starting this RSS feed to aggregate all my updates on different sites. I figure this is one of the more robust ways of publising content, despite the fact that only oldfags might actually use this.]]></description> +<guid isPermaLink="false">first</guid> +</item> + +</channel> + +</rss> diff --git a/.config/newsboat/urls b/.config/newsboat/urls new file mode 100755 index 0000000..4f57ae4 --- /dev/null +++ b/.config/newsboat/urls @@ -0,0 +1,498 @@ +# ---------------------------- Starred Articles / Flagged Articles ---{{{ +# Usage: go to an article, press ctrl+e, press s, press enter. It will now +# show up in your starred articles query feed. +# To cancel - press Escape. +"query:Starred Articles:flags # \"s\"" + +# +# ---}}} +# ------------------ Tag Queries ---{{{ +"query:Youtube:tags =~ \"yt\"" +"query:Astro:tags =~ \"Astro\"" +"query:Infosec:tags =~ \"Infosec\"" +"query:RC:tags =~ \"RC\"" +"query:Auto:tags =~ \"Auto\"" +"query:Comp:tags =~ \"Comp\"" +"query:Python:tags =~ \"^Python\"" +"query:MA:tags =~ \"Martial-Arts\"" +"query:Box-MMA:tags =~ \"Box-MMA\"" +"query:Cards:tags =~ \"Cards\"" +"query:Training:tags =~ \"Training\"" +"query:Survival:tags =~ \"Survival\"" +"query:trr:tags =~ \"trr\"" +"query:Mvs:tags =~ \"Mvs\"" +"query:CoolSites:tags =~ \"Cool Sites\"" +"query:Entertainment:tags =~ \"Entertainment\"" +"query:SocialCommentary:tags =~ \"SocialCommentary\"" +# ---}}} +#---------------------- Astro ---{{{ +---------------------- Astro ---{{{ +http://www3.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/cadcbin/meetings/rss-meetings.py "Astro" +http://arxiv.org/rss/astro-ph "Astro" +http://heasarc.gsfc.nasa.gov/docs/rss/heasarc.xml "Astro" +#http://feeds.sciencedaily.com/sciencedaily/top_news?format=xml "Astro" +#http://feeds.sciencedaily.com/sciencedaily/space_time "Astro" +#http://feeds.sciencedaily.com/sciencedaily/space_time/solar_flare?format=xml "Astro" +#http://www.spacedaily.com/spacedaily.xml "Astro" +http://acme.com/jef/apod/rss.xml "Astro" +http://www.nasa.gov/rss/dyn/breaking_news.rss "Astro" +http://feeds.newscientist.com/space "Astro" +http://astronomynow.com/astronow.xml "Astro" +http://astrobites.org/feed/ "Astro" + ---}}} +# ---}}} +#--------------------- Python ---{{{ +--------------------- Python ---{{{ +https://pythonbytes.fm/episodes/rss "Python" +https://talkpython.fm/episodes/rss "Python" +http://planet.python.org/rss10.xml "Python" +#http://www.n1tr0g3n.com/3/feed "Python" +#http://thelivingpearl.com/feed/ "Python" + ---}}} +# ---}}} +#--------------------- Linux ---{{{ +--------------------- Linux ---{{{ +https://lukesmith.xyz/rss.xml "Cool Sites" "Linux" +http://blog.sanctum.geek.nz/feed/ "Linux" +#http://feeds.feedburner.com/TheGeekStuff "Infosec" +http://nullr0ute.com/feed/ "Linux" +http://www.reddit.com/r/unixporn/.rss "Linux" +#http://dedoimedo.com/rss_feed.xml "Linux" +#https://bbs.archlinux.org/extern.php?action=feed&tid=210621&type=atom "Linux" +https://www.archlinux.org/feeds/news/ "Linux" "~ArchLinux News Feed" + ---}}} +# ---}}} +#--------------------- Infosec ---{{{ +--------------------- Infosec ---{{{ +https://hak5.org/feed "Infosec" +https://hak5.org/category/episodes/metasploit-minute/feed "Infosec" +https://www.kali.org/feed/ "Infosec" +#http://samiux.blogspot.com/feeds/posts/default "Infosec" +#http://www.blackmoreops.com/feed/ "Infosec" +#http://www.infosecnews.org/feed/ "Infosec" +#http://taosecurity.blogspot.com/feeds/posts/default?alt=rss "Infosec" +#http://feeds.feedburner.com/SecurityTube "Infosec" +#http://pentestgeek.com/feed "Infosec" +#http://hacking-tutorial.com/feed "Infosec" +#https://www.ethicalhacker.net/feed "Infosec" +#http://www.darkreading.com/rss_simple.asp "Infosec" +#http://2600.com/rss.xml "Infosec" +#https://www.hackerschool.com/blog.rss "Infosec" +#http://hackwithkalilinux.blogspot.com/feeds/posts/default "Infosec" +#http://www.toolswatch.org/feed/ "Infosec" +#http://penetrationtestingwithkalilinux.blogspot.com/feeds/posts/default?alt=rss "Infosec" +#http://1337day.com/rss "Infosec" +http://thehackernews.com/feeds/posts/default "Infosec" +http://null-byte.wonderhowto.com/rss.xml "Infosec" + ---}}} +# ---}}} +#--------------------- CVE Updates ---{{{ +--------------------- CVE Updates ---{{{ +http://www.exploit-db.com/rss.php "CVE Updates" +http://www.securityfocus.com/rss/vulnerabilities.xml "CVE Updates" + ---}}} +# ---}}} +#--------------------- Android ---{{{ +--------------------- Android ---{{{ +http://www.xda-developers.com/feed/ "Android" + ---}}} +# ---}}} +##--------------------- World News ---{{{ +#--------------------- World News ---{{{ +#http://feeds.bbci.co.uk/news/rss.xml "World News" +#http://feeds.bbci.co.uk/news/world/rss.xml "World News" +#http://feeds.bbci.co.uk/news/science_and_environment/rss.xml "World News" +# ---}}} +## ---}}} +#--------------------- Cool Sites ---{{{ +--------------------- Cool Sites ---{{{ +#http://www.cantoneseclass101.com/wp/wp-feed-audio-video.php "Cool Sites" +http://www.reddit.com/r/opendirectories/.rss "Cool Sites" +http://www.reddit.com/r/fullmoviesonyoutube/.rss "Cool Sites" +http://nerdist.libsyn.com/rss "Cool Sites" +http://feeds.feedburner.com/hardestkitontheplanet "Cool Sites" + ---}}} +# ---}}} +#--------------------- RC ---{{{ +--------------------- RC ---{{{ +https://www.churchmilitant.com/rss "RC" +https://www.churchmilitant.com/rss/the_vortex "RC" +https://www.churchmilitant.com/rss/headlines "RC" +https://churchmilitant.com/rss/daily_download "RC" +#http://feeds.feedburner.com/zenit/english "RC" +#http://ewtn.com/rss/RSS_headlines.xml "RC" +#http://opusdei.us/rss/rss32.xml "RC" +#http://bibletidbits.blogspot.com/feeds/posts/default "RC" +#http://universalis.com/Europe.England.Westminster/atomweek.xml "RC" +http://www.ewtn.com/rss/RSS_daily_av.xml "RC" +http://patrickcoffin.libsyn.com/rss "RC" +#http://feeds.feedburner.com/SundayBibleReflectionsByDrScottHahn "RC" +#http://www.loyalbooks.com/book/the-innocence-of-father-brown-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-man-who-knew-too-much-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-wisdom-of-father-brown-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-club-of-queer-trades-by-g-k-chesterton/feed "RC" + ---}}} +# ---}}} +#--------------------- Torrents ---{{{ +--------------------- Torrents ---{{{ +https://eztv.ag/ezrss.xml "trr" "~EZTV" +https://yts.am/rss "trr" "~Yify" +https://limetorrents.unblocked.mx/rss/20/ "trr" "~Limetorrents-TV" +https://limetorrents.unblocked.mx/rss/16/ "trr" "~Limetorrents-Mvs" +https://kickass.unblocked.mx/movies/?rss=1 "trr" "~Kickass-Mvs" +http://feeds.feedburner.com/Torrentfreak "trr" "~Torrentfreak" +https://mirror.animetosho.org/feed/rss2?only_tor=1 "trr" "~animetosho" + ---}}} +# ---}}} +#--------------------- Videos ---{{{ +--------------------- Videos ---{{{ + +https://www.youtube.com/feeds/videos.xml?channel_id=UC2nobViRAiSUZUi1rspEw5A "yt" "~11Mester Eskrima" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw "yt" "~3Blue1Brown" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9yI7r9JgCRl82nkZ-RrvKg "yt" "~413 Media Group" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCIuScmttXWzLoXqs8kU3vWA "yt" "~52Kards" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvtyj--wGCkL6CSypzgrphA "yt" "~ABENIR KALIS FILIPINO BLADE FIGHTING ART" +https://www.youtube.com/feeds/videos.xml?channel_id=UCoLmw-7YiyXJA6Ma0DvAzhg "yt" "~Adoration of The Cross" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqft2ae5rHmfwxdXZ_NBihQ "yt" "~AlanLau" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCAWjFnZ_McLDT7FpryNdVPg "yt" "~Alan Roberts" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRFHN6P57B4MqntXD_iIPhQ "yt" "~Al Kavadlo" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1KbedtKa3d5dleFR6OjQMg "yt" "~Alpha M" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4pBD8lfNzOmAIK9vdaPEgw "yt" "~A Million Card Tricks" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCymxImYflBXhffVso_5Knww "yt" "~Andy Norman" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCBHn_qVrfMmPNhqiqQyrQLQ "yt" "~Anime" "Mvs" +https://www.youtube.com/feeds/videos.xml?channel_id=UCiIVDn5bUGZUJc_15qJPjUw "yt" "~Aperture Fight Focused" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkRMqL3hLrIYhxNCac4vR3w "yt" "~Art of Manliness" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCe0TLA0EsQbE-MjuHXevj2A "yt" "~Athlean-X" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqFyobKkIGJY92hgs0tqkGA "yt" "~AverageIowaGuy" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCP16wb-IThCVvM8D-Xx8HXA "yt" "~BackstageScience" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCNXj_OehKPmlKIVtWd0ClIA "yt" "~BeastSkills" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCnQC_G5Xsjhp9fEJKuIcrSw "yt" "~Ben Shapiro" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgHtBrLKxgFGvnqYb8hh-MQ "yt" "~BlackEagleSociety" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4YOBmzRey4X3lLCjhw3UaQ "yt" "~BlackScoutSurvival" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6OlxaTqpDGDXK2DkAnNiLQ "yt" "~Bladesociety" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrTKmz9izXiHU7XCnXcLnqQ "yt" "~Bob Breen Academy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWhKFUSIbtGK1CANZjwTgsA "yt" "~BoredParacord" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "yt" "~Brodie Robertson" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8o1EKIOgYemo43CWgT5Cpg "yt" "~BudgetBugout" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UChVDJnxw6AVoNRpwHcAU67g "yt" "~Budo Brothers" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCACJ9D5MltM8YidsnBgRpag "yt" "~BUDO INTERNATIONAL (OFFICIAL)" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCY3JqKA5XkYCXGbTvLm4acA "yt" "~Bumpfiend" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1pykTrdH1K0FwFYFU-98iA "yt" "~Burton Richardson" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCZIIRX8rkNjVpP-oLMHpeDw "yt" "~CalisthenicMovement" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvwbLBTkuIwqNm9kHUqWRnw "yt" "~Catholic Answers" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCDfNrxA5dMp0co1siQOLrjg "yt" "~Catholic News Service" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCes1EvRjcKU4sY_UEavndBw "yt" "~ChrisFix" "CoolSites" "Auto" +https://www.youtube.com/feeds/videos.xml?channel_id=UCE3S-Nf1YSgTlpfqS2lrkhg "yt" "~Chris Lopez" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrPUg54jUy1T_wII9jgdRbg "yt" "~Chris Ramsay" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCsUgCCaaOfESPA4REUfZ33g "yt" "~ChurchMilitant Archives" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX17igkZ9JhU64JoTBVSWeQ "yt" "~Church Militant" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCanH0QaNl7KA9pYSPGq6cTw "yt" "~ChuSauLi" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCfXTzdNin8U8aEQVMIXiRog "yt" "~Classic Catholic Audiobooks" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC-oyoA8N-JvAzjgDCY0YMuw "yt" "~ClassicKungFuMovies1" "Martial-Arts" "Mvs" +https://www.youtube.com/feeds/videos.xml?channel_id=UCI1Xwp3-PeiJv61zUIwFXoA "yt" "~Claudio Alfarano" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaS4coxA2k1GU348UjJFi_Q "yt" "~CLIMagic" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjf26rdUOPr3cJIWiQedwzg "yt" "~CombatKali Manila" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCry8LKUIcpL6cRgwCnw_Wuw "yt" "~Combattacticsgroup" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC_rq-K4nekMNYVhGd2LG_pw "yt" "~Combat Unlimited" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCKU9plS4xIjCcFaNlfQjL7w "yt" "~Complicit Clergy" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6iY6UWwWBJ8qxUiG8BUTgQ "yt" "~Conditioning Fighting Warrior" "Martial-Arts" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "yt" "~Conner McDaniel" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCyz4GbHoKpinnNEkxRCq4qg "yt" "~ConvictConditioning" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCIIqMiwPWdxd-t5NGquir6g "yt" "~CoreJKD" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCCezIgC97PvUuR4_gbFUs5g "yt" "~Corey Schafer" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCVDJLwuFseeME7Lcfp5o-YQ "yt" "~CQCforPolice" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpIkf_TIl84z5wnmpN29ktw "yt" "~Csploit tutorials" "Infosec" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvSmJ60pbqQqqCDojWTspfw "yt" "~Cutlerylover" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UC7q4MfJUZKt6pKwU6kONPfA "yt" "~Cyb3rw0rM1" "Infosec" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEL3kJiBYrd802rsQs055lQ "yt" "~Damien Walters" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9dFRWdM_sndI3nHT6vJcwA "yt" "~Dan Fleisch" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCB99aK4f2WaH96joccxLvSQ "yt" "~Daniel Madison" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcjhlahNEOa0rMjDAS5CrDQ "yt" "~Dan Inosanto - Topic" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgfdXYLwzW_14wcfeIod_yw "yt" "~Dani Yusup" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCp207INWXuK1fmmnVdX0bfw "yt" "~Darius Benson" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCTkpeicFNBuHJCvp4LZEuvw "yt" "~Darren Kitchen" "Infosec" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC79Gv3mYp6zKiSwYemEik9A "yt" "~DataCamp" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzL_0nIe8B4-7ShhVPfJkgw "yt" "~Data Science Dojo" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEz0n9HRm1jM-oW9kHWwMPg "yt" "~David Bertrand" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCU69MZgxri2nawuwymrDPPA "yt" "~David Onuma" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvb09EKzbgPAgsCAYCnSWLw "yt" "~Difesa Personale" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCi9bnDhdRniyyBCtdVrtqsw "yt" "~DeusEstCaritas" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCug1cL7vmUvYooOjXyHjsxQ "yt" "~Diamond and Silk" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCH8YnzTWYsxR-SP1uzKjjOw "yt" "~DieselSC" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4NDMKhSwnP5HhIYWmRVjCA "yt" "~Difesa Personale" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "yt" "~DistroTube" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCba2uIYq75m6SNuK8TtmG9A "yt" "~Disturb Reality" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCK9iqvHPo7E2cN-vpUBoOkQ "yt" "~docpeares1" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCKQXQt-TePVi0VBBDfC6A-A "yt" "~Dog Brothers" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCj7MB9JURm-vdok53KwDkBA "yt" "~Doug Marcaida" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCC-HlfZxhnh1TbHglvLNujg "yt" "~DragonDoorTV" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UChiwLDIBJrV5SxqdixMHmQA "yt" "~DRIVETRIBE" "CoolSites" "Auto" +https://www.youtube.com/feeds/videos.xml?channel_id=UCeJGHnaPVxYr7z55VF4YmPg "yt" "~Dr Taylor Marshall" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC7hqHhlheKfYeyTzy2nzt-Q "yt" "~Elite Academy of Martial Arts, GA" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UChKgsPL1MX5z_M33fYtOPKg "yt" "~Ellusionist" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxrd1I7wmE2chwpoqD4DSTA "yt" "~EnterTheDojoShow" "Martial-Arts" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4vCVnylGXwFGwAmYiAhU6Q "yt" "~Eskrimamate" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCN5V0JO3jCMHvmMezj1ueyw "yt" "~Every Damn Day Fitness" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYxyKkSNCfZUaTTbefc7JIw "yt" "~EverydayCommentary" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCsg_7hCRtGan3LCve-erpmw "yt" "~EverydayTacticalVids" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCijDos-LUTh9RQvSCMQqN6Q "yt" "~EWTN" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UClMWnUHbxJKJLUgloN1mPUA "yt" "~Faith J Goldy" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxC1i0XpORRXITdMQew6esQ "yt" "~Fernando Cruces" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCwdVyruxCCqMR4DtPLhtwlg "yt" "~Fight Hub TV" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UCmxZw7N4Jyljr1RbSs4Ymaw "yt" "~FightHype.com" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UC-1eZ9zR6PhB2PMbmh1KT-Q "yt" "~Fight SCIENCE" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCK-bMpkmfqdNB0-TbWbwVhw "yt" "~Fight Vision" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UCoh-JKvnZlLh22F9sfe6TXA "yt" "~Filipino Martial Arts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UChaj3IgCH7QZsdmT1aTVmzA "yt" "~FMA Pulse" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCM5eTxFBMc6ZDcR348a26jg "yt" "~FRANK151" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCnJF5tsWLdZ7mZnjM5r0GrQ "yt" "~Fred & Lila Evrard - Kali Majapahit" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkAgTd8YQRSwPqzScsWs7nw "yt" "~Fred Mastro" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYsBtWVTod9Sr6yh33BkOoA "yt" "~FSSPTraining" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCo_0OLNDT9mhlALA-N_c8nw "yt" "~Funker Tactical" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCVnhSRxW08ZmSiyJKs_5xzA "yt" "~GamarjobatCH" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCbYRkVIwpcs-eaEFOzJJRng "yt" "~Geoff Neupert" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCGsyLtb8pRI81cBif9JKRyA "yt" "~Ghost Tube" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9ULRTHvszrMpy3kDT-KDIQ "yt" "~Gideonstactical" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCQS_toz8IrSe1wIfH6-5pIQ "yt" "~Glad2Teach" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCdZBylpexkZ1v7KfgTqb_qA "yt" "~GM Angelo Baldissone" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC_ruB7qtdk4KufASPRuWhZA "yt" "~GMB Fitness" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkf4VIqu3Acnfzuk3kRIFwA "yt" "~Gotbletu" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCXPHFM88IlFn68OmLwtPmZA "yt" "~Greg Hurrell" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCyJYCQ6WaEMhdZAuPo799bA "yt" "~Grjngo - Western Movies" "Mvs" +https://www.youtube.com/feeds/videos.xml?channel_id=UCuqDZDE80DYxNyRw_Z-ORzw "yt" "~Guro Billy Brown" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYUZ3zjJ-dxK41R_lrSngZA "yt" "~Guro Igz Caz Filipino Self Defense" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1TmPstrVnEWQ9WRFh_53lQ "yt" "~Guro Jerome Teague" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrTKmz9izXiHU7XCnXcLnqQ "yt" "~Guru Bob Breen" "Martial Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4WCfX4yWsUPRsoubrBObTg "yt" "~GymnasticBodies" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC0ZTPkdxlAKf-V33tqXwi3Q "yt" "~HackerSploit" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3s0BtrBJpwNDaflRSoiieQ "yt" "~Hak5" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkn86rzw-WPS8aAnMv-AxeA "yt" "~HakTip" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWPQB43yGKEum3eW0P9N_nQ "yt" "~HBOBoxing" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UCraHeUa3z8RlfxwIorVvoJw "yt" "~Heinnie Haynes" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWnH2SxLtyNg78DCphFywtw "yt" "~HolyBibleDRV" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UChbtALsl-1aUyOFvtzftvrQ "yt" "~i3wm" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCbGqFyaftbTli5SWXMXo5hQ "yt" "~iChess.net" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UC_UA-S_AjngM8MtNZ6nagyw "yt" "~ilustrisimoUSA" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCtbC5DuJ73pQpnqql0A0pRw "yt" "~InciteFitness" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCJDW0ydttWNzJwd9XBVbHyA "yt" "~InsideMartialArts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCfJL9E7Ka3aZwysawDW4H5g "yt" "~Iron Tamer Dave Whitley" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrpZB529C6CmkkA0WzaBkCQ "yt" "~Italia Autos" "Auto" +https://www.youtube.com/feeds/videos.xml?channel_id=UCq7P5VhGtUBAYojAW7nFaVw "yt" "~Jason Robitaille" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UClwSH3HYfURcXCqHrWOwv-A "yt" "~Jay Ignacio" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMEBQgevfeUSRKlH2ziHlAA "yt" "~Jeet Kune Do - Topic" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzr-5pxdUuPK_L4WE6WdH_A "yt" "~JeetKuneDoVideos" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCn3jnyZL3fUUgqDRQkqpr8A "yt" "~JetFu" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX430kXiW2whSzf5BG3hLpQ "yt" "~Jimmy Akin" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCP7uKIwLLFsiBXppuYxtJyA "yt" "~Jinile Calpe" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLYwT4_baFCLSst3G6icl_g "yt" "~Joedefranco" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCG3MDqrWo5mwbnzE-bxBQiw "yt" "~John Cortese" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvekcedak49FMc73YYNwNpg "yt" "~Josemaria Escriva" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3kF75qL5qWH6CEmNIXcqAQ "yt" "~Joseph Marana" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCnxGkOGNMqQEUMvroOWps6Q "yt" "~JRE Clips" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvpvytLAAvsxTMA-YtUAs5w "yt" "~Kali Center" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC60hYrum5MzcVRj5u4EJ5cQ "yt" "~Kali Linux Tricks" "Comp" "Infosec" +https://www.youtube.com/feeds/videos.xml?channel_id=UCA2hNAJrLN8B5fQoeBegFZA "yt" "~Kali Linux Tutorials" "Comp" "Infosec" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgijBKm-I5yUiqfU0ObXksg "yt" "~Kali Majapahit" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcBRZmkOJG6sEyCJrj5_70A "yt" "~Kaliresearchacademy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEMPOi_TJfct_hFt6kxLl1w "yt" "~Kapatiran Mandirigma" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjZxLpuZsnWV-601DGGW57A "yt" "~Karambit.com" "Martial-Arts" + +https://www.youtube.com/feeds/videos.xml?channel_id=UC9k23HZ1xMiqxf4gFfmxr5w "yt" "~Kevin James" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCPy1EH3JrvkLIsEP0BoI43g "yt" "~Keymuncher359" "CoolSites" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6vImVkvofpMUOlYt6LiRXA "yt" "~Keystone Science" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCOBF6hISOsbmOHUSgP6Uw3A "yt" "~Kifighting" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCDUDDmslypVXYoUsZafHSUQ "yt" "~Kingscrusher" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCDaSNu2fM3JL4VdlSwcFtOw "yt" "~Knight Jiu-Jitsu" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMD_k2IDOQpGU4D8OMyHXVQ "yt" "~Krav Maga Training" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5bjJ5x0i_XRGTMHF2IoL8w "yt" "~Learn Arabic with ArabicPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCUSDi1a8z_zh9BKrg8VMNGA "yt" "~Learn Cantonese with CantoneseClass101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEul3aIysbBBqaRaVDFKUrg "yt" "~Learn Filipino with FilipinoPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHk14TRSD33vAyx5xKzpcnw "yt" "~Learn French with FrenchPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHwWXmReTxNWPaGbgfYeQog "yt" "~Learn Hebrew with HebrewPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCb5faEH1hEiLaT_aGMBWeBg "yt" "~Learn Italian with ItalianPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UC0ox9NuTHYeRys63yZpBFuA "yt" "~Learn Japanese with JapanesePod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCydVvh3Wg4VPvllLHFoe5_A "yt" "~Learn Spanish with SpanishPod101.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpcJNrQyW3Ge7w9-dmijW9Q "yt" "~LearnR" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCa4qsD66-fuquztQlxQ5dvQ "yt" "~LegendaryStrength" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLhq5RaKdIFk-8QZxTPiMYQ "yt" "~LendermanAcademy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UClcE-kVhqyiHCcjYwcpfj9w "yt" "~LiveOverflow" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCSA_l2D2hT33g8-wNZ-fsog "yt" "~LonelysDen" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvMDrhQYfaCJaPeb3YaTw1A "yt" "~Lonman07" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3x3BLXar0WFVALCsE6cJWA "yt" "~Luke Holloway TV:JapanLife 101" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "yt" "~LukeSmith" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCiFimYoJIZ4d9GqKA7lktyA "yt" "~Manonuda" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCGmJnz5Dtl1VXJpsrfJfzjQ "yt" "~Mark Anastacio" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzUV5283-l5c0oKRtyenj6Q "yt" "~Mark Dice" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzY20er7WYwW0is7Yibj5IA "yt" "~Mark Reifkind" +https://www.youtube.com/feeds/videos.xml?channel_id=UCH2atzNEmMCGpLfw_jPTMyA "yt" "~MartialArtsTV" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCdW0cXlK4Jqx_Ma3fvgRvEQ "yt" "~Martial Art World TV" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6rOxj6-GtQ6nvFIoW4bZzA "yt" "~Martialphilosophytv" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCAAuJFP7W5stY4csZTY6c1g "yt" "~Maul565" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcqMU3jk2FsR1Te_DZPkGsg "yt" "~McLeod Academy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCbTDXDBHApa_cvcOx86yJOA "yt" "~MCQ Bushcraft & Wilderness Life" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCtz1LA2_nsBXDNS7bdWrL7w "yt" "~Mind Math" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCUHW94eEFW7hkUMVaZz4eDg "yt" "~MinutePhysics" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpdsZ1n09mwrbUGmU7lqnqA "yt" "~MinuteVimTricks" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEBb1b_L6zDS3xTUrIALZOw "yt" "~MIT OpenCourseWare" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCiJmmmOt456AM8cZPjU-gPA "yt" "~Mix Sports Martial Arts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRy4KQQjvwJY7ca8Ho1nnlw "yt" "~MKG Madrid" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWwdTE2yvEbi6oBp9JiVhzg "yt" "~MKG Martial Arts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCriRR_CzOny-akXyk1R-oDQ "yt" "~NapoleonWils0n" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLA_DiR1FfKNvjuUpBHmylQ "yt" "~NASA" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCryGec9PdUCLjpJW2mgCuLw "yt" "~NASA Jet Propulsion Laboratory" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCbB-5jeWvw5cfD14q7Vz48w "yt" "~Naturally 7" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCTAgbu2l6_rBKdbTvEodEDw "yt" "~Nerdist" "Entertainment" +https://www.youtube.com/feeds/videos.xml?user=NewOnNetflix "yt" "~NewOnNetflix" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCM_f7DAr6zzIHHYggsq8CrA "yt" "~Nick Shabazz" "CoolSites" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "yt" "~Nixcast" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgjfd_bGYGpo_GHPCG2DvPw "yt" "~Nudda M.A.X.Training" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjzSBCC2yv7dZmD5dQxV2ug "yt" "~OfficialBarstarzz" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCocH_IYywvEKT8HZw_BHOtw "yt" "~Official RAWTRICKS" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzmN6x2tl-OaQPvUwesoh4w "yt" "~Osvaldo Lugones" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCZ6YQ4ZBs0fbeNPHl16YyFw "yt" "~Oxford Oratory" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLFCH9EFBE3A-Ll7d79qkEQ "yt" "~Padre Pellegrino" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEQ4dwW-osHeur-MMNakalg "yt" "~Palm" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF_Yjle5DDuO99nd0GVr-6g "yt" "~PalmPreExpert" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHNpzY3CtHNd5rDtEhdNKIg "yt" "~PalmPreForumDotOrg" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCNtGXxua3VLjT08B5gS5qzA "yt" "~PANANTUKAN" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4rnzGLwsvy2UDnKi2-V-OQ "yt" "~Paracord guild" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxIvwIXi5uty__oLSTTGKlg "yt" "~Paracordist Creations LLC" "Survival"" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpn0mmozat5FiZEXGuv0n-g "yt" "~ParacordKnots" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYuSBw2gGnIcr2lBcJzCZbw "yt" "~Pat O'Malley" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWzifzT03gicvPKve7QrqSg "yt" "~PatrickCoffin.media" "RC" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCFe6jenM1Bc54qtBsIJGRZQ "yt" "~PatrickJMT" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1YmVt5pLItgfrkIZB8rUNg "yt" "~Paul Clark" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLPOwny2pJUP1wG6banV8qg "yt" "~Pekiti" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHg1d71NTtsDva-j9kDm_eQ "yt" "~Pencak Silat Pertempuran" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaf4w3Dcmv3zABsbtpJtv2g "yt" "~penguinchess" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCfpgdDuIPVdS3hI8KWQA-UA "yt" "~Phatmass" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCeXBPQjL79kP-eNGs0DNfMA "yt" "~PhilippineCombatArts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCs7NOnn9gvP45eB01laJmGw "yt" "~PIOMA" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCM91JfbMXvtwKYNQAVl0YuQ "yt" "~Plasma Physics and Applications" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCT8M8X2QuwCWWznd8vm8x2w "yt" "~Population Research Institute" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCZWlSUNDvCCS1hBiXV0zKcA "yt" "~PragerU" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCFiTU7DqmXe6dEcMwbxkgxg "yt" "~Precentraldotnet" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4PwJo76WpTOk-3N8dazt1A "yt" "~Precision Striking" "Martial-Arts" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzTEi-z8TbFcNCob6djiRuw "yt" "~Prelatura della Santa Croce e Opus Dei" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCCvuh43ymxT6TLyLqVCn3Ig "yt" "~PREPAREDMIND101" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCXCA0fPu6uPjWv9p4uUrpEQ "yt" "~Pythoncursestutorial" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCN8sIZKMVmDmBhhzSrK9IKA "yt" "~RawSecurityTraining" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqsS8nd3Exe6ZBUiCDE2Lvw "yt" "~Ray Floro" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8TosB4kLeZBlx6zwIkD8zw "yt" "~Ray Mears" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrG7dNkeGaDqcxCJ2LvkAMA "yt" "~RCI" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCasZ3-nwiflychAAJymKEHA "yt" "~RealMartialChannel" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCManGNs8aKLxVmgNZY45n2g "yt" "~Rener Gracie" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCbgdypwXSo0GzWSVTaiMPJg "yt" "~Return To Tradition" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9xtEJRt8oKFtcJc2BkPrGg "yt" "~Rick Tucci" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3mSheNgyaxRKsbmuYHBMRQ "yt" "~Rick Young’s Blackbelt Academy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCDsO-0Yo5zpJk575nKXgMVA "yt" "~RocketJump" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCwq2U0M74JVfgqh9i7tYZ_w "yt" "~RocketJump 2" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCT2eeCj5VxJmXo1uf33RJjA "yt" "~RolandDeschain79" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxshhzR907v2w6DjICyAgLQ "yt" "~ROME REPORTS" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCidp_wzA3GcfKJcXvHnpyxg "yt" "~Ron Balicki" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1xZYX22a8TX_giXSBIOkIw "yt" "~Rosarymaking" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCy1-bB7ik-p2_P7uqv9E3hA "yt" "~Ross Enamait" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCs0FLNYAiXtQfE4frLKqa3g "yt" "~RRKali" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3mSheNgyaxRKsbmuYHBMRQ "yt" "~Ryaedinburgh" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCun-c6FT4k8OrH_fnKpYxZw "yt" "~Saint Benedict Press" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCm8twkrmFABZb2-qLxTmxmA "yt" "~Sakan Lam" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCO7B7CDbB_SxJ--20wfAH8Q "yt" "~SAMI Combat Systems" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCmKwG-MLWydesnshoVDxmrw "yt" "~Sanatan Shastarvidiya" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC2X0s6-0luc_Egd01fZX2Tw "yt" "~SankeyMagic" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCd-9AwhecNYlpvK8vhpHkHA "yt" "~Satria Arts" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcZ7NE9_MDt0aRymoswGtcA "yt" "~Sayoc NorCal" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRd9JHiQvqwT8O4d0QGI9jQ "yt" "~Scam Nation" "Cards" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCt14YOvYhd5FCGCwcjhrOdA "yt" "~scholagladiatoria" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCKIPOflZbfGRM8-IehI775w "yt" "~School of Calisthenics" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWseT8S7GGtjVMDOiscU4CQ "yt" "~SchoolOfCardistry" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCQlxetSlMSDoZoEOG0M9G4g "yt" "~STFC" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHO1XcwkJmTS0Hb1NkBks9A "yt" "~Scott Adkins" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRb1HN6TDJRSpr3_5FyaflA "yt" "~Scott Hahn - Topic" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9UW8FZiyU-kJs3W0RQD2Jg "yt" "~Scott Shields" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC-TcqqQ9SEOE-qxUFwobCGg "yt" "~SelfProtection4Women" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCTrteRpqJIf2hxCaWh5z1vg "yt" "~SelfTaughtGeek" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzYMTUy7uWCfaoBX0tPJE5A "yt" "~SensiblePrepper" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3x3gDTqUYy_bFZWS-U_mZQ "yt" "~Sensus Fidelium" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCfzlCWGWYyIQ0aLC5w48gBQ "yt" "~Sentdex" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCBJeMCIeLQos7wacox4hmLQ "yt" "~Serie A" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMfgiV4aXsz2FB-iZLa9uZA "yt" "~SerradaEscrima" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCW6xlqxSY3gGur4PkGPEUeA "yt" "~Seytonic" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCXrqErU_TjqiHAHJkzITAvg "yt" "~Shredded Sports Science" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX8xfjwFZXeU26XVl1ie4Mg "yt" "~Silat Open Circle" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UClV6BGpW603bkCBVhdve0OQ "yt" "~Silat - Topic" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5YhP-H5snGgi6dOE8vj-aA "yt" "~Simon Miller" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCW6TXMZ5Pq6yL6_k5NZ2e0Q "yt" "~Socratica" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHiJbRKFdbBGDcKgmHEGVsQ "yt" "~Solamusic" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHHs3a2nW6-4-N_UYxz_9dQ "yt" "~Sphere of Hip-Hop" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UC63O5j9VTgXgEXbL91wDC-A "yt" "~SPUC Pro-Life" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvzOCslblGfhgtCLKmDkn6w "yt" "~Staley Strategies Online Coaching" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5FaqTBy0c1jlRUHKu4SuXQ "yt" "~Starting Strength" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCY3FK4mfGxAO-XpbuSdEAPw "yt" "~Steve Cotter IKFF" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8ajlSZRbV2Kh7LDv2B14TQ "yt" "~steve maxwell" "Trainin" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrG7dNkeGaDqcxCJ2LvkAMA "yt" "~Street Smart Self Protection - RCI" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC26wVFmrwOSyMWwHmBbndhg "yt" "~Strength Project" "Trainin" +https://www.youtube.com/feeds/videos.xml?channel_id=UCV7jQ4M9uUxHy-UF-EUkjJg "yt" "~StrongFirst" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpLH5tDGl_QiRJ1eDUTLFxQ "yt" "~Stuart Tomlinson" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMcv5f67Cbw8aIyGk2n3v0w "yt" "~Swords of Saint Michael" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCNCtWKts-e2hhF-_ojm7zUQ "yt" "~TappBrothers" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWHHkOmykQJCJf0p_mM5VMg "yt" "~Target Focus Training" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCJFp8uSYCjXOMnkUyb3CQ3Q "yt" "~Tasty" "Entertainment" "CoolSites" +https://www.youtube.com/feeds/videos.xml?channel_id=UCeJGHnaPVxYr7z55VF4YmPg "yt" "~Dr Taylor Marshall" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCogBqICOpcsgZ8ZZ2C7f47w "yt" "~TeamZERO Official Channel" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCb7w5aTnt7YeXBcVCY0mgFw "yt" "~tecmath" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCFeWet5zDVvo4wMNfCafNmA "yt" "~The Alfa Nut" "Auto" +https://www.youtube.com/feeds/videos.xml?channel_id=UCIDBJWq7sZg2yDCnb-nLwLA "yt" "~TheBlackBeltNet" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCTC33rNY6d6kmgY4U5gBQzw "yt" "~TheBoxingHistory" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaeO5vkdj5xOQHp4UmIN6dw "yt" "~The Daily Wire" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCe87sEM3AUxAyhl5RhCpkcA "yt" "~The Fatima Center" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjr2bPAyPV7t35MvcgT3W8Q "yt" "~The Hated One" "Infosec" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCJbPGzawDH1njbqV-D5HqKw "yt" "~TheNewBoston" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaYw_yJ_YLPEv6zR2c7hgHA "yt" "~The Officer Tatum" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCFAUyAsydT57gwoMbeLBsNA "yt" "~The Prepared Mind" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8ENHE5xdFSwx71u3fDH5Xw "yt" "~ThePrimeagen" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaYPEP4en3RHlvC5r34YR2g "yt" "~TheRemnantvideo" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCOuKyYspez6cCbYP26tdd6g "yt" "~The Ultimate Knife" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF6zi1Q3oUknWkAD_LcRVjw "yt" "~TheUrbanPrepper" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCe02lGcO-ahAURWuxAJnjdA "yt" "~TimCast" "SocialCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCu3jDGYr-BHurx6mNFGto_A "yt" "~Timothy Gordon" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC7ZW8hCf-1JGbeVXh2Ytq7A "yt" "~Tim Waid" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCuyBR5FzoufZvDhqbrVVMWA "yt" "~Transition CRT" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCENc2cQMhmEstKicG_xeY0w "yt" "~Troy Anderson" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4sqXk6K2gE0V74ejjma2Lg "yt" "~TuhonBillMcg" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCeTgCTiLcZzFbxiouBEhVtA "yt" "~Turbulence Training" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvA_wgsX6eFAOXI8Rbg_WiQ "yt" "~TutoriaLinux" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCwbsWIWfcOL2FiUZ2hKNJHQ "yt" "~UC Berkeley" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvgfXK4nTYKudb0rFR6noLA "yt" "~UFC - Ultimate Fighting Championship" "Box-MMA" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8Vn4ZtxZKVlACHj7GTQ8aA "yt" "~UK Preppers Guide" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9iG0cCwPrKVGPcaG_K5WHw "yt" "~Ultimate Handyman" "CoolSites" +https://www.youtube.com/feeds/videos.xml?channel_id=UCSrW8lTxazF2DfV82fNFlqA "yt" "~Ultimate Sandbag" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvBrvjwF1Rn6RtjAQtnQMRQ "yt" "~Ultimate Survival Tips" "Survival" +https://www.youtube.com/feeds/videos.xml?channel_UClNSRsYQKCn0QqCa219Cqhg "yt" "~University Of Hertfordshire" "UoH" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCtfZTdRCfEoRYRqzBUur3lA "yt" "~Urban Combatives" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkXCbro4ZdBnZLVmgK5jBkQ "yt" "~Urban Silat" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqqN2e5-zgkQhHOs-ailqBQ "yt" "~vaticancatholic.com" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC7E-LYc1wivk33iyt5bR5zQ "yt" "~Vatican News" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UCa42AEc295oXiSR8qnxR9nw "yt" "~Vericast Network" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC0zNoCMMiPEAst0JrwUht0w "yt" "~Vickers Tactical" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCSUMyPPmunaDKk0YHxCK-cw "yt" "~Viewster" "Entertainment" "Mvs" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6qDqV0L4jayUh-KEWfJ1qA "yt" "~VimChi" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1B0LNO3Tk0kofJ4wCbVNvw "yt" "~Virgin Most Powerful Radio" "RC" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9ZKDGCc5R67fVvLFSv-OLA "yt" "~Warrior Poet Society" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF6AVQwsUjmBpKFxhvdCsGg "yt" "~Warriorseskrima" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6Ns7IV7wblU8aHYrHylGdQ "yt" "~WarriorswayTX" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMoNMHFOMoxjqrjlH2FVTIA "yt" "~WeAllJuggleKnives" "Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCIkt29LZgdl2HAyA15z0smg "yt" "~webOSroundup" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC13HQDS6lPjUqZ0qhqCeZMA "yt" "~WebOSVeer" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCoebwHSTvwalADTJhps0emA "yt" "~Wes Bos" "Comp" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1Pxy4wGoVHboXtolsIKxUg "yt" "~Wing Chun Bing Fa Kung Fu Academy" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCARHLbK7tFQ4Y5iafeigsRQ "yt" "~Wing Chun Kung Fu" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCuDxVS-6MhMTnbZO7IQ5W_w "yt" "~wmpyr" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCutXfzLC5wrV3SInT_tdY0w "yt" "~Wong Fu Productions" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpT-wZlLkYzcQPL0ccXdbzw "yt" "~World of Martial Arts Television" "Martial-Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCUpbgPbDccjoB9PxI-nI7oA "yt" "~Wu Tang Collection" "Mvs" "Entertainment" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5Aaysw0-njB9xH8uvNFvvg "yt" "~Xavior Spade" "Cards" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4EY_qnSeAP1xGsh61eOoJA "yt" "~YaleCourses" "Astro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqfeXppJ0gH-xMteusTeVEg "yt" "~Zach Even - Esh" "Training" + + ---}}} +# ---}}} diff --git a/.config/newsboat/urls.opml b/.config/newsboat/urls.opml new file mode 100755 index 0000000..a343ef7 --- /dev/null +++ b/.config/newsboat/urls.opml @@ -0,0 +1,54 @@ +http://www3.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/cadcbin/meetings/rss-meetings.py +http://feeds.bbci.co.uk/news/world/rss.xml +http://feeds.bbci.co.uk/news/science_and_environment/rss.xml +http://heasarc.gsfc.nasa.gov/docs/rss/heasarc.xml +http://feeds.sciencedaily.com/sciencedaily/top_news?format=xml +http://feeds.sciencedaily.com/sciencedaily/space_time +http://feeds.sciencedaily.com/sciencedaily/space_time/solar_flare?format=xml +http://www.spacedaily.com/spacedaily.xml +http://acme.com/jef/apod/rss.xml +http://www.nasa.gov/rss/dyn/breaking_news.rss +http://feeds.newscientist.com/space +http://astronomynow.com/astronow.xml +http://astrobites.org/feed/ +http://hak5.org/feed +http://feeds.gawker.com/lifehacker/vip +http://feeds.feedburner.com/zenit/english +http://ewtn.com/rss/RSS_headlines.xml +http://opusdei.us/rss/rss32.xml +http://bibletidbits.blogspot.com/feeds/posts/default +http://universalis.com/Europe.England.Westminster/atomweek.xml +http://www.feedkiller.com/files/rss.php?id=28771 +http://black-hat-sec.org/index.php?PHPSESSID=734d820c292ad39dced590f6173f0aef&type=rss;action=.xml +http://feeds.feedburner.com/Wwwinfosecpodcastcom +http://www.pythonforbeginners.com/feed/ +http://www.n1tr0g3n.com/?feed=rss2 +https://hackthistutorials.wordpress.com/feed/ +http://blog.h3xstream.com/feeds/posts/default?alt=rss +http://www.blackmoreops.com/feed/ +http://zer0byte.com/feed/ +http://www.top-hat-sec.com/1/feed +http://www.toolswatch.org/feed/ +http://feeds.feedburner.com/threattracksecurity +http://thehackerblog.com/feed/ +http://feeds.feedburner.com/TheGeekStuff +http://taosecurity.blogspot.com/feeds/posts/default?alt=rss +http://www.darkoperator.com/blog?format=RSS +http://feeds.feedburner.com/SecurityTube +https://blog.pentestify.com/feed/ +http://pentestgeek.com/feed +https://pentestlab.wordpress.com/feed/ +http://www.r00tsec.com/feeds/posts/default +http://hacking-tutorial.com/feed +http://feeds.feedburner.com/hacking-tutorials +https://www.ethicalhacker.net/feed +http://digi.ninja/rss.xml +http://feeds.feedburner.com/darknethackers +http://www.darkreading.com/rss_simple.asp +http://aircrack-ng.blogspot.com/feeds/posts/default?alt=rss +http://2600.com/rss.xml +http://0xdabbad00.com/feed.xml +http://us2.campaign-archive1.com/feed?u=e2e180baf855ac797ef407fc7&id=9e26887fc5 +https://community.rapid7.com/community/metasploit/blog/feeds/posts +http://feeds.feedburner.com/IrongeeksSecuritySite +http://threatpost.com/feed/ diff --git a/.config/newsboat/urls.orig b/.config/newsboat/urls.orig new file mode 100755 index 0000000..ff5295e --- /dev/null +++ b/.config/newsboat/urls.orig @@ -0,0 +1,296 @@ +# ---------------------------- Starred Articles / Flagged Articles ---{{{ +# Usage: go to an article, press ctrl+e, press s, press enter. It will now +# show up in your starred articles query feed. +# To cancel - press Escape. +"query:Starred Articles:flags # \"s\"" + +# +# ---}}} +# ------------------ Tag Queries ---{{{ +"query:Youtube:tags =~ \"yt\"" +"query:Astro:tags =~ \"Astro\"" +"query:Infosec:tags =~ \"Infosec\"" +"query:RC:tags =~ \"RC\"" +"query:Comp:tags =~ \"Comp\"" +"query:Python:tags =~ \"^Python\"" +"query:MA:tags =~ \"Martial-Arts\"" +"query:Box-MMA:tags =~ \"Box-MMA\"" +"query:Cards:tags =~ \"Cards\"" +"query:Training:tags =~ \"Training\"" +"query:Survival:tags =~ \"Survival\"" +"query:trr:tags =~ \"trr\"" +"query:Mvs:tags =~ \"Mvs\"" +"query:CoolSites:tags =~ \"Cool Sites\"" +"query:Entertainment:tags =~ \"Entertainment\"" +"query:SocialCommentary:tags =~ \"SocialCommentary\"" +# ---}}} +#---------------------- Astro ---{{{ +---------------------- Astro ---{{{ +http://www3.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/cadcbin/meetings/rss-meetings.py "Astro" +http://arxiv.org/rss/astro-ph "Astro" +http://heasarc.gsfc.nasa.gov/docs/rss/heasarc.xml "Astro" +#http://feeds.sciencedaily.com/sciencedaily/top_news?format=xml "Astro" +#http://feeds.sciencedaily.com/sciencedaily/space_time "Astro" +#http://feeds.sciencedaily.com/sciencedaily/space_time/solar_flare?format=xml "Astro" +#http://www.spacedaily.com/spacedaily.xml "Astro" +http://acme.com/jef/apod/rss.xml "Astro" +http://www.nasa.gov/rss/dyn/breaking_news.rss "Astro" +http://feeds.newscientist.com/space "Astro" +http://astronomynow.com/astronow.xml "Astro" +http://astrobites.org/feed/ "Astro" + ---}}} +# ---}}} +#--------------------- Python ---{{{ +--------------------- Python ---{{{ +https://pythonbytes.fm/episodes/rss "Python" +https://talkpython.fm/episodes/rss "Python" +http://planet.python.org/rss10.xml "Python" +#http://www.n1tr0g3n.com/3/feed "Python" +#http://thelivingpearl.com/feed/ "Python" + ---}}} +# ---}}} +#--------------------- Linux ---{{{ +--------------------- Linux ---{{{ +https://lukesmith.xyz/rss.xml "Cool Sites" "Linux" +http://blog.sanctum.geek.nz/feed/ "Linux" +#http://feeds.feedburner.com/TheGeekStuff "Infosec" +http://nullr0ute.com/feed/ "Linux" +http://www.reddit.com/r/unixporn/.rss "Linux" +#http://dedoimedo.com/rss_feed.xml "Linux" +#https://bbs.archlinux.org/extern.php?action=feed&tid=210621&type=atom "Linux" +https://www.archlinux.org/feeds/news/ "Linux" "~ArchLinux News Feed" + ---}}} +# ---}}} +#--------------------- Infosec ---{{{ +--------------------- Infosec ---{{{ +https://hak5.org/feed "Infosec" +https://hak5.org/category/episodes/metasploit-minute/feed "Infosec" +https://www.kali.org/feed/ "Infosec" +#http://samiux.blogspot.com/feeds/posts/default "Infosec" +#http://www.blackmoreops.com/feed/ "Infosec" +#http://www.infosecnews.org/feed/ "Infosec" +#http://taosecurity.blogspot.com/feeds/posts/default?alt=rss "Infosec" +#http://feeds.feedburner.com/SecurityTube "Infosec" +#http://pentestgeek.com/feed "Infosec" +#http://hacking-tutorial.com/feed "Infosec" +#https://www.ethicalhacker.net/feed "Infosec" +#http://www.darkreading.com/rss_simple.asp "Infosec" +#http://2600.com/rss.xml "Infosec" +#https://www.hackerschool.com/blog.rss "Infosec" +#http://hackwithkalilinux.blogspot.com/feeds/posts/default "Infosec" +#http://www.toolswatch.org/feed/ "Infosec" +#http://penetrationtestingwithkalilinux.blogspot.com/feeds/posts/default?alt=rss "Infosec" +#http://1337day.com/rss "Infosec" +http://thehackernews.com/feeds/posts/default "Infosec" +http://null-byte.wonderhowto.com/rss.xml "Infosec" + ---}}} +# ---}}} +#--------------------- CVE Updates ---{{{ +--------------------- CVE Updates ---{{{ +http://www.exploit-db.com/rss.php "CVE Updates" +http://www.securityfocus.com/rss/vulnerabilities.xml "CVE Updates" + ---}}} +# ---}}} +#--------------------- Android ---{{{ +--------------------- Android ---{{{ +http://www.xda-developers.com/feed/ "Android" + ---}}} +# ---}}} +##--------------------- World News ---{{{ +#--------------------- World News ---{{{ +#http://feeds.bbci.co.uk/news/rss.xml "World News" +#http://feeds.bbci.co.uk/news/world/rss.xml "World News" +#http://feeds.bbci.co.uk/news/science_and_environment/rss.xml "World News" +# ---}}} +## ---}}} +#--------------------- Cool Sites ---{{{ +--------------------- Cool Sites ---{{{ +#http://www.cantoneseclass101.com/wp/wp-feed-audio-video.php "Cool Sites" +http://www.reddit.com/r/opendirectories/.rss "Cool Sites" +http://www.reddit.com/r/fullmoviesonyoutube/.rss "Cool Sites" +http://nerdist.libsyn.com/rss "Cool Sites" +http://feeds.feedburner.com/hardestkitontheplanet "Cool Sites" + ---}}} +# ---}}} +#--------------------- RC ---{{{ +--------------------- RC ---{{{ +https://www.churchmilitant.com/rss "RC" +https://www.churchmilitant.com/rss/the_vortex "RC" +https://www.churchmilitant.com/rss/headlines "RC" +https://churchmilitant.com/rss/daily_download "RC" +#http://feeds.feedburner.com/zenit/english "RC" +#http://ewtn.com/rss/RSS_headlines.xml "RC" +#http://opusdei.us/rss/rss32.xml "RC" +#http://bibletidbits.blogspot.com/feeds/posts/default "RC" +#http://universalis.com/Europe.England.Westminster/atomweek.xml "RC" +http://www.ewtn.com/rss/RSS_daily_av.xml "RC" +http://patrickcoffin.libsyn.com/rss "RC" +#http://feeds.feedburner.com/SundayBibleReflectionsByDrScottHahn "RC" +#http://www.loyalbooks.com/book/the-innocence-of-father-brown-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-man-who-knew-too-much-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-wisdom-of-father-brown-by-g-k-chesterton/feed "RC" +#http://www.loyalbooks.com/book/the-club-of-queer-trades-by-g-k-chesterton/feed "RC" + ---}}} +# ---}}} +#--------------------- Torrents ---{{{ +--------------------- Torrents ---{{{ +https://eztv.ag/ezrss.xml "trr" "~EZTV" +https://yts.am/rss "trr" "~Yify" +https://limetorrents.unblocked.mx/rss/20/ "trr" "~Limetorrents-TV" +https://limetorrents.unblocked.mx/rss/16/ "trr" "~Limetorrents-Mvs" +https://kickass.unblocked.mx/movies/?rss=1 "trr" "~Kickass-Mvs" +http://feeds.feedburner.com/Torrentfreak "trr" "~Torrentfreak" +https://mirror.animetosho.org/feed/rss2?only_tor=1 "trr" "~animetosho" + ---}}} +# ---}}} +#--------------------- Videos ---{{{ +--------------------- Videos ---{{{ + +https://www.youtube.com/feeds/videos.xml?channel_id=UC2nobViRAiSUZUi1rspEw5A "yt" "Martial-Arts" "~11Mester - Kali / Silat Budapest" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9yI7r9JgCRl82nkZ-RrvKg "yt" "Martial-Arts" "~413Group" +https://www.youtube.com/feeds/videos.xml?channel_id=UCIuScmttXWzLoXqs8kU3vWA "yt" "Cards" "~52Kards" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqft2ae5rHmfwxdXZ_NBihQ "yt" "Martial-Arts" "~AlanLau" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRFHN6P57B4MqntXD_iIPhQ "yt" "Training" "~Al Kavadlo" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1KbedtKa3d5dleFR6OjQMg "yt" "Training" "~Alpha M" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4pBD8lfNzOmAIK9vdaPEgw "yt" "Cards" "~A Million Card Tricks" +https://www.youtube.com/feeds/videos.xml?channel_id=UCBHn_qVrfMmPNhqiqQyrQLQ "yt" "Mvs" "~Anime" +https://www.youtube.com/feeds/videos.xml?channel_id=UCiIVDn5bUGZUJc_15qJPjUw "yt" "Martial-Arts" "~Aperture Fight Focused" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkRMqL3hLrIYhxNCac4vR3w "yt" "Training" "~Art of Manliness" +https://www.youtube.com/feeds/videos.xml?channel_id=UCe0TLA0EsQbE-MjuHXevj2A "yt" "Training" "~ATHLEAN-X™" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqFyobKkIGJY92hgs0tqkGA "yt" "Survival" "~AverageIowaGuy" +https://www.youtube.com/feeds/videos.xml?channel_id=UCNXj_OehKPmlKIVtWd0ClIA "yt" "Training" "~BeastSkills" +https://www.youtube.com/feeds/videos.xml?channel_id=UCnQC_G5Xsjhp9fEJKuIcrSw "yt" "SocialCommentary" "~Ben Shapiro" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6OlxaTqpDGDXK2DkAnNiLQ "yt" "Martial-Arts" "~Bladesociety" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4YOBmzRey4X3lLCjhw3UaQ "yt" "Survival" "~BlackScoutSurvival" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgHtBrLKxgFGvnqYb8hh-MQ "yt" "Martial-Arts" "~BlackEagleSociety" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrTKmz9izXiHU7XCnXcLnqQ "yt" "Martial-Arts" "~bob breen academy" +https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "yt" "Comp" "~Brodie Robertson" +https://www.youtube.com/feeds/videos.xml?channel_id=UChVDJnxw6AVoNRpwHcAU67g "yt" "Martial-Arts" "~Budo Brothers" +https://www.youtube.com/feeds/videos.xml?channel_id=UCACJ9D5MltM8YidsnBgRpag "yt" "Martial-Arts" "~BUDO INTERNATIONAL (OFFICIAL)" +https://www.youtube.com/feeds/videos.xml?channel_id=UCZIIRX8rkNjVpP-oLMHpeDw "yt" "Training" "~Calisthenicmovement" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrPUg54jUy1T_wII9jgdRbg "yt" "Cards" "~Chris Ramsay" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX17igkZ9JhU64JoTBVSWeQ "yt" "RC" "~Church Militant" +https://www.youtube.com/feeds/videos.xml?channel_id=UCI1Xwp3-PeiJv61zUIwFXoA "yt" "Martial-Arts" "~Claudio Alfarano" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjf26rdUOPr3cJIWiQedwzg "yt" "Martial-Arts" "~CombatKali Manila" +https://www.youtube.com/feeds/videos.xml?channel_id=UC-oyoA8N-JvAzjgDCY0YMuw "yt" "Martial-Arts" "~ClassicKungFuMovies1" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "yt" "Cards" "~Conner McDaniel" +https://www.youtube.com/feeds/videos.xml?channel_id=UCCezIgC97PvUuR4_gbFUs5g "yt" "Comp" "~Corey Schafer" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvSmJ60pbqQqqCDojWTspfw "yt" "Survival" "~Cutlerylover" +https://www.youtube.com/feeds/videos.xml?channel_id=UCB99aK4f2WaH96joccxLvSQ "yt" "Cards" "~Daniel Madison" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcjhlahNEOa0rMjDAS5CrDQ "yt" "Martial-Arts" "~Dan Inosanto - Topic" +https://www.youtube.com/feeds/videos.xml?channel_id=UC79Gv3mYp6zKiSwYemEik9A "yt" "Comp" "~DataCamp" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzL_0nIe8B4-7ShhVPfJkgw "yt" "Comp" "~Data Science Dojo" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEz0n9HRm1jM-oW9kHWwMPg "yt" "Martial-Arts" "~David Bertrand" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4NDMKhSwnP5HhIYWmRVjCA "yt" "Martial-Arts" "~Difesa Personale" +https://www.youtube.com/feeds/videos.xml?channel_id=UCba2uIYq75m6SNuK8TtmG9A "yt" "Cards" "~Disturb Reality" +https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "yt" "Comp" "~DistroTube" +https://www.youtube.com/feeds/videos.xml?channel_id=UCKQXQt-TePVi0VBBDfC6A-A "yt" "Martial-Arts" "~Dog Brothers" +https://www.youtube.com/feeds/videos.xml?channel_id=UCj7MB9JURm-vdok53KwDkBA "yt" "Martial-Arts" "~Doug Marcaida" +https://www.youtube.com/feeds/videos.xml?channel_id=UCC-HlfZxhnh1TbHglvLNujg "yt" "Training" "~DragonDoorTV" +https://www.youtube.com/feeds/videos.xml?channel_id=UChKgsPL1MX5z_M33fYtOPKg "yt" "Cards" "~Ellusionist" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxrd1I7wmE2chwpoqD4DSTA "yt" "Martial-Arts" "Entertainment" "~EnterTheDojoShow" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4vCVnylGXwFGwAmYiAhU6Q "yt" "Martial-Arts" "~Eskrimamate" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYxyKkSNCfZUaTTbefc7JIw "yt" "Survival" "~EverydayCommentary" +https://www.youtube.com/feeds/videos.xml?channel_id=UCN5V0JO3jCMHvmMezj1ueyw "yt" "Training" "~Every Damn Day Fitness" +https://www.youtube.com/feeds/videos.xml?channel_id=UCsg_7hCRtGan3LCve-erpmw "yt" "Survival" "~EverydayTacticalVids" +https://www.youtube.com/feeds/videos.xml?channel_id=UCijDos-LUTh9RQvSCMQqN6Q "yt" "RC" "~EWTN" +https://www.youtube.com/feeds/videos.xml?channel_id=UCxC1i0XpORRXITdMQew6esQ "yt" "Martial-Arts" "~Fernando Cruces" +https://www.youtube.com/feeds/videos.xml?channel_id=UCwdVyruxCCqMR4DtPLhtwlg "yt" "Box-MMA" "~Fight Hub TV" +https://www.youtube.com/feeds/videos.xml?channel_id=UCmxZw7N4Jyljr1RbSs4Ymaw "yt" "Box-MMA" "~FightHype.com" +https://www.youtube.com/feeds/videos.xml?channel_id=UC-1eZ9zR6PhB2PMbmh1KT-Q "yt" "Martial-Arts" "~Fight SCIENCE" +https://www.youtube.com/feeds/videos.xml?user=FilipinoPod101 "yt" "~FilipinoPod101" +https://www.youtube.com/feeds/videos.xml?channel_id=UCoh-JKvnZlLh22F9sfe6TXA "yt" "Martial-Arts" "~Filipino Martial Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UChaj3IgCH7QZsdmT1aTVmzA "yt" "Martial-Arts" "~FMA Pulse" +https://www.youtube.com/feeds/videos.xml?channel_id=UCM5eTxFBMc6ZDcR348a26jg "yt" "Martial-Arts" "~FRANK151" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkAgTd8YQRSwPqzScsWs7nw "yt" "Martial-Arts" "~Fred Mastro" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYsBtWVTod9Sr6yh33BkOoA "yt" "RC" "~FSSPTraining" +https://www.youtube.com/feeds/videos.xml?channel_id=UCo_0OLNDT9mhlALA-N_c8nw "yt" "Martial-Arts" "~Funker Tactical" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9ULRTHvszrMpy3kDT-KDIQ "yt" "Survival" "~Gideonstactical" +https://www.youtube.com/feeds/videos.xml?channel_id=UC_ruB7qtdk4KufASPRuWhZA "yt" "Training" "~GMB Fitness" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkf4VIqu3Acnfzuk3kRIFwA "yt" "Comp" "~Gotbletu" +https://www.youtube.com/feeds/videos.xml?channel_id=UCXPHFM88IlFn68OmLwtPmZA "yt" "Comp" "~Greg Hurrell" +https://www.youtube.com/feeds/videos.xml?channel_id=UC0ZTPkdxlAKf-V33tqXwi3Q "yt" "Comp" "~HackerSploit" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3s0BtrBJpwNDaflRSoiieQ "yt" "Comp" "~Hak5" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkn86rzw-WPS8aAnMv-AxeA "yt" "Comp" "~HakTip" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWPQB43yGKEum3eW0P9N_nQ "yt" "Box-MMA" "~HBOBoxing" +https://www.youtube.com/feeds/videos.xml?channel_id=UCtbC5DuJ73pQpnqql0A0pRw "yt" "Training" "~InciteFitness" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrpZB529C6CmkkA0WzaBkCQ "yt" "Auto" "~Italia Autos" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX430kXiW2whSzf5BG3hLpQ "yt" "RC" "~Jimmy Akin" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvekcedak49FMc73YYNwNpg "yt" "RC" "~Josemaria Escriva" +https://www.youtube.com/feeds/videos.xml?channel_id=UCnxGkOGNMqQEUMvroOWps6Q "yt" "Entertainment" "~JRE Clips" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgijBKm-I5yUiqfU0ObXksg "yt" "Martial-Arts" "~Kali Majapahit" +https://www.youtube.com/feeds/videos.xml?channel_id=UCcBRZmkOJG6sEyCJrj5_70A "yt" "Martial-Arts" "~kaliresearchacademy" +https://www.youtube.com/feeds/videos.xml?channel_id=UCPy1EH3JrvkLIsEP0BoI43g "yt" "~Keymuncher359" +https://www.youtube.com/feeds/videos.xml?channel_id=UCDaSNu2fM3JL4VdlSwcFtOw "yt" "Martial-Arts" "~Knight Jiu-Jitsu" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpcJNrQyW3Ge7w9-dmijW9Q "yt" "Comp" "~LearnR" +https://www.youtube.com/feeds/videos.xml?channel_id=UClcE-kVhqyiHCcjYwcpfj9w "yt" "Comp" "~LiveOverflow" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvMDrhQYfaCJaPeb3YaTw1A "yt" "Training" "~Lonman07" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3x3BLXar0WFVALCsE6cJWA "yt" "Martial-Arts" "~Luke Holloway TV:JapanLife 101" +https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "yt" "Comp" "~LukeSmith" +https://www.youtube.com/feeds/videos.xml?channel_id=UCzUV5283-l5c0oKRtyenj6Q "yt" "SocialCommentary" "~Mark Dice" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6rOxj6-GtQ6nvFIoW4bZzA "yt" "Martial-Arts" "~Martialphilosophytv" +https://www.youtube.com/feeds/videos.xml?channel_id=UCAAuJFP7W5stY4csZTY6c1g "yt" "Martial-Arts" "~Maul565" +https://www.youtube.com/feeds/videos.xml?channel_id=UCUHW94eEFW7hkUMVaZz4eDg "yt" "~MinutePhysics" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpdsZ1n09mwrbUGmU7lqnqA "yt" "Comp" "~MinuteVimTricks" +https://www.youtube.com/feeds/videos.xml?channel_id=UCriRR_CzOny-akXyk1R-oDQ "yt" "Comp" "~NapoleonWils0n" +https://www.youtube.com/feeds/videos.xml?channel_id=UCTAgbu2l6_rBKdbTvEodEDw "yt" "Entertainment" "~Nerdist" +https://www.youtube.com/feeds/videos.xml?user=NewOnNetflix "yt" "Entertainment" "~NewOnNetflix" +https://www.youtube.com/feeds/videos.xml?channel_id=UCgREucssIfY9e0Iy3yhse8w "yt" "Comp" "~Nixcast" +https://www.youtube.com/feeds/videos.xml?channel_id=UCjzSBCC2yv7dZmD5dQxV2ug "yt" "Training" "~OfficialBarstarzz" +https://www.youtube.com/feeds/videos.xml?channel_id=UCLFCH9EFBE3A-Ll7d79qkEQ "yt" "RC" "~Padre Pellegrino" +https://www.youtube.com/feeds/videos.xml?channel_id=UCEQ4dwW-osHeur-MMNakalg "yt" "Comp" "~Palm" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF_Yjle5DDuO99nd0GVr-6g "yt" "Comp" "~PalmPreExpert" +https://www.youtube.com/feeds/videos.xml?channel_id=UCYuSBw2gGnIcr2lBcJzCZbw "yt" "Martial-Arts" "~Pat O'Malley" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWzifzT03gicvPKve7QrqSg "yt" "RC" "~PatrickCoffin.media" +https://www.youtube.com/feeds/videos.xml?channel_id=UCHg1d71NTtsDva-j9kDm_eQ "yt" "Martial-Arts" "~Pencak Silat Pertempuran" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4PwJo76WpTOk-3N8dazt1A "yt" "Martial-Arts" "Training" "~Precision Striking" +https://www.youtube.com/feeds/videos.xml?channel_id=UCCvuh43ymxT6TLyLqVCn3Ig "yt" "Survival" "~PREPAREDMIND101" +https://www.youtube.com/feeds/videos.xml?channel_id=UCXCA0fPu6uPjWv9p4uUrpEQ "yt" "Comp" "~Pythoncursestutorial" +https://www.youtube.com/feeds/videos.xml?channel_id=UCrG7dNkeGaDqcxCJ2LvkAMA "yt" "Martial-Arts" "~RCI" +https://www.youtube.com/feeds/videos.xml?channel_id=UCidp_wzA3GcfKJcXvHnpyxg "yt" "Martial-Arts" "~Ron Balicki" +https://www.youtube.com/feeds/videos.xml?channel_id=UCy1-bB7ik-p2_P7uqv9E3hA "yt" "Martial-Arts" "~Ross Enamait" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3mSheNgyaxRKsbmuYHBMRQ "yt" "Martial-Arts" "~Ryaedinburgh" +https://www.youtube.com/feeds/videos.xml?channel_id=UCd-9AwhecNYlpvK8vhpHkHA "yt" "Martial-Arts" "~Satria Arts" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRd9JHiQvqwT8O4d0QGI9jQ "yt" "Entertainment" "~Scam Nation" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5YhP-H5snGgi6dOE8vj-aA "yt" "Training" "~Simon Miller" +https://www.youtube.com/feeds/videos.xml?channel_id=UCKIPOflZbfGRM8-IehI775w "yt" "Training" "~School of Calisthenics" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWseT8S7GGtjVMDOiscU4CQ "yt" "Cards" "~SchoolOfCardistry" +https://www.youtube.com/feeds/videos.xml?channel_id=UCRb1HN6TDJRSpr3_5FyaflA "yt" "RC" "~Scott Hahn - Topic" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9UW8FZiyU-kJs3W0RQD2Jg "yt" "Martial-Arts" "~Scott Shields" +https://www.youtube.com/feeds/videos.xml?channel_id=UC3x3gDTqUYy_bFZWS-U_mZQ "yt" "RC" "~Sensus Fidelium" +https://www.youtube.com/feeds/videos.xml?channel_id=UCMfgiV4aXsz2FB-iZLa9uZA "yt" "Martial-Arts" "~SerradaEscrima" +https://www.youtube.com/feeds/videos.xml?channel_id=UCX8xfjwFZXeU26XVl1ie4Mg "yt" "Martial-Arts" "~Silat Open Circle" +https://www.youtube.com/feeds/videos.xml?channel_id=UCW6TXMZ5Pq6yL6_k5NZ2e0Q "yt" "Comp" "~Socratica" +https://www.youtube.com/feeds/videos.xml?channel_id=UC63O5j9VTgXgEXbL91wDC-A "yt" "RC" "~SPUC Pro-Life" +https://www.youtube.com/feeds/videos.xml?channel_id=UCu3jDGYr-BHurx6mNFGto_A "yt" "RC" "~Timothy Gordon" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5FaqTBy0c1jlRUHKu4SuXQ "yt" "Training" "~Starting Strength" +https://www.youtube.com/feeds/videos.xml?channel_id=UCV7jQ4M9uUxHy-UF-EUkjJg "yt" "Training" "~StrongFirst" +https://www.youtube.com/feeds/videos.xml?channel_id=UCWHHkOmykQJCJf0p_mM5VMg "yt" "Martial-Arts" "~Target Focus Training" +https://www.youtube.com/feeds/videos.xml?channel_id=UCNCtWKts-e2hhF-_ojm7zUQ "yt" "Training" "~TappBrothers" +https://www.youtube.com/feeds/videos.xml?user=Taylor0Marshall "yt" "RC" "~Taylor Marshall" +https://www.youtube.com/feeds/videos.xml?channel_id=UCe02lGcO-ahAURWuxAJnjdA "yt" "SocialCommentary" "~TimCast" +https://www.youtube.com/feeds/videos.xml?channel_id=UCFeWet5zDVvo4wMNfCafNmA "yt" "Autos" "~The Alfa Nut" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaeO5vkdj5xOQHp4UmIN6dw "yt" "SocialCommentary" "~The Daily Wire" +https://www.youtube.com/feeds/videos.xml?channel_id=UCJbPGzawDH1njbqV-D5HqKw "yt" "Comp" "~TheNewBoston" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8ENHE5xdFSwx71u3fDH5Xw "yt" "Comp" "~ThePrimeagen" +https://www.youtube.com/feeds/videos.xml?channel_id=UCaYPEP4en3RHlvC5r34YR2g "yt" "RC" "~TheRemnantvideo" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF6zi1Q3oUknWkAD_LcRVjw "yt" "Survival" "~TheUrbanPrepper" +https://www.youtube.com/feeds/videos.xml?channel_id=UCuyBR5FzoufZvDhqbrVVMWA "yt" "Training" "~Transition CRT" +https://www.youtube.com/feeds/videos.xml?channel_id=UC4sqXk6K2gE0V74ejjma2Lg "yt" "Martial-Arts" "~TuhonBillMcg" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvA_wgsX6eFAOXI8Rbg_WiQ "yt" "Comp" "~TutoriaLinux" +https://www.youtube.com/feeds/videos.xml?channel_id=UCvgfXK4nTYKudb0rFR6noLA "yt" "Box-MMA" "~UFC - Ultimate Fighting Championship" +https://www.youtube.com/feeds/videos.xml?channel_id=UC8Vn4ZtxZKVlACHj7GTQ8aA "yt" "Survival" "~UK Preppers Guide" +https://www.youtube.com/feeds/videos.xml?channel_UClNSRsYQKCn0QqCa219Cqhg "yt" "UoH" "~University Of Hertfordshire" +https://www.youtube.com/feeds/videos.xml?channel_id=UCkXCbro4ZdBnZLVmgK5jBkQ "yt" "Martial-Arts" "~Urban Silat" +https://www.youtube.com/feeds/videos.xml?user=ViewsterTV "yt" "~ViewsterTV" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6qDqV0L4jayUh-KEWfJ1qA "yt" "Comp" "~VimChi" +https://www.youtube.com/feeds/videos.xml?channel_id=UC1B0LNO3Tk0kofJ4wCbVNvw "yt" "RC" "~Virgin Most Powerful Radio" +https://www.youtube.com/feeds/videos.xml?channel_id=UCF6AVQwsUjmBpKFxhvdCsGg "yt" "Martial-Arts" "~Warriorseskrima" +https://www.youtube.com/feeds/videos.xml?channel_id=UC9ZKDGCc5R67fVvLFSv-OLA "yt" "Martial-Arts" "~Warrior Poet Society" +https://www.youtube.com/feeds/videos.xml?channel_id=UC6Ns7IV7wblU8aHYrHylGdQ "yt" "Martial-Arts" "~WarriorswayTX" +https://www.youtube.com/feeds/videos.xml?channel_id=UCpT-wZlLkYzcQPL0ccXdbzw "yt" "Martial-Arts" "~World of Martial Arts Television" +https://www.youtube.com/feeds/videos.xml?channel_id=UC5Aaysw0-njB9xH8uvNFvvg "yt" "Cards" "~Xavior Spade" +https://www.youtube.com/feeds/videos.xml?channel_id=UCqfeXppJ0gH-xMteusTeVEg "yt" "Training" "~Zach Even - Esh" +# + ---}}} +# ---}}} diff --git a/.config/nvim/autoload/plug.vim b/.config/nvim/autoload/plug.vim new file mode 100644 index 0000000..c29b9a2 --- /dev/null +++ b/.config/nvim/autoload/plug.vim @@ -0,0 +1,2719 @@ +" vim-plug: Vim plugin manager +" ============================ +" +" Download plug.vim and put it in ~/.vim/autoload +" +" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ +" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +" +" Edit your .vimrc +" +" call plug#begin('~/.vim/plugged') +" +" " Make sure you use single quotes +" +" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align +" Plug 'junegunn/vim-easy-align' +" +" " Any valid git URL is allowed +" Plug 'https://github.com/junegunn/vim-github-dashboard.git' +" +" " Multiple Plug commands can be written in a single line using | separators +" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' +" +" " On-demand loading +" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } +" +" " Using a non-default branch +" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } +" +" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) +" Plug 'fatih/vim-go', { 'tag': '*' } +" +" " Plugin options +" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } +" +" " Plugin outside ~/.vim/plugged with post-update hook +" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +" +" " Unmanaged plugin (manually installed and updated) +" Plug '~/my-prototype-plugin' +" +" " Initialize plugin system +" call plug#end() +" +" Then reload .vimrc and :PlugInstall to install plugins. +" +" Plug options: +" +"| Option | Description | +"| ----------------------- | ------------------------------------------------ | +"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | +"| `rtp` | Subdirectory that contains Vim plugin | +"| `dir` | Custom directory for the plugin | +"| `as` | Use different name for the plugin | +"| `do` | Post-update hook (string or funcref) | +"| `on` | On-demand loading: Commands or `<Plug>`-mappings | +"| `for` | On-demand loading: File types | +"| `frozen` | Do not update unless explicitly specified | +" +" More information: https://github.com/junegunn/vim-plug +" +" +" Copyright (c) 2017 Junegunn Choi +" +" MIT License +" +" 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. + +if exists('g:loaded_plug') + finish +endif +let g:loaded_plug = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let s:plug_src = 'https://github.com/junegunn/vim-plug.git' +let s:plug_tab = get(s:, 'plug_tab', -1) +let s:plug_buf = get(s:, 'plug_buf', -1) +let s:mac_gui = has('gui_macvim') && has('gui_running') +let s:is_win = has('win32') +let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) +let s:vim8 = has('patch-8.0.0039') && exists('*job_start') +if s:is_win && &shellslash + set noshellslash + let s:me = resolve(expand('<sfile>:p')) + set shellslash +else + let s:me = resolve(expand('<sfile>:p')) +endif +let s:base_spec = { 'branch': '', 'frozen': 0 } +let s:TYPE = { +\ 'string': type(''), +\ 'list': type([]), +\ 'dict': type({}), +\ 'funcref': type(function('call')) +\ } +let s:loaded = get(s:, 'loaded', {}) +let s:triggers = get(s:, 'triggers', {}) + +if s:is_win + function! s:plug_call(fn, ...) + let shellslash = &shellslash + try + set noshellslash + return call(a:fn, a:000) + finally + let &shellslash = shellslash + endtry + endfunction +else + function! s:plug_call(fn, ...) + return call(a:fn, a:000) + endfunction +endif + +function! s:plug_getcwd() + return s:plug_call('getcwd') +endfunction + +function! s:plug_fnamemodify(fname, mods) + return s:plug_call('fnamemodify', a:fname, a:mods) +endfunction + +function! s:plug_expand(fmt) + return s:plug_call('expand', a:fmt, 1) +endfunction + +function! s:plug_tempname() + return s:plug_call('tempname') +endfunction + +function! plug#begin(...) + if a:0 > 0 + let s:plug_home_org = a:1 + let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) + elseif exists('g:plug_home') + let home = s:path(g:plug_home) + elseif !empty(&rtp) + let home = s:path(split(&rtp, ',')[0]) . '/plugged' + else + return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') + endif + if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp + return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') + endif + + let g:plug_home = home + let g:plugs = {} + let g:plugs_order = [] + let s:triggers = {} + + call s:define_commands() + return 1 +endfunction + +function! s:define_commands() + command! -nargs=+ -bar Plug call plug#(<args>) + if !executable('git') + return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') + endif + if has('win32') + \ && &shellslash + \ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$') + return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') + endif + if !has('nvim') + \ && (has('win32') || has('win32unix')) + \ && !has('multi_byte') + return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.') + endif + command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) + command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) + command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0) + command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif + command! -nargs=0 -bar PlugStatus call s:status() + command! -nargs=0 -bar PlugDiff call s:diff() + command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>) +endfunction + +function! s:to_a(v) + return type(a:v) == s:TYPE.list ? a:v : [a:v] +endfunction + +function! s:to_s(v) + return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" +endfunction + +function! s:glob(from, pattern) + return s:lines(globpath(a:from, a:pattern)) +endfunction + +function! s:source(from, ...) + let found = 0 + for pattern in a:000 + for vim in s:glob(a:from, pattern) + execute 'source' s:esc(vim) + let found = 1 + endfor + endfor + return found +endfunction + +function! s:assoc(dict, key, val) + let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) +endfunction + +function! s:ask(message, ...) + call inputsave() + echohl WarningMsg + let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) + echohl None + call inputrestore() + echo "\r" + return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 +endfunction + +function! s:ask_no_interrupt(...) + try + return call('s:ask', a:000) + catch + return 0 + endtry +endfunction + +function! s:lazy(plug, opt) + return has_key(a:plug, a:opt) && + \ (empty(s:to_a(a:plug[a:opt])) || + \ !isdirectory(a:plug.dir) || + \ len(s:glob(s:rtp(a:plug), 'plugin')) || + \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) +endfunction + +function! plug#end() + if !exists('g:plugs') + return s:err('plug#end() called without calling plug#begin() first') + endif + + if exists('#PlugLOD') + augroup PlugLOD + autocmd! + augroup END + augroup! PlugLOD + endif + let lod = { 'ft': {}, 'map': {}, 'cmd': {} } + + if exists('g:did_load_filetypes') + filetype off + endif + for name in g:plugs_order + if !has_key(g:plugs, name) + continue + endif + let plug = g:plugs[name] + if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') + let s:loaded[name] = 1 + continue + endif + + if has_key(plug, 'on') + let s:triggers[name] = { 'map': [], 'cmd': [] } + for cmd in s:to_a(plug.on) + if cmd =~? '^<Plug>.\+' + if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) + call s:assoc(lod.map, cmd, name) + endif + call add(s:triggers[name].map, cmd) + elseif cmd =~# '^[A-Z]' + let cmd = substitute(cmd, '!*$', '', '') + if exists(':'.cmd) != 2 + call s:assoc(lod.cmd, cmd, name) + endif + call add(s:triggers[name].cmd, cmd) + else + call s:err('Invalid `on` option: '.cmd. + \ '. Should start with an uppercase letter or `<Plug>`.') + endif + endfor + endif + + if has_key(plug, 'for') + let types = s:to_a(plug.for) + if !empty(types) + augroup filetypedetect + call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') + augroup END + endif + for type in types + call s:assoc(lod.ft, type, name) + endfor + endif + endfor + + for [cmd, names] in items(lod.cmd) + execute printf( + \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', + \ cmd, string(cmd), string(names)) + endfor + + for [map, names] in items(lod.map) + for [mode, map_prefix, key_prefix] in + \ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] + execute printf( + \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>', + \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) + endfor + endfor + + for [ft, names] in items(lod.ft) + augroup PlugLOD + execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)', + \ ft, string(ft), string(names)) + augroup END + endfor + + call s:reorg_rtp() + filetype plugin indent on + if has('vim_starting') + if has('syntax') && !exists('g:syntax_on') + syntax enable + end + else + call s:reload_plugins() + endif +endfunction + +function! s:loaded_names() + return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') +endfunction + +function! s:load_plugin(spec) + call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') +endfunction + +function! s:reload_plugins() + for name in s:loaded_names() + call s:load_plugin(g:plugs[name]) + endfor +endfunction + +function! s:trim(str) + return substitute(a:str, '[\/]\+$', '', '') +endfunction + +function! s:version_requirement(val, min) + for idx in range(0, len(a:min) - 1) + let v = get(a:val, idx, 0) + if v < a:min[idx] | return 0 + elseif v > a:min[idx] | return 1 + endif + endfor + return 1 +endfunction + +function! s:git_version_requirement(...) + if !exists('s:git_version') + let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)') + endif + return s:version_requirement(s:git_version, a:000) +endfunction + +function! s:progress_opt(base) + return a:base && !s:is_win && + \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' +endfunction + +function! s:rtp(spec) + return s:path(a:spec.dir . get(a:spec, 'rtp', '')) +endfunction + +if s:is_win + function! s:path(path) + return s:trim(substitute(a:path, '/', '\', 'g')) + endfunction + + function! s:dirpath(path) + return s:path(a:path) . '\' + endfunction + + function! s:is_local_plug(repo) + return a:repo =~? '^[a-z]:\|^[%~]' + endfunction + + " Copied from fzf + function! s:wrap_cmds(cmds) + let cmds = [ + \ '@echo off', + \ 'setlocal enabledelayedexpansion'] + \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) + \ + ['endlocal'] + if has('iconv') + if !exists('s:codepage') + let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0) + endif + return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage)) + endif + return map(cmds, 'v:val."\r"') + endfunction + + function! s:batchfile(cmd) + let batchfile = s:plug_tempname().'.bat' + call writefile(s:wrap_cmds(a:cmd), batchfile) + let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) + if &shell =~# 'powershell\(\.exe\)\?$' + let cmd = '& ' . cmd + endif + return [batchfile, cmd] + endfunction +else + function! s:path(path) + return s:trim(a:path) + endfunction + + function! s:dirpath(path) + return substitute(a:path, '[/\\]*$', '/', '') + endfunction + + function! s:is_local_plug(repo) + return a:repo[0] =~ '[/$~]' + endfunction +endif + +function! s:err(msg) + echohl ErrorMsg + echom '[vim-plug] '.a:msg + echohl None +endfunction + +function! s:warn(cmd, msg) + echohl WarningMsg + execute a:cmd 'a:msg' + echohl None +endfunction + +function! s:esc(path) + return escape(a:path, ' ') +endfunction + +function! s:escrtp(path) + return escape(a:path, ' ,') +endfunction + +function! s:remove_rtp() + for name in s:loaded_names() + let rtp = s:rtp(g:plugs[name]) + execute 'set rtp-='.s:escrtp(rtp) + let after = globpath(rtp, 'after') + if isdirectory(after) + execute 'set rtp-='.s:escrtp(after) + endif + endfor +endfunction + +function! s:reorg_rtp() + if !empty(s:first_rtp) + execute 'set rtp-='.s:first_rtp + execute 'set rtp-='.s:last_rtp + endif + + " &rtp is modified from outside + if exists('s:prtp') && s:prtp !=# &rtp + call s:remove_rtp() + unlet! s:middle + endif + + let s:middle = get(s:, 'middle', &rtp) + let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') + let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') + let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') + \ . ','.s:middle.',' + \ . join(map(afters, 'escape(v:val, ",")'), ',') + let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') + let s:prtp = &rtp + + if !empty(s:first_rtp) + execute 'set rtp^='.s:first_rtp + execute 'set rtp+='.s:last_rtp + endif +endfunction + +function! s:doautocmd(...) + if exists('#'.join(a:000, '#')) + execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000) + endif +endfunction + +function! s:dobufread(names) + for name in a:names + let path = s:rtp(g:plugs[name]) + for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] + if len(finddir(dir, path)) + if exists('#BufRead') + doautocmd BufRead + endif + return + endif + endfor + endfor +endfunction + +function! plug#load(...) + if a:0 == 0 + return s:err('Argument missing: plugin name(s) required') + endif + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 + let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') + if !empty(unknowns) + let s = len(unknowns) > 1 ? 's' : '' + return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) + end + let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') + if !empty(unloaded) + for name in unloaded + call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + endfor + call s:dobufread(unloaded) + return 1 + end + return 0 +endfunction + +function! s:remove_triggers(name) + if !has_key(s:triggers, a:name) + return + endif + for cmd in s:triggers[a:name].cmd + execute 'silent! delc' cmd + endfor + for map in s:triggers[a:name].map + execute 'silent! unmap' map + execute 'silent! iunmap' map + endfor + call remove(s:triggers, a:name) +endfunction + +function! s:lod(names, types, ...) + for name in a:names + call s:remove_triggers(name) + let s:loaded[name] = 1 + endfor + call s:reorg_rtp() + + for name in a:names + let rtp = s:rtp(g:plugs[name]) + for dir in a:types + call s:source(rtp, dir.'/**/*.vim') + endfor + if a:0 + if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) + execute 'runtime' a:1 + endif + call s:source(rtp, a:2) + endif + call s:doautocmd('User', name) + endfor +endfunction + +function! s:lod_ft(pat, names) + let syn = 'syntax/'.a:pat.'.vim' + call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) + execute 'autocmd! PlugLOD FileType' a:pat + call s:doautocmd('filetypeplugin', 'FileType') + call s:doautocmd('filetypeindent', 'FileType') +endfunction + +function! s:lod_cmd(cmd, bang, l1, l2, args, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) +endfunction + +function! s:lod_map(map, names, with_prefix, prefix) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + let extra = '' + while 1 + let c = getchar(0) + if c == 0 + break + endif + let extra .= nr2char(c) + endwhile + + if a:with_prefix + let prefix = v:count ? v:count : '' + let prefix .= '"'.v:register.a:prefix + if mode(1) == 'no' + if v:operator == 'c' + let prefix = "\<esc>" . prefix + endif + let prefix .= v:operator + endif + call feedkeys(prefix, 'n') + endif + call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) +endfunction + +function! plug#(repo, ...) + if a:0 > 1 + return s:err('Invalid number of arguments (1..2)') + endif + + try + let repo = s:trim(a:repo) + let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec + let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) + let spec = extend(s:infer_properties(name, repo), opts) + if !has_key(g:plugs, name) + call add(g:plugs_order, name) + endif + let g:plugs[name] = spec + let s:loaded[name] = get(s:loaded, name, 0) + catch + return s:err(repo . ' ' . v:exception) + endtry +endfunction + +function! s:parse_options(arg) + let opts = copy(s:base_spec) + let type = type(a:arg) + let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)' + if type == s:TYPE.string + if empty(a:arg) + throw printf(opt_errfmt, 'tag', 'string') + endif + let opts.tag = a:arg + elseif type == s:TYPE.dict + for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as'] + if has_key(a:arg, opt) + \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt])) + throw printf(opt_errfmt, opt, 'string') + endif + endfor + for opt in ['on', 'for'] + if has_key(a:arg, opt) + \ && type(a:arg[opt]) != s:TYPE.list + \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt])) + throw printf(opt_errfmt, opt, 'string or list') + endif + endfor + if has_key(a:arg, 'do') + \ && type(a:arg.do) != s:TYPE.funcref + \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do)) + throw printf(opt_errfmt, 'do', 'string or funcref') + endif + call extend(opts, a:arg) + if has_key(opts, 'dir') + let opts.dir = s:dirpath(s:plug_expand(opts.dir)) + endif + else + throw 'Invalid argument type (expected: string or dictionary)' + endif + return opts +endfunction + +function! s:infer_properties(name, repo) + let repo = a:repo + if s:is_local_plug(repo) + return { 'dir': s:dirpath(s:plug_expand(repo)) } + else + if repo =~ ':' + let uri = repo + else + if repo !~ '/' + throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) + endif + let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') + let uri = printf(fmt, repo) + endif + return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } + endif +endfunction + +function! s:install(force, names) + call s:update_impl(0, a:force, a:names) +endfunction + +function! s:update(force, names) + call s:update_impl(1, a:force, a:names) +endfunction + +function! plug#helptags() + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + for spec in values(g:plugs) + let docd = join([s:rtp(spec), 'doc'], '/') + if isdirectory(docd) + silent! execute 'helptags' s:esc(docd) + endif + endfor + return 1 +endfunction + +function! s:syntax() + syntax clear + syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber + syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX + syn match plugNumber /[0-9]\+[0-9.]*/ contained + syn match plugBracket /[[\]]/ contained + syn match plugX /x/ contained + syn match plugDash /^-/ + syn match plugPlus /^+/ + syn match plugStar /^*/ + syn match plugMessage /\(^- \)\@<=.*/ + syn match plugName /\(^- \)\@<=[^ ]*:/ + syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ + syn match plugTag /(tag: [^)]\+)/ + syn match plugInstall /\(^+ \)\@<=[^:]*/ + syn match plugUpdate /\(^* \)\@<=[^:]*/ + syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag + syn match plugEdge /^ \X\+$/ + syn match plugEdge /^ \X*/ contained nextgroup=plugSha + syn match plugSha /[0-9a-f]\{7,9}/ contained + syn match plugRelDate /([^)]*)$/ contained + syn match plugNotLoaded /(not loaded)$/ + syn match plugError /^x.*/ + syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ + syn match plugH2 /^.*:\n-\+$/ + syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean + hi def link plug1 Title + hi def link plug2 Repeat + hi def link plugH2 Type + hi def link plugX Exception + hi def link plugBracket Structure + hi def link plugNumber Number + + hi def link plugDash Special + hi def link plugPlus Constant + hi def link plugStar Boolean + + hi def link plugMessage Function + hi def link plugName Label + hi def link plugInstall Function + hi def link plugUpdate Type + + hi def link plugError Error + hi def link plugDeleted Ignore + hi def link plugRelDate Comment + hi def link plugEdge PreProc + hi def link plugSha Identifier + hi def link plugTag Constant + + hi def link plugNotLoaded Comment +endfunction + +function! s:lpad(str, len) + return a:str . repeat(' ', a:len - len(a:str)) +endfunction + +function! s:lines(msg) + return split(a:msg, "[\r\n]") +endfunction + +function! s:lastline(msg) + return get(s:lines(a:msg), -1, '') +endfunction + +function! s:new_window() + execute get(g:, 'plug_window', 'vertical topleft new') +endfunction + +function! s:plug_window_exists() + let buflist = tabpagebuflist(s:plug_tab) + return !empty(buflist) && index(buflist, s:plug_buf) >= 0 +endfunction + +function! s:switch_in() + if !s:plug_window_exists() + return 0 + endif + + if winbufnr(0) != s:plug_buf + let s:pos = [tabpagenr(), winnr(), winsaveview()] + execute 'normal!' s:plug_tab.'gt' + let winnr = bufwinnr(s:plug_buf) + execute winnr.'wincmd w' + call add(s:pos, winsaveview()) + else + let s:pos = [winsaveview()] + endif + + setlocal modifiable + return 1 +endfunction + +function! s:switch_out(...) + call winrestview(s:pos[-1]) + setlocal nomodifiable + if a:0 > 0 + execute a:1 + endif + + if len(s:pos) > 1 + execute 'normal!' s:pos[0].'gt' + execute s:pos[1] 'wincmd w' + call winrestview(s:pos[2]) + endif +endfunction + +function! s:finish_bindings() + nnoremap <silent> <buffer> R :call <SID>retry()<cr> + nnoremap <silent> <buffer> D :PlugDiff<cr> + nnoremap <silent> <buffer> S :PlugStatus<cr> + nnoremap <silent> <buffer> U :call <SID>status_update()<cr> + xnoremap <silent> <buffer> U :call <SID>status_update()<cr> + nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr> + nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr> +endfunction + +function! s:prepare(...) + if empty(s:plug_getcwd()) + throw 'Invalid current working directory. Cannot proceed.' + endif + + for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] + if exists(evar) + throw evar.' detected. Cannot proceed.' + endif + endfor + + call s:job_abort() + if s:switch_in() + if b:plug_preview == 1 + pc + endif + enew + else + call s:new_window() + endif + + nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr> + if a:0 == 0 + call s:finish_bindings() + endif + let b:plug_preview = -1 + let s:plug_tab = tabpagenr() + let s:plug_buf = winbufnr(0) + call s:assign_name() + + for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd'] + execute 'silent! unmap <buffer>' k + endfor + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell + if exists('+colorcolumn') + setlocal colorcolumn= + endif + setf vim-plug + if exists('g:syntax_on') + call s:syntax() + endif +endfunction + +function! s:assign_name() + " Assign buffer name + let prefix = '[Plugins]' + let name = prefix + let idx = 2 + while bufexists(name) + let name = printf('%s (%s)', prefix, idx) + let idx = idx + 1 + endwhile + silent! execute 'f' fnameescape(name) +endfunction + +function! s:chsh(swap) + let prev = [&shell, &shellcmdflag, &shellredir] + if !s:is_win + set shell=sh + endif + if a:swap + if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$' + let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s' + elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$' + set shellredir=>%s\ 2>&1 + endif + endif + return prev +endfunction + +function! s:bang(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(a:0) + " FIXME: Escaping is incomplete. We could use shellescape with eval, + " but it won't work on Windows. + let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') + execute "normal! :execute g:_plug_bang\<cr>\<cr>" + finally + unlet g:_plug_bang + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + return v:shell_error ? 'Exit status: ' . v:shell_error : '' +endfunction + +function! s:regress_bar() + let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') + call s:progress_bar(2, bar, len(bar)) +endfunction + +function! s:is_updated(dir) + return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir)) +endfunction + +function! s:do(pull, force, todo) + for [name, spec] in items(a:todo) + if !isdirectory(spec.dir) + continue + endif + let installed = has_key(s:update.new, name) + let updated = installed ? 0 : + \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) + if a:force || installed || updated + execute 'cd' s:esc(spec.dir) + call append(3, '- Post-update hook for '. name .' ... ') + let error = '' + let type = type(spec.do) + if type == s:TYPE.string + if spec.do[0] == ':' + if !get(s:loaded, name, 0) + let s:loaded[name] = 1 + call s:reorg_rtp() + endif + call s:load_plugin(spec) + try + execute spec.do[1:] + catch + let error = v:exception + endtry + if !s:plug_window_exists() + cd - + throw 'Warning: vim-plug was terminated by the post-update hook of '.name + endif + else + let error = s:bang(spec.do) + endif + elseif type == s:TYPE.funcref + try + call s:load_plugin(spec) + let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') + call spec.do({ 'name': name, 'status': status, 'force': a:force }) + catch + let error = v:exception + endtry + else + let error = 'Invalid hook type' + endif + call s:switch_in() + call setline(4, empty(error) ? (getline(4) . 'OK') + \ : ('x' . getline(4)[1:] . error)) + if !empty(error) + call add(s:update.errors, name) + call s:regress_bar() + endif + cd - + endif + endfor +endfunction + +function! s:hash_match(a, b) + return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 +endfunction + +function! s:checkout(spec) + let sha = a:spec.commit + let output = s:system(['git', 'rev-parse', 'HEAD'], a:spec.dir) + if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) + let output = s:system( + \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) + endif + return output +endfunction + +function! s:finish(pull) + let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) + if new_frozen + let s = new_frozen > 1 ? 's' : '' + call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) + endif + call append(3, '- Finishing ... ') | 4 + redraw + call plug#helptags() + call plug#end() + call setline(4, getline(4) . 'Done!') + redraw + let msgs = [] + if !empty(s:update.errors) + call add(msgs, "Press 'R' to retry.") + endif + if a:pull && len(s:update.new) < len(filter(getline(5, '$'), + \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) + call add(msgs, "Press 'D' to see the updated changes.") + endif + echo join(msgs, ' ') + call s:finish_bindings() +endfunction + +function! s:retry() + if empty(s:update.errors) + return + endif + echo + call s:update_impl(s:update.pull, s:update.force, + \ extend(copy(s:update.errors), [s:update.threads])) +endfunction + +function! s:is_managed(name) + return has_key(g:plugs[a:name], 'uri') +endfunction + +function! s:names(...) + return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) +endfunction + +function! s:check_ruby() + silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") + if !exists('g:plug_ruby') + redraw! + return s:warn('echom', 'Warning: Ruby interface is broken') + endif + let ruby_version = split(g:plug_ruby, '\.') + unlet g:plug_ruby + return s:version_requirement(ruby_version, [1, 8, 7]) +endfunction + +function! s:update_impl(pull, force, args) abort + let sync = index(a:args, '--sync') >= 0 || has('vim_starting') + let args = filter(copy(a:args), 'v:val != "--sync"') + let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? + \ remove(args, -1) : get(g:, 'plug_threads', 16) + + let managed = filter(copy(g:plugs), 's:is_managed(v:key)') + let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : + \ filter(managed, 'index(args, v:key) >= 0') + + if empty(todo) + return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) + endif + + if !s:is_win && s:git_version_requirement(2, 3) + let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' + let $GIT_TERMINAL_PROMPT = 0 + for plug in values(todo) + let plug.uri = substitute(plug.uri, + \ '^https://git::@github\.com', 'https://github.com', '') + endfor + endif + + if !isdirectory(g:plug_home) + try + call mkdir(g:plug_home, 'p') + catch + return s:err(printf('Invalid plug directory: %s. '. + \ 'Try to call plug#begin with a valid directory', g:plug_home)) + endtry + endif + + if has('nvim') && !exists('*jobwait') && threads > 1 + call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') + endif + + let use_job = s:nvim || s:vim8 + let python = (has('python') || has('python3')) && !use_job + let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() + + let s:update = { + \ 'start': reltime(), + \ 'all': todo, + \ 'todo': copy(todo), + \ 'errors': [], + \ 'pull': a:pull, + \ 'force': a:force, + \ 'new': {}, + \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, + \ 'bar': '', + \ 'fin': 0 + \ } + + call s:prepare(1) + call append(0, ['', '']) + normal! 2G + silent! redraw + + let s:clone_opt = [] + if get(g:, 'plug_shallow', 1) + call extend(s:clone_opt, ['--depth', '1']) + if s:git_version_requirement(1, 7, 10) + call add(s:clone_opt, '--no-single-branch') + endif + endif + + if has('win32unix') || has('wsl') + call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input']) + endif + + let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' + + " Python version requirement (>= 2.7) + if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 + redir => pyv + silent python import platform; print platform.python_version() + redir END + let python = s:version_requirement( + \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) + endif + + if (python || ruby) && s:update.threads > 1 + try + let imd = &imd + if s:mac_gui + set noimd + endif + if ruby + call s:update_ruby() + else + call s:update_python() + endif + catch + let lines = getline(4, '$') + let printed = {} + silent! 4,$d _ + for line in lines + let name = s:extract_name(line, '.', '') + if empty(name) || !has_key(printed, name) + call append('$', line) + if !empty(name) + let printed[name] = 1 + if line[0] == 'x' && index(s:update.errors, name) < 0 + call add(s:update.errors, name) + end + endif + endif + endfor + finally + let &imd = imd + call s:update_finish() + endtry + else + call s:update_vim() + while use_job && sync + sleep 100m + if s:update.fin + break + endif + endwhile + endif +endfunction + +function! s:log4(name, msg) + call setline(4, printf('- %s (%s)', a:msg, a:name)) + redraw +endfunction + +function! s:update_finish() + if exists('s:git_terminal_prompt') + let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt + endif + if s:switch_in() + call append(3, '- Updating ...') | 4 + for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) + let [pos, _] = s:logpos(name) + if !pos + continue + endif + if has_key(spec, 'commit') + call s:log4(name, 'Checking out '.spec.commit) + let out = s:checkout(spec) + elseif has_key(spec, 'tag') + let tag = spec.tag + if tag =~ '\*' + let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) + if !v:shell_error && !empty(tags) + let tag = tags[0] + call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) + call append(3, '') + endif + endif + call s:log4(name, 'Checking out '.tag) + let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) + else + let branch = s:git_origin_branch(spec) + call s:log4(name, 'Merging origin/'.s:esc(branch)) + let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' + \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) + endif + if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && + \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) + call s:log4(name, 'Updating submodules. This may take a while.') + let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) + endif + let msg = s:format_message(v:shell_error ? 'x': '-', name, out) + if v:shell_error + call add(s:update.errors, name) + call s:regress_bar() + silent execute pos 'd _' + call append(4, msg) | 4 + elseif !empty(out) + call setline(pos, msg[0]) + endif + redraw + endfor + silent 4 d _ + try + call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) + catch + call s:warn('echom', v:exception) + call s:warn('echo', '') + return + endtry + call s:finish(s:update.pull) + call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') + call s:switch_out('normal! gg') + endif +endfunction + +function! s:job_abort() + if (!s:nvim && !s:vim8) || !exists('s:jobs') + return + endif + + for [name, j] in items(s:jobs) + if s:nvim + silent! call jobstop(j.jobid) + elseif s:vim8 + silent! call job_stop(j.jobid) + endif + if j.new + call s:rm_rf(g:plugs[name].dir) + endif + endfor + let s:jobs = {} +endfunction + +function! s:last_non_empty_line(lines) + let len = len(a:lines) + for idx in range(len) + let line = a:lines[len-idx-1] + if !empty(line) + return line + endif + endfor + return '' +endfunction + +function! s:job_out_cb(self, data) abort + let self = a:self + let data = remove(self.lines, -1) . a:data + let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') + call extend(self.lines, lines) + " To reduce the number of buffer updates + let self.tick = get(self, 'tick', -1) + 1 + if !self.running || self.tick % len(s:jobs) == 0 + let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') + let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) + call s:log(bullet, self.name, result) + endif +endfunction + +function! s:job_exit_cb(self, data) abort + let a:self.running = 0 + let a:self.error = a:data != 0 + call s:reap(a:self.name) + call s:tick() +endfunction + +function! s:job_cb(fn, job, ch, data) + if !s:plug_window_exists() " plug window closed + return s:job_abort() + endif + call call(a:fn, [a:job, a:data]) +endfunction + +function! s:nvim_cb(job_id, data, event) dict abort + return (a:event == 'stdout' || a:event == 'stderr') ? + \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : + \ s:job_cb('s:job_exit_cb', self, 0, a:data) +endfunction + +function! s:spawn(name, cmd, opts) + let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], + \ 'new': get(a:opts, 'new', 0) } + let s:jobs[a:name] = job + + if s:nvim + if has_key(a:opts, 'dir') + let job.cwd = a:opts.dir + endif + let argv = a:cmd + call extend(job, { + \ 'on_stdout': function('s:nvim_cb'), + \ 'on_stderr': function('s:nvim_cb'), + \ 'on_exit': function('s:nvim_cb'), + \ }) + let jid = s:plug_call('jobstart', argv, job) + if jid > 0 + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = [jid < 0 ? argv[0].' is not executable' : + \ 'Invalid arguments (or job table is full)'] + endif + elseif s:vim8 + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) + if has_key(a:opts, 'dir') + let cmd = s:with_cd(cmd, a:opts.dir, 0) + endif + let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] + let jid = job_start(s:is_win ? join(argv, ' ') : argv, { + \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ 'err_mode': 'raw', + \ 'out_mode': 'raw' + \}) + if job_status(jid) == 'run' + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = ['Failed to start job'] + endif + else + let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) + let job.error = v:shell_error != 0 + let job.running = 0 + endif +endfunction + +function! s:reap(name) + let job = s:jobs[a:name] + if job.error + call add(s:update.errors, a:name) + elseif get(job, 'new', 0) + let s:update.new[a:name] = 1 + endif + let s:update.bar .= job.error ? 'x' : '=' + + let bullet = job.error ? 'x' : '-' + let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) + call s:log(bullet, a:name, empty(result) ? 'OK' : result) + call s:bar() + + call remove(s:jobs, a:name) +endfunction + +function! s:bar() + if s:switch_in() + let total = len(s:update.all) + call setline(1, (s:update.pull ? 'Updating' : 'Installing'). + \ ' plugins ('.len(s:update.bar).'/'.total.')') + call s:progress_bar(2, s:update.bar, total) + call s:switch_out() + endif +endfunction + +function! s:logpos(name) + let max = line('$') + for i in range(4, max > 4 ? max : 4) + if getline(i) =~# '^[-+x*] '.a:name.':' + for j in range(i + 1, max > 5 ? max : 5) + if getline(j) !~ '^ ' + return [i, j - 1] + endif + endfor + return [i, i] + endif + endfor + return [0, 0] +endfunction + +function! s:log(bullet, name, lines) + if s:switch_in() + let [b, e] = s:logpos(a:name) + if b > 0 + silent execute printf('%d,%d d _', b, e) + if b > winheight('.') + let b = 4 + endif + else + let b = 4 + endif + " FIXME For some reason, nomodifiable is set after :d in vim8 + setlocal modifiable + call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) + call s:switch_out() + endif +endfunction + +function! s:update_vim() + let s:jobs = {} + + call s:bar() + call s:tick() +endfunction + +function! s:tick() + let pull = s:update.pull + let prog = s:progress_opt(s:nvim || s:vim8) +while 1 " Without TCO, Vim stack is bound to explode + if empty(s:update.todo) + if empty(s:jobs) && !s:update.fin + call s:update_finish() + let s:update.fin = 1 + endif + return + endif + + let name = keys(s:update.todo)[0] + let spec = remove(s:update.todo, name) + let new = empty(globpath(spec.dir, '.git', 1)) + + call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') + redraw + + let has_tag = has_key(spec, 'tag') + if !new + let [error, _] = s:git_validate(spec, 0) + if empty(error) + if pull + let cmd = ['git', 'fetch'] + if has_tag && !empty(globpath(spec.dir, '.git/shallow')) + call extend(cmd, ['--depth', '99999999']) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, cmd, { 'dir': spec.dir }) + else + let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } + endif + else + let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } + endif + else + let cmd = ['git', 'clone'] + if !has_tag + call extend(cmd, s:clone_opt) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) + endif + + if !s:jobs[name].running + call s:reap(name) + endif + if len(s:jobs) >= s:update.threads + break + endif +endwhile +endfunction + +function! s:update_python() +let py_exe = has('python') ? 'python' : 'python3' +execute py_exe "<< EOF" +import datetime +import functools +import os +try: + import queue +except ImportError: + import Queue as queue +import random +import re +import shutil +import signal +import subprocess +import tempfile +import threading as thr +import time +import traceback +import vim + +G_NVIM = vim.eval("has('nvim')") == '1' +G_PULL = vim.eval('s:update.pull') == '1' +G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 +G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) +G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt')) +G_PROGRESS = vim.eval('s:progress_opt(1)') +G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) +G_STOP = thr.Event() +G_IS_WIN = vim.eval('s:is_win') == '1' + +class PlugError(Exception): + def __init__(self, msg): + self.msg = msg +class CmdTimedOut(PlugError): + pass +class CmdFailed(PlugError): + pass +class InvalidURI(PlugError): + pass +class Action(object): + INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] + +class Buffer(object): + def __init__(self, lock, num_plugs, is_pull): + self.bar = '' + self.event = 'Updating' if is_pull else 'Installing' + self.lock = lock + self.maxy = int(vim.eval('winheight(".")')) + self.num_plugs = num_plugs + + def __where(self, name): + """ Find first line with name in current buffer. Return line num. """ + found, lnum = False, 0 + matcher = re.compile('^[-+x*] {0}:'.format(name)) + for line in vim.current.buffer: + if matcher.search(line) is not None: + found = True + break + lnum += 1 + + if not found: + lnum = -1 + return lnum + + def header(self): + curbuf = vim.current.buffer + curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) + + num_spaces = self.num_plugs - len(self.bar) + curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') + + with self.lock: + vim.command('normal! 2G') + vim.command('redraw') + + def write(self, action, name, lines): + first, rest = lines[0], lines[1:] + msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] + msg.extend([' ' + line for line in rest]) + + try: + if action == Action.ERROR: + self.bar += 'x' + vim.command("call add(s:update.errors, '{0}')".format(name)) + elif action == Action.DONE: + self.bar += '=' + + curbuf = vim.current.buffer + lnum = self.__where(name) + if lnum != -1: # Found matching line num + del curbuf[lnum] + if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): + lnum = 3 + else: + lnum = 3 + curbuf.append(msg, lnum) + + self.header() + except vim.error: + pass + +class Command(object): + CD = 'cd /d' if G_IS_WIN else 'cd' + + def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): + self.cmd = cmd + if cmd_dir: + self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) + self.timeout = timeout + self.callback = cb if cb else (lambda msg: None) + self.clean = clean if clean else (lambda: None) + self.proc = None + + @property + def alive(self): + """ Returns true only if command still running. """ + return self.proc and self.proc.poll() is None + + def execute(self, ntries=3): + """ Execute the command with ntries if CmdTimedOut. + Returns the output of the command if no Exception. + """ + attempt, finished, limit = 0, False, self.timeout + + while not finished: + try: + attempt += 1 + result = self.try_command() + finished = True + return result + except CmdTimedOut: + if attempt != ntries: + self.notify_retry() + self.timeout += limit + else: + raise + + def notify_retry(self): + """ Retry required for command, notify user. """ + for count in range(3, 0, -1): + if G_STOP.is_set(): + raise KeyboardInterrupt + msg = 'Timeout. Will retry in {0} second{1} ...'.format( + count, 's' if count != 1 else '') + self.callback([msg]) + time.sleep(1) + self.callback(['Retrying ...']) + + def try_command(self): + """ Execute a cmd & poll for callback. Returns list of output. + Raises CmdFailed -> return code for Popen isn't 0 + Raises CmdTimedOut -> command exceeded timeout without new output + """ + first_line = True + + try: + tfile = tempfile.NamedTemporaryFile(mode='w+b') + preexec_fn = not G_IS_WIN and os.setsid or None + self.proc = subprocess.Popen(self.cmd, stdout=tfile, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, shell=True, + preexec_fn=preexec_fn) + thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) + thrd.start() + + thread_not_started = True + while thread_not_started: + try: + thrd.join(0.1) + thread_not_started = False + except RuntimeError: + pass + + while self.alive: + if G_STOP.is_set(): + raise KeyboardInterrupt + + if first_line or random.random() < G_LOG_PROB: + first_line = False + line = '' if G_IS_WIN else nonblock_read(tfile.name) + if line: + self.callback([line]) + + time_diff = time.time() - os.path.getmtime(tfile.name) + if time_diff > self.timeout: + raise CmdTimedOut(['Timeout!']) + + thrd.join(0.5) + + tfile.seek(0) + result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] + + if self.proc.returncode != 0: + raise CmdFailed([''] + result) + + return result + except: + self.terminate() + raise + + def terminate(self): + """ Terminate process and cleanup. """ + if self.alive: + if G_IS_WIN: + os.kill(self.proc.pid, signal.SIGINT) + else: + os.killpg(self.proc.pid, signal.SIGTERM) + self.clean() + +class Plugin(object): + def __init__(self, name, args, buf_q, lock): + self.name = name + self.args = args + self.buf_q = buf_q + self.lock = lock + self.tag = args.get('tag', 0) + + def manage(self): + try: + if os.path.exists(self.args['dir']): + self.update() + else: + self.install() + with self.lock: + thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) + except PlugError as exc: + self.write(Action.ERROR, self.name, exc.msg) + except KeyboardInterrupt: + G_STOP.set() + self.write(Action.ERROR, self.name, ['Interrupted!']) + except: + # Any exception except those above print stack trace + msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) + self.write(Action.ERROR, self.name, msg.split('\n')) + raise + + def install(self): + target = self.args['dir'] + if target[-1] == '\\': + target = target[0:-1] + + def clean(target): + def _clean(): + try: + shutil.rmtree(target) + except OSError: + pass + return _clean + + self.write(Action.INSTALL, self.name, ['Installing ...']) + callback = functools.partial(self.write, Action.INSTALL, self.name) + cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( + '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], + esc(target)) + com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + + def repo_uri(self): + cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' + command = Command(cmd, self.args['dir'], G_TIMEOUT,) + result = command.execute(G_RETRIES) + return result[-1] + + def update(self): + actual_uri = self.repo_uri() + expect_uri = self.args['uri'] + regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') + ma = regex.match(actual_uri) + mb = regex.match(expect_uri) + if ma is None or mb is None or ma.groups() != mb.groups(): + msg = ['', + 'Invalid URI: {0}'.format(actual_uri), + 'Expected {0}'.format(expect_uri), + 'PlugClean required.'] + raise InvalidURI(msg) + + if G_PULL: + self.write(Action.UPDATE, self.name, ['Updating ...']) + callback = functools.partial(self.write, Action.UPDATE, self.name) + fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' + cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) + com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + else: + self.write(Action.DONE, self.name, ['Already installed']) + + def write(self, action, name, msg): + self.buf_q.put((action, name, msg)) + +class PlugThread(thr.Thread): + def __init__(self, tname, args): + super(PlugThread, self).__init__() + self.tname = tname + self.args = args + + def run(self): + thr.current_thread().name = self.tname + buf_q, work_q, lock = self.args + + try: + while not G_STOP.is_set(): + name, args = work_q.get_nowait() + plug = Plugin(name, args, buf_q, lock) + plug.manage() + work_q.task_done() + except queue.Empty: + pass + +class RefreshThread(thr.Thread): + def __init__(self, lock): + super(RefreshThread, self).__init__() + self.lock = lock + self.running = True + + def run(self): + while self.running: + with self.lock: + thread_vim_command('noautocmd normal! a') + time.sleep(0.33) + + def stop(self): + self.running = False + +if G_NVIM: + def thread_vim_command(cmd): + vim.session.threadsafe_call(lambda: vim.command(cmd)) +else: + def thread_vim_command(cmd): + vim.command(cmd) + +def esc(name): + return '"' + name.replace('"', '\"') + '"' + +def nonblock_read(fname): + """ Read a file with nonblock flag. Return the last line. """ + fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) + buf = os.read(fread, 100000).decode('utf-8', 'replace') + os.close(fread) + + line = buf.rstrip('\r\n') + left = max(line.rfind('\r'), line.rfind('\n')) + if left != -1: + left += 1 + line = line[left:] + + return line + +def main(): + thr.current_thread().name = 'main' + nthreads = int(vim.eval('s:update.threads')) + plugs = vim.eval('s:update.todo') + mac_gui = vim.eval('s:mac_gui') == '1' + + lock = thr.Lock() + buf = Buffer(lock, len(plugs), G_PULL) + buf_q, work_q = queue.Queue(), queue.Queue() + for work in plugs.items(): + work_q.put(work) + + start_cnt = thr.active_count() + for num in range(nthreads): + tname = 'PlugT-{0:02}'.format(num) + thread = PlugThread(tname, (buf_q, work_q, lock)) + thread.start() + if mac_gui: + rthread = RefreshThread(lock) + rthread.start() + + while not buf_q.empty() or thr.active_count() != start_cnt: + try: + action, name, msg = buf_q.get(True, 0.25) + buf.write(action, name, ['OK'] if not msg else msg) + buf_q.task_done() + except queue.Empty: + pass + except KeyboardInterrupt: + G_STOP.set() + + if mac_gui: + rthread.stop() + rthread.join() + +main() +EOF +endfunction + +function! s:update_ruby() + ruby << EOF + module PlugStream + SEP = ["\r", "\n", nil] + def get_line + buffer = '' + loop do + char = readchar rescue return + if SEP.include? char.chr + buffer << $/ + break + else + buffer << char + end + end + buffer + end + end unless defined?(PlugStream) + + def esc arg + %["#{arg.gsub('"', '\"')}"] + end + + def killall pid + pids = [pid] + if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM + pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } + else + unless `which pgrep 2> /dev/null`.empty? + children = pids + until children.empty? + children = children.map { |pid| + `pgrep -P #{pid}`.lines.map { |l| l.chomp } + }.flatten + pids += children + end + end + pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } + end + end + + def compare_git_uri a, b + regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} + regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) + end + + require 'thread' + require 'fileutils' + require 'timeout' + running = true + iswin = VIM::evaluate('s:is_win').to_i == 1 + pull = VIM::evaluate('s:update.pull').to_i == 1 + base = VIM::evaluate('g:plug_home') + all = VIM::evaluate('s:update.todo') + limit = VIM::evaluate('get(g:, "plug_timeout", 60)') + tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 + nthr = VIM::evaluate('s:update.threads').to_i + maxy = VIM::evaluate('winheight(".")').to_i + vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ + cd = iswin ? 'cd /d' : 'cd' + tot = VIM::evaluate('len(s:update.todo)') || 0 + bar = '' + skip = 'Already installed' + mtx = Mutex.new + take1 = proc { mtx.synchronize { running && all.shift } } + logh = proc { + cnt = bar.length + $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" + $curbuf[2] = '[' + bar.ljust(tot) + ']' + VIM::command('normal! 2G') + VIM::command('redraw') + } + where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } + log = proc { |name, result, type| + mtx.synchronize do + ing = ![true, false].include?(type) + bar += type ? '=' : 'x' unless ing + b = case type + when :install then '+' when :update then '*' + when true, nil then '-' else + VIM::command("call add(s:update.errors, '#{name}')") + 'x' + end + result = + if type || type.nil? + ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] + elsif result =~ /^Interrupted|^Timeout/ + ["#{b} #{name}: #{result}"] + else + ["#{b} #{name}"] + result.lines.map { |l| " " << l } + end + if lnum = where.call(name) + $curbuf.delete lnum + lnum = 4 if ing && lnum > maxy + end + result.each_with_index do |line, offset| + $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) + end + logh.call + end + } + bt = proc { |cmd, name, type, cleanup| + tried = timeout = 0 + begin + tried += 1 + timeout += limit + fd = nil + data = '' + if iswin + Timeout::timeout(timeout) do + tmp = VIM::evaluate('tempname()') + system("(#{cmd}) > #{tmp}") + data = File.read(tmp).chomp + File.unlink tmp rescue nil + end + else + fd = IO.popen(cmd).extend(PlugStream) + first_line = true + log_prob = 1.0 / nthr + while line = Timeout::timeout(timeout) { fd.get_line } + data << line + log.call name, line.chomp, type if name && (first_line || rand < log_prob) + first_line = false + end + fd.close + end + [$? == 0, data.chomp] + rescue Timeout::Error, Interrupt => e + if fd && !fd.closed? + killall fd.pid + fd.close + end + cleanup.call if cleanup + if e.is_a?(Timeout::Error) && tried < tries + 3.downto(1) do |countdown| + s = countdown > 1 ? 's' : '' + log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type + sleep 1 + end + log.call name, 'Retrying ...', type + retry + end + [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] + end + } + main = Thread.current + threads = [] + watcher = Thread.new { + if vim7 + while VIM::evaluate('getchar(1)') + sleep 0.1 + end + else + require 'io/console' # >= Ruby 1.9 + nil until IO.console.getch == 3.chr + end + mtx.synchronize do + running = false + threads.each { |t| t.raise Interrupt } unless vim7 + end + threads.each { |t| t.join rescue nil } + main.kill + } + refresh = Thread.new { + while true + mtx.synchronize do + break unless running + VIM::command('noautocmd normal! a') + end + sleep 0.2 + end + } if VIM::evaluate('s:mac_gui') == 1 + + clone_opt = VIM::evaluate('s:clone_opt').join(' ') + progress = VIM::evaluate('s:progress_opt(1)') + nthr.times do + mtx.synchronize do + threads << Thread.new { + while pair = take1.call + name = pair.first + dir, uri, tag = pair.last.values_at *%w[dir uri tag] + exists = File.directory? dir + ok, result = + if exists + chdir = "#{cd} #{iswin ? dir : esc(dir)}" + ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil + current_uri = data.lines.to_a.last + if !ret + if data =~ /^Interrupted|^Timeout/ + [false, data] + else + [false, [data.chomp, "PlugClean required."].join($/)] + end + elsif !compare_git_uri(current_uri, uri) + [false, ["Invalid URI: #{current_uri}", + "Expected: #{uri}", + "PlugClean required."].join($/)] + else + if pull + log.call name, 'Updating ...', :update + fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' + bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil + else + [true, skip] + end + end + else + d = esc dir.sub(%r{[\\/]+$}, '') + log.call name, 'Installing ...', :install + bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { + FileUtils.rm_rf dir + } + end + mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok + log.call name, result, ok + end + } if running + end + end + threads.each { |t| t.join rescue nil } + logh.call + refresh.kill if refresh + watcher.kill +EOF +endfunction + +function! s:shellesc_cmd(arg, script) + let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') + return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') +endfunction + +function! s:shellesc_ps1(arg) + return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" +endfunction + +function! s:shellesc_sh(arg) + return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" +endfunction + +" Escape the shell argument based on the shell. +" Vim and Neovim's shellescape() are insufficient. +" 1. shellslash determines whether to use single/double quotes. +" Double-quote escaping is fragile for cmd.exe. +" 2. It does not work for powershell. +" 3. It does not work for *sh shells if the command is executed +" via cmd.exe (ie. cmd.exe /c sh -c command command_args) +" 4. It does not support batchfile syntax. +" +" Accepts an optional dictionary with the following keys: +" - shell: same as Vim/Neovim 'shell' option. +" If unset, fallback to 'cmd.exe' on Windows or 'sh'. +" - script: If truthy and shell is cmd.exe, escape for batchfile syntax. +function! plug#shellescape(arg, ...) + if a:arg =~# '^[A-Za-z0-9_/:.-]\+$' + return a:arg + endif + let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} + let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') + let script = get(opts, 'script', 1) + if shell =~# 'cmd\(\.exe\)\?$' + return s:shellesc_cmd(a:arg, script) + elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$' + return s:shellesc_ps1(a:arg) + endif + return s:shellesc_sh(a:arg) +endfunction + +function! s:glob_dir(path) + return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') +endfunction + +function! s:progress_bar(line, bar, total) + call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') +endfunction + +function! s:compare_git_uri(a, b) + " See `git help clone' + " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] + " [git@] github.com[:port] : junegunn/vim-plug [.git] + " file:// / junegunn/vim-plug [/] + " / junegunn/vim-plug [/] + let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' + let ma = matchlist(a:a, pat) + let mb = matchlist(a:b, pat) + return ma[1:2] ==# mb[1:2] +endfunction + +function! s:format_message(bullet, name, message) + if a:bullet != 'x' + return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] + else + let lines = map(s:lines(a:message), '" ".v:val') + return extend([printf('x %s:', a:name)], lines) + endif +endfunction + +function! s:with_cd(cmd, dir, ...) + let script = a:0 > 0 ? a:1 : 1 + return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) +endfunction + +function! s:system(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + if type(a:cmd) == s:TYPE.list + " Neovim's system() supports list argument to bypass the shell + " but it cannot set the working directory for the command. + " Assume that the command does not rely on the shell. + if has('nvim') && a:0 == 0 + return system(a:cmd) + endif + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) + if &shell =~# 'powershell\(\.exe\)\?$' + let cmd = '& ' . cmd + endif + else + let cmd = a:cmd + endif + if a:0 > 0 + let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list) + endif + if s:is_win && type(a:cmd) != s:TYPE.list + let [batchfile, cmd] = s:batchfile(cmd) + endif + return system(cmd) + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry +endfunction + +function! s:system_chomp(...) + let ret = call('s:system', a:000) + return v:shell_error ? '' : substitute(ret, '\n$', '', '') +endfunction + +function! s:git_origin_branch(spec) + if len(a:spec.branch) + return a:spec.branch + endif + + " The file may not be present if this is a local repository + let origin_head = a:spec.dir.'/.git/refs/remotes/origin/HEAD' + if filereadable(origin_head) + return split(readfile(origin_head)[0], 'refs/remotes/origin/')[-1] + endif + + " The command may not return the name of a branch in detached HEAD state + let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir)) + return v:shell_error ? '' : result[-1] +endfunction + +function! s:git_validate(spec, check_branch) + let err = '' + if isdirectory(a:spec.dir) + let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) + let remote = result[-1] + if v:shell_error + let err = join([remote, 'PlugClean required.'], "\n") + elseif !s:compare_git_uri(remote, a:spec.uri) + let err = join(['Invalid URI: '.remote, + \ 'Expected: '.a:spec.uri, + \ 'PlugClean required.'], "\n") + elseif a:check_branch && has_key(a:spec, 'commit') + let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) + let sha = result[-1] + if v:shell_error + let err = join(add(result, 'PlugClean required.'), "\n") + elseif !s:hash_match(sha, a:spec.commit) + let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', + \ a:spec.commit[:6], sha[:6]), + \ 'PlugUpdate required.'], "\n") + endif + elseif a:check_branch + let current_branch = result[0] + " Check tag + let origin_branch = s:git_origin_branch(a:spec) + if has_key(a:spec, 'tag') + let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) + if a:spec.tag !=# tag && a:spec.tag !~ '\*' + let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', + \ (empty(tag) ? 'N/A' : tag), a:spec.tag) + endif + " Check branch + elseif origin_branch !=# current_branch + let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', + \ current_branch, origin_branch) + endif + if empty(err) + let [ahead, behind] = split(s:lastline(s:system([ + \ 'git', 'rev-list', '--count', '--left-right', + \ printf('HEAD...origin/%s', origin_branch) + \ ], a:spec.dir)), '\t') + if !v:shell_error && ahead + if behind + " Only mention PlugClean if diverged, otherwise it's likely to be + " pushable (and probably not that messed up). + let err = printf( + \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" + \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind) + else + let err = printf("Ahead of origin/%s by %d commit(s).\n" + \ .'Cannot update until local changes are pushed.', + \ origin_branch, ahead) + endif + endif + endif + endif + else + let err = 'Not found' + endif + return [err, err =~# 'PlugClean'] +endfunction + +function! s:rm_rf(dir) + if isdirectory(a:dir) + return s:system(s:is_win + \ ? 'rmdir /S /Q '.plug#shellescape(a:dir) + \ : ['rm', '-rf', a:dir]) + endif +endfunction + +function! s:clean(force) + call s:prepare() + call append(0, 'Searching for invalid plugins in '.g:plug_home) + call append(1, '') + + " List of valid directories + let dirs = [] + let errs = {} + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + if !s:is_managed(name) + call add(dirs, spec.dir) + else + let [err, clean] = s:git_validate(spec, 1) + if clean + let errs[spec.dir] = s:lines(err)[0] + else + call add(dirs, spec.dir) + endif + endif + let cnt += 1 + call s:progress_bar(2, repeat('=', cnt), total) + normal! 2G + redraw + endfor + + let allowed = {} + for dir in dirs + let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 + let allowed[dir] = 1 + for child in s:glob_dir(dir) + let allowed[child] = 1 + endfor + endfor + + let todo = [] + let found = sort(s:glob_dir(g:plug_home)) + while !empty(found) + let f = remove(found, 0) + if !has_key(allowed, f) && isdirectory(f) + call add(todo, f) + call append(line('$'), '- ' . f) + if has_key(errs, f) + call append(line('$'), ' ' . errs[f]) + endif + let found = filter(found, 'stridx(v:val, f) != 0') + end + endwhile + + 4 + redraw + if empty(todo) + call append(line('$'), 'Already clean.') + else + let s:clean_count = 0 + call append(3, ['Directories to delete:', '']) + redraw! + if a:force || s:ask_no_interrupt('Delete all directories?') + call s:delete([6, line('$')], 1) + else + call setline(4, 'Cancelled.') + nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@ + nmap <silent> <buffer> dd d_ + xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr> + echo 'Delete the lines (d{motion}) to delete the corresponding directories' + endif + endif + 4 + setlocal nomodifiable +endfunction + +function! s:delete_op(type, ...) + call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) +endfunction + +function! s:delete(range, force) + let [l1, l2] = a:range + let force = a:force + let err_count = 0 + while l1 <= l2 + let line = getline(l1) + if line =~ '^- ' && isdirectory(line[2:]) + execute l1 + redraw! + let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) + let force = force || answer > 1 + if answer + let err = s:rm_rf(line[2:]) + setlocal modifiable + if empty(err) + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + else + delete _ + call append(l1 - 1, s:format_message('x', line[1:], err)) + let l2 += len(s:lines(err)) + let err_count += 1 + endif + let msg = printf('Removed %d directories.', s:clean_count) + if err_count > 0 + let msg .= printf(' Failed to remove %d directories.', err_count) + endif + call setline(4, msg) + setlocal nomodifiable + endif + endif + let l1 += 1 + endwhile +endfunction + +function! s:upgrade() + echo 'Downloading the latest version of vim-plug' + redraw + let tmp = s:plug_tempname() + let new = tmp . '/plug.vim' + + try + let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp]) + if v:shell_error + return s:err('Error upgrading vim-plug: '. out) + endif + + if readfile(s:me) ==# readfile(new) + echo 'vim-plug is already up-to-date' + return 0 + else + call rename(s:me, s:me . '.old') + call rename(new, s:me) + unlet g:loaded_plug + echo 'vim-plug has been upgraded' + return 1 + endif + finally + silent! call s:rm_rf(tmp) + endtry +endfunction + +function! s:upgrade_specs() + for spec in values(g:plugs) + let spec.frozen = get(spec, 'frozen', 0) + endfor +endfunction + +function! s:status() + call s:prepare() + call append(0, 'Checking plugins') + call append(1, '') + + let ecnt = 0 + let unloaded = 0 + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + let is_dir = isdirectory(spec.dir) + if has_key(spec, 'uri') + if is_dir + let [err, _] = s:git_validate(spec, 1) + let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] + else + let [valid, msg] = [0, 'Not found. Try PlugInstall.'] + endif + else + if is_dir + let [valid, msg] = [1, 'OK'] + else + let [valid, msg] = [0, 'Not found.'] + endif + endif + let cnt += 1 + let ecnt += !valid + " `s:loaded` entry can be missing if PlugUpgraded + if is_dir && get(s:loaded, name, -1) == 0 + let unloaded = 1 + let msg .= ' (not loaded)' + endif + call s:progress_bar(2, repeat('=', cnt), total) + call append(3, s:format_message(valid ? '-' : 'x', name, msg)) + normal! 2G + redraw + endfor + call setline(1, 'Finished. '.ecnt.' error(s).') + normal! gg + setlocal nomodifiable + if unloaded + echo "Press 'L' on each line to load plugin, or 'U' to update" + nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + end +endfunction + +function! s:extract_name(str, prefix, suffix) + return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') +endfunction + +function! s:status_load(lnum) + let line = getline(a:lnum) + let name = s:extract_name(line, '-', '(not loaded)') + if !empty(name) + call plug#load(name) + setlocal modifiable + call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) + setlocal nomodifiable + endif +endfunction + +function! s:status_update() range + let lines = getline(a:firstline, a:lastline) + let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') + if !empty(names) + echo + execute 'PlugUpdate' join(names) + endif +endfunction + +function! s:is_preview_window_open() + silent! wincmd P + if &previewwindow + wincmd p + return 1 + endif +endfunction + +function! s:find_name(lnum) + for lnum in reverse(range(1, a:lnum)) + let line = getline(lnum) + if empty(line) + return '' + endif + let name = s:extract_name(line, '-', '') + if !empty(name) + return name + endif + endfor + return '' +endfunction + +function! s:preview_commit() + if b:plug_preview < 0 + let b:plug_preview = !s:is_preview_window_open() + endif + + let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') + if empty(sha) + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) + return + endif + + if exists('g:plug_pwindow') && !s:is_preview_window_open() + execute g:plug_pwindow + execute 'e' sha + else + execute 'pedit' sha + wincmd P + endif + setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + execute 'silent %!' cmd + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + setlocal nomodifiable + nnoremap <silent> <buffer> q :q<cr> + wincmd p +endfunction + +function! s:section(flags) + call search('\(^[x-] \)\@<=[^:]\+:', a:flags) +endfunction + +function! s:format_git_log(line) + let indent = ' ' + let tokens = split(a:line, nr2char(1)) + if len(tokens) != 5 + return indent.substitute(a:line, '\s*$', '', '') + endif + let [graph, sha, refs, subject, date] = tokens + let tag = matchstr(refs, 'tag: [^,)]\+') + let tag = empty(tag) ? ' ' : ' ('.tag.') ' + return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) +endfunction + +function! s:append_ul(lnum, text) + call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) +endfunction + +function! s:diff() + call s:prepare() + call append(0, ['Collecting changes ...', '']) + let cnts = [0, 0] + let bar = '' + let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') + call s:progress_bar(2, bar, len(total)) + for origin in [1, 0] + let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + if empty(plugs) + continue + endif + call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') + for [k, v] in plugs + let branch = s:git_origin_branch(v) + if len(branch) + let range = origin ? '..origin/'.branch : 'HEAD@{1}..' + let cmd = ['git', 'log', '--graph', '--color=never'] + if s:git_version_requirement(2, 10, 0) + call add(cmd, '--no-show-signature') + endif + call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range]) + if has_key(v, 'rtp') + call extend(cmd, ['--', v.rtp]) + endif + let diff = s:system_chomp(cmd, v.dir) + if !empty(diff) + let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' + call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) + let cnts[origin] += 1 + endif + endif + let bar .= '=' + call s:progress_bar(2, bar, len(total)) + normal! 2G + redraw + endfor + if !cnts[origin] + call append(5, ['', 'N/A']) + endif + endfor + call setline(1, printf('%d plugin(s) updated.', cnts[0]) + \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) + + if cnts[0] || cnts[1] + nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr> + if empty(maparg("\<cr>", 'n')) + nmap <buffer> <cr> <plug>(plug-preview) + endif + if empty(maparg('o', 'n')) + nmap <buffer> o <plug>(plug-preview) + endif + endif + if cnts[0] + nnoremap <silent> <buffer> X :call <SID>revert()<cr> + echo "Press 'X' on each block to revert the update" + endif + normal! gg + setlocal nomodifiable +endfunction + +function! s:revert() + if search('^Pending updates', 'bnW') + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || + \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' + return + endif + + call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) + setlocal modifiable + normal! "_dap + setlocal nomodifiable + echo 'Reverted' +endfunction + +function! s:snapshot(force, ...) abort + call s:prepare() + setf vim + call append(0, ['" Generated by vim-plug', + \ '" '.strftime("%c"), + \ '" :source this file in vim to restore the snapshot', + \ '" or execute: vim -S snapshot.vim', + \ '', '', 'PlugUpdate!']) + 1 + let anchor = line('$') - 3 + let names = sort(keys(filter(copy(g:plugs), + \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) + for name in reverse(names) + let sha = s:system_chomp(['git', 'rev-parse', '--short', 'HEAD'], g:plugs[name].dir) + if !empty(sha) + call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) + redraw + endif + endfor + + if a:0 > 0 + let fn = s:plug_expand(a:1) + if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) + return + endif + call writefile(getline(1, '$'), fn) + echo 'Saved as '.a:1 + silent execute 'e' s:esc(fn) + setf vim + endif +endfunction + +function! s:split_rtp() + return split(&rtp, '\\\@<!,') +endfunction + +let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, '')) +let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, '')) + +if exists('g:plugs') + let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs)) + call s:upgrade_specs() + call s:define_commands() +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim new file mode 100755 index 0000000..a56031e --- /dev/null +++ b/.config/nvim/init.vim @@ -0,0 +1,718 @@ +" ================================ +" NVimrc +" ================================ +" +" Plugin setup --- via vim-plug ----- {{{ +" +filetype off +" +" set the runtime path to include Vundle and initialize +" +"set rtp+=$HOME/.config/nvim/bundle/Vundle.vim +" +" auto-install vim-plug + if empty(glob('~/.config/nvim/autoload/plug.vim')) + silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + "autocmd VimEnter * PlugInstall + "autocmd VimEnter * PlugInstall | source $MYVIMRC + endif + +call plug#begin('~/.config/nvim/plugged') +"Plug 'alfredodeza/pytest.vim' +Plug 'altercation/vim-colors-solarized' +"Plug 'benmills/vimux' +"Plug 'cburroughs/pep8.py' +Plug 'chriskempson/tomorrow-theme' +"Plug 'christoomey/vim-tmux-navigator' +"Plug 'davidhalter/jedi-vim' +"Plug 'ervandew/ag' +"Plug 'ervandew/screen' +"Plug 'ervandew/supertab' +Plug 'flazz/vim-colorschemes' +"Plug 'honza/vim-snippets' +"Plug 'jistr/vim-nerdtree-tabs' +Plug 'jnurmine/Zenburn' +"Plug 'julienr/vim-cellmode' +Plug 'junegunn/seoul256.vim' +Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +Plug 'junegunn/fzf.vim' +"Plug 'klen/python-mode' +Plug 'KabbAmine/zeavim.vim' +"Plug 'kien/ctrlp.vim' +"Plug 'majutsushi/tagbar' +"Plug 'nelstrom/vim-markdown-preview' +"Plug 'nvie/vim-flake8' +"Plug 'pangloss/vim-javascript' +"Plug 'Raimondi/delimitMate' +"Plug 'rkulla/pydiction' +Plug 'scrooloose/nerdtree' +"Plug 'scrooloose/nerdcommenter' +"Plug 'scrooloose/syntastic' +Plug 'SirVer/ultisnips' +"Plug 'sjl/tslime2.vim' +"Plug 'suan/vim-instant-markdown' +Plug 'tmhedberg/SimpylFold' +"Plug 'tpope/timl' +"Plug 'tpope/vim-fugitive' +"Plug 'tpope/vim-markdown' +"Plug 'tpope/vim-surround' +"Plug 'Valloric/YouCompleteMe' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +"Plug 'vim-latex/vim-latex' +"Plug 'vim-scripts/indentpython.vim' +"Plug 'vim-scripts/pydoc.vim' +"Plug 'vim-scripts/vim-R-plugin' +Plug 'vimwiki/vimwiki' +"Plug 'wincent/command-t' +"Plug 'WolfgangMehner/vim-plugins' +" +" All Plugins must be added before the following line +" +call plug#end() " required +" +" +filetype on +" +" }}} +" +" ================================= +" +"" GUI Settings ---------------------- {{{ +"" + "" GVIM- (here instead of .gvimrc) + "if has('gui_running') + "set lines=40 + "colorscheme zenburn + + "if has("gui_gtk2") + "set guifont=Inconsolata\ 15 + "elseif has("gui_macvim") + "set guifont=Inconsolata-dz:h14 + "endif + + "set guicursor=n-v-c:block-Cursor + "else + "set background=dark + "set t_Co=256 + "colorscheme wombat256i + + "endif + +"" +"" }}} +"" +"" ================================= +"" + "General Settings ------ {{{ +"" + +let mapleader="," +let maplocalleader=" " + +set autowrite +set columns=100 +set dictionary+=/usr/share/dict/words +set foldlevel=0 "0=all folds closed; 99=all folds open +set foldmethod=marker +"set g:python3_host_prog=/usr/bin/python3 +"set g:python2_host_prog=/usr/bin/python2 +set hidden +"set lines=40 +set nobackup +set nowritebackup +set number +set omnifunc=syntaxcomplete#Complete +set shiftwidth=4 +set showmatch +set showmode +set title +""set t_RV= "surpress terminal version query from vim +"set visualbell +set wildmode=list,longest,full +"" +"" }}} +"" +"" ================================= +"" +"" General Key Bindings ----- {{{ +"" + +"noremap <C-F11> :NERDTreeToggle <CR> +"nnoremap <leader>n :NERDTreeToggle <CR> + +"noremap <C-M> :make %<CR> +"noremap <C-F5> :setlocal spell! spelllang = en_gb<CR> + +"noremap <C-\> :tab split <CR>exec("tag ".expand("<cword>"))<CR> +"noremap <A-]> :vsp <CR>exec("tag ".expand("<cword>"))<CR> + +"nnoremap <leader>a :Ag<CR> + +"noremap <C-F3> <ESC>:set guifont=*<CR> +"nnoremap <leader>f :set guifont=Monospace\ 12<CR> +"nnoremap <leader>F :set guifont=Monospace\ 15<CR> +"nnoremap <leader>[ :tabprevious<CR> +"nnoremap <leader>] :tabnext<CR> + +"" clears highlighted search results +"nnoremap <Esc> :nohlsearch <CR><Esc> + +""cd to current working directory +"nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR> + +"" edit vimrc file +"nnoremap <leader>v :edit $MYVIMRC<CR> +"" +""If you forget to sudo before calling vim use the following to be +""able to write the file. +"cnoremap w!! %!sudo tee > /dev/null % + +""open with @locate or find command +""tutorial video: https://www.youtube.com/watch?v=X0KP15O006M +"noremap <leader>o :exec '!xdg-open ' . shellescape(getline('.')) <CR><CR> +"noremap <leader>mp :exec '!mplayer ' . shellescape(getline('.')) <CR><CR> +"noremap <leader>yp :exec '!mplayer $(youtube-dl -g ' . shellescape(getline('.')) . ')' <CR><CR> + +""See docstrings for folded code +"let g:SimpylFold_docstring_preview=1 + +""Toggle relative numbering, and set to absolute on loss of focus or insert +""mode + +"set rnu +"function! ToggleNumbersOn() + "set nonumber! + "set norelativenumber! +"endfunction +"function! ToggleAbsoluteOn() + "set nu! + "set rnu +"endfunction +"function! ToggleRelativeOn() + "set rnu! + "set nu +"endfunction +"autocmd FocusGained * call ToggleRelativeOn() +"autocmd FocusLost * call ToggleRelativeOn() +"autocmd InsertLeave * call ToggleRelativeOn() +"autocmd InsertEnter * call ToggleRelativeOn() +"nmap <Leader>l :call ToggleNumbersOn()<CR> + +"""" SYSTEM CLIPBOARD COPY AND PASTE SUPPORT """ +"set pastetoggle=<F2> "F2 before pasting to preserve indentation +""copy/paste to/from clipboard +"vnoremap <C-c> "*y +"map <silent><Leader>p :set paste<CR>o<Esc>"*]p:set nopaste<CR>" +"map <silent><Leader><S-p> :set paste<CR>O<Esc>"*]p:set nopaste<CR>" + +"" +"" ================================= +"" +"" Ranger File Browser in Vim ----- {{{ +"" http://www.everythingcli.org/use-ranger-as-a-file-explorer-in-vim/ +"function! g:RangerExplorer() + "exec "silent !ranger --choosefile=/tmp/vim_ranger_current_file " . + "expand("%:p:h") + "if filereadable('/tmp/vim_ranger_current_file') + "exec 'edit ' . system('cat /tmp/vim_ranger_current_file') + "call system('rm /tmp/vim_ranger_current_file') + "endif + "redraw! +"endfunction +"noremap <Leader>re :call g:RangerExplorer()<CR> +"" }}} +"" +"" +"" ================================= + +"" +""Manage multiple windows +""nnoremap <leader>W :call g:VGGToggleWindowFixedWidth()<CR> +""nnoremap <leader>H :call g:VGGToggleWindowFixedHeight()<CR> +"nnoremap <leader>W :call g:VGGAutoWindowResize()<CR> +"" }}} +"" +"" ================================= +"" +"" Eclim Settings ------ {{{ +"" +"" ================================= +"" + +"" Status line setting +"let g:EclimProjectStatusLine = 'eclim(p=${name}, n=${natures})' + +"let g:EclimProjectTreeAutoOpen=1 +"let g:EclimLocateFileNonProjectScope = 'ag' + +"" +"" }}} +"" +"" ================================= +"" +"" Status Line ----- {{{ +"" +"function! Local_AirlineThemePatcher(palette) + "" Trick to ensure 'Normal' highlight group exists + "if !hlexists('Normal') + "highlight Normal ctermbg=0 + "endif +"endfunction + +"let g:airline_theme='luna' + +"if !exists('g:airline_symbols') + "let g:airline_symbols = {} +"endif + +"let g:airline_powerline_fonts = 1 +"let g:airline_left_sep = '' +"let g:airline_left_alt_sep = '' +"let g:airline_right_sep = '' +"let g:airline_right_alt_sep = '' +"let g:airline_symbols.branch = '' +"let g:airline_symbols.readonly = '' +"let g:airline_symbols.linenr = '' +"let g:airline#extensions#tabline#enabled = 1 +"let g:airline#extensions#whitespace#enabled = 0 + +"set timeoutlen=300 ttimeoutlen=0 +"set laststatus=2 "Always display status line +"set statusline=%F "Full path to the file +"set statusline+=\ -\ "Separator +"set statusline+=%-4{fugitive#statusline()} "If using git, show + ""branch being used + ""in status line. +"set statusline+=%-4{eclim#project#util#ProjectStatusLine()} " If using + "" eclim, show project + "" status line +"set statusline+=%= "Switch to the right side +"set statusline+=%l "Current line +"set statusline+=/ " Separator +"set statusline+=%L "Total lines + +"" +"" }}} +"" +"" ================================= +"" +"" Vimscript file settings ------------ {{{ +"" +"augroup filetype_vim + "autocmd! + "autocmd FileType vim setlocal foldmethod=marker + "" Source the vimrc file after saving it + "if has("autocmd") + "autocmd! bufwritepost $MYVIMRC nested :source $MYVIMRC + "endif + "function! g:VGGToggleWindowFixedWidth() + ":set winfixwidth! + "if &l:winfixwidth + "echo "Fixed Window Width ON" + "else + "echo "Fixed Window Width OFF" + "endif + "endfunction + "function! g:VGGToggleWindowFixedHeight() + ":set winfixheight! + "if &l:winfixheight + "echo "Fixed Window Height ON" + "else + "echo "Fixed Window Height OFF" + "endif + "endfunction + "function! g:VGGAutoWindowResize() + "if winwidth == 100 || winheight == 40 + "set nowinfixwidth nowinfixheight + "set noequalalways eadirection=both + "set winminwidth=1 winminheight=1 + "set winwidth=9999 winheight=999 + "set helpheight=999 cmdwinheight=999 previewheight=999 + "echo "Window Defaults ON" + "else + "set nowinfixwidth nowinfixheight + "set equalalways eadirection=both + "set winminwidth=1 winminheight=0 + "set winwidth=100 winheight=40 + "set helpheight=20 cmdwinheight=7 previewheight=12 + "echo "Window Defaults OFF" + "endif + "endfunction +"augroup END +"" +"" }}} +"" +"" ================================= +"" +"" Javascript file settings ------------ {{{ +"" +"augroup filetype_js + "autocmd! + "autocmd FileType javascript setlocal foldmethod=marker omnifunc=javascriptcomplete#CompleteJS +"augroup END +"" +"" }}} +"" +"" ================================= +"" +"" Omnicompletion and SuperTab settings ------- {{{ +"" +"inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>" +"inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" +"inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>" +"inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>" +"inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>" +"inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>" + +"let g:SuperTabDefaultCompletionType="context" + +""YouCompleteMe +"let g:ycm_autoclose_preview_window_after_completion=1 +"noremap <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR> + +"" +"" Automatically open and close the popup menu / preview window +"" + +"au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif +"set completeopt=menuone,menu,longest,preview + +"" +"" }}} +"" +"" ================================= +"" +"" Taglist Settings ---- {{{ +"" +"" Taglist variables +"" +"set tags+=./tags;/ +"set tags+=$HOME/Computing/Sandbox/tags +"" +""can verify taglist is correct via +"": set verbose tags?" command + +"" +"" Display function name in status bar: +"" +"let g:ctags_statusline=1 +"" +"" Automatically start script +"" +"let generate_tags=1 +"" +"" Displays taglist results in a vertical window: +"" +"let Tlist_Use_Horiz_Window=0 +"" +"" Shorter commands to toggle Taglist display +"" +"nnoremap TT :TlistToggle<CR> +"nnoremap <C-S-F11> :TlistToggle<CR> +"noremap <C-S-F12> :call g:VGGCTagsGenerate()<CR> + +"function! g:VGGCTagsGenerate() + ":!ctags -R --c++-kinds=+pl --fields=+iaS --extra=+q . + ":!ctags -R --c-kinds=+pl --fields=+iaS --extra=+q . + ":!ctags -R --Fortran-kinds=+iL --fields=+iaS --extra=+q . + ":!ctags -R --Python-kinds=+cfimv --fields=+iaS --extra=+q . + ":!ctags -R --Vim-kinds=+acfmv --fields=+iaS --extra=+q . + "echo "cTags generated..." +"endfunction +"" +"" Various Taglist diplay config: +"" +"let Tlist_Use_Left_Window=1 +"let Tlist_Compact_Format=1 +"let Tlist_Exit_OnlyWindow=1 +"let Tlist_GainFocus_On_ToggleOpen=1 +"let Tlist_File_Fold_Auto_Close=1 +"let Tlist_WinWidth=20 + +"" +"" }}} +"" +"" ================================= +"" +""Tagbar Settings ---- {{{ +"" +""Toggle Tagbar window +"let g:tagbar_width=20 +"let g:tagbar_zoomwidth=0 +"nnoremap <F7> :TagbarToggle<CR> +"" +"" }}} +"" +"" ================================= +"" +""Some Python settings:------------------- {{{ + +"augroup filetype_py + "" Clears the group each time vimrc is sourced + "" to prevent multiple definitions of the same autocmd + "" + "autocmd! + "" + "autocmd FileType python set omnifunc=pythoncomplete#Complete + "autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class + "autocmd BufRead, BufNewFile *.py + "\ set tabstop=4 + "\ set softtabstop=4 + "\ set shiftwidth=4 + "\ set textwidth=79 + "\ set expandtab + "\ set autoindent + "\ set fileformat=unix + + "" + "" This will allow you to check the syntax of your entire file + "" by typing :make. You can the get a list of errors with :clist + "" and move between the errors with :cn and :cp. + "" + "autocmd BufRead *.py set makeprg=python\ -c\ \"import\ py_compile,sys;\ sys.stderr=sys.stdout;\ py_compile.compile(r'%')\" + "autocmd Bufwrite *.(py) : call Pyflakes() + "autocmd BufRead *.py set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m + + "" Execute pydoc on the current word in the file being edited +"" autocmd FileType python noremap <buffer> K : execute "!xterm -e 'pydoc " . expand("<cword>") . "'"<CR> + "" Execute file being edited with <Command> + e: +"" noremap <buffer> <C-e> :w\|!/usr/bin/env python % <CR> + +"let g:pydiction_location="~/.vim/bundle/pydiction/complete-dict" +"let g:pyflakes_use_quickfix=0 +"let g:pep8_map="<leader>8" +"" +"" For full syntax highlighting: +"" +"let python_highlight_all=1 +"syntax on + +"" +""pymode +"" +"let g:pymode_python = 'python3' +"" +"" jedi-vim settings +"" + +"let g:jedi#goto_command = "<LocalLeader>d" +"let g:jedi#use_splits_not_buffers = "right" +"let g:jedi#goto_assignments_command = "<LocalLeader>G" +"let g:jedi#goto_definitions_command = "<LocalLeader>GG" +"let g:jedi#documentation_command = "K" +"let g:jedi#usages_command = "<LocalLeader>n" +"let g:jedi#completions_command = "<C-Space>" +"let g:jedi#rename_command = "<LocalLeader>r" +"let g:jedi#show_call_signatures = 2 +"" +"" +"" screen stuff +"" +"let g:ScreenImpl = "Tmux" +"let g:ScreenShellTmuxInitArgs = '-2' +"let g:ScreenShellSendPrefix = '' +"let g:ScreenShellSendSufix = '' + + +"" Open an IPython3 shell. +"autocmd FileType python map <LocalLeader>p :IPython!<CR> + +"" Close whichever shell is running. +"autocmd FileType python map <LocalLeader>q :ScreenQuit<CR> + +"" Send current line to python and move to next line. +"autocmd FileType python map <LocalLeader>v :ScreenSend<CR>0j + +"" Send a <CR> to ipython. +"autocmd FileType python map <LocalLeader>cr :call g:ScreenShellSend("\r")<CR> + +"" Clear the screen. +"autocmd FileType python map <LocalLeader>L :call g:ScreenShellSend('!clear')<CR> +"" +"" Using tslime2 to send python code to ipython +"" press vip to select current paragraph then press <C-c><C-c> and this sends +"" the code to ipthon. This also works sending current line and any selected text +"" +"" cellmode +"" +"let g:cellmode_use_tmux=1 +"let g:cellmode_tmux_windowname='' +"let g:cellmode_tmux_panenumber=2 +"" +"" Vimux +"" + +"function! VimuxSlime() + "call VimuxSendText(@v) + "call VimuxSendKeys("Enter") +"endfunction + +""If text is selected save it in the v buffer and send that buffer to tmux +""vmap <LocalLeader>k \"vy :call VimuxSlime()<CR> + +""Select current paragraph and send that it to tmux +""nmap <LocalLeader>x vip<LocalLeader>vs<CR> +"" Execute py tests +"" +"nnoremap <silent><leader>ptf <Esc>:Pytest file<CR> +"nnoremap <silent><leader>ptc <Esc>:Pytest class<CR> +"nnoremap <silent><leader>ptm <Esc>:Pytest method<CR> +"" +"" Cycle through test errors +"" +"nnoremap <silent><leader>ptn <Esc>:Pytest next<CR> +"nnoremap <silent><leader>ptp <Esc>:Pytest previous<CR> +"nnoremap <silent><leader>pte <Esc>:Pytest error<CR> + +"augroup END + +"" +"" }}} +"" +"" ================================= +"" +"" Latex Settings ----- {{{ +"" +"" IMPORTANT: grep will sometimes skip displaying the file name if you +"" search in a singe file. This will confuse Latex-Suite. Set your grep +"" program to always generate a file-name. + +"set grepprg=grep\ -nH\ $* + +"" OPTIONAL: Starting with Vim 7, the filetype of empty .tex files +"" defaults to 'plaintex' instead of 'tex', which results in vim-latex +"" not being loaded. The following changes the default filetype back +"" to 'tex': + +"let g:tex_flavor='latex' +"" +"" }}} +"" +"" ================================= +"" +"" Man Pages Settings ----- {{{ +"" +"" Set up the reading of manpages from within vim (use :Man whatever) + +"au BufNewFile,BufRead *.js, *.html, *.css + "\ set tabstop=2 + "\ set softtabstop=2 + "\ set shiftwidth=2 + +"" +"" }}} +"" +"" ================================= +"" +"" Ag Settings ----- {{{ +"" +"" ag.vim is a plugin for vim which allows you to search over files using the +"" silver searcher (ag). +"" +"" Usage +"" +"" :Ag [options] pattern [directory] +"" +"" The :Ag command provides several features to make running ag easier: +"" +"" :Ag supports command completion of: +"" +"" - patterns from search history: hit <tab> when starting +"" to run :Ag and you can choose from a list of 10 of your most +"" recent searches. A common use case while editing code could be to +"" hit * on a function name to search for occurrences in the current +"" file, then to run :Ag <tab> to search for the function across all +"" files. +"" - ag options: If you type - and then hit <tab>, you can +"" scroll through all the ag.vim supported ag options. +"" - file/directory name to search in: Once you've +"" supplied a search pattern, the next argument to +"" :Ag is an optional directory or file to search in +"" and you can make use of <tab> completion to choose +"" that file or directory. +"" ag.vim also registers itself as a backend for eclim's :LocateFile functionality. You +"" can even set ag as the default for non-eclim projects by adding the following to your vimrc: +"" +"" let g:EclimLocateFileNonProjectScope = 'ag' + + "let g:AgSmartCase=1 +"" +"" }}} +"" ================================= +"" +"" Vim Wiki Settings ----- {{{ +"" +"" vimwiki - Personal wiki for vim +"" https://github.com/vikiwiki/vimwik + +"" vimwiki with markdown support + +"let g:vimwiki_list = [{'path': '$HOME/vimwiki', + "\ 'syntax': 'markdown', + "\ 'ext': '.md'}] + +"" help-page -> :h vimwiki-syntax + +""vim-instant-markdown - Instant markdown previews from vim +"" https://github.com/suan/vim-instant-markdown + +"let g:instant_markdown_autostart = 0 " disable autostart +"noremap <LocalLeader>md :InstantMarkdownPreview<CR> + +"" +"" }}} +"" +"" ================================= +"" +"" FZF Settings ----- {{{ +"" +"function! FzfOmniOmniFiles() + "let is_git = system('git status') + "if v:shell_error + ":Files + "else + ":GitFiles + "endif +"endfunction +"nnoremap <C-P> : call FzfOmniOmniFiles()<CR> + +"let g:fzf_files_options = + "\ '--preview "(coderay {} || cat {}) 2> /dev/null | head - '.&lines.'"' + +"" +"" }}} +"" +"" ================================= +"" +"" UltiSnips Settings ----- {{{ +"" +"" Trigger configuration. Do not use <tab> if you use +"" https://github.com/Valloric/YouCompleteMe. + +"let g:UltiSnipsExpandTrigger="<LocalLeader>s" +"let g:UltiSnipsJumpForwardTrigger="<C-S-b>" +"let g:UltiSnipsJumpBackwardTrigger="<C-S-z>" + +"" If you want :UltiSnipsEdit to split your window. +"let g:UltiSnipsEditSplit="vertical" + +"" +"" }}} +"" +"" ================================= +"" +"" CtrlP Settings ----- {{{ +"" +"let g:ctrlp_map = '<c-p>' +"" +"" }}} +"" +"" ================================= +"" +"" ================================= +"" +runtime ftplugin/man.vim +"" + "================================= diff --git a/.config/pyradio/config b/.config/pyradio/config new file mode 100644 index 0000000..b79dcea --- /dev/null +++ b/.config/pyradio/config @@ -0,0 +1,89 @@ +# PyRadio Configuration File + +# Player selection +# This is the eqivelant to the -u , --use-player command line parameter +# Specify the player to use with PyRadio, or the player detection order +# Example: +# player = vlc +# or +# player = vlc,mpv, mplayer +player = mpv, mplayer, vlc + +# Default playlist +# This is the playlist to open if none is specified +# You can scecify full path to CSV file, or if the playlist is in the +# config directory, playlist name (filename without extension or +# playlist number (as reported by -ls command line option) +default_playlist = stations + +# Default station +# This is the equivalent to the -p , --play command line parameter +# The station number within the default playlist to play +# Value is 1..number of stations, "-1" or "False" means no auto play, +# "0" or "Random" means play a random station +default_station = False + +# Default encoding +# This is the encoding used by default when reading data provided by +# a station (such as song title, etc.) If reading said data ends up +# in an error, 'utf-8' will be used instead. +# +# A valid encoding list can be found at: +# https://docs.python.org/2.7/library/codecs.html#standard-encodings +# replacing 2.7 with specific version: +# 3.0 up to current python version. +# +# Default value: utf-8 +default_encoding = utf-8 + +# Connection timeout +# PyRadio will wait for this number of seconds to get a station/server +# message indicating that playback has actually started. +# If this does not happen (within this number of seconds after the +# connection is initiated), PyRadio will consider the station +# unreachable, and display the "Failed to connect to: [station]" +# message. +# +# Valid values: 5 - 60 +# Default value: 10 +connection_timeout = 10 + +# Default theme +# Hardcooded themes: +# dark (default) (8 colors) +# light (8 colors) +# dark_16_colors (16 colors dark theme alternative) +# light_16_colors (16 colors light theme alternative) +# black_on_white (bow) (256 colors) +# white_on_black (wob) (256 colors) +# Default value = 'dark' +theme = dark + +# Transparency setting +# If False, theme colors will be used. +# If True and a compositor is running, the stations' window +# background will be transparent. If True and a compositor is +# not running, the terminal's background color will be used. +# Valid values: True, true, False, false +# Default value: False +use_transparency = False + + +# Playlist management +# +# Specify whether you will be asked to confirm +# every station deletion action +# Valid values: True, true, False, false +confirm_station_deletion = True + +# Specify whether you will be asked to confirm +# playlist reloading, when the playlist has not +# been modified within Pyradio +# Valid values: True, true, False, false +confirm_playlist_reload = True + +# Specify whether you will be asked to save a +# modified playlist whenever it needs saving +# Valid values: True, true, False, false +auto_save_playlist = False + diff --git a/.config/pyradio/stations.csv b/.config/pyradio/stations.csv new file mode 100644 index 0000000..907aa3b --- /dev/null +++ b/.config/pyradio/stations.csv @@ -0,0 +1,35 @@ +
+BBC Radio1,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p
+BBC Radio2,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio2_mf_p
+BBC Radio3,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_p
+BBC Radio4,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4fm_mf_p
+BBC Radio4x,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4extra_mf_p
+Radio5Live,http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio5live_mf_p
+ClassicFM,http://media-ice.musicradio.com/ClassicFMMP3
+TalkSport,http://webradio.radiomonitor.com/stream/talksport
+Alternative (BAGeL Radio - SomaFM),http://somafm.com/bagel.pls
+Alternative (The Alternative Project),http://c9.prod.playlists.ihrhls.com/4447/playlist.m3u8
+American Roots (Boot Liquor - SomaFM),http://somafm.com/bootliquor.pls
+Celtic (ThistleRadio - SomaFM),http://somafm.com/thistle.pls
+Chillout (Groove Salad - SomaFM),http://somafm.com/startstream=groovesalad.pls
+Commodore 64 Remixes (Slay Radio),http://www.slayradio.org/tune_in.php/128kbps/listen.m3u
+Covers (SomaFM),http://somafm.com/covers.pls
+Downtempo (Secret Agent - SomaFM),http://somafm.com/secretagent.pls
+Dub Step (Dub Step Beyond - SomaFM),http://somafm.com/dubstep.pls
+Electronic/Dance (Electronic Culture),http://www.shouted.fm/tunein/electro-dsl.m3u
+Folk (Folk Forward - SomaFM),http://somafm.com/folkfwd.pls
+Hip Hop (Hot 97 NYC),http://playerservices.streamtheworld.com/pls/WQHTAAC.pls
+Hip Hop (Power 1051 NYC),http://c11.prod.playlists.ihrhls.com/1481/playlist.m3u8
+House (Beat Blender - SomaFM),http://somafm.com/startstream=beatblender.pls
+Indie Pop (Indie Pop Rocks! - SomaFM),http://somafm.com/indiepop130.pls
+Intelligent dance music (Cliq Hop - SomaFM),http://somafm.com/startstream=cliqhop.pls
+Jazz (Sonic Universe - SomaFM),http://somafm.com/startstream=sonicuniverse.pls
+Lounge (Illinois Street Lounge - SomaFM),http://somafm.com/illstreet.pls
+Pop (PopTron! - SomaFM),http://somafm.com/poptron.pls
+Pop/Rock/Urban (Frequence 3 - Paris),http://streams.frequence3.net/hd-mp3.m3u
+Progressive (Tags Trance Trip - SomaFM),http://somafm.com/tagstrance.pls
+Public Radio (WNYC - Public Radio from New York to the World),http://wnyc-iheart.streamguys.com/wnycfm-iheart.aac
+Reggae Dancehall (Ragga Kings),http://www.raggakings.net/listen.m3u
+Rock (Digitalis - SomaFM),http://somafm.com/digitalis.pls
+Vox Noctem: Rock-Goth,http://r2d2.voxnoctem.de:8000/voxnoctem.mp3
+Beyond Metal (Progressive - Symphonic),http://streamingV2.shoutcast.com/BeyondMetal
diff --git a/.config/qutebrowser/Archive/alias.txt b/.config/qutebrowser/Archive/alias.txt new file mode 100644 index 0000000..a768263 --- /dev/null +++ b/.config/qutebrowser/Archive/alias.txt @@ -0,0 +1,2 @@ + c.aliases = { 'w': 'session-save', 'q': 'quit', 'wq': 'quit --save', 'qtb': 'open https://www.qutebrowser.org/', 'mbt': 'open t https://signin1.bt.com/login/emailloginform', 'Ombt': 'open -t https://signin1.bt.com/login/emailloginform', 'nx': 'open http://next-episode.net/', 'Onx': 'open -t http://next-episode.net/', 'gk': 'open https://gameknot.com/', 'Ogk': 'open -t https://gameknot.com/', 'yt': 'open https://youtube.com', 'Oyt': 'open -t https://youtube.com', 'Y': 'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', 'OY': 'open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', '1337': 'open https://1337x.to/home', 'O1337': 'open -t https://1337x.to/home', 'ez': 'open https://eztv.ag', 'Oez': 'open -t https://eztv.ag', 'tz': 'open https://extratorrent.ag', 'Otz': 'open -t https://extratorrent.ag', 'tpb': 'open https://thepiratebay.org/', 'Otpb': 'open -t https://thepiratebay.org/', 'Nm': 'open https://netmail.herts.ac.uk/', 'ONm': 'open -t https://netmail.herts.ac.uk/' } + diff --git a/.config/qutebrowser/Archive/search.txt b/.config/qutebrowser/Archive/search.txt new file mode 100644 index 0000000..e91a46c --- /dev/null +++ b/.config/qutebrowser/Archive/search.txt @@ -0,0 +1,2 @@ + c.url.searchengines = { 'DEFAULT': 'https://duckduckgo.com/?q={}', 'aw': 'https://wiki.archlinux.org/?q={}', 'g': 'https://www.google.com/?q={}' } + diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml new file mode 100644 index 0000000..b2419ef --- /dev/null +++ b/.config/qutebrowser/autoconfig.yml @@ -0,0 +1,12 @@ +# If a config.py file exists, this file is ignored unless it's explicitly loaded +# via config.load_autoconfig(). For more information, see: +# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml +# DO NOT edit this file by hand, qutebrowser will overwrite it. +# Instead, create a config.py - see :help for details. + +config_version: 2 +settings: + content.javascript.enabled: + '*://*.next-episode.net/*': false + content.notifications: + https://1337x.to: false diff --git a/.config/qutebrowser/bookmarks/urls b/.config/qutebrowser/bookmarks/urls new file mode 100755 index 0000000..1d2c584 --- /dev/null +++ b/.config/qutebrowser/bookmarks/urls @@ -0,0 +1,272 @@ +https://www.ifixit.com/Guide/HP+TouchPad+Battery+Replacement/6082 HP TouchPad Battery Replacement - iFixit +http://opensecuritytraining.info/LifeOfBinaries.html LifeOfBinaries +http://stackoverflow.com/questions/20027990/how-can-i-get-text-section-from-pe-file-using-pefile python - How can I get .text section from PE file using pefile - Stack Overflow +http://what-when-how.com/windows-forensic-analysis/executable-file-analysis-windows-forensic-analysis-part-2/ Executable File Analysis (Windows Forensic Analysis) Part 2 +http://stackoverflow.com/questions/2363483/python-slicing-a-very-large-binary-file Python: slicing a very large binary file - Stack Overflow +http://stackoverflow.com/questions/39312720/python-extract-text-from-struct-or-binary-file Python extract text from Struct, or binary file - Stack Overflow +https://www.poftut.com/use-linux-xxd-command-tutorial-hex-binary-operations-example/ How To Use Linux Xxd Command Tutorial For Hex and Binary Operations With Example? - Poftut +http://stackoverflow.com/questions/28627349/offset-when-reading-binary-file-in-python binaryfiles - Offset when reading binary file in python - Stack Overflow +http://stackoverflow.com/questions/18954596/python-reading-binary-file-with-offsets-and-structs Python - Reading binary file with offsets and structs - Stack Overflow +http://stackoverflow.com/questions/3299213/python-how-can-i-open-a-file-and-specify-the-offset-in-bytes Python - How can I open a file and specify the offset in bytes? - Stack Overflow +http://stackoverflow.com/questions/35883044/python-2-7-11-how-to-read-big-binary-file-from-at-hex-offset Python 2.7.11: How to read (big) binary file from/at hex offset - Stack Overflow +qute://help/commands.html#unbind Commands +https://askubuntu.com/questions/534187/where-is-the-login-screen-wallpaper-for-gdm-stored 14.04 - Where is the login screen wallpaper for GDM stored? - Ask Ubuntu +file://${HOME}/Documents/Personal/bookmarks.html Bookmarks +https://heasarc.gsfc.nasa.gov/ HEASARC: NASA's Archive of Data on Energetic Phenomena +https://netmail.herts.ac.uk/ecp/?rfr=owa&owaparam=modurl%3D0&p=organize/AutomaticReplies.slab automatic replies - Outlook Web App +http://localhost:8889/notebooks/Sandbox/Python/Untitled.ipynb# Untitled +https://ctftime.org/ CTFtime.org / All about CTF (Capture The Flag) +http://overthewire.org/wargames/ OverTheWire: Wargames +https://stackoverflow.com/questions/38580647/how-to-create-a-directory-search-and-replace-with-vimscript-and-fzf vim - How to create a directory search and replace with vimscript and fzf - Stack Overflow +https://superuser.com/questions/1314397/how-to-search-file-contents-grep-ag-rg-using-fzf How to search file *contents* (grep/ag/rg) using FZF? - Super User +https://news.ycombinator.com/item?id=15514589 FZF and RipGrep – Navigate with bash faster than ever before | Hacker News +https://vi.stackexchange.com/questions/14242/how-to-call-the-fzf-ag-command-with-multiple-arguments/14246 vimscript - How to call the fzf Ag command with multiple arguments? - Vi and Vim Stack Exchange +http://eradman.com/entrproject/ entr(1) +http://harmful.cat-v.org/software/ All software sucks +https://suckless.org/rocks/ Stuff that rocks | suckless.org software that sucks less +https://github.com/ranger/ranger/wiki/Official-user-guide Official user guide · ranger/ranger Wiki +https://turses.readthedocs.io/en/latest/user/configuration.html Configuration — turses 0.3.1 documentation +http://vimdoc.sourceforge.net/htmldoc/message.html Vim documentation: message +http://stevelosh.com/blog/2012/10/the-homely-mutt/ The Homely Mutt / Steve Losh +http://www.mutt.org/doc/manual/#sidebar The Mutt E-Mail Client +http://www.samlogic.net/articles/smtp-commands-reference.htm SMTP Commands Reference (covers HELO/EHLO, MAIL, RCPT, DATA, RSET, VRFY, AUTH, STARTTLS etc) +https://medium.com/@insecurity_92477/ssh-shenanigans-the-good-the-bad-and-the-evil-16945ca72596 SSH Shenanigans — The good, the bad, and the evil – PROJECT INSECURITY – Medium +https://dzone.com/articles/ssh-from-the-ground-up SSH From the Ground Up - DZone Performance +http://flask.pocoo.org/ Welcome | Flask (A Python Microframework) +https://netmail.herts.ac.uk/owa/#path=/mail Graffagnino, Vito - Outlook Web App +http://www.therandymon.com/woodnotes/mutt/node24.html Configuring Mutt +http://www.therandymon.com/woodnotes/mutt/using-mutt.html The Woodnotes Guide to the Mutt Email Client +http://www.grameen-info.org/windows-7-professional-product-key-free-for-you/ Windows 7 Professional Product Key Free | Grameen Bank - Bank For The Poor +https://www.itechgyan.com/windows-7-professional-product-key-32-64-bit/ Windows 7 Professional Product Key for 32/64- bit - iTechGyan.com +https://www.thewindowsclub.com/disable-auto-activation-feature-windows-7-8 Disable Automatic Windows Activation popup in Windows 10/8/7 +https://dotfiles.github.io/ GitHub does dotfiles - dotfiles.github.io +https://developer.atlassian.com/blog/2016/02/best-way-to-store-dotfiles-git-bare-repo/ The best way to store your dotfiles: A bare Git repository - Atlassian Developers +https://stackoverflow.com/questions/49658760/convert-json-format-file-to-tsv-using-python convert json format file to tsv using python - Stack Overflow +https://gitlab.com/dwt1/dotfiles/blob/master/.config/vifm/vifmrc .config/vifm/vifmrc · master · Derek Taylor / dotfiles · GitLab +https://guides.fixato.org/weechat/ FiXato's Guide to WeeChat +https://www.linode.com/docs/applications/messaging/using-weechat-for-irc/ Using WeeChat for Internet Relay Chat +https://hugo.md/post/the-perfect-weechat-setup-2/ The Perfect Weechat Setup · Hugo's Blog +https://weechat.org/files/doc/devel/weechat_faq.en.html#irc_ssl_connection WeeChat FAQ (Frequently Asked Questions) +https://forum.xda-developers.com/hp-touchpad/help/how-to-install-android-7-x-hp-touchpad-t3512182/post69927244#post69927244 [ROM GUIDE] How to Install Android 9.x/8.1.x… | HP TouchPad +https://kevin.deldycke.com/2012/08/gmail-backup-mbsync/ Keep a Local Backup of Gmail Thanks to Mbsync | Kevin Deldycke +https://forum.xda-developers.com/showpost.php?p=52922166&postcount=64 [TOOLS] Touchpad Toolbox (updated 2015-02-25) - Post #64 +https://forum.xda-developers.com/hp-touchpad/help/guide-video-how-to-bypass-webos-t3636750 [Guide+Video]How to bypass WebOS activation … | HP TouchPad +https://forum.xda-developers.com/hp-touchpad/development/luneos-webos-ports-t2851450 LuneOS (webOS Ports) | HP TouchPad +https://forum.xda-developers.com/showthread.php?t=1426244 [Guide] Factory condition restoration / Down… | HP TouchPad +https://haveibeenpwned.com/ Have I Been Pwned: Check if your email has been compromised in a data breach +https://forum.xda-developers.com/showthread.php?t=2761381 DebiAndroid [WIP] - Debian native/chroot for… | HP TouchPad +https://indico.ict.inaf.it/event/720/ X-RAY ASTRONOMY 2019 (8-13 September 2019) · INDICO @ INAF (Indico) +https://docs.google.com/forms/d/e/1FAIpQLSf388FvDduVVNT0lLpSz0KrvGjlfuALvv6jnoLBen4bEh26TQ/viewform Chandra/CIAO Workshop, Bologna, Italy, 2019 +https://www.manualslib.com/download/880661/Bmw-318i.html Download BMW 318i Owner's Handbook Manual +https://complaint.resolver.co.uk/#/dashboard Resolver +https://www.moneysavingexpert.com/reclaim/ppi-loan-insurance/#resolver Reclaim PPI for Free: How to claim £1000s - MoneySavingExpert +https://eztv.io/ EZTV - TV Torrents Online Series Download | Official +https://miloserdov.org/?p=1088 Fast and simple method to bypass Captive Portal (hotspot with authorization on the web-interface) - Ethical hacking and penetration testing +https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png cheatsheet-big.png (3342×2060) +https://jdhao.github.io/2018/12/24/centos_nvim_install_use_guide_en/ A Complete Guide for Installing and Setting up Neovim for Python Development - jdhao's blog +https://stackoverflow.com/questions/54429210/how-do-i-prevent-conda-from-activating-the-base-environment-by-default bash - How do I prevent Conda from activating the base environment by default? - Stack Overflow +https://stackoverflow.com/questions/32611932/how-can-i-switch-using-pip-between-system-and-anaconda python - How can I switch using pip between system and anaconda - Stack Overflow +http://docs.plasmapy.org/en/latest/auto_examples/plot_dispersion_function.html#sphx-glr-download-auto-examples-plot-dispersion-function-py The plasma dispersion function — PlasmaPy 0.2.0 documentation +http://docs.plasmapy.org/en/latest/development/install_dev.html#setting-up-an-environment-for-development Installing PlasmaPy for Development — PlasmaPy 0.2.0 documentation +https://linuxhint.com/arch-linux-docker-tutorial/ Arch Linux Docker Tutorial – Linux Hint +https://stackoverflow.com/questions/45692255/how-make-openvpn-work-with-docker debian - How make openvpn work with docker - Stack Overflow +https://wiki.archlinux.org/index.php/Docker Docker - ArchWiki +https://linuxhint.com/docker_arch_linux/ How to Use Docker on Arch Linux – Linux Hint +https://docs.docker.com/get-started/ Orientation and setup | Docker Documentation +https://news.ycombinator.com/item?id=11071754 I use: git init --bare $HOME/.myconf alias config='/usr/bin/git --git-d... | Hacker News +https://www.atlassian.com/git/tutorials/dotfiles How to store dotfiles | Atlassian Git Tutorial +https://www.cgsecurity.org/wiki/Advanced_Find_ext2_ext3_Backup_SuperBlock Advanced Find ext2 ext3 Backup SuperBlock - CGSecurity +http://stevelosh.com/blog/2012/10/the-homely-mutt/#installing-offlineimap The Homely Mutt / Steve Losh +https://wiki.archlinux.org/index.php/Isync isync - ArchWiki +https://forums.webosnation.com/hp-veer/313841-webos-2-2-4-doctor-veer-t-wr-13.html webOS 2.2.4 Doctor for Veer for AT&T or WR - Page 13 - webOS Nation Forums +https://www.webos-internals.org/ WebOS Internals +http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images#Unpacking.2C_Editing.2C_and_Re-Packing_the_images HOWTO: Unpack, Edit, and Re-Pack Boot Images - Android Wiki +https://github.com/webos-internals/meta-doctor/blob/master/scripts/meta-att-touchpad-3.0.4 meta-doctor/meta-att-touchpad-3.0.4 at master · webos-internals/meta-doctor · GitHub +https://www.webos-internals.org/wiki/WebOS_Doctor_Versions WebOS Doctor Versions - WebOS Internals +https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-1-mbsync-msmtp-and-systemd/ Notmuch of a mail setup Part 1- mbsync, msmtp and systemd | Assorted Nerdery +https://blog.jpalardy.com/posts/my-best-awk-tricks/ My Best Awk Tricks | Jonathan Palardy's Blog +https://weechat.org/files/doc/devel/weechat_user.en.html#buffers_and_windows WeeChat user’s guide +https://www.irchelp.org/faq/irctutorial.html IRCHelp.org — An IRC Tutorial +http://learn.astropy.org/ Learn Astropy — astropy-tutorials v3.0.dev +https://unix.stackexchange.com/questions/315063/mount-wrong-fs-type-bad-option-bad-superblock ubuntu - mount: wrong fs type, bad option, bad superblock - Unix & Linux Stack Exchange +https://ubuntuforums.org/showthread.php?t=839579 [ubuntu] mount: wrong fs type, bad option, bad superblock on /dev/sdb1 +https://ubuntuforums.org/showthread.php?t=1245536&p=7822694#post7822694 [SOLVED] How to recover from a bad superblock +https://www.cyberciti.biz/tips/surviving-a-linux-filesystem-failures.html Surviving a Linux Filesystem Failures - nixCraft +https://major.io/2010/12/14/mounting-a-raw-partition-file-made-with-dd-or-dd_rescue-in-linux/ Mounting a raw partition file made with dd or dd_rescue in Linux :: major.io +http://www.garloff.de/kurt/linux/ddrescue/ dd_rescue +https://jcutrer.com/howto/how-to-install-youtube-dl-the-easy-way How to install youtube-dl (the easy way) - jcutrer.com +https://www.howtogeek.com/261591/how-to-create-and-run-bash-shell-scripts-on-windows-10/ How to Create and Run Bash Shell Scripts on Windows 10 +https://www.how2shout.com/how-to/install-youtube-dl-linux-macos.html How to install Youtube-dl on Linux and MacOS | H2S Media +https://overthewire.org/wargames/ OverTheWire: Wargames +https://wiki.webos-internals.org/wiki/Application:Navit Application:Navit - WebOS Internals +https://www.linux.com/tutorials/how-fix-mangled-partition-table-linux/ How to Fix a Mangled Partition Table on Linux - Linux.com +http://pragmaticemacs.com/emacs/migrating-from-offlineimap-to-mbsync-for-mu4e/ Migrating from offlineimap to mbsync for mu4e | Pragmatic Emacs +https://emacs-fu.blogspot.com/2012/08/introducing-mu4e-for-email.html emacs-fu: introducing mu4e, an e-mail client for emacs +http://cachestocaches.com/2017/3/complete-guide-email-emacs-using-mu-and-/ A Complete Guide to Email in Emacs using Mu and Mu4e +https://www.emacswiki.org/emacs/mu4e EmacsWiki: mu4e +https://pertuttirestaurant.co.uk/?utm_source=tripadvisor&utm_medium=referral Per Tutti Restaurant | Authentically Italian +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d732621-Reviews-La_Cosa_Nostra-St_Albans_Hertfordshire_England.html LA COSA NOSTRA, St Albans - Updated 2020 Restaurant Reviews, Photos & Phone Number - Tripadvisor +http://barmeze.co.uk/booking-confirmation.html Bar Meze - St Albans | Reservation confirmation +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d1742312-Reviews-L_Italiana-St_Albans_Hertfordshire_England.html L'ITALIANA, St Albans - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d9990284-Reviews-Per_Tutti_St_Albans-St_Albans_Hertfordshire_England.html PER TUTTI ST ALBANS - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d2318820-Reviews-Alloro-St_Albans_Hertfordshire_England.html ALLORO, St Albans - Updated 2020 Restaurant Reviews, Menu, Prices & Restaurant Reviews - Food Delivery & Takeaway - Tripadvisor +https://pertuttirestaurant.co.uk/book-berkhamsted/ BOOK BERKHAMSTED | Per Tutti Restaurant +https://www.tripadvisor.co.uk/Restaurant_Review-g186306-d11885339-Reviews-Carmelo_s-St_Albans_Hertfordshire_England.html CARMELO'S, St Albans - Updated 2020 Restaurant Reviews, Menu & Prices - Tripadvisor +https://dystroy.org/broot/ Broot +http://www.ss.ncu.edu.tw/~lyu/lecture_files_en/index.html lyu_lecture_ch +http://silas.psfc.mit.edu/introplasma/index.html Introduction to Plasma Physics +https://www.plasma-universe.com/ The Plasma Universe +http://farside.ph.utexas.edu/teaching/plasma/lectures/Plasmahtml.html Plasmahtml +https://spacephysics.ucla.edu/index.html UCLA IGPP Space Physics Exercises +https://www.slickremix.com/docs/get-api-key-for-youtube/# Get API Key for YouTube | SlickRemix +https://courses.edx.org/courses/course-v1:EPFLx+PlasmaIntroductionX+1T_2018/course/ Course | PlasmaIntroductionX | edX +https://www.justpark.com/dashboard/bookings/made/ Bookings | JustPark +https://homepages.spa.umn.edu/~kd/Ast4001-2015/NOTES/n052-saha-bradt.pdf +http://www.astro.wisc.edu/~townsend/resource/teaching/astro-310-F09/solutions-2009-10-05.pdf +http://www.astro.wisc.edu/~townsend/resource/teaching/astro-310-F11/solutions-2011-10-14.pdf +https://people.physics.tamu.edu/belyanin/astr314/lecture8.pdf +http://www.astro.umd.edu/~miller/teaching/astr601/lecture08.pdf +http://www.astro.caltech.edu/~jlc/ay123_2007/save_sol3_2007.pdf +https://leanpub.com/the-tao-of-tmux/read Read The Tao of tmux | Leanpub +https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook (Tutorial) Jupyter Notebook: The Definitive Guide - DataCamp +https://github.com/jakevdp/PythonDataScienceHandbook GitHub - jakevdp/PythonDataScienceHandbook: Python Data Science Handbook: full text in Jupyter Notebooks +https://jakevdp.github.io/PythonDataScienceHandbook/ Python Data Science Handbook | Python Data Science Handbook +https://irkernel.github.io/installation/#binary-panel Installation · IRkernel +https://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb Jupyter Notebook Viewer +https://4dcombat.thinkific.com/courses/4dcombat-online 4D Combat - Online Course +https://www.linode.com/docs/applications/messaging/using-weechat-for-irc/# Using WeeChat for Internet Relay Chat | Linode +https://realpython.com/courses/functional-programming-python/ Functional Programming in Python – Real Python +https://realpython.com/courses/how-to-publish-your-own-python-package-pypi/ How to Publish Your Own Python Package to PyPI – Real Python +https://realpython.com/courses/traditional-face-detection-python/ Traditional Face Detection With Python – Real Python +https://realpython.com/courses/cool-new-features-python-38/ Cool New Features in Python 3.8 – Real Python +https://realpython.com/account/purchases/ Your Purchases – Real Python +https://weechat.org/files/doc/stable/weechat_user.en.html#usage WeeChat user’s guide +https://weechat.org/scripts/ WeeChat :: scripts +https://github.com/GermainZ/weechat-vimode GitHub - GermainZ/weechat-vimode: A WeeChat script that adds vi-like modes, commands and keybindings. +https://github.com/wee-slack/wee-slack GitHub - wee-slack/wee-slack: A WeeChat plugin for Slack.com. Supports threads and reactions, synchronizes read markers, provides typing notification, etc.. +http://nemrod.se/guides/install-rpm-packages-on-arch-linux/ Install RPM packages on Arch Linux | nemrod.se +https://github.com/jupyter/jupyter/wiki/Jupyter-kernels Jupyter kernels · jupyter/jupyter Wiki · GitHub +https://www.docker.com/get-started Get Started with Docker | Docker +https://neovim.io/doc/user/nvim_terminal_emulator.html Nvim documentation: nvim_terminal_emulator +https://neovim.io/doc/user/ Nvim documentation: help +https://github.com/seebye/ueberzug GitHub - seebye/ueberzug: ueberzug is an alternative for w3mimgdisplay +https://github.com/seebye/fmui GitHub - seebye/fmui: fzf mpd user interface +https://hertfordshire.voxcharta.org/?s=aurora Search results for 'aurora' (page 1 of 6)Vox Charta +https://casa.nrao.edu/casa_obtaining.shtml CASA +https://ads.readthedocs.io/en/latest/ The ads Python package — ads 0.12.2 documentation +https://ui.adsabs.harvard.edu/ NASA/ADS +https://wiki.vifm.info/index.php?title=Quickstart_Tutorial Quickstart Tutorial - Vifm Wiki +https://arxiv.org/help/api/index arXiv API | arXiv e-print repository +https://github.com/junegunn/fzf/wiki/examples#search-for-academic-pdfs-by-author-title-journal-institution Examples · junegunn/fzf Wiki +https://www.reddit.com/r/neovim/comments/fu1omj/help_request_getting_deoplete_and_ultisnips_to/ [Help request] Getting deoplete and ultisnips to share completion key. : neovim +https://github.com/junegunn/fzf#preview-window junegunn/fzf: A command-line fuzzy finder +https://blog.thegate.ai/posts/20191113_configuring-neomutt-for-a-local-email-setup/ TheGate.AI | Blog | Creating a local email setup with mbsync + msmtp + neomutt + notmuch. +https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-2-notmuch-and-emacs/ Notmuch of mail a setup Part 2 - notmuch and Emacs | Assorted Nerdery +https://notmuchmail.org/mutttips/ mutttips +http://isync.sourceforge.net/ isync: free IMAP and MailDir mailbox synchronizer +https://notmuchmail.org/howto/ howto +https://neomutt.org/feature/notmuch Notmuch - NeoMutt +https://wiki.archlinux.org/index.php/Notmuch Notmuch - ArchWiki +https://guides.nyu.edu/c.php?g=601858&p=4168138 Templates - Getting Started with LaTeX - Research Guides at New York University +https://www.latex-tutorial.com/tutorials/bibtex/ Bibliography in LaTeX with Bibtex/Biblatex +https://www.math.ias.edu/computing/faq/local-latex-style-files Where can I put local latex style files and packages? | IAS School of Mathematics +https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages LaTeX/Installing Extra Packages - Wikibooks, open books for an open world +https://github.com/adsabs/adsabs-dev-api/blob/master/Search_API.ipynb adsabs-dev-api/Search_API.ipynb at master · adsabs/adsabs-dev-api +https://github.com/bibcure/bibcure bibcure/bibcure: Bibcure helps in boring tasks by keeping your bibfile up to date and normalized...also allows you to easily download all papers inside your bibtex +https://arxiv.org/help/api/index#using arXiv API | arXiv e-print repository +https://github.com/junegunn/fzf/wiki/examples#buku Examples · junegunn/fzf Wiki +https://pandoc.org/getting-started.html Pandoc - Getting started with pandoc +https://tmuxcheatsheet.com/ Tmux Cheat Sheet & Quick Reference +https://stackoverflow.com/questions/1550226/python-setup-py-uninstall python setup.py uninstall - Stack Overflow +https://notmuchmail.org/initial_tagging/ initial tagging +https://neomutt.org/guide/configuration.html#mbox-hook Configuration - NeoMutt +http://jazz-the-two-of-us.blogspot.com/ The Sound of Jazz : Download Jazz MP3 Album +http://cazadam.blogspot.com/p/blog-page.html CazAdam: Albums +https://listen-jazz-easily.blogspot.com/2009/01/charlie-parker-very-best.html#links Listen Jazz Easily : Download Jazz Album on Blogspot: Charlie Parker - The Very Best +https://catonmat.net/linux-and-vim-notes My Linux and Vim Notes +https://bestlifeonline.com/hilariously-silly-jokes/ 40 Hilarious Jokes You Can Tell Absolutely Anyone - Silly Jokes +https://null-byte.wonderhowto.com/ Null Byte — The aspiring white-hat hacker/security awareness playground « Null Byte :: WonderHowTo +https://www.alfashop.co.uk/ Home | AlfaShop +https://www.alfashop.co.uk/products/search?utf8=%E2%9C%93&f_search=manual&button= https://www.alfashop.co.uk/products/search?utf8=✓&f_search=manual&button= +https://www.aroc-uk.com/159-register/gallery 159 Register Gallery | Alfa Romeo Owners Club +http://www.ausalfa.com/viewtopic.php?f=4&t=9411#p157448 ausalfa.com • View topic - Installation of after-market head unit into 159/Brera/Spider +https://www.alfaowner.com/threads/head-unit-stereo-upgrade-instructions.931370/ Head Unit / stereo Upgrade Instructions | Alfa Romeo Forum +https://ntmlabs.com/w3m-tricks/ NTM Labs - W3M tricks of the trade +https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m/blob/master/documentation/functions.txt A-vim-like-firefox-like-configuration-for-w3m/functions.txt at master · felipesaa/A-vim-like-firefox-like-configuration-for-w3m +https://shells.red-pill.eu/ Free Shell Accounts :: the biggest list on the net - Rankings - All Sites +https://sdf.org/ SDF Public Access UNIX System - Free Shell Account and Shell Access +http://www.nyx.net/ Nyx +https://www.chrisatmachine.com/ Christian Chiarulli +https://www.manualslib.com/manual/628233/Alfa-Romeo-159.html ALFA ROMEO 159 OWNER'S MANUAL Pdf Download. +https://www.howtogeek.com/358166/using-android-without-google-a-kind-of-guide/ Using Android without Google: A (Kind of) Guide +https://android.stackexchange.com/questions/91628/how-to-remove-all-google-specific-apps-from-a-rooted-android applications - How to remove all Google-specific apps from a rooted Android? - Android Enthusiasts Stack Exchange +https://www.ducksters.com/jokes/silly.php Jokes for kids: big list of clean silly jokes +https://www.vpscheap.net/pricing.aspx Unmetered SSD and Budget VPS Hosting | VPSCheap.NET +https://www.thinkmoney.co.uk/credit-card/ Credit Cards UK | Apply for a Credit Card Online +https://tablesgenerator.com/ Create LaTeX tables online – TablesGenerator.com +http://detexify.kirelabs.org/classify.html Detexify LaTeX handwritten symbol recognition +https://outlook.office.com/mail/inbox Email - Vito Graffagnino - Outlook +https://www.androidjungles.com/how-to-unlock-bootloader-on-samsung-phones/ How to Unlock Bootloader on Samsung Phones +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-tw-wycked-os-v2-0-updated-11-05-2018-t3789168 [ROM TW][7.1.1][J5 2016] Wycked-OS v3.0 Fina… | Samsung Galaxy J5 +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-resurrection-remix-j5-2016-t3955181 [ROM][9]Resurrection Remix For J5 2016 | Samsung Galaxy J5 +https://www.getdroidtips.com/samsung-galaxy-j5-2016-stock-firmware/ Samsung Galaxy J5 2016 Stock Firmware Collections +https://forum.xda-developers.com/galaxy-nexus/guide-phone-backup-unlock-root-t1420351 [GUIDE] Full Phone Backup without Unlock or … | +https://appuals.com/fix-downloading-not-turn-off-target/ Fix: Downloading... Do not turn off target - Appuals.com +https://awesomedetect.com/flash-recovery-samsung-j5-2016-nougat-7-1-1/ Flash TWRP recovery in Samsung J5 2016 Nougat 7.1.1 without root – Awesome detect +https://www.droidviews.com/how-to-extract-pit-file-from-samsung-galaxy-devices/ Download Samsung PIT Files and Extract Them on Samsung Devices +https://www.full-repair-firmware.com/2017/10/full-firmware-j510fn.html Full Firmware For Device Samsung Galaxy J5 2016 SM-J510FN +https://www.full-repair-firmware.com/p/pit-files.html Pit Files +https://gearallnews.com/how-to-root-galaxy-j5-2016-sm-j510fn-and-install-twrp/ How To Root Galaxy J5 2016 SM-J510FN and Install TWRP +https://www.androidjungles.com/how-to-boot-into-fastboot-mode-on-samsung-phone/ How to Boot Into Fastboot Mode on Samsung Phone +https://www.androidsage.com/2017/07/12/list-of-samsung-galaxy-country-specific-product-code-csc-and-country-region/ List of Samsung Galaxy CSC Country Specific Product code and region they belong to +https://www.droidwin.com/root-android-devices-without-twrp-recovery/ How to Root Android Devices Without TWRP Recovery +https://rootmygalaxy.net/download-odin-tool-samsung-galaxy-devices-versions/ Download Samsung Odin Flash Tool (All Versions) for Windows +https://www.getdroidtips.com/best-magisk-modules-2020/ Best Magisk Modules You Should Try in 2020 +https://android.gadgethacks.com/how-to/install-microg-replace-google-play-services-prevent-data-mining-0193787/ How to Install MicroG to Replace Google Play Services & Prevent Data Mining « Android :: Gadget Hacks +https://acmarket.net/ ACMarket - Cracked Apps, Games, Mods for Android +https://apkmody.io/apps/titanium-backup-pro Titanium Backup Pro APK 8.4.0.2 (MOD Unlocked) Download +https://microg.org/download.html Download - microG Project +http://hex.ro/wp/blog/removing-gapps-from-cyanogenmod-11/ Removing gapps from Cyanogenmod 11 – and thus goes by another day +https://www.coinbase.com/join/smith_5to1 Buy/Sell cryptocurrency - Coinbase +https://www.vultr.com/features/datacenter-locations/#locations-map Largest Cloud Server Network Available - Vultr.com +https://my.vultr.com/ Log In - Vultr.com +https://stackpointer.io/mobile/android-adb-backup-extract-restore-repack/372/ Android ADB Backup, Extract, Restore - Stack Pointer +https://www.reddit.com/r/linux/comments/13nuda/poor_mans_vpn_with_ssh/ Poor man's VPN with ssh : linux +https://www.reddit.com/r/linux/comments/13nuda/poor_mans_vpn_with_ssh/?sort=new Poor man's VPN with ssh : linux +https://appmaildev.com/en/dkim DKIM Test - DKIM Verify - DKIM Validator +https://www.williamjbowman.com/blog/2015/07/24/setting-up-webdav-caldav-and-carddav-servers/ Setting up WebDAV, CalDAV, and CardDAV servers +https://jonathantutorial.blogspot.com/2014/10/how-to-set-up-radicale.html Jonathan Tutorials: How to set up a private Calendar and Contacts server (Radicale) on Ubuntu 14.04 LTS +https://doom.fandom.com/wiki/Doom_cheat_codes Doom cheat codes | Doom Wiki | Fandom +https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/ YouTube-DL the easy way on Android : Piracy +https://wiki.termux.com/wiki/Graphical_Environment Graphical Environment - Termux Wiki +https://www.techncyber.com/2019/08/kali-nethunter-in-termux.html How To use Kali Nethunter in Termux +https://www.reddit.com/r/linux/comments/66fh4f/what_do_you_use_termux_on_android_for/ What do you use Termux on android for? : linux +https://build.nethunter.com/kalifs/kalifs-latest/ Index of /kalifs/kalifs-latest/ +https://github.com/hiway/python-qutescript hiway/python-qutescript: Painless userscripts for qutebrowser. +qute://help/userscripts.html Writing qutebrowser userscripts +https://newsboat.org/releases/2.20.1/docs/newsboat.html#_query_feeds The Newsboat RSS Feedreader +https://hiphish.github.io/blog/2020/05/31/macho-man-command-on-steroids/ HiPhish's Workshop +https://www.verizon.com/support/knowledge-base-221536/ Palm - Factory Data Reset (Powered Off) | Verizon +https://devhints.io/bash Bash scripting cheatsheet +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/patcher-dualbootpatcher-j510-t3614376/page7 [PATCHER] DualBootPatcher for J510 - Pg. 7 | Samsung Galaxy J5 +https://new.myhermes.co.uk/track.html#/parcel/8017376759340718/details Track a parcel - MyHermes +https://forum.xda-developers.com/galaxy-j5/samsung-galaxy-j5-2016-roms-kernels-recoveries--other-development/rom-skies-a5ux-port-j510xx-hpm8294-t3586467 | ROM | | 6.0.X - 7.X.X | | J5 2016 all vari… | Samsung Galaxy J5 +https://musicasacra.com/music/latin-settings/ Latin Chant and Choral Music for the Mass | Church Music Association of America +http://docs.adaptivecomputing.com/torque/3-0-5/commands/qdel.php qdel +http://docs.adaptivecomputing.com/maui/commands/mjobctl.php#jobexp docs.adaptivecomputing.com/maui/commands/mjobctl.php#jobexp +http://docs.adaptivecomputing.com/torque/2-5-12/help.htm#topics/commands/qdel.htm qdel +https://leathermissalcovers.co.uk/index.php?route=product/product&path=61&product_id=82&limit=100 zipped leather cover +https://webgefrickel.de/blog/a-modern-mutt-setup-part-two A modern mutt setup — part two | webgefrickel +https://outlook.office.com/mail/options/mail/automaticReplies/automaticRepliesOption Email - Vito Graffagnino - Outlook +http://joshwalawender.github.io/IRAFtutorial/index.html Introduction to IRAF +http://iraf.noao.edu/tutorials/tutorials.html IRAF TUTORIALS AND EXERCISES +https://mkiminki.github.io/notes/irafinstall.html How To Install IRAF | Megan Kiminki +http://iraf.noao.edu/docs/src/pcix/unixsmg-toc.html#TOC UNIX/IRAF Site Manager's Guide +https://karlcordes.com/coreboot-x220/ Karl Cordes - How to flash coreboot on Lenovo X220 +https://leathermissalcovers.co.uk/index.php?route=common/home Leather Missal Covers +https://www.ifixit.com/Device/Lenovo_Thinkpad_X220 Lenovo Thinkpad X220 - iFixit +https://twrp.me/faq/datamedia.html What is a data/media device? +https://forum.xda-developers.com/android/general/guide-degoogle-device-install-microg-t4058743 [GUIDE] DeGoogle any device and install Micr… | Android Development and Hacking +https://herts365.sharepoint.com/sites/Toolkits Toolkits - Home +https://www.jeffgeerling.com/blogs/jeff-geerling/push-your-git-repositories Push your Git repositories to a central server, in a bare repository | Jeff Geerling +https://python-gitlab.readthedocs.io/en/stable/cli.html gitlab CLI usage — python-gitlab 2.5.0 documentation diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py new file mode 100644 index 0000000..742d6e1 --- /dev/null +++ b/.config/qutebrowser/config.py @@ -0,0 +1,1802 @@ +## Autogenerated config.py ## Documentation: ## qute://help/configuring.html ## qute://help/settings.html +# +# Read ~/.Xresources file for colours (see the help file listed above) +# import subprocess + +# def read_xresources(prefix): + # props = {} + # x=subprocess.run(['xrdb','-query'], stdout=subprocess.PIPE) + # lines = x.stdout.decode().split('\n') + # for line in filter(lambda l : l.startswith(prefix), lines): + # prop, _, value = line.partition(':\t') + # props[prop] = value + # return props + +# xresources = read_xresources('*') +# c.colors.statusbar.normal.bg = xresources['*.background'] + + +## This is here so configs done via the GUI are still loaded. +## Remove it to not load settings done via the GUI. +# config.load_autoconfig() + +## Aliases for commands. The keys of the given dictionary are the +## aliases, while the values are the commands they map to. +## Type: Dict + +c.aliases = {'w':'session-save', 'q':'quit', 'wq':'quit --save', + '1337':'open https://1337x.to/home/', + 'O1337':'open -t https://1337x.to/home/', + 'ads':'open https://ui.adsabs.harvard.edu/classic-form', + 'Oads':'open -t https://ui.adsabs.harvard.edu/classic-form', + 'an':'open https://neonalley.com', + 'Oan':'open -t https://neonalley.com', + 'am':'open https://amazon.co.uk', + 'Oam':'open -t https://amazon.co.uk', + 'bc':'open https://bitchute.com', + 'Obc':'open -t https://bitchute.com', + 'bs':'open https://brittssoulsp.blogspot.com', + 'Obs':'open -t https://brittssoulsp.blogspot.com', + 'bt':'open https://bitsnoop.com', + 'Obt':'open -t https://bitsnoop.com', + 'car':'open https://car.herts.ac.uk', + 'Ocar':'open -t https://car.herts.ac.uk', + 'cluster':'open https://uhhpc.herts.ac.uk/wiki/index.php/Main_Page', + 'Ocluster':'open -t https://uhhpc.herts.ac.uk/wiki/index.php/Main_Page', + 'cm':'open https://churchmilitant.com/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'Ocm':'open -t https://churchmilitant.com/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'do':'open https://www.divinumofficium.com/', + 'Odo':'open -t https://www.divinumofficium.com/', + 'eby':'open https://ebay.co.uk', + 'Oeby':'open -t https://ebay.co.uk', + 'epk':'open https://registrar.epik.com', + 'Oepk':'open -t https://registrar.epik.com', + 'ez':'open https://eztv.ag', + 'Oez':'open -t https://eztv.ag', + 'et':'open https://extratorrent.ag/', + 'Oet':'open -t https://extratorrent.ag/', + 'fp':'open https://fmapulse.com', + 'Ofp':'open -t https://fmapulse.com', + 'gh':'open https://geekprank.com/hacker/', + 'Ogh':'open -t https://geekprank.com/hacker/', + 'gfgf':'open https://www.giffgaff.com/auth/login', + 'Ogfgf':'open -t https://www.giffgaff.com/auth/login', + 'gk':'open https://gameknot.com/', + 'Ogk':'open -t https://gameknot.com/', + 'gn':'open https://uhhpc.herts.ac.uk/ganglia/', + 'Ogn':'open -t https://uhhpc.herts.ac.uk/ganglia/', + 'helpdesk':'open https://helpdesk.herts.ac.uk', + 'Ohelpdesk':'open -t https://helpdesk.herts.ac.uk', + 'hertshub':'open https://herts365.sharepoint.com/sites/HertsHub', + 'Ohertshub':'open -t https://herts365.sharepoint.com/sites/HertsHub', + 'hx':'open https://heasarc.gsfc.nasa.gov/', + 'Ohx':'open -t https://heasarc.gsfc.nasa.gov/', + 'ia':'open http://italiaautoparts.co.uk', + 'Oia':'open -t http://italiaautoparts.co.uk', + 'iso':'open https://isohunt.to', + 'Oiso':'open -t https://isohunt.to', + 'll':'open https://go.herts.ac.uk/LiL', + 'Oll':'open -t https://go.herts.ac.uk/LiL', + 'ls':'open https://lukesmith.xyz', + 'Ols':'open -t https://lukesmith.xyz', + 'lms':'open https://lms.org.uk', + 'Olms':'open -t https://lms.org.uk', + 'lt':'open https://www.limetorrents.cc', + 'Olt':'open -t https://www.limetorrents.cc', + 'mbt':'open https://signin1.bt.com/login/emailloginform', + 'Ombt':'open -t https://signin1.bt.com/login/emailloginform', + 'netgear':'open http://2.96.233.114:8080', + 'Onetgear':'open -t http://2.96.233.114:8080', + 'Nm':'open https://outlook.office365.com/', + 'ONm':'open -t https://outlook.office365.com/', + 'nx':'open https://next-episode.net/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'Onx':'open -t https://next-episode.net/ ;; fake-key --global tSH ;; fake-key --global tSH ', + 'pm':'open https://mail.protonmail.com/login', + 'Opm':'open -t https://mail.protonmail.com/login', + 'pv':'open https://www.pivotce.com/', + 'Opv':'open -t https://www.pivotce.com/', + 'qtb':'open https://www.qutebrowser.org/', + 'Oqtb':'open -t https://www.qutebrowser.org/', + 'qtc':'open https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png', + 'Oqtc':'open -t https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png', + 'rb':'open https://www.rarbg.to', + 'Orb':'open -t https://www.rarbg.to', + 'sms':'open https://freesmscode.com', + 'Osms':'open -t https://freesmscode.com', + 'sn':'open https://studynet.herts.ac.uk', + 'Osn':'open -t https://studynet.herts.ac.uk', + 'sp':'open https://stpaulcenter.com', + 'Osp':'open -t https://stpaulcenter.com', + 't1':'open https://uhfinance.t1cloud.com', + 'Ot1':'open -t https://uhfinance.t1cloud.com', + 'tb':'open https://www.torrentbit.net', + 'Otb':'open -t https://www.torrentbit.net', + 'tf':'open https://www.torrentfunk.com', + 'Otf':'open -t https://www.torrentfunk.com', + 'tl':'open https://www.torlock.com', + 'Otl':'open -t https://www.torlock.com', + 'tpb':'open https://thepiratebay.org/', + 'Otpb':'open -t https://thepiratebay.org/', + 'tz':'open https://torrentz2.eu/my', + 'Otz':'open -t https://torrentz2.eu/my', + 'vx':'open https://hertfordshire.voxcharta.org/', + 'Ovx':'open -t https://hertfordshire.voxcharta.org/', + 'vtr':'open https://my.vultr.com/', + 'Ovtr':'open -t https://my.vultr.com/', + 'wn':'open https://www.webosnation.com/', + 'Own':'open -t https://www.webosnation.com/', + 'Y':'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', + 'OY':'open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', + 'yfy':'open https://yts.am/', + 'Oyfy':'open -t https://yts.am/', + 'ytn':'open https://youtube.com/?disable_polymer=1', + 'Oytn':'open -t https://youtube.com/?disable_polymer=1', + 'yt':'open https://youtube.com/', + 'Oyt':'open -t https://youtube.com/', + 'rtr':'open -t http://192.168.1.254/home.htm ;; fake-key --global tSH '} +# +## Time interval (in milliseconds) between auto-saves of +## config/cookies/etc. +## Type: Int +# c.auto_save.interval = 15000 + +## Always restore open sites when qutebrowser is reopened. +## Type: Bool +c.auto_save.session = True + +## Backend to use to display websites. qutebrowser supports two different +## web rendering engines / backends, QtWebKit and QtWebEngine. QtWebKit +## was discontinued by the Qt project with Qt 5.6, but picked up as a +## well maintained fork: https://github.com/annulen/webkit/wiki - +## qutebrowser only supports the fork. QtWebEngine is Qt's official +## successor to QtWebKit. It's slightly more resource hungry than +## QtWebKit and has a couple of missing features in qutebrowser, but is +## generally the preferred choice. +## Type: String +## Valid values: +## - webengine: Use QtWebEngine (based on Chromium). +## - webkit: Use QtWebKit (based on WebKit, similar to Safari). +# c.backend = 'webengine' + +## This setting can be used to map keys to other keys. When the key used +## as dictionary-key is pressed, the binding for the key used as +## dictionary-value is invoked instead. This is useful for global +## remappings of keys, for example to map Ctrl-[ to Escape. Note that +## when a key is bound (via `bindings.default` or `bindings.commands`), +## the mapping is ignored. +## Type: Dict +# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'} +## Background color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)' + +## Bottom border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.bottom = 'black' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.top = 'black' + +## Foreground color of completion widget category headers. +## Type: QtColor +# c.colors.completion.category.fg = 'white' + +## Background color of the completion widget for even rows. +## Type: QssColor +# c.colors.completion.even.bg = '#333333' + +## Text color of the completion widget. May be a single color to use for +## all columns or a list of three colors, one for each column. +## Type: List of QtColor, or QtColor +# c.colors.completion.fg = ['white', 'white', 'white'] + +## Background color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.bg = '#e8c000' + +## Bottom border color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.border.bottom = '#bbbb00' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.item.selected.border.top = '#bbbb00' + +## Foreground color of the selected completion item. +## Type: QtColor +# c.colors.completion.item.selected.fg = 'black' + +## Foreground color of the matched text in the completion. +## Type: QssColor +# c.colors.completion.match.fg = '#ff4444' + +## Background color of the completion widget for odd rows. +## Type: QssColor +# c.colors.completion.odd.bg = '#444444' + +## Color of the scrollbar in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.bg = '#333333' + +## Color of the scrollbar handle in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.fg = 'white' + +## Background color for the download bar. +## Type: QssColor +# c.colors.downloads.bar.bg = 'black' + +## Background color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.bg = 'red' + +## Foreground color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.fg = 'white' + +## Color gradient start for download backgrounds. +## Type: QtColor +# c.colors.downloads.start.bg = '#0000aa' + +## Color gradient start for download text. +## Type: QtColor +# c.colors.downloads.start.fg = 'white' + +## Color gradient stop for download backgrounds. +## Type: QtColor +# c.colors.downloads.stop.bg = '#00aa00' + +## Color gradient end for download text. +## Type: QtColor +# c.colors.downloads.stop.fg = 'white' + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.bg = 'rgb' + +## Color gradient interpolation system for download text. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.fg = 'rgb' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +# c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))' + +## Font color for hints. +## Type: QssColor +# c.colors.hints.fg = 'black' + +## Font color for the matched part of hints. +## Type: QssColor +# c.colors.hints.match.fg = 'green' + +## Background color of the keyhint widget. +## Type: QssColor +# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +## Text color for the keyhint widget. +## Type: QssColor +# c.colors.keyhint.fg = '#FFFFFF' + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +# c.colors.keyhint.suffix.fg = '#FFFF00' + +## Background color of an error message. +## Type: QssColor +# c.colors.messages.error.bg = 'red' + +## Border color of an error message. +## Type: QssColor +# c.colors.messages.error.border = '#bb0000' + +## Foreground color of an error message. +## Type: QssColor +# c.colors.messages.error.fg = 'white' + +## Background color of an info message. +## Type: QssColor +# c.colors.messages.info.bg = 'black' + +## Border color of an info message. +## Type: QssColor +# c.colors.messages.info.border = '#333333' + +## Foreground color of an info message. +## Type: QssColor +# c.colors.messages.info.fg = 'white' + +## Background color of a warning message. +## Type: QssColor +# c.colors.messages.warning.bg = 'darkorange' + +## Border color of a warning message. +## Type: QssColor +# c.colors.messages.warning.border = '#d47300' + +## Foreground color of a warning message. +## Type: QssColor +# c.colors.messages.warning.fg = 'white' + +## Background color for prompts. +## Type: QssColor +# c.colors.prompts.bg = '#444444' + +## Border used around UI elements in prompts. +## Type: String +# c.colors.prompts.border = '1px solid gray' + +## Foreground color for prompts. +## Type: QssColor +# c.colors.prompts.fg = 'white' + +## Background color for the selected item in filename prompts. +## Type: QssColor +# c.colors.prompts.selected.bg = 'grey' + +## Background color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.bg = 'purple' + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.fg = 'white' + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.bg = '#a12dff' + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.fg = 'white' + +## Background color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.bg = 'black' + +## Foreground color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.fg = 'white' + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.bg = 'grey' + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.fg = 'white' + +## Background color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.bg = 'darkgreen' + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.fg = 'white' + +## Background color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.bg = 'black' + +## Foreground color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.fg = 'white' + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.bg = 'darkblue' + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.fg = 'white' + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.bg = '#666666' + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.fg = 'white' + +## Background color of the progress bar. +## Type: QssColor +# c.colors.statusbar.progress.bg = 'white' + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +# c.colors.statusbar.url.error.fg = 'orange' + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +# c.colors.statusbar.url.fg = 'white' + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +# c.colors.statusbar.url.hover.fg = 'aqua' + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +# c.colors.statusbar.url.success.http.fg = 'white' + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +# c.colors.statusbar.url.success.https.fg = 'lime' + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +# c.colors.statusbar.url.warn.fg = 'yellow' + +## Background color of the tab bar. +## Type: QtColor +# c.colors.tabs.bar.bg = '#555555' + +## Background color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.bg = 'darkgrey' + +## Foreground color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.fg = 'white' + +## Color for the tab indicator on errors. +## Type: QtColor +# c.colors.tabs.indicator.error = '#ff0000' + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = '#0000aa' + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = '#00aa00' + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.tabs.indicator.system = 'rgb' + +## Background color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.bg = 'grey' + +## Foreground color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.fg = 'white' + +## Background color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.bg = 'black' + +## Foreground color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.fg = 'white' + +## Background color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.bg = 'black' + +## Foreground color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.fg = 'white' + +## Background color for webpages if unset (or empty to use the theme's +## color). +## Type: QtColor +# c.colors.webpage.bg = 'white' + +## Number of commands to save in the command history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.cmd_history_max_items = 100 + +## Delay (in milliseconds) before updating completions after typing a +## character. +## Type: Int +# c.completion.delay = 0 + +## Height (in pixels or as percentage of the window) of the completion. +## Type: PercOrInt +# c.completion.height = '50%' + +## Minimum amount of characters needed to update completions. +## Type: Int +# c.completion.min_chars = 1 + +## Move on to the next part when there's only one possible completion +## left. +## Type: Bool +# c.completion.quick = True + +## Padding (in pixels) of the scrollbar handle in the completion window. +## Type: Int +# c.completion.scrollbar.padding = 2 + +## Width (in pixels) of the scrollbar in the completion window. +## Type: Int +# c.completion.scrollbar.width = 12 + +## When to show the autocompletion window. +## Type: String +## Valid values: +## - always: Whenever a completion is available. +## - auto: Whenever a completion is requested. +## - never: Never. +# c.completion.show = 'always' + +## Shrink the completion to be smaller than the configured size if there +## are no scrollbars. +## Type: Bool +# c.completion.shrink = False + +## Format of timestamps (e.g. for the history completion). +## Type: TimestampTemplate +# c.completion.timestamp_format = '%Y-%m-%d' + +## Execute the best-matching command on a partial match. +## Type: Bool +c.completion.use_best_match = True + +## Number of URLs to show in the web history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.web_history_max_items = -1 + +## Require a confirmation before quitting the application. +## Type: ConfirmQuit +## Valid values: +## - always: Always show a confirmation. +## - multiple-tabs: Show a confirmation if multiple tabs are opened. +## - downloads: Show a confirmation if downloads are running +## - never: Never show a confirmation. +# c.confirm_quit = ['never'] + +## Enable support for the HTML 5 web application cache feature. An +## application cache acts like an HTTP cache in some sense. For documents +## that use the application cache via JavaScript, the loader engine will +## first ask the application cache for the contents, before hitting the +## network. +## Type: Bool +# c.content.cache.appcache = True + +## Maximum number of pages to hold in the global memory page cache. The +## page cache allows for a nicer user experience when navigating forth or +## back to pages in the forward/back history, by pausing and resuming up +## to _n_ pages. For more information about the feature, please refer to: +## http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +## Type: Int +# c.content.cache.maximum_pages = 0 + +## Size (in bytes) of the HTTP network cache. Null to use the default +## value. With QtWebEngine, the maximum supported value is 2147483647 (~2 +## GB). +## Type: Int +# c.content.cache.size = None + +## Which cookies to accept. +## Type: String +## Valid values: +## - all: Accept all cookies. +## - no-3rdparty: Accept cookies from the same origin only. +## - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. +## - never: Don't accept cookies at all. +# c.content.cookies.accept = 'no-3rdparty' + +## Store cookies. Note this option needs a restart with QtWebEngine on Qt +## < 5.9. +## Type: Bool +c.content.cookies.store = True + +## Default encoding to use for websites. The encoding must be a string +## describing an encoding such as _utf-8_, _iso-8859-1_, etc. +## Type: String +# c.content.default_encoding = 'iso-8859-1' + +## Enable extra tools for Web developers. This needs to be enabled for +## `:inspector` to work and also adds an _Inspect_ entry to the context +## menu. For QtWebEngine, see `--enable-webengine-inspector` in +## `qutebrowser --help` instead. +## Type: Bool +## c.content.developer_extras = True + +## Try to pre-fetch DNS entries to speed up browsing. +## Type: Bool +c.content.dns_prefetch = True + +## Expand each subframe to its contents. This will flatten all the frames +## to become one scrollable page. +## Type: Bool +# c.content.frame_flattening = False + +## Allow websites to request geolocations. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +c.content.geolocation = False + +## Value to send in the `Accept-Language` header. +## Type: String +# c.content.headers.accept_language = 'en-US,en' + +## Custom headers for qutebrowser HTTP requests. +## Type: Dict +# c.content.headers.custom = {} + +## Value to send in the `DNT` header. When this is set to true, +## qutebrowser asks websites to not track your identity. If set to null, +## the DNT header is not sent at all. +## Type: Bool +# c.content.headers.do_not_track = True + +## When to send the Referer header. The Referer header tells websites +## from which website you were coming from when visiting them. +## Type: String +## Valid values: +## - always: Always send the Referer. +## - never: Never send the Referer. This is not recommended, as some sites may break. +## - same-domain: Only send the Referer for the same domain. This will still protect your privacy, but shouldn't break any sites. +# c.content.headers.referer = 'same-domain' + +## User agent to send. Unset to send the default. +## Type: String +# c.content.headers.user_agent = None + +## Enable host blocking. +## Type: Bool +# c.content.host_blocking.enabled = True + +## List of URLs of lists which contain hosts to block. The file can be +## in one of the following formats: - An `/etc/hosts`-like file - One +## host per line - A zip-file of any of the above, with either only one +## file, or a file named `hosts` (with any extension). +## Type: List of Url +# c.content.host_blocking.lists = ['https://www.malwaredomainlist.com/hostslist/hosts.txt', 'http://someonewhocares.org/hosts/hosts', 'http://winhelp2002.mvps.org/hosts.zip', 'http://malwaredomains.lehigh.edu/files/justdomains.zip', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext'] + +## List of domains that should always be loaded, despite being ad- +## blocked. Domains may contain * and ? wildcards and are otherwise +## required to exactly match the requested domain. Local domains are +## always exempt from hostblocking. +## Type: List of String +c.content.host_blocking.whitelist = ['piwik.org','next-episode.net','churchmilitant.com','churchmilitant.tv'] + +## Enable hyperlink auditing (`<a ping>`). +## Type: Bool +# c.content.hyperlink_auditing = False + +## Load images automatically in web pages. +## Type: Bool +# c.content.images = True + +## Show javascript alerts. +## Type: Bool +# c.content.javascript.alert = True + +## Allow JavaScript to read from or write to the clipboard. With +## QtWebEngine, writing the clipboard as response to a user interaction +## is always allowed. +## Type: Bool +# c.content.javascript.can_access_clipboard = False + +## Allow JavaScript to close tabs. +## Type: Bool +# c.content.javascript.can_close_tabs = False + +## Allow JavaScript to open new tabs without user interaction. +## Type: Bool +# c.content.javascript.can_open_tabs_automatically = False + +## Enable JavaScript. +## Type: Bool +c.content.javascript.enabled = True + +## Log levels to use for JavaScript console logging messages. When a +## JavaScript message with the level given in the dictionary key is +## logged, the corresponding dictionary value selects the qutebrowser +## logger to use. On QtWebKit, the "unknown" setting is always used. +## Type: Dict +# c.content.javascript.log = {'unknown': 'debug', 'info': 'debug', 'warning': 'debug', 'error': 'debug'} + +## Use the standard JavaScript modal dialog for `alert()` and +## `confirm()`. +## Type: Bool +# c.content.javascript.modal_dialog = False + +## Show javascript prompts. +## Type: Bool +# c.content.javascript.prompt = True + +## Allow locally loaded documents to access other local URLs. +## Type: Bool +# c.content.local_content_can_access_file_urls = True + +## Allow locally loaded documents to access remote URLs. +## Type: Bool +# c.content.local_content_can_access_remote_urls = False + +## Enable support for HTML 5 local storage and Web SQL. +## Type: Bool +# c.content.local_storage = True + +## Allow websites to record audio/video. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.media_capture = 'ask' + +## Netrc-file for HTTP authentication. If unset, `~/.netrc` is used. +## Type: File +# c.content.netrc_file = None + +## Allow websites to show notifications. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.notifications = 'ask' + +## Allow pdf.js to view PDF files in the browser. Note that the files can +## still be downloaded by clicking the download button in the pdf.js +## viewer. +## Type: Bool +# c.content.pdfjs = False + +## Enable plugins in Web pages. +## Type: Bool +# c.content.plugins = False vgg +c.content.plugins = True + +## Draw the background color and images also when the page is printed. +## Type: Bool +# c.content.print_element_backgrounds = True + +## Open new windows in private browsing mode which does not record +## visited pages. +## Type: Bool +# c.content.private_browsing = True + +## Proxy to use. In addition to the listed values, you can use a +## `socks://...` or `http://...` URL. +## Type: Proxy +## Valid values: +## - system: Use the system wide proxy. +## - none: Don't use any proxy +# c.content.proxy = 'system' + +## Send DNS requests over the configured proxy. +## Type: Bool +# c.content.proxy_dns_requests = True + +## Validate SSL handshakes. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.ssl_strict = 'ask' + +## List of user stylesheet filenames to use. +## Type: List of File, or File +# c.content.user_stylesheets = [] + +## Enable WebGL. +## Type: Bool +# c.content.webgl = True + +## Limit fullscreen to the browser window (does not expand to fill the +## screen). +## Type: Bool +# c.content.windowed_fullscreen = False + +## Monitor load requests for cross-site scripting attempts. Suspicious +## scripts will be blocked and reported in the inspector's JavaScript +## console. Enabling this feature might have an impact on performance. +## Type: Bool +# c.content.xss_auditing = False + +## Directory to save downloads to. If unset, a sensible OS-specific +## default is used. +## Type: Directory +# c.downloads.location.directory = None + +## Prompt the user for the download location. If set to false, +## `downloads.location.directory` will be used. +## Type: Bool +# c.downloads.location.prompt = True + +## Remember the last used download directory. +## Type: Bool +# c.downloads.location.remember = True + +## What to display in the download filename input. +## Type: String +## Valid values: +## - path: Show only the download path. +## - filename: Show only download filename. +## - both: Show download path and filename. +# c.downloads.location.suggestion = 'path' + +## Default program used to open downloads. If null, the default internal +## handler is used. Any `{}` in the string will be expanded to the +## filename, else the filename will be appended. +## Type: String +# c.downloads.open_dispatcher = None + +## Where to show the downloaded files. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.downloads.position = 'top' + +## Duration (in milliseconds) to wait before removing finished downloads. +## If set to -1, downloads are never removed. +## Type: Int +# c.downloads.remove_finished = -1 + +## Editor (and arguments) to use for the `open-editor` command. The +## following placeholders are defined: * `{file}`: Filename of the file +## to be edited. * `{line}`: Line in which the caret is found in the +## text. * `{column}`: Column in which the caret is found in the text. * +## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`: +## Same as `{column}`, but starting from index 0. +## Type: ShellCommand +# c.editor.command = ['gvim', '-f', '{file}', '-c', 'normal {line}G{column0}l'] +c.editor.command = ["st", "-t", "qutebrowserSratchpad", "-g", "86x24+40+60", "-e", "nvim", "-f", "{}"] + +## Encoding to use for the editor. +## Type: Encoding +# c.editor.encoding = 'utf-8' + +## Font used in the completion categories. +## Type: Font +# c.fonts.completion.category = 'bold 10pt monospace' + +## Font used in the completion widget. +## Type: Font +# c.fonts.completion.entry = '10pt monospace' + +## Font used for the debugging console. +## Type: QtFont +# c.fonts.debug_console = '10pt monospace' + +## Font used for the downloadbar. +## Type: Font +# c.fonts.downloads = '10pt monospace' + +## Font used for the hints. +## Type: Font +c.fonts.hints = 'bold 8pt monospace' + +## Font used in the keyhint widget. +## Type: Font +# c.fonts.keyhint = '10pt monospace' + +## Font used for error messages. +## Type: Font +# c.fonts.messages.error = '10pt monospace' + +## Font used for info messages. +## Type: Font +# c.fonts.messages.info = '10pt monospace' + +## Font used for warning messages. +## Type: Font +# c.fonts.messages.warning = '10pt monospace' + +## Default monospace fonts. Whenever "monospace" is used in a font +## setting, it's replaced with the fonts listed here. +## Type: Font +# c.fonts.monospace = '"xos4 Terminus", Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal' + +## Font used for prompts. +## Type: Font +# c.fonts.prompts = '10pt sans-serif' + +## Font used in the statusbar. +## Type: Font +# c.fonts.statusbar = '10pt monospace' + +## Font used in the tab bar. +## Type: QtFont +# c.fonts.tabs = '10pt monospace' + +## Font family for cursive fonts. +## Type: FontFamily +# c.fonts.web.family.cursive = '' + +## Font family for fantasy fonts. +## Type: FontFamily +# c.fonts.web.family.fantasy = '' + +## Font family for fixed fonts. +## Type: FontFamily +# c.fonts.web.family.fixed = '' + +## Font family for sans-serif fonts. +## Type: FontFamily +# c.fonts.web.family.sans_serif = '' + +## Font family for serif fonts. +## Type: FontFamily +# c.fonts.web.family.serif = '' + +## Font family for standard fonts. +## Type: FontFamily +# c.fonts.web.family.standard = '' + +## Default font size (in pixels) for regular text. +## Type: Int +# c.fonts.web.size.default = 16 + +## Default font size (in pixels) for fixed-pitch text. +## Type: Int +# c.fonts.web.size.default_fixed = 13 + +## Hard minimum font size (in pixels). +## Type: Int +# c.fonts.web.size.minimum = 0 + +## Minimum logical font size (in pixels) that is applied when zooming +## out. +## Type: Int +# c.fonts.web.size.minimum_logical = 6 + +## When a hint can be automatically followed without pressing Enter. +## Type: String +## Valid values: +## - always: Auto-follow whenever there is only a single hint on a page. +## - unique-match: Auto-follow whenever there is a unique non-empty match in either the hint string (word mode) or filter (number mode). +## - full-match: Follow the hint when the user typed the whole hint (letter, word or number mode) or the element's text (only in number mode). +## - never: The user will always need to press Enter to follow a hint. +# c.hints.auto_follow = 'unique-match' + +## Duration (in milliseconds) to ignore normal-mode key bindings after a +## successful auto-follow. +## Type: Int +# c.hints.auto_follow_timeout = 0 + +## CSS border value for hints. +## Type: String +# c.hints.border = '1px solid #E3BE23' + +## Characters used for hint strings. +## Type: UniqueCharString +# c.hints.chars = 'asdfghjkl' + +## Dictionary file to be used by the word hints. +## Type: File +# c.hints.dictionary = '/usr/share/dict/words' + +## Which implementation to use to find elements to hint. +## Type: String +## Valid values: +## - javascript: Better but slower +## - python: Slightly worse but faster +# c.hints.find_implementation = 'python' + +## Hide unmatched hints in rapid mode. +## Type: Bool +# c.hints.hide_unmatched_rapid_hints = True + +## Minimum number of characters used for hint strings. +## Type: Int +# c.hints.min_chars = 1 + +## Mode to use for hints. +## Type: String +## Valid values: +## - number: Use numeric hints. (In this mode you can also type letters from the hinted element to filter and reduce the number of elements that are hinted.) +## - letter: Use the characters in the `hints.chars` setting. +## - word: Use hints words based on the html elements and the extra words. +c.hints.mode = 'number' + +## Comma-separated list of regular expressions to use for 'next' links. +## Type: List of Regex +# c.hints.next_regexes = ['\\bnext\\b', '\\bmore\\b', '\\bnewer\\b', '\\b[>→≫]\\b', '\\b(>>|»)\\b', '\\bcontinue\\b'] + +## Comma-separated list of regular expressions to use for 'prev' links. +## Type: List of Regex +# c.hints.prev_regexes = ['\\bprev(ious)?\\b', '\\bback\\b', '\\bolder\\b', '\\b[<←≪]\\b', '\\b(<<|«)\\b'] + +## Scatter hint key chains (like Vimium) or not (like dwb). Ignored for +## number hints. +## Type: Bool +# c.hints.scatter = True + +## Make characters in hint strings uppercase. +## Type: Bool +# c.hints.uppercase = False + +## Maximum time (in minutes) between two history items for them to be +## considered being from the same browsing session. Items with less time +## between them are grouped when being displayed in `:history`. Use -1 to +## disable separation. +## Type: Int +# c.history_gap_interval = 30 + +## Which unbound keys to forward to the webview in normal mode. +## Type: String +## Valid values: +## - all: Forward all unbound keys. +## - auto: Forward unbound non-alphanumeric keys. +## - none: Don't forward any keys. +# c.input.forward_unbound_keys = 'auto' + +## Enter insert mode if an editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_enter = True + +## Leave insert mode if a non-editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_leave = True + +## Automatically enter insert mode if an editable element is focused +## after loading the page. +## Type: Bool +# c.input.insert_mode.auto_load = False + +## Switch to insert mode when clicking flash and other plugins. +## Type: Bool +# c.input.insert_mode.plugins = False + +## Include hyperlinks in the keyboard focus chain when tabbing. +## Type: Bool +# c.input.links_included_in_focus_chain = True + +## Timeout (in milliseconds) for partially typed key bindings. If the +## current input forms only partial matches, the keystring will be +## cleared after this time. +## Type: Int +# c.input.partial_timeout = 5000 + +## Enable Opera-like mouse rocker gestures. This disables the context +## menu. +## Type: Bool +# c.input.rocker_gestures = False + +## Enable spatial navigation. Spatial navigation consists in the ability +## to navigate between focusable elements in a Web page, such as +## hyperlinks and form controls, by using Left, Right, Up and Down arrow +## keys. For example, if the user presses the Right key, heuristics +## determine whether there is an element he might be trying to reach +## towards the right and which element he probably wants. +## Type: Bool +# c.input.spatial_navigation = False + +## Keychains that shouldn't be shown in the keyhint dialog. Globs are +## supported, so `;*` will blacklist all keychains starting with `;`. Use +## `*` to disable keyhints. +## Type: List of String +# c.keyhint.blacklist = [] + +## Time (in milliseconds) from pressing a key to seeing the keyhint +## dialog. +## Type: Int +# c.keyhint.delay = 500 + +## Rounding radius (in pixels) for the edges of the keyhint dialog. +## Type: Int +# c.keyhint.radius = 6 + +## Duration (in milliseconds) to show messages in the statusbar for. Set +## to 0 to never clear messages. +## Type: Int +# c.messages.timeout = 2000 + +## How to open links in an existing instance if a new one is launched. +## This happens when e.g. opening a link from a terminal. See +## `new_instance_open_target_window` to customize in which window the +## link is opened in. +## Type: String +## Valid values: +## - tab: Open a new tab in the existing window and activate the window. +## - tab-bg: Open a new background tab in the existing window and activate the window. +## - tab-silent: Open a new tab in the existing window without activating the window. +## - tab-bg-silent: Open a new background tab in the existing window without activating the window. +## - window: Open in a new window. +# c.new_instance_open_target = 'tab' + +## Which window to choose when opening links as new tabs. When +## `new_instance_open_target` is not set to `window`, this is ignored. +## Type: String +## Valid values: +## - first-opened: Open new tabs in the first (oldest) opened window. +## - last-opened: Open new tabs in the last (newest) opened window. +## - last-focused: Open new tabs in the most recently focused window. +## - last-visible: Open new tabs in the most recently visible window. +# c.new_instance_open_target_window = 'last-focused' + +## Show a filebrowser in upload/download prompts. +## Type: Bool +# c.prompt.filebrowser = True + +## Rounding radius (in pixels) for the edges of prompts. +## Type: Int +# c.prompt.radius = 8 + +## Additional arguments to pass to Qt, without leading `--`. With +## QtWebEngine, some Chromium arguments (see +## https://peter.sh/experiments/chromium-command-line-switches/ for a +## list) will work. +## Type: List of String +# c.qt.args = [] + +## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM` +## environment variable and is useful to force using the XCB plugin when +## running QtWebEngine on Wayland. +## Type: String +# c.qt.force_platform = None + +## Force software rendering for QtWebEngine. This is needed for +## QtWebEngine to work with Nouveau drivers. +## Type: Bool +# c.qt.force_software_rendering = False + +## Turn on Qt HighDPI scaling. This is equivalent to setting +## QT_AUTO_SCREEN_SCALE_FACTOR=1 in the environment. It's off by default +## as it can cause issues with some bitmap fonts. As an alternative to +## this, it's possible to set font sizes and the `zoom.default` setting. +## Type: Bool +# c.qt.highdpi = False + +## Show a scrollbar. +## Type: Bool +# c.scrolling.bar = False + +## Enable smooth scrolling for web pages. Note smooth scrolling does not +## work with the `:scroll-px` command. +## Type: Bool +# c.scrolling.smooth = False + +## When to find text on a page case-insensitively. +## Type: String +## Valid values: +## - always: Search case-insensitively. +## - never: Search case-sensitively. +## - smart: Search case-sensitively if there are capital characters. +# c.search.ignore_case = 'smart' + +## Find text on a page incrementally, renewing the search for each typed +## character. +## Type: Bool +# c.search.incremental = True + +## Name of the session to save by default. If this is set to null, the +## session which was last loaded is saved. +## Type: SessionName +# c.session.default_name = None + +## Load a restored tab as soon as it takes focus. +## Type: Bool +# c.session.lazy_restore = False + +## Languages to use for spell checking. You can check for available +## languages and install dictionaries using scripts/dictcli.py. Run the +## script with -h/--help for instructions. +## Type: List of String +## Valid values: +## - af-ZA: Afrikaans (South Africa) +## - bg-BG: Bulgarian (Bulgaria) +## - ca-ES: Catalan (Spain) +## - cs-CZ: Czech (Czech Republic) +## - da-DK: Danish (Denmark) +## - de-DE: German (Germany) +## - el-GR: Greek (Greece) +## - en-AU: English (Australia) +## - en-CA: English (Canada) +## - en-GB: English (United Kingdom) +## - en-US: English (United States) +## - es-ES: Spanish (Spain) +## - et-EE: Estonian (Estonia) +## - fa-IR: Farsi (Iran) +## - fo-FO: Faroese (Faroe Islands) +## - fr-FR: French (France) +## - he-IL: Hebrew (Israel) +## - hi-IN: Hindi (India) +## - hr-HR: Croatian (Croatia) +## - hu-HU: Hungarian (Hungary) +## - id-ID: Indonesian (Indonesia) +## - it-IT: Italian (Italy) +## - ko: Korean +## - lt-LT: Lithuanian (Lithuania) +## - lv-LV: Latvian (Latvia) +## - nb-NO: Norwegian (Norway) +## - nl-NL: Dutch (Netherlands) +## - pl-PL: Polish (Poland) +## - pt-BR: Portuguese (Brazil) +## - pt-PT: Portuguese (Portugal) +## - ro-RO: Romanian (Romania) +## - ru-RU: Russian (Russia) +## - sh: Serbo-Croatian +## - sk-SK: Slovak (Slovakia) +## - sl-SI: Slovenian (Slovenia) +## - sq: Albanian +## - sr: Serbian +## - sv-SE: Swedish (Sweden) +## - ta-IN: Tamil (India) +## - tg-TG: Tajik (Tajikistan) +## - tr-TR: Turkish (Turkey) +## - uk-UA: Ukrainian (Ukraine) +## - vi-VN: Vietnamese (Viet Nam) +# c.spellcheck.languages = [] + +## Hide the statusbar unless a message is shown. +## Type: Bool +# c.statusbar.hide = False + +## Padding (in pixels) for the statusbar. +## Type: Padding +# c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0} + +## Position of the status bar. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.statusbar.position = 'bottom' + +## List of widgets displayed in the statusbar. +## Type: List of String +## Valid values: +## - url: Current page URL. +## - scroll: Percentage of the current page position like `10%`. +## - scroll_raw: Raw percentage of the current page position like `10`. +## - history: Display an arrow when possible to go back/forward in history. +## - tabs: Current active tab, e.g. `2`. +## - keypress: Display pressed keys when composing a vi command. +## - progress: Progress bar for the current page loading. +# c.statusbar.widgets = ['keypress', 'url', 'scroll', 'history', 'tabs', 'progress'] + +## Open new tabs (middleclick/ctrl+click) in the background. +## Type: Bool +# c.tabs.background = False + +## Mouse button with which to close tabs. +## Type: String +## Valid values: +## - right: Close tabs on right-click. +## - middle: Close tabs on middle-click. +## - none: Don't close tabs using the mouse. +# c.tabs.close_mouse_button = 'middle' + +## How to behave when the close mouse button is pressed on the tab bar. +## Type: String +## Valid values: +## - new-tab: Open a new tab. +## - close-current: Close the current tab. +## - close-last: Close the last tab. +## - ignore: Don't do anything. +# c.tabs.close_mouse_button_on_bar = 'new-tab' + +## Scaling factor for favicons in the tab bar. The tab size is unchanged, +## so big favicons also require extra `tabs.padding`. +## Type: Float +# c.tabs.favicons.scale = 1.0 + +## Show favicons in the tab bar. +## Type: Bool +# c.tabs.favicons.show = True + +## Padding (in pixels) for tab indicators. +## Type: Padding +# c.tabs.indicator.padding = {'top': 2, 'bottom': 2, 'left': 0, 'right': 4} + +## Width (in pixels) of the progress indicator (0 to disable). +## Type: Int +# c.tabs.indicator.width = 3 + +## How to behave when the last tab is closed. +## Type: String +## Valid values: +## - ignore: Don't do anything. +## - blank: Load a blank page. +## - startpage: Load the start page. +## - default-page: Load the default page. +## - close: Close the window. +# c.tabs.last_close = 'ignore' + +## When switching tabs, what input mode is applied. +## Type: String +## Valid values: +## - persist: Retain the current mode. +## - restore: Restore previously saved mode. +## - normal: Always revert to normal mode. +# c.tabs.mode_on_change = 'normal' + +## Switch between tabs using the mouse wheel. +## Type: Bool +# c.tabs.mousewheel_switching = True + +## Position of new tabs opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.related = 'next' + +## Position of new tabs which aren't opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.unrelated = 'last' + +## Padding (in pixels) around text for tabs. +## Type: Padding +# c.tabs.padding = {'top': 0, 'bottom': 0, 'left': 5, 'right': 5} + +## Shrink pinned tabs down to their contents. +## Type: Bool +# c.tabs.pinned.shrink = True + +## Position of the tab bar. +## Type: Position +## Valid values: +## - top +## - bottom +## - left +## - right +# c.tabs.position = 'top' + +## Which tab to select when the focused tab is removed. +## Type: SelectOnRemove +## Valid values: +## - prev: Select the tab which came before the closed one (left in horizontal, above in vertical). +## - next: Select the tab which came after the closed one (right in horizontal, below in vertical). +## - last-used: Select the previously selected tab. +# c.tabs.select_on_remove = 'next' + +## When to show the tab bar. +## Type: String +## Valid values: +## - always: Always show the tab bar. +## - never: Always hide the tab bar. +## - multiple: Hide the tab bar if only one tab is open. +## - switching: Show the tab bar when switching tabs. +# c.tabs.show = 'always' + +## Duration (in milliseconds) to show the tab bar before hiding it when +## tabs.show is set to 'switching'. +## Type: Int +# c.tabs.show_switching_delay = 800 + +## Open a new window for every tab. +## Type: Bool +# c.tabs.tabs_are_windows = False + +## Alignment of the text inside of tabs. +## Type: TextAlignment +## Valid values: +## - left +## - right +## - center +# c.tabs.title.alignment = 'left' + +## Format to use for the tab title. The following placeholders are +## defined: * `{perc}`: Percentage as a string like `[10%]`. * +## `{perc_raw}`: Raw percentage, e.g. `10`. * `{title}`: Title of the +## current web page. * `{title_sep}`: The string ` - ` if a title is set, +## empty otherwise. * `{index}`: Index of this tab. * `{id}`: Internal +## tab ID of this tab. * `{scroll_pos}`: Page scroll position. * +## `{host}`: Host of the current web page. * `{backend}`: Either +## ''webkit'' or ''webengine'' * `{private}`: Indicates when private mode +## is enabled. * `{current_url}`: URL of the current web page. * +## `{protocol}`: Protocol (http/https/...) of the current web page. +## Type: FormatString +# c.tabs.title.format = '{index}: {title}' + +## Format to use for the tab title for pinned tabs. The same placeholders +## like for `tabs.title.format` are defined. +## Type: FormatString +# c.tabs.title.format_pinned = '{index}' + +## Width (in pixels or as percentage of the window) of the tab bar if +## it's vertical. +## Type: PercOrInt +# c.tabs.width = '20%' + +## Wrap when changing tabs. +## Type: Bool +# c.tabs.wrap = True + +## What search to start when something else than a URL is entered. +## Type: String +## Valid values: +## - naive: Use simple/naive check. +## - dns: Use DNS requests (might be slow!). +## - never: Never search automatically. +# c.url.auto_search = 'naive' + +## Page to open if :open -t/-b/-w is used without URL. Use `about:blank` +## for a blank page. +## Type: FuzzyUrl +# c.url.default_page = 'https://start.duckduckgo.com/' + +## URL segments where `:navigate increment/decrement` will search for a +## number. +## Type: FlagList +## Valid values: +## - host +## - port +## - path +## - query +## - anchor +# c.url.incdec_segments = ['path', 'query'] + +## Search engines which can be used via the address bar. Maps a search +## engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` +## placeholder. The placeholder will be replaced by the search term, use +## `{{` and `}}` for literal `{`/`}` signs. The search engine named +## `DEFAULT` is used when `url.auto_search` is turned on and something +## else than a URL was entered to be opened. Other search engines can be +## used by prepending the search engine name to the search term, e.g. +## `:open google qutebrowser`. +## Type: Dict + +c.url.searchengines = { 'DEFAULT':'https://duckduckgo.com/?q={}', + 'aio':'https://www.aiosearch.com/search?q={}', + 'aw':'https://wiki.archlinux.org/?q={}', + 'g':'https://www.google.com/?q={}', + 'git':'https://github.com/search?q={}', + 'imdb':'https://www.imdb.com/find?q={}', + 'red':'https://www.reddit.com/r/{}', + 'ub':'https://www.urbandictionary.com/define.php?term={}', + 'wiki':'https://en.wikipedia.org/wiki/?q={}', + 'yfs':'https://www.yifysubtitles.com/search?q={}', + 'yt':'https://www.youtube.com/results?search_query={}'} + +## Page(s) to open at the start. +## Type: List of FuzzyUrl, or FuzzyUrl +# c.url.start_pages = ['https://start.duckduckgo.com'] + +## URL parameters to strip with `:yank url`. +## Type: List of String +# c.url.yank_ignored_parameters = ['ref', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'] + +## Hide the window decoration when using wayland. +## Type: Bool +# c.window.hide_wayland_decoration = False + +## Format to use for the window title. The same placeholders like for +## `tabs.title.format` are defined. +## Type: FormatString +# c.window.title_format = '{perc}{title}{title_sep}qutebrowser' + +## Default zoom level. +## Type: Perc +# c.zoom.default = '100%' + +## Available zoom levels. +## Type: List of Perc +# c.zoom.levels = ['25%', '33%', '50%', '67%', '75%', '90%', '100%', '110%', '125%', '150%', '175%', '200%', '250%', '300%', '400%', '500%'] + +## Number of zoom increments to divide the mouse wheel movements to. +## Type: Int +# c.zoom.mouse_divider = 512 + +## Apply the zoom factor on a frame only to the text or to all content. +## Type: Bool +# c.zoom.text_only = False + +## Bindings for normal mode +config.bind(',c', 'hint links spawn mpv --ytdl --ytdl-raw-options=username="v.graffagnino@btinternet.com",password="N9\Ch0n\H@n9" --cookies-file=~/.local/share/qutebrowser/webengine/Cookies {hint-url} --load-unsafe-playlists') +config.bind(',m', 'hint links spawn mpv --ytdl {hint-url} --load-unsafe-playlists') +#config.bind('m', 'hint links spawn mpv --ytdl -slang=en {hint-url} --load-unsafe-playlists') +config.bind('m', '/usr/bin/youtube-dl -x --restrict-filenames --audio-format="mp3" --audio-quality="128k" -o "%(artist)s-%(title)s.%(ext)s" {hint-url}') +config.bind(',M', 'hint links spawn umpv {hint-url}') +config.bind(',t', 'hint links spawn transmission-remote --add {hint-url}') +#config.bind(',y', 'hint links spawn /usr/local/bin/st -e tsp youtube-dl -b -o %(channel)s/%(title)s.%(ext)s {hint-url}') +#config.bind(',y', 'hint links spawn /usr/local/bin/st -e /usr/bin/tsp youtube-dl -b {hint-url}') +config.bind(',y', 'hint links spawn /usr/local/bin/st -e tsp youtube-dl --add-metadata -ic -f best {hint-url}') +config.bind(',Y', 'hint links spawn /usr/local/bin/st -e mpsyt dlurl {hint-url}') +config.bind(',q', 'hint links spawn echo "mpsyt dlurl {hint-url}" >> ~/ytdl.list') +config.bind(',p', 'spawn --userscript qute-pass --dmenu-invocation dmenu') +config.bind('xb', 'config-cycle statusbar.hide') +config.bind('xt', 'config-cycle tabs.show always switching') +config.bind('xx', 'config-cycle statusbar.hide ;; config-cycle tabs.show always switching') +config.bind('xp', 'set-cmd-text :set content.proxy socks://localhost:8765') +config.bind('Xp', 'set-cmd-text :config-unset content.proxy') +#config.bind('ua', 'set-cmd-text :set -u https://accounts.google.com/* content.headers.user_agent "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0") + +# config.bind("'", 'enter-mode jump_mark') +# config.bind('+', 'zoom-in') +# config.bind('-', 'zoom-out') +# config.bind('.', 'repeat-command') +# config.bind('/', 'set-cmd-text /') +# config.bind(':', 'set-cmd-text :') +# config.bind(';I', 'hint images tab') +# config.bind(';O', 'hint links fill :open -t -r {hint-url}') +# config.bind(';R', 'hint --rapid links window') +# config.bind(';Y', 'hint links yank-primary') +# config.bind(';b', 'hint all tab-bg') +# config.bind(';d', 'hint links download') +# config.bind(';f', 'hint all tab-fg') +# config.bind(';h', 'hint all hover') +# config.bind(';i', 'hint images') +# config.bind(';o', 'hint links fill :open {hint-url}') +# config.bind(';r', 'hint --rapid links tab-bg') +# config.bind(';t', 'hint inputs') +# config.bind(';y', 'hint links yank') +# config.bind('<Alt-1>', 'tab-focus 1') +# config.bind('<Alt-2>', 'tab-focus 2') +# config.bind('<Alt-3>', 'tab-focus 3') +# config.bind('<Alt-4>', 'tab-focus 4') +# config.bind('<Alt-5>', 'tab-focus 5') +# config.bind('<Alt-6>', 'tab-focus 6') +# config.bind('<Alt-7>', 'tab-focus 7') +# config.bind('<Alt-8>', 'tab-focus 8') +# config.bind('<Alt-9>', 'tab-focus -1') +# config.bind('<Ctrl-A>', 'navigate increment') +# config.bind('<Ctrl-Alt-p>', 'print') +# config.bind('<Ctrl-B>', 'scroll-page 0 -1') +# config.bind('<Ctrl-D>', 'scroll-page 0 0.5') +# config.bind('<Ctrl-F5>', 'reload -f') +# config.bind('<Ctrl-F>', 'scroll-page 0 1') +# config.bind('<Ctrl-N>', 'open -w') +# config.bind('<Ctrl-PgDown>', 'tab-next') +# config.bind('<Ctrl-PgUp>', 'tab-prev') +# config.bind('<Ctrl-Q>', 'quit') +# config.bind('<Ctrl-Return>', 'follow-selected -t') +# config.bind('<Ctrl-Shift-N>', 'open -p') +# config.bind('<Ctrl-Shift-T>', 'undo') +# config.bind('<Ctrl-Shift-W>', 'close') +# config.bind('<Ctrl-T>', 'open -t') +# config.bind('<Ctrl-Tab>', 'tab-focus last') +# config.bind('<Ctrl-U>', 'scroll-page 0 -0.5') +# config.bind('<Ctrl-V>', 'enter-mode passthrough') +# config.bind('<Ctrl-W>', 'tab-close') +# config.bind('<Ctrl-X>', 'navigate decrement') +# config.bind('<Ctrl-^>', 'tab-focus last') +# config.bind('<Ctrl-h>', 'home') +# config.bind('<Ctrl-p>', 'tab-pin') +# config.bind('<Ctrl-s>', 'stop') +# config.bind('<Escape>', 'clear-keychain ;; search ;; fullscreen --leave') +# config.bind('<F11>', 'fullscreen') +# config.bind('<F5>', 'reload') +# config.bind('<Return>', 'follow-selected') +# config.bind('<back>', 'back') +# config.bind('<forward>', 'forward') +# config.bind('=', 'zoom') +# config.bind('?', 'set-cmd-text ?') +# config.bind('@', 'run-macro') +# config.bind('B', 'set-cmd-text -s :quickmark-load -t') +# config.bind('D', 'tab-close -o') +# config.bind('F', 'hint all tab') +# config.bind('G', 'scroll-to-perc') +# config.bind('H', 'back') +config.bind('J', 'tab-prev') +config.bind('K', 'tab-next') +# config.bind('L', 'forward') +# config.bind('M', 'bookmark-add') +# config.bind('N', 'search-prev') +# config.bind('O', 'set-cmd-text -s :open -t') +# config.bind('PP', 'open -t -- {primary}') +# config.bind('Pp', 'open -t -- {clipboard}') +# config.bind('R', 'reload -f') +# config.bind('Sb', 'open qute://bookmarks#bookmarks') +# config.bind('Sh', 'open qute://history') +# config.bind('Sq', 'open qute://bookmarks') +# config.bind('Ss', 'open qute://settings') +# config.bind('T', 'tab-focus') +# config.bind('ZQ', 'quit') +# config.bind('ZZ', 'quit --save') +# config.bind('[[', 'navigate prev') +# config.bind(']]', 'navigate next') +# config.bind('`', 'enter-mode set_mark') +# config.bind('ad', 'download-cancel') +# config.bind('b', 'set-cmd-text -s :quickmark-load') +# config.bind('cd', 'download-clear') +# config.bind('co', 'tab-only') +# config.bind('d', 'tab-close') +# config.bind('f', 'hint') +# config.bind('g$', 'tab-focus -1') +# config.bind('g0', 'tab-focus 1') +# config.bind('gB', 'set-cmd-text -s :bookmark-load -t') +# config.bind('gC', 'tab-clone') +# config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}') +# config.bind('gU', 'navigate up -t') +# config.bind('g^', 'tab-focus 1') +# config.bind('ga', 'open -t') +# config.bind('gb', 'set-cmd-text -s :bookmark-load') +config.bind('gd', 'download') +config.bind('gf', 'view-source') +# config.bind('gg', 'scroll-to-perc 0') +# config.bind('gl', 'tab-move -') +# config.bind('gm', 'tab-move') +# config.bind('go', 'set-cmd-text :open {url:pretty}') +# config.bind('gr', 'tab-move +') +# config.bind('gt', 'set-cmd-text -s :buffer') +# config.bind('gu', 'navigate up') +# config.bind('h', 'scroll left') +# config.bind('i', 'enter-mode insert') +# config.bind('j', 'scroll down') +# config.bind('k', 'scroll up') +# config.bind('l', 'scroll right') +# config.bind('m', 'quickmark-save') +# config.bind('n', 'search-next') +# config.bind('o', 'set-cmd-text -s :open') +# config.bind('pP', 'open -- {primary}') +# config.bind('pp', 'open -- {clipboard}') +# config.bind('q', 'record-macro') +# config.bind('r', 'reload') +# config.bind('sf', 'save') +# config.bind('sk', 'set-cmd-text -s :bind') +# config.bind('sl', 'set-cmd-text -s :set -t') +# config.bind('ss', 'set-cmd-text -s :set') +# config.bind('tPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tPu', 'config-cycle -p -u {url} content.plugins ;; reload') +config.bind('tSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload') +# config.bind('th', 'back -t') +# config.bind('tl', 'forward -t') +# config.bind('tpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tpu', 'config-cycle -p -t -u {url} content.plugins ;; reload') +# config.bind('tsH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload') +# config.bind('u', 'undo') +# config.bind('v', 'enter-mode caret') +# config.bind('wB', 'set-cmd-text -s :bookmark-load -w') +# config.bind('wO', 'set-cmd-text :open -w {url:pretty}') +# config.bind('wP', 'open -w -- {primary}') +# config.bind('wb', 'set-cmd-text -s :quickmark-load -w') +# config.bind('wf', 'hint all window') +# config.bind('wh', 'back -w') +# config.bind('wi', 'inspector') +# config.bind('wl', 'forward -w') +# config.bind('wo', 'set-cmd-text -s :open -w') +# config.bind('wp', 'open -w -- {clipboard}') +# config.bind('xO', 'set-cmd-text :open -b -r {url:pretty}') +# config.bind('xo', 'set-cmd-text -s :open -b') +# config.bind('yD', 'yank domain -s') +# config.bind('yP', 'yank pretty-url -s') +# config.bind('yT', 'yank title -s') +# config.bind('yY', 'yank -s') +# config.bind('yd', 'yank domain') +# config.bind('yp', 'yank pretty-url') +# config.bind('yt', 'yank title') +# config.bind('yy', 'yank') +# config.bind('{{', 'navigate prev -t') +# config.bind('}}', 'navigate next -t') + +## Bindings for caret mode +# config.bind('$', 'move-to-end-of-line', mode='caret') +# config.bind('0', 'move-to-start-of-line', mode='caret') +# config.bind('<Ctrl-Space>', 'drop-selection', mode='caret') +# config.bind('<Escape>', 'leave-mode', mode='caret') +# config.bind('<Return>', 'yank selection', mode='caret') +# config.bind('<Space>', 'toggle-selection', mode='caret') +# config.bind('G', 'move-to-end-of-document', mode='caret') +# config.bind('H', 'scroll left', mode='caret') +# config.bind('J', 'scroll down', mode='caret') +# config.bind('K', 'scroll up', mode='caret') +# config.bind('L', 'scroll right', mode='caret') +# config.bind('Y', 'yank selection -s', mode='caret') +# config.bind('[', 'move-to-start-of-prev-block', mode='caret') +# config.bind(']', 'move-to-start-of-next-block', mode='caret') +# config.bind('b', 'move-to-prev-word', mode='caret') +# config.bind('c', 'enter-mode normal', mode='caret') +# config.bind('e', 'move-to-end-of-word', mode='caret') +# config.bind('gg', 'move-to-start-of-document', mode='caret') +# config.bind('h', 'move-to-prev-char', mode='caret') +# config.bind('j', 'move-to-next-line', mode='caret') +# config.bind('k', 'move-to-prev-line', mode='caret') +# config.bind('l', 'move-to-next-char', mode='caret') +# config.bind('v', 'toggle-selection', mode='caret') +# config.bind('w', 'move-to-next-word', mode='caret') +# config.bind('y', 'yank selection', mode='caret') +# config.bind('{', 'move-to-end-of-prev-block', mode='caret') +# config.bind('}', 'move-to-end-of-next-block', mode='caret') + +## Bindings for command mode +# config.bind('<Alt-B>', 'rl-backward-word', mode='command') +# config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='command') +# config.bind('<Alt-D>', 'rl-kill-word', mode='command') +# config.bind('<Alt-F>', 'rl-forward-word', mode='command') +# config.bind('<Ctrl-?>', 'rl-delete-char', mode='command') +# config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='command') +# config.bind('<Ctrl-B>', 'rl-backward-char', mode='command') +# config.bind('<Ctrl-C>', 'completion-item-yank', mode='command') +# config.bind('<Ctrl-D>', 'completion-item-del', mode='command') +# config.bind('<Ctrl-E>', 'rl-end-of-line', mode='command') +# config.bind('<Ctrl-F>', 'rl-forward-char', mode='command') +# config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='command') +# config.bind('<Ctrl-K>', 'rl-kill-line', mode='command') +# config.bind('<Ctrl-N>', 'command-history-next', mode='command') +# config.bind('<Ctrl-P>', 'command-history-prev', mode='command') +# config.bind('<Ctrl-Return>', 'command-accept --rapid', mode='command') +# config.bind('<Ctrl-Shift-C>', 'completion-item-yank --sel', mode='command') +# config.bind('<Ctrl-Shift-Tab>', 'completion-item-focus prev-category', mode='command') +# config.bind('<Ctrl-Tab>', 'completion-item-focus next-category', mode='command') +# config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='command') +# config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='command') +# config.bind('<Ctrl-Y>', 'rl-yank', mode='command') +# config.bind('<Down>', 'completion-item-focus --history next', mode='command') +# config.bind('<Escape>', 'leave-mode', mode='command') +# config.bind('<Return>', 'command-accept', mode='command') +# config.bind('<Shift-Delete>', 'completion-item-del', mode='command') +# config.bind('<Shift-Tab>', 'completion-item-focus prev', mode='command') +# config.bind('<Tab>', 'completion-item-focus next', mode='command') +# config.bind('<Up>', 'completion-item-focus --history prev', mode='command') + +## Bindings for hint mode +# config.bind('<Ctrl-B>', 'hint all tab-bg', mode='hint') +# config.bind('<Ctrl-F>', 'hint links', mode='hint') +# config.bind('<Ctrl-R>', 'hint --rapid links tab-bg', mode='hint') +# config.bind('<Escape>', 'leave-mode', mode='hint') +# config.bind('<Return>', 'follow-hint', mode='hint') + +## Bindings for insert mode +# config.bind('<Ctrl-E>', 'open-editor', mode='insert') +# config.bind('<Escape>', 'leave-mode', mode='insert') +# config.bind('<Shift-Ins>', 'insert-text {primary}', mode='insert') +config.bind('<Ctrl-i>', 'spawn --userscript qute-keepass -p ~/Documents/20151120.kdbx', mode='insert') + +## Bindings for passthrough mode +# config.bind('<Ctrl-V>', 'leave-mode', mode='passthrough') + +## Bindings for prompt mode +# config.bind('<Alt-B>', 'rl-backward-word', mode='prompt') +# config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='prompt') +# config.bind('<Alt-D>', 'rl-kill-word', mode='prompt') +# config.bind('<Alt-F>', 'rl-forward-word', mode='prompt') +# config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='prompt') +# config.bind('<Alt-Y>', 'prompt-yank', mode='prompt') +# config.bind('<Ctrl-?>', 'rl-delete-char', mode='prompt') +# config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='prompt') +# config.bind('<Ctrl-B>', 'rl-backward-char', mode='prompt') +# config.bind('<Ctrl-E>', 'rl-end-of-line', mode='prompt') +# config.bind('<Ctrl-F>', 'rl-forward-char', mode='prompt') +# config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='prompt') +# config.bind('<Ctrl-K>', 'rl-kill-line', mode='prompt') +# config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='prompt') +# config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='prompt') +# config.bind('<Ctrl-X>', 'prompt-open-download', mode='prompt') +# config.bind('<Ctrl-Y>', 'rl-yank', mode='prompt') +# config.bind('<Down>', 'prompt-item-focus next', mode='prompt') +# config.bind('<Escape>', 'leave-mode', mode='prompt') +# config.bind('<Return>', 'prompt-accept', mode='prompt') +# config.bind('<Shift-Tab>', 'prompt-item-focus prev', mode='prompt') +# config.bind('<Tab>', 'prompt-item-focus next', mode='prompt') +# config.bind('<Up>', 'prompt-item-focus prev', mode='prompt') + +## Bindings for register mode +# config.bind('<Escape>', 'leave-mode', mode='register') + +## Bindings for yesno mode +# config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='yesno') +# config.bind('<Alt-Y>', 'prompt-yank', mode='yesno') +# config.bind('<Escape>', 'leave-mode', mode='yesno') +# config.bind('<Return>', 'prompt-accept', mode='yesno') +# config.bind('n', 'prompt-accept no', mode='yesno') +# config.bind('y', 'prompt-accept yes', mode='yesno') +config.source('nord-qutebrowser.py') diff --git a/.config/qutebrowser/jupyter-profile/autoconfig.yml b/.config/qutebrowser/jupyter-profile/autoconfig.yml new file mode 100644 index 0000000..bdf84b0 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/autoconfig.yml @@ -0,0 +1,7 @@ +# DO NOT edit this file by hand, qutebrowser will overwrite it. +# Instead, create a config.py - see :help for details. + +config_version: 2 +settings: + content.javascript.enabled: + '*://*.next-episode.net/*': false diff --git a/.config/qutebrowser/jupyter-profile/config.py b/.config/qutebrowser/jupyter-profile/config.py new file mode 100644 index 0000000..de9b2e7 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/config.py @@ -0,0 +1,1676 @@ +## Autogenerated config.py +## Documentation: +## qute://help/configuring.html +## qute://help/settings.html +# +# Read ~/.Xresources file for colours (see the help file listed above) +# import subprocess + +# def read_xresources(prefix): + # props = {} + # x=subprocess.run(['xrdb','-query'], stdout=subprocess.PIPE) + # lines = x.stdout.decode().split('\n') + # for line in filter(lambda l : l.startswith(prefix), lines): + # prop, _, value = line.partition(':\t') + # props[prop] = value + # return props + +# xresources = read_xresources('*') +# c.colors.statusbar.normal.bg = xresources['*.background'] + + +## This is here so configs done via the GUI are still loaded. +## Remove it to not load settings done via the GUI. +# config.load_autoconfig() + +## Aliases for commands. The keys of the given dictionary are the +## aliases, while the values are the commands they map to. +## Type: Dict +c.aliases = { 'w':'session-save', 'q':'quit', 'wq':'quit --save', 'qtb':'open https://www.qutebrowser.org/', 'mbt':'open https://signin1.bt.com/login/emailloginform', 'Ombt':'open -t https://signin1.bt.com/login/emailloginform', 'nx':'open https://next-episode.net/', 'Onx':'open -t https://next-episode.net/', 'gk':'open https://gameknot.com/', 'Ogk':'open -t https://gameknot.com/', 'yt':'open https://youtube.com', 'Oyt':'open -t https://youtube.com', 'Y':'open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files', 'hx':'open https://heasarc.gsfc.nasa.gov/', 'Ohx':'open -t https://heasarc.gsfc.nasa.gov/', 'yfy':'open https://yts.am/', '1337':'open https://1337x.to/home/', 'O1337':'open -t https://1337x.to/home/', 'ez':'open https://eztv.ag', 'Oez':'open -t https://eztv.ag', 'tz':'open https://extratorrent.ag', 'Otz':'open -t https://extratorrent.ag', 'tpb':'open https://thepiratebay.org/', 'Otpb':'open -t https://thepiratebay.org/', 'Nm':'open https://netmail.herts.ac.uk/', 'ONm':'open -t https://netmail.herts.ac.uk/', 'Oan':'open -t https://neonalley.com','Ocm':'open -t https://churchmilitant.com','Osp':'open -t https://stpaulcenter.com'} +# +## Time interval (in milliseconds) between auto-saves of +## config/cookies/etc. +## Type: Int +# c.auto_save.interval = 15000 + +## Always restore open sites when qutebrowser is reopened. +## Type: Bool +c.auto_save.session = True + +## Backend to use to display websites. qutebrowser supports two different +## web rendering engines / backends, QtWebKit and QtWebEngine. QtWebKit +## was discontinued by the Qt project with Qt 5.6, but picked up as a +## well maintained fork: https://github.com/annulen/webkit/wiki - +## qutebrowser only supports the fork. QtWebEngine is Qt's official +## successor to QtWebKit. It's slightly more resource hungry than +## QtWebKit and has a couple of missing features in qutebrowser, but is +## generally the preferred choice. +## Type: String +## Valid values: +## - webengine: Use QtWebEngine (based on Chromium). +## - webkit: Use QtWebKit (based on WebKit, similar to Safari). +# c.backend = 'webengine' + +## This setting can be used to map keys to other keys. When the key used +## as dictionary-key is pressed, the binding for the key used as +## dictionary-value is invoked instead. This is useful for global +## remappings of keys, for example to map Ctrl-[ to Escape. Note that +## when a key is bound (via `bindings.default` or `bindings.commands`), +## the mapping is ignored. +## Type: Dict +# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'} + +## Background color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)' + +## Bottom border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.bottom = 'black' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.category.border.top = 'black' + +## Foreground color of completion widget category headers. +## Type: QtColor +# c.colors.completion.category.fg = 'white' + +## Background color of the completion widget for even rows. +## Type: QssColor +# c.colors.completion.even.bg = '#333333' + +## Text color of the completion widget. May be a single color to use for +## all columns or a list of three colors, one for each column. +## Type: List of QtColor, or QtColor +# c.colors.completion.fg = ['white', 'white', 'white'] + +## Background color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.bg = '#e8c000' + +## Bottom border color of the selected completion item. +## Type: QssColor +# c.colors.completion.item.selected.border.bottom = '#bbbb00' + +## Top border color of the completion widget category headers. +## Type: QssColor +# c.colors.completion.item.selected.border.top = '#bbbb00' + +## Foreground color of the selected completion item. +## Type: QtColor +# c.colors.completion.item.selected.fg = 'black' + +## Foreground color of the matched text in the completion. +## Type: QssColor +# c.colors.completion.match.fg = '#ff4444' + +## Background color of the completion widget for odd rows. +## Type: QssColor +# c.colors.completion.odd.bg = '#444444' + +## Color of the scrollbar in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.bg = '#333333' + +## Color of the scrollbar handle in the completion view. +## Type: QssColor +# c.colors.completion.scrollbar.fg = 'white' + +## Background color for the download bar. +## Type: QssColor +# c.colors.downloads.bar.bg = 'black' + +## Background color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.bg = 'red' + +## Foreground color for downloads with errors. +## Type: QtColor +# c.colors.downloads.error.fg = 'white' + +## Color gradient start for download backgrounds. +## Type: QtColor +# c.colors.downloads.start.bg = '#0000aa' + +## Color gradient start for download text. +## Type: QtColor +# c.colors.downloads.start.fg = 'white' + +## Color gradient stop for download backgrounds. +## Type: QtColor +# c.colors.downloads.stop.bg = '#00aa00' + +## Color gradient end for download text. +## Type: QtColor +# c.colors.downloads.stop.fg = 'white' + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.bg = 'rgb' + +## Color gradient interpolation system for download text. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.downloads.system.fg = 'rgb' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +# c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))' + +## Font color for hints. +## Type: QssColor +# c.colors.hints.fg = 'black' + +## Font color for the matched part of hints. +## Type: QssColor +# c.colors.hints.match.fg = 'green' + +## Background color of the keyhint widget. +## Type: QssColor +# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +## Text color for the keyhint widget. +## Type: QssColor +# c.colors.keyhint.fg = '#FFFFFF' + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +# c.colors.keyhint.suffix.fg = '#FFFF00' + +## Background color of an error message. +## Type: QssColor +# c.colors.messages.error.bg = 'red' + +## Border color of an error message. +## Type: QssColor +# c.colors.messages.error.border = '#bb0000' + +## Foreground color of an error message. +## Type: QssColor +# c.colors.messages.error.fg = 'white' + +## Background color of an info message. +## Type: QssColor +# c.colors.messages.info.bg = 'black' + +## Border color of an info message. +## Type: QssColor +# c.colors.messages.info.border = '#333333' + +## Foreground color of an info message. +## Type: QssColor +# c.colors.messages.info.fg = 'white' + +## Background color of a warning message. +## Type: QssColor +# c.colors.messages.warning.bg = 'darkorange' + +## Border color of a warning message. +## Type: QssColor +# c.colors.messages.warning.border = '#d47300' + +## Foreground color of a warning message. +## Type: QssColor +# c.colors.messages.warning.fg = 'white' + +## Background color for prompts. +## Type: QssColor +# c.colors.prompts.bg = '#444444' + +## Border used around UI elements in prompts. +## Type: String +# c.colors.prompts.border = '1px solid gray' + +## Foreground color for prompts. +## Type: QssColor +# c.colors.prompts.fg = 'white' + +## Background color for the selected item in filename prompts. +## Type: QssColor +# c.colors.prompts.selected.bg = 'grey' + +## Background color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.bg = 'purple' + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +# c.colors.statusbar.caret.fg = 'white' + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.bg = '#a12dff' + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +# c.colors.statusbar.caret.selection.fg = 'white' + +## Background color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.bg = 'black' + +## Foreground color of the statusbar in command mode. +## Type: QssColor +# c.colors.statusbar.command.fg = 'white' + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.bg = 'grey' + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +# c.colors.statusbar.command.private.fg = 'white' + +## Background color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.bg = 'darkgreen' + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +# c.colors.statusbar.insert.fg = 'white' + +## Background color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.bg = 'black' + +## Foreground color of the statusbar. +## Type: QssColor +# c.colors.statusbar.normal.fg = 'white' + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.bg = 'darkblue' + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +# c.colors.statusbar.passthrough.fg = 'white' + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.bg = '#666666' + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +# c.colors.statusbar.private.fg = 'white' + +## Background color of the progress bar. +## Type: QssColor +# c.colors.statusbar.progress.bg = 'white' + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +# c.colors.statusbar.url.error.fg = 'orange' + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +# c.colors.statusbar.url.fg = 'white' + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +# c.colors.statusbar.url.hover.fg = 'aqua' + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +# c.colors.statusbar.url.success.http.fg = 'white' + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +# c.colors.statusbar.url.success.https.fg = 'lime' + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +# c.colors.statusbar.url.warn.fg = 'yellow' + +## Background color of the tab bar. +## Type: QtColor +# c.colors.tabs.bar.bg = '#555555' + +## Background color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.bg = 'darkgrey' + +## Foreground color of unselected even tabs. +## Type: QtColor +# c.colors.tabs.even.fg = 'white' + +## Color for the tab indicator on errors. +## Type: QtColor +# c.colors.tabs.indicator.error = '#ff0000' + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = '#0000aa' + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = '#00aa00' + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +# c.colors.tabs.indicator.system = 'rgb' + +## Background color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.bg = 'grey' + +## Foreground color of unselected odd tabs. +## Type: QtColor +# c.colors.tabs.odd.fg = 'white' + +## Background color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.bg = 'black' + +## Foreground color of selected even tabs. +## Type: QtColor +# c.colors.tabs.selected.even.fg = 'white' + +## Background color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.bg = 'black' + +## Foreground color of selected odd tabs. +## Type: QtColor +# c.colors.tabs.selected.odd.fg = 'white' + +## Background color for webpages if unset (or empty to use the theme's +## color). +## Type: QtColor +# c.colors.webpage.bg = 'white' + +## Number of commands to save in the command history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.cmd_history_max_items = 100 + +## Delay (in milliseconds) before updating completions after typing a +## character. +## Type: Int +# c.completion.delay = 0 + +## Height (in pixels or as percentage of the window) of the completion. +## Type: PercOrInt +# c.completion.height = '50%' + +## Minimum amount of characters needed to update completions. +## Type: Int +# c.completion.min_chars = 1 + +## Move on to the next part when there's only one possible completion +## left. +## Type: Bool +# c.completion.quick = True + +## Padding (in pixels) of the scrollbar handle in the completion window. +## Type: Int +# c.completion.scrollbar.padding = 2 + +## Width (in pixels) of the scrollbar in the completion window. +## Type: Int +# c.completion.scrollbar.width = 12 + +## When to show the autocompletion window. +## Type: String +## Valid values: +## - always: Whenever a completion is available. +## - auto: Whenever a completion is requested. +## - never: Never. +# c.completion.show = 'always' + +## Shrink the completion to be smaller than the configured size if there +## are no scrollbars. +## Type: Bool +# c.completion.shrink = False + +## Format of timestamps (e.g. for the history completion). +## Type: TimestampTemplate +# c.completion.timestamp_format = '%Y-%m-%d' + +## Execute the best-matching command on a partial match. +## Type: Bool +c.completion.use_best_match = True + +## Number of URLs to show in the web history. 0: no history / -1: +## unlimited +## Type: Int +# c.completion.web_history_max_items = -1 + +## Require a confirmation before quitting the application. +## Type: ConfirmQuit +## Valid values: +## - always: Always show a confirmation. +## - multiple-tabs: Show a confirmation if multiple tabs are opened. +## - downloads: Show a confirmation if downloads are running +## - never: Never show a confirmation. +# c.confirm_quit = ['never'] + +## Enable support for the HTML 5 web application cache feature. An +## application cache acts like an HTTP cache in some sense. For documents +## that use the application cache via JavaScript, the loader engine will +## first ask the application cache for the contents, before hitting the +## network. +## Type: Bool +# c.content.cache.appcache = True + +## Maximum number of pages to hold in the global memory page cache. The +## page cache allows for a nicer user experience when navigating forth or +## back to pages in the forward/back history, by pausing and resuming up +## to _n_ pages. For more information about the feature, please refer to: +## http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +## Type: Int +# c.content.cache.maximum_pages = 0 + +## Size (in bytes) of the HTTP network cache. Null to use the default +## value. With QtWebEngine, the maximum supported value is 2147483647 (~2 +## GB). +## Type: Int +# c.content.cache.size = None + +## Which cookies to accept. +## Type: String +## Valid values: +## - all: Accept all cookies. +## - no-3rdparty: Accept cookies from the same origin only. +## - no-unknown-3rdparty: Accept cookies from the same origin only, unless a cookie is already set for the domain. +## - never: Don't accept cookies at all. +# c.content.cookies.accept = 'no-3rdparty' + +## Store cookies. Note this option needs a restart with QtWebEngine on Qt +## < 5.9. +## Type: Bool +c.content.cookies.store = True + +## Default encoding to use for websites. The encoding must be a string +## describing an encoding such as _utf-8_, _iso-8859-1_, etc. +## Type: String +# c.content.default_encoding = 'iso-8859-1' + +## Enable extra tools for Web developers. This needs to be enabled for +## `:inspector` to work and also adds an _Inspect_ entry to the context +## menu. For QtWebEngine, see `--enable-webengine-inspector` in +## `qutebrowser --help` instead. +## Type: Bool +## c.content.developer_extras = True + +## Try to pre-fetch DNS entries to speed up browsing. +## Type: Bool +# c.content.dns_prefetch = True + +## Expand each subframe to its contents. This will flatten all the frames +## to become one scrollable page. +## Type: Bool +# c.content.frame_flattening = False + +## Allow websites to request geolocations. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.geolocation = 'ask' + +## Value to send in the `Accept-Language` header. +## Type: String +# c.content.headers.accept_language = 'en-US,en' + +## Custom headers for qutebrowser HTTP requests. +## Type: Dict +# c.content.headers.custom = {} + +## Value to send in the `DNT` header. When this is set to true, +## qutebrowser asks websites to not track your identity. If set to null, +## the DNT header is not sent at all. +## Type: Bool +# c.content.headers.do_not_track = True + +## When to send the Referer header. The Referer header tells websites +## from which website you were coming from when visiting them. +## Type: String +## Valid values: +## - always: Always send the Referer. +## - never: Never send the Referer. This is not recommended, as some sites may break. +## - same-domain: Only send the Referer for the same domain. This will still protect your privacy, but shouldn't break any sites. +# c.content.headers.referer = 'same-domain' + +## User agent to send. Unset to send the default. +## Type: String +# c.content.headers.user_agent = None + +## Enable host blocking. +## Type: Bool +# c.content.host_blocking.enabled = True + +## List of URLs of lists which contain hosts to block. The file can be +## in one of the following formats: - An `/etc/hosts`-like file - One +## host per line - A zip-file of any of the above, with either only one +## file, or a file named `hosts` (with any extension). +## Type: List of Url +# c.content.host_blocking.lists = ['https://www.malwaredomainlist.com/hostslist/hosts.txt', 'http://someonewhocares.org/hosts/hosts', 'http://winhelp2002.mvps.org/hosts.zip', 'http://malwaredomains.lehigh.edu/files/justdomains.zip', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext'] + +## List of domains that should always be loaded, despite being ad- +## blocked. Domains may contain * and ? wildcards and are otherwise +## required to exactly match the requested domain. Local domains are +## always exempt from hostblocking. +## Type: List of String +c.content.host_blocking.whitelist = ['piwik.org','next-episode.net','churchmilitant.com','churchmilitant.tv'] + +## Enable hyperlink auditing (`<a ping>`). +## Type: Bool +# c.content.hyperlink_auditing = False + +## Load images automatically in web pages. +## Type: Bool +# c.content.images = True + +## Show javascript alerts. +## Type: Bool +# c.content.javascript.alert = True + +## Allow JavaScript to read from or write to the clipboard. With +## QtWebEngine, writing the clipboard as response to a user interaction +## is always allowed. +## Type: Bool +# c.content.javascript.can_access_clipboard = False + +## Allow JavaScript to close tabs. +## Type: Bool +# c.content.javascript.can_close_tabs = False + +## Allow JavaScript to open new tabs without user interaction. +## Type: Bool +# c.content.javascript.can_open_tabs_automatically = False + +## Enable JavaScript. +## Type: Bool +c.content.javascript.enabled = True + +## Log levels to use for JavaScript console logging messages. When a +## JavaScript message with the level given in the dictionary key is +## logged, the corresponding dictionary value selects the qutebrowser +## logger to use. On QtWebKit, the "unknown" setting is always used. +## Type: Dict +# c.content.javascript.log = {'unknown': 'debug', 'info': 'debug', 'warning': 'debug', 'error': 'debug'} + +## Use the standard JavaScript modal dialog for `alert()` and +## `confirm()`. +## Type: Bool +# c.content.javascript.modal_dialog = False + +## Show javascript prompts. +## Type: Bool +# c.content.javascript.prompt = True + +## Allow locally loaded documents to access other local URLs. +## Type: Bool +# c.content.local_content_can_access_file_urls = True + +## Allow locally loaded documents to access remote URLs. +## Type: Bool +# c.content.local_content_can_access_remote_urls = False + +## Enable support for HTML 5 local storage and Web SQL. +## Type: Bool +# c.content.local_storage = True + +## Allow websites to record audio/video. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.media_capture = 'ask' + +## Netrc-file for HTTP authentication. If unset, `~/.netrc` is used. +## Type: File +# c.content.netrc_file = None + +## Allow websites to show notifications. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.notifications = 'ask' + +## Allow pdf.js to view PDF files in the browser. Note that the files can +## still be downloaded by clicking the download button in the pdf.js +## viewer. +## Type: Bool +# c.content.pdfjs = False + +## Enable plugins in Web pages. +## Type: Bool +# c.content.plugins = False vgg +c.content.plugins = True + +## Draw the background color and images also when the page is printed. +## Type: Bool +# c.content.print_element_backgrounds = True + +## Open new windows in private browsing mode which does not record +## visited pages. +## Type: Bool +# c.content.private_browsing = False + +## Proxy to use. In addition to the listed values, you can use a +## `socks://...` or `http://...` URL. +## Type: Proxy +## Valid values: +## - system: Use the system wide proxy. +## - none: Don't use any proxy +# c.content.proxy = 'system' + +## Send DNS requests over the configured proxy. +## Type: Bool +# c.content.proxy_dns_requests = True + +## Validate SSL handshakes. +## Type: BoolAsk +## Valid values: +## - true +## - false +## - ask +# c.content.ssl_strict = 'ask' + +## List of user stylesheet filenames to use. +## Type: List of File, or File +# c.content.user_stylesheets = [] + +## Enable WebGL. +## Type: Bool +# c.content.webgl = True + +## Limit fullscreen to the browser window (does not expand to fill the +## screen). +## Type: Bool +# c.content.windowed_fullscreen = False + +## Monitor load requests for cross-site scripting attempts. Suspicious +## scripts will be blocked and reported in the inspector's JavaScript +## console. Enabling this feature might have an impact on performance. +## Type: Bool +# c.content.xss_auditing = False + +## Directory to save downloads to. If unset, a sensible OS-specific +## default is used. +## Type: Directory +# c.downloads.location.directory = None + +## Prompt the user for the download location. If set to false, +## `downloads.location.directory` will be used. +## Type: Bool +# c.downloads.location.prompt = True + +## Remember the last used download directory. +## Type: Bool +# c.downloads.location.remember = True + +## What to display in the download filename input. +## Type: String +## Valid values: +## - path: Show only the download path. +## - filename: Show only download filename. +## - both: Show download path and filename. +# c.downloads.location.suggestion = 'path' + +## Default program used to open downloads. If null, the default internal +## handler is used. Any `{}` in the string will be expanded to the +## filename, else the filename will be appended. +## Type: String +# c.downloads.open_dispatcher = None + +## Where to show the downloaded files. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.downloads.position = 'top' + +## Duration (in milliseconds) to wait before removing finished downloads. +## If set to -1, downloads are never removed. +## Type: Int +# c.downloads.remove_finished = -1 + +## Editor (and arguments) to use for the `open-editor` command. The +## following placeholders are defined: * `{file}`: Filename of the file +## to be edited. * `{line}`: Line in which the caret is found in the +## text. * `{column}`: Column in which the caret is found in the text. * +## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`: +## Same as `{column}`, but starting from index 0. +## Type: ShellCommand +# c.editor.command = ['gvim', '-f', '{file}', '-c', 'normal {line}G{column0}l'] +c.editor.command = ["urxvt", "-title", "qutebrowserSratchpad", "-geometry", "86x24+40+60", "-e", "vim", "-f", "{}"] + +## Encoding to use for the editor. +## Type: Encoding +# c.editor.encoding = 'utf-8' + +## Font used in the completion categories. +## Type: Font +# c.fonts.completion.category = 'bold 10pt monospace' + +## Font used in the completion widget. +## Type: Font +# c.fonts.completion.entry = '10pt monospace' + +## Font used for the debugging console. +## Type: QtFont +# c.fonts.debug_console = '10pt monospace' + +## Font used for the downloadbar. +## Type: Font +# c.fonts.downloads = '10pt monospace' + +## Font used for the hints. +## Type: Font +c.fonts.hints = 'bold 8pt monospace' + +## Font used in the keyhint widget. +## Type: Font +# c.fonts.keyhint = '10pt monospace' + +## Font used for error messages. +## Type: Font +# c.fonts.messages.error = '10pt monospace' + +## Font used for info messages. +## Type: Font +# c.fonts.messages.info = '10pt monospace' + +## Font used for warning messages. +## Type: Font +# c.fonts.messages.warning = '10pt monospace' + +## Default monospace fonts. Whenever "monospace" is used in a font +## setting, it's replaced with the fonts listed here. +## Type: Font +# c.fonts.monospace = '"xos4 Terminus", Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal' + +## Font used for prompts. +## Type: Font +# c.fonts.prompts = '10pt sans-serif' + +## Font used in the statusbar. +## Type: Font +# c.fonts.statusbar = '10pt monospace' + +## Font used in the tab bar. +## Type: QtFont +# c.fonts.tabs = '10pt monospace' + +## Font family for cursive fonts. +## Type: FontFamily +# c.fonts.web.family.cursive = '' + +## Font family for fantasy fonts. +## Type: FontFamily +# c.fonts.web.family.fantasy = '' + +## Font family for fixed fonts. +## Type: FontFamily +# c.fonts.web.family.fixed = '' + +## Font family for sans-serif fonts. +## Type: FontFamily +# c.fonts.web.family.sans_serif = '' + +## Font family for serif fonts. +## Type: FontFamily +# c.fonts.web.family.serif = '' + +## Font family for standard fonts. +## Type: FontFamily +# c.fonts.web.family.standard = '' + +## Default font size (in pixels) for regular text. +## Type: Int +# c.fonts.web.size.default = 16 + +## Default font size (in pixels) for fixed-pitch text. +## Type: Int +# c.fonts.web.size.default_fixed = 13 + +## Hard minimum font size (in pixels). +## Type: Int +# c.fonts.web.size.minimum = 0 + +## Minimum logical font size (in pixels) that is applied when zooming +## out. +## Type: Int +# c.fonts.web.size.minimum_logical = 6 + +## When a hint can be automatically followed without pressing Enter. +## Type: String +## Valid values: +## - always: Auto-follow whenever there is only a single hint on a page. +## - unique-match: Auto-follow whenever there is a unique non-empty match in either the hint string (word mode) or filter (number mode). +## - full-match: Follow the hint when the user typed the whole hint (letter, word or number mode) or the element's text (only in number mode). +## - never: The user will always need to press Enter to follow a hint. +# c.hints.auto_follow = 'unique-match' + +## Duration (in milliseconds) to ignore normal-mode key bindings after a +## successful auto-follow. +## Type: Int +# c.hints.auto_follow_timeout = 0 + +## CSS border value for hints. +## Type: String +# c.hints.border = '1px solid #E3BE23' + +## Characters used for hint strings. +## Type: UniqueCharString +# c.hints.chars = 'asdfghjkl' + +## Dictionary file to be used by the word hints. +## Type: File +# c.hints.dictionary = '/usr/share/dict/words' + +## Which implementation to use to find elements to hint. +## Type: String +## Valid values: +## - javascript: Better but slower +## - python: Slightly worse but faster +# c.hints.find_implementation = 'python' + +## Hide unmatched hints in rapid mode. +## Type: Bool +# c.hints.hide_unmatched_rapid_hints = True + +## Minimum number of characters used for hint strings. +## Type: Int +# c.hints.min_chars = 1 + +## Mode to use for hints. +## Type: String +## Valid values: +## - number: Use numeric hints. (In this mode you can also type letters from the hinted element to filter and reduce the number of elements that are hinted.) +## - letter: Use the characters in the `hints.chars` setting. +## - word: Use hints words based on the html elements and the extra words. +c.hints.mode = 'number' + +## Comma-separated list of regular expressions to use for 'next' links. +## Type: List of Regex +# c.hints.next_regexes = ['\\bnext\\b', '\\bmore\\b', '\\bnewer\\b', '\\b[>→≫]\\b', '\\b(>>|»)\\b', '\\bcontinue\\b'] + +## Comma-separated list of regular expressions to use for 'prev' links. +## Type: List of Regex +# c.hints.prev_regexes = ['\\bprev(ious)?\\b', '\\bback\\b', '\\bolder\\b', '\\b[<←≪]\\b', '\\b(<<|«)\\b'] + +## Scatter hint key chains (like Vimium) or not (like dwb). Ignored for +## number hints. +## Type: Bool +# c.hints.scatter = True + +## Make characters in hint strings uppercase. +## Type: Bool +# c.hints.uppercase = False + +## Maximum time (in minutes) between two history items for them to be +## considered being from the same browsing session. Items with less time +## between them are grouped when being displayed in `:history`. Use -1 to +## disable separation. +## Type: Int +# c.history_gap_interval = 30 + +## Which unbound keys to forward to the webview in normal mode. +## Type: String +## Valid values: +## - all: Forward all unbound keys. +## - auto: Forward unbound non-alphanumeric keys. +## - none: Don't forward any keys. +# c.input.forward_unbound_keys = 'auto' + +## Enter insert mode if an editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_enter = True + +## Leave insert mode if a non-editable element is clicked. +## Type: Bool +# c.input.insert_mode.auto_leave = True + +## Automatically enter insert mode if an editable element is focused +## after loading the page. +## Type: Bool +# c.input.insert_mode.auto_load = False + +## Switch to insert mode when clicking flash and other plugins. +## Type: Bool +# c.input.insert_mode.plugins = False + +## Include hyperlinks in the keyboard focus chain when tabbing. +## Type: Bool +# c.input.links_included_in_focus_chain = True + +## Timeout (in milliseconds) for partially typed key bindings. If the +## current input forms only partial matches, the keystring will be +## cleared after this time. +## Type: Int +# c.input.partial_timeout = 5000 + +## Enable Opera-like mouse rocker gestures. This disables the context +## menu. +## Type: Bool +# c.input.rocker_gestures = False + +## Enable spatial navigation. Spatial navigation consists in the ability +## to navigate between focusable elements in a Web page, such as +## hyperlinks and form controls, by using Left, Right, Up and Down arrow +## keys. For example, if the user presses the Right key, heuristics +## determine whether there is an element he might be trying to reach +## towards the right and which element he probably wants. +## Type: Bool +# c.input.spatial_navigation = False + +## Keychains that shouldn't be shown in the keyhint dialog. Globs are +## supported, so `;*` will blacklist all keychains starting with `;`. Use +## `*` to disable keyhints. +## Type: List of String +# c.keyhint.blacklist = [] + +## Time (in milliseconds) from pressing a key to seeing the keyhint +## dialog. +## Type: Int +# c.keyhint.delay = 500 + +## Rounding radius (in pixels) for the edges of the keyhint dialog. +## Type: Int +# c.keyhint.radius = 6 + +## Duration (in milliseconds) to show messages in the statusbar for. Set +## to 0 to never clear messages. +## Type: Int +# c.messages.timeout = 2000 + +## How to open links in an existing instance if a new one is launched. +## This happens when e.g. opening a link from a terminal. See +## `new_instance_open_target_window` to customize in which window the +## link is opened in. +## Type: String +## Valid values: +## - tab: Open a new tab in the existing window and activate the window. +## - tab-bg: Open a new background tab in the existing window and activate the window. +## - tab-silent: Open a new tab in the existing window without activating the window. +## - tab-bg-silent: Open a new background tab in the existing window without activating the window. +## - window: Open in a new window. +# c.new_instance_open_target = 'tab' + +## Which window to choose when opening links as new tabs. When +## `new_instance_open_target` is not set to `window`, this is ignored. +## Type: String +## Valid values: +## - first-opened: Open new tabs in the first (oldest) opened window. +## - last-opened: Open new tabs in the last (newest) opened window. +## - last-focused: Open new tabs in the most recently focused window. +## - last-visible: Open new tabs in the most recently visible window. +# c.new_instance_open_target_window = 'last-focused' + +## Show a filebrowser in upload/download prompts. +## Type: Bool +# c.prompt.filebrowser = True + +## Rounding radius (in pixels) for the edges of prompts. +## Type: Int +# c.prompt.radius = 8 + +## Additional arguments to pass to Qt, without leading `--`. With +## QtWebEngine, some Chromium arguments (see +## https://peter.sh/experiments/chromium-command-line-switches/ for a +## list) will work. +## Type: List of String +# c.qt.args = [] + +## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM` +## environment variable and is useful to force using the XCB plugin when +## running QtWebEngine on Wayland. +## Type: String +# c.qt.force_platform = None + +## Force software rendering for QtWebEngine. This is needed for +## QtWebEngine to work with Nouveau drivers. +## Type: Bool +# c.qt.force_software_rendering = False + +## Turn on Qt HighDPI scaling. This is equivalent to setting +## QT_AUTO_SCREEN_SCALE_FACTOR=1 in the environment. It's off by default +## as it can cause issues with some bitmap fonts. As an alternative to +## this, it's possible to set font sizes and the `zoom.default` setting. +## Type: Bool +# c.qt.highdpi = False + +## Show a scrollbar. +## Type: Bool +# c.scrolling.bar = False + +## Enable smooth scrolling for web pages. Note smooth scrolling does not +## work with the `:scroll-px` command. +## Type: Bool +# c.scrolling.smooth = False + +## When to find text on a page case-insensitively. +## Type: String +## Valid values: +## - always: Search case-insensitively. +## - never: Search case-sensitively. +## - smart: Search case-sensitively if there are capital characters. +# c.search.ignore_case = 'smart' + +## Find text on a page incrementally, renewing the search for each typed +## character. +## Type: Bool +# c.search.incremental = True + +## Name of the session to save by default. If this is set to null, the +## session which was last loaded is saved. +## Type: SessionName +# c.session.default_name = None + +## Load a restored tab as soon as it takes focus. +## Type: Bool +# c.session.lazy_restore = False + +## Languages to use for spell checking. You can check for available +## languages and install dictionaries using scripts/dictcli.py. Run the +## script with -h/--help for instructions. +## Type: List of String +## Valid values: +## - af-ZA: Afrikaans (South Africa) +## - bg-BG: Bulgarian (Bulgaria) +## - ca-ES: Catalan (Spain) +## - cs-CZ: Czech (Czech Republic) +## - da-DK: Danish (Denmark) +## - de-DE: German (Germany) +## - el-GR: Greek (Greece) +## - en-AU: English (Australia) +## - en-CA: English (Canada) +## - en-GB: English (United Kingdom) +## - en-US: English (United States) +## - es-ES: Spanish (Spain) +## - et-EE: Estonian (Estonia) +## - fa-IR: Farsi (Iran) +## - fo-FO: Faroese (Faroe Islands) +## - fr-FR: French (France) +## - he-IL: Hebrew (Israel) +## - hi-IN: Hindi (India) +## - hr-HR: Croatian (Croatia) +## - hu-HU: Hungarian (Hungary) +## - id-ID: Indonesian (Indonesia) +## - it-IT: Italian (Italy) +## - ko: Korean +## - lt-LT: Lithuanian (Lithuania) +## - lv-LV: Latvian (Latvia) +## - nb-NO: Norwegian (Norway) +## - nl-NL: Dutch (Netherlands) +## - pl-PL: Polish (Poland) +## - pt-BR: Portuguese (Brazil) +## - pt-PT: Portuguese (Portugal) +## - ro-RO: Romanian (Romania) +## - ru-RU: Russian (Russia) +## - sh: Serbo-Croatian +## - sk-SK: Slovak (Slovakia) +## - sl-SI: Slovenian (Slovenia) +## - sq: Albanian +## - sr: Serbian +## - sv-SE: Swedish (Sweden) +## - ta-IN: Tamil (India) +## - tg-TG: Tajik (Tajikistan) +## - tr-TR: Turkish (Turkey) +## - uk-UA: Ukrainian (Ukraine) +## - vi-VN: Vietnamese (Viet Nam) +# c.spellcheck.languages = [] + +## Hide the statusbar unless a message is shown. +## Type: Bool +# c.statusbar.hide = False + +## Padding (in pixels) for the statusbar. +## Type: Padding +# c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0} + +## Position of the status bar. +## Type: VerticalPosition +## Valid values: +## - top +## - bottom +# c.statusbar.position = 'bottom' + +## List of widgets displayed in the statusbar. +## Type: List of String +## Valid values: +## - url: Current page URL. +## - scroll: Percentage of the current page position like `10%`. +## - scroll_raw: Raw percentage of the current page position like `10`. +## - history: Display an arrow when possible to go back/forward in history. +## - tabs: Current active tab, e.g. `2`. +## - keypress: Display pressed keys when composing a vi command. +## - progress: Progress bar for the current page loading. +# c.statusbar.widgets = ['keypress', 'url', 'scroll', 'history', 'tabs', 'progress'] + +## Open new tabs (middleclick/ctrl+click) in the background. +## Type: Bool +# c.tabs.background = False + +## Mouse button with which to close tabs. +## Type: String +## Valid values: +## - right: Close tabs on right-click. +## - middle: Close tabs on middle-click. +## - none: Don't close tabs using the mouse. +# c.tabs.close_mouse_button = 'middle' + +## How to behave when the close mouse button is pressed on the tab bar. +## Type: String +## Valid values: +## - new-tab: Open a new tab. +## - close-current: Close the current tab. +## - close-last: Close the last tab. +## - ignore: Don't do anything. +# c.tabs.close_mouse_button_on_bar = 'new-tab' + +## Scaling factor for favicons in the tab bar. The tab size is unchanged, +## so big favicons also require extra `tabs.padding`. +## Type: Float +# c.tabs.favicons.scale = 1.0 + +## Show favicons in the tab bar. +## Type: Bool +# c.tabs.favicons.show = True + +## Padding (in pixels) for tab indicators. +## Type: Padding +# c.tabs.indicator.padding = {'top': 2, 'bottom': 2, 'left': 0, 'right': 4} + +## Width (in pixels) of the progress indicator (0 to disable). +## Type: Int +# c.tabs.indicator.width = 3 + +## How to behave when the last tab is closed. +## Type: String +## Valid values: +## - ignore: Don't do anything. +## - blank: Load a blank page. +## - startpage: Load the start page. +## - default-page: Load the default page. +## - close: Close the window. +# c.tabs.last_close = 'ignore' + +## When switching tabs, what input mode is applied. +## Type: String +## Valid values: +## - persist: Retain the current mode. +## - restore: Restore previously saved mode. +## - normal: Always revert to normal mode. +# c.tabs.mode_on_change = 'normal' + +## Switch between tabs using the mouse wheel. +## Type: Bool +# c.tabs.mousewheel_switching = True + +## Position of new tabs opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.related = 'next' + +## Position of new tabs which aren't opened from another tab. +## Type: NewTabPosition +## Valid values: +## - prev: Before the current tab. +## - next: After the current tab. +## - first: At the beginning. +## - last: At the end. +# c.tabs.new_position.unrelated = 'last' + +## Padding (in pixels) around text for tabs. +## Type: Padding +# c.tabs.padding = {'top': 0, 'bottom': 0, 'left': 5, 'right': 5} + +## Shrink pinned tabs down to their contents. +## Type: Bool +# c.tabs.pinned.shrink = True + +## Position of the tab bar. +## Type: Position +## Valid values: +## - top +## - bottom +## - left +## - right +# c.tabs.position = 'top' + +## Which tab to select when the focused tab is removed. +## Type: SelectOnRemove +## Valid values: +## - prev: Select the tab which came before the closed one (left in horizontal, above in vertical). +## - next: Select the tab which came after the closed one (right in horizontal, below in vertical). +## - last-used: Select the previously selected tab. +# c.tabs.select_on_remove = 'next' + +## When to show the tab bar. +## Type: String +## Valid values: +## - always: Always show the tab bar. +## - never: Always hide the tab bar. +## - multiple: Hide the tab bar if only one tab is open. +## - switching: Show the tab bar when switching tabs. +# c.tabs.show = 'always' + +## Duration (in milliseconds) to show the tab bar before hiding it when +## tabs.show is set to 'switching'. +## Type: Int +# c.tabs.show_switching_delay = 800 + +## Open a new window for every tab. +## Type: Bool +# c.tabs.tabs_are_windows = False + +## Alignment of the text inside of tabs. +## Type: TextAlignment +## Valid values: +## - left +## - right +## - center +# c.tabs.title.alignment = 'left' + +## Format to use for the tab title. The following placeholders are +## defined: * `{perc}`: Percentage as a string like `[10%]`. * +## `{perc_raw}`: Raw percentage, e.g. `10`. * `{title}`: Title of the +## current web page. * `{title_sep}`: The string ` - ` if a title is set, +## empty otherwise. * `{index}`: Index of this tab. * `{id}`: Internal +## tab ID of this tab. * `{scroll_pos}`: Page scroll position. * +## `{host}`: Host of the current web page. * `{backend}`: Either +## ''webkit'' or ''webengine'' * `{private}`: Indicates when private mode +## is enabled. * `{current_url}`: URL of the current web page. * +## `{protocol}`: Protocol (http/https/...) of the current web page. +## Type: FormatString +# c.tabs.title.format = '{index}: {title}' + +## Format to use for the tab title for pinned tabs. The same placeholders +## like for `tabs.title.format` are defined. +## Type: FormatString +# c.tabs.title.format_pinned = '{index}' + +## Width (in pixels or as percentage of the window) of the tab bar if +## it's vertical. +## Type: PercOrInt +# c.tabs.width = '20%' + +## Wrap when changing tabs. +## Type: Bool +# c.tabs.wrap = True + +## What search to start when something else than a URL is entered. +## Type: String +## Valid values: +## - naive: Use simple/naive check. +## - dns: Use DNS requests (might be slow!). +## - never: Never search automatically. +# c.url.auto_search = 'naive' + +## Page to open if :open -t/-b/-w is used without URL. Use `about:blank` +## for a blank page. +## Type: FuzzyUrl +# c.url.default_page = 'https://start.duckduckgo.com/' + +## URL segments where `:navigate increment/decrement` will search for a +## number. +## Type: FlagList +## Valid values: +## - host +## - port +## - path +## - query +## - anchor +# c.url.incdec_segments = ['path', 'query'] + +## Search engines which can be used via the address bar. Maps a search +## engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}` +## placeholder. The placeholder will be replaced by the search term, use +## `{{` and `}}` for literal `{`/`}` signs. The search engine named +## `DEFAULT` is used when `url.auto_search` is turned on and something +## else than a URL was entered to be opened. Other search engines can be +## used by prepending the search engine name to the search term, e.g. +## `:open google qutebrowser`. +## Type: Dict + +c.url.searchengines = { 'DEFAULT':'https://duckduckgo.com/?q={}', 'aw':'https://wiki.archlinux.org/?q={}', 'g':'https://www.google.com/?q={}'} + +## Page(s) to open at the start. +## Type: List of FuzzyUrl, or FuzzyUrl +# c.url.start_pages = ['https://start.duckduckgo.com'] + +## URL parameters to strip with `:yank url`. +## Type: List of String +# c.url.yank_ignored_parameters = ['ref', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'] + +## Hide the window decoration when using wayland. +## Type: Bool +# c.window.hide_wayland_decoration = False + +## Format to use for the window title. The same placeholders like for +## `tabs.title.format` are defined. +## Type: FormatString +# c.window.title_format = '{perc}{title}{title_sep}qutebrowser' + +## Default zoom level. +## Type: Perc +# c.zoom.default = '100%' + +## Available zoom levels. +## Type: List of Perc +# c.zoom.levels = ['25%', '33%', '50%', '67%', '75%', '90%', '100%', '110%', '125%', '150%', '175%', '200%', '250%', '300%', '400%', '500%'] + +## Number of zoom increments to divide the mouse wheel movements to. +## Type: Int +# c.zoom.mouse_divider = 512 + +## Apply the zoom factor on a frame only to the text or to all content. +## Type: Bool +# c.zoom.text_only = False + +## Bindings for normal mode +config.bind(',c', 'hint links spawn mpv --ytdl --ytdl-raw-options=username="v.graffagnino@btinternet.com",password="N9\Ch0n\H@n9" --cookies-file=~/.local/share/qutebrowser/webengine/Cookies --ytdl-raw-options=username=v\.graffagnino\@btinternet\.com,password=N9\\Ch0n\\H\@n9 {hint-url}') +config.bind(',m', 'hint links spawn mpv --ytdl {hint-url} --load-unsafe-playlists') +config.bind('m', 'hint links spawn mpv --ytdl -slang=en {hint-url} --load-unsafe-playlists') +#config.bind('m', 'spawn umpv {url}') +config.bind(',M', 'hint links spawn umpv {hint-url}') +config.bind(',t', 'hint links spawn transmission-remote --add {hint-url}') +config.bind(',y', 'hint links spawn /usr/bin/ts youtube-dl {hint-url}') +config.bind(',Y', 'hint links spawn /usr/bin/urxvt -e mpsyt dlurl {hint-url}') +config.bind(',q', 'hint links spawn echo "mpsyt dlurl {hint-url}" >> ~/ytdl.list') +# config.bind("'", 'enter-mode jump_mark') +# config.bind('+', 'zoom-in') +# config.bind('-', 'zoom-out') +# config.bind('.', 'repeat-command') +# config.bind('/', 'set-cmd-text /') +# config.bind(':', 'set-cmd-text :') +# config.bind(';I', 'hint images tab') +# config.bind(';O', 'hint links fill :open -t -r {hint-url}') +# config.bind(';R', 'hint --rapid links window') +# config.bind(';Y', 'hint links yank-primary') +# config.bind(';b', 'hint all tab-bg') +# config.bind(';d', 'hint links download') +# config.bind(';f', 'hint all tab-fg') +# config.bind(';h', 'hint all hover') +# config.bind(';i', 'hint images') +# config.bind(';o', 'hint links fill :open {hint-url}') +# config.bind(';r', 'hint --rapid links tab-bg') +# config.bind(';t', 'hint inputs') +# config.bind(';y', 'hint links yank') +# config.bind('<Alt-1>', 'tab-focus 1') +# config.bind('<Alt-2>', 'tab-focus 2') +# config.bind('<Alt-3>', 'tab-focus 3') +# config.bind('<Alt-4>', 'tab-focus 4') +# config.bind('<Alt-5>', 'tab-focus 5') +# config.bind('<Alt-6>', 'tab-focus 6') +# config.bind('<Alt-7>', 'tab-focus 7') +# config.bind('<Alt-8>', 'tab-focus 8') +# config.bind('<Alt-9>', 'tab-focus -1') +# config.bind('<Ctrl-A>', 'navigate increment') +# config.bind('<Ctrl-Alt-p>', 'print') +# config.bind('<Ctrl-B>', 'scroll-page 0 -1') +# config.bind('<Ctrl-D>', 'scroll-page 0 0.5') +# config.bind('<Ctrl-F5>', 'reload -f') +# config.bind('<Ctrl-F>', 'scroll-page 0 1') +# config.bind('<Ctrl-N>', 'open -w') +# config.bind('<Ctrl-PgDown>', 'tab-next') +# config.bind('<Ctrl-PgUp>', 'tab-prev') +# config.bind('<Ctrl-Q>', 'quit') +# config.bind('<Ctrl-Return>', 'follow-selected -t') +# config.bind('<Ctrl-Shift-N>', 'open -p') +# config.bind('<Ctrl-Shift-T>', 'undo') +# config.bind('<Ctrl-Shift-W>', 'close') +# config.bind('<Ctrl-T>', 'open -t') +# config.bind('<Ctrl-Tab>', 'tab-focus last') +# config.bind('<Ctrl-U>', 'scroll-page 0 -0.5') +# config.bind('<Ctrl-V>', 'enter-mode passthrough') +# config.bind('<Ctrl-W>', 'tab-close') +# config.bind('<Ctrl-X>', 'navigate decrement') +# config.bind('<Ctrl-^>', 'tab-focus last') +# config.bind('<Ctrl-h>', 'home') +# config.bind('<Ctrl-p>', 'tab-pin') +# config.bind('<Ctrl-s>', 'stop') +# config.bind('<Escape>', 'clear-keychain ;; search ;; fullscreen --leave') +# config.bind('<F11>', 'fullscreen') +# config.bind('<F5>', 'reload') +# config.bind('<Return>', 'follow-selected') +# config.bind('<back>', 'back') +# config.bind('<forward>', 'forward') +# config.bind('=', 'zoom') +# config.bind('?', 'set-cmd-text ?') +# config.bind('@', 'run-macro') +# config.bind('B', 'set-cmd-text -s :quickmark-load -t') +# config.bind('D', 'tab-close -o') +# config.bind('F', 'hint all tab') +# config.bind('G', 'scroll-to-perc') +# config.bind('H', 'back') +config.bind('J', 'tab-prev') +config.bind('K', 'tab-next') +# config.bind('L', 'forward') +# config.bind('M', 'bookmark-add') +# config.bind('N', 'search-prev') +# config.bind('O', 'set-cmd-text -s :open -t') +# config.bind('PP', 'open -t -- {primary}') +# config.bind('Pp', 'open -t -- {clipboard}') +# config.bind('R', 'reload -f') +# config.bind('Sb', 'open qute://bookmarks#bookmarks') +# config.bind('Sh', 'open qute://history') +# config.bind('Sq', 'open qute://bookmarks') +# config.bind('Ss', 'open qute://settings') +# config.bind('T', 'tab-focus') +# config.bind('ZQ', 'quit') +# config.bind('ZZ', 'quit --save') +# config.bind('[[', 'navigate prev') +# config.bind(']]', 'navigate next') +# config.bind('`', 'enter-mode set_mark') +# config.bind('ad', 'download-cancel') +# config.bind('b', 'set-cmd-text -s :quickmark-load') +# config.bind('cd', 'download-clear') +# config.bind('co', 'tab-only') +# config.bind('d', 'tab-close') +# config.bind('f', 'hint') +# config.bind('g$', 'tab-focus -1') +# config.bind('g0', 'tab-focus 1') +# config.bind('gB', 'set-cmd-text -s :bookmark-load -t') +# config.bind('gC', 'tab-clone') +# config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}') +# config.bind('gU', 'navigate up -t') +# config.bind('g^', 'tab-focus 1') +# config.bind('ga', 'open -t') +# config.bind('gb', 'set-cmd-text -s :bookmark-load') +config.bind('gd', 'download') +config.bind('gf', 'view-source') +# config.bind('gg', 'scroll-to-perc 0') +# config.bind('gl', 'tab-move -') +# config.bind('gm', 'tab-move') +# config.bind('go', 'set-cmd-text :open {url:pretty}') +# config.bind('gr', 'tab-move +') +# config.bind('gt', 'set-cmd-text -s :buffer') +# config.bind('gu', 'navigate up') +# config.bind('h', 'scroll left') +# config.bind('i', 'enter-mode insert') +# config.bind('j', 'scroll down') +# config.bind('k', 'scroll up') +# config.bind('l', 'scroll right') +# config.bind('m', 'quickmark-save') +# config.bind('n', 'search-next') +# config.bind('o', 'set-cmd-text -s :open') +# config.bind('pP', 'open -- {primary}') +# config.bind('pp', 'open -- {clipboard}') +# config.bind('q', 'record-macro') +# config.bind('r', 'reload') +# config.bind('sf', 'save') +# config.bind('sk', 'set-cmd-text -s :bind') +# config.bind('sl', 'set-cmd-text -s :set -t') +# config.bind('ss', 'set-cmd-text -s :set') +# config.bind('tPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tPu', 'config-cycle -p -u {url} content.plugins ;; reload') +config.bind('tSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload') +# config.bind('th', 'back -t') +# config.bind('tl', 'forward -t') +# config.bind('tpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload') +# config.bind('tph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload') +# config.bind('tpu', 'config-cycle -p -t -u {url} content.plugins ;; reload') +# config.bind('tsH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload') +# config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload') +# config.bind('u', 'undo') +# config.bind('v', 'enter-mode caret') +# config.bind('wB', 'set-cmd-text -s :bookmark-load -w') +# config.bind('wO', 'set-cmd-text :open -w {url:pretty}') +# config.bind('wP', 'open -w -- {primary}') +# config.bind('wb', 'set-cmd-text -s :quickmark-load -w') +# config.bind('wf', 'hint all window') +# config.bind('wh', 'back -w') +# config.bind('wi', 'inspector') +# config.bind('wl', 'forward -w') +# config.bind('wo', 'set-cmd-text -s :open -w') +# config.bind('wp', 'open -w -- {clipboard}') +# config.bind('xO', 'set-cmd-text :open -b -r {url:pretty}') +# config.bind('xo', 'set-cmd-text -s :open -b') +# config.bind('yD', 'yank domain -s') +# config.bind('yP', 'yank pretty-url -s') +# config.bind('yT', 'yank title -s') +# config.bind('yY', 'yank -s') +# config.bind('yd', 'yank domain') +# config.bind('yp', 'yank pretty-url') +# config.bind('yt', 'yank title') +# config.bind('yy', 'yank') +# config.bind('{{', 'navigate prev -t') +# config.bind('}}', 'navigate next -t') + +## Bindings for caret mode +# config.bind('$', 'move-to-end-of-line', mode='caret') +# config.bind('0', 'move-to-start-of-line', mode='caret') +# config.bind('<Ctrl-Space>', 'drop-selection', mode='caret') +# config.bind('<Escape>', 'leave-mode', mode='caret') +# config.bind('<Return>', 'yank selection', mode='caret') +# config.bind('<Space>', 'toggle-selection', mode='caret') +# config.bind('G', 'move-to-end-of-document', mode='caret') +# config.bind('H', 'scroll left', mode='caret') +# config.bind('J', 'scroll down', mode='caret') +# config.bind('K', 'scroll up', mode='caret') +# config.bind('L', 'scroll right', mode='caret') +# config.bind('Y', 'yank selection -s', mode='caret') +# config.bind('[', 'move-to-start-of-prev-block', mode='caret') +# config.bind(']', 'move-to-start-of-next-block', mode='caret') +# config.bind('b', 'move-to-prev-word', mode='caret') +# config.bind('c', 'enter-mode normal', mode='caret') +# config.bind('e', 'move-to-end-of-word', mode='caret') +# config.bind('gg', 'move-to-start-of-document', mode='caret') +# config.bind('h', 'move-to-prev-char', mode='caret') +# config.bind('j', 'move-to-next-line', mode='caret') +# config.bind('k', 'move-to-prev-line', mode='caret') +# config.bind('l', 'move-to-next-char', mode='caret') +# config.bind('v', 'toggle-selection', mode='caret') +# config.bind('w', 'move-to-next-word', mode='caret') +# config.bind('y', 'yank selection', mode='caret') +# config.bind('{', 'move-to-end-of-prev-block', mode='caret') +# config.bind('}', 'move-to-end-of-next-block', mode='caret') + +## Bindings for command mode +# config.bind('<Alt-B>', 'rl-backward-word', mode='command') +# config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='command') +# config.bind('<Alt-D>', 'rl-kill-word', mode='command') +# config.bind('<Alt-F>', 'rl-forward-word', mode='command') +# config.bind('<Ctrl-?>', 'rl-delete-char', mode='command') +# config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='command') +# config.bind('<Ctrl-B>', 'rl-backward-char', mode='command') +# config.bind('<Ctrl-C>', 'completion-item-yank', mode='command') +# config.bind('<Ctrl-D>', 'completion-item-del', mode='command') +# config.bind('<Ctrl-E>', 'rl-end-of-line', mode='command') +# config.bind('<Ctrl-F>', 'rl-forward-char', mode='command') +# config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='command') +# config.bind('<Ctrl-K>', 'rl-kill-line', mode='command') +# config.bind('<Ctrl-N>', 'command-history-next', mode='command') +# config.bind('<Ctrl-P>', 'command-history-prev', mode='command') +# config.bind('<Ctrl-Return>', 'command-accept --rapid', mode='command') +# config.bind('<Ctrl-Shift-C>', 'completion-item-yank --sel', mode='command') +# config.bind('<Ctrl-Shift-Tab>', 'completion-item-focus prev-category', mode='command') +# config.bind('<Ctrl-Tab>', 'completion-item-focus next-category', mode='command') +# config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='command') +# config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='command') +# config.bind('<Ctrl-Y>', 'rl-yank', mode='command') +# config.bind('<Down>', 'completion-item-focus --history next', mode='command') +# config.bind('<Escape>', 'leave-mode', mode='command') +# config.bind('<Return>', 'command-accept', mode='command') +# config.bind('<Shift-Delete>', 'completion-item-del', mode='command') +# config.bind('<Shift-Tab>', 'completion-item-focus prev', mode='command') +# config.bind('<Tab>', 'completion-item-focus next', mode='command') +# config.bind('<Up>', 'completion-item-focus --history prev', mode='command') + +## Bindings for hint mode +# config.bind('<Ctrl-B>', 'hint all tab-bg', mode='hint') +# config.bind('<Ctrl-F>', 'hint links', mode='hint') +# config.bind('<Ctrl-R>', 'hint --rapid links tab-bg', mode='hint') +# config.bind('<Escape>', 'leave-mode', mode='hint') +# config.bind('<Return>', 'follow-hint', mode='hint') + +## Bindings for insert mode +# config.bind('<Ctrl-E>', 'open-editor', mode='insert') +# config.bind('<Escape>', 'leave-mode', mode='insert') +# config.bind('<Shift-Ins>', 'insert-text {primary}', mode='insert') +config.bind('<Ctrl-i>', 'spawn --userscript qute-keepass -p ~/Documents/20151120.kdbx', mode='insert') + +## Bindings for passthrough mode +# config.bind('<Ctrl-V>', 'leave-mode', mode='passthrough') + +## Bindings for prompt mode +# config.bind('<Alt-B>', 'rl-backward-word', mode='prompt') +# config.bind('<Alt-Backspace>', 'rl-backward-kill-word', mode='prompt') +# config.bind('<Alt-D>', 'rl-kill-word', mode='prompt') +# config.bind('<Alt-F>', 'rl-forward-word', mode='prompt') +# config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='prompt') +# config.bind('<Alt-Y>', 'prompt-yank', mode='prompt') +# config.bind('<Ctrl-?>', 'rl-delete-char', mode='prompt') +# config.bind('<Ctrl-A>', 'rl-beginning-of-line', mode='prompt') +# config.bind('<Ctrl-B>', 'rl-backward-char', mode='prompt') +# config.bind('<Ctrl-E>', 'rl-end-of-line', mode='prompt') +# config.bind('<Ctrl-F>', 'rl-forward-char', mode='prompt') +# config.bind('<Ctrl-H>', 'rl-backward-delete-char', mode='prompt') +# config.bind('<Ctrl-K>', 'rl-kill-line', mode='prompt') +# config.bind('<Ctrl-U>', 'rl-unix-line-discard', mode='prompt') +# config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='prompt') +# config.bind('<Ctrl-X>', 'prompt-open-download', mode='prompt') +# config.bind('<Ctrl-Y>', 'rl-yank', mode='prompt') +# config.bind('<Down>', 'prompt-item-focus next', mode='prompt') +# config.bind('<Escape>', 'leave-mode', mode='prompt') +# config.bind('<Return>', 'prompt-accept', mode='prompt') +# config.bind('<Shift-Tab>', 'prompt-item-focus prev', mode='prompt') +# config.bind('<Tab>', 'prompt-item-focus next', mode='prompt') +# config.bind('<Up>', 'prompt-item-focus prev', mode='prompt') + +## Bindings for register mode +# config.bind('<Escape>', 'leave-mode', mode='register') + +## Bindings for yesno mode +# config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='yesno') +# config.bind('<Alt-Y>', 'prompt-yank', mode='yesno') +# config.bind('<Escape>', 'leave-mode', mode='yesno') +# config.bind('<Return>', 'prompt-accept', mode='yesno') +# config.bind('n', 'prompt-accept no', mode='yesno') +# config.bind('y', 'prompt-accept yes', mode='yesno') +config.source('nord-qutebrowser.py') diff --git a/.config/qutebrowser/jupyter-profile/config/bookmarks/urls b/.config/qutebrowser/jupyter-profile/config/bookmarks/urls new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/config/bookmarks/urls diff --git a/.config/qutebrowser/jupyter-profile/config/quickmarks b/.config/qutebrowser/jupyter-profile/config/quickmarks new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/config/quickmarks diff --git a/.config/qutebrowser/jupyter-profile/keys.conf b/.config/qutebrowser/jupyter-profile/keys.conf new file mode 100755 index 0000000..06fc600 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/keys.conf @@ -0,0 +1,709 @@ +# vim: ft=conf +# +# In this config file, qutebrowser's key bindings are configured. +# The format looks like this: +# +# [keymode] +# +# command +# keychain +# keychain2 +# ... +# +# All blank lines and lines starting with '#' are ignored. +# Inline-comments are not permitted. +# +# keymode is a comma separated list of modes in which the key binding should be +# active. If keymode starts with !, the key binding is active in all modes +# except the listed modes. +# +# For special keys (can't be part of a keychain), enclose them in `<`...`>`. +# For modifiers, you can use either `-` or `+` as delimiters, and these names: +# +# * Control: `Control`, `Ctrl` +# * Meta: `Meta`, `Windows`, `Mod4` +# * Alt: `Alt`, `Mod1` +# * Shift: `Shift` +# +# For simple keys (no `<>`-signs), a capital letter means the key is pressed +# with Shift. For special keys (with `<>`-signs), you need to explicitly add +# `Shift-` to match a key pressed with shift. +# +# Note that default keybindings are always bound, and need to be explicitly +# unbound if you wish to remove them: +# +# <unbound> +# keychain +# keychain2 +# ... + +[!normal] + +leave-mode + <escape> + <ctrl-[> + +[normal] +# Keybindings for normal mode. + +clear-keychain ;; search ;; fullscreen --leave + <escape> + <ctrl-[> + +set-cmd-text -s :open + o + +set-cmd-text :open {url:pretty} + go + +set-cmd-text -s :open -t + O + +set-cmd-text :open -t -i {url:pretty} + gO + +set-cmd-text -s :open -b + xo + +set-cmd-text :open -b -i {url:pretty} + xO + +set-cmd-text -s :open -w + wo + +set-cmd-text :open -w {url:pretty} + wO + +set-cmd-text / + / + +set-cmd-text ? + ? + +set-cmd-text : + : + +open -t + ga + <ctrl-t> + +open -w + <ctrl-n> + +tab-close + d + <ctrl-w> + +tab-close -o + D + +tab-only + co + +tab-focus + T + +tab-move + gm + +tab-move - + gl + +tab-move + + gr + +tab-next + J + <ctrl-pgdown> + +tab-prev + K + <ctrl-pgup> + +tab-clone + gC + +reload + r + <f5> + +reload -f + R + <ctrl-f5> + +back + H + <back> + +back -t + th + +back -w + wh + +forward + L + <forward> + +forward -t + tl + +forward -w + wl + +fullscreen + <f11> + +hint + f + +hint all tab + F + +hint all window + wf + +hint all tab-bg + ;b + +hint all tab-fg + ;f + +hint all hover + ;h + +hint images + ;i + +hint images tab + ;I + +hint links fill :open {hint-url} + ;o + +hint links fill :open -t -i {hint-url} + ;O + +hint links yank + ;y + +hint links yank-primary + ;Y + +hint --rapid links tab-bg + ;r + +hint --rapid links window + ;R + +hint links download + ;d + +hint inputs + ;t + +scroll left + h + +scroll down + j + +scroll up + k + +scroll right + l + +undo + u + <ctrl-shift-t> + +scroll-perc 0 + gg + +scroll-perc + G + +search-next + n + +search-prev + N + +enter-mode insert + i + +enter-mode caret + v + +enter-mode set_mark + ` + +enter-mode jump_mark + ' + +yank + yy + +yank -s + yY + +yank title + yt + +yank title -s + yT + +yank domain + yd + +yank domain -s + yD + +yank pretty-url + yp + +yank pretty-url -s + yP + +open -- {clipboard} + pp + +open -- {primary} + pP + +open -t -- {clipboard} + Pp + +open -t -- {primary} + PP + +open -w -- {clipboard} + wp + +open -w -- {primary} + wP + +set-cmd-text -s :quickmark-load + b + +set-cmd-text -s :quickmark-load -t + B + +set-cmd-text -s :quickmark-load -w + wb + +set-cmd-text -s :bookmark-load + gb + +set-cmd-text -s :bookmark-load -t + gB + +set-cmd-text -s :bookmark-load -w + wB + +save + sf + +set-cmd-text -s :set + ss + +set-cmd-text -s :set -t + sl + +set-cmd-text -s :bind + sk + +zoom-out + - + +zoom-in + + + +zoom + = + +navigate prev + [[ + +navigate next + ]] + +navigate prev -t + {{ + +navigate next -t + }} + +navigate up + gu + +navigate up -t + gU + +navigate increment + <ctrl-a> + +navigate decrement + <ctrl-x> + +inspector + wi + +download + gd + +download-cancel + ad + +download-clear + cd + +view-source + gf + +set-cmd-text -s :buffer + gt + +tab-focus last + <ctrl-tab> + +enter-mode passthrough + <ctrl-v> + +quit + <ctrl-q> + +scroll-page 0 1 + <ctrl-f> + +scroll-page 0 -1 + <ctrl-b> + +scroll-page 0 0.5 + <ctrl-d> + +scroll-page 0 -0.5 + <ctrl-u> + +tab-focus 1 + <alt-1> + +tab-focus 2 + <alt-2> + +tab-focus 3 + <alt-3> + +tab-focus 4 + <alt-4> + +tab-focus 5 + <alt-5> + +tab-focus 6 + <alt-6> + +tab-focus 7 + <alt-7> + +tab-focus 8 + <alt-8> + +tab-focus 9 + <alt-9> + +home + <ctrl-h> + +stop + <ctrl-s> + +print + <ctrl-alt-p> + +open qute:settings + Ss + +follow-selected + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +follow-selected -t + <ctrl-return> + <ctrl-enter> + +repeat-command + . + +record-macro + q + +run-macro + @ + +spawn mpv {url} + mpv + m + +hint links spawn umpv {hint-urls} + MPV + +hint links spawn mpv {hint-url} + M + +spawn tsp-ytdl {hint-url} + ;M + +wq + ZZ + +tab-focus -1 + g$ + +tab-pin + <ctrl-p> + +[insert] +# Keybindings for insert mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `open-editor`: Open a texteditor with the focused field. +# * `paste-primary`: Paste primary selection at cursor position. + +open-editor + <ctrl-e> + +insert-text {primary} + <shift-ins> + +[hint] +# Keybindings for hint mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `follow-hint`: Follow the currently selected hint. + +follow-hint + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +hint --rapid links tab-bg + <ctrl-r> + +hint links + <ctrl-f> + +hint all tab-bg + <ctrl-b> + +[command] +# Keybindings for command mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `command-history-prev`: Switch to previous command in history. +# * `command-history-next`: Switch to next command in history. +# * `completion-item-focus`: Select another item in completion. +# * `command-accept`: Execute the command currently in the commandline. + +command-history-prev + <ctrl-p> + +command-history-next + <ctrl-n> + +completion-item-focus prev + <shift-tab> + <up> + +completion-item-focus next + <tab> + <down> + +completion-item-focus next-category + <ctrl-tab> + +completion-item-focus prev-category + <ctrl-shift-tab> + +completion-item-del + <ctrl-d> + +command-accept + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +[prompt] +# Keybindings for prompts in the status line. +# You can bind normal keys in this mode, but they will be only active +# when a yes/no-prompt is asked. For other prompt modes, you can only +# bind special keys. +# Useful hidden commands to map in this section: +# * `prompt-accept`: Confirm the entered value. +# * `prompt-accept yes`: Answer yes to a yes/no question. +# * `prompt-accept no`: Answer no to a yes/no question. + +prompt-accept + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +prompt-accept yes + y + +prompt-accept no + n + +prompt-open-download + <ctrl-x> + +prompt-item-focus prev + <shift-tab> + <up> + +prompt-item-focus next + <tab> + <down> + +[command,prompt] + +rl-backward-char + <ctrl-b> + +rl-forward-char + <ctrl-f> + +rl-backward-word + <alt-b> + +rl-forward-word + <alt-f> + +rl-beginning-of-line + <ctrl-a> + +rl-end-of-line + <ctrl-e> + +rl-unix-line-discard + <ctrl-u> + +rl-kill-line + <ctrl-k> + +rl-kill-word + <alt-d> + +rl-unix-word-rubout + <ctrl-w> + +rl-backward-kill-word + <alt-backspace> + +rl-yank + <ctrl-y> + +rl-delete-char + <ctrl-?> + +rl-backward-delete-char + <ctrl-h> + +[caret] + +toggle-selection + v + <space> + +drop-selection + <ctrl-space> + +enter-mode normal + c + +move-to-next-line + j + +move-to-prev-line + k + +move-to-next-char + l + +move-to-prev-char + h + +move-to-end-of-word + e + +move-to-next-word + w + +move-to-prev-word + b + +move-to-start-of-next-block + ] + +move-to-start-of-prev-block + [ + +move-to-end-of-next-block + } + +move-to-end-of-prev-block + { + +move-to-start-of-line + 0 + +move-to-end-of-line + $ + +move-to-start-of-document + gg + +move-to-end-of-document + G + +yank selection -s + Y + +yank selection + y + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +scroll left + H + +scroll down + J + +scroll up + K + +scroll right + L + diff --git a/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py b/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py new file mode 100644 index 0000000..9dd9064 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/nord-qutebrowser.py @@ -0,0 +1,336 @@ +nord = { + # Polar Night + 'nord0': '#2e3440', + 'nord1': '#3b4252', + 'nord2': '#434c5e', + 'nord3': '#4c566a', + # Snow Storm + 'nord4': '#d8dee9', + 'nord5': '#e5e9f0', + 'nord6': '#eceff4', + # Frost + 'nord7': '#8fbcbb', + 'nord8': '#88c0d0', + 'nord9': '#81a1c1', + 'nord10': '#5e81ac', + # Aurora + 'nord11': '#bf616a', + 'nord12': '#d08770', + 'nord13': '#ebcb8b', + 'nord14': '#a3be8c', + 'nord15': '#b48ead', +} + +## Background color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.bg = nord['nord0'] + +## Bottom border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.bottom = nord['nord0'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.top = nord['nord0'] + +## Foreground color of completion widget category headers. +## Type: QtColor +c.colors.completion.category.fg = nord['nord5'] + +## Background color of the completion widget for even rows. +## Type: QssColor +c.colors.completion.even.bg = nord['nord1'] + +## Background color of the completion widget for odd rows. +## Type: QssColor +c.colors.completion.odd.bg = nord['nord1'] + +## Text color of the completion widget. +## Type: QtColor +c.colors.completion.fg = nord['nord4'] + +## Background color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.bg = nord['nord3'] + +## Bottom border color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.border.bottom = nord['nord3'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.item.selected.border.top = nord['nord3'] + +## Foreground color of the selected completion item. +## Type: QtColor +c.colors.completion.item.selected.fg = nord['nord6'] + +## Foreground color of the matched text in the completion. +## Type: QssColor +c.colors.completion.match.fg = nord['nord13'] + +## Color of the scrollbar in completion view +## Type: QssColor +c.colors.completion.scrollbar.bg = nord['nord1'] + +## Color of the scrollbar handle in completion view. +## Type: QssColor +c.colors.completion.scrollbar.fg = nord['nord5'] + +## Background color for the download bar. +## Type: QssColor +c.colors.downloads.bar.bg = nord['nord0'] + +## Background color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.bg = nord['nord11'] + +## Foreground color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.fg = nord['nord5'] + +## Color gradient stop for download backgrounds. +## Type: QtColor +c.colors.downloads.stop.bg = nord['nord15'] + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.downloads.system.bg = 'none' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +c.colors.hints.bg = nord['nord13'] + +## Font color for hints. +## Type: QssColor +c.colors.hints.fg = nord['nord0'] + +## Font color for the matched part of hints. +## Type: QssColor +c.colors.hints.match.fg = nord['nord10'] + +## Background color of the keyhint widget. +## Type: QssColor +c.colors.keyhint.bg = nord['nord1'] + +## Text color for the keyhint widget. +## Type: QssColor +c.colors.keyhint.fg = nord['nord5'] + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +c.colors.keyhint.suffix.fg = nord['nord13'] + +## Background color of an error message. +## Type: QssColor +c.colors.messages.error.bg = nord['nord11'] + +## Border color of an error message. +## Type: QssColor +c.colors.messages.error.border = nord['nord11'] + +## Foreground color of an error message. +## Type: QssColor +c.colors.messages.error.fg = nord['nord5'] + +## Background color of an info message. +## Type: QssColor +c.colors.messages.info.bg = nord['nord8'] + +## Border color of an info message. +## Type: QssColor +c.colors.messages.info.border = nord['nord8'] + +## Foreground color an info message. +## Type: QssColor +c.colors.messages.info.fg = nord['nord5'] + +## Background color of a warning message. +## Type: QssColor +c.colors.messages.warning.bg = nord['nord12'] + +## Border color of a warning message. +## Type: QssColor +c.colors.messages.warning.border = nord['nord12'] + +## Foreground color a warning message. +## Type: QssColor +c.colors.messages.warning.fg = nord['nord5'] + +## Background color for prompts. +## Type: QssColor +c.colors.prompts.bg = nord['nord2'] + +# ## Border used around UI elements in prompts. +# ## Type: String +c.colors.prompts.border = '1px solid ' + nord['nord0'] + +## Foreground color for prompts. +## Type: QssColor +c.colors.prompts.fg = nord['nord5'] + +## Background color for the selected item in filename prompts. +## Type: QssColor +c.colors.prompts.selected.bg = nord['nord3'] + +## Background color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.fg = nord['nord5'] + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.fg = nord['nord5'] + +## Background color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.bg = nord['nord2'] + +## Foreground color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.fg = nord['nord5'] + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.bg = nord['nord2'] + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.fg = nord['nord5'] + +## Background color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.bg = nord['nord14'] + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.fg = nord['nord1'] + +## Background color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.bg = nord['nord0'] + +## Foreground color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.fg = nord['nord5'] + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.bg = nord['nord10'] + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.fg = nord['nord5'] + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.bg = nord['nord3'] + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.fg = nord['nord5'] + +## Background color of the progress bar. +## Type: QssColor +c.colors.statusbar.progress.bg = nord['nord5'] + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +c.colors.statusbar.url.error.fg = nord['nord11'] + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +c.colors.statusbar.url.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +c.colors.statusbar.url.hover.fg = nord['nord8'] + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +c.colors.statusbar.url.success.http.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +c.colors.statusbar.url.success.https.fg = nord['nord14'] + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +c.colors.statusbar.url.warn.fg = nord['nord12'] + +## Background color of the tab bar. +## Type: QtColor +c.colors.tabs.bar.bg = nord['nord3'] + +## Background color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.bg = nord['nord3'] + +## Foreground color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.fg = nord['nord5'] + +## Color for the tab indicator on errors. +## Type: QtColor +c.colors.tabs.indicator.error = nord['nord11'] + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = nord['violet'] + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = nord['orange'] + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.tabs.indicator.system = 'none' + +## Background color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.bg = nord['nord3'] + +## Foreground color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.fg = nord['nord5'] + +# ## Background color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.bg = nord['nord0'] + +# ## Foreground color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.fg = nord['nord5'] + +# ## Background color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.bg = nord['nord0'] + +# ## Foreground color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.fg = nord['nord5'] + +## Background color for webpages if unset (or empty to use the theme's +## color) +## Type: QtColor +# c.colors.webpage.bg = 'white' diff --git a/.config/qutebrowser/jupyter-profile/qutebrowser.conf b/.config/qutebrowser/jupyter-profile/qutebrowser.conf new file mode 100755 index 0000000..3fc85a8 --- /dev/null +++ b/.config/qutebrowser/jupyter-profile/qutebrowser.conf @@ -0,0 +1,1612 @@ +# vim: ft=dosini + +# Configfile for qutebrowser. +# +# This configfile is parsed by python's configparser in extended +# interpolation mode. The format is very INI-like, so there are +# categories like [general] with "key = value"-pairs. +# +# Note that you shouldn't add your own comments, as this file is +# regenerated every time the config is saved. +# +# Interpolation looks like ${value} or ${section:value} and will be +# replaced by the respective value. +# +# Some settings will expand environment variables. Note that, since +# interpolation is run first, you will need to escape the $ char as +# described below. +# +# This is the default config, so if you want to remove anything from +# here (as opposed to change/add), for example a key binding, set it to +# an empty value. +# +# You will need to escape the following values: +# - # at the start of the line (at the first position of the key) (\#) +# - $ in a value ($$) + + +# General/miscellaneous options. +[general] + +# ignore-case (IgnoreCase): +# Whether to find text on a page case-insensitively. +# true: Search case-insensitively +# false: Search case-sensitively +# smart: Search case-sensitively if there are capital chars +# Default: smart +ignore-case = smart + +# startpage (List of String): +# The default page(s) to open at the start, separated by commas. +# Default: https://start.duckduckgo.com +startpage = https://start.duckduckgo.com + +# yank-ignored-url-parameters (List of String): +# The URL parameters to strip with :yank url, separated by commas. +# Default: +# ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content +yank-ignored-url-parameters = ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content + +# default-open-dispatcher (String): +# The default program used to open downloads. Set to an empty string +# to use the default internal handler. +# Any {} in the string will be expanded to the filename, else the +# filename will be appended. +# Default: +default-open-dispatcher = + +# default-page (FuzzyUrl): +# The page to open if :open -t/-b/-w is used without URL. Use +# `about:blank` for a blank page. +# Default: ${startpage} +default-page = ${startpage} + +# auto-search (AutoSearch): +# Whether to start a search when something else than a URL is +# entered. +# naive: Use simple/naive check. +# dns: Use DNS requests (might be slow!). +# false: Never search automatically. +# Default: naive +auto-search = naive + +# auto-save-config (Bool): +# Whether to save the config automatically on quit. +# Valid values: true, false +# Default: true +auto-save-config = true + +# auto-save-interval (Int): +# How often (in milliseconds) to auto-save config/cookies/etc. +# Default: 15000 +auto-save-interval = 15000 + +# editor (ShellCommand): +# The editor (and arguments) to use for the `open-editor` command. +# The arguments get split like in a shell, so you can use `"` or `'` +# to quote them. +# `{}` gets replaced by the filename of the file to be edited. +# Default: gvim -f "{}" +editor = gvim -f "{}" + +# editor-encoding (Encoding): +# Encoding to use for editor. +# Default: utf-8 +editor-encoding = utf-8 + +# private-browsing (Bool): +# Open new windows in private browsing mode which does not record +# visited pages. +# Valid values: true, false +# Default: false +private-browsing = true + +# developer-extras (Bool): +# Enable extra tools for Web developers. +# This needs to be enabled for `:inspector` to work and also adds an +# _Inspect_ entry to the context menu. For QtWebEngine, see +# 'qutebrowser --help' instead. +# Valid values: true, false +# Default: false +developer-extras = true + +# print-element-backgrounds (Bool): +# Whether the background color and images are also drawn when the +# page is printed. +# This setting only works with Qt 5.8 or newer when using the +# QtWebEngine backend. +# Valid values: true, false +# Default: true +print-element-backgrounds = true + +# xss-auditing (Bool): +# Whether load requests should be monitored for cross-site scripting +# attempts. +# Suspicious scripts will be blocked and reported in the inspector's +# JavaScript console. Enabling this feature might have an impact on +# performance. +# Valid values: true, false +# Default: false +xss-auditing = false + +# default-encoding (String): +# Default encoding to use for websites. +# The encoding must be a string describing an encoding such as +# _utf-8_, _iso-8859-1_, etc. +# Default: iso-8859-1 +default-encoding = _utf-8_ + +# new-instance-open-target (String): +# How to open links in an existing instance if a new one is +# launched. +# tab: Open a new tab in the existing window and activate the +# window. +# tab-bg: Open a new background tab in the existing window and +# activate the window. +# tab-silent: Open a new tab in the existing window without +# activating the window. +# tab-bg-silent: Open a new background tab in the existing +# window without activating the window. +# window: Open in a new window. +# Default: tab +new-instance-open-target = tab + +# new-instance-open-target.window (String): +# Which window to choose when opening links as new tabs. +# first-opened: Open new tabs in the first (oldest) opened +# window. +# last-opened: Open new tabs in the last (newest) opened window. +# last-focused: Open new tabs in the most recently focused +# window. +# last-visible: Open new tabs in the most recently visible +# window. +# Default: last-focused +new-instance-open-target.window = last-focused + +# log-javascript-console (String): +# How to log javascript console messages. +# none: Don't log messages. +# debug: Log messages with debug level. +# info: Log messages with info level. +# Default: debug +log-javascript-console = debug + +# save-session (Bool): +# Whether to always save the open pages. +# Valid values: true, false +# Default: false +save-session = true + +# session-default-name (SessionName): +# The name of the session to save by default, or empty for the last +# loaded session. +# Default: +session-default-name = + +# url-incdec-segments (FlagList): +# The URL segments where `:navigate increment/decrement` will search +# for a number. +# Valid values: host, path, query, anchor +# Default: path,query +url-incdec-segments = path,query + + +# General options related to the user interface. +[ui] + +# history-session-interval (Int): +# The maximum time in minutes between two history items for them to +# be considered being from the same session. Use -1 to disable +# separation. +# Default: 30 +history-session-interval = 30 + +# zoom-levels (List of Perc): +# The available zoom levels, separated by commas. +# Default: +# 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% +zoom-levels = 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% + +# default-zoom (Perc): +# The default zoom level. +# Default: 100% +default-zoom = 100% + +# downloads-position (VerticalPosition): +# Where to show the downloaded files. +# Valid values: top, bottom +# Default: top +downloads-position = top + +# status-position (VerticalPosition): +# The position of the status bar. +# Valid values: top, bottom +# Default: bottom +status-position = bottom + +# message-timeout (Int): +# Time (in ms) to show messages in the statusbar for. +# Set to 0 to never clear messages. +# Default: 2000 +message-timeout = 2000 + +# message-unfocused (Bool): +# Whether to show messages in unfocused windows. +# Valid values: true, false +# Default: false +message-unfocused = false + +# confirm-quit (ConfirmQuit): +# Whether to confirm quitting the application. +# always: Always show a confirmation. +# multiple-tabs: Show a confirmation if multiple tabs are +# opened. +# downloads: Show a confirmation if downloads are running +# never: Never show a confirmation. +# Default: never +confirm-quit = never + +# zoom-text-only (Bool): +# Whether the zoom factor on a frame applies only to the text or to +# all content. +# Valid values: true, false +# Default: false +zoom-text-only = false + +# frame-flattening (Bool): +# Whether to expand each subframe to its contents. +# This will flatten all the frames to become one scrollable page. +# Valid values: true, false +# Default: false +frame-flattening = false + +# user-stylesheet (File): +# User stylesheet to use (absolute filename or filename relative to +# the config directory). Will expand environment variables. +# Default: +user-stylesheet = + +# hide-scrollbar (Bool): +# Hide the main scrollbar. +# Valid values: true, false +# Default: true +hide-scrollbar = true + +# smooth-scrolling (Bool): +# Whether to enable smooth scrolling for web pages. Note smooth +# scrolling does not work with the :scroll-px command. +# Valid values: true, false +# Default: false +smooth-scrolling = false + +# remove-finished-downloads (Int): +# Number of milliseconds to wait before removing finished downloads. +# Will not be removed if value is -1. +# Default: -1 +remove-finished-downloads = -1 + +# hide-statusbar (Bool): +# Whether to hide the statusbar unless a message is shown. +# Valid values: true, false +# Default: false +hide-statusbar = false + +# statusbar-padding (Padding): +# Padding for statusbar (top, bottom, left, right). +# Default: 1,1,0,0 +statusbar-padding = 1,1,0,0 + +# window-title-format (FormatString): +# The format to use for the window title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{id}`: The internal window ID of this window. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {perc}{title}{title_sep}qutebrowser +window-title-format = {perc}{title}{title_sep}qutebrowser + +# modal-js-dialog (Bool): +# Use standard JavaScript modal dialog for alert() and confirm() +# Valid values: true, false +# Default: false +modal-js-dialog = false + +# hide-wayland-decoration (Bool): +# Hide the window decoration when using wayland (requires restart) +# Valid values: true, false +# Default: false +hide-wayland-decoration = false + +# keyhint-blacklist (List of String): +# Keychains that shouldn't be shown in the keyhint dialog +# Globs are supported, so ';*' will blacklist all keychainsstarting +# with ';'. Use '*' to disable keyhints +# Default: +keyhint-blacklist = + +# keyhint-delay (Int): +# Time from pressing a key to seeing the keyhint dialog (ms) +# Default: 500 +keyhint-delay = 500 + +# prompt-radius (Int): +# The rounding radius for the edges of prompts. +# Default: 8 +prompt-radius = 8 + +# prompt-filebrowser (Bool): +# Show a filebrowser in upload/download prompts. +# Valid values: true, false +# Default: true +prompt-filebrowser = true + + +# Settings related to the network. +[network] + +# do-not-track (Bool): +# Value to send in the `DNT` header. +# Valid values: true, false +# Default: true +do-not-track = true + +# accept-language (String): +# Value to send in the `accept-language` header. +# Default: en-US,en +accept-language = en-US,en;q=0.5 + +# referer-header (String): +# Send the Referer header +# always: Always send. +# never: Never send; this is not recommended, as some sites may +# break. +# same-domain: Only send for the same domain. This will still +# protect your privacy, but shouldn't break any sites. +# Default: same-domain +referer-header = same-domain + +# user-agent (UserAgent): +# User agent to send. Empty to send the default. +# Default: +user-agent = Mozilla/5.0 + +# proxy (Proxy): +# The proxy to use. +# In addition to the listed values, you can use a `socks://...` or +# `http://...` URL. +# system: Use the system wide proxy. +# none: Don't use any proxy +# Default: system +proxy = system + +# proxy-dns-requests (Bool): +# Whether to send DNS requests over the configured proxy. +# Valid values: true, false +# Default: true +proxy-dns-requests = true + +# ssl-strict (BoolAsk): +# Whether to validate SSL handshakes. +# Valid values: true, false, ask +# Default: ask +ssl-strict = ask + +# dns-prefetch (Bool): +# Whether to try to pre-fetch DNS entries to speed up browsing. +# Valid values: true, false +# Default: true +dns-prefetch = true + +# custom-headers (HeaderDict): +# Set custom headers for qutebrowser HTTP requests. +# Default: +custom-headers = + +# netrc-file (File): +# Set location of a netrc-file for HTTP authentication. If empty, +# ~/.netrc is used. +# Default: +netrc-file = + + +# Options related to completion and command history. +[completion] + +# show (String): +# When to show the autocompletion window. +# always: Whenever a completion is available. +# auto: Whenever a completion is requested. +# never: Never. +# Default: always +show = always + +# download-path-suggestion (String): +# What to display in the download filename input. +# path: Show only the download path. +# filename: Show only download filename. +# both: Show download path and filename. +# Default: path +download-path-suggestion = path + +# timestamp-format (TimestampTemplate): +# How to format timestamps (e.g. for history) +# Default: %Y-%m-%d +timestamp-format = %Y-%m-%d + +# height (PercOrInt): +# The height of the completion, in px or as percentage of the +# window. +# Default: 50% +height = 50% + +# cmd-history-max-items (Int): +# How many commands to save in the command history. +# 0: no history / -1: unlimited +# Default: 100 +cmd-history-max-items = 100 + +# web-history-max-items (Int): +# How many URLs to show in the web history. +# 0: no history / -1: unlimited +# Default: 1000 +web-history-max-items = 1000 + +# quick-complete (Bool): +# Whether to move on to the next part when there's only one possible +# completion left. +# Valid values: true, false +# Default: true +quick-complete = true + +# shrink (Bool): +# Whether to shrink the completion to be smaller than the configured +# size if there are no scrollbars. +# Valid values: true, false +# Default: false +shrink = false + +# scrollbar-width (Int): +# Width of the scrollbar in the completion window (in px). +# Default: 12 +scrollbar-width = 12 + +# scrollbar-padding (Int): +# Padding of scrollbar handle in completion window (in px). +# Default: 2 +scrollbar-padding = 2 + + +# Options related to input modes. +[input] + +# timeout (Int): +# Timeout (in milliseconds) for ambiguous key bindings. +# If the current input forms both a complete match and a partial +# match, the complete match will be executed after this time. +# Default: 500 +timeout = 500 + +# partial-timeout (Int): +# Timeout (in milliseconds) for partially typed key bindings. +# If the current input forms only partial matches, the keystring +# will be cleared after this time. +# Default: 5000 +partial-timeout = 5000 + +# insert-mode-on-plugins (Bool): +# Whether to switch to insert mode when clicking flash and other +# plugins. +# Valid values: true, false +# Default: false +insert-mode-on-plugins = false + +# auto-leave-insert-mode (Bool): +# Whether to leave insert mode if a non-editable element is clicked. +# Valid values: true, false +# Default: true +auto-leave-insert-mode = true + +# auto-insert-mode (Bool): +# Whether to automatically enter insert mode if an editable element +# is focused after page load. +# Valid values: true, false +# Default: false +auto-insert-mode = false + +# forward-unbound-keys (String): +# Whether to forward unbound keys to the webview in normal mode. +# all: Forward all unbound keys. +# auto: Forward unbound non-alphanumeric keys. +# none: Don't forward any keys. +# Default: auto +forward-unbound-keys = auto + +# spatial-navigation (Bool): +# Enables or disables the Spatial Navigation feature. +# Spatial navigation consists in the ability to navigate between +# focusable elements in a Web page, such as hyperlinks and form +# controls, by using Left, Right, Up and Down arrow keys. For +# example, if a user presses the Right key, heuristics determine +# whether there is an element he might be trying to reach towards +# the right and which element he probably wants. +# Valid values: true, false +# Default: false +spatial-navigation = false + +# links-included-in-focus-chain (Bool): +# Whether hyperlinks should be included in the keyboard focus chain. +# Valid values: true, false +# Default: true +links-included-in-focus-chain = true + +# rocker-gestures (Bool): +# Whether to enable Opera-like mouse rocker gestures. This disables +# the context menu. +# Valid values: true, false +# Default: false +rocker-gestures = false + +# mouse-zoom-divider (Int): +# How much to divide the mouse wheel movements to translate them +# into zoom increments. +# Default: 512 +mouse-zoom-divider = 512 + + +# Configuration of the tab bar. +[tabs] + +# background-tabs (Bool): +# Whether to open new tabs (middleclick/ctrl+click) in background. +# Valid values: true, false +# Default: false +background-tabs = false + +# select-on-remove (SelectOnRemove): +# Which tab to select when the focused tab is removed. +# prev: Select the tab which came before the closed one (left in +# horizontal, above in vertical). +# next: Select the tab which came after the closed one (right in +# horizontal, below in vertical). +# last-used: Select the previously selected tab. +# Default: next +select-on-remove = next + +# new-tab-position (NewTabPosition): +# How new tabs are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: next +new-tab-position = next + +# new-tab-position-explicit (NewTabPosition): +# How new tabs opened explicitly are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: last +new-tab-position-explicit = last + +# last-close (String): +# Behavior when the last tab is closed. +# ignore: Don't do anything. +# blank: Load a blank page. +# startpage: Load the start page. +# default-page: Load the default page. +# close: Close the window. +# Default: ignore +last-close = ignore + +# show (String): +# When to show the tab bar +# always: Always show the tab bar. +# never: Always hide the tab bar. +# multiple: Hide the tab bar if only one tab is open. +# switching: Show the tab bar when switching tabs. +# Default: always +show = always + +# show-switching-delay (Int): +# Time to show the tab bar before hiding it when tabs->show is set +# to 'switching'. +# Default: 800 +show-switching-delay = 800 + +# wrap (Bool): +# Whether to wrap when changing tabs. +# Valid values: true, false +# Default: true +wrap = true + +# movable (Bool): +# Whether tabs should be movable. +# Valid values: true, false +# Default: true +movable = true + +# close-mouse-button (String): +# On which mouse button to close tabs. +# right: Close tabs on right-click. +# middle: Close tabs on middle-click. +# none: Don't close tabs using the mouse. +# Default: middle +close-mouse-button = middle + +# position (Position): +# The position of the tab bar. +# Valid values: top, bottom, left, right +# Default: top +position = top + +# show-favicons (Bool): +# Whether to show favicons in the tab bar. +# Valid values: true, false +# Default: true +show-favicons = true + +# favicon-scale (Float): +# Scale for favicons in the tab bar. The tab size is unchanged, so +# big favicons also require extra `tabs->padding`. +# Default: 1.0 +favicon-scale = 1.0 + +# width (PercOrInt): +# The width of the tab bar if it's vertical, in px or as percentage +# of the window. +# Default: 20% +width = 20% + +# pinned-width (Int): +# The width for pinned tabs with a horizontal tabbar, in px. +# Default: 43 +pinned-width = 43 + +# indicator-width (Int): +# Width of the progress indicator (0 to disable). +# Default: 3 +indicator-width = 3 + +# tabs-are-windows (Bool): +# Whether to open windows instead of tabs. +# Valid values: true, false +# Default: false +tabs-are-windows = false + +# title-format (FormatString): +# The format to use for the tab title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{index}`: The index of this tab. +# * `{id}`: The internal tab ID of this tab. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {index}: {title} +title-format = {index}: {title} + +# title-format-pinned (FormatString): +# The format to use for the tab title for pinned tabs. The same +# placeholders like for title-format are defined. +# Default: {index} +title-format-pinned = {index} + +# title-alignment (TextAlignment): +# Alignment of the text inside of tabs +# Valid values: left, right, center +# Default: left +title-alignment = left + +# mousewheel-tab-switching (Bool): +# Switch between tabs using the mouse wheel. +# Valid values: true, false +# Default: true +mousewheel-tab-switching = true + +# padding (Padding): +# Padding for tabs (top, bottom, left, right). +# Default: 0,0,5,5 +padding = 0,0,5,5 + +# indicator-padding (Padding): +# Padding for indicators (top, bottom, left, right). +# Default: 2,2,0,4 +indicator-padding = 2,2,0,4 + + +# Settings related to cache and storage. +[storage] + +# download-directory (Directory): +# The directory to save downloads to. An empty value selects a +# sensible os-specific default. Will expand environment variables. +# Default: +download-directory = + +# prompt-download-directory (Bool): +# Whether to prompt the user for the download location. +# If set to false, 'download-directory' will be used. +# Valid values: true, false +# Default: true +prompt-download-directory = true + +# remember-download-directory (Bool): +# Whether to remember the last used download directory. +# Valid values: true, false +# Default: true +remember-download-directory = true + +# maximum-pages-in-cache (Int): +# The maximum number of pages to hold in the global memory page +# cache. +# The Page Cache allows for a nicer user experience when navigating +# forth or back to pages in the forward/back history, by pausing and +# resuming up to _n_ pages. +# For more information about the feature, please refer to: +# http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +# Default: 0 +maximum-pages-in-cache = 0 + +# offline-web-application-cache (Bool): +# Whether support for the HTML 5 web application cache feature is +# enabled. +# An application cache acts like an HTTP cache in some sense. For +# documents that use the application cache via JavaScript, the +# loader engine will first ask the application cache for the +# contents, before hitting the network. +# The feature is described in details at: +# http://dev.w3.org/html5/spec/Overview.html#appcache +# Valid values: true, false +# Default: true +offline-web-application-cache = true + +# local-storage (Bool): +# Whether support for HTML 5 local storage and Web SQL is enabled. +# Valid values: true, false +# Default: true +local-storage = true + +# cache-size (Int): +# Size of the HTTP network cache. Empty to use the default value. +# Default: +cache-size = + + +# Loaded plugins/scripts and allowed actions. +[content] + +# allow-images (Bool): +# Whether images are automatically loaded in web pages. +# Valid values: true, false +# Default: true +allow-images = true + +# allow-javascript (Bool): +# Enables or disables the running of JavaScript programs. +# Valid values: true, false +# Default: true +allow-javascript = true + +# allow-plugins (Bool): +# Enables or disables plugins in Web pages. +# Qt plugins with a mimetype such as "application/x-qt-plugin" are +# not affected by this setting. +# Valid values: true, false +# Default: false +allow-plugins = true + +# webgl (Bool): +# Enables or disables WebGL. +# Valid values: true, false +# Default: true +webgl = true + +# hyperlink-auditing (Bool): +# Enable or disable hyperlink auditing (<a ping>). +# Valid values: true, false +# Default: false +hyperlink-auditing = false + +# geolocation (BoolAsk): +# Allow websites to request geolocations. +# Valid values: true, false, ask +# Default: ask +geolocation = false + +# notifications (BoolAsk): +# Allow websites to show notifications. +# Valid values: true, false, ask +# Default: ask +notifications = ask + +# media-capture (BoolAsk): +# Allow websites to record audio/video. +# Valid values: true, false, ask +# Default: ask +media-capture = ask + +# javascript-can-open-windows-automatically (Bool): +# Whether JavaScript programs can open new windows without user +# interaction. +# Valid values: true, false +# Default: false +javascript-can-open-windows-automatically = true + +# javascript-can-close-windows (Bool): +# Whether JavaScript programs can close windows. +# Valid values: true, false +# Default: false +javascript-can-close-windows = true + +# javascript-can-access-clipboard (Bool): +# Whether JavaScript programs can read or write to the clipboard. +# With QtWebEngine, writing the clipboard as response to a user +# interaction is always allowed. +# Valid values: true, false +# Default: false +javascript-can-access-clipboard = true + +# ignore-javascript-prompt (Bool): +# Whether all javascript prompts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-prompt = true + +# ignore-javascript-alert (Bool): +# Whether all javascript alerts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-alert = true + +# local-content-can-access-remote-urls (Bool): +# Whether locally loaded documents are allowed to access remote +# urls. +# Valid values: true, false +# Default: false +local-content-can-access-remote-urls = false + +# local-content-can-access-file-urls (Bool): +# Whether locally loaded documents are allowed to access other local +# urls. +# Valid values: true, false +# Default: true +local-content-can-access-file-urls = true + +# cookies-accept (String): +# Control which cookies to accept. +# all: Accept all cookies. +# no-3rdparty: Accept cookies from the same origin only. +# no-unknown-3rdparty: Accept cookies from the same origin only, +# unless a cookie is already set for the domain. +# never: Don't accept cookies at all. +# Default: no-3rdparty +cookies-accept = all + +# cookies-store (Bool): +# Whether to store cookies. Note this option needs a restart with +# QtWebEngine on Qt < 5.9. +# Valid values: true, false +# Default: true +cookies-store = true + +# host-block-lists (List of Url): +# List of URLs of lists which contain hosts to block. +# The file can be in one of the following formats: +# - An '/etc/hosts'-like file +# - One host per line +# - A zip-file of any of the above, with either only one file, or a +# file named 'hosts' (with any extension). +# Default: +# https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext +host-block-lists = https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext + +# host-blocking-enabled (Bool): +# Whether host blocking is enabled. +# Valid values: true, false +# Default: true +host-blocking-enabled = false + +# host-blocking-whitelist (List of String): +# List of domains that should always be loaded, despite being +# ad-blocked. +# Domains may contain * and ? wildcards and are otherwise required +# to exactly match the requested domain. +# Local domains are always exempt from hostblocking. +# Default: piwik.org +host-blocking-whitelist = piwik.org,next-episode.net,churchmilitant.tv,load.sumome.com,s7.addthis.com,www.google-analytics.com,ssl.google-analytics.com,referrer.disqus.com,m.addthisedge.com,m.addthis.com,stats.g.doubleclick.net,*.addthis.com,lukesmith.xyz + +# enable-pdfjs (Bool): +# Enable pdf.js to view PDF files in the browser. +# Note that the files can still be downloaded by clicking the +# download button in the pdf.js viewer. +# Valid values: true, false +# Default: false +enable-pdfjs = false + + +# Hinting settings. +[hints] + +# border (String): +# CSS border value for hints. +# Default: 1px solid #E3BE23 +border = 1px solid #E3BE23 + +# mode (String): +# Mode to use for hints. +# number: Use numeric hints. (In this mode you can also type +# letters form the hinted element to filter and reduce the number of +# elements that are hinted.) +# letter: Use the chars in the hints -> chars setting. +# word: Use hints words based on the html elements and the extra +# words. +# Default: letter +mode = number + +# chars (UniqueCharString): +# Chars used for hint strings. +# Default: asdfghjkl +chars = asdfghjkl + +# min-chars (Int): +# Minimum number of chars used for hint strings. +# Default: 1 +min-chars = 1 + +# scatter (Bool): +# Whether to scatter hint key chains (like Vimium) or not (like +# dwb). Ignored for number hints. +# Valid values: true, false +# Default: true +scatter = true + +# uppercase (Bool): +# Make chars in hint strings uppercase. +# Valid values: true, false +# Default: false +uppercase = false + +# dictionary (File): +# The dictionary file to be used by the word hints. +# Default: /usr/share/dict/words +dictionary = /usr/share/dict/words + +# auto-follow (String): +# Controls when a hint can be automatically followed without the +# user pressing Enter. +# always: Auto-follow whenever there is only a single hint on a +# page. +# unique-match: Auto-follow whenever there is a unique non-empty +# match in either the hint string (word mode) or filter (number +# mode). +# full-match: Follow the hint when the user typed the whole hint +# (letter, word or number mode) or the element's text (only in +# number mode). +# never: The user will always need to press Enter to follow a +# hint. +# Default: unique-match +auto-follow = unique-match + +# auto-follow-timeout (Int): +# A timeout (in milliseconds) to inhibit normal-mode key bindings +# after a successful auto-follow. +# Default: 0 +auto-follow-timeout = 0 + +# next-regexes (List of Regex): +# A comma-separated list of regexes to use for 'next' links. +# Default: +# \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b +next-regexes = \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b + +# prev-regexes (List of Regex): +# A comma-separated list of regexes to use for 'prev' links. +# Default: \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b +prev-regexes = \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b + +# find-implementation (String): +# Which implementation to use to find elements to hint. +# javascript: Better but slower +# python: Slightly worse but faster +# Default: python +find-implementation = python + +# hide-unmatched-rapid-hints (Bool): +# Controls hiding unmatched hints in rapid mode. +# Valid values: true, false +# Default: true +hide-unmatched-rapid-hints = true + + +# Definitions of search engines which can be used via the address bar. +# The searchengine named `DEFAULT` is used when `general -> auto-search` +# is true and something else than a URL was entered to be opened. Other +# search engines can be used by prepending the search engine name to the +# search term, e.g. `:open google qutebrowser`. The string `{}` will be +# replaced by the search term, use `{{` and `}}` for literal `{`/`}` +# signs. +[searchengines] +DEFAULT = https://duckduckgo.com/?q={} + + +# Aliases for commands. +# By default, no aliases are defined. Example which adds a new command +# `:qtb` to open qutebrowsers website: +# `qtb = open https://www.qutebrowser.org/` +[aliases] +qtb = open https://www.qutebrowser.org/ +mbt = open t https://signin1.bt.com/login/emailloginform +Ombt = open -t https://signin1.bt.com/login/emailloginform +nx = open http://next-episode.net/ +Onx = open -t http://next-episode.net/ +gk = open https://gameknot.com/ +Ogk = open -t https://gameknot.com/ +yt = open https://youtube.com +Oyt = open -t https://youtube.com +Y = open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +OY = open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +1337 = open https://1337x.to/home +O1337 = open -t https://1337x.to/home +ez = open https://eztv.ag +Oez = open -t https://eztv.ag +tz = open https://extratorrent.ag +Otz = open -t https://extratorrent.ag +tpb = open https://thepiratebay.org/ +Otpb = open -t https://thepiratebay.org/ +Nm = open https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa +ONm = open -t https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa + + +# Colors used in the UI. +# A value can be in one of the following format: +# * `#RGB`/`#RRGGBB`/`#RRRGGGBBB`/`#RRRRGGGGBBBB` +# * An SVG color name as specified in http://www.w3.org/TR/SVG/types.html#ColorKeywords[the W3C specification]. +# * transparent (no color) +# * `rgb(r, g, b)` / `rgba(r, g, b, a)` (values 0-255 or percentages) +# * `hsv(h, s, v)` / `hsva(h, s, v, a)` (values 0-255, hue 0-359) +# * A gradient as explained in http://doc.qt.io/qt-5/stylesheet-reference.html#list-of-property-types[the Qt documentation] under ``Gradient''. +# A *.system value determines the color system to use for color +# interpolation between similarly-named *.start and *.stop entries, +# regardless of how they are defined in the options. Valid values are +# 'rgb', 'hsv', and 'hsl'. +# The `hints.*` values are a special case as they're real CSS colors, not Qt-CSS colors. There, for a gradient, you need to use `-webkit-gradient`, see https://www.webkit.org/blog/175/introducing-css-gradients/[the WebKit documentation]. +[colors] + +# completion.fg (QtColor): +# Text color of the completion widget. +# Default: white +completion.fg = white + +# completion.bg (QssColor): +# Background color of the completion widget. +# Default: #333333 +completion.bg = #333333 + +# completion.alternate-bg (QssColor): +# Alternating background color of the completion widget. +# Default: #444444 +completion.alternate-bg = #444444 + +# completion.category.fg (QtColor): +# Foreground color of completion widget category headers. +# Default: white +completion.category.fg = white + +# completion.category.bg (QssColor): +# Background color of the completion widget category headers. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, +# stop:1 #505050) +completion.category.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050) + +# completion.category.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: black +completion.category.border.top = black + +# completion.category.border.bottom (QssColor): +# Bottom border color of the completion widget category headers. +# Default: ${completion.category.border.top} +completion.category.border.bottom = ${completion.category.border.top} + +# completion.item.selected.fg (QtColor): +# Foreground color of the selected completion item. +# Default: black +completion.item.selected.fg = black + +# completion.item.selected.bg (QssColor): +# Background color of the selected completion item. +# Default: #e8c000 +completion.item.selected.bg = #e8c000 + +# completion.item.selected.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: #bbbb00 +completion.item.selected.border.top = #bbbb00 + +# completion.item.selected.border.bottom (QssColor): +# Bottom border color of the selected completion item. +# Default: ${completion.item.selected.border.top} +completion.item.selected.border.bottom = ${completion.item.selected.border.top} + +# completion.match.fg (QssColor): +# Foreground color of the matched text in the completion. +# Default: #ff4444 +completion.match.fg = #ff4444 + +# completion.scrollbar.fg (QssColor): +# Color of the scrollbar handle in completion view. +# Default: ${completion.fg} +completion.scrollbar.fg = ${completion.fg} + +# completion.scrollbar.bg (QssColor): +# Color of the scrollbar in completion view +# Default: ${completion.bg} +completion.scrollbar.bg = ${completion.bg} + +# statusbar.fg (QssColor): +# Foreground color of the statusbar. +# Default: white +statusbar.fg = white + +# statusbar.bg (QssColor): +# Background color of the statusbar. +# Default: black +statusbar.bg = black + +# statusbar.fg.private (QssColor): +# Foreground color of the statusbar in private browsing mode. +# Default: ${statusbar.fg} +statusbar.fg.private = ${statusbar.fg} + +# statusbar.bg.private (QssColor): +# Background color of the statusbar in private browsing mode. +# Default: #666666 +statusbar.bg.private = #666666 + +# statusbar.fg.insert (QssColor): +# Foreground color of the statusbar in insert mode. +# Default: ${statusbar.fg} +statusbar.fg.insert = ${statusbar.fg} + +# statusbar.bg.insert (QssColor): +# Background color of the statusbar in insert mode. +# Default: darkgreen +statusbar.bg.insert = darkgreen + +# statusbar.fg.command (QssColor): +# Foreground color of the statusbar in command mode. +# Default: ${statusbar.fg} +statusbar.fg.command = ${statusbar.fg} + +# statusbar.bg.command (QssColor): +# Background color of the statusbar in command mode. +# Default: ${statusbar.bg} +statusbar.bg.command = ${statusbar.bg} + +# statusbar.fg.command.private (QssColor): +# Foreground color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.fg.private} +statusbar.fg.command.private = ${statusbar.fg.private} + +# statusbar.bg.command.private (QssColor): +# Background color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.bg.private} +statusbar.bg.command.private = ${statusbar.bg.private} + +# statusbar.fg.caret (QssColor): +# Foreground color of the statusbar in caret mode. +# Default: ${statusbar.fg} +statusbar.fg.caret = ${statusbar.fg} + +# statusbar.bg.caret (QssColor): +# Background color of the statusbar in caret mode. +# Default: purple +statusbar.bg.caret = purple + +# statusbar.fg.caret-selection (QssColor): +# Foreground color of the statusbar in caret mode with a selection +# Default: ${statusbar.fg} +statusbar.fg.caret-selection = ${statusbar.fg} + +# statusbar.bg.caret-selection (QssColor): +# Background color of the statusbar in caret mode with a selection +# Default: #a12dff +statusbar.bg.caret-selection = #a12dff + +# statusbar.progress.bg (QssColor): +# Background color of the progress bar. +# Default: white +statusbar.progress.bg = white + +# statusbar.url.fg (QssColor): +# Default foreground color of the URL in the statusbar. +# Default: ${statusbar.fg} +statusbar.url.fg = ${statusbar.fg} + +# statusbar.url.fg.success (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (http). +# Default: white +statusbar.url.fg.success = white + +# statusbar.url.fg.success.https (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (https). +# Default: lime +statusbar.url.fg.success.https = lime + +# statusbar.url.fg.error (QssColor): +# Foreground color of the URL in the statusbar on error. +# Default: orange +statusbar.url.fg.error = orange + +# statusbar.url.fg.warn (QssColor): +# Foreground color of the URL in the statusbar when there's a +# warning. +# Default: yellow +statusbar.url.fg.warn = yellow + +# statusbar.url.fg.hover (QssColor): +# Foreground color of the URL in the statusbar for hovered links. +# Default: aqua +statusbar.url.fg.hover = aqua + +# tabs.fg.odd (QtColor): +# Foreground color of unselected odd tabs. +# Default: white +tabs.fg.odd = white + +# tabs.bg.odd (QtColor): +# Background color of unselected odd tabs. +# Default: grey +tabs.bg.odd = grey + +# tabs.fg.even (QtColor): +# Foreground color of unselected even tabs. +# Default: white +tabs.fg.even = white + +# tabs.bg.even (QtColor): +# Background color of unselected even tabs. +# Default: darkgrey +tabs.bg.even = darkgrey + +# tabs.fg.selected.odd (QtColor): +# Foreground color of selected odd tabs. +# Default: white +tabs.fg.selected.odd = white + +# tabs.bg.selected.odd (QtColor): +# Background color of selected odd tabs. +# Default: black +tabs.bg.selected.odd = black + +# tabs.fg.selected.even (QtColor): +# Foreground color of selected even tabs. +# Default: ${tabs.fg.selected.odd} +tabs.fg.selected.even = ${tabs.fg.selected.odd} + +# tabs.bg.selected.even (QtColor): +# Background color of selected even tabs. +# Default: ${tabs.bg.selected.odd} +tabs.bg.selected.even = ${tabs.bg.selected.odd} + +# tabs.bg.bar (QtColor): +# Background color of the tab bar. +# Default: #555555 +tabs.bg.bar = #555555 + +# tabs.indicator.start (QtColor): +# Color gradient start for the tab indicator. +# Default: #0000aa +tabs.indicator.start = #0000aa + +# tabs.indicator.stop (QtColor): +# Color gradient end for the tab indicator. +# Default: #00aa00 +tabs.indicator.stop = #00aa00 + +# tabs.indicator.error (QtColor): +# Color for the tab indicator on errors.. +# Default: #ff0000 +tabs.indicator.error = #ff0000 + +# tabs.indicator.system (ColorSystem): +# Color gradient interpolation system for the tab indicator. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +tabs.indicator.system = rgb + +# hints.fg (QssColor): +# Font color for hints. +# Default: black +hints.fg = black + +# hints.bg (QssColor): +# Background color for hints. Note that you can use a `rgba(...)` +# value for transparency. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, +# 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) +hints.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) + +# hints.fg.match (QssColor): +# Font color for the matched part of hints. +# Default: green +hints.fg.match = green + +# downloads.bg.bar (QssColor): +# Background color for the download bar. +# Default: black +downloads.bg.bar = black + +# downloads.fg.start (QtColor): +# Color gradient start for download text. +# Default: white +downloads.fg.start = white + +# downloads.bg.start (QtColor): +# Color gradient start for download backgrounds. +# Default: #0000aa +downloads.bg.start = #0000aa + +# downloads.fg.stop (QtColor): +# Color gradient end for download text. +# Default: ${downloads.fg.start} +downloads.fg.stop = ${downloads.fg.start} + +# downloads.bg.stop (QtColor): +# Color gradient stop for download backgrounds. +# Default: #00aa00 +downloads.bg.stop = #00aa00 + +# downloads.fg.system (ColorSystem): +# Color gradient interpolation system for download text. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.fg.system = rgb + +# downloads.bg.system (ColorSystem): +# Color gradient interpolation system for download backgrounds. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.bg.system = rgb + +# downloads.fg.error (QtColor): +# Foreground color for downloads with errors. +# Default: white +downloads.fg.error = white + +# downloads.bg.error (QtColor): +# Background color for downloads with errors. +# Default: red +downloads.bg.error = red + +# webpage.bg (QtColor): +# Background color for webpages if unset (or empty to use the +# theme's color) +# Default: white +webpage.bg = white + +# keyhint.fg (QssColor): +# Text color for the keyhint widget. +# Default: #FFFFFF +keyhint.fg = #FFFFFF + +# keyhint.fg.suffix (CssColor): +# Highlight color for keys to complete the current keychain +# Default: #FFFF00 +keyhint.fg.suffix = #FFFF00 + +# keyhint.bg (QssColor): +# Background color of the keyhint widget. +# Default: rgba(0, 0, 0, 80%) +keyhint.bg = rgba(0, 0, 0, 80%) + +# messages.fg.error (QssColor): +# Foreground color of an error message. +# Default: white +messages.fg.error = white + +# messages.bg.error (QssColor): +# Background color of an error message. +# Default: red +messages.bg.error = red + +# messages.border.error (QssColor): +# Border color of an error message. +# Default: #bb0000 +messages.border.error = #bb0000 + +# messages.fg.warning (QssColor): +# Foreground color a warning message. +# Default: white +messages.fg.warning = white + +# messages.bg.warning (QssColor): +# Background color of a warning message. +# Default: darkorange +messages.bg.warning = darkorange + +# messages.border.warning (QssColor): +# Border color of an error message. +# Default: #d47300 +messages.border.warning = #d47300 + +# messages.fg.info (QssColor): +# Foreground color an info message. +# Default: white +messages.fg.info = white + +# messages.bg.info (QssColor): +# Background color of an info message. +# Default: black +messages.bg.info = black + +# messages.border.info (QssColor): +# Border color of an info message. +# Default: #333333 +messages.border.info = #333333 + +# prompts.fg (QssColor): +# Foreground color for prompts. +# Default: white +prompts.fg = white + +# prompts.bg (QssColor): +# Background color for prompts. +# Default: darkblue +prompts.bg = darkblue + +# prompts.selected.bg (QssColor): +# Background color for the selected item in filename prompts. +# Default: #308cc6 +prompts.selected.bg = #308cc6 + + +# Fonts used for the UI, with optional style/weight/size. +# * Style: `normal`/`italic`/`oblique` +# * Weight: `normal`, `bold`, `100`..`900` +# * Size: _number_ `px`/`pt` +[fonts] + +# _monospace (Font): +# Default monospace fonts. +# Default: xos4 Terminus, Terminus, Monospace, "DejaVu Sans Mono", +# Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", +# Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal +_monospace = Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal + +# completion (Font): +# Font used in the completion widget. +# Default: 8pt ${_monospace} +completion = 8pt ${_monospace} + +# completion.category (Font): +# Font used in the completion categories. +# Default: bold ${completion} +completion.category = bold ${completion} + +# tabbar (QtFont): +# Font used in the tab bar. +# Default: 8pt ${_monospace} +tabbar = 8pt ${_monospace} + +# statusbar (Font): +# Font used in the statusbar. +# Default: 8pt ${_monospace} +statusbar = 8pt ${_monospace} + +# downloads (Font): +# Font used for the downloadbar. +# Default: 8pt ${_monospace} +downloads = 8pt ${_monospace} + +# hints (Font): +# Font used for the hints. +# Default: bold 13px ${_monospace} +hints = bold 13px ${_monospace} + +# debug-console (QtFont): +# Font used for the debugging console. +# Default: 8pt ${_monospace} +debug-console = 8pt ${_monospace} + +# web-family-standard (FontFamily): +# Font family for standard fonts. +# Default: +web-family-standard = + +# web-family-fixed (FontFamily): +# Font family for fixed fonts. +# Default: +web-family-fixed = + +# web-family-serif (FontFamily): +# Font family for serif fonts. +# Default: +web-family-serif = + +# web-family-sans-serif (FontFamily): +# Font family for sans-serif fonts. +# Default: +web-family-sans-serif = + +# web-family-cursive (FontFamily): +# Font family for cursive fonts. +# Default: +web-family-cursive = + +# web-family-fantasy (FontFamily): +# Font family for fantasy fonts. +# Default: +web-family-fantasy = + +# web-size-minimum (Int): +# The hard minimum font size. +# Default: 0 +web-size-minimum = 0 + +# web-size-minimum-logical (Int): +# The minimum logical font size that is applied when zooming out. +# Default: 6 +web-size-minimum-logical = 6 + +# web-size-default (Int): +# The default font size for regular text. +# Default: 16 +web-size-default = 16 + +# web-size-default-fixed (Int): +# The default font size for fixed-pitch text. +# Default: 13 +web-size-default-fixed = 13 + +# keyhint (Font): +# Font used in the keyhint widget. +# Default: 8pt ${_monospace} +keyhint = 8pt ${_monospace} + +# messages.error (Font): +# Font used for error messages. +# Default: 8pt ${_monospace} +messages.error = 8pt ${_monospace} + +# messages.warning (Font): +# Font used for warning messages. +# Default: 8pt ${_monospace} +messages.warning = 8pt ${_monospace} + +# messages.info (Font): +# Font used for info messages. +# Default: 8pt ${_monospace} +messages.info = 8pt ${_monospace} + +# prompts (Font): +# Font used for prompts. +# Default: 8pt sans-serif +prompts = 8pt sans-serif diff --git a/.config/qutebrowser/keys.conf b/.config/qutebrowser/keys.conf new file mode 100755 index 0000000..06fc600 --- /dev/null +++ b/.config/qutebrowser/keys.conf @@ -0,0 +1,709 @@ +# vim: ft=conf +# +# In this config file, qutebrowser's key bindings are configured. +# The format looks like this: +# +# [keymode] +# +# command +# keychain +# keychain2 +# ... +# +# All blank lines and lines starting with '#' are ignored. +# Inline-comments are not permitted. +# +# keymode is a comma separated list of modes in which the key binding should be +# active. If keymode starts with !, the key binding is active in all modes +# except the listed modes. +# +# For special keys (can't be part of a keychain), enclose them in `<`...`>`. +# For modifiers, you can use either `-` or `+` as delimiters, and these names: +# +# * Control: `Control`, `Ctrl` +# * Meta: `Meta`, `Windows`, `Mod4` +# * Alt: `Alt`, `Mod1` +# * Shift: `Shift` +# +# For simple keys (no `<>`-signs), a capital letter means the key is pressed +# with Shift. For special keys (with `<>`-signs), you need to explicitly add +# `Shift-` to match a key pressed with shift. +# +# Note that default keybindings are always bound, and need to be explicitly +# unbound if you wish to remove them: +# +# <unbound> +# keychain +# keychain2 +# ... + +[!normal] + +leave-mode + <escape> + <ctrl-[> + +[normal] +# Keybindings for normal mode. + +clear-keychain ;; search ;; fullscreen --leave + <escape> + <ctrl-[> + +set-cmd-text -s :open + o + +set-cmd-text :open {url:pretty} + go + +set-cmd-text -s :open -t + O + +set-cmd-text :open -t -i {url:pretty} + gO + +set-cmd-text -s :open -b + xo + +set-cmd-text :open -b -i {url:pretty} + xO + +set-cmd-text -s :open -w + wo + +set-cmd-text :open -w {url:pretty} + wO + +set-cmd-text / + / + +set-cmd-text ? + ? + +set-cmd-text : + : + +open -t + ga + <ctrl-t> + +open -w + <ctrl-n> + +tab-close + d + <ctrl-w> + +tab-close -o + D + +tab-only + co + +tab-focus + T + +tab-move + gm + +tab-move - + gl + +tab-move + + gr + +tab-next + J + <ctrl-pgdown> + +tab-prev + K + <ctrl-pgup> + +tab-clone + gC + +reload + r + <f5> + +reload -f + R + <ctrl-f5> + +back + H + <back> + +back -t + th + +back -w + wh + +forward + L + <forward> + +forward -t + tl + +forward -w + wl + +fullscreen + <f11> + +hint + f + +hint all tab + F + +hint all window + wf + +hint all tab-bg + ;b + +hint all tab-fg + ;f + +hint all hover + ;h + +hint images + ;i + +hint images tab + ;I + +hint links fill :open {hint-url} + ;o + +hint links fill :open -t -i {hint-url} + ;O + +hint links yank + ;y + +hint links yank-primary + ;Y + +hint --rapid links tab-bg + ;r + +hint --rapid links window + ;R + +hint links download + ;d + +hint inputs + ;t + +scroll left + h + +scroll down + j + +scroll up + k + +scroll right + l + +undo + u + <ctrl-shift-t> + +scroll-perc 0 + gg + +scroll-perc + G + +search-next + n + +search-prev + N + +enter-mode insert + i + +enter-mode caret + v + +enter-mode set_mark + ` + +enter-mode jump_mark + ' + +yank + yy + +yank -s + yY + +yank title + yt + +yank title -s + yT + +yank domain + yd + +yank domain -s + yD + +yank pretty-url + yp + +yank pretty-url -s + yP + +open -- {clipboard} + pp + +open -- {primary} + pP + +open -t -- {clipboard} + Pp + +open -t -- {primary} + PP + +open -w -- {clipboard} + wp + +open -w -- {primary} + wP + +set-cmd-text -s :quickmark-load + b + +set-cmd-text -s :quickmark-load -t + B + +set-cmd-text -s :quickmark-load -w + wb + +set-cmd-text -s :bookmark-load + gb + +set-cmd-text -s :bookmark-load -t + gB + +set-cmd-text -s :bookmark-load -w + wB + +save + sf + +set-cmd-text -s :set + ss + +set-cmd-text -s :set -t + sl + +set-cmd-text -s :bind + sk + +zoom-out + - + +zoom-in + + + +zoom + = + +navigate prev + [[ + +navigate next + ]] + +navigate prev -t + {{ + +navigate next -t + }} + +navigate up + gu + +navigate up -t + gU + +navigate increment + <ctrl-a> + +navigate decrement + <ctrl-x> + +inspector + wi + +download + gd + +download-cancel + ad + +download-clear + cd + +view-source + gf + +set-cmd-text -s :buffer + gt + +tab-focus last + <ctrl-tab> + +enter-mode passthrough + <ctrl-v> + +quit + <ctrl-q> + +scroll-page 0 1 + <ctrl-f> + +scroll-page 0 -1 + <ctrl-b> + +scroll-page 0 0.5 + <ctrl-d> + +scroll-page 0 -0.5 + <ctrl-u> + +tab-focus 1 + <alt-1> + +tab-focus 2 + <alt-2> + +tab-focus 3 + <alt-3> + +tab-focus 4 + <alt-4> + +tab-focus 5 + <alt-5> + +tab-focus 6 + <alt-6> + +tab-focus 7 + <alt-7> + +tab-focus 8 + <alt-8> + +tab-focus 9 + <alt-9> + +home + <ctrl-h> + +stop + <ctrl-s> + +print + <ctrl-alt-p> + +open qute:settings + Ss + +follow-selected + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +follow-selected -t + <ctrl-return> + <ctrl-enter> + +repeat-command + . + +record-macro + q + +run-macro + @ + +spawn mpv {url} + mpv + m + +hint links spawn umpv {hint-urls} + MPV + +hint links spawn mpv {hint-url} + M + +spawn tsp-ytdl {hint-url} + ;M + +wq + ZZ + +tab-focus -1 + g$ + +tab-pin + <ctrl-p> + +[insert] +# Keybindings for insert mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `open-editor`: Open a texteditor with the focused field. +# * `paste-primary`: Paste primary selection at cursor position. + +open-editor + <ctrl-e> + +insert-text {primary} + <shift-ins> + +[hint] +# Keybindings for hint mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `follow-hint`: Follow the currently selected hint. + +follow-hint + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +hint --rapid links tab-bg + <ctrl-r> + +hint links + <ctrl-f> + +hint all tab-bg + <ctrl-b> + +[command] +# Keybindings for command mode. +# Since normal keypresses are passed through, only special keys are +# supported in this mode. +# Useful hidden commands to map in this section: +# * `command-history-prev`: Switch to previous command in history. +# * `command-history-next`: Switch to next command in history. +# * `completion-item-focus`: Select another item in completion. +# * `command-accept`: Execute the command currently in the commandline. + +command-history-prev + <ctrl-p> + +command-history-next + <ctrl-n> + +completion-item-focus prev + <shift-tab> + <up> + +completion-item-focus next + <tab> + <down> + +completion-item-focus next-category + <ctrl-tab> + +completion-item-focus prev-category + <ctrl-shift-tab> + +completion-item-del + <ctrl-d> + +command-accept + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +[prompt] +# Keybindings for prompts in the status line. +# You can bind normal keys in this mode, but they will be only active +# when a yes/no-prompt is asked. For other prompt modes, you can only +# bind special keys. +# Useful hidden commands to map in this section: +# * `prompt-accept`: Confirm the entered value. +# * `prompt-accept yes`: Answer yes to a yes/no question. +# * `prompt-accept no`: Answer no to a yes/no question. + +prompt-accept + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +prompt-accept yes + y + +prompt-accept no + n + +prompt-open-download + <ctrl-x> + +prompt-item-focus prev + <shift-tab> + <up> + +prompt-item-focus next + <tab> + <down> + +[command,prompt] + +rl-backward-char + <ctrl-b> + +rl-forward-char + <ctrl-f> + +rl-backward-word + <alt-b> + +rl-forward-word + <alt-f> + +rl-beginning-of-line + <ctrl-a> + +rl-end-of-line + <ctrl-e> + +rl-unix-line-discard + <ctrl-u> + +rl-kill-line + <ctrl-k> + +rl-kill-word + <alt-d> + +rl-unix-word-rubout + <ctrl-w> + +rl-backward-kill-word + <alt-backspace> + +rl-yank + <ctrl-y> + +rl-delete-char + <ctrl-?> + +rl-backward-delete-char + <ctrl-h> + +[caret] + +toggle-selection + v + <space> + +drop-selection + <ctrl-space> + +enter-mode normal + c + +move-to-next-line + j + +move-to-prev-line + k + +move-to-next-char + l + +move-to-prev-char + h + +move-to-end-of-word + e + +move-to-next-word + w + +move-to-prev-word + b + +move-to-start-of-next-block + ] + +move-to-start-of-prev-block + [ + +move-to-end-of-next-block + } + +move-to-end-of-prev-block + { + +move-to-start-of-line + 0 + +move-to-end-of-line + $ + +move-to-start-of-document + gg + +move-to-end-of-document + G + +yank selection -s + Y + +yank selection + y + <return> + <ctrl-m> + <ctrl-j> + <shift-return> + <enter> + <shift-enter> + +scroll left + H + +scroll down + J + +scroll up + K + +scroll right + L + diff --git a/.config/qutebrowser/misc/Makefile b/.config/qutebrowser/misc/Makefile new file mode 100644 index 0000000..210480e --- /dev/null +++ b/.config/qutebrowser/misc/Makefile @@ -0,0 +1,33 @@ +PYTHON = python3 +PREFIX = /usr/local +DESTDIR = +ICONSIZES = 16 24 32 48 64 128 256 512 + +SETUPTOOLSOPTIONS = +ifdef DESTDIR +SETUPTOOLSOPTS = --root="$(DESTDIR)" +endif + +.PHONY: install + +doc/qutebrowser.1.html: + a2x -f manpage doc/qutebrowser.1.asciidoc + +install: doc/qutebrowser.1.html + $(PYTHON) setup.py install --prefix="$(PREFIX)" --optimize=1 $(SETUPTOOLSOPTS) + install -Dm644 misc/qutebrowser.appdata.xml \ + "$(DESTDIR)$(PREFIX)/share/metainfo/qutebrowser.appdata.xml" + install -Dm644 doc/qutebrowser.1 \ + "$(DESTDIR)$(PREFIX)/share/man/man1/qutebrowser.1" + install -Dm644 misc/qutebrowser.desktop \ + "$(DESTDIR)$(PREFIX)/share/applications/qutebrowser.desktop" + $(foreach i,$(ICONSIZES),install -Dm644 "icons/qutebrowser-$(i)x$(i).png" \ + "$(DESTDIR)$(PREFIX)/share/icons/hicolor/$(i)x$(i)/apps/qutebrowser.png";) + install -Dm644 icons/qutebrowser.svg \ + "$(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/qutebrowser.svg" + install -Dm755 -t "$(DESTDIR)$(PREFIX)/share/qutebrowser/userscripts/" \ + $(wildcard misc/userscripts/*) + install -Dm755 -t "$(DESTDIR)$(PREFIX)/share/qutebrowser/scripts/" \ + $(filter-out scripts/__init__.py scripts/__pycache__ scripts/dev \ + scripts/testbrowser scripts/asciidoc2html.py scripts/setupcommon.py \ + scripts/link_pyqt.py,$(wildcard scripts/*)) diff --git a/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser b/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser new file mode 100644 index 0000000..b993e00 --- /dev/null +++ b/.config/qutebrowser/misc/apparmor/usr.bin.qutebrowser @@ -0,0 +1,41 @@ +# AppArmor profile for qutebrowser +# Tested on Debian jessie + +#include <tunables/global> + +profile qutebrowser /usr/{local/,}bin/qutebrowser { + + #include <abstractions/base> + #include <abstractions/nameservice> + #include <abstractions/openssl> + #include <abstractions/ssl_certs> + #include <abstractions/audio> + #include <abstractions/fonts> + #include <abstractions/kde> + #include <abstractions/user-download> + #include <abstractions/X> + + capability dac_override, + + /usr/{local/,}bin/ r, + /usr/{local/,}bin/qutebrowser rix, + /usr/bin/python3.? r, + + /usr/lib/python3/ mr, + /usr/lib/python3/** mr, + /usr/lib/python3.?/ r, + /usr/lib/python3.?/** mr, + /usr/local/lib/python3.?/** r, + + /proc/*/mounts r, + owner /tmp/** rwkl, + owner /run/user/*/ rw, + owner /run/user/*/** krw, + + @{HOME}/.config/qutebrowser/** krw, + @{HOME}/.local/share/qutebrowser/** krw, + @{HOME}/.cache/qutebrowser/** krw, + @{HOME}/.gstreamer-0.10/* r, + +} + diff --git a/.config/qutebrowser/misc/cheatsheet.svg b/.config/qutebrowser/misc/cheatsheet.svg new file mode 100644 index 0000000..bb87142 --- /dev/null +++ b/.config/qutebrowser/misc/cheatsheet.svg @@ -0,0 +1,3726 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1092.2667" + height="682.66669" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + version="1.0" + sodipodi:docname="cheatsheet.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="/home/vav/images/xmonad/xmbindings_lg.png" + inkscape:export-xdpi="112.5" + inkscape:export-ydpi="112.5"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.7536248" + inkscape:cx="430.72917" + inkscape:cy="268.64059" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="1024px" + height="640px" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1440" + inkscape:window-x="0" + inkscape:window-y="0" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-maximized="0" + inkscape:snap-text-baseline="true" + inkscape:measure-start="0,0" + inkscape:measure-end="0,0"> + <inkscape:grid + id="GridFromPre046Settings" + type="xygrid" + originx="0" + originy="0" + spacingx="2.1333333" + spacingy="2.1333333" + color="#3f3fff" + empcolor="#3f3fff" + opacity="0.15" + empopacity="0.38" + empspacing="5" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <rect + ry="4.7797003" + y="163.79405" + x="10.666667" + height="64" + width="74.666664" + id="rect3328" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3330" + width="64" + height="64" + x="96" + y="163.79405" + ry="4.7797003" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3382" + width="63.461262" + height="64" + x="544.48407" + y="163.79405" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="163.79405" + x="619.1535" + height="64" + width="63.461262" + id="rect3384" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + ry="4.7797003" + y="163.79405" + x="469.8172" + height="64" + width="63.461262" + id="rect3386" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + ry="4.7797003" + y="163.79405" + x="768.48407" + height="64" + width="63.461262" + id="rect3388" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3392" + width="63.461262" + height="64" + x="693.82019" + y="163.79405" + ry="4.7797003" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="99.751244" + y="187.30594" + id="text3444"><tspan + sodipodi:role="line" + id="tspan3446" + x="99.751244" + y="187.30594" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">Q</tspan></text> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect2739" + width="63.461262" + height="64" + x="320.05182" + y="163.79405" + ry="4.7797003" /> + <text + id="text3448" + y="187.60356" + x="323.15463" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="187.60356" + x="323.15463" + id="tspan3450" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">R</tspan></text> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect7301" + width="63.461262" + height="64" + x="171.15358" + y="163.79405" + ry="4.7797003" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 171.24757,196.86071 c 21.0911,0 42.18218,0 63.27327,0" + id="path7305" + inkscape:connector-curvature="0" /> + <text + id="text3464" + y="187.92427" + x="175.64062" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="187.92427" + x="175.64062" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + id="tspan3498">W</tspan></text> + <text + id="text3468" + y="216.29616" + x="99.515625" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="216.29616" + x="99.515625" + id="tspan3470" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">q</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="175.64062" + y="220.43825" + id="text3472"><tspan + sodipodi:role="line" + id="tspan3474" + x="175.64062" + y="220.43825" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">w</tspan></text> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 96.637962,195.79405 c 21.265388,0 42.530768,0 63.796148,0" + id="path3476" + inkscape:connector-curvature="0" /> + <g + id="g7271" + transform="translate(0,16.59406)" + style="fill:#eeeeec;fill-opacity:1"> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3378" + width="63.461262" + height="64" + x="395.15076" + y="147.2" + ry="4.7797003" /> + <rect + ry="2.4296808" + y="147.2" + x="395.15076" + height="32.533333" + width="63.461262" + id="rect7269" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + style="font-size:18px;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 395.24997,179.73333 c 21.26539,0 42.53077,0 63.79615,0" + id="path3484" + inkscape:connector-curvature="0" /> + </g> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.1617893px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 469.91423,196.86071 c 21.08993,0 42.17982,0 63.26974,0" + id="path3486" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 544.58331,196.86071 c 21.26538,0 42.53076,0 63.79615,0" + id="path3488" + inkscape:connector-curvature="0" /> + <path + id="path3490" + d="m 619.24757,196.32738 c 21.0911,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="path3492" + d="m 693.91424,196.86071 c 21.09109,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="path3494" + d="m 768.58331,196.86071 c 21.26538,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + ry="4.7797003" + y="163.79405" + x="245.38516" + height="64" + width="63.461262" + id="rect2735" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path2737" + d="m 245.47916,195.19999 c 21.09109,0 42.18217,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="248.78169" + y="187.60356" + id="text3502"><tspan + sodipodi:role="line" + id="tspan3504" + x="248.78169" + y="187.60356" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">E</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="248.64069" + y="220.16637" + id="text3506"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3508" + x="248.64069" + y="220.16637">e</tspan></text> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 320.14582,195.19999 c 21.0911,0 42.18218,0 63.27327,0" + id="path2741" + inkscape:connector-curvature="0" /> + <text + id="text3510" + y="219.88054" + x="321.97186" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="219.88054" + x="321.97186" + id="tspan3512" + sodipodi:role="line">r</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="399.83853" + y="220.32741" + id="text3532"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3534" + x="399.83853" + y="220.32741">t</tspan></text> + <text + id="text3536" + y="217.93365" + x="474.22501" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="217.93365" + x="474.22501" + id="tspan3538" + sodipodi:role="line">y</tspan></text> + <text + id="text3540" + y="219.90315" + x="547.44312" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="219.90315" + x="547.44312" + id="tspan3542" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">u</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="622.33124" + y="220.32741" + id="text3544"><tspan + sodipodi:role="line" + id="tspan3546" + x="622.33124" + y="220.32741" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">i</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="698.52502" + y="219.88054" + id="text3548"><tspan + sodipodi:role="line" + id="tspan3550" + x="698.52502" + y="219.88054" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">o</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="772.01251" + y="219.88054" + id="text3552"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3554" + x="772.01251" + y="219.88054">p</tspan></text> + <text + id="text3556" + y="201.17621" + x="851.88257" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="font-size:23.46666718px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672px" + y="201.17621" + x="851.88257" + id="tspan3558" + sodipodi:role="line"> </tspan></text> + <rect + ry="4.7797003" + y="238.46074" + x="106.23158" + height="64" + width="64" + id="rect3616" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3618" + width="63.461262" + height="64" + x="181.38516" + y="238.46074" + ry="4.7797003" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3620" + width="64.538773" + height="64" + x="255.56491" + y="238.46074" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="238.46074" + x="332.05182" + height="64" + width="63.461262" + id="rect3622" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3624" + width="63.461262" + height="64" + x="405.38232" + y="238.46074" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="238.46074" + x="554.71564" + height="64" + width="63.461262" + id="rect3626" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3628" + width="63.461262" + height="64" + x="629.38507" + y="238.46074" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="238.46074" + x="779.1535" + height="64" + width="63.948242" + id="rect3634" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <text + id="text3638" + y="262.07977" + x="110.55427" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="262.07977" + x="110.55427" + id="tspan3640" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="335.79037" + y="264.53333" + id="text3642"><tspan + sodipodi:role="line" + id="tspan3644" + x="335.79037" + y="264.53333" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">F</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:monospace;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="185.38518" + y="261.80792" + id="text3646"><tspan + id="tspan3648" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + x="185.38518" + y="261.80792">S</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="110.07188" + y="295.08054" + id="text3650"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3652" + x="110.07188" + y="295.08054">a</tspan></text> + <text + id="text3654" + y="295.08054" + x="185.54375" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="295.08054" + x="185.54375" + id="tspan3656" + sodipodi:role="line">s</tspan></text> + <path + id="path3658" + d="m 106.86955,270.46071 c 21.26538,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 181.47916,270.99405 c 21.09109,0 42.18217,0 63.27327,0" + id="path3660" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:0.60877639px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 256.71172,270.08518 c 20.26767,0 40.53532,0 60.80299,0" + id="path3662" + inkscape:connector-curvature="0" /> + <path + id="path3664" + d="m 330.81249,271.52738 c 21.09109,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 405.48156,270.99405 c 21.26538,0 42.53076,0 63.79615,0" + id="path3666" + inkscape:connector-curvature="0" /> + <g + id="g10542" + transform="matrix(1,0,0,-1,0,653.98815)" + style="fill:#eeeeec;fill-opacity:1"> + <rect + ry="4.7797003" + y="351.5274" + x="480.04877" + height="64" + width="63.461262" + id="rect3630" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect8437" + width="63.461262" + height="33.005924" + x="480.04877" + y="351.5274" + ry="2.4649756" /> + <path + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:1.1617893px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 480.14581,384.59406 c 21.08993,0 42.17982,0 63.26974,0" + id="path3668" + inkscape:connector-curvature="0" /> + </g> + <path + id="path3670" + d="m 554.81489,271.52738 c 21.26539,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 629.47916,270.99405 c 21.09109,0 42.18217,0 63.27327,0" + id="path3672" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 704.14582,271.52738 c 21.0911,0 42.18218,0 63.27327,0" + id="path3674" + inkscape:connector-curvature="0" /> + <path + id="path3678" + d="m 779.24757,270.99405 c 21.0911,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <text + id="text3680" + y="262.07977" + x="259.86594" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="262.07977" + x="259.86594" + id="tspan3682" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;stroke-width:1.06666672">D</tspan></text> + <text + id="text3684" + y="295.7149" + x="260.63126" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="295.7149" + x="260.63126" + id="tspan3686" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">d</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="335.79037" + y="293.96075" + id="text3688"><tspan + sodipodi:role="line" + id="tspan3690" + x="335.79037" + y="293.96075" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">f</tspan></text> + <text + id="text3692" + y="293.27176" + x="409.74942" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="293.27176" + x="409.74942" + id="tspan3694" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">g</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="483.63565" + y="292.44882" + id="text3696"><tspan + sodipodi:role="line" + id="tspan3698" + x="483.63565" + y="292.44882" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">h</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="563.19849" + y="293.46237" + id="text3700"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3702" + x="563.19849" + y="293.46237">j</tspan></text> + <text + id="text3704" + y="298.28571" + x="630.01605" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="298.28571" + x="630.01605" + id="tspan3706" + sodipodi:role="line">k</tspan></text> + <g + id="g10537" + transform="translate(0,-112.47259)" + style="fill:#eeeeec;fill-opacity:1"> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect8447" + width="63.461262" + height="64" + x="704" + y="350.93332" + ry="4.7797003" /> + <rect + ry="2.3898501" + y="382.93332" + x="704" + height="32" + width="63.461262" + id="rect8449" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path8451" + d="m 704.33984,383.97137 c 21.08993,0 42.17982,0 63.26974,0" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:1.1617893px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + </g> + <text + id="text3708" + y="297.45032" + x="708.60419" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="297.45032" + x="708.60419" + id="tspan3710" + sodipodi:role="line">l</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="781.47919" + y="292.20032" + id="text3716"><tspan + sodipodi:role="line" + id="tspan3718" + x="781.47919" + y="292.20032" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">;</tspan></text> + <rect + ry="4.7797003" + y="238.46074" + x="854.2525" + height="64" + width="63.461262" + id="rect3720" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path3724" + d="m 854.35172,271.52738 c 21.26539,0 42.53077,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3722" + width="137.60541" + height="64" + x="929.06122" + y="238.46074" + ry="4.7797003" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="858.5" + y="296.23157" + id="text3728"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3730" + x="858.5" + y="296.23157">'</tspan></text> + <text + id="text3740" + y="279.57574" + x="929.25153" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:'Bitstream Vera Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="279.57574" + x="929.25153" + id="tspan3742" + sodipodi:role="line" + style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672">↲</tspan></text> + <rect + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3764" + width="64" + height="64" + x="116.89825" + y="313.12741" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="313.12741" + x="192.05182" + height="64" + width="63.461262" + id="rect3766" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3770" + width="63.461262" + height="64" + x="341.38516" + y="313.12741" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="313.12741" + x="416.04898" + height="64" + width="63.461262" + id="rect3772" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + ry="4.7797003" + y="313.12741" + x="490.71542" + height="64" + width="63.461262" + id="rect3778" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3780" + width="63.948242" + height="64" + x="789.82019" + y="313.12741" + ry="4.7797003" /> + <text + id="text3796" + y="368.70032" + x="126.76303" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="368.70032" + x="126.76303" + id="tspan3798" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="199.07387" + y="367.11551" + id="text3800"><tspan + sodipodi:role="line" + id="tspan3802" + x="199.07387" + y="367.11551" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">x</tspan></text> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 117.53621,345.12738 c 21.26539,0 42.53077,0 63.79615,0" + id="path3804" + inkscape:connector-curvature="0" /> + <path + id="path3806" + d="m 192.14582,345.66071 c 21.0911,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <rect + ry="4.7797003" + y="313.12741" + x="266.23157" + height="64" + width="64.538773" + id="rect3768" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path3808" + d="m 267.37839,344.75185 c 20.26767,0 40.53532,0 60.80299,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.06666672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 341.47916,346.19405 c 21.09109,0 42.18217,0 63.27327,0" + id="path3810" + inkscape:connector-curvature="0" /> + <path + id="path3812" + d="m 416.14822,345.66071 c 21.26539,0 42.53077,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.1617893px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 490.81248,346.19405 c 21.08993,0 42.17982,0 63.26974,0" + id="path3814" + inkscape:connector-curvature="0" /> + <g + id="g7140" + transform="translate(0,16.594076)" + style="fill:#eeeeec;fill-opacity:1"> + <rect + ry="4.7797003" + y="296.53333" + x="565.38226" + height="64" + width="63.461262" + id="rect3774" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect7131" + width="63.461262" + height="32" + x="565.38226" + y="328.53333" + ry="2.3898501" /> + <path + id="path3816" + d="m 565.48156,329.6 c 21.26538,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + </g> + <g + id="g7162" + transform="translate(0,16.594076)" + style="fill:#babdb6;fill-opacity:1"> + <rect + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3776" + width="63.461262" + height="64" + x="640.05176" + y="296.53333" + ry="4.7797003" /> + <rect + ry="2.3898501" + y="328.53333" + x="640.05176" + height="32" + width="63.461262" + id="rect7160" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 640.14582,329.06667 c 21.0911,0 42.18218,0 63.27327,0" + id="path3818" + inkscape:connector-curvature="0" /> + </g> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 789.91424,345.66071 c 21.09109,0 42.18218,0 63.27327,0" + id="path3822" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="271.65314" + y="368.61978" + id="text3828"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3830" + x="271.65314" + y="368.61978">c</tspan></text> + <text + id="text3832" + y="368.62741" + x="348.59036" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="368.62741" + x="348.59036" + id="tspan3834" + sodipodi:role="line">v</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="420.34647" + y="367.93842" + id="text3836"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3838" + x="420.34647" + y="367.93842">b</tspan></text> + <text + id="text3840" + y="368.05829" + x="494.32407" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="368.05829" + x="494.32407" + id="tspan3842" + sodipodi:role="line">n</tspan></text> + <text + id="text3844" + y="368.12903" + x="573.86517" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="368.12903" + x="573.86517" + id="tspan3846" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">m</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="643.82837" + y="367.86551" + id="text3848"><tspan + sodipodi:role="line" + id="tspan3850" + x="643.82837" + y="367.86551" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">,</tspan></text> + <g + id="g7167" + transform="translate(74.666662,16.594076)" + style="fill:#eeeeec;fill-opacity:1"> + <rect + ry="4.7797003" + y="296.53333" + x="640.05176" + height="64" + width="63.461262" + id="rect7169" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect7171" + width="63.461262" + height="32" + x="640.05176" + y="328.53333" + ry="2.3898501" /> + <path + id="path7173" + d="m 640.14582,329.06667 c 21.0911,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="718.6156" + y="367.46667" + id="text3852"><tspan + sodipodi:role="line" + id="tspan3854" + x="718.6156" + y="367.46667" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">.</tspan></text> + <text + id="text3856" + y="367.10361" + x="798.54919" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="367.10361" + x="798.54919" + id="tspan3858" + sodipodi:role="line">/</tspan></text> + <rect + ry="4.7797003" + y="89.127388" + x="85.333328" + height="64" + width="64" + id="rect3876" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3878" + width="63.461262" + height="64" + x="160.48691" + y="89.127388" + ry="4.7797003" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect10511" + width="63.461262" + height="64" + x="235.15358" + y="89.127388" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="89.127388" + x="309.82025" + height="64" + width="63.461262" + id="rect3882" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3884" + width="63.461262" + height="64" + x="384.48407" + y="89.127388" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="89.127388" + x="533.81738" + height="64" + width="63.461262" + id="rect3886" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3888" + width="63.461262" + height="64" + x="608.48688" + y="89.127388" + ry="4.7797003" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3890" + width="63.461262" + height="64" + x="459.15051" + y="89.127388" + ry="4.7797003" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3892" + width="63.461262" + height="64" + x="757.33331" + y="89.127388" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="89.127388" + x="832.48688" + height="64" + width="63.461262" + id="rect3894" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + ry="4.7797003" + y="89.127388" + x="683.1535" + height="64" + width="63.461262" + id="rect3896" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="88.721916" + y="145.3714" + id="text3910"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3912" + x="88.721916" + y="145.3714">1</tspan></text> + <text + id="text3914" + y="144.91666" + x="162.87187" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="144.91666" + x="162.87187" + id="tspan3916" + sodipodi:role="line">2</tspan></text> + <path + id="path3918" + d="m 85.971291,121.12738 c 21.265389,0 42.530769,0 63.796159,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 160.58091,121.66071 c 21.09109,0 42.18217,0 63.27327,0" + id="path3920" + inkscape:connector-curvature="0" /> + <path + id="path3924" + d="m 309.91424,122.19405 c 21.09109,0 42.18218,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 384.58331,121.66071 c 21.26538,0 42.53076,0 63.79615,0" + id="path3926" + inkscape:connector-curvature="0" /> + <path + id="path3928" + d="m 459.24756,122.19405 c 21.08993,0 42.17982,0 63.26974,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.1617893px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + id="path3930" + d="m 533.91664,122.19405 c 21.26539,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 608.58091,121.66071 c 21.09109,0 42.18217,0 63.27327,0" + id="path3932" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 683.24757,122.19405 c 21.0911,0 42.18218,0 63.27327,0" + id="path3934" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 757.91664,122.19405 c 21.26539,0 42.53076,0 63.79615,0" + id="path3936" + inkscape:connector-curvature="0" /> + <path + id="path3938" + d="m 832.58091,121.66071 c 21.09109,0 42.18217,0 63.27327,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 235.24757,122.19405 c 21.0911,0 42.18218,0 63.27327,0" + id="path10513" + inkscape:connector-curvature="0" /> + <text + id="text3944" + y="144.91666" + x="239.48438" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="144.91666" + x="239.48438" + id="tspan3946" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">3</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="312.26355" + y="145.3714" + id="text3948"><tspan + sodipodi:role="line" + id="tspan3950" + x="312.26355" + y="145.3714" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">4</tspan></text> + <text + id="text3952" + y="144.79477" + x="386.92606" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="144.79477" + x="386.92606" + id="tspan3954" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">5</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="461.15417" + y="144.91666" + id="text3956"><tspan + sodipodi:role="line" + id="tspan3958" + x="461.15417" + y="144.91666" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">6</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="536.29688" + y="145.06665" + id="text3960"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3962" + x="536.29688" + y="145.06665">7</tspan></text> + <text + id="text3964" + y="144.79477" + x="611.03851" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="144.79477" + x="611.03851" + id="tspan3966" + sodipodi:role="line">8</tspan></text> + <text + id="text3968" + y="144.82977" + x="686.55652" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="144.82977" + x="686.55652" + id="tspan3970" + sodipodi:role="line">9</tspan></text> + <text + id="text3972" + y="144.57379" + x="760.35419" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="144.57379" + x="760.35419" + id="tspan3974" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">0</tspan></text> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3976" + width="63.461262" + height="64" + x="906.71844" + y="89.127388" + ry="4.7797003" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 906.81249,121.66071 c 21.09109,0 42.18218,0 63.27327,0" + id="path3978" + inkscape:connector-curvature="0" /> + <rect + ry="4.7797003" + y="89.127388" + x="11.153512" + height="64" + width="63.461262" + id="rect3980" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path3982" + d="m 11.247578,121.66071 c 21.091093,0 42.182176,0 63.273269,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="840.27075" + y="143.8774" + id="text3988"><tspan + sodipodi:role="line" + id="tspan3990" + x="840.27075" + y="143.8774" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">-</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="913.50781" + y="144.89095" + id="text3992"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3994" + x="913.50781" + y="144.89095">=</tspan></text> + <rect + ry="4.7797003" + y="89.127388" + x="981.67877" + height="64" + width="95.078056" + id="rect3996" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <text + id="text4004" + y="141.20207" + x="992.40417" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="141.20207" + x="992.40417" + id="tspan4006" + sodipodi:role="line" + style="font-size:13.86666679px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">Backspace</tspan></text> + <text + id="text4977" + y="117.46353" + x="89.259377" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="117.46353" + x="89.259377" + id="tspan4979" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">!</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="162.17561" + y="116.44883" + id="text4981"><tspan + sodipodi:role="line" + id="tspan4983" + x="162.17561" + y="116.44883" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">@</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="238.91458" + y="117.86665" + id="text4985"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan4987" + x="238.91458" + y="117.86665">#</tspan></text> + <text + id="text4989" + y="117.96072" + x="311.69211" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="117.96072" + x="311.69211" + id="tspan4991" + sodipodi:role="line">$</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="387.71487" + y="117.27174" + id="text4993"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan4995" + x="387.71487" + y="117.27174">%</tspan></text> + <text + id="text4997" + y="116.44883" + x="461.6011" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="116.44883" + x="461.6011" + id="tspan4999" + sodipodi:role="line">^</tspan></text> + <text + id="text5001" + y="117.46236" + x="536.96692" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="117.46236" + x="536.96692" + id="tspan5003" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">&</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="609.5968" + y="117.19882" + id="text5005"><tspan + sodipodi:role="line" + id="tspan5007" + x="609.5968" + y="117.19882" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">*</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="685.03265" + y="116.44881" + id="text5009"><tspan + sodipodi:role="line" + id="tspan5011" + x="685.03265" + y="116.44881" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">(</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="761.91931" + y="116.12902" + id="text5013"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan5015" + x="761.91931" + y="116.12902">)</tspan></text> + <rect + ry="3.5688117" + y="387.40637" + x="254.19489" + height="47.786243" + width="385.80511" + id="rect5017" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <g + id="g4061" + transform="translate(0,-7.1714294)"> + <text + id="text5021" + y="422.17459" + x="261.68033" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="422.17459" + x="261.68033" + id="tspan5023" + sodipodi:role="line" + style="font-size:13.86666679px;line-height:1.25;stroke-width:1.06666672">Space</tspan></text> + </g> + <text + id="text6971" + y="339.18835" + x="125.368" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="339.18835" + x="125.368" + id="tspan6973" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">Z</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="197.67885" + y="337.60355" + id="text6975"><tspan + sodipodi:role="line" + id="tspan6977" + x="197.67885" + y="337.60355" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">X</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="271.76355" + y="339.99478" + id="text6979"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan6981" + x="271.76355" + y="339.99478">C</tspan></text> + <text + id="text6983" + y="339.11542" + x="347.19534" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="339.11542" + x="347.19534" + id="tspan6985" + sodipodi:role="line">V</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="418.95145" + y="338.42645" + id="text6987"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan6989" + x="418.95145" + y="338.42645">B</tspan></text> + <text + id="text6991" + y="338.27698" + x="494.1412" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="338.27698" + x="494.1412" + id="tspan6993" + sodipodi:role="line">N</tspan></text> + <text + id="text6995" + y="338.6171" + x="572.47015" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="338.6171" + x="572.47015" + id="tspan6997" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">M</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="645.10004" + y="338.35355" + id="text6999"><tspan + sodipodi:role="line" + id="tspan7001" + x="645.10004" + y="338.35355" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672"><</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="723.39313" + y="336.84164" + id="text7003"><tspan + sodipodi:role="line" + id="tspan7005" + x="723.39313" + y="336.84164" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="798.75592" + y="337.85516" + id="text7007"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7009" + x="798.75592" + y="337.85516">?</tspan></text> + <text + id="text7027" + y="264.07922" + x="409.74942" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="264.07922" + x="409.74942" + id="tspan7029" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">G</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="483.63565" + y="263.25632" + id="text7031"><tspan + sodipodi:role="line" + id="tspan7033" + x="483.63565" + y="263.25632" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672">H</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="559.00153" + y="264.26987" + id="text7035"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7037" + x="559.00153" + y="264.26987">J</tspan></text> + <text + id="text7039" + y="263.13974" + x="631.41089" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="263.13974" + x="631.41089" + id="tspan7041" + sodipodi:role="line">K</tspan></text> + <text + id="text7043" + y="264.96075" + x="708.60419" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + y="264.96075" + x="708.60419" + id="tspan7045" + sodipodi:role="line">L</tspan></text> + <text + id="text7047" + y="263.34451" + x="781.32269" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="263.34451" + x="781.32269" + id="tspan7049" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">:</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="399.83853" + y="187.92427" + id="text7051"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7053" + x="399.83853" + y="187.92427">T</tspan></text> + <text + id="text7055" + y="187.60356" + x="474.54233" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="187.60356" + x="474.54233" + id="tspan7057" + sodipodi:role="line">Y</tspan></text> + <text + id="text7059" + y="187.3317" + x="548.19391" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="187.3317" + x="548.19391" + id="tspan7061" + sodipodi:role="line" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">U</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="621.77612" + y="187.60356" + id="text7063"><tspan + sodipodi:role="line" + id="tspan7065" + x="621.77612" + y="187.60356" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">I</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="698.92633" + y="187.3317" + id="text7067"><tspan + sodipodi:role="line" + id="tspan7069" + x="698.92633" + y="187.3317" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">O</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="771.70312" + y="187.92427" + id="text7071"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7073" + x="771.70312" + y="187.92427">P</tspan></text> + <rect + ry="4.7797003" + y="163.79405" + x="842.71564" + height="64" + width="63.461262" + id="rect7075" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect7077" + width="63.461262" + height="64" + x="917.38507" + y="163.79405" + ry="4.7797003" /> + <rect + ry="4.7797003" + y="163.79405" + x="992.05176" + height="64" + width="85.281578" + id="rect7079" + style="font-size:18px;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <path + id="path7081" + d="m 842.81489,196.86071 c 21.26539,0 42.53076,0 63.79615,0" + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16661239px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.16182172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 917.47916,196.32738 c 21.09109,0 42.18217,0 63.27327,0" + id="path7083" + inkscape:connector-curvature="0" /> + <path + style="font-size:18px;fill:none;stroke:#000000;stroke-width:1.34042335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 992.33815,196.86071 c 28.07395,0 56.14795,0 84.22195,0" + id="path7085" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="845.2594" + y="219.39616" + id="text7087"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7089" + x="845.2594" + y="219.39616">[</tspan></text> + <text + id="text7091" + y="219.39616" + x="919.95624" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="219.39616" + x="919.95624" + id="tspan7093" + sodipodi:role="line">]</tspan></text> + <text + id="text7095" + y="219.92429" + x="993.08435" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="219.92429" + x="993.08435" + id="tspan7097" + sodipodi:role="line">\</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="844.91248" + y="186.91489" + id="text7099"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7101" + x="844.91248" + y="186.91489">{</tspan></text> + <text + id="text7103" + y="186.91489" + x="918.51251" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="186.91489" + x="918.51251" + id="tspan7105" + sodipodi:role="line">}</tspan></text> + <text + id="text7107" + y="185.39926" + x="993.43127" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + y="185.39926" + x="993.43127" + id="tspan7109" + sodipodi:role="line">|</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot7111" + style="font-size:12.80000019px;line-height:0.01%;font-family:'DejaVu Sans Mono';stroke-width:1.06666672"><flowRegion + id="flowRegion7113" + style="stroke-width:1.06666672"><rect + id="rect7115" + width="12.929953" + height="17.239937" + x="859.84186" + y="230.24284" + style="font-size:21.33333397px;font-family:'DejaVu Sans Mono';stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara7117" + style="font-size:21.33333397px;line-height:1.25;stroke-width:1.06666672">'"l</flowPara></flowRoot> <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="857.28125" + y="264.82532" + id="text7119"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7121" + x="857.28125" + y="264.82532">"</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="20.090919" + y="145.65862" + id="text7123"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7125" + x="20.090919" + y="145.65862">`</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="18.695885" + y="116.14663" + id="text7127"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7129" + x="18.695885" + y="116.14663">~</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="338.80719" + y="208.43478" + id="text7245"><tspan + sodipodi:role="line" + x="338.80719" + y="208.43478" + id="tspan7366" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="338.80719" + y="216.3177" + id="tspan7249" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">reload</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot7342" + style="font-size:12.80000019px;line-height:0.01%;font-family:'DejaVu Sans Mono';stroke-width:1.06666672"><flowRegion + id="flowRegion7344" + style="stroke-width:1.06666672"><rect + id="rect7346" + width="17.453804" + height="36.448208" + x="14.546197" + y="174.75179" + style="font-size:13.86666679px;font-family:'DejaVu Sans Mono';stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara7348" + style="font-size:13.86666679px;line-height:1.25;stroke-width:1.06666672">TabTa</flowPara></flowRoot> <text + id="text7358" + y="199.05951" + x="11.713984" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="199.05951" + x="11.713984" + id="tspan7360" + sodipodi:role="line" + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">Tab</tspan></text> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect10890" + width="338.15115" + height="41.734409" + x="101.31554" + y="20.999462" + ry="3.116843" /> + <text + id="text7404" + y="49.597778" + x="106.28438" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="49.597778" + x="106.28438" + id="tspan7406" + sodipodi:role="line" + style="font-size:23.46666718px;line-height:1;stroke-width:1.06666672">qutebrowser default bindings</tspan></text> + <text + id="text9514" + y="279.05405" + x="578.2074" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="279.05405" + x="578.2074" + sodipodi:role="line" + id="tspan9524" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="286.93695" + x="578.2074" + sodipodi:role="line" + id="tspan4938" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">scroll</tspan><tspan + y="294.61697" + x="578.2074" + sodipodi:role="line" + id="tspan4936" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">down</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="650.2074" + y="279.24451" + id="text9526"><tspan + sodipodi:role="line" + x="650.2074" + y="279.24451" + id="tspan9530" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="650.2074" + y="286.9245" + id="tspan4942" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">scroll</tspan><tspan + id="tspan9532" + sodipodi:role="line" + x="650.2074" + y="294.60449" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">up</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="578.2074" + y="247.81595" + id="text10515"><tspan + sodipodi:role="line" + x="578.2074" + y="247.81595" + id="tspan10517" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="578.2074" + y="255.69887" + id="tspan10519" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">next</tspan><tspan + id="tspan10521" + sodipodi:role="line" + x="578.2074" + y="263.37888" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab</tspan></text> + <text + id="text10523" + y="248.00641" + x="650.2074" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10525" + y="248.00641" + x="650.2074" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + id="tspan10527" + y="255.88933" + x="650.2074" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">previous</tspan><tspan + y="263.56934" + x="650.2074" + sodipodi:role="line" + id="tspan10529" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="501.71222" + y="278.67307" + id="text10547"><tspan + sodipodi:role="line" + x="501.71222" + y="278.67307" + id="tspan10560" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="501.71222" + y="286.55597" + id="tspan10574" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">scroll</tspan><tspan + sodipodi:role="line" + x="501.71222" + y="294.23599" + id="tspan10562" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">left</tspan></text> + <text + id="text10564" + y="278.67307" + x="724.62445" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="278.67307" + x="724.62445" + sodipodi:role="line" + id="tspan10566" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + id="tspan10568" + y="286.55597" + x="724.62445" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">scroll</tspan><tspan + id="tspan10570" + y="294.23599" + x="724.62445" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">right</tspan></text> + <text + id="text10564-6" + y="199.11761" + x="715.61145" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9" + y="199.11761" + x="715.61145" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="207.75761" + x="715.61145" + sodipodi:role="line" + id="tspan4975" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="215.64053" + x="715.61145" + sodipodi:role="line" + id="tspan4977" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">open <tspan + style="fill:#ff0000;stroke-width:1.06666672" + id="tspan3697">(6)</tspan></tspan></text> + <text + id="text10564-3" + y="166.45094" + x="714.94476" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-6" + y="166.45094" + x="714.94476" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="174.33386" + x="714.94476" + sodipodi:role="line" + id="tspan4996" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">open in</tspan><tspan + y="182.01385" + x="714.94476" + sodipodi:role="line" + id="tspan4998" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">new tab<tspan + style="fill:#ff0000;stroke-width:1.06666672" + id="tspan3699" /></tspan><tspan + y="189.69386" + x="714.94476" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan3701"><tspan + style="fill:#ff0000;stroke-width:1.06666672" + id="tspan3703">(6)</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="282.57269" + y="279.80652" + id="text10547-2"><tspan + sodipodi:role="line" + x="282.57269" + y="279.80652" + id="tspan10560-6" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="282.57269" + y="287.68942" + id="tspan10562-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">close</tspan><tspan + sodipodi:role="line" + x="282.57269" + y="295.36945" + id="tspan5970" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="351.18723" + y="272.2189" + id="text10547-2-1"><tspan + sodipodi:role="line" + x="351.18723" + y="272.2189" + id="tspan10560-6-1" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="351.18723" + y="280.10181" + id="tspan5062" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">hint</tspan><tspan + sodipodi:role="line" + x="351.18723" + y="287.78183" + id="tspan5066" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">(label</tspan><tspan + sodipodi:role="line" + x="351.18723" + y="295.46182" + id="tspan6140" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">links) <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan3723">(8)</tspan></tspan></text> + <text + id="text9514-6" + y="201.01891" + x="564.76721" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="201.01891" + x="564.76721" + sodipodi:role="line" + id="tspan9524-9" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="208.90182" + x="564.76721" + sodipodi:role="line" + id="tspan4936-0" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">undo</tspan><tspan + y="216.58182" + x="564.76721" + sodipodi:role="line" + id="tspan5968" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">closing</tspan><tspan + y="224.26183" + x="564.76721" + sodipodi:role="line" + id="tspan5436" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab</tspan></text> + <text + id="text9514-4" + y="205.01891" + x="638.90051" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="205.01891" + x="638.90051" + sodipodi:role="line" + id="tspan4936-5" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="212.90182" + x="638.90051" + sodipodi:role="line" + id="tspan5132" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">insert-</tspan><tspan + y="220.58182" + x="638.90051" + sodipodi:role="line" + id="tspan5136" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mode</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="840.11176" + y="108.99891" + id="text3988-2"><tspan + sodipodi:role="line" + id="tspan3990-4" + x="840.11176" + y="108.99891" + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">_</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="913.50781" + y="110.18444" + id="text3992-3"><tspan + style="font-size:19.20000076px;line-height:1.25;font-family:'DejaVu Sans Mono';fill:#0000ff;stroke-width:1.06666672" + sodipodi:role="line" + id="tspan3994-3" + x="913.50781" + y="110.18444">+</tspan></text> + <text + id="text9514-6-5" + y="129.16545" + x="856.87421" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="129.16545" + x="856.87421" + sodipodi:role="line" + id="tspan9524-9-4" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="137.04837" + x="856.87421" + sodipodi:role="line" + id="tspan4936-0-0" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">zoom</tspan><tspan + y="144.72836" + x="856.87421" + sodipodi:role="line" + id="tspan6188" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">out</tspan></text> + <text + id="text9514-6-1" + y="96" + x="930.13336" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="96" + x="930.13336" + sodipodi:role="line" + id="tspan9524-9-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="103.68" + x="930.13336" + sodipodi:role="line" + id="tspan4936-0-6" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">zoom</tspan><tspan + y="111.36" + x="930.13336" + sodipodi:role="line" + id="tspan5593" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">in</tspan></text> + <text + id="text9514-6-1-2" + y="133.00302" + x="929.7572" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="133.00302" + x="929.7572" + sodipodi:role="line" + id="tspan9524-9-1-6" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">set</tspan><tspan + y="140.68301" + x="929.7572" + sodipodi:role="line" + id="tspan5252" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">zoom</tspan><tspan + y="148.36302" + x="929.7572" + sodipodi:role="line" + id="tspan4936-0-6-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">level</tspan></text> + <rect + ry="4.7797003" + y="14.834106" + x="12.374795" + height="64" + width="63.461262" + id="rect3980-8" + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" /> + <text + id="text7358-4" + y="29.305208" + x="18.544792" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="29.305208" + x="18.544792" + id="tspan7360-3" + sodipodi:role="line" + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672">Esc</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="351.18723" + y="242.80072" + id="text10547-2-1-5"><tspan + sodipodi:role="line" + x="351.18723" + y="242.80072" + id="tspan10560-6-1-1" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="351.18723" + y="250.68364" + id="tspan5062-4" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">hint</tspan><tspan + sodipodi:role="line" + x="351.18723" + y="258.36365" + id="tspan5066-3" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">(new</tspan><tspan + sodipodi:role="line" + x="351.18723" + y="266.04364" + id="tspan6144" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab)</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="501.71222" + y="251.41891" + id="text10547-23"><tspan + sodipodi:role="line" + x="501.71222" + y="251.41891" + id="tspan10560-1" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="501.71222" + y="259.30182" + id="tspan10562-12" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">back <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan3586">(7)</tspan></tspan></text> + <text + id="text10564-6-7" + y="239.34317" + x="724.62445" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9-4" + y="239.34317" + x="724.62445" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="247.98317" + x="724.62445" + sodipodi:role="line" + id="tspan4975-2" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="255.86609" + x="724.62445" + sodipodi:role="line" + id="tspan4977-3" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">forward</tspan><tspan + y="263.54608" + x="724.62445" + sodipodi:role="line" + id="tspan3588" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(7)</tspan></text> + <text + id="text10564-6-7-8" + y="347.8989" + x="814.39789" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9-4-6" + y="347.8989" + x="814.39789" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="355.57889" + x="814.39789" + sodipodi:role="line" + id="tspan4975-2-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="363.25888" + x="814.39789" + sodipodi:role="line" + id="tspan4977-3-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">search</tspan></text> + <text + id="text10564-6-7-8-3" + y="238.93333" + x="800" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9-4-6-2" + y="238.93333" + x="800" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="247.57333" + x="800" + sodipodi:role="line" + id="tspan4975-2-8-1" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="255.45625" + x="800" + sodipodi:role="line" + id="tspan4977-3-1-5" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">cmd</tspan><tspan + y="263.13626" + x="800" + sodipodi:role="line" + id="tspan5435" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mode</tspan></text> + <text + id="text9514-60" + y="353.55225" + x="511.70053" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="353.55225" + x="511.70053" + sodipodi:role="line" + id="tspan9524-92" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="361.23224" + x="511.70053" + sodipodi:role="line" + id="tspan4936-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">search</tspan><tspan + y="368.91223" + x="511.70053" + sodipodi:role="line" + id="tspan5466" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">next</tspan></text> + <text + id="text9514-60-7" + y="319.95224" + x="511.99792" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="319.95224" + x="511.99792" + sodipodi:role="line" + id="tspan9524-92-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="327.63223" + x="511.99792" + sodipodi:role="line" + id="tspan4936-8-5" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">search</tspan><tspan + y="335.31223" + x="511.99792" + sodipodi:role="line" + id="tspan5466-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">prev</tspan></text> + <text + id="text9514-60-8" + y="355.28558" + x="588.79791" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="355.28558" + x="588.79791" + sodipodi:role="line" + id="tspan5524" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">save</tspan><tspan + y="362.96558" + x="588.79791" + sodipodi:role="line" + id="tspan5530" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">quick-</tspan><tspan + y="370.64557" + x="588.79791" + sodipodi:role="line" + id="tspan5532" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mark</tspan></text> + <text + id="text9514-8" + y="204.21892" + x="490.50494" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="204.21892" + x="490.50494" + sodipodi:role="line" + id="tspan9524-5" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="212.10184" + x="490.50494" + sodipodi:role="line" + id="tspan4938-4" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">yank/</tspan><tspan + y="219.78183" + x="490.50494" + sodipodi:role="line" + id="tspan4936-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">copy <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan5713">(1)</tspan></tspan></text> + <text + id="text9514-8-9" + y="206.18428" + x="788.66119" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="206.18428" + x="788.66119" + sodipodi:role="line" + id="tspan9524-5-1" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="214.0672" + x="788.66119" + sodipodi:role="line" + id="tspan6096" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">paste</tspan><tspan + y="221.74719" + x="788.66119" + sodipodi:role="line" + id="tspan5366" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(2)</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5590" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion + id="flowRegion5592" + style="font-family:sans-serif;stroke-width:1.06666672px"><rect + id="rect5594" + width="552" + height="56" + x="518.66669" + y="25.333334" + style="font-size:10.66666698px;font-family:sans-serif;stroke-width:1.13777781px" /></flowRegion><flowPara + id="flowPara5596" + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672px"> </flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5598" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5600" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5602" + width="582.66669" + height="61.333332" + x="501.33334" + y="14.933333" + style="font-size:10.66666698px;font-family:sans-serif;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5604" + style="font-size:13.86666679px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672">Website: https://www.qutebrowser.org/ </flowPara><flowPara + id="flowPara5595" + style="font-size:13.86666679px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672">IRC: #qutebrowser on Freenode</flowPara><flowPara + id="flowPara5597" + style="font-size:13.86666679px;line-height:1.25;font-family:sans-serif;stroke-width:1.06666672">Mailinglist: qutebrowser@lists.qutebrowser.org</flowPara></flowRoot> <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="425.7652" + y="241.39365" + id="text10547-23-6"><tspan + sodipodi:role="line" + x="425.7652" + y="241.39365" + id="tspan10560-1-3" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="425.7652" + y="250.03365" + id="tspan10574-1-0" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672">s<tspan + style="font-size:8.53333378px;stroke-width:1.06666672" + id="tspan5591">croll to</tspan></tspan><tspan + sodipodi:role="line" + x="425.7652" + y="257.91656" + id="tspan5633" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">bottom/</tspan><tspan + sodipodi:role="line" + x="425.7652" + y="265.59656" + id="tspan5461" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">perc.</tspan><tspan + sodipodi:role="line" + x="425.7652" + y="273.27655" + id="tspan10562-12-5" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan></text> + <text + id="text9514-60-7-7" + y="349.15512" + x="437.06458" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="349.15512" + x="437.06458" + sodipodi:role="line" + id="tspan9524-92-1-3" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="356.83511" + x="437.06458" + sodipodi:role="line" + id="tspan4936-8-5-9" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">load</tspan><tspan + y="364.51511" + x="437.06458" + sodipodi:role="line" + id="tspan5466-8-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">quick-</tspan><tspan + y="372.19513" + x="437.06458" + sodipodi:role="line" + id="tspan6184" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mark <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan3727">(8)</tspan></tspan></text> + <text + id="text9514-60-7-7-0" + y="315.02179" + x="436.65286" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="315.02179" + x="436.65286" + sodipodi:role="line" + id="tspan9524-92-1-3-7" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="322.70178" + x="436.65286" + sodipodi:role="line" + id="tspan4936-8-5-9-8" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">load</tspan><tspan + y="330.38177" + x="436.65286" + sodipodi:role="line" + id="tspan5466-8-8-0" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">quickm.</tspan><tspan + y="338.0618" + x="436.65286" + sodipodi:role="line" + id="tspan6186" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">(tab)</tspan><tspan + y="345.74179" + x="436.65286" + sodipodi:role="line" + id="tspan5689" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695" + width="344" + height="173.33333" + x="18.666666" + y="437.55823" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705">(1)</flowSpan> copying/yanking:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5701">yy - copy/yank URL</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5703">yY - copy URL to selection</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5707">yt - copy title to clipboard</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5709">yT - copy title to selection</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5711"> </flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-0" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + transform="translate(0,-10)"><flowRegion + id="flowRegion5693-7" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-0" + width="344" + height="173.33333" + x="19.42783" + y="520.07886" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-9" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-5">(2)</flowSpan> pasting:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5701-9">pp - open URL from clipboard</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5703-8">pP - open URL from selection</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5707-0">Pp - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6101">pp</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5709-3">PP - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6103">pP</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5763">wp - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6105">pp</flowSpan>, in new window</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5765">wP - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6107">pP</flowSpan>, in new window</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5711-1"> </flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-0-9" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-7-0" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-0-5" + width="344" + height="173.33333" + x="201.3311" + y="437.55823" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara5701-9-6"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-5-8">(3)</flowSpan> navigation:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5829">[[ - click "previous"-link on page</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5703-8-2">]] - click "next"-link on page </flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5707-0-7">{{ - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6111">[[</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5709-3-1">}} - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6109">]]</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5835"><Ctrl-A> - increment no. in URL</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5837"><Ctrl-X> - decrement no. in URL</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5841"> </flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5839" /><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5711-1-8" /></flowRoot> <text + id="text9514-8-9-0" + y="215.27605" + x="867.20831" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="215.27605" + x="867.20831" + sodipodi:role="line" + id="tspan4936-1-1-9" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(3)</tspan></text> + <text + id="text9514-8-9-0-3" + y="184.34271" + x="867.20831" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="184.34271" + x="867.20831" + sodipodi:role="line" + id="tspan4936-1-1-9-7" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(3)</tspan></text> + <text + id="text9514-8-9-0-2" + y="215.27605" + x="947.20831" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="215.27605" + x="947.20831" + sodipodi:role="line" + id="tspan4936-1-1-9-5" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(3)</tspan></text> + <text + id="text9514-8-9-0-6" + y="184.34271" + x="947.20831" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="184.34271" + x="947.20831" + sodipodi:role="line" + id="tspan4936-1-1-9-2" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(3)</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691-4" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9" + width="344" + height="173.33333" + x="199.82608" + y="546.74548" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-0">(4)</flowSpan> scrolling:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5701-8"><Ctrl-F> - page down</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5707-9"><Ctrl-B> - page up</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5962"><Ctrl-D> - half page down</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5711-7"><Ctrl-U> - half page up</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9" + style="font-style:normal;font-weight:bold;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8" + width="344" + height="173.33333" + x="403.53775" + y="437.55823" + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara4171">in prompt mode:</flowPara><flowPara + style="font-weight:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara4175">Enter - accept prompt</flowPara><flowPara + style="font-weight:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara4177">y - answer yes to prompt</flowPara><flowPara + style="font-weight:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara4179">n - answer no to prompt</flowPara><flowPara + style="font-weight:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara6016"> </flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-0-9-9" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-7-0-2" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-0-5-6" + width="344" + height="173.33333" + x="403.54816" + y="496.42233" + style="font-style:normal;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + style="font-style:normal;font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara5701-9-6-8"><flowSpan + style="font-style:normal;font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-5-8-3">(6)</flowSpan> opening:</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5829-1">go - edit & open current URL</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5703-8-2-8">gO - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6132">go</flowSpan>, in new tab</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara3581">xO - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan6134">go</flowSpan>, in bg. tab</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5709-3-1-6">xo - open in background tab</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5841-1">wo - open in new window</flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5839-8"> </flowPara><flowPara + style="font-style:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:Sans;fill:#000000;stroke-width:1.06666672" + id="flowPara5711-1-8-7" /></flowRoot> <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="425.7652" + y="272.26849" + id="text10547-23-6-1"><tspan + sodipodi:role="line" + x="425.7652" + y="272.26849" + id="tspan10560-1-3-8" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="425.7652" + y="280.1514" + id="tspan10574-1-0-7" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">gg: <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan3812">(10)</tspan></tspan><tspan + sodipodi:role="line" + x="425.7652" + y="287.83142" + id="tspan6176" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">scroll</tspan><tspan + sodipodi:role="line" + x="425.7652" + y="295.51141" + id="tspan5633-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">to top</tspan><tspan + sodipodi:role="line" + x="425.7652" + y="303.19141" + id="tspan10562-12-5-9" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="26.836851" + y="44.101078" + id="text10547-2-5"><tspan + sodipodi:role="line" + x="26.836851" + y="44.101078" + id="tspan10560-6-4" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="26.836851" + y="51.983994" + id="tspan5970-5" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">normal</tspan><tspan + sodipodi:role="line" + x="26.836851" + y="59.663994" + id="tspan6219" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mode</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1-7" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7" + width="344" + height="173.33333" + x="404.05209" + y="582.96967" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3-7-6" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-0-4-7">(7)</flowSpan> back/forward:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara5701-8-5-8"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5463">th</flowSpan> - back (in new tab)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6016-5"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5465">wh</flowSpan> - back (in new window)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3628"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5467">tl</flowSpan> - forward (in new tab)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3630"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5469">wl</flowSpan> - forward (in new window)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3626"> </flowPara></flowRoot> <text + id="text10564-6-7-8-3-5" + y="270.24557" + x="800" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9-4-6-2-6" + y="270.24557" + x="800" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="278.88559" + x="800" + sodipodi:role="line" + id="tspan4975-2-8-1-6" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="286.76849" + x="800" + sodipodi:role="line" + id="tspan4977-3-1-5-7" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">ext.</tspan><tspan + y="294.44849" + x="800" + sodipodi:role="line" + id="tspan5435-7" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">hints <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan3662">(9)</tspan></tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3-6" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1-7-3" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7-7" + width="344" + height="173.33333" + x="579.90106" + y="437.54779" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3-7-6-8" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672">(8)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3626-7">prefix with w - in new window</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3725"> </flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3-1" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1-7-1" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7-5" + width="344" + height="173.33333" + x="579.36774" + y="489.80301" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3-7-6-1" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-0-4-7-6">(9)</flowSpan> extended hint mode:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3626-73">;b - open hint in background tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4051">;f - open hint in foreground tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3788">;h - hover over hint (mouse-over)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3790">;i - hint images</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3792">;I - hint images in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6096">;t - hint inputs</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3794">;o - put hinted URL in cmd. line</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3796">;O - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan3798">;o</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3800">;y - yank hinted URL to clipboard</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3802">;Y - yank hinted URL to selection</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3804">;r - rapid hinting</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3806">;R - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan3810">;r</flowSpan>, in new window</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3808">;d - download hinted URL</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3-6-1" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1-7-3-5" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7-7-0" + width="165.23355" + height="256.78436" + x="772.63074" + y="437.55823" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3-7-6-8-2" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan3852">(10)</flowSpan> misc. commands:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3725-0">gt - switch tabs by name</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4052"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan4054">gm/gl/gr</flowSpan> - move tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4056"> (to index/left/right)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3858">gC - clone tab </flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3860">gf - view page source</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3915">gu - navigate up in URL</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3917">gU - like <flowSpan + style="font-style:italic;font-family:sans-serif;-inkscape-font-specification:'Sans Italic';stroke-width:1.06666672" + id="flowSpan3923">gu</flowSpan>, in new tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3921">sf - save config</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3925">ss - set setting</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3927">sl - set temp. setting</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3929">sk - bind key</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3931">Ss - show settings</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3937">wi - open web inspector</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4167">gd - download page</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4169"><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5438">ad</flowSpan> - cancel download</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4077">co - close other tabs</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4081">cd - clear downloads</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3933"> </flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3935" /><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4079" /></flowRoot> <text + id="text9514-8-9-0-8" + y="217.88069" + x="201.04399" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="217.88069" + x="201.04399" + sodipodi:role="line" + id="tspan4936-1-1-9-59" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(10)</tspan></text> + <text + id="text9514-8-9-0-8-4" + y="257.17371" + x="208.27393" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="257.17371" + x="208.27393" + sodipodi:role="line" + id="tspan4936-1-1-9-59-8" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(10)</tspan></text> + <text + id="text9514-8-9-0-8-7" + y="291.00937" + x="208.27393" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="291.00937" + x="208.27393" + sodipodi:role="line" + id="tspan4936-1-1-9-59-5" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(10)</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3-6-1-2" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-9-1-7-3-5-2" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7-7-0-9" + width="350.20157" + height="196.89922" + x="915.77972" + y="437.55823" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + id="flowPara5697-3-7-6-8-2-0" + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan3852-6">(11)</flowSpan> modifier commands:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3933-6"><Alt-num> - select tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4128"><Ctrl-Tab> - select prev. tab</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4130"><Ctrl-V> - passthrough mode</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4132"><Ctrl-Q> - quit</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4136"><Ctrl-H> - home</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4138"><Ctrl-S> - stop loading</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4140"><Ctrl-Alt-P> - print</flowPara><flowPara + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara4142">in insert mode:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4144"><Ctrl-E> - open editor</flowPara><flowPara + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara4146">in command mode:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara4148"><Ctrl-P> - prev. history item</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3935-9"><Ctrl-N> - next history item</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6189"><Ctrl-D> - delete current item</flowPara></flowRoot> <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3764-9" + width="64" + height="49.059277" + x="179.54729" + y="386.13333" + ry="3.6638854" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3764-9-3" + width="64" + height="49.059277" + x="51.100777" + y="386.13333" + ry="3.6638854" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3764-9-1" + width="64" + height="49.059277" + x="654.73492" + y="386.13333" + ry="3.6638854" /> + <rect + style="font-size:18px;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1.06666672" + id="rect3764-9-7" + width="64" + height="49.059277" + x="779.16278" + y="386.13333" + ry="3.6638854" /> + <g + id="g4049" + transform="translate(1.4643921,-2.0969564)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="66.420761" + y="411.5079" + id="text7358-8"><tspan + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7360-1" + x="66.420761" + y="411.5079">Ctrl</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="71.803055" + y="426.94736" + id="text9514-8-9-0-8-4-0"><tspan + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672" + id="tspan4936-1-1-9-59-8-3" + sodipodi:role="line" + x="71.803055" + y="426.94736">(11)</tspan></text> + </g> + <g + id="g4055" + transform="translate(1.7364258,-12.763623)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="198.77023" + y="422.17459" + id="text7358-8-3-8-1"><tspan + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7360-1-7-0-2" + x="198.77023" + y="422.17459">Alt</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="199.97752" + y="437.61404" + id="text9514-8-9-0-8-4-0-8"><tspan + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672" + id="tspan4936-1-1-9-59-8-3-8" + sodipodi:role="line" + x="199.97752" + y="437.61404">(11)</tspan></text> + </g> + <g + id="g4065" + transform="translate(6.0870443,-12.763623)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="669.60724" + y="422.17459" + id="text7358-8-3-8"><tspan + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7360-1-7-0" + x="669.60724" + y="422.17459">Alt</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="670.81451" + y="437.61404" + id="text9514-8-9-0-8-4-0-7"><tspan + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672" + id="tspan4936-1-1-9-59-8-3-82" + sodipodi:role="line" + x="670.81451" + y="437.61404">(11)</tspan></text> + </g> + <g + id="g4071" + transform="translate(1.0914714,-12.763623)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'DejaVu Sans Mono';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="794.85565" + y="422.17459" + id="text7358-8-3"><tspan + style="font-size:12.80000019px;line-height:1.25;font-family:'DejaVu Sans Mono';stroke-width:1.06666672" + sodipodi:role="line" + id="tspan7360-1-7" + x="794.85565" + y="422.17459">Ctrl</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="800.23798" + y="437.61404" + id="text9514-8-9-0-8-4-0-3"><tspan + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672" + id="tspan4936-1-1-9-59-8-3-4" + sodipodi:role="line" + x="800.23798" + y="437.61404">(11)</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="416.72626" + y="171.09129" + id="text7245-1"><tspan + sodipodi:role="line" + x="416.72626" + y="171.09129" + id="tspan7366-3" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="416.72626" + y="178.97421" + id="tspan7249-4" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">select</tspan><tspan + sodipodi:role="line" + x="416.72626" + y="186.65421" + id="tspan5293" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">tab</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="292.49472" + y="366.05417" + id="text10547-23-6-7"><tspan + sodipodi:role="line" + x="292.49472" + y="366.05417" + id="tspan4052" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">(10)</tspan></text> + <text + id="text10564-6-7-8-0" + y="314.29889" + x="814.39789" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10570-9-4-6-1" + y="314.29889" + x="814.39789" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="321.97888" + x="814.39789" + sodipodi:role="line" + id="tspan4975-2-8-7" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="329.65887" + x="814.39789" + sodipodi:role="line" + id="tspan4977-3-1-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">search</tspan><tspan + y="337.3389" + x="814.39789" + sodipodi:role="line" + id="tspan5364" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">backw.</tspan></text> + <text + id="text9514-8-9-9" + y="171.64418" + x="788.19946" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="171.64418" + x="788.19946" + sodipodi:role="line" + id="tspan9524-5-1-5" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="179.5271" + x="788.19946" + sodipodi:role="line" + id="tspan6096-4" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">paste</tspan><tspan + y="187.20709" + x="788.19946" + sodipodi:role="line" + id="tspan5366-3" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(2)</tspan></text> + <text + id="text9514-8-0" + y="171.09129" + x="490.50494" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="171.09129" + x="490.50494" + sodipodi:role="line" + id="tspan9524-5-8" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + y="178.97421" + x="490.50494" + sodipodi:role="line" + id="tspan4938-4-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">yank/</tspan><tspan + y="186.65421" + x="490.50494" + sodipodi:role="line" + id="tspan4936-1-1" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">copy <tspan + style="font-size:8.53333378px;fill:#ff0000;stroke-width:1.06666672" + id="tspan5713-7">(1)</tspan></tspan></text> + <text + id="text9514-8-9-0-8-7-7" + y="291.00937" + x="133.7375" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="291.00937" + x="133.7375" + sodipodi:role="line" + id="tspan4936-1-1-9-59-5-6" + style="font-size:8.53333378px;line-height:0.89999998;fill:#ff0000;stroke-width:1.06666672">(10)</tspan></text> + <flowRoot + xml:space="preserve" + id="flowRoot5691-4-9-3-6-6" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + transform="translate(0,10)"><flowRegion + id="flowRegion5693-9-1-7-3-8" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-9-8-7-7-6" + width="344" + height="173.33333" + x="913.12598" + y="622.15717" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara3626-7-0"><flowSpan + id="flowSpan5520" + style="font-weight:bold;font-size:10.66666698px;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#0000ff;stroke-width:1.06666672">blue keys </flowSpan><flowSpan + style="font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowSpan5528">can be</flowSpan></flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#0000ff;stroke-width:1.06666672" + id="flowPara3725-9">prefixed by a count</flowPara></flowRoot> <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="339.1572" + y="166.24342" + id="text7245-1-7"><tspan + sodipodi:role="line" + x="339.1572" + y="166.24342" + id="tspan7366-3-3" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="339.1572" + y="174.12634" + id="tspan5293-5" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">reload </tspan><tspan + sodipodi:role="line" + x="339.1572" + y="181.80634" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan3716">(bypass </tspan><tspan + sodipodi:role="line" + x="339.1572" + y="189.48634" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan3719">cache)</tspan></text> + <text + id="text9514-60-7-7-0-8" + y="360.58533" + x="365.25357" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="360.58533" + x="365.25357" + sodipodi:role="line" + id="tspan5689-6" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">visual</tspan><tspan + y="368.26532" + x="365.25357" + sodipodi:role="line" + id="tspan4112" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mode</tspan></text> + <text + id="text10564-5" + y="274.2934" + x="873.4303" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="274.2934" + x="873.4303" + sodipodi:role="line" + id="tspan10566-6" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + id="tspan10570-91" + y="282.1763" + x="873.4303" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">jump to</tspan><tspan + y="289.85632" + x="873.4303" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6066">scroll</tspan><tspan + y="297.53632" + x="873.4303" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6068">mark</tspan></text> + <text + id="text10564-2" + y="362.50635" + x="731.82947" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + id="tspan10568-0" + y="362.50635" + x="731.82947" + sodipodi:role="line" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672">repeat</tspan><tspan + id="tspan10570-93" + y="370.38925" + x="731.82947" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">cmd</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="183.06667" + y="97.639633" + id="text7245-1-6"><tspan + sodipodi:role="line" + x="183.06667" + y="97.639633" + id="tspan7366-3-0" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="183.06667" + y="105.52255" + id="tspan7249-4-6" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">run</tspan><tspan + sodipodi:role="line" + x="183.06667" + y="113.20255" + id="tspan5293-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">macro</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="117.44301" + y="203.05061" + id="text7245-1-61"><tspan + sodipodi:role="line" + x="117.44301" + y="203.05061" + id="tspan7366-3-8" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="117.44301" + y="210.93353" + id="tspan5293-9" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">record</tspan><tspan + sodipodi:role="line" + x="117.44301" + y="218.61353" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6136">macro</tspan></text> + <text + id="text10564-5-2" + y="125.17836" + x="37.344757" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="125.17836" + x="37.344757" + sodipodi:role="line" + id="tspan10566-6-0" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + id="tspan10570-91-2" + y="133.06128" + x="37.344757" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">set</tspan><tspan + y="140.74127" + x="37.344757" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6066-3">scroll</tspan><tspan + y="148.42128" + x="37.344757" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6068-7">mark</tspan></text> + <text + id="text9514-60-8-5" + y="323.89648" + x="590.26257" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="323.89648" + x="590.26257" + sodipodi:role="line" + id="tspan5524-9" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">save</tspan><tspan + y="331.57648" + x="590.26257" + sodipodi:role="line" + id="tspan5530-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">book-</tspan><tspan + y="339.25647" + x="590.26257" + sodipodi:role="line" + id="tspan5532-2" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">mark</tspan></text> + <text + id="text10564-5-2-8" + y="200.40416" + x="21.280243" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + xml:space="preserve"><tspan + y="200.40416" + x="21.280243" + sodipodi:role="line" + id="tspan10566-6-0-9" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + id="tspan10570-91-2-7" + y="208.28708" + x="21.280243" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">cycle</tspan><tspan + y="215.96707" + x="21.280243" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6068-7-6">completion</tspan><tspan + y="223.64708" + x="21.280243" + sodipodi:role="line" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6220">items</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.80000019px;line-height:0%;font-family:TlwgTypewriter;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672" + x="417.29486" + y="205.18887" + id="text7245-1-3"><tspan + sodipodi:role="line" + x="417.29486" + y="205.18887" + id="tspan7366-3-6" + style="font-size:9.60000038px;line-height:0.89999998;stroke-width:1.06666672"> </tspan><tspan + sodipodi:role="line" + x="417.29486" + y="213.07179" + id="tspan5293-53" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672">toggle</tspan><tspan + sodipodi:role="line" + x="417.29486" + y="220.75179" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672;fill:#ff0000" + id="tspan6091">(12)</tspan><tspan + sodipodi:role="line" + x="417.29486" + y="225.70012" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6087" /><tspan + sodipodi:role="line" + x="417.29486" + y="225.70012" + style="font-size:8.53333378px;line-height:0.89999998;stroke-width:1.06666672" + id="tspan6089" /></text> + <flowRoot + transform="translate(-1.2953814,90.2721)" + xml:space="preserve" + id="flowRoot5691-0-5" + style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion + id="flowRegion5693-7-6" + style="font-family:sans-serif;stroke-width:1.06666672"><rect + id="rect5695-0-2" + width="344" + height="173.33333" + x="19.42783" + y="520.07886" + style="font-family:sans-serif;fill:#000000;stroke-width:1.13777781" /></flowRegion><flowPara + style="font-weight:bold;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#000000;stroke-width:1.06666672" + id="flowPara5701-9-2"><flowSpan + style="font-weight:bold;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#ff0000;stroke-width:1.06666672" + id="flowSpan5705-5-1">(12)</flowSpan> toggling settings:</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6196">tsh - toggle scripts for the current host (temporarily)</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6200">tSh - like <flowSpan + style="font-style:italic" + id="flowSpan6202">tsh</flowSpan>, but permanently</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6206">tsH/tsu - like <flowSpan + style="font-style:italic" + id="flowSpan6210">tsh</flowSpan>, but including subdomains / with exact URL</flowPara><flowPara + style="font-size:10.66666698px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:1.06666672" + id="flowPara6208">tph - toggle plugins</flowPara></flowRoot> </g> +</svg> diff --git a/.config/qutebrowser/misc/qutebrowser.appdata.xml b/.config/qutebrowser/misc/qutebrowser.appdata.xml new file mode 100644 index 0000000..bdab55f --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.appdata.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright 2017 suve <veg@svgames.pl> --> +<component type="desktop"> + <id>org.qutebrowser.qutebrowser</id> + <metadata_license>CC-BY-SA-3.0</metadata_license> + <project_license>GPL-3.0</project_license> + <name>qutebrowser</name> + <summary>A keyboard-driven web browser</summary> + <description> + <p> + qutebrowser is a keyboard-focused browser with a minimal GUI. + It was inspired by other browsers/addons like dwb and Vimperator/Pentadactyl, + and is based on Python and PyQt5. + </p> + </description> + <categories> + <category>Network</category> + <category>WebBrowser</category> + </categories> + <provides> + <binary>qutebrowser</binary> + </provides> + <launchable type="desktop-id">qutebrowser.desktop</launchable> + <screenshots> + <screenshot type="default"> + <image>https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/main.png</image> + </screenshot> + <screenshot> + <image>https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/downloads.png</image> + </screenshot> + <screenshot> + <image>https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/completion.png</image> + </screenshot> + <screenshot> + <image>https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/hints.png</image> + </screenshot> + </screenshots> + <url type="homepage">https://www.qutebrowser.org</url> + <url type="faq">https://qutebrowser.org/doc/faq.html</url> + <url type="help">https://qutebrowser.org/doc/help/</url> + <url type="bugtracker">https://github.com/qutebrowser/qutebrowser/issues/</url> + <url type="donation">https://github.com/qutebrowser/qutebrowser#donating</url> + <releases> + <release version="1.3.0" date="2018-05-04"/> + <release version="1.2.1" date="2018-03-14"/> + <release version="1.2.0" date="2018-03-09"/> + </releases> +</component> diff --git a/.config/qutebrowser/misc/qutebrowser.desktop b/.config/qutebrowser/misc/qutebrowser.desktop new file mode 100644 index 0000000..5243b0c --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=qutebrowser +GenericName=Web Browser +Comment=A keyboard-driven, vim-like browser based on PyQt5 +Icon=qutebrowser +Type=Application +Categories=Network;WebBrowser; +Exec=qutebrowser %u +Terminal=false +StartupNotify=false +MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/qute; +Keywords=Browser diff --git a/.config/qutebrowser/misc/qutebrowser.nsi b/.config/qutebrowser/misc/qutebrowser.nsi new file mode 100644 index 0000000..76f459a --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.nsi @@ -0,0 +1,80 @@ +Name "qutebrowser"
+
+Unicode true
+RequestExecutionLevel admin
+SetCompressor /solid lzma
+
+!ifdef X64
+ OutFile "..\dist\qutebrowser-${VERSION}-amd64.exe"
+ InstallDir "$ProgramFiles64\qutebrowser"
+!else
+ OutFile "..\dist\qutebrowser-${VERSION}-win32.exe"
+ InstallDir "$ProgramFiles\qutebrowser"
+!endif
+
+;Default installation folder
+
+!include "MUI2.nsh"
+;!include "MultiUser.nsh"
+
+!define MUI_ABORTWARNING
+;!define MULTIUSER_MUI
+;!define MULTIUSER_INSTALLMODE_COMMANDLINE
+!define MUI_ICON "../icons/qutebrowser.ico"
+!define MUI_UNICON "../icons/qutebrowser.ico"
+
+!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+!insertmacro MUI_LANGUAGE "English"
+
+; depends on admin status
+;SetShellVarContext current
+
+
+Section "Install"
+
+ ; Uninstall old versions
+ ExecWait 'MsiExec.exe /quiet /qn /norestart /X{633F41F9-FE9B-42D1-9CC4-718CBD01EE11}'
+ ExecWait 'MsiExec.exe /quiet /qn /norestart /X{9331D947-AC86-4542-A755-A833429C6E69}'
+ IfFileExists "$INSTDIR\uninst.exe" 0 +2
+ ExecWait "$INSTDIR\uninst.exe /S _?=$INSTDIR"
+ CreateDirectory "$INSTDIR"
+
+ SetOutPath "$INSTDIR"
+
+ !ifdef X64
+ file /r "..\dist\qutebrowser-${VERSION}-x64\*.*"
+ !else
+ file /r "..\dist\qutebrowser-${VERSION}-x86\*.*"
+ !endif
+
+ SetShellVarContext all
+ CreateShortCut "$SMPROGRAMS\qutebrowser.lnk" "$INSTDIR\qutebrowser.exe"
+
+ ;Create uninstaller
+ WriteUninstaller "$INSTDIR\uninst.exe"
+
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "DisplayName" "qutebrowser"
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "UninstallString" '"$INSTDIR\uninst.exe"'
+ WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser" "QuietUninstallString" '"$INSTDIR\uninst.exe" /S'
+
+SectionEnd
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+ SetShellVarContext all
+ Delete "$SMPROGRAMS\qutebrowser.lnk"
+
+ RMDir /r "$INSTDIR\*.*"
+ RMDir "$INSTDIR"
+
+ DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\qutebrowser"
+
+SectionEnd
diff --git a/.config/qutebrowser/misc/qutebrowser.rcc b/.config/qutebrowser/misc/qutebrowser.rcc new file mode 100644 index 0000000..2f73b37 --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.rcc @@ -0,0 +1,13 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>icons/qutebrowser-16x16.png</file> + <file>icons/qutebrowser-24x24.png</file> + <file>icons/qutebrowser-32x32.png</file> + <file>icons/qutebrowser-48x48.png</file> + <file>icons/qutebrowser-64x64.png</file> + <file>icons/qutebrowser-96x96.png</file> + <file>icons/qutebrowser-128x128.png</file> + <file>icons/qutebrowser-256x256.png</file> + <file>icons/qutebrowser-512x512.png</file> +</qresource> +</RCC> diff --git a/.config/qutebrowser/misc/qutebrowser.spec b/.config/qutebrowser/misc/qutebrowser.spec new file mode 100644 index 0000000..c886fb0 --- /dev/null +++ b/.config/qutebrowser/misc/qutebrowser.spec @@ -0,0 +1,76 @@ +# -*- mode: python -*- + +import sys +import os + +sys.path.insert(0, os.getcwd()) +from scripts import setupcommon + +block_cipher = None + + +def get_data_files(): + data_files = [ + ('../qutebrowser/html', 'html'), + ('../qutebrowser/img', 'img'), + ('../qutebrowser/javascript', 'javascript'), + ('../qutebrowser/html/doc', 'html/doc'), + ('../qutebrowser/git-commit-id', '.'), + ('../qutebrowser/config/configdata.yml', 'config'), + ] + + # if os.path.exists(os.path.join('qutebrowser', '3rdparty', 'pdfjs')): + # data_files.append(('../qutebrowser/3rdparty/pdfjs', '3rdparty/pdfjs')) + # else: + # print("Warning: excluding pdfjs as it's not present!") + + return data_files + + +setupcommon.write_git_file() + + +if os.name == 'nt': + icon = 'icons/qutebrowser.ico' +elif sys.platform == 'darwin': + icon = 'icons/qutebrowser.icns' +else: + icon = None + + +a = Analysis(['../qutebrowser/__main__.py'], + pathex=['misc'], + binaries=None, + datas=get_data_files(), + hiddenimports=['PyQt5.QtOpenGL', 'PyQt5._QOpenGLFunctions_2_0'], + hookspath=[], + runtime_hooks=[], + excludes=['tkinter'], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher) +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, + a.scripts, + exclude_binaries=True, + name='qutebrowser', + icon=icon, + debug=False, + strip=False, + upx=False, + console=False, + version='misc/file_version_info.txt') +coll = COLLECT(exe, + a.binaries, + a.zipfiles, + a.datas, + strip=False, + upx=False, + name='qutebrowser') + +app = BUNDLE(coll, + name='qutebrowser.app', + icon=icon, + # https://github.com/pyinstaller/pyinstaller/blob/b78bfe530cdc2904f65ce098bdf2de08c9037abb/PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py#L24 + bundle_identifier='org.qt-project.Qt.QtWebEngineCore') diff --git a/.config/qutebrowser/misc/requirements/README.md b/.config/qutebrowser/misc/requirements/README.md new file mode 100644 index 0000000..6ae9862 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/README.md @@ -0,0 +1,20 @@ +This directory contains various `requirements` files which are used by `tox` to +have reproducible tests with pinned versions. + +The files are generated based on unpinned requirements in `*.txt-raw` files. + +Those files can also contain some special commands: + +- Add an additional comment to a line: `#@ comment: <package> <comment here>` +- Filter a line for requirements.io: `#@ filter: <package> <filter>` +- Don't include a package in the output: `#@ ignore: <package>` (or multiple packages) +- Replace a part of a frozen package specification with another: `#@ replace <regex> <replacement>` + +Some examples: + +``` +#@ comment: mypkg blah blub +#@ filter: mypkg != 1.0.0 +#@ ignore: mypkg, otherpkg +#@ replace: foo bar +``` diff --git a/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt new file mode 100644 index 0000000..c11a3f7 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt @@ -0,0 +1,3 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +check-manifest==0.37 diff --git a/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw new file mode 100644 index 0000000..dcc0efe --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-check-manifest.txt-raw @@ -0,0 +1 @@ +check-manifest diff --git a/.config/qutebrowser/misc/requirements/requirements-codecov.txt b/.config/qutebrowser/misc/requirements/requirements-codecov.txt new file mode 100644 index 0000000..9fed7b3 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-codecov.txt @@ -0,0 +1,9 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +certifi==2018.4.16 +chardet==3.0.4 +codecov==2.0.15 +coverage==4.5.1 +idna==2.7 +requests==2.19.1 +urllib3==1.23 diff --git a/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw b/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw new file mode 100644 index 0000000..15f1c72 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-codecov.txt-raw @@ -0,0 +1 @@ +codecov diff --git a/.config/qutebrowser/misc/requirements/requirements-flake8.txt b/.config/qutebrowser/misc/requirements/requirements-flake8.txt new file mode 100644 index 0000000..b4f0045 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-flake8.txt @@ -0,0 +1,27 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +attrs==18.1.0 +flake8==3.5.0 +flake8-bugbear==18.2.0 +flake8-builtins==1.4.1 # rq.filter: != 1.4.0 +flake8-comprehensions==1.4.1 +flake8-copyright==0.2.0 +flake8-debugger==3.1.0 +flake8-deprecated==1.3 +flake8-docstrings==1.3.0 +flake8-future-import==0.4.5 +flake8-mock==0.3 +flake8-per-file-ignores==0.6 +flake8-polyfill==1.0.2 +flake8-string-format==0.2.3 +flake8-tidy-imports==1.1.0 +flake8-tuple==0.2.13 +mccabe==0.6.1 +pathmatch==0.2.1 +pep8-naming==0.7.0 +pycodestyle==2.3.1 # rq.filter: < 2.4.0 +pydocstyle==2.1.1 +pyflakes==2.0.0 +six==1.11.0 +snowballstemmer==1.2.1 +typing==3.6.4 diff --git a/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw b/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw new file mode 100644 index 0000000..7ccbbce --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-flake8.txt-raw @@ -0,0 +1,23 @@ +flake8 +flake8-bugbear +flake8-builtins!=1.4.0 +flake8-comprehensions +flake8-copyright +flake8-debugger +flake8-deprecated +flake8-docstrings +flake8-future-import +flake8-mock +flake8-per-file-ignores +flake8-string-format +flake8-tidy-imports +flake8-tuple +pep8-naming +pydocstyle +pyflakes + +# https://github.com/PyCQA/pycodestyle/issues/741 +#@ filter: pycodestyle < 2.4.0 + +# https://github.com/gforcada/flake8-builtins/issues/36 +#@ filter: flake8-builtins != 1.4.0 diff --git a/.config/qutebrowser/misc/requirements/requirements-pip.txt b/.config/qutebrowser/misc/requirements/requirements-pip.txt new file mode 100644 index 0000000..bf003fc --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pip.txt @@ -0,0 +1,8 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +appdirs==1.4.3 +packaging==17.1 +pyparsing==2.2.0 +setuptools==40.0.0 +six==1.11.0 +wheel==0.31.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt new file mode 100644 index 0000000..e916393 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt @@ -0,0 +1,7 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +altgraph==0.15 +future==0.16.0 +macholib==1.9 +pefile==2017.11.5 +PyInstaller==3.3.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw new file mode 100644 index 0000000..c313980 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyinstaller.txt-raw @@ -0,0 +1 @@ +PyInstaller diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt new file mode 100644 index 0000000..2df0736 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt @@ -0,0 +1,19 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +-e git+https://github.com/PyCQA/astroid.git#egg=astroid +certifi==2018.4.16 +chardet==3.0.4 +github3.py==1.1.0 +idna==2.7 +isort==4.3.4 +lazy-object-proxy==1.3.1 +mccabe==0.6.1 +-e git+https://github.com/PyCQA/pylint.git#egg=pylint +python-dateutil==2.7.3 +./scripts/dev/pylint_checkers +requests==2.19.1 +six==1.11.0 +typed-ast==1.1.0 +uritemplate==3.0.0 +urllib3==1.23 +wrapt==1.10.11 diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw new file mode 100644 index 0000000..405b0ab --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint-master.txt-raw @@ -0,0 +1,11 @@ +-e git+https://github.com/PyCQA/astroid.git#egg=astroid +-e git+https://github.com/PyCQA/pylint.git#egg=pylint +./scripts/dev/pylint_checkers +requests +github3.py + +# remove @commit-id for scm installs +#@ replace: @.*# # + +# fix qute-pylint location +#@ replace: qute-pylint==.* ./scripts/dev/pylint_checkers diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint.txt b/.config/qutebrowser/misc/requirements/requirements-pylint.txt new file mode 100644 index 0000000..e78dfe2 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint.txt @@ -0,0 +1,19 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +astroid==2.0.1 +certifi==2018.4.16 +chardet==3.0.4 +github3.py==1.1.0 +idna==2.7 +isort==4.3.4 +lazy-object-proxy==1.3.1 +mccabe==0.6.1 +pylint==2.0.1 +python-dateutil==2.7.3 +./scripts/dev/pylint_checkers +requests==2.19.1 +six==1.11.0 +typed-ast==1.1.0 +uritemplate==3.0.0 +urllib3==1.23 +wrapt==1.10.11 diff --git a/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw new file mode 100644 index 0000000..37252ee --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pylint.txt-raw @@ -0,0 +1,7 @@ +pylint +./scripts/dev/pylint_checkers +requests +github3.py + +# fix qute-pylint location +#@ replace: qute-pylint==.* ./scripts/dev/pylint_checkers diff --git a/.config/qutebrowser/misc/requirements/requirements-pyqt.txt b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt new file mode 100644 index 0000000..2878a55 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt @@ -0,0 +1,4 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +PyQt5==5.11.2 +PyQt5-sip==4.19.12 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw new file mode 100644 index 0000000..37a69c4 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyqt.txt-raw @@ -0,0 +1 @@ +PyQt5
\ No newline at end of file diff --git a/.config/qutebrowser/misc/requirements/requirements-pyroma.txt b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt new file mode 100644 index 0000000..6afd097 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt @@ -0,0 +1,4 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +docutils==0.14 +pyroma==2.3.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw new file mode 100644 index 0000000..5ddfb65 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-pyroma.txt-raw @@ -0,0 +1 @@ +pyroma diff --git a/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw b/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw new file mode 100644 index 0000000..c66c65b --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-qutebrowser.txt-raw @@ -0,0 +1,7 @@ +Jinja2 +Pygments +pyPEG2 +PyYAML +colorama +cssutils +attrs diff --git a/.config/qutebrowser/misc/requirements/requirements-tests-git.txt b/.config/qutebrowser/misc/requirements/requirements-tests-git.txt new file mode 100644 index 0000000..ce00cd3 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests-git.txt @@ -0,0 +1,38 @@ +bzr+lp:beautifulsoup +git+https://github.com/cherrypy/cheroot.git +hg+https://bitbucket.org/ned/coveragepy +git+https://github.com/micheles/decorator.git +git+https://github.com/pallets/flask.git +git+https://github.com/miracle2k/python-glob2.git +git+https://github.com/HypothesisWorks/hypothesis-python.git +git+https://github.com/pallets/itsdangerous.git +git+https://bitbucket.org/zzzeek/mako.git +git+https://github.com/r1chardj0n3s/parse.git +git+https://github.com/jenisys/parse_type.git +hg+https://bitbucket.org/pytest-dev/py +git+https://github.com/pytest-dev/pytest.git@features +git+https://github.com/pytest-dev/pytest-bdd.git +git+https://github.com/pytest-dev/pytest-cov.git +git+https://github.com/pytest-dev/pytest-faulthandler.git +git+https://github.com/pytest-dev/pytest-instafail.git +git+https://github.com/pytest-dev/pytest-mock.git +git+https://github.com/pytest-dev/pytest-qt.git +git+https://github.com/pytest-dev/pytest-repeat.git +git+https://github.com/pytest-dev/pytest-rerunfailures.git +git+https://github.com/abusalimov/pytest-travis-fold.git +git+https://github.com/The-Compiler/pytest-xvfb.git +hg+https://bitbucket.org/gutworth/six +hg+https://bitbucket.org/jendrikseipp/vulture +git+https://github.com/pallets/werkzeug.git + + +## qutebrowser dependencies + +git+https://github.com/tartley/colorama.git +hg+https://bitbucket.org/cthedot/cssutils +git+https://github.com/pallets/jinja.git +git+https://github.com/pallets/markupsafe.git +hg+http://bitbucket.org/birkenfeld/pygments-main +hg+https://bitbucket.org/fdik/pypeg +git+https://github.com/python-attrs/attrs.git +git+https://github.com/yaml/pyyaml.git diff --git a/.config/qutebrowser/misc/requirements/requirements-tests.txt b/.config/qutebrowser/misc/requirements/requirements-tests.txt new file mode 100644 index 0000000..07b0378 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests.txt @@ -0,0 +1,42 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +atomicwrites==1.1.5 +attrs==18.1.0 +backports.functools-lru-cache==1.5 +beautifulsoup4==4.6.0 +cheroot==6.3.3 +click==6.7 +# colorama==0.3.9 +coverage==4.5.1 +EasyProcess==0.2.3 +fields==5.0.0 +Flask==1.0.2 +glob2==0.6 +hunter==2.0.2 +hypothesis==3.66.6 +itsdangerous==0.24 +# Jinja2==2.10 +Mako==1.0.7 +# MarkupSafe==1.0 +more-itertools==4.2.0 +parse==1.8.4 +parse-type==0.4.2 +pluggy==0.6.0 +py==1.5.4 +py-cpuinfo==4.0.0 +pytest==3.6.3 +pytest-bdd==2.21.0 +pytest-benchmark==3.1.1 +pytest-cov==2.5.1 +pytest-faulthandler==1.5.0 +pytest-instafail==0.4.0 +pytest-mock==1.10.0 +pytest-qt==3.0.0 +pytest-repeat==0.5.0 +pytest-rerunfailures==4.1 +pytest-travis-fold==1.3.0 +pytest-xvfb==1.1.0 +PyVirtualDisplay==0.2.1 +six==1.11.0 +vulture==0.28 +Werkzeug==0.14.1 diff --git a/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw b/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw new file mode 100644 index 0000000..1216899 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tests.txt-raw @@ -0,0 +1,21 @@ +beautifulsoup4 +cheroot +coverage +Flask +hunter +hypothesis +pytest +pytest-bdd +pytest-benchmark +pytest-cov +pytest-faulthandler +pytest-instafail +pytest-mock +pytest-qt +pytest-repeat +pytest-rerunfailures +pytest-travis-fold +pytest-xvfb +vulture + +#@ ignore: Jinja2, MarkupSafe, colorama diff --git a/.config/qutebrowser/misc/requirements/requirements-tox.txt b/.config/qutebrowser/misc/requirements/requirements-tox.txt new file mode 100644 index 0000000..e8c660e --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tox.txt @@ -0,0 +1,9 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +packaging==17.1 +pluggy==0.6.0 +py==1.5.4 +pyparsing==2.2.0 +six==1.11.0 +tox==3.1.2 +virtualenv==16.0.0 diff --git a/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw b/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw new file mode 100644 index 0000000..053148f --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-tox.txt-raw @@ -0,0 +1 @@ +tox diff --git a/.config/qutebrowser/misc/requirements/requirements-vulture.txt b/.config/qutebrowser/misc/requirements/requirements-vulture.txt new file mode 100644 index 0000000..c8a26e8 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-vulture.txt @@ -0,0 +1,3 @@ +# This file is automatically generated by scripts/dev/recompile_requirements.py + +vulture==0.28 diff --git a/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw b/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw new file mode 100644 index 0000000..a10f860 --- /dev/null +++ b/.config/qutebrowser/misc/requirements/requirements-vulture.txt-raw @@ -0,0 +1 @@ +vulture diff --git a/.config/qutebrowser/misc/userscripts/cast b/.config/qutebrowser/misc/userscripts/cast new file mode 100755 index 0000000..f7b64df --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/cast @@ -0,0 +1,156 @@ +#!/usr/bin/env bash +# +# Behaviour +# Userscript for qutebrowser which casts the url passed in $1 to the default +# ChromeCast device in the network using the program `castnow` +# +# Usage +# You can launch the script from qutebrowser as follows: +# spawn --userscript ${PATH_TO_FILE} {url} +# +# Then, you can control the chromecast by launching the simple command +# `castnow` in a shell which will connect to the running castnow instance. +# +# For stopping the script, issue the command `pkill -f castnow` which would +# then let the rest of the userscript execute for cleaning temporary file. +# +# Thanks +# This userscript borrows Thorsten Wißmann's javascript code from his `mpv` +# userscript. +# +# Dependencies +# - castnow, https://github.com/xat/castnow +# +# Author +# Simon Désaulniers <sim.desaulniers@gmail.com> + +if [ -z "$QUTE_FIFO" ] ; then + cat 1>&2 <<EOF +Error: $0 can not be run as a standalone script. + +It is a qutebrowser userscript. In order to use it, call it using +'spawn --userscript' as described in qute://help/userscripts.html +EOF + exit 1 +fi + +msg() { + local cmd="$1" + shift + local msg="$*" + if [ -z "$QUTE_FIFO" ] ; then + echo "$cmd: $msg" >&2 + else + echo "message-$cmd '${msg//\'/\\\'}'" >> "$QUTE_FIFO" + fi +} + +js() { +cat <<EOF + + function descendantOfTagName(child, ancestorTagName) { + // tells whether child has some (proper) ancestor + // with the tag name ancestorTagName + while (child.parentNode != null) { + child = child.parentNode; + if (typeof child.tagName === 'undefined') break; + if (child.tagName.toUpperCase() == ancestorTagName.toUpperCase()) { + return true; + } + } + return false; + } + + var App = {}; + + var all_videos = []; + all_videos.push.apply(all_videos, document.getElementsByTagName("video")); + all_videos.push.apply(all_videos, document.getElementsByTagName("object")); + all_videos.push.apply(all_videos, document.getElementsByTagName("embed")); + App.backup_videos = Array(); + App.all_replacements = Array(); + for (i = 0; i < all_videos.length; i++) { + var video = all_videos[i]; + if (descendantOfTagName(video, "object")) { + // skip tags that are contained in an object, because we hide + // the object anyway. + continue; + } + var replacement = document.createElement("div"); + replacement.innerHTML = " + <p style=\\"margin-bottom: 0.5em\\"> + The video is being cast on your ChromeCast device. + </p> + <p> + In order to restore this particular video + <a style=\\"font-weight: bold; + color: white; + background: transparent; + \\" + onClick=\\"restore_video(this, " + i + ");\\" + href=\\"javascript: restore_video(this, " + i + ")\\" + >click here</a>. + </p> + "; + replacement.style.position = "relative"; + replacement.style.zIndex = "100003000000"; + replacement.style.fontSize = "1rem"; + replacement.style.textAlign = "center"; + replacement.style.verticalAlign = "middle"; + replacement.style.height = "100%"; + replacement.style.background = "#101010"; + replacement.style.color = "white"; + replacement.style.border = "4px dashed #545454"; + replacement.style.padding = "2em"; + replacement.style.margin = "auto"; + App.all_replacements[i] = replacement; + App.backup_videos[i] = video; + video.parentNode.replaceChild(replacement, video); + } + + function restore_video(obj, index) { + obj = App.all_replacements[index]; + video = App.backup_videos[index]; + console.log(video); + obj.parentNode.replaceChild(video, obj); + } + + /** force repainting the video, thanks to: + * http://martinwolf.org/2014/06/10/force-repaint-of-an-element-with-javascript/ + */ + var siteHeader = document.getElementById('header'); + siteHeader.style.display='none'; + siteHeader.offsetHeight; // no need to store this anywhere, the reference is enough + siteHeader.style.display='block'; + +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} +echo "jseval -q $(printjs)" >> "$QUTE_FIFO" + +tmpdir=$(mktemp -d) +file_to_cast=${tmpdir}/qutecast +program_=$(command -v castnow) + +if [[ "${program_}" == "" ]]; then + msg error "castnow can't be found..." + exit 1 +fi + +# kill any running instance of castnow +pkill -f "${program_}" + +# start youtube download in stream mode (-o -) into temporary file +youtube-dl -qo - "$1" > "${file_to_cast}" & +ytdl_pid=$! + +msg info "Casting $1" >> "$QUTE_FIFO" +# start castnow in stream mode to cast on ChromeCast +tail -F "${file_to_cast}" | ${program_} - + +# cleanup remaining background process and file on disk +kill ${ytdl_pid} +rm -rf "${tmpdir}" diff --git a/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser b/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser new file mode 100755 index 0000000..82e6d2f --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/dmenu_qutebrowser @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# Copyright 2015 Zach-Button <zachrey.button@gmail.com> +# Copyright 2015-2017 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +# Pipes history, quickmarks, and URL into dmenu. +# +# If run from qutebrowser as a userscript, it runs :open on the URL +# If not, it opens a new qutebrowser window at the URL +# +# Ideal for use with tabs_are_windows. Set a hotkey to launch this script, then: +# :bind o spawn --userscript dmenu_qutebrowser +# +# Use the hotkey to open in new tab/window, press 'o' to open URL in current tab/window +# You can simulate "go" by pressing "o<tab>", as the current URL is always first in the list +# +# I personally use "<Mod4>o" to launch this script. For me, my workflow is: +# Default keys Keys with this script +# O <Mod4>o +# o o +# go o<Tab> +# gO gC, then o<Tab> +# (This is unnecessarily long. I use this rarely, feel free to make this script accept parameters.) +# + +[ -z "$QUTE_URL" ] && QUTE_URL='http://google.com' + +url=$(echo "$QUTE_URL" | cat - "$QUTE_CONFIG_DIR/quickmarks" "$QUTE_DATA_DIR/history" | dmenu -l 15 -p qutebrowser) +url=$(echo "$url" | sed -E 's/[^ ]+ +//g' | grep -E "https?:" || echo "$url") + +[ -z "${url// }" ] && exit + +echo "open $url" >> "$QUTE_FIFO" || qutebrowser "$url" diff --git a/.config/qutebrowser/misc/userscripts/format_json b/.config/qutebrowser/misc/userscripts/format_json new file mode 100755 index 0000000..0d476b3 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/format_json @@ -0,0 +1,42 @@ +#!/bin/sh +set -euo pipefail +# +# Behavior: +# Userscript for qutebrowser which will take the raw JSON text of the current +# page, format it using `jq`, will add syntax highlighting using `pygments`, +# and open the syntax highlighted pretty printed html in a new tab. If the file +# is larger than 10MB then this script will only indent the json and will forego +# syntax highlighting using pygments. +# +# In order to use this script, just start it using `spawn --userscript` from +# qutebrowser. I recommend using an alias, e.g. put this in the +# [alias]-section of qutebrowser.conf: +# +# json = spawn --userscript /path/to/json_format +# +# Note that the color style defaults to monokai, but a different pygments style +# can be passed as the first parameter to the script. A full list of the pygments +# styles can be found at: https://help.farbox.com/pygments.html +# +# Bryan Gilbert, 2017 + +# do not run pygmentize on files larger than this amount of bytes +MAX_SIZE_PRETTIFY=10485760 # 10 MB +# default style to monokai if none is provided +STYLE=${1:-monokai} + +TEMP_FILE="$(mktemp)" +jq . "$QUTE_TEXT" >"$TEMP_FILE" + +# try GNU stat first and then OSX stat if the former fails +FILE_SIZE=$( + stat --printf="%s" "$TEMP_FILE" 2>/dev/null || + stat -f%z "$TEMP_FILE" 2>/dev/null +) +if [ "$FILE_SIZE" -lt "$MAX_SIZE_PRETTIFY" ]; then + pygmentize -l json -f html -O full,style="$STYLE" <"$TEMP_FILE" >"${TEMP_FILE}_" + mv -f "${TEMP_FILE}_" "$TEMP_FILE" +fi + +# send the command to qutebrowser to open the new file containing the formatted json +echo "open -t file://$TEMP_FILE" >> "$QUTE_FIFO" diff --git a/.config/qutebrowser/misc/userscripts/getbib b/.config/qutebrowser/misc/userscripts/getbib new file mode 100755 index 0000000..22af7a8 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/getbib @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +"""Qutebrowser userscript scraping the current web page for DOIs and downloading +corresponding bibtex information. + +Set the environment variable 'QUTE_BIB_FILEPATH' to indicate the path to +download to. Otherwise, bibtex information is downloaded to '/tmp' and hence +deleted at reboot. + +Installation: see qute://help/userscripts.html + +Inspired by +https://ocefpaf.github.io/python4oceanographers/blog/2014/05/19/doi2bibtex/ +""" + +import os +import sys +import shutil +import re +from collections import Counter +from urllib import parse as url_parse +from urllib import request as url_request + + +FIFO_PATH = os.getenv("QUTE_FIFO") + +def message_fifo(message, level="warning"): + """Send message to qutebrowser FIFO. The level must be one of 'info', + 'warning' (default) or 'error'.""" + with open(FIFO_PATH, "w") as fifo: + fifo.write("message-{} '{}'".format(level, message)) + + +source = os.getenv("QUTE_TEXT") +with open(source) as f: + text = f.read() + +# find DOIs on page using regex +dval = re.compile(r'(10\.(\d)+/([^(\s\>\"\<)])+)') +# https://stackoverflow.com/a/10324802/3865876, too strict +# dval = re.compile(r'\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)\b') +dois = dval.findall(text) +dois = Counter(e[0] for e in dois) +try: + doi = dois.most_common(1)[0][0] +except IndexError: + message_fifo("No DOIs found on page") + sys.exit() +message_fifo("Found {} DOIs on page, selecting {}".format(len(dois), doi), + level="info") + +# get bibtex data corresponding to DOI +url = "http://dx.doi.org/" + url_parse.quote(doi) +headers = dict(Accept='text/bibliography; style=bibtex') +request = url_request.Request(url, headers=headers) +response = url_request.urlopen(request) +status_code = response.getcode() +if status_code >= 400: + message_fifo("Request returned {}".format(status_code)) + sys.exit() + +# obtain content and format it +bibtex = response.read().decode("utf-8").strip() +bibtex = bibtex.replace(" ", "\n ", 1).\ + replace("}, ", "},\n ").replace("}}", "}\n}") + +# append to file +bib_filepath = os.getenv("QUTE_BIB_FILEPATH", "/tmp/qute.bib") +with open(bib_filepath, "a") as f: + f.write(bibtex + "\n\n") diff --git a/.config/qutebrowser/misc/userscripts/open_download b/.config/qutebrowser/misc/userscripts/open_download new file mode 100755 index 0000000..8dbb113 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/open_download @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# Both standalone script and qutebrowser userscript that opens a rofi menu with +# all files from the download director and opens the selected file. It works +# both as a userscript and a standalone script that is called from outside of +# qutebrowser. +# +# Suggested keybinding (for "show downloads"): +# spawn --userscript ~/.config/qutebrowser/open_download +# sd +# +# Requirements: +# - rofi (in a recent version) +# - xdg-open and xdg-mime +# - You should configure qutebrowser to download files to a single directory +# - It comes in handy if you enable downloads.remove_finished. If you want to +# see the recent downloads, just press "sd". +# +# Thorsten Wißmann, 2015 (thorsten` on freenode) +# Any feedback is welcome! + +set -e + +# open a file from the download directory using rofi +DOWNLOAD_DIR=${DOWNLOAD_DIR:-$QUTE_DOWNLOAD_DIR} +DOWNLOAD_DIR=${DOWNLOAD_DIR:-$HOME/Downloads} +# the name of the rofi command +ROFI_CMD=${ROFI_CMD:-rofi} +ROFI_ARGS=${ROFI_ARGS:-} + +msg() { + local cmd="$1" + shift + local msg="$*" + if [ -z "$QUTE_FIFO" ] ; then + echo "$cmd: $msg" >&2 + else + echo "message-$cmd '${msg//\'/\\\'}'" >> "$QUTE_FIFO" + fi +} +die() { + msg error "$*" + if [ -n "$QUTE_FIFO" ] ; then + # when run as a userscript, the above error message already informs the + # user about the failure, and no additional "userscript exited with status + # 1" is needed. + exit 0; + else + exit 1; + fi +} + +if ! [ -d "$DOWNLOAD_DIR" ] ; then + die "Download directory »$DOWNLOAD_DIR« not found!" +fi +if ! command -v "${ROFI_CMD}" > /dev/null ; then + die "Rofi command »${ROFI_CMD}« not found in PATH!" +fi + +rofi_default_args=( + -monitor -2 # place above window + -location 6 # aligned at the bottom + -width 100 # use full window width + -i + -no-custom + -format i # make rofi return the index + -l 10 + -p 'Open download:' -dmenu + ) + +crop-first-column() { + local maxlength=${1:-40} + local expression='s|^\([^\t]\{0,'"$maxlength"'\}\)[^\t]*\t|\1\t|' + sed "$expression" +} + +ls-files() { + # add the slash at the end of the download dir enforces to follow the + # symlink, if the DOWNLOAD_DIR itself is a symlink + # shellcheck disable=SC2010 + ls -Q --quoting-style escape -h -o -1 -A -t "${DOWNLOAD_DIR}/" \ + | grep '^[-]' \ + | cut -d' ' -f3- \ + | sed 's,^\(.*[^\]\) \(.*\)$,\2\t\1,' \ + | sed 's,\\\(.\),\1,g' +} + +mapfile -t entries < <(ls-files) + +# we need to manually check that there are items, because rofi doesn't show up +# if there are no items and -no-custom is passed to rofi. +if [ "${#entries[@]}" -eq 0 ] ; then + die "Download directory »${DOWNLOAD_DIR}« empty" +fi + +line=$(printf '%s\n' "${entries[@]}" \ + | crop-first-column 55 \ + | column -s $'\t' -t \ + | $ROFI_CMD "${rofi_default_args[@]}" "$ROFI_ARGS") || true +if [ -z "$line" ]; then + exit 0 +fi + +file="${entries[$line]}" +file="${file%%$'\t'*}" +path="$DOWNLOAD_DIR/$file" +filetype=$(xdg-mime query filetype "$path") +application=$(xdg-mime query default "$filetype") + +if [ -z "$application" ] ; then + die "Do not know how to open »$file« of type $filetype" +fi + +msg info "Opening »$file« (of type $filetype) with ${application%.desktop}" + +xdg-open "$path" & diff --git a/.config/qutebrowser/misc/userscripts/openfeeds b/.config/qutebrowser/misc/userscripts/openfeeds new file mode 100755 index 0000000..4a1a942 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/openfeeds @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2015 jnphilipp <me@jnphilipp.org> +# Copyright 2016-2017 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +# Opens all links to feeds defined in the head of a site +# +# Ideal for use with tabs_are_windows. Set a hotkey to launch this script, then: +# :bind gF spawn --userscript openfeeds +# +# Use the hotkey to open the feeds in new tab/window, press 'gF' to open +# + +import os +import re + +from bs4 import BeautifulSoup +from urllib.parse import urljoin + +with open(os.environ['QUTE_HTML'], 'r') as f: + soup = BeautifulSoup(f) +with open(os.environ['QUTE_FIFO'], 'w') as f: + for link in soup.find_all('link', rel='alternate', type=re.compile(r'application/((rss|rdf|atom)\+)?xml|text/xml')): + f.write('open -t %s\n' % urljoin(os.environ['QUTE_URL'], link.get('href'))) diff --git a/.config/qutebrowser/misc/userscripts/password_fill b/.config/qutebrowser/misc/userscripts/password_fill new file mode 100755 index 0000000..a61a42c --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/password_fill @@ -0,0 +1,381 @@ +#!/usr/bin/env bash +help() { + blink=$'\e[1;31m' reset=$'\e[0m' +cat <<EOF +This script can only be used as a userscript for qutebrowser +2015, Thorsten Wißmann <edu _at_ thorsten-wissmann _dot_ de> +In case of questions or suggestions, do not hesitate to send me an E-Mail or to +directly ask me via IRC (nickname thorsten\`) in #qutebrowser on freenode. + + $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset + WARNING: the passwords are stored in qutebrowser's + debug log reachable via the url qute://log + $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset + +Usage: run as a userscript form qutebrowser, e.g.: + spawn --userscript ~/.config/qutebrowser/password_fill + +Pass backend: (see also passwordstore.org) + This script expects pass to store the credentials of each page in an extra + file, where the filename (or filepath) contains the domain of the respective + page. The first line of the file must contain the password, the login name + must be contained in a later line beginning with "user:", "login:", or + "username:" (configurable by the user_pattern variable). + +Behavior: + It will try to find a username/password entry in the configured backend + (currently only pass) for the current website and will load that pair of + username and password to any form on the current page that has some password + entry field. If multiple entries are found, a zenity menu is offered. + + If no entry is found, then it crops subdomains from the url if at least one + entry is found in the backend. (In that case, it always shows a menu) + +Configuration: + This script loads the bash script ~/.config/qutebrowser/password_fill_rc (if + it exists), so you can change any configuration variable and overwrite any + function you like. + +EOF +} + +set -o errexit +set -o pipefail +shopt -s nocasematch # make regexp matching in bash case insensitive + +if [ -z "$QUTE_FIFO" ] ; then + help + exit +fi + +error() { + local msg="$*" + echo "message-error '${msg//\'/\\\'}'" >> "$QUTE_FIFO" +} +msg() { + local msg="$*" + echo "message-info '${msg//\'/\\\'}'" >> "$QUTE_FIFO" +} +die() { + error "$*" + exit 0 +} + +javascript_escape() { + # print the first argument in an escaped way, such that it can safely + # be used within javascripts double quotes + sed "s,[\\\\'\"],\\\\&,g" <<< "$1" +} + +# ======================================================= # +# CONFIGURATION +# ======================================================= # +# The configuration file is per default located in +# ~/.config/qutebrowser/password_fill_rc and is a bash script that is loaded +# later in the present script. So basically you can replace all of the +# following definitions and make them fit your needs. + +# The following simplifies a URL to the domain (e.g. "wiki.qutebrowser.org") +# which is later used to search the correct entries in the password backend. If +# you e.g. don't want the "www." to be removed or if you want to distinguish +# between different paths on the same domain. + +simplify_url() { + simple_url="${1##*://}" # remove protocol specification + simple_url="${simple_url%%\?*}" # remove GET parameters + simple_url="${simple_url%%/*}" # remove directory path + simple_url="${simple_url%:*}" # remove port + simple_url="${simple_url##www.}" # remove www. subdomain +} + +# no_entries_found() is called if the first query_entries() call did not find +# any matching entries. Multiple implementations are possible: +# The easiest behavior is to quit: +#no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +#} +# But you could also fill the files array with all entries from your pass db +# if the first db query did not find anything +# no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# query_entries "" +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +# fi +# } + +# Another behavior is to drop another level of subdomains until search hits +# are found: +no_entries_found() { + while [ 0 -eq "${#files[@]}" ] && [ -n "$simple_url" ]; do + shorter_simple_url=$(sed 's,^[^.]*\.,,' <<< "$simple_url") + if [ "$shorter_simple_url" = "$simple_url" ] ; then + # if no dot, then even remove the top level domain + simple_url="" + query_entries "$simple_url" + break + fi + simple_url="$shorter_simple_url" + query_entries "$simple_url" + #die "No entry found for »$simple_url«" + # enforce menu if we do "fuzzy" matching + menu_if_one_entry=1 + done + if [ 0 -eq "${#files[@]}" ] ; then + die "No entry found for »$simple_url«" + fi +} + +# Backend implementations tell, how the actual password store is accessed. +# Right now, there is only one fully functional password backend, namely for +# the program "pass". +# A password backend consists of three actions: +# - init() initializes backend-specific things and does sanity checks. +# - query_entries() is called with a simplified url and is expected to fill +# the bash array $files with the names of matching password entries. There +# are no requirements how these names should look like. +# - open_entry() is called with some specific entry of the $files array and is +# expected to write the username of that entry to the $username variable and +# the corresponding password to $password + +reset_backend() { + init() { true ; } + query_entries() { true ; } + open_entry() { true ; } +} + +# choose_entry() is expected to choose one entry from the array $files and +# write it to the variable $file. +choose_entry() { + choose_entry_zenity +} + +# The default implementation chooses a random entry from the array. So if there +# are multiple matching entries, multiple calls to this userscript will +# eventually pick the "correct" entry. I.e. if this userscript is bound to +# "zl", the user has to press "zl" until the correct username shows up in the +# login form. +choose_entry_random() { + local nr=${#files[@]} + file="${files[$((RANDOM % nr))]}" + # Warn user, that there might be other matching password entries + if [ "$nr" -gt 1 ] ; then + msg "Picked $file out of $nr entries: ${files[*]}" + fi +} + +# another implementation would be to ask the user via some menu (like rofi or +# dmenu or zenity or even qutebrowser completion in future?) which entry to +# pick +MENU_COMMAND=( head -n 1 ) +# whether to show the menu if there is only one entry in it +menu_if_one_entry=0 +choose_entry_menu() { + local nr=${#files[@]} + if [ "$nr" -eq 1 ] && ! ((menu_if_one_entry)) ; then + file="${files[0]}" + else + file=$( printf '%s\n' "${files[@]}" | "${MENU_COMMAND[@]}" ) + fi +} + +choose_entry_rofi() { + MENU_COMMAND=( rofi -p "qutebrowser> " -dmenu + -mesg $'Pick a password entry for <b>'"${QUTE_URL//&/&}"'</b>' ) + choose_entry_menu || true +} + +choose_entry_zenity() { + MENU_COMMAND=( zenity --list --title "qutebrowser password fill" + --text "Pick the password entry:" + --column "Name" ) + choose_entry_menu || true +} + +choose_entry_zenity_radio() { + zenity_helper() { + awk '{ print $0 ; print $0 }' \ + | zenity --list --radiolist \ + --title "qutebrowser password fill" \ + --text "Pick the password entry:" \ + --column " " --column "Name" + } + MENU_COMMAND=( zenity_helper ) + choose_entry_menu || true +} + +# ======================================================= +# backend: PASS + +# configuration options: +match_filename=1 # whether allowing entry match by filepath +match_line=0 # whether allowing entry match by URL-Pattern in file + # Note: match_line=1 gets very slow, even for small password stores! +match_line_pattern='^url: .*' # applied using grep -iE +user_pattern='^(user|username|login): ' + +GPG_OPTS=( "--quiet" "--yes" "--compress-algo=none" "--no-encrypt-to" ) +GPG="gpg" +export GPG_TTY="${GPG_TTY:-$(tty 2>/dev/null)}" +command -v gpg2 &>/dev/null && GPG="gpg2" +[[ -n $GPG_AGENT_INFO || $GPG == "gpg2" ]] && GPG_OPTS+=( "--batch" "--use-agent" ) + +pass_backend() { + init() { + PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}" + if ! [ -d "$PREFIX" ] ; then + die "Can not open password store dir »$PREFIX«" + fi + } + query_entries() { + local url="$1" + + if ((match_line)) ; then + # add entries with matching URL-tag + while read -r -d "" passfile ; do + if $GPG "${GPG_OPTS[@]}" -d "$passfile" \ + | grep --max-count=1 -iE "${match_line_pattern}${url}" > /dev/null + then + passfile="${passfile#$PREFIX}" + passfile="${passfile#/}" + files+=( "${passfile%.gpg}" ) + fi + done < <(find -L "$PREFIX" -iname '*.gpg' -print0) + fi + if ((match_filename)) ; then + # add entries with matching filepath + while read -r passfile ; do + passfile="${passfile#$PREFIX}" + passfile="${passfile#/}" + files+=( "${passfile%.gpg}" ) + done < <(find -L "$PREFIX" -iname '*.gpg' | grep "$url") + fi + } + open_entry() { + local path="$PREFIX/${1}.gpg" + password="" + local firstline=1 + while read -r line ; do + if ((firstline)) ; then + password="$line" + firstline=0 + else + if [[ $line =~ $user_pattern ]] ; then + # remove the matching prefix "user: " from the beginning of the line + username=${line#${BASH_REMATCH[0]}} + break + fi + fi + done < <($GPG "${GPG_OPTS[@]}" -d "$path" ) + } +} +# ======================================================= + +# ======================================================= +# backend: secret +secret_backend() { + init() { + return + } + query_entries() { + local domain="$1" + while read -r line ; do + if [[ "$line" == "attribute.username = "* ]] ; then + files+=("$domain ${line:21}") + fi + done < <( secret-tool search --unlock --all domain "$domain" 2>&1 ) + } + open_entry() { + local domain="${1%% *}" + username="${1#* }" + password=$(secret-tool lookup domain "$domain" username "$username") + } +} +# ======================================================= + +# load some sane default backend +reset_backend +pass_backend +# load configuration +QUTE_CONFIG_DIR=${QUTE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/qutebrowser/} +PWFILL_CONFIG=${PWFILL_CONFIG:-${QUTE_CONFIG_DIR}/password_fill_rc} +if [ -f "$PWFILL_CONFIG" ] ; then + # shellcheck source=/dev/null + source "$PWFILL_CONFIG" +fi +init + +simplify_url "$QUTE_URL" +query_entries "${simple_url}" +no_entries_found +# remove duplicates +mapfile -t files < <(printf '%s\n' "${files[@]}" | sort | uniq ) +choose_entry +if [ -z "$file" ] ; then + # choose_entry didn't want any of these entries + exit 0 +fi +open_entry "$file" +#username="$(date)" +#password="XYZ" +#msg "$username, ${#password}" + +[ -n "$username" ] || die "Username not set in entry $file" +[ -n "$password" ] || die "Password not set in entry $file" + +js() { +cat <<EOF + function isVisible(elem) { + var style = elem.ownerDocument.defaultView.getComputedStyle(elem, null); + + if (style.getPropertyValue("visibility") !== "visible" || + style.getPropertyValue("display") === "none" || + style.getPropertyValue("opacity") === "0") { + return false; + } + + return elem.offsetWidth > 0 && elem.offsetHeight > 0; + }; + function hasPasswordField(form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (input.type == "password") { + return true; + } + } + return false; + }; + function loadData2Form (form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (isVisible(input) && (input.type == "text" || input.type == "email")) { + input.focus(); + input.value = "$(javascript_escape "${username}")"; + input.blur(); + } + if (input.type == "password") { + input.focus(); + input.value = "$(javascript_escape "${password}")"; + input.blur(); + } + } + }; + + var forms = document.getElementsByTagName("form"); + for (i = 0; i < forms.length; i++) { + if (hasPasswordField(forms[i])) { + loadData2Form(forms[i]); + } + } +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} +echo "jseval -q $(printjs)" >> "$QUTE_FIFO" diff --git a/.config/qutebrowser/misc/userscripts/qute-keepass b/.config/qutebrowser/misc/userscripts/qute-keepass new file mode 100755 index 0000000..a21ebc9 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-keepass @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 + +# Copyright 2018 Jay Kamat <jaygkamat@gmail.com> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""This userscript allows for insertion of usernames and passwords from keepass +databases using pykeepass. Since it is a userscript, it must be run from +qutebrowser. + +A sample invocation of this script is: + +:spawn --userscript qute-keepass -p ~/KeePassFiles/MainDatabase.kdbx + +And a sample binding + +:bind --mode=insert <ctrl-i> spawn --userscript qute-keepass -p ~/KeePassFiles/MainDatabase.kdbx + +-p or --path is a required argument. + +--keyfile-path allows you to specify a keepass keyfile. If you only use a +keyfile, also add --no-password as well. Specifying --no-password without +--keyfile-path will lead to an error. + +login information is inserted using :insert-text and :fake-key <Tab>, which +means you must have a cursor in position before initiating this userscript. If +you do not do this, you will get 'element not editable' errors. + +If keepass takes a while to open the DB, you might want to consider reducing +the number of transform rounds in your database settings. + +Dependencies: pykeepass (in python3), PyQt5. Without pykeepass, you will get an +exit code of 100. + +********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****************** + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log +(qute://log) and could be compromised if you decide to submit a crash report! + +********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****************** + +""" + +# pylint: disable=bad-builtin + +import argparse +import enum +import functools +import os +import shlex +import subprocess +import sys + +from PyQt5.QtCore import QUrl +from PyQt5.QtWidgets import QApplication, QInputDialog, QLineEdit + +try: + import pykeepass +except ImportError as e: + print("pykeepass not found: {}".format(str(e)), file=sys.stderr) + + # Since this is a common error, try to print it to the FIFO if we can. + if 'QUTE_FIFO' in os.environ: + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('message-error "pykeepass failed to be imported."\n') + fifo.flush() + sys.exit(100) + +argument_parser = argparse.ArgumentParser( + description="Fill passwords using keepass.", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--path', '-p', required=True, + help='Path to the keepass db.') +argument_parser.add_argument('--keyfile-path', '-k', default=None, + help='Path to a keepass keyfile') +argument_parser.add_argument( + '--no-password', action='store_true', + help='Supply if no password is required to unlock this database. ' + 'Only allowed with --keyfile-path') +argument_parser.add_argument( + '--dmenu-invocation', '-d', default='dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument( + '--dmenu-format', '-f', default='{title}: {username}', + help='Format string for keys to display in dmenu.' + ' Must generate a unique string.') +argument_parser.add_argument( + '--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument( + '--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-fill-only', '-e', + action='store_true', help='Only insert username') +group.add_argument('--password-fill-only', '-w', + action='store_true', help='Only insert password') + +CMD_DELAY = 50 + + +class ExitCodes(enum.IntEnum): + """Stores various exit codes groups to use.""" + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_CANDIDATES = 2 + USER_QUIT = 3 + DB_OPEN_FAIL = 4 + + INTERNAL_ERROR = 10 + + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + + +def stderr(to_print): + """Extra functionality to echo out errors to qb ui.""" + print(to_print, file=sys.stderr) + qute_command('message-error "{}"'.format(to_print)) + + +def dmenu(items, invocation, encoding): + """Runs dmenu with given arguments.""" + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join(items).encode(encoding), + stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def get_password(): + """Get a keepass db password from user.""" + _app = QApplication(sys.argv) + text, ok = QInputDialog.getText( + None, "KeePass DB Password", + "Please enter your KeePass Master Password", + QLineEdit.Password) + if not ok: + stderr('Password Prompt Rejected.') + sys.exit(ExitCodes.USER_QUIT) + return text + + +def find_candidates(args, host): + """Finds candidates that match host""" + file_path = os.path.expanduser(args.path) + + # TODO find a way to keep the db open, so we don't open (and query + # password) it every time + + pw = None + if not args.no_password: + pw = get_password() + + kf = args.keyfile_path + if kf: + kf = os.path.expanduser(kf) + + try: + kp = pykeepass.PyKeePass(file_path, password=pw, keyfile=kf) + except Exception as e: + stderr("There was an error opening the DB: {}".format(str(e))) + + return kp.find_entries(url="{}{}{}".format(".*", host, ".*"), regex=True) + + +def candidate_to_str(args, candidate): + """Turns candidate into a human readable string for dmenu""" + return args.dmenu_format.format(title=candidate.title, + url=candidate.url, + username=candidate.username, + path=candidate.path, + uuid=candidate.uuid) + + +def candidate_to_secret(candidate): + """Turns candidate into a generic (user, password) tuple""" + return (candidate.username, candidate.password) + + +def run(args): + """Runs qute-keepass""" + if not args.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + url_host = QUrl(args.url).host() + + if not url_host: + stderr('{} was not parsed as a valid URL!'.format(args.url)) + return ExitCodes.INTERNAL_ERROR + + # Find candidates matching the host of the given URL + candidates = find_candidates(args, url_host) + if not candidates: + stderr('No candidates for URL {!r} found!'.format(args.url)) + return ExitCodes.NO_CANDIDATES + + # Create a map so we can get turn the resulting string from dmenu back into + # a candidate + candidates_strs = list(map(functools.partial(candidate_to_str, args), + candidates)) + candidates_map = dict(zip(candidates_strs, candidates)) + + if len(candidates) == 1: + selection = candidates.pop() + else: + selection = dmenu(candidates_strs, + args.dmenu_invocation, + args.io_encoding) + + if selection not in candidates_map: + stderr("'{}' was not a valid entry!").format(selection) + return ExitCodes.USER_QUIT + + selection = candidates_map[selection] + + username, password = candidate_to_secret(selection) + + insert_mode = ';; enter-mode insert' if args.insert_mode else '' + if args.username_fill_only: + qute_command('insert-text {}{}'.format(username, insert_mode)) + elif args.password_fill_only: + qute_command('insert-text {}{}'.format(password, insert_mode)) + else: + # Enter username and password using insert-key and fake-key <Tab> + # (which supports more passwords than fake-key only), then switch back + # into insert-mode, so the form can be directly submitted by hitting + # enter afterwards. It dosen't matter when we go into insert mode, but + # the other commands need to be be executed sequentially, so we add + # delays with later. + qute_command('insert-text {} ;;' + 'later {} fake-key <Tab> ;;' + 'later {} insert-text {}{}' + .format(username, CMD_DELAY, + CMD_DELAY * 2, password, insert_mode)) + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(run(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qute-lastpass b/.config/qutebrowser/misc/userscripts/qute-lastpass new file mode 100755 index 0000000..ea88cf8 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-lastpass @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 + +# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com> +# Adapted for LastPass by Wayne Cheng (welps) <waynethecheng@gmail.com> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published bjy +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +""" +Insert login information using lastpass CLI and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). +A short demonstration can be seen here: https://i.imgur.com/zA61NrF.gifv. +""" + +USAGE = """The domain of the site has to be in the name of the LastPass entry, for example: "github.com/cryzed" or +"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: +[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms. + +You must log into LastPass CLI using `lpass login <email>` prior to use of this script. The LastPass CLI agent only holds your master password for an hour by default. If you wish to change this, please see `man lpass`. + +To use in qutebrowser, run: `spawn --userscript qute-lastpass` +""" + +EPILOG = """Dependencies: tldextract (Python 3 module), LastPass CLI (1.3 or newer) + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if +you decide to submit a crash report!""" + +import argparse +import enum +import fnmatch +import functools +import os +import re +import shlex +import subprocess +import sys +import json +import tldextract + +argument_parser = argparse.ArgumentParser( + description=__doc__, usage=USAGE, epilog=EPILOG) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +argument_parser.add_argument('--merge-candidates', '-m', action='store_true', + help='Merge pass candidates for fully-qualified and registered domain name') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-only', '-e', + action='store_true', help='Only insert username') +group.add_argument('--password-only', '-w', + action='store_true', help='Only insert password') + +stderr = functools.partial(print, file=sys.stderr) + +class ExitCodes(enum.IntEnum): + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_PASS_CANDIDATES = 2 + COULD_NOT_MATCH_USERNAME = 3 + COULD_NOT_MATCH_PASSWORD = 4 + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + +def pass_(domain, encoding): + args = ['lpass', 'show', '-x', '-j', '-G', '.*{:s}.*'.format(domain)] + process = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + err = process.stderr.decode(encoding).strip() + if err: + msg = "LastPass CLI returned for {:s} - {:s}".format(domain, err) + stderr(msg) + return '[]' + + out = process.stdout.decode(encoding).strip() + + return out + +def dmenu(items, invocation, encoding): + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join( + items).encode(encoding), stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def fake_key_raw(text): + for character in text: + # Escape all characters by default, space requires special handling + sequence = '" "' if character == ' ' else '\{}'.format(character) + qute_command('fake-key {}'.format(sequence)) + + +def main(arguments): + if not arguments.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + extract_result = tldextract.extract(arguments.url) + + # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), + # the registered domain name and finally: the IPv4 address if that's what + # the URL represents + candidates = [] + for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.subdomain + extract_result.domain, extract_result.domain, extract_result.ipv4]): + target_candidates = json.loads(pass_(target, arguments.io_encoding)) + if not target_candidates: + continue + + candidates = candidates + target_candidates + if not arguments.merge_candidates: + break + else: + if not candidates: + stderr('No pass candidates for URL {!r} found!'.format( + arguments.url)) + return ExitCodes.NO_PASS_CANDIDATES + + if len(candidates) == 1: + selection = candidates.pop() + else: + choices = ["{:s} | {:s} | {:s} | {:s}".format(c["id"], c["name"], c["url"], c["username"]) for c in candidates] + choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding) + choiceId = choice.split("|")[0].strip() + selection = next((c for (i, c) in enumerate(candidates) if c["id"] == choiceId), None) + + # Nothing was selected, simply return + if not selection: + return ExitCodes.SUCCESS + + username = selection["username"] + password = selection["password"] + + if arguments.username_only: + fake_key_raw(username) + elif arguments.password_only: + fake_key_raw(password) + else: + # Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch + # back into insert-mode, so the form can be directly submitted by + # hitting enter afterwards + fake_key_raw(username) + qute_command('fake-key <Tab>') + fake_key_raw(password) + + if arguments.insert_mode: + qute_command('enter-mode insert') + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(main(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qute-pass b/.config/qutebrowser/misc/userscripts/qute-pass new file mode 100755 index 0000000..4f79e11 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qute-pass @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 + +# Copyright 2017 Chris Braun (cryzed) <cryzed@googlemail.com> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +""" +Insert login information using pass and a dmenu-compatible application (e.g. dmenu, rofi -dmenu, ...). A short +demonstration can be seen here: https://i.imgur.com/KN3XuZP.gif. +""" + +USAGE = """The domain of the site has to appear as a segment in the pass path, for example: "github.com/cryzed" or +"websites/github.com". How the username and password are determined is freely configurable using the CLI arguments. The +login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: +[USERNAME]<Tab>[PASSWORD], which is compatible with almost all login forms. + +Suggested bindings similar to Uzbl's `formfiller` script: + + config.bind('<z><l>', 'spawn --userscript qute-pass') + config.bind('<z><u><l>', 'spawn --userscript qute-pass --username-only') + config.bind('<z><p><l>', 'spawn --userscript qute-pass --password-only') + config.bind('<z><o><l>', 'spawn --userscript qute-pass --otp-only') +""" + +EPILOG = """Dependencies: tldextract (Python 3 module), pass, pass-otp (optional). +For issues and feedback please use: https://github.com/cryzed/qutebrowser-userscripts. + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log (qute://log) and might be shared if +you decide to submit a crash report!""" + +import argparse +import enum +import fnmatch +import functools +import os +import re +import shlex +import subprocess +import sys + +import tldextract + +argument_parser = argparse.ArgumentParser(description=__doc__, usage=USAGE, epilog=EPILOG) +argument_parser.add_argument('url', nargs='?', default=os.getenv('QUTE_URL')) +argument_parser.add_argument('--password-store', '-p', default=os.path.expanduser('~/.password-store'), + help='Path to your pass password-store') +argument_parser.add_argument('--username-pattern', '-u', default=r'.*/(.+)', + help='Regular expression that matches the username') +argument_parser.add_argument('--username-target', '-U', choices=['path', 'secret'], default='path', + help='The target for the username regular expression') +argument_parser.add_argument('--password-pattern', '-P', default=r'(.*)', + help='Regular expression that matches the password') +argument_parser.add_argument('--dmenu-invocation', '-d', default='rofi -dmenu', + help='Invocation used to execute a dmenu-provider') +argument_parser.add_argument('--no-insert-mode', '-n', dest='insert_mode', action='store_false', + help="Don't automatically enter insert mode") +argument_parser.add_argument('--io-encoding', '-i', default='UTF-8', + help='Encoding used to communicate with subprocesses') +argument_parser.add_argument('--merge-candidates', '-m', action='store_true', + help='Merge pass candidates for fully-qualified and registered domain name') +group = argument_parser.add_mutually_exclusive_group() +group.add_argument('--username-only', '-e', action='store_true', help='Only insert username') +group.add_argument('--password-only', '-w', action='store_true', help='Only insert password') +group.add_argument('--otp-only', '-o', action='store_true', help='Only insert OTP code') + +stderr = functools.partial(print, file=sys.stderr) + + +class ExitCodes(enum.IntEnum): + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_PASS_CANDIDATES = 2 + COULD_NOT_MATCH_USERNAME = 3 + COULD_NOT_MATCH_PASSWORD = 4 + + +def qute_command(command): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write(command + '\n') + fifo.flush() + + +def find_pass_candidates(domain, password_store_path): + candidates = [] + for path, directories, file_names in os.walk(password_store_path, followlinks=True): + if directories or domain not in path.split(os.path.sep): + continue + + # Strip password store path prefix to get the relative pass path + pass_path = path[len(password_store_path) + 1:] + secrets = fnmatch.filter(file_names, '*.gpg') + candidates.extend(os.path.join(pass_path, os.path.splitext(secret)[0]) for secret in secrets) + return candidates + + +def _run_pass(command, encoding): + process = subprocess.run(command, stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def pass_(path, encoding): + return _run_pass(['pass', path], encoding) + + +def pass_otp(path, encoding): + return _run_pass(['pass', 'otp', path], encoding) + + +def dmenu(items, invocation, encoding): + command = shlex.split(invocation) + process = subprocess.run(command, input='\n'.join(items).encode(encoding), stdout=subprocess.PIPE) + return process.stdout.decode(encoding).strip() + + +def fake_key_raw(text): + for character in text: + # Escape all characters by default, space requires special handling + sequence = '" "' if character == ' ' else '\{}'.format(character) + qute_command('fake-key {}'.format(sequence)) + + +def main(arguments): + if not arguments.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + extract_result = tldextract.extract(arguments.url) + + # Expand potential ~ in paths, since this script won't be called from a shell that does it for us + password_store_path = os.path.expanduser(arguments.password_store) + + # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), + # the registered domain name and finally: the IPv4 address if that's what the URL represents + candidates = set() + for target in filter(None, [extract_result.fqdn, extract_result.registered_domain, extract_result.ipv4]): + target_candidates = find_pass_candidates(target, password_store_path) + if not target_candidates: + continue + + candidates.update(target_candidates) + if not arguments.merge_candidates: + break + else: + if not candidates: + stderr('No pass candidates for URL {!r} found!'.format(arguments.url)) + return ExitCodes.NO_PASS_CANDIDATES + + selection = candidates.pop() if len(candidates) == 1 else dmenu(sorted(candidates), arguments.dmenu_invocation, + arguments.io_encoding) + # Nothing was selected, simply return + if not selection: + return ExitCodes.SUCCESS + + secret = pass_(selection, arguments.io_encoding) + + # Match username + target = selection if arguments.username_target == 'path' else secret + match = re.match(arguments.username_pattern, target) + if not match: + stderr('Failed to match username pattern on {}!'.format(arguments.username_target)) + return ExitCodes.COULD_NOT_MATCH_USERNAME + username = match.group(1) + + # Match password + match = re.match(arguments.password_pattern, secret) + if not match: + stderr('Failed to match password pattern on secret!') + return ExitCodes.COULD_NOT_MATCH_PASSWORD + password = match.group(1) + + if arguments.username_only: + fake_key_raw(username) + elif arguments.password_only: + fake_key_raw(password) + elif arguments.otp_only: + otp = pass_otp(selection, arguments.io_encoding) + fake_key_raw(otp) + else: + # Enter username and password using fake-key and <Tab> (which seems to work almost universally), then switch + # back into insert-mode, so the form can be directly submitted by hitting enter afterwards + fake_key_raw(username) + qute_command('fake-key <Tab>') + fake_key_raw(password) + + if arguments.insert_mode: + qute_command('enter-mode insert') + + return ExitCodes.SUCCESS + + +if __name__ == '__main__': + arguments = argument_parser.parse_args() + sys.exit(main(arguments)) diff --git a/.config/qutebrowser/misc/userscripts/qutedmenu b/.config/qutebrowser/misc/userscripts/qutedmenu new file mode 100755 index 0000000..de1b8d6 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/qutedmenu @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# Handle open -s && open -t with bemenu + +#:bind o spawn --userscript /path/to/userscripts/qutedmenu open +#:bind O spawn --userscript /path/to/userscripts/qutedmenu tab + +# If you would like to set a custom colorscheme/font use these dirs. +# https://github.com/halfwit/dotfiles/blob/master/.config/dmenu/bemenucolors +readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config} + +readonly optsfile=$confdir/dmenu/bemenucolors + +create_menu() { + # Check quickmarks + while read -r url; do + printf -- '%s\n' "$url" + done < "$QUTE_CONFIG_DIR"/quickmarks + + # Next bookmarks + while read -r url _; do + printf -- '%s\n' "$url" + done < "$QUTE_CONFIG_DIR"/bookmarks/urls + + # Finally history + while read -r _ url; do + printf -- '%s\n' "$url" + done < "$QUTE_DATA_DIR"/history + } + +get_selection() { + opts+=(-p qutebrowser) + #create_menu | dmenu -l 10 "${opts[@]}" + create_menu | bemenu -l 10 "${opts[@]}" +} + +# Main +# https://github.com/halfwit/dotfiles/blob/master/.config/dmenu/font +[[ -s $confdir/dmenu/font ]] && read -r font < "$confdir"/dmenu/font + +[[ $font ]] && opts+=(-fn "$font") + +# shellcheck source=/dev/null +[[ -s $optsfile ]] && source "$optsfile" + +url=$(get_selection) +url=${url/*http/http} + +# If no selection is made, exit (escape pressed, e.g.) +[[ ! $url ]] && exit 0 + +case $1 in + open) printf '%s' "open $url" >> "$QUTE_FIFO" || qutebrowser "$url" ;; + tab) printf '%s' "open -t $url" >> "$QUTE_FIFO" || qutebrowser "$url" ;; +esac diff --git a/.config/qutebrowser/misc/userscripts/readability b/.config/qutebrowser/misc/userscripts/readability new file mode 100755 index 0000000..d0ef437 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/readability @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# +# Executes python-readability on current page and opens the summary as new tab. +# +# Depends on the python-readability package, or its fork: +# +# - https://github.com/buriy/python-readability +# - https://github.com/bookieio/breadability +# +# Usage: +# :spawn --userscript readability +# +from __future__ import absolute_import +import codecs, os + +tmpfile = os.path.join( + os.environ.get('QUTE_DATA_DIR', + os.path.expanduser('~/.local/share/qutebrowser')), + 'userscripts/readability.html') + +if not os.path.exists(os.path.dirname(tmpfile)): + os.makedirs(os.path.dirname(tmpfile)) + +with codecs.open(os.environ['QUTE_HTML'], 'r', 'utf-8') as source: + data = source.read() + + try: + from breadability.readable import Article as reader + doc = reader(data) + content = doc.readable + except ImportError: + from readability import Document + doc = Document(data) + content = doc.summary().replace('<html>', '<html><head><title>%s</title></head>' % doc.title()) + + with codecs.open(tmpfile, 'w', 'utf-8') as target: + target.write('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />') + target.write(content) + + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('open -t %s' % tmpfile) diff --git a/.config/qutebrowser/misc/userscripts/ripbang b/.config/qutebrowser/misc/userscripts/ripbang new file mode 100755 index 0000000..b35ff77 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/ripbang @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# +# Adds DuckDuckGo bang as searchengine. +# +# Usage: +# :spawn --userscript ripbang [bang]... +# +# Example: +# :spawn --userscript ripbang amazon maps +# + +from __future__ import print_function +import os, re, requests, sys + +try: + from urllib.parse import unquote +except ImportError: + from urllib import unquote + +for argument in sys.argv[1:]: + bang = '!' + argument + r = requests.get('https://duckduckgo.com/', + params={'q': bang + ' SEARCHTEXT'}) + + searchengine = unquote(re.search("url=[^']+", r.text).group(0)) + searchengine = searchengine.replace('url=', '') + searchengine = searchengine.replace('/l/?kh=-1&uddg=', '') + searchengine = searchengine.replace('SEARCHTEXT', '{}') + + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as fifo: + fifo.write('set searchengines %s %s' % (bang, searchengine)) + else: + print('%s %s' % (bang, searchengine)) diff --git a/.config/qutebrowser/misc/userscripts/rss b/.config/qutebrowser/misc/userscripts/rss new file mode 100755 index 0000000..f8feebe --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/rss @@ -0,0 +1,122 @@ +#!/bin/sh + +# Copyright 2016 Jan Verbeek (blyxxyz) <ring@openmailbox.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +# This script keeps track of URLs in RSS feeds and opens new ones. +# New feeds can be added with ':spawn -u /path/to/userscripts/rss add' or +# ':spawn -u /path/to/userscripts/rss <url>'. +# New items can be opened with ':spawn -u /path/to/userscripts/rss'. +# The script doesn't really parse XML, and searches for things that look like +# item links. It might open things that aren't real links, and it might miss +# real links. + +config_dir="$HOME/.qute-rss" + +add_feed () { + touch "feeds" + if grep -Fq "$1" "feeds"; then + notice "$1 is saved already." + else + printf '%s\n' "$1" >> "feeds" + fi +} + +# Show an error message and exit +fail () { + echo "message-error '$*'" > "$QUTE_FIFO" + exit 1 +} + +# Get a sorted list of item URLs from a RSS feed +get_items () { + $curl "$@" | grep "$text_only" -zo -e '<guid[^<>]*>[^<>]*</guid>' \ + -e '<link[^<>]*>[^<>]*</link>' \ + -e '<link[^<>]*href="[^"]*"' | + grep "$text_only" -o 'http[^<>"]*' | sort | uniq +} + +# Show an info message +notice () { + echo "message-info '$*'" > "$QUTE_FIFO" +} + +# Update a database of a feed and open new URLs +read_items () { + cd read_urls || return 1 + feed_file="$(echo "$1" | tr -d /)" + feed_temp_file="$(mktemp "$feed_file.tmp.XXXXXXXXXX")" + feed_new_items="$(mktemp "$feed_file.new.XXXXXXXXXX")" + get_items "$1" > "$feed_temp_file" + if [ ! -s "$feed_temp_file" ]; then + notice "No items found for $1." + rm "$feed_temp_file" "$feed_new_items" + elif [ ! -f "$feed_file" ]; then + notice "$1 is a new feed. All items will be marked as read." + mv "$feed_temp_file" "$feed_file" + rm "$feed_new_items" + else + sort -o "$feed_file" "$feed_file" + comm -2 -3 "$feed_temp_file" "$feed_file" | tee "$feed_new_items" + cat "$feed_new_items" >> "$feed_file" + sort -o "$feed_file" "$feed_file" + rm "$feed_temp_file" "$feed_new_items" + fi | while read -r item; do + echo "open -t $item" > "$QUTE_FIFO" + done +} + +if [ ! -d "$config_dir/read_urls" ]; then + notice "Creating configuration directory." + mkdir -p "$config_dir/read_urls" +fi + +cd "$config_dir" || exit 1 + +if [ $# != 0 ]; then + for arg in "$@"; do + if [ "$arg" = "add" ]; then + add_feed "$QUTE_URL" + else + add_feed "$arg" + fi + done + exit +fi + +if [ ! -f "feeds" ]; then + fail "Add feeds by running ':spawn -u rss add' or ':spawn -u rss <url>'." +fi + +if curl --version >&-; then + curl="curl -sL" +elif wget --version >&-; then + curl="wget -qO -" +else + fail "Either curl or wget is needed to run this script." +fi + +# Detect GNU grep so we can force it to treat everything as text +if < /dev/null grep --help 2>&1 | grep -q -- -a; then + text_only="-a" +fi + +while read -r feed_url; do + read_items "$feed_url" & +done < "$config_dir/feeds" + +wait diff --git a/.config/qutebrowser/misc/userscripts/taskadd b/.config/qutebrowser/misc/userscripts/taskadd new file mode 100755 index 0000000..36e1c2c --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/taskadd @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# +# Behavior: +# Userscript for qutebrowser which adds a task to taskwarrior. +# If run as a command (:spawn --userscript taskadd), it creates a new task +# with the description equal to the current page title and annotates it with +# the current page url. Additional arguments are passed along so you can add +# mods to the task (e.g. priority, due date, tags). +# +# Example: +# :spawn --userscript taskadd due:eod pri:H +# +# To enable passing along extra args, I suggest using a mapping like: +# :bind <somekey> set-cmd-text -s :spawn --userscript taskadd +# +# If run from hint mode, it uses the selected hint text as the description +# and the selected hint url as the annotation. +# +# Ryan Roden-Corrent (rcorre), 2016 +# Any feedback is welcome! +# +# For more info on Taskwarrior, see http://taskwarrior.org/ + +# use either the current page title or the hint text as the task description +[[ $QUTE_MODE == 'hints' ]] && title=$QUTE_SELECTED_TEXT || title=$QUTE_TITLE + +# try to add the task and grab the output +if msg="$(task add "$title" "$*" 2>&1)"; then + # annotate the new task with the url, send the output back to the browser + task +LATEST annotate "$QUTE_URL" + echo "message-info '$(echo "$msg" | head -n 1)'" >> "$QUTE_FIFO" +else + echo "message-error '$(echo "$msg" | head -n 1)'" >> "$QUTE_FIFO" +fi diff --git a/.config/qutebrowser/misc/userscripts/tor_identity b/.config/qutebrowser/misc/userscripts/tor_identity new file mode 100755 index 0000000..93b6d41 --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/tor_identity @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2018 jnphilipp <mail@jnphilipp.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +# Change your tor identity. +# +# Set a hotkey to launch this script, then: +# :bind ti spawn --userscript tor_identity PASSWORD +# +# Use the hotkey to change your tor identity, press 'ti' to change it. +# https://stem.torproject.org/faq.html#how-do-i-request-a-new-identity-from-tor +# + +import os +import sys + +try: + from stem import Signal + from stem.control import Controller +except ImportError: + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as f: + f.write('message-error "Failed to import stem."') + else: + print('Failed to import stem.') + + +password = sys.argv[1] +with Controller.from_port(port=9051) as controller: + controller.authenticate(password) + controller.signal(Signal.NEWNYM) + if os.getenv('QUTE_FIFO'): + with open(os.environ['QUTE_FIFO'], 'w') as f: + f.write('message-info "Tor identity changed."') + else: + print('Tor identity changed.') diff --git a/.config/qutebrowser/misc/userscripts/view_in_mpv b/.config/qutebrowser/misc/userscripts/view_in_mpv new file mode 100755 index 0000000..16603bd --- /dev/null +++ b/.config/qutebrowser/misc/userscripts/view_in_mpv @@ -0,0 +1,143 @@ +#!/usr/bin/env bash +# +# Behavior: +# Userscript for qutebrowser which views the current web page in mpv using +# sensible mpv-flags. While viewing the page in MPV, all <video>, <embed>, +# and <object> tags in the original page are temporarily removed. Clicking on +# such a removed video restores the respective video. +# +# In order to use this script, just start it using `spawn --userscript` from +# qutebrowser. I recommend using an alias, e.g. put this in the +# [alias]-section of qutebrowser.conf: +# +# mpv = spawn --userscript /path/to/view_in_mpv +# +# Background: +# Most of my machines are too slow to play youtube videos using html5, but +# they work fine in mpv (and mpv has further advantages like video scaling, +# etc). Of course, I don't want the video to be played (or even to be +# downloaded) twice — in MPV and in qwebkit. So I often close the tab after +# opening it in mpv. However, I actually want to keep the rest of the page +# (comments and video suggestions), i.e. only the videos should disappear +# when mpv is started. And that's precisely what the present script does. +# +# Thorsten Wißmann, 2015 (thorsten` on freenode) +# Any feedback is welcome! + +set -e + +if [ -z "$QUTE_FIFO" ] ; then + cat 1>&2 <<EOF +Error: $0 can not be run as a standalone script. + +It is a qutebrowser userscript. In order to use it, call it using +'spawn --userscript' as described in qute://help/userscripts.html +EOF + exit 1 +fi + +msg() { + local cmd="$1" + shift + local msg="$*" + if [ -z "$QUTE_FIFO" ] ; then + echo "$cmd: $msg" >&2 + else + echo "message-$cmd '${msg//\'/\\\'}'" >> "$QUTE_FIFO" + fi +} + +MPV_COMMAND=${MPV_COMMAND:-mpv} +# Warning: spaces in single flags are not supported +MPV_FLAGS=${MPV_FLAGS:- --force-window --no-terminal --keep-open=yes --ytdl} +IFS=" " read -r -a video_command <<< "$MPV_COMMAND $MPV_FLAGS" + +js() { +cat <<EOF + + function descendantOfTagName(child, ancestorTagName) { + // tells whether child has some (proper) ancestor + // with the tag name ancestorTagName + while (child.parentNode != null) { + child = child.parentNode; + if (typeof child.tagName === 'undefined') break; + if (child.tagName.toUpperCase() == ancestorTagName.toUpperCase()) { + return true; + } + } + return false; + } + + var App = {}; + + var all_videos = []; + all_videos.push.apply(all_videos, document.getElementsByTagName("video")); + all_videos.push.apply(all_videos, document.getElementsByTagName("object")); + all_videos.push.apply(all_videos, document.getElementsByTagName("embed")); + App.backup_videos = Array(); + App.all_replacements = Array(); + for (i = 0; i < all_videos.length; i++) { + var video = all_videos[i]; + if (descendantOfTagName(video, "object")) { + // skip tags that are contained in an object, because we hide + // the object anyway. + continue; + } + var replacement = document.createElement("div"); + replacement.innerHTML = " + <p style=\\"margin-bottom: 0.5em\\"> + Opening page with: + <span style=\\"font-family: monospace;\\">${video_command[*]}</span> + </p> + <p> + In order to restore this particular video + <a style=\\"font-weight: bold; + color: white; + background: transparent; + \\" + onClick=\\"restore_video(this, " + i + ");\\" + href=\\"javascript: restore_video(this, " + i + ")\\" + >click here</a>. + </p> + "; + replacement.style.position = "relative"; + replacement.style.zIndex = "100003000000"; + replacement.style.fontSize = "1rem"; + replacement.style.textAlign = "center"; + replacement.style.verticalAlign = "middle"; + replacement.style.height = "100%"; + replacement.style.background = "#101010"; + replacement.style.color = "white"; + replacement.style.border = "4px dashed #545454"; + replacement.style.padding = "2em"; + replacement.style.margin = "auto"; + App.all_replacements[i] = replacement; + App.backup_videos[i] = video; + video.parentNode.replaceChild(replacement, video); + } + + function restore_video(obj, index) { + obj = App.all_replacements[index]; + video = App.backup_videos[index]; + console.log(video); + obj.parentNode.replaceChild(video, obj); + } + + /** force repainting the video, thanks to: + * http://martinwolf.org/2014/06/10/force-repaint-of-an-element-with-javascript/ + */ + var siteHeader = document.getElementById('header'); + siteHeader.style.display='none'; + siteHeader.offsetHeight; // no need to store this anywhere, the reference is enough + siteHeader.style.display='block'; + +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} +echo "jseval -q $(printjs)" >> "$QUTE_FIFO" + +msg info "Opening $QUTE_URL with mpv" +"${video_command[@]}" "$@" "$QUTE_URL" diff --git a/.config/qutebrowser/nord-qutebrowser.py b/.config/qutebrowser/nord-qutebrowser.py new file mode 100644 index 0000000..9dd9064 --- /dev/null +++ b/.config/qutebrowser/nord-qutebrowser.py @@ -0,0 +1,336 @@ +nord = { + # Polar Night + 'nord0': '#2e3440', + 'nord1': '#3b4252', + 'nord2': '#434c5e', + 'nord3': '#4c566a', + # Snow Storm + 'nord4': '#d8dee9', + 'nord5': '#e5e9f0', + 'nord6': '#eceff4', + # Frost + 'nord7': '#8fbcbb', + 'nord8': '#88c0d0', + 'nord9': '#81a1c1', + 'nord10': '#5e81ac', + # Aurora + 'nord11': '#bf616a', + 'nord12': '#d08770', + 'nord13': '#ebcb8b', + 'nord14': '#a3be8c', + 'nord15': '#b48ead', +} + +## Background color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.bg = nord['nord0'] + +## Bottom border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.bottom = nord['nord0'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.category.border.top = nord['nord0'] + +## Foreground color of completion widget category headers. +## Type: QtColor +c.colors.completion.category.fg = nord['nord5'] + +## Background color of the completion widget for even rows. +## Type: QssColor +c.colors.completion.even.bg = nord['nord1'] + +## Background color of the completion widget for odd rows. +## Type: QssColor +c.colors.completion.odd.bg = nord['nord1'] + +## Text color of the completion widget. +## Type: QtColor +c.colors.completion.fg = nord['nord4'] + +## Background color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.bg = nord['nord3'] + +## Bottom border color of the selected completion item. +## Type: QssColor +c.colors.completion.item.selected.border.bottom = nord['nord3'] + +## Top border color of the completion widget category headers. +## Type: QssColor +c.colors.completion.item.selected.border.top = nord['nord3'] + +## Foreground color of the selected completion item. +## Type: QtColor +c.colors.completion.item.selected.fg = nord['nord6'] + +## Foreground color of the matched text in the completion. +## Type: QssColor +c.colors.completion.match.fg = nord['nord13'] + +## Color of the scrollbar in completion view +## Type: QssColor +c.colors.completion.scrollbar.bg = nord['nord1'] + +## Color of the scrollbar handle in completion view. +## Type: QssColor +c.colors.completion.scrollbar.fg = nord['nord5'] + +## Background color for the download bar. +## Type: QssColor +c.colors.downloads.bar.bg = nord['nord0'] + +## Background color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.bg = nord['nord11'] + +## Foreground color for downloads with errors. +## Type: QtColor +c.colors.downloads.error.fg = nord['nord5'] + +## Color gradient stop for download backgrounds. +## Type: QtColor +c.colors.downloads.stop.bg = nord['nord15'] + +## Color gradient interpolation system for download backgrounds. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.downloads.system.bg = 'none' + +## Background color for hints. Note that you can use a `rgba(...)` value +## for transparency. +## Type: QssColor +c.colors.hints.bg = nord['nord13'] + +## Font color for hints. +## Type: QssColor +c.colors.hints.fg = nord['nord0'] + +## Font color for the matched part of hints. +## Type: QssColor +c.colors.hints.match.fg = nord['nord10'] + +## Background color of the keyhint widget. +## Type: QssColor +c.colors.keyhint.bg = nord['nord1'] + +## Text color for the keyhint widget. +## Type: QssColor +c.colors.keyhint.fg = nord['nord5'] + +## Highlight color for keys to complete the current keychain. +## Type: QssColor +c.colors.keyhint.suffix.fg = nord['nord13'] + +## Background color of an error message. +## Type: QssColor +c.colors.messages.error.bg = nord['nord11'] + +## Border color of an error message. +## Type: QssColor +c.colors.messages.error.border = nord['nord11'] + +## Foreground color of an error message. +## Type: QssColor +c.colors.messages.error.fg = nord['nord5'] + +## Background color of an info message. +## Type: QssColor +c.colors.messages.info.bg = nord['nord8'] + +## Border color of an info message. +## Type: QssColor +c.colors.messages.info.border = nord['nord8'] + +## Foreground color an info message. +## Type: QssColor +c.colors.messages.info.fg = nord['nord5'] + +## Background color of a warning message. +## Type: QssColor +c.colors.messages.warning.bg = nord['nord12'] + +## Border color of a warning message. +## Type: QssColor +c.colors.messages.warning.border = nord['nord12'] + +## Foreground color a warning message. +## Type: QssColor +c.colors.messages.warning.fg = nord['nord5'] + +## Background color for prompts. +## Type: QssColor +c.colors.prompts.bg = nord['nord2'] + +# ## Border used around UI elements in prompts. +# ## Type: String +c.colors.prompts.border = '1px solid ' + nord['nord0'] + +## Foreground color for prompts. +## Type: QssColor +c.colors.prompts.fg = nord['nord5'] + +## Background color for the selected item in filename prompts. +## Type: QssColor +c.colors.prompts.selected.bg = nord['nord3'] + +## Background color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode. +## Type: QssColor +c.colors.statusbar.caret.fg = nord['nord5'] + +## Background color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.bg = nord['nord15'] + +## Foreground color of the statusbar in caret mode with a selection. +## Type: QssColor +c.colors.statusbar.caret.selection.fg = nord['nord5'] + +## Background color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.bg = nord['nord2'] + +## Foreground color of the statusbar in command mode. +## Type: QssColor +c.colors.statusbar.command.fg = nord['nord5'] + +## Background color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.bg = nord['nord2'] + +## Foreground color of the statusbar in private browsing + command mode. +## Type: QssColor +c.colors.statusbar.command.private.fg = nord['nord5'] + +## Background color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.bg = nord['nord14'] + +## Foreground color of the statusbar in insert mode. +## Type: QssColor +c.colors.statusbar.insert.fg = nord['nord1'] + +## Background color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.bg = nord['nord0'] + +## Foreground color of the statusbar. +## Type: QssColor +c.colors.statusbar.normal.fg = nord['nord5'] + +## Background color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.bg = nord['nord10'] + +## Foreground color of the statusbar in passthrough mode. +## Type: QssColor +c.colors.statusbar.passthrough.fg = nord['nord5'] + +## Background color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.bg = nord['nord3'] + +## Foreground color of the statusbar in private browsing mode. +## Type: QssColor +c.colors.statusbar.private.fg = nord['nord5'] + +## Background color of the progress bar. +## Type: QssColor +c.colors.statusbar.progress.bg = nord['nord5'] + +## Foreground color of the URL in the statusbar on error. +## Type: QssColor +c.colors.statusbar.url.error.fg = nord['nord11'] + +## Default foreground color of the URL in the statusbar. +## Type: QssColor +c.colors.statusbar.url.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar for hovered links. +## Type: QssColor +c.colors.statusbar.url.hover.fg = nord['nord8'] + +## Foreground color of the URL in the statusbar on successful load +## (http). +## Type: QssColor +c.colors.statusbar.url.success.http.fg = nord['nord5'] + +## Foreground color of the URL in the statusbar on successful load +## (https). +## Type: QssColor +c.colors.statusbar.url.success.https.fg = nord['nord14'] + +## Foreground color of the URL in the statusbar when there's a warning. +## Type: QssColor +c.colors.statusbar.url.warn.fg = nord['nord12'] + +## Background color of the tab bar. +## Type: QtColor +c.colors.tabs.bar.bg = nord['nord3'] + +## Background color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.bg = nord['nord3'] + +## Foreground color of unselected even tabs. +## Type: QtColor +c.colors.tabs.even.fg = nord['nord5'] + +## Color for the tab indicator on errors. +## Type: QtColor +c.colors.tabs.indicator.error = nord['nord11'] + +## Color gradient start for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.start = nord['violet'] + +## Color gradient end for the tab indicator. +## Type: QtColor +# c.colors.tabs.indicator.stop = nord['orange'] + +## Color gradient interpolation system for the tab indicator. +## Type: ColorSystem +## Valid values: +## - rgb: Interpolate in the RGB color system. +## - hsv: Interpolate in the HSV color system. +## - hsl: Interpolate in the HSL color system. +## - none: Don't show a gradient. +c.colors.tabs.indicator.system = 'none' + +## Background color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.bg = nord['nord3'] + +## Foreground color of unselected odd tabs. +## Type: QtColor +c.colors.tabs.odd.fg = nord['nord5'] + +# ## Background color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.bg = nord['nord0'] + +# ## Foreground color of selected even tabs. +# ## Type: QtColor +c.colors.tabs.selected.even.fg = nord['nord5'] + +# ## Background color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.bg = nord['nord0'] + +# ## Foreground color of selected odd tabs. +# ## Type: QtColor +c.colors.tabs.selected.odd.fg = nord['nord5'] + +## Background color for webpages if unset (or empty to use the theme's +## color) +## Type: QtColor +# c.colors.webpage.bg = 'white' diff --git a/.config/qutebrowser/qsettings/QtProject.conf b/.config/qutebrowser/qsettings/QtProject.conf new file mode 100644 index 0000000..8777b99 --- /dev/null +++ b/.config/qutebrowser/qsettings/QtProject.conf @@ -0,0 +1,8 @@ +[FileDialog] +history=file:///home/archlinux/vgg, file:///home/archlinux/vgg/Downloads, file:///home/archlinux/vgg/Sandbox/Python/PlasmaPySandbox, file:///home/archlinux/vgg/Documents/Astro/UoH/Teaching/PlasmaPhysics/Lecture4, file:///home/archlinux/vgg/Requisition/LizzieNoakes +lastVisited=file:///home/archlinux/vgg/Requisition/LizzieNoakes +qtVersion=5.13.2 +shortcuts=file:, file:///home/archlinux/vgg +sidebarWidth=98 +treeViewHeader=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1\xec\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\0\xff\0\0\0\x1\0\0\0\0\0\0\0?\0\0\0\x1\0\0\0\0\0\0\0@\0\0\0\x1\0\0\0\0\0\0\0n\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff) +viewMode=Detail diff --git a/.config/qutebrowser/quickmarks b/.config/qutebrowser/quickmarks new file mode 100755 index 0000000..61cd7db --- /dev/null +++ b/.config/qutebrowser/quickmarks @@ -0,0 +1 @@ +bookmark file://${HOME}/bookmarks.html diff --git a/.config/qutebrowser/qutebrowser.conf b/.config/qutebrowser/qutebrowser.conf new file mode 100755 index 0000000..3fc85a8 --- /dev/null +++ b/.config/qutebrowser/qutebrowser.conf @@ -0,0 +1,1612 @@ +# vim: ft=dosini + +# Configfile for qutebrowser. +# +# This configfile is parsed by python's configparser in extended +# interpolation mode. The format is very INI-like, so there are +# categories like [general] with "key = value"-pairs. +# +# Note that you shouldn't add your own comments, as this file is +# regenerated every time the config is saved. +# +# Interpolation looks like ${value} or ${section:value} and will be +# replaced by the respective value. +# +# Some settings will expand environment variables. Note that, since +# interpolation is run first, you will need to escape the $ char as +# described below. +# +# This is the default config, so if you want to remove anything from +# here (as opposed to change/add), for example a key binding, set it to +# an empty value. +# +# You will need to escape the following values: +# - # at the start of the line (at the first position of the key) (\#) +# - $ in a value ($$) + + +# General/miscellaneous options. +[general] + +# ignore-case (IgnoreCase): +# Whether to find text on a page case-insensitively. +# true: Search case-insensitively +# false: Search case-sensitively +# smart: Search case-sensitively if there are capital chars +# Default: smart +ignore-case = smart + +# startpage (List of String): +# The default page(s) to open at the start, separated by commas. +# Default: https://start.duckduckgo.com +startpage = https://start.duckduckgo.com + +# yank-ignored-url-parameters (List of String): +# The URL parameters to strip with :yank url, separated by commas. +# Default: +# ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content +yank-ignored-url-parameters = ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content + +# default-open-dispatcher (String): +# The default program used to open downloads. Set to an empty string +# to use the default internal handler. +# Any {} in the string will be expanded to the filename, else the +# filename will be appended. +# Default: +default-open-dispatcher = + +# default-page (FuzzyUrl): +# The page to open if :open -t/-b/-w is used without URL. Use +# `about:blank` for a blank page. +# Default: ${startpage} +default-page = ${startpage} + +# auto-search (AutoSearch): +# Whether to start a search when something else than a URL is +# entered. +# naive: Use simple/naive check. +# dns: Use DNS requests (might be slow!). +# false: Never search automatically. +# Default: naive +auto-search = naive + +# auto-save-config (Bool): +# Whether to save the config automatically on quit. +# Valid values: true, false +# Default: true +auto-save-config = true + +# auto-save-interval (Int): +# How often (in milliseconds) to auto-save config/cookies/etc. +# Default: 15000 +auto-save-interval = 15000 + +# editor (ShellCommand): +# The editor (and arguments) to use for the `open-editor` command. +# The arguments get split like in a shell, so you can use `"` or `'` +# to quote them. +# `{}` gets replaced by the filename of the file to be edited. +# Default: gvim -f "{}" +editor = gvim -f "{}" + +# editor-encoding (Encoding): +# Encoding to use for editor. +# Default: utf-8 +editor-encoding = utf-8 + +# private-browsing (Bool): +# Open new windows in private browsing mode which does not record +# visited pages. +# Valid values: true, false +# Default: false +private-browsing = true + +# developer-extras (Bool): +# Enable extra tools for Web developers. +# This needs to be enabled for `:inspector` to work and also adds an +# _Inspect_ entry to the context menu. For QtWebEngine, see +# 'qutebrowser --help' instead. +# Valid values: true, false +# Default: false +developer-extras = true + +# print-element-backgrounds (Bool): +# Whether the background color and images are also drawn when the +# page is printed. +# This setting only works with Qt 5.8 or newer when using the +# QtWebEngine backend. +# Valid values: true, false +# Default: true +print-element-backgrounds = true + +# xss-auditing (Bool): +# Whether load requests should be monitored for cross-site scripting +# attempts. +# Suspicious scripts will be blocked and reported in the inspector's +# JavaScript console. Enabling this feature might have an impact on +# performance. +# Valid values: true, false +# Default: false +xss-auditing = false + +# default-encoding (String): +# Default encoding to use for websites. +# The encoding must be a string describing an encoding such as +# _utf-8_, _iso-8859-1_, etc. +# Default: iso-8859-1 +default-encoding = _utf-8_ + +# new-instance-open-target (String): +# How to open links in an existing instance if a new one is +# launched. +# tab: Open a new tab in the existing window and activate the +# window. +# tab-bg: Open a new background tab in the existing window and +# activate the window. +# tab-silent: Open a new tab in the existing window without +# activating the window. +# tab-bg-silent: Open a new background tab in the existing +# window without activating the window. +# window: Open in a new window. +# Default: tab +new-instance-open-target = tab + +# new-instance-open-target.window (String): +# Which window to choose when opening links as new tabs. +# first-opened: Open new tabs in the first (oldest) opened +# window. +# last-opened: Open new tabs in the last (newest) opened window. +# last-focused: Open new tabs in the most recently focused +# window. +# last-visible: Open new tabs in the most recently visible +# window. +# Default: last-focused +new-instance-open-target.window = last-focused + +# log-javascript-console (String): +# How to log javascript console messages. +# none: Don't log messages. +# debug: Log messages with debug level. +# info: Log messages with info level. +# Default: debug +log-javascript-console = debug + +# save-session (Bool): +# Whether to always save the open pages. +# Valid values: true, false +# Default: false +save-session = true + +# session-default-name (SessionName): +# The name of the session to save by default, or empty for the last +# loaded session. +# Default: +session-default-name = + +# url-incdec-segments (FlagList): +# The URL segments where `:navigate increment/decrement` will search +# for a number. +# Valid values: host, path, query, anchor +# Default: path,query +url-incdec-segments = path,query + + +# General options related to the user interface. +[ui] + +# history-session-interval (Int): +# The maximum time in minutes between two history items for them to +# be considered being from the same session. Use -1 to disable +# separation. +# Default: 30 +history-session-interval = 30 + +# zoom-levels (List of Perc): +# The available zoom levels, separated by commas. +# Default: +# 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% +zoom-levels = 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% + +# default-zoom (Perc): +# The default zoom level. +# Default: 100% +default-zoom = 100% + +# downloads-position (VerticalPosition): +# Where to show the downloaded files. +# Valid values: top, bottom +# Default: top +downloads-position = top + +# status-position (VerticalPosition): +# The position of the status bar. +# Valid values: top, bottom +# Default: bottom +status-position = bottom + +# message-timeout (Int): +# Time (in ms) to show messages in the statusbar for. +# Set to 0 to never clear messages. +# Default: 2000 +message-timeout = 2000 + +# message-unfocused (Bool): +# Whether to show messages in unfocused windows. +# Valid values: true, false +# Default: false +message-unfocused = false + +# confirm-quit (ConfirmQuit): +# Whether to confirm quitting the application. +# always: Always show a confirmation. +# multiple-tabs: Show a confirmation if multiple tabs are +# opened. +# downloads: Show a confirmation if downloads are running +# never: Never show a confirmation. +# Default: never +confirm-quit = never + +# zoom-text-only (Bool): +# Whether the zoom factor on a frame applies only to the text or to +# all content. +# Valid values: true, false +# Default: false +zoom-text-only = false + +# frame-flattening (Bool): +# Whether to expand each subframe to its contents. +# This will flatten all the frames to become one scrollable page. +# Valid values: true, false +# Default: false +frame-flattening = false + +# user-stylesheet (File): +# User stylesheet to use (absolute filename or filename relative to +# the config directory). Will expand environment variables. +# Default: +user-stylesheet = + +# hide-scrollbar (Bool): +# Hide the main scrollbar. +# Valid values: true, false +# Default: true +hide-scrollbar = true + +# smooth-scrolling (Bool): +# Whether to enable smooth scrolling for web pages. Note smooth +# scrolling does not work with the :scroll-px command. +# Valid values: true, false +# Default: false +smooth-scrolling = false + +# remove-finished-downloads (Int): +# Number of milliseconds to wait before removing finished downloads. +# Will not be removed if value is -1. +# Default: -1 +remove-finished-downloads = -1 + +# hide-statusbar (Bool): +# Whether to hide the statusbar unless a message is shown. +# Valid values: true, false +# Default: false +hide-statusbar = false + +# statusbar-padding (Padding): +# Padding for statusbar (top, bottom, left, right). +# Default: 1,1,0,0 +statusbar-padding = 1,1,0,0 + +# window-title-format (FormatString): +# The format to use for the window title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{id}`: The internal window ID of this window. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {perc}{title}{title_sep}qutebrowser +window-title-format = {perc}{title}{title_sep}qutebrowser + +# modal-js-dialog (Bool): +# Use standard JavaScript modal dialog for alert() and confirm() +# Valid values: true, false +# Default: false +modal-js-dialog = false + +# hide-wayland-decoration (Bool): +# Hide the window decoration when using wayland (requires restart) +# Valid values: true, false +# Default: false +hide-wayland-decoration = false + +# keyhint-blacklist (List of String): +# Keychains that shouldn't be shown in the keyhint dialog +# Globs are supported, so ';*' will blacklist all keychainsstarting +# with ';'. Use '*' to disable keyhints +# Default: +keyhint-blacklist = + +# keyhint-delay (Int): +# Time from pressing a key to seeing the keyhint dialog (ms) +# Default: 500 +keyhint-delay = 500 + +# prompt-radius (Int): +# The rounding radius for the edges of prompts. +# Default: 8 +prompt-radius = 8 + +# prompt-filebrowser (Bool): +# Show a filebrowser in upload/download prompts. +# Valid values: true, false +# Default: true +prompt-filebrowser = true + + +# Settings related to the network. +[network] + +# do-not-track (Bool): +# Value to send in the `DNT` header. +# Valid values: true, false +# Default: true +do-not-track = true + +# accept-language (String): +# Value to send in the `accept-language` header. +# Default: en-US,en +accept-language = en-US,en;q=0.5 + +# referer-header (String): +# Send the Referer header +# always: Always send. +# never: Never send; this is not recommended, as some sites may +# break. +# same-domain: Only send for the same domain. This will still +# protect your privacy, but shouldn't break any sites. +# Default: same-domain +referer-header = same-domain + +# user-agent (UserAgent): +# User agent to send. Empty to send the default. +# Default: +user-agent = Mozilla/5.0 + +# proxy (Proxy): +# The proxy to use. +# In addition to the listed values, you can use a `socks://...` or +# `http://...` URL. +# system: Use the system wide proxy. +# none: Don't use any proxy +# Default: system +proxy = system + +# proxy-dns-requests (Bool): +# Whether to send DNS requests over the configured proxy. +# Valid values: true, false +# Default: true +proxy-dns-requests = true + +# ssl-strict (BoolAsk): +# Whether to validate SSL handshakes. +# Valid values: true, false, ask +# Default: ask +ssl-strict = ask + +# dns-prefetch (Bool): +# Whether to try to pre-fetch DNS entries to speed up browsing. +# Valid values: true, false +# Default: true +dns-prefetch = true + +# custom-headers (HeaderDict): +# Set custom headers for qutebrowser HTTP requests. +# Default: +custom-headers = + +# netrc-file (File): +# Set location of a netrc-file for HTTP authentication. If empty, +# ~/.netrc is used. +# Default: +netrc-file = + + +# Options related to completion and command history. +[completion] + +# show (String): +# When to show the autocompletion window. +# always: Whenever a completion is available. +# auto: Whenever a completion is requested. +# never: Never. +# Default: always +show = always + +# download-path-suggestion (String): +# What to display in the download filename input. +# path: Show only the download path. +# filename: Show only download filename. +# both: Show download path and filename. +# Default: path +download-path-suggestion = path + +# timestamp-format (TimestampTemplate): +# How to format timestamps (e.g. for history) +# Default: %Y-%m-%d +timestamp-format = %Y-%m-%d + +# height (PercOrInt): +# The height of the completion, in px or as percentage of the +# window. +# Default: 50% +height = 50% + +# cmd-history-max-items (Int): +# How many commands to save in the command history. +# 0: no history / -1: unlimited +# Default: 100 +cmd-history-max-items = 100 + +# web-history-max-items (Int): +# How many URLs to show in the web history. +# 0: no history / -1: unlimited +# Default: 1000 +web-history-max-items = 1000 + +# quick-complete (Bool): +# Whether to move on to the next part when there's only one possible +# completion left. +# Valid values: true, false +# Default: true +quick-complete = true + +# shrink (Bool): +# Whether to shrink the completion to be smaller than the configured +# size if there are no scrollbars. +# Valid values: true, false +# Default: false +shrink = false + +# scrollbar-width (Int): +# Width of the scrollbar in the completion window (in px). +# Default: 12 +scrollbar-width = 12 + +# scrollbar-padding (Int): +# Padding of scrollbar handle in completion window (in px). +# Default: 2 +scrollbar-padding = 2 + + +# Options related to input modes. +[input] + +# timeout (Int): +# Timeout (in milliseconds) for ambiguous key bindings. +# If the current input forms both a complete match and a partial +# match, the complete match will be executed after this time. +# Default: 500 +timeout = 500 + +# partial-timeout (Int): +# Timeout (in milliseconds) for partially typed key bindings. +# If the current input forms only partial matches, the keystring +# will be cleared after this time. +# Default: 5000 +partial-timeout = 5000 + +# insert-mode-on-plugins (Bool): +# Whether to switch to insert mode when clicking flash and other +# plugins. +# Valid values: true, false +# Default: false +insert-mode-on-plugins = false + +# auto-leave-insert-mode (Bool): +# Whether to leave insert mode if a non-editable element is clicked. +# Valid values: true, false +# Default: true +auto-leave-insert-mode = true + +# auto-insert-mode (Bool): +# Whether to automatically enter insert mode if an editable element +# is focused after page load. +# Valid values: true, false +# Default: false +auto-insert-mode = false + +# forward-unbound-keys (String): +# Whether to forward unbound keys to the webview in normal mode. +# all: Forward all unbound keys. +# auto: Forward unbound non-alphanumeric keys. +# none: Don't forward any keys. +# Default: auto +forward-unbound-keys = auto + +# spatial-navigation (Bool): +# Enables or disables the Spatial Navigation feature. +# Spatial navigation consists in the ability to navigate between +# focusable elements in a Web page, such as hyperlinks and form +# controls, by using Left, Right, Up and Down arrow keys. For +# example, if a user presses the Right key, heuristics determine +# whether there is an element he might be trying to reach towards +# the right and which element he probably wants. +# Valid values: true, false +# Default: false +spatial-navigation = false + +# links-included-in-focus-chain (Bool): +# Whether hyperlinks should be included in the keyboard focus chain. +# Valid values: true, false +# Default: true +links-included-in-focus-chain = true + +# rocker-gestures (Bool): +# Whether to enable Opera-like mouse rocker gestures. This disables +# the context menu. +# Valid values: true, false +# Default: false +rocker-gestures = false + +# mouse-zoom-divider (Int): +# How much to divide the mouse wheel movements to translate them +# into zoom increments. +# Default: 512 +mouse-zoom-divider = 512 + + +# Configuration of the tab bar. +[tabs] + +# background-tabs (Bool): +# Whether to open new tabs (middleclick/ctrl+click) in background. +# Valid values: true, false +# Default: false +background-tabs = false + +# select-on-remove (SelectOnRemove): +# Which tab to select when the focused tab is removed. +# prev: Select the tab which came before the closed one (left in +# horizontal, above in vertical). +# next: Select the tab which came after the closed one (right in +# horizontal, below in vertical). +# last-used: Select the previously selected tab. +# Default: next +select-on-remove = next + +# new-tab-position (NewTabPosition): +# How new tabs are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: next +new-tab-position = next + +# new-tab-position-explicit (NewTabPosition): +# How new tabs opened explicitly are positioned. +# prev: Before the current tab. +# next: After the current tab. +# first: At the beginning. +# last: At the end. +# Default: last +new-tab-position-explicit = last + +# last-close (String): +# Behavior when the last tab is closed. +# ignore: Don't do anything. +# blank: Load a blank page. +# startpage: Load the start page. +# default-page: Load the default page. +# close: Close the window. +# Default: ignore +last-close = ignore + +# show (String): +# When to show the tab bar +# always: Always show the tab bar. +# never: Always hide the tab bar. +# multiple: Hide the tab bar if only one tab is open. +# switching: Show the tab bar when switching tabs. +# Default: always +show = always + +# show-switching-delay (Int): +# Time to show the tab bar before hiding it when tabs->show is set +# to 'switching'. +# Default: 800 +show-switching-delay = 800 + +# wrap (Bool): +# Whether to wrap when changing tabs. +# Valid values: true, false +# Default: true +wrap = true + +# movable (Bool): +# Whether tabs should be movable. +# Valid values: true, false +# Default: true +movable = true + +# close-mouse-button (String): +# On which mouse button to close tabs. +# right: Close tabs on right-click. +# middle: Close tabs on middle-click. +# none: Don't close tabs using the mouse. +# Default: middle +close-mouse-button = middle + +# position (Position): +# The position of the tab bar. +# Valid values: top, bottom, left, right +# Default: top +position = top + +# show-favicons (Bool): +# Whether to show favicons in the tab bar. +# Valid values: true, false +# Default: true +show-favicons = true + +# favicon-scale (Float): +# Scale for favicons in the tab bar. The tab size is unchanged, so +# big favicons also require extra `tabs->padding`. +# Default: 1.0 +favicon-scale = 1.0 + +# width (PercOrInt): +# The width of the tab bar if it's vertical, in px or as percentage +# of the window. +# Default: 20% +width = 20% + +# pinned-width (Int): +# The width for pinned tabs with a horizontal tabbar, in px. +# Default: 43 +pinned-width = 43 + +# indicator-width (Int): +# Width of the progress indicator (0 to disable). +# Default: 3 +indicator-width = 3 + +# tabs-are-windows (Bool): +# Whether to open windows instead of tabs. +# Valid values: true, false +# Default: false +tabs-are-windows = false + +# title-format (FormatString): +# The format to use for the tab title. The following placeholders +# are defined: +# * `{perc}`: The percentage as a string like `[10%]`. +# * `{perc_raw}`: The raw percentage, e.g. `10` +# * `{title}`: The title of the current web page +# * `{title_sep}`: The string ` - ` if a title is set, empty +# otherwise. +# * `{index}`: The index of this tab. +# * `{id}`: The internal tab ID of this tab. +# * `{scroll_pos}`: The page scroll position. +# * `{host}`: The host of the current web page. +# * `{backend}`: Either 'webkit' or 'webengine' +# * `{private}` : Indicates when private mode is enabled. +# Default: {index}: {title} +title-format = {index}: {title} + +# title-format-pinned (FormatString): +# The format to use for the tab title for pinned tabs. The same +# placeholders like for title-format are defined. +# Default: {index} +title-format-pinned = {index} + +# title-alignment (TextAlignment): +# Alignment of the text inside of tabs +# Valid values: left, right, center +# Default: left +title-alignment = left + +# mousewheel-tab-switching (Bool): +# Switch between tabs using the mouse wheel. +# Valid values: true, false +# Default: true +mousewheel-tab-switching = true + +# padding (Padding): +# Padding for tabs (top, bottom, left, right). +# Default: 0,0,5,5 +padding = 0,0,5,5 + +# indicator-padding (Padding): +# Padding for indicators (top, bottom, left, right). +# Default: 2,2,0,4 +indicator-padding = 2,2,0,4 + + +# Settings related to cache and storage. +[storage] + +# download-directory (Directory): +# The directory to save downloads to. An empty value selects a +# sensible os-specific default. Will expand environment variables. +# Default: +download-directory = + +# prompt-download-directory (Bool): +# Whether to prompt the user for the download location. +# If set to false, 'download-directory' will be used. +# Valid values: true, false +# Default: true +prompt-download-directory = true + +# remember-download-directory (Bool): +# Whether to remember the last used download directory. +# Valid values: true, false +# Default: true +remember-download-directory = true + +# maximum-pages-in-cache (Int): +# The maximum number of pages to hold in the global memory page +# cache. +# The Page Cache allows for a nicer user experience when navigating +# forth or back to pages in the forward/back history, by pausing and +# resuming up to _n_ pages. +# For more information about the feature, please refer to: +# http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ +# Default: 0 +maximum-pages-in-cache = 0 + +# offline-web-application-cache (Bool): +# Whether support for the HTML 5 web application cache feature is +# enabled. +# An application cache acts like an HTTP cache in some sense. For +# documents that use the application cache via JavaScript, the +# loader engine will first ask the application cache for the +# contents, before hitting the network. +# The feature is described in details at: +# http://dev.w3.org/html5/spec/Overview.html#appcache +# Valid values: true, false +# Default: true +offline-web-application-cache = true + +# local-storage (Bool): +# Whether support for HTML 5 local storage and Web SQL is enabled. +# Valid values: true, false +# Default: true +local-storage = true + +# cache-size (Int): +# Size of the HTTP network cache. Empty to use the default value. +# Default: +cache-size = + + +# Loaded plugins/scripts and allowed actions. +[content] + +# allow-images (Bool): +# Whether images are automatically loaded in web pages. +# Valid values: true, false +# Default: true +allow-images = true + +# allow-javascript (Bool): +# Enables or disables the running of JavaScript programs. +# Valid values: true, false +# Default: true +allow-javascript = true + +# allow-plugins (Bool): +# Enables or disables plugins in Web pages. +# Qt plugins with a mimetype such as "application/x-qt-plugin" are +# not affected by this setting. +# Valid values: true, false +# Default: false +allow-plugins = true + +# webgl (Bool): +# Enables or disables WebGL. +# Valid values: true, false +# Default: true +webgl = true + +# hyperlink-auditing (Bool): +# Enable or disable hyperlink auditing (<a ping>). +# Valid values: true, false +# Default: false +hyperlink-auditing = false + +# geolocation (BoolAsk): +# Allow websites to request geolocations. +# Valid values: true, false, ask +# Default: ask +geolocation = false + +# notifications (BoolAsk): +# Allow websites to show notifications. +# Valid values: true, false, ask +# Default: ask +notifications = ask + +# media-capture (BoolAsk): +# Allow websites to record audio/video. +# Valid values: true, false, ask +# Default: ask +media-capture = ask + +# javascript-can-open-windows-automatically (Bool): +# Whether JavaScript programs can open new windows without user +# interaction. +# Valid values: true, false +# Default: false +javascript-can-open-windows-automatically = true + +# javascript-can-close-windows (Bool): +# Whether JavaScript programs can close windows. +# Valid values: true, false +# Default: false +javascript-can-close-windows = true + +# javascript-can-access-clipboard (Bool): +# Whether JavaScript programs can read or write to the clipboard. +# With QtWebEngine, writing the clipboard as response to a user +# interaction is always allowed. +# Valid values: true, false +# Default: false +javascript-can-access-clipboard = true + +# ignore-javascript-prompt (Bool): +# Whether all javascript prompts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-prompt = true + +# ignore-javascript-alert (Bool): +# Whether all javascript alerts should be ignored. +# Valid values: true, false +# Default: false +ignore-javascript-alert = true + +# local-content-can-access-remote-urls (Bool): +# Whether locally loaded documents are allowed to access remote +# urls. +# Valid values: true, false +# Default: false +local-content-can-access-remote-urls = false + +# local-content-can-access-file-urls (Bool): +# Whether locally loaded documents are allowed to access other local +# urls. +# Valid values: true, false +# Default: true +local-content-can-access-file-urls = true + +# cookies-accept (String): +# Control which cookies to accept. +# all: Accept all cookies. +# no-3rdparty: Accept cookies from the same origin only. +# no-unknown-3rdparty: Accept cookies from the same origin only, +# unless a cookie is already set for the domain. +# never: Don't accept cookies at all. +# Default: no-3rdparty +cookies-accept = all + +# cookies-store (Bool): +# Whether to store cookies. Note this option needs a restart with +# QtWebEngine on Qt < 5.9. +# Valid values: true, false +# Default: true +cookies-store = true + +# host-block-lists (List of Url): +# List of URLs of lists which contain hosts to block. +# The file can be in one of the following formats: +# - An '/etc/hosts'-like file +# - One host per line +# - A zip-file of any of the above, with either only one file, or a +# file named 'hosts' (with any extension). +# Default: +# https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext +host-block-lists = https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext + +# host-blocking-enabled (Bool): +# Whether host blocking is enabled. +# Valid values: true, false +# Default: true +host-blocking-enabled = false + +# host-blocking-whitelist (List of String): +# List of domains that should always be loaded, despite being +# ad-blocked. +# Domains may contain * and ? wildcards and are otherwise required +# to exactly match the requested domain. +# Local domains are always exempt from hostblocking. +# Default: piwik.org +host-blocking-whitelist = piwik.org,next-episode.net,churchmilitant.tv,load.sumome.com,s7.addthis.com,www.google-analytics.com,ssl.google-analytics.com,referrer.disqus.com,m.addthisedge.com,m.addthis.com,stats.g.doubleclick.net,*.addthis.com,lukesmith.xyz + +# enable-pdfjs (Bool): +# Enable pdf.js to view PDF files in the browser. +# Note that the files can still be downloaded by clicking the +# download button in the pdf.js viewer. +# Valid values: true, false +# Default: false +enable-pdfjs = false + + +# Hinting settings. +[hints] + +# border (String): +# CSS border value for hints. +# Default: 1px solid #E3BE23 +border = 1px solid #E3BE23 + +# mode (String): +# Mode to use for hints. +# number: Use numeric hints. (In this mode you can also type +# letters form the hinted element to filter and reduce the number of +# elements that are hinted.) +# letter: Use the chars in the hints -> chars setting. +# word: Use hints words based on the html elements and the extra +# words. +# Default: letter +mode = number + +# chars (UniqueCharString): +# Chars used for hint strings. +# Default: asdfghjkl +chars = asdfghjkl + +# min-chars (Int): +# Minimum number of chars used for hint strings. +# Default: 1 +min-chars = 1 + +# scatter (Bool): +# Whether to scatter hint key chains (like Vimium) or not (like +# dwb). Ignored for number hints. +# Valid values: true, false +# Default: true +scatter = true + +# uppercase (Bool): +# Make chars in hint strings uppercase. +# Valid values: true, false +# Default: false +uppercase = false + +# dictionary (File): +# The dictionary file to be used by the word hints. +# Default: /usr/share/dict/words +dictionary = /usr/share/dict/words + +# auto-follow (String): +# Controls when a hint can be automatically followed without the +# user pressing Enter. +# always: Auto-follow whenever there is only a single hint on a +# page. +# unique-match: Auto-follow whenever there is a unique non-empty +# match in either the hint string (word mode) or filter (number +# mode). +# full-match: Follow the hint when the user typed the whole hint +# (letter, word or number mode) or the element's text (only in +# number mode). +# never: The user will always need to press Enter to follow a +# hint. +# Default: unique-match +auto-follow = unique-match + +# auto-follow-timeout (Int): +# A timeout (in milliseconds) to inhibit normal-mode key bindings +# after a successful auto-follow. +# Default: 0 +auto-follow-timeout = 0 + +# next-regexes (List of Regex): +# A comma-separated list of regexes to use for 'next' links. +# Default: +# \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b +next-regexes = \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b + +# prev-regexes (List of Regex): +# A comma-separated list of regexes to use for 'prev' links. +# Default: \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b +prev-regexes = \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b + +# find-implementation (String): +# Which implementation to use to find elements to hint. +# javascript: Better but slower +# python: Slightly worse but faster +# Default: python +find-implementation = python + +# hide-unmatched-rapid-hints (Bool): +# Controls hiding unmatched hints in rapid mode. +# Valid values: true, false +# Default: true +hide-unmatched-rapid-hints = true + + +# Definitions of search engines which can be used via the address bar. +# The searchengine named `DEFAULT` is used when `general -> auto-search` +# is true and something else than a URL was entered to be opened. Other +# search engines can be used by prepending the search engine name to the +# search term, e.g. `:open google qutebrowser`. The string `{}` will be +# replaced by the search term, use `{{` and `}}` for literal `{`/`}` +# signs. +[searchengines] +DEFAULT = https://duckduckgo.com/?q={} + + +# Aliases for commands. +# By default, no aliases are defined. Example which adds a new command +# `:qtb` to open qutebrowsers website: +# `qtb = open https://www.qutebrowser.org/` +[aliases] +qtb = open https://www.qutebrowser.org/ +mbt = open t https://signin1.bt.com/login/emailloginform +Ombt = open -t https://signin1.bt.com/login/emailloginform +nx = open http://next-episode.net/ +Onx = open -t http://next-episode.net/ +gk = open https://gameknot.com/ +Ogk = open -t https://gameknot.com/ +yt = open https://youtube.com +Oyt = open -t https://youtube.com +Y = open http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +OY = open -t http://www.cosmos.esa.int/web/xmm-newton/current-calibration-files +1337 = open https://1337x.to/home +O1337 = open -t https://1337x.to/home +ez = open https://eztv.ag +Oez = open -t https://eztv.ag +tz = open https://extratorrent.ag +Otz = open -t https://extratorrent.ag +tpb = open https://thepiratebay.org/ +Otpb = open -t https://thepiratebay.org/ +Nm = open https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa +ONm = open -t https://netmail.herts.ac.uk/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fnetmail.herts.ac.uk%2fowa + + +# Colors used in the UI. +# A value can be in one of the following format: +# * `#RGB`/`#RRGGBB`/`#RRRGGGBBB`/`#RRRRGGGGBBBB` +# * An SVG color name as specified in http://www.w3.org/TR/SVG/types.html#ColorKeywords[the W3C specification]. +# * transparent (no color) +# * `rgb(r, g, b)` / `rgba(r, g, b, a)` (values 0-255 or percentages) +# * `hsv(h, s, v)` / `hsva(h, s, v, a)` (values 0-255, hue 0-359) +# * A gradient as explained in http://doc.qt.io/qt-5/stylesheet-reference.html#list-of-property-types[the Qt documentation] under ``Gradient''. +# A *.system value determines the color system to use for color +# interpolation between similarly-named *.start and *.stop entries, +# regardless of how they are defined in the options. Valid values are +# 'rgb', 'hsv', and 'hsl'. +# The `hints.*` values are a special case as they're real CSS colors, not Qt-CSS colors. There, for a gradient, you need to use `-webkit-gradient`, see https://www.webkit.org/blog/175/introducing-css-gradients/[the WebKit documentation]. +[colors] + +# completion.fg (QtColor): +# Text color of the completion widget. +# Default: white +completion.fg = white + +# completion.bg (QssColor): +# Background color of the completion widget. +# Default: #333333 +completion.bg = #333333 + +# completion.alternate-bg (QssColor): +# Alternating background color of the completion widget. +# Default: #444444 +completion.alternate-bg = #444444 + +# completion.category.fg (QtColor): +# Foreground color of completion widget category headers. +# Default: white +completion.category.fg = white + +# completion.category.bg (QssColor): +# Background color of the completion widget category headers. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, +# stop:1 #505050) +completion.category.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050) + +# completion.category.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: black +completion.category.border.top = black + +# completion.category.border.bottom (QssColor): +# Bottom border color of the completion widget category headers. +# Default: ${completion.category.border.top} +completion.category.border.bottom = ${completion.category.border.top} + +# completion.item.selected.fg (QtColor): +# Foreground color of the selected completion item. +# Default: black +completion.item.selected.fg = black + +# completion.item.selected.bg (QssColor): +# Background color of the selected completion item. +# Default: #e8c000 +completion.item.selected.bg = #e8c000 + +# completion.item.selected.border.top (QssColor): +# Top border color of the completion widget category headers. +# Default: #bbbb00 +completion.item.selected.border.top = #bbbb00 + +# completion.item.selected.border.bottom (QssColor): +# Bottom border color of the selected completion item. +# Default: ${completion.item.selected.border.top} +completion.item.selected.border.bottom = ${completion.item.selected.border.top} + +# completion.match.fg (QssColor): +# Foreground color of the matched text in the completion. +# Default: #ff4444 +completion.match.fg = #ff4444 + +# completion.scrollbar.fg (QssColor): +# Color of the scrollbar handle in completion view. +# Default: ${completion.fg} +completion.scrollbar.fg = ${completion.fg} + +# completion.scrollbar.bg (QssColor): +# Color of the scrollbar in completion view +# Default: ${completion.bg} +completion.scrollbar.bg = ${completion.bg} + +# statusbar.fg (QssColor): +# Foreground color of the statusbar. +# Default: white +statusbar.fg = white + +# statusbar.bg (QssColor): +# Background color of the statusbar. +# Default: black +statusbar.bg = black + +# statusbar.fg.private (QssColor): +# Foreground color of the statusbar in private browsing mode. +# Default: ${statusbar.fg} +statusbar.fg.private = ${statusbar.fg} + +# statusbar.bg.private (QssColor): +# Background color of the statusbar in private browsing mode. +# Default: #666666 +statusbar.bg.private = #666666 + +# statusbar.fg.insert (QssColor): +# Foreground color of the statusbar in insert mode. +# Default: ${statusbar.fg} +statusbar.fg.insert = ${statusbar.fg} + +# statusbar.bg.insert (QssColor): +# Background color of the statusbar in insert mode. +# Default: darkgreen +statusbar.bg.insert = darkgreen + +# statusbar.fg.command (QssColor): +# Foreground color of the statusbar in command mode. +# Default: ${statusbar.fg} +statusbar.fg.command = ${statusbar.fg} + +# statusbar.bg.command (QssColor): +# Background color of the statusbar in command mode. +# Default: ${statusbar.bg} +statusbar.bg.command = ${statusbar.bg} + +# statusbar.fg.command.private (QssColor): +# Foreground color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.fg.private} +statusbar.fg.command.private = ${statusbar.fg.private} + +# statusbar.bg.command.private (QssColor): +# Background color of the statusbar in private browsing + command +# mode. +# Default: ${statusbar.bg.private} +statusbar.bg.command.private = ${statusbar.bg.private} + +# statusbar.fg.caret (QssColor): +# Foreground color of the statusbar in caret mode. +# Default: ${statusbar.fg} +statusbar.fg.caret = ${statusbar.fg} + +# statusbar.bg.caret (QssColor): +# Background color of the statusbar in caret mode. +# Default: purple +statusbar.bg.caret = purple + +# statusbar.fg.caret-selection (QssColor): +# Foreground color of the statusbar in caret mode with a selection +# Default: ${statusbar.fg} +statusbar.fg.caret-selection = ${statusbar.fg} + +# statusbar.bg.caret-selection (QssColor): +# Background color of the statusbar in caret mode with a selection +# Default: #a12dff +statusbar.bg.caret-selection = #a12dff + +# statusbar.progress.bg (QssColor): +# Background color of the progress bar. +# Default: white +statusbar.progress.bg = white + +# statusbar.url.fg (QssColor): +# Default foreground color of the URL in the statusbar. +# Default: ${statusbar.fg} +statusbar.url.fg = ${statusbar.fg} + +# statusbar.url.fg.success (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (http). +# Default: white +statusbar.url.fg.success = white + +# statusbar.url.fg.success.https (QssColor): +# Foreground color of the URL in the statusbar on successful load +# (https). +# Default: lime +statusbar.url.fg.success.https = lime + +# statusbar.url.fg.error (QssColor): +# Foreground color of the URL in the statusbar on error. +# Default: orange +statusbar.url.fg.error = orange + +# statusbar.url.fg.warn (QssColor): +# Foreground color of the URL in the statusbar when there's a +# warning. +# Default: yellow +statusbar.url.fg.warn = yellow + +# statusbar.url.fg.hover (QssColor): +# Foreground color of the URL in the statusbar for hovered links. +# Default: aqua +statusbar.url.fg.hover = aqua + +# tabs.fg.odd (QtColor): +# Foreground color of unselected odd tabs. +# Default: white +tabs.fg.odd = white + +# tabs.bg.odd (QtColor): +# Background color of unselected odd tabs. +# Default: grey +tabs.bg.odd = grey + +# tabs.fg.even (QtColor): +# Foreground color of unselected even tabs. +# Default: white +tabs.fg.even = white + +# tabs.bg.even (QtColor): +# Background color of unselected even tabs. +# Default: darkgrey +tabs.bg.even = darkgrey + +# tabs.fg.selected.odd (QtColor): +# Foreground color of selected odd tabs. +# Default: white +tabs.fg.selected.odd = white + +# tabs.bg.selected.odd (QtColor): +# Background color of selected odd tabs. +# Default: black +tabs.bg.selected.odd = black + +# tabs.fg.selected.even (QtColor): +# Foreground color of selected even tabs. +# Default: ${tabs.fg.selected.odd} +tabs.fg.selected.even = ${tabs.fg.selected.odd} + +# tabs.bg.selected.even (QtColor): +# Background color of selected even tabs. +# Default: ${tabs.bg.selected.odd} +tabs.bg.selected.even = ${tabs.bg.selected.odd} + +# tabs.bg.bar (QtColor): +# Background color of the tab bar. +# Default: #555555 +tabs.bg.bar = #555555 + +# tabs.indicator.start (QtColor): +# Color gradient start for the tab indicator. +# Default: #0000aa +tabs.indicator.start = #0000aa + +# tabs.indicator.stop (QtColor): +# Color gradient end for the tab indicator. +# Default: #00aa00 +tabs.indicator.stop = #00aa00 + +# tabs.indicator.error (QtColor): +# Color for the tab indicator on errors.. +# Default: #ff0000 +tabs.indicator.error = #ff0000 + +# tabs.indicator.system (ColorSystem): +# Color gradient interpolation system for the tab indicator. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +tabs.indicator.system = rgb + +# hints.fg (QssColor): +# Font color for hints. +# Default: black +hints.fg = black + +# hints.bg (QssColor): +# Background color for hints. Note that you can use a `rgba(...)` +# value for transparency. +# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, +# 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) +hints.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) + +# hints.fg.match (QssColor): +# Font color for the matched part of hints. +# Default: green +hints.fg.match = green + +# downloads.bg.bar (QssColor): +# Background color for the download bar. +# Default: black +downloads.bg.bar = black + +# downloads.fg.start (QtColor): +# Color gradient start for download text. +# Default: white +downloads.fg.start = white + +# downloads.bg.start (QtColor): +# Color gradient start for download backgrounds. +# Default: #0000aa +downloads.bg.start = #0000aa + +# downloads.fg.stop (QtColor): +# Color gradient end for download text. +# Default: ${downloads.fg.start} +downloads.fg.stop = ${downloads.fg.start} + +# downloads.bg.stop (QtColor): +# Color gradient stop for download backgrounds. +# Default: #00aa00 +downloads.bg.stop = #00aa00 + +# downloads.fg.system (ColorSystem): +# Color gradient interpolation system for download text. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.fg.system = rgb + +# downloads.bg.system (ColorSystem): +# Color gradient interpolation system for download backgrounds. +# rgb: Interpolate in the RGB color system. +# hsv: Interpolate in the HSV color system. +# hsl: Interpolate in the HSL color system. +# none: Don't show a gradient. +# Default: rgb +downloads.bg.system = rgb + +# downloads.fg.error (QtColor): +# Foreground color for downloads with errors. +# Default: white +downloads.fg.error = white + +# downloads.bg.error (QtColor): +# Background color for downloads with errors. +# Default: red +downloads.bg.error = red + +# webpage.bg (QtColor): +# Background color for webpages if unset (or empty to use the +# theme's color) +# Default: white +webpage.bg = white + +# keyhint.fg (QssColor): +# Text color for the keyhint widget. +# Default: #FFFFFF +keyhint.fg = #FFFFFF + +# keyhint.fg.suffix (CssColor): +# Highlight color for keys to complete the current keychain +# Default: #FFFF00 +keyhint.fg.suffix = #FFFF00 + +# keyhint.bg (QssColor): +# Background color of the keyhint widget. +# Default: rgba(0, 0, 0, 80%) +keyhint.bg = rgba(0, 0, 0, 80%) + +# messages.fg.error (QssColor): +# Foreground color of an error message. +# Default: white +messages.fg.error = white + +# messages.bg.error (QssColor): +# Background color of an error message. +# Default: red +messages.bg.error = red + +# messages.border.error (QssColor): +# Border color of an error message. +# Default: #bb0000 +messages.border.error = #bb0000 + +# messages.fg.warning (QssColor): +# Foreground color a warning message. +# Default: white +messages.fg.warning = white + +# messages.bg.warning (QssColor): +# Background color of a warning message. +# Default: darkorange +messages.bg.warning = darkorange + +# messages.border.warning (QssColor): +# Border color of an error message. +# Default: #d47300 +messages.border.warning = #d47300 + +# messages.fg.info (QssColor): +# Foreground color an info message. +# Default: white +messages.fg.info = white + +# messages.bg.info (QssColor): +# Background color of an info message. +# Default: black +messages.bg.info = black + +# messages.border.info (QssColor): +# Border color of an info message. +# Default: #333333 +messages.border.info = #333333 + +# prompts.fg (QssColor): +# Foreground color for prompts. +# Default: white +prompts.fg = white + +# prompts.bg (QssColor): +# Background color for prompts. +# Default: darkblue +prompts.bg = darkblue + +# prompts.selected.bg (QssColor): +# Background color for the selected item in filename prompts. +# Default: #308cc6 +prompts.selected.bg = #308cc6 + + +# Fonts used for the UI, with optional style/weight/size. +# * Style: `normal`/`italic`/`oblique` +# * Weight: `normal`, `bold`, `100`..`900` +# * Size: _number_ `px`/`pt` +[fonts] + +# _monospace (Font): +# Default monospace fonts. +# Default: xos4 Terminus, Terminus, Monospace, "DejaVu Sans Mono", +# Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", +# Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal +_monospace = Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal + +# completion (Font): +# Font used in the completion widget. +# Default: 8pt ${_monospace} +completion = 8pt ${_monospace} + +# completion.category (Font): +# Font used in the completion categories. +# Default: bold ${completion} +completion.category = bold ${completion} + +# tabbar (QtFont): +# Font used in the tab bar. +# Default: 8pt ${_monospace} +tabbar = 8pt ${_monospace} + +# statusbar (Font): +# Font used in the statusbar. +# Default: 8pt ${_monospace} +statusbar = 8pt ${_monospace} + +# downloads (Font): +# Font used for the downloadbar. +# Default: 8pt ${_monospace} +downloads = 8pt ${_monospace} + +# hints (Font): +# Font used for the hints. +# Default: bold 13px ${_monospace} +hints = bold 13px ${_monospace} + +# debug-console (QtFont): +# Font used for the debugging console. +# Default: 8pt ${_monospace} +debug-console = 8pt ${_monospace} + +# web-family-standard (FontFamily): +# Font family for standard fonts. +# Default: +web-family-standard = + +# web-family-fixed (FontFamily): +# Font family for fixed fonts. +# Default: +web-family-fixed = + +# web-family-serif (FontFamily): +# Font family for serif fonts. +# Default: +web-family-serif = + +# web-family-sans-serif (FontFamily): +# Font family for sans-serif fonts. +# Default: +web-family-sans-serif = + +# web-family-cursive (FontFamily): +# Font family for cursive fonts. +# Default: +web-family-cursive = + +# web-family-fantasy (FontFamily): +# Font family for fantasy fonts. +# Default: +web-family-fantasy = + +# web-size-minimum (Int): +# The hard minimum font size. +# Default: 0 +web-size-minimum = 0 + +# web-size-minimum-logical (Int): +# The minimum logical font size that is applied when zooming out. +# Default: 6 +web-size-minimum-logical = 6 + +# web-size-default (Int): +# The default font size for regular text. +# Default: 16 +web-size-default = 16 + +# web-size-default-fixed (Int): +# The default font size for fixed-pitch text. +# Default: 13 +web-size-default-fixed = 13 + +# keyhint (Font): +# Font used in the keyhint widget. +# Default: 8pt ${_monospace} +keyhint = 8pt ${_monospace} + +# messages.error (Font): +# Font used for error messages. +# Default: 8pt ${_monospace} +messages.error = 8pt ${_monospace} + +# messages.warning (Font): +# Font used for warning messages. +# Default: 8pt ${_monospace} +messages.warning = 8pt ${_monospace} + +# messages.info (Font): +# Font used for info messages. +# Default: 8pt ${_monospace} +messages.info = 8pt ${_monospace} + +# prompts (Font): +# Font used for prompts. +# Default: 8pt sans-serif +prompts = 8pt sans-serif diff --git a/.config/qutebrowser/scripts/__init__.py b/.config/qutebrowser/scripts/__init__.py new file mode 100755 index 0000000..90be1e0 --- /dev/null +++ b/.config/qutebrowser/scripts/__init__.py @@ -0,0 +1,3 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +"""Various utility scripts.""" diff --git a/.config/qutebrowser/scripts/asciidoc2html.py b/.config/qutebrowser/scripts/asciidoc2html.py new file mode 100755 index 0000000..c4af174 --- /dev/null +++ b/.config/qutebrowser/scripts/asciidoc2html.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Generate the html documentation based on the asciidoc files.""" + +import re +import os +import os.path +import sys +import subprocess +import glob +import shutil +import tempfile +import argparse +import io + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) + +from scripts import utils + + +class AsciiDoc: + + """Abstraction of an asciidoc subprocess.""" + + FILES = ['faq', 'changelog', 'contributing', 'quickstart', 'userscripts'] + + def __init__(self, args): + self._cmd = None + self._args = args + self._homedir = None + self._themedir = None + self._tempdir = None + self._failed = False + + def prepare(self): + """Get the asciidoc command and create the homedir to use.""" + self._cmd = self._get_asciidoc_cmd() + self._homedir = tempfile.mkdtemp() + self._themedir = os.path.join( + self._homedir, '.asciidoc', 'themes', 'qute') + self._tempdir = os.path.join(self._homedir, 'tmp') + os.makedirs(self._tempdir) + os.makedirs(self._themedir) + + def cleanup(self): + """Clean up the temporary home directory for asciidoc.""" + if self._homedir is not None and not self._failed: + shutil.rmtree(self._homedir) + + def build(self): + """Build either the website or the docs.""" + if self._args.website: + self._build_website() + else: + self._build_docs() + self._copy_images() + + def _build_docs(self): + """Render .asciidoc files to .html sites.""" + files = [('doc/{}.asciidoc'.format(f), + 'qutebrowser/html/doc/{}.html'.format(f)) + for f in self.FILES] + for src in glob.glob('doc/help/*.asciidoc'): + name, _ext = os.path.splitext(os.path.basename(src)) + dst = 'qutebrowser/html/doc/{}.html'.format(name) + files.append((src, dst)) + + # patch image links to use local copy + replacements = [ + ("https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-big.png", + "qute://help/img/cheatsheet-big.png"), + ("https://raw.githubusercontent.com/qutebrowser/qutebrowser/master/doc/img/cheatsheet-small.png", + "qute://help/img/cheatsheet-small.png") + ] + asciidoc_args = ['-a', 'source-highlighter=pygments'] + + for src, dst in files: + src_basename = os.path.basename(src) + modified_src = os.path.join(self._tempdir, src_basename) + with open(modified_src, 'w', encoding='utf-8') as modified_f, \ + open(src, 'r', encoding='utf-8') as f: + for line in f: + for orig, repl in replacements: + line = line.replace(orig, repl) + modified_f.write(line) + self.call(modified_src, dst, *asciidoc_args) + + def _copy_images(self): + """Copy image files to qutebrowser/html/doc.""" + print("Copying files...") + dst_path = os.path.join('qutebrowser', 'html', 'doc', 'img') + try: + os.mkdir(dst_path) + except FileExistsError: + pass + for filename in ['cheatsheet-big.png', 'cheatsheet-small.png']: + src = os.path.join('doc', 'img', filename) + dst = os.path.join(dst_path, filename) + shutil.copy(src, dst) + + def _build_website_file(self, root, filename): + """Build a single website file.""" + src = os.path.join(root, filename) + src_basename = os.path.basename(src) + parts = [self._args.website[0]] + dirname = os.path.dirname(src) + if dirname: + parts.append(os.path.relpath(os.path.dirname(src))) + parts.append( + os.extsep.join((os.path.splitext(src_basename)[0], + 'html'))) + dst = os.path.join(*parts) + os.makedirs(os.path.dirname(dst), exist_ok=True) + + modified_src = os.path.join(self._tempdir, src_basename) + shutil.copy('www/header.asciidoc', modified_src) + + outfp = io.StringIO() + + with open(modified_src, 'r', encoding='utf-8') as header_file: + header = header_file.read() + header += "\n\n" + + with open(src, 'r', encoding='utf-8') as infp: + outfp.write("\n\n") + hidden = False + found_title = False + title = "" + last_line = "" + + for line in infp: + line = line.rstrip() + if line == '// QUTE_WEB_HIDE': + assert not hidden + hidden = True + elif line == '// QUTE_WEB_HIDE_END': + assert hidden + hidden = False + elif line == "The Compiler <mail@qutebrowser.org>": + continue + elif re.fullmatch(r':\w+:.*', line): + # asciidoc field + continue + + if not found_title: + if re.fullmatch(r'=+', line): + line = line.replace('=', '-') + found_title = True + title = last_line + " | qutebrowser\n" + title += "=" * (len(title) - 1) + elif re.fullmatch(r'= .+', line): + line = '==' + line[1:] + found_title = True + title = last_line + " | qutebrowser\n" + title += "=" * (len(title) - 1) + + if not hidden: + outfp.write(line.replace(".asciidoc[", ".html[") + '\n') + last_line = line + + current_lines = outfp.getvalue() + outfp.close() + + with open(modified_src, 'w+', encoding='utf-8') as final_version: + final_version.write(title + "\n\n" + header + current_lines) + + asciidoc_args = ['--theme=qute', '-a toc', '-a toc-placement=manual', + '-a', 'source-highlighter=pygments'] + self.call(modified_src, dst, *asciidoc_args) + + def _build_website(self): + """Prepare and build the website.""" + theme_file = os.path.abspath(os.path.join('www', 'qute.css')) + shutil.copy(theme_file, self._themedir) + + outdir = self._args.website[0] + + for root, _dirs, files in os.walk(os.getcwd()): + for filename in files: + basename, ext = os.path.splitext(filename) + if (ext != '.asciidoc' or + basename in ['header', 'OpenSans-License']): + continue + self._build_website_file(root, filename) + + copy = {'icons': 'icons', 'doc/img': 'doc/img', 'www/media': 'media/'} + + for src, dest in copy.items(): + full_dest = os.path.join(outdir, dest) + try: + shutil.rmtree(full_dest) + except FileNotFoundError: + pass + shutil.copytree(src, full_dest) + + for dst, link_name in [ + ('README.html', 'index.html'), + (os.path.join('doc', 'quickstart.html'), 'quickstart.html')]: + try: + os.symlink(dst, os.path.join(outdir, link_name)) + except FileExistsError: + pass + + def _get_asciidoc_cmd(self): + """Try to find out what commandline to use to invoke asciidoc.""" + if self._args.asciidoc is not None: + return self._args.asciidoc + + try: + subprocess.run(['asciidoc'], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + except OSError: + pass + else: + return ['asciidoc'] + + try: + subprocess.run(['asciidoc.py'], stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + except OSError: + pass + else: + return ['asciidoc.py'] + + raise FileNotFoundError + + def call(self, src, dst, *args): + """Call asciidoc for the given files. + + Args: + src: The source .asciidoc file. + dst: The destination .html file, or None to auto-guess. + *args: Additional arguments passed to asciidoc. + """ + print("Calling asciidoc for {}...".format(os.path.basename(src))) + cmdline = self._cmd[:] + if dst is not None: + cmdline += ['--out-file', dst] + cmdline += args + cmdline.append(src) + try: + env = os.environ.copy() + env['HOME'] = self._homedir + subprocess.run(cmdline, check=True, env=env) + except (subprocess.CalledProcessError, OSError) as e: + self._failed = True + utils.print_col(str(e), 'red') + print("Keeping modified sources in {}.".format(self._homedir)) + sys.exit(1) + + +def main(colors=False): + """Generate html files for the online documentation.""" + utils.change_cwd() + utils.use_color = colors + parser = argparse.ArgumentParser() + parser.add_argument('--website', help="Build website into a given " + "directory.", nargs=1) + parser.add_argument('--asciidoc', help="Full path to python and " + "asciidoc.py. If not given, it's searched in PATH.", + nargs=2, required=False, + metavar=('PYTHON', 'ASCIIDOC')) + args = parser.parse_args() + try: + os.mkdir('qutebrowser/html/doc') + except FileExistsError: + pass + + asciidoc = AsciiDoc(args) + try: + asciidoc.prepare() + except FileNotFoundError: + utils.print_col("Could not find asciidoc! Please install it, or use " + "the --asciidoc argument to point this script to the " + "correct python/asciidoc.py location!", 'red') + sys.exit(1) + + try: + asciidoc.build() + finally: + asciidoc.cleanup() + + +if __name__ == '__main__': + main(colors=True) diff --git a/.config/qutebrowser/scripts/cycle-inputs.js b/.config/qutebrowser/scripts/cycle-inputs.js new file mode 100644 index 0000000..bb667bd --- /dev/null +++ b/.config/qutebrowser/scripts/cycle-inputs.js @@ -0,0 +1,46 @@ +/* Cycle <input> text boxes. + * works with the types defined in 'types'. + * Note: Does not work for <textarea>. + * + * Example keybind: + * CYCLE_INPUTS = "jseval -q -f ~/.config/qutebrowser/cycle-inputs.js" + * config.bind('gi', CYCLE_INPUTS) + * + * By dive on freenode <dave@dawoodfall.net> + */ + +(function() { + "use strict"; + const inputs = document.getElementsByTagName("input"); + const types = /text|password|date|email|month|number|range|search|tel|time|url|week/; + const hidden = /hidden/; + let found = false; + + function ishidden(el) { + return hidden.test(el.attributes.value) || el.offsetParent === null; + } + + for (let i = 0; i < inputs.length; i++) { + if (inputs[i] === document.activeElement) { + for (let k = i + 1; k < inputs.length; k++) { + if (!ishidden(inputs[k]) && types.test(inputs[k].type)) { + inputs[k].focus(); + found = true; + break; + } + } + break; + } + } + + if (!found) { + for (let i = 0; i < inputs.length; i++) { + if (!ishidden(inputs[i]) && types.test(inputs[i].type)) { + inputs[i].focus(); + break; + } + } + } +})(); + +// vim: tw=0 expandtab tabstop=4 softtabstop=4 shiftwidth=4 diff --git a/.config/qutebrowser/scripts/dev/Makefile-dmg b/.config/qutebrowser/scripts/dev/Makefile-dmg new file mode 100644 index 0000000..1cf4cfb --- /dev/null +++ b/.config/qutebrowser/scripts/dev/Makefile-dmg @@ -0,0 +1,71 @@ +# +# Build file for creating DMG files. +# +# The DMG packager looks for a template.dmg.bz2 for using as its +# DMG template. If it doesn't find one, it generates a clean one. +# +# If you create a DMG template, you should make one containing all +# the files listed in $(SOURCE_FILES) below, and arrange everything to suit +# your style. The contents of the files themselves does not matter, so +# they can be empty (they will be overwritten later). +# +# Remko Tronçon +# https://el-tramo.be +# Licensed under the MIT License. See COPYING for details. + + +################################################################################ +# Customizable variables +################################################################################ + +NAME ?= qutebrowser + +SOURCE_DIR ?= . +SOURCE_FILES ?= dist/qutebrowser.app LICENSE + +TEMPLATE_DMG ?= template.dmg +TEMPLATE_SIZE ?= 300m + +################################################################################ +# DMG building. No editing should be needed beyond this point. +################################################################################ + +MASTER_DMG=$(NAME).dmg +WC_DMG=wc.dmg +WC_DIR=wc + +.PHONY: all +all: $(MASTER_DMG) + +$(TEMPLATE_DMG): + @echo + @echo --------------------- Generating empty template -------------------- + mkdir template + hdiutil create -fs HFSX -layout SPUD -size $(TEMPLATE_SIZE) "$(TEMPLATE_DMG)" -srcfolder template -format UDRW -volname "$(NAME)" -quiet + rmdir template + +$(WC_DMG): $(TEMPLATE_DMG) + cp $< $@ + +$(MASTER_DMG): $(WC_DMG) $(addprefix $(SOURCE_DIR)/,$(SOURCE_FILES)) + @echo + @echo --------------------- Creating Disk Image -------------------- + mkdir -p $(WC_DIR) + hdiutil attach "$(WC_DMG)" -noautoopen -quiet -mountpoint "$(WC_DIR)" + for i in $(SOURCE_FILES); do \ + rm -rf "$(WC_DIR)/$$i"; \ + ditto -rsrc "$(SOURCE_DIR)/$$i" "$(WC_DIR)/$${i##*/}"; \ + done + ln -s /Applications $(WC_DIR) + #rm -f "$@" + #hdiutil create -srcfolder "$(WC_DIR)" -format UDZO -imagekey zlib-level=9 "$@" -volname "$(NAME) $(VERSION)" -scrub -quiet + WC_DEV=`hdiutil info | grep "$(WC_DIR)" | grep "Apple_HFS" | awk '{print $$1}'` && \ + hdiutil detach $$WC_DEV -quiet -force + rm -f "$(MASTER_DMG)" + hdiutil convert "$(WC_DMG)" -quiet -format UDZO -imagekey zlib-level=9 -o "$@" + rm -rf $(WC_DIR) + @echo + +.PHONY: clean +clean: + -rm -rf $(TEMPLATE_DMG) $(MASTER_DMG) $(WC_DMG) diff --git a/.config/qutebrowser/scripts/dev/__init__.py b/.config/qutebrowser/scripts/dev/__init__.py new file mode 100644 index 0000000..7dc0433 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/__init__.py @@ -0,0 +1,3 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +"""Various scripts used for developing qutebrowser.""" diff --git a/.config/qutebrowser/scripts/dev/build_release.py b/.config/qutebrowser/scripts/dev/build_release.py new file mode 100755 index 0000000..254132b --- /dev/null +++ b/.config/qutebrowser/scripts/dev/build_release.py @@ -0,0 +1,419 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Build a new release.""" + + +import os +import os.path +import sys +import time +import glob +import shutil +import plistlib +import subprocess +import argparse +import tarfile +import tempfile +import collections + +try: + import winreg +except ImportError: + pass + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +import qutebrowser +from scripts import utils +# from scripts.dev import update_3rdparty + + +def call_script(name, *args, python=sys.executable): + """Call a given shell script. + + Args: + name: The script to call. + *args: The arguments to pass. + python: The python interpreter to use. + """ + path = os.path.join(os.path.dirname(__file__), os.pardir, name) + subprocess.run([python, path] + list(args), check=True) + + +def call_tox(toxenv, *args, python=sys.executable): + """Call tox. + + Args: + toxenv: Which tox environment to use + *args: The arguments to pass. + python: The python interpreter to use. + """ + env = os.environ.copy() + env['PYTHON'] = python + env['PATH'] = os.environ['PATH'] + os.pathsep + os.path.dirname(python) + subprocess.run( + [sys.executable, '-m', 'tox', '-vv', '-e', toxenv] + list(args), + env=env, check=True) + + +def run_asciidoc2html(args): + """Common buildsteps used for all OS'.""" + utils.print_title("Running asciidoc2html.py") + if args.asciidoc is not None: + a2h_args = ['--asciidoc'] + args.asciidoc + else: + a2h_args = [] + call_script('asciidoc2html.py', *a2h_args) + + +def _maybe_remove(path): + """Remove a path if it exists.""" + try: + shutil.rmtree(path) + except FileNotFoundError: + pass + + +def smoke_test(executable): + """Try starting the given qutebrowser executable.""" + subprocess.run([executable, '--no-err-windows', '--nowindow', + '--temp-basedir', 'about:blank', ':later 500 quit'], + check=True) + + +def patch_mac_app(): + """Patch .app to copy missing data and link some libs. + + See https://github.com/pyinstaller/pyinstaller/issues/2276 + """ + app_path = os.path.join('dist', 'qutebrowser.app') + qtwe_core_dir = os.path.join('.tox', 'pyinstaller', 'lib', 'python3.6', + 'site-packages', 'PyQt5', 'Qt', 'lib', + 'QtWebEngineCore.framework') + # Copy QtWebEngineProcess.app + proc_app = 'QtWebEngineProcess.app' + shutil.copytree(os.path.join(qtwe_core_dir, 'Helpers', proc_app), + os.path.join(app_path, 'Contents', 'MacOS', proc_app)) + # Copy resources + for f in glob.glob(os.path.join(qtwe_core_dir, 'Resources', '*')): + dest = os.path.join(app_path, 'Contents', 'Resources') + if os.path.isdir(f): + dir_dest = os.path.join(dest, os.path.basename(f)) + print("Copying directory {} to {}".format(f, dir_dest)) + shutil.copytree(f, dir_dest) + else: + print("Copying {} to {}".format(f, dest)) + shutil.copy(f, dest) + # Link dependencies + for lib in ['QtCore', 'QtWebEngineCore', 'QtQuick', 'QtQml', 'QtNetwork', + 'QtGui', 'QtWebChannel', 'QtPositioning']: + dest = os.path.join(app_path, lib + '.framework', 'Versions', '5') + os.makedirs(dest) + os.symlink(os.path.join(os.pardir, os.pardir, os.pardir, 'Contents', + 'MacOS', lib), + os.path.join(dest, lib)) + # Patch Info.plist - pyinstaller's options are too limiting + plist_path = os.path.join(app_path, 'Contents', 'Info.plist') + with open(plist_path, "rb") as f: + plist_data = plistlib.load(f) + plist_data.update(INFO_PLIST_UPDATES) + with open(plist_path, "wb") as f: + plistlib.dump(plist_data, f) + + +INFO_PLIST_UPDATES = { + 'CFBundleVersion': qutebrowser.__version__, + 'CFBundleShortVersionString': qutebrowser.__version__, + 'NSSupportsAutomaticGraphicsSwitching': True, + 'NSHighResolutionCapable': True, + 'CFBundleURLTypes': [{ + "CFBundleURLName": "http(s) URL", + "CFBundleURLSchemes": ["http", "https"] + }, { + "CFBundleURLName": "local file URL", + "CFBundleURLSchemes": ["file"] + }], + 'CFBundleDocumentTypes': [{ + "CFBundleTypeExtensions": ["html", "htm"], + "CFBundleTypeMIMETypes": ["text/html"], + "CFBundleTypeName": "HTML document", + "CFBundleTypeOSTypes": ["HTML"], + "CFBundleTypeRole": "Viewer", + }, { + "CFBundleTypeExtensions": ["xhtml"], + "CFBundleTypeMIMETypes": ["text/xhtml"], + "CFBundleTypeName": "XHTML document", + "CFBundleTypeRole": "Viewer", + }] +} + + +def build_mac(): + """Build macOS .dmg/.app.""" + utils.print_title("Cleaning up...") + for f in ['wc.dmg', 'template.dmg']: + try: + os.remove(f) + except FileNotFoundError: + pass + for d in ['dist', 'build']: + shutil.rmtree(d, ignore_errors=True) + utils.print_title("Updating 3rdparty content") + # Currently disabled because QtWebEngine has no pdfjs support + # update_3rdparty.run(ace=False, pdfjs=True, fancy_dmg=False) + utils.print_title("Building .app via pyinstaller") + call_tox('pyinstaller', '-r') + utils.print_title("Patching .app") + patch_mac_app() + utils.print_title("Building .dmg") + subprocess.run(['make', '-f', 'scripts/dev/Makefile-dmg'], check=True) + + dmg_name = 'qutebrowser-{}.dmg'.format(qutebrowser.__version__) + os.rename('qutebrowser.dmg', dmg_name) + + utils.print_title("Running smoke test") + + try: + with tempfile.TemporaryDirectory() as tmpdir: + subprocess.run(['hdiutil', 'attach', dmg_name, + '-mountpoint', tmpdir], check=True) + try: + binary = os.path.join(tmpdir, 'qutebrowser.app', 'Contents', + 'MacOS', 'qutebrowser') + smoke_test(binary) + finally: + time.sleep(5) + subprocess.run(['hdiutil', 'detach', tmpdir]) + except PermissionError as e: + print("Failed to remove tempdir: {}".format(e)) + + return [(dmg_name, 'application/x-apple-diskimage', 'macOS .dmg')] + + +def patch_windows(out_dir): + """Copy missing DLLs for windows into the given output.""" + dll_dir = os.path.join('.tox', 'pyinstaller', 'lib', 'site-packages', + 'PyQt5', 'Qt', 'bin') + dlls = ['libEGL.dll', 'libGLESv2.dll', 'libeay32.dll', 'ssleay32.dll'] + for dll in dlls: + shutil.copy(os.path.join(dll_dir, dll), out_dir) + + +def build_windows(): + """Build windows executables/setups.""" + utils.print_title("Updating 3rdparty content") + # Currently disabled because QtWebEngine has no pdfjs support + # update_3rdparty.run(ace=False, pdfjs=True, fancy_dmg=False) + + utils.print_title("Building Windows binaries") + parts = str(sys.version_info.major), str(sys.version_info.minor) + ver = ''.join(parts) + dot_ver = '.'.join(parts) + + # Get python path from registry if possible + try: + reg64_key = winreg.OpenKeyEx(winreg.HKEY_LOCAL_MACHINE, + r'SOFTWARE\Python\PythonCore' + r'\{}\InstallPath'.format(dot_ver)) + python_x64 = winreg.QueryValueEx(reg64_key, 'ExecutablePath')[0] + except FileNotFoundError: + python_x64 = r'C:\Python{}\python.exe'.format(ver) + + out_pyinstaller = os.path.join('dist', 'qutebrowser') + out_64 = os.path.join('dist', + 'qutebrowser-{}-x64'.format(qutebrowser.__version__)) + + artifacts = [] + + from scripts.dev import gen_versioninfo + utils.print_title("Updating VersionInfo file") + gen_versioninfo.main() + + utils.print_title("Running pyinstaller 64bit") + _maybe_remove(out_64) + call_tox('pyinstaller', '-r', python=python_x64) + shutil.move(out_pyinstaller, out_64) + patch_windows(out_64) + + utils.print_title("Building installers") + subprocess.run(['makensis.exe', + '/DX64', + '/DVERSION={}'.format(qutebrowser.__version__), + 'misc/qutebrowser.nsi'], check=True) + + name_64 = 'qutebrowser-{}-amd64.exe'.format(qutebrowser.__version__) + + artifacts += [ + (os.path.join('dist', name_64), + 'application/vnd.microsoft.portable-executable', + 'Windows 64bit installer'), + ] + + utils.print_title("Running 64bit smoke test") + smoke_test(os.path.join(out_64, 'qutebrowser.exe')) + + utils.print_title("Zipping 64bit standalone...") + name = 'qutebrowser-{}-windows-standalone-amd64'.format( + qutebrowser.__version__) + shutil.make_archive(name, 'zip', 'dist', os.path.basename(out_64)) + artifacts.append(('{}.zip'.format(name), + 'application/zip', + 'Windows 64bit standalone')) + + return artifacts + + +def build_sdist(): + """Build an sdist and list the contents.""" + utils.print_title("Building sdist") + + _maybe_remove('dist') + + subprocess.run([sys.executable, 'setup.py', 'sdist'], check=True) + dist_files = os.listdir(os.path.abspath('dist')) + assert len(dist_files) == 1 + + dist_file = os.path.join('dist', dist_files[0]) + subprocess.run(['gpg', '--detach-sign', '-a', dist_file], check=True) + + tar = tarfile.open(dist_file) + by_ext = collections.defaultdict(list) + + for tarinfo in tar.getmembers(): + if not tarinfo.isfile(): + continue + name = os.sep.join(tarinfo.name.split(os.sep)[1:]) + _base, ext = os.path.splitext(name) + by_ext[ext].append(name) + + assert '.pyc' not in by_ext + + utils.print_title("sdist contents") + + for ext, files in sorted(by_ext.items()): + utils.print_subtitle(ext) + print('\n'.join(files)) + + filename = 'qutebrowser-{}.tar.gz'.format(qutebrowser.__version__) + artifacts = [ + (os.path.join('dist', filename), 'application/gzip', 'Source release'), + (os.path.join('dist', filename + '.asc'), 'application/pgp-signature', + 'Source release - PGP signature'), + ] + + return artifacts + + +def test_makefile(): + """Make sure the Makefile works correctly.""" + utils.print_title("Testing makefile") + with tempfile.TemporaryDirectory() as tmpdir: + subprocess.run(['make', '-f', 'misc/Makefile', + 'DESTDIR={}'.format(tmpdir), 'install'], check=True) + + +def read_github_token(): + """Read the GitHub API token from disk.""" + token_file = os.path.join(os.path.expanduser('~'), '.gh_token') + with open(token_file, encoding='ascii') as f: + token = f.read().strip() + return token + + +def github_upload(artifacts, tag): + """Upload the given artifacts to GitHub. + + Args: + artifacts: A list of (filename, mimetype, description) tuples + tag: The name of the release tag + """ + import github3 + utils.print_title("Uploading to github...") + + token = read_github_token() + gh = github3.login(token=token) + repo = gh.repository('qutebrowser', 'qutebrowser') + + release = None # to satisfy pylint + for release in repo.releases(): + if release.tag_name == tag: + break + else: + raise Exception("No release found for {!r}!".format(tag)) + + for filename, mimetype, description in artifacts: + with open(filename, 'rb') as f: + basename = os.path.basename(filename) + asset = release.upload_asset(mimetype, basename, f) + asset.edit(basename, description) + + +def pypi_upload(artifacts): + """Upload the given artifacts to PyPI using twine.""" + filenames = [a[0] for a in artifacts] + subprocess.run(['twine', 'upload'] + filenames, check=True) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--asciidoc', help="Full path to python and " + "asciidoc.py. If not given, it's searched in PATH.", + nargs=2, required=False, + metavar=('PYTHON', 'ASCIIDOC')) + parser.add_argument('--upload', help="Tag to upload the release for", + nargs=1, required=False, metavar='TAG') + args = parser.parse_args() + utils.change_cwd() + + upload_to_pypi = False + + if args.upload is not None: + # Fail early when trying to upload without github3 installed + # or without API token + import github3 # pylint: disable=unused-variable + read_github_token() + + run_asciidoc2html(args) + if os.name == 'nt': + artifacts = build_windows() + elif sys.platform == 'darwin': + artifacts = build_mac() + else: + test_makefile() + artifacts = build_sdist() + upload_to_pypi = True + + if args.upload is not None: + utils.print_title("Press enter to release...") + input() + github_upload(artifacts, args.upload[0]) + if upload_to_pypi: + pypi_upload(artifacts) + else: + print() + utils.print_title("Artifacts") + for artifact in artifacts: + print(artifact) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/check_coverage.py b/.config/qutebrowser/scripts/dev/check_coverage.py new file mode 100644 index 0000000..32c5afc --- /dev/null +++ b/.config/qutebrowser/scripts/dev/check_coverage.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2015-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Enforce perfect coverage on some files.""" + +import os +import os.path +import sys +import enum +import subprocess +from xml.etree import ElementTree + +import attr + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils as scriptutils +from qutebrowser.utils import utils + + +@attr.s +class Message: + + """A message shown by coverage.py.""" + + typ = attr.ib() + filename = attr.ib() + text = attr.ib() + + +MsgType = enum.Enum('MsgType', 'insufficent_coverage, perfect_file') + + +# A list of (test_file, tested_file) tuples. test_file can be None. +PERFECT_FILES = [ + (None, + 'commands/cmdexc.py'), + ('tests/unit/commands/test_cmdutils.py', + 'commands/cmdutils.py'), + ('tests/unit/commands/test_argparser.py', + 'commands/argparser.py'), + + ('tests/unit/browser/webkit/test_cache.py', + 'browser/webkit/cache.py'), + ('tests/unit/browser/webkit/test_cookies.py', + 'browser/webkit/cookies.py'), + ('tests/unit/browser/test_history.py', + 'browser/history.py'), + ('tests/unit/browser/webkit/http/test_http.py', + 'browser/webkit/http.py'), + ('tests/unit/browser/webkit/http/test_content_disposition.py', + 'browser/webkit/rfc6266.py'), + # ('tests/unit/browser/webkit/test_webkitelem.py', + # 'browser/webkit/webkitelem.py'), + # ('tests/unit/browser/webkit/test_webkitelem.py', + # 'browser/webelem.py'), + ('tests/unit/browser/webkit/network/test_filescheme.py', + 'browser/webkit/network/filescheme.py'), + ('tests/unit/browser/webkit/network/test_networkreply.py', + 'browser/webkit/network/networkreply.py'), + + ('tests/unit/browser/test_signalfilter.py', + 'browser/signalfilter.py'), + (None, + 'browser/webengine/certificateerror.py'), + # ('tests/unit/browser/test_tab.py', + # 'browser/tab.py'), + + ('tests/unit/keyinput/test_basekeyparser.py', + 'keyinput/basekeyparser.py'), + ('tests/unit/keyinput/test_keyutils.py', + 'keyinput/keyutils.py'), + + ('tests/unit/misc/test_autoupdate.py', + 'misc/autoupdate.py'), + ('tests/unit/misc/test_readline.py', + 'misc/readline.py'), + ('tests/unit/misc/test_split.py', + 'misc/split.py'), + ('tests/unit/misc/test_msgbox.py', + 'misc/msgbox.py'), + ('tests/unit/misc/test_checkpyver.py', + 'misc/checkpyver.py'), + ('tests/unit/misc/test_guiprocess.py', + 'misc/guiprocess.py'), + ('tests/unit/misc/test_editor.py', + 'misc/editor.py'), + ('tests/unit/misc/test_cmdhistory.py', + 'misc/cmdhistory.py'), + ('tests/unit/misc/test_ipc.py', + 'misc/ipc.py'), + ('tests/unit/misc/test_keyhints.py', + 'misc/keyhintwidget.py'), + ('tests/unit/misc/test_pastebin.py', + 'misc/pastebin.py'), + (None, + 'misc/objects.py'), + + (None, + 'mainwindow/statusbar/keystring.py'), + ('tests/unit/mainwindow/statusbar/test_percentage.py', + 'mainwindow/statusbar/percentage.py'), + ('tests/unit/mainwindow/statusbar/test_progress.py', + 'mainwindow/statusbar/progress.py'), + ('tests/unit/mainwindow/statusbar/test_tabindex.py', + 'mainwindow/statusbar/tabindex.py'), + ('tests/unit/mainwindow/statusbar/test_textbase.py', + 'mainwindow/statusbar/textbase.py'), + ('tests/unit/mainwindow/statusbar/test_url.py', + 'mainwindow/statusbar/url.py'), + ('tests/unit/mainwindow/statusbar/test_backforward.py', + 'mainwindow/statusbar/backforward.py'), + ('tests/unit/mainwindow/test_messageview.py', + 'mainwindow/messageview.py'), + + ('tests/unit/config/test_config.py', + 'config/config.py'), + ('tests/unit/config/test_configdata.py', + 'config/configdata.py'), + ('tests/unit/config/test_configexc.py', + 'config/configexc.py'), + ('tests/unit/config/test_configfiles.py', + 'config/configfiles.py'), + ('tests/unit/config/test_configtypes.py', + 'config/configtypes.py'), + ('tests/unit/config/test_configinit.py', + 'config/configinit.py'), + ('tests/unit/config/test_configcommands.py', + 'config/configcommands.py'), + ('tests/unit/config/test_configutils.py', + 'config/configutils.py'), + + ('tests/unit/utils/test_qtutils.py', + 'utils/qtutils.py'), + ('tests/unit/utils/test_standarddir.py', + 'utils/standarddir.py'), + ('tests/unit/utils/test_urlutils.py', + 'utils/urlutils.py'), + ('tests/unit/utils/usertypes', + 'utils/usertypes.py'), + ('tests/unit/utils/test_utils.py', + 'utils/utils.py'), + ('tests/unit/utils/test_version.py', + 'utils/version.py'), + ('tests/unit/utils/test_debug.py', + 'utils/debug.py'), + ('tests/unit/utils/test_jinja.py', + 'utils/jinja.py'), + ('tests/unit/utils/test_error.py', + 'utils/error.py'), + ('tests/unit/utils/test_javascript.py', + 'utils/javascript.py'), + ('tests/unit/utils/test_urlmatch.py', + 'utils/urlmatch.py'), + + (None, + 'completion/models/util.py'), + ('tests/unit/completion/test_models.py', + 'completion/models/urlmodel.py'), + ('tests/unit/completion/test_models.py', + 'completion/models/configmodel.py'), + ('tests/unit/completion/test_histcategory.py', + 'completion/models/histcategory.py'), + ('tests/unit/completion/test_listcategory.py', + 'completion/models/listcategory.py'), + + ('tests/unit/browser/webengine/test_spell.py', + 'browser/webengine/spell.py'), + +] + + +# 100% coverage because of end2end tests, but no perfect unit tests yet. +WHITELISTED_FILES = [ + 'browser/webkit/webkitinspector.py', + 'keyinput/macros.py', + 'browser/webkit/webkitelem.py', +] + + +class Skipped(Exception): + + """Exception raised when skipping coverage checks.""" + + def __init__(self, reason): + self.reason = reason + super().__init__("Skipping coverage checks " + reason) + + +def _get_filename(filename): + """Transform the absolute test filenames to relative ones.""" + if os.path.isabs(filename): + basedir = os.path.abspath( + os.path.join(os.path.dirname(__file__), '..', '..')) + common_path = os.path.commonprefix([basedir, filename]) + if common_path: + filename = filename[len(common_path):].lstrip('/') + if filename.startswith('qutebrowser/'): + filename = filename.split('/', maxsplit=1)[1] + + return filename + + +def check(fileobj, perfect_files): + """Main entry point which parses/checks coverage.xml if applicable.""" + if not utils.is_linux: + raise Skipped("on non-Linux system.") + elif '-k' in sys.argv[1:]: + raise Skipped("because -k is given.") + elif '-m' in sys.argv[1:]: + raise Skipped("because -m is given.") + elif '--lf' in sys.argv[1:]: + raise Skipped("because --lf is given.") + + perfect_src_files = [e[1] for e in perfect_files] + + filename_args = [arg for arg in sys.argv[1:] + if arg.startswith('tests' + os.sep)] + filtered_files = [tpl[1] for tpl in perfect_files if tpl[0] in + filename_args] + + if filename_args and not filtered_files: + raise Skipped("because there is nothing to check.") + + tree = ElementTree.parse(fileobj) + classes = tree.getroot().findall('./packages/package/classes/class') + + messages = [] + + for klass in classes: + filename = _get_filename(klass.attrib['filename']) + + line_cov = float(klass.attrib['line-rate']) * 100 + branch_cov = float(klass.attrib['branch-rate']) * 100 + + if filtered_files and filename not in filtered_files: + continue + + assert 0 <= line_cov <= 100, line_cov + assert 0 <= branch_cov <= 100, branch_cov + assert '\\' not in filename, filename + + is_bad = line_cov < 100 or branch_cov < 100 + + if filename in perfect_src_files and is_bad: + text = "{} has {:.2f}% line and {:.2f}% branch coverage!".format( + filename, line_cov, branch_cov) + messages.append(Message(MsgType.insufficent_coverage, filename, + text)) + elif (filename not in perfect_src_files and not is_bad and + filename not in WHITELISTED_FILES): + text = ("{} has 100% coverage but is not in " + "perfect_files!".format(filename)) + messages.append(Message(MsgType.perfect_file, filename, text)) + + return messages + + +def main_check(): + """Check coverage after a test run.""" + try: + with open('coverage.xml', encoding='utf-8') as f: + messages = check(f, PERFECT_FILES) + except Skipped as e: + print(e) + messages = [] + + if messages: + print() + print() + scriptutils.print_title("Coverage check failed") + for msg in messages: + print(msg.text) + print() + filters = ','.join('qutebrowser/' + msg.filename for msg in messages) + subprocess.run([sys.executable, '-m', 'coverage', 'report', + '--show-missing', '--include', filters], check=True) + print() + print("To debug this, run 'tox -e py36-pyqt59-cov' " + "(or py35-pyqt59-cov) locally and check htmlcov/index.html") + print("or check https://codecov.io/github/qutebrowser/qutebrowser") + print() + + if 'CI' in os.environ: + print("Keeping coverage.xml on CI.") + else: + os.remove('coverage.xml') + return 1 if messages else 0 + + +def main_check_all(): + """Check the coverage for all files individually. + + This makes sure the files have 100% coverage without running unrelated + tests. + + This runs pytest with the used executable, so check_coverage.py should be + called with something like ./.tox/py36/bin/python. + """ + for test_file, src_file in PERFECT_FILES: + if test_file is None: + continue + subprocess.run( + [sys.executable, '-m', 'pytest', '--cov', 'qutebrowser', + '--cov-report', 'xml', test_file], check=True) + with open('coverage.xml', encoding='utf-8') as f: + messages = check(f, [(test_file, src_file)]) + os.remove('coverage.xml') + + messages = [msg for msg in messages + if msg.typ == MsgType.insufficent_coverage] + if messages: + for msg in messages: + print(msg.text) + return 1 + else: + print("Check ok!") + return 0 + + +def main(): + scriptutils.change_cwd() + if '--check-all' in sys.argv: + return main_check_all() + else: + return main_check() + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.config/qutebrowser/scripts/dev/check_doc_changes.py b/.config/qutebrowser/scripts/dev/check_doc_changes.py new file mode 100755 index 0000000..3d90bea --- /dev/null +++ b/.config/qutebrowser/scripts/dev/check_doc_changes.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2016-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Check if docs changed and output an error if so.""" + +import sys +import subprocess +import os + +code = subprocess.run(['git', '--no-pager', 'diff', + '--exit-code', '--stat']).returncode + +if os.environ.get('TRAVIS_PULL_REQUEST', 'false') != 'false': + if code != 0: + print("Docs changed but ignoring change as we're building a PR") + sys.exit(0) + +if code != 0: + print() + print('The autogenerated docs changed, please run this to update them:') + print(' tox -e docs') + print(' git commit -am "Update docs"') + print() + print('(Or you have uncommitted changes, in which case you can ignore ' + 'this.)') + if 'TRAVIS' in os.environ: + print() + print("travis_fold:start:gitdiff") + subprocess.run(['git', '--no-pager', 'diff']) + print("travis_fold:end:gitdiff") +sys.exit(code) diff --git a/.config/qutebrowser/scripts/dev/ci/travis_backtrace.sh b/.config/qutebrowser/scripts/dev/ci/travis_backtrace.sh new file mode 100644 index 0000000..227dde8 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/ci/travis_backtrace.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# +# Find all possible core files under current directory. Attempt +# to determine exe using file(1) and dump stack trace with gdb. +# + +case $TESTENV in + py3*-pyqt*) + exe=$(readlink -f ".tox/$TESTENV/bin/python") + full= + ;; + *) + echo "Skipping coredump analysis in testenv $TESTENV!" + exit 0 + ;; +esac + +find . \( -name "*.core" -o -name core \) -exec gdb --batch --quiet -ex "thread apply all bt $full" "$exe" {} \; diff --git a/.config/qutebrowser/scripts/dev/ci/travis_install.sh b/.config/qutebrowser/scripts/dev/ci/travis_install.sh new file mode 100644 index 0000000..18f5aa9 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/ci/travis_install.sh @@ -0,0 +1,108 @@ +#!/bin/bash +# vim: ft=sh fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2016-2017 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +# Stolen from https://github.com/travis-ci/travis-build/blob/master/lib/travis/build/templates/header.sh +# and adjusted to use ((...)) +travis_retry() { + local ANSI_RED='\033[31;1m' + local ANSI_RESET='\033[0m' + local result=0 + local count=1 + while (( count < 3 )); do + if (( result != 0 )); then + echo -e "\\n${ANSI_RED}The command \"$*\" failed. Retrying, $count of 3.${ANSI_RESET}\\n" >&2 + fi + "$@" + result=$? + (( result == 0 )) && break + count=$(( count + 1 )) + sleep 1 + done + + if (( count > 3 )); then + echo -e "\\n${ANSI_RED}The command \"$*\" failed 3 times.${ANSI_RESET}\\n" >&2 + fi + + return $result +} + +pip_install() { + travis_retry python3 -m pip install "$@" +} + +npm_install() { + # Make sure npm is up-to-date first + travis_retry npm install -g npm + travis_retry npm install -g "$@" +} + +check_pyqt() { + python3 <<EOF +import sys +from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, qVersion +try: + from PyQt.sip import SIP_VERSION_STR +except ModuleNotFoundError: + from sip import SIP_VERSION_STR + +print("Python {}".format(sys.version)) +print("PyQt5 {}".format(PYQT_VERSION_STR)) +print("Qt5 {} (runtime {})".format(QT_VERSION_STR, qVersion())) +print("sip {}".format(SIP_VERSION_STR)) +EOF +} + +set -e + +if [[ $DOCKER ]]; then + exit 0 +elif [[ $TRAVIS_OS_NAME == osx ]]; then + # Disable App Nap + defaults write NSGlobalDomain NSAppSleepDisabled -bool YES + + curl -LO https://bootstrap.pypa.io/get-pip.py + sudo -H python get-pip.py + + brew --version + brew update + brew upgrade python libyaml + brew install qt5 pyqt5 + + pip_install -r misc/requirements/requirements-tox.txt + python3 -m pip --version + tox --version + check_pyqt + exit 0 +fi + +case $TESTENV in + eslint) + npm_install eslint + ;; + shellcheck) + ;; + *) + pip_install pip + pip_install -r misc/requirements/requirements-tox.txt + if [[ $TESTENV == *-cov ]]; then + pip_install -r misc/requirements/requirements-codecov.txt + fi + ;; +esac diff --git a/.config/qutebrowser/scripts/dev/ci/travis_run.sh b/.config/qutebrowser/scripts/dev/ci/travis_run.sh new file mode 100644 index 0000000..55ca7c1 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/ci/travis_run.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +if [[ $DOCKER ]]; then + docker run \ + --privileged \ + -v "$PWD:/outside" \ + -e "QUTE_BDD_WEBENGINE=$QUTE_BDD_WEBENGINE" \ + -e "DOCKER=$DOCKER" \ + -e "CI=$CI" \ + -e "TRAVIS=$TRAVIS" \ + "qutebrowser/travis:$DOCKER" +elif [[ $TESTENV == eslint ]]; then + # Can't run this via tox as we can't easily install tox in the javascript + # travis env + cd qutebrowser/javascript || exit 1 + eslint --color --report-unused-disable-directives . +elif [[ $TESTENV == shellcheck ]]; then + SCRIPTS=$( mktemp ) + find scripts/dev/ -name '*.sh' >"$SCRIPTS" + find misc/userscripts/ -type f -exec grep -lE '[/ ][bd]ash$|[/ ]sh$|[/ ]ksh$' {} + >>"$SCRIPTS" + mapfile -t scripts <"$SCRIPTS" + rm -f "$SCRIPTS" + docker run \ + -v "$PWD:/outside" \ + -w /outside \ + koalaman/shellcheck:latest "${scripts[@]}" +else + args=() + [[ $TRAVIS_OS_NAME == osx ]] && args=('--qute-bdd-webengine' '--no-xvfb' 'tests/unit') + + tox -e "$TESTENV" -- "${args[@]}" +fi diff --git a/.config/qutebrowser/scripts/dev/cleanup.py b/.config/qutebrowser/scripts/dev/cleanup.py new file mode 100755 index 0000000..d1bb84a --- /dev/null +++ b/.config/qutebrowser/scripts/dev/cleanup.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Script to clean up the mess made by Python/setuptools/PyInstaller.""" + +import os +import os.path +import sys +import glob +import shutil +import fnmatch + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + + +recursive_lint = ('__pycache__', '*.pyc') +lint = ('build', 'dist', 'pkg/pkg', 'pkg/qutebrowser-*.pkg.tar.xz', 'pkg/src', + 'pkg/qutebrowser', 'qutebrowser.egg-info', 'setuptools-*.egg', + 'setuptools-*.zip', 'doc/qutebrowser.asciidoc', 'doc/*.html', + 'doc/qutebrowser.1', 'README.html', 'qutebrowser/html/doc') + + +def remove(path): + """Remove either a file or directory unless --dry-run is given.""" + if os.path.isdir(path): + print("rm -r '{}'".format(path)) + if '--dry-run' not in sys.argv: + shutil.rmtree(path) + else: + print("rm '{}'".format(path)) + if '--dry-run' not in sys.argv: + os.remove(path) + + +def main(): + """Clean up lint in the current dir.""" + utils.change_cwd() + for elem in lint: + for f in glob.glob(elem): + remove(f) + + for root, _dirs, _files in os.walk(os.getcwd()): + path = os.path.basename(root) + if any(fnmatch.fnmatch(path, e) for e in recursive_lint): + remove(root) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/download_release.sh b/.config/qutebrowser/scripts/dev/download_release.sh new file mode 100644 index 0000000..207da21 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/download_release.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -e + +# This script downloads the given release from GitHub so we can mirror it on +# qutebrowser.org. + +tmpdir=$(mktemp -d) +oldpwd=$PWD + +if [[ $# != 1 ]]; then + echo "Usage: $0 <version>" >&2 + exit 1 +fi + +cd "$tmpdir" +mkdir windows + +base="https://github.com/qutebrowser/qutebrowser/releases/download/v$1" + +wget "$base/qutebrowser-$1.tar.gz" +wget "$base/qutebrowser-$1.tar.gz.asc" +wget "$base/qutebrowser-$1.dmg" +wget "$base/qutebrowser_${1}-1_all.deb" + +cd windows +wget "$base/qutebrowser-${1}-amd64.msi" +wget "$base/qutebrowser-${1}-win32.msi" +wget "$base/qutebrowser-${1}-windows-standalone-amd64.zip" +wget "$base/qutebrowser-${1}-windows-standalone-win32.zip" + +dest="/srv/http/qutebrowser/releases/v$1" +cd "$oldpwd" +sudo mv "$tmpdir" "$dest" +sudo chown -R http:http "$dest" diff --git a/.config/qutebrowser/scripts/dev/gen_resources.py b/.config/qutebrowser/scripts/dev/gen_resources.py new file mode 100644 index 0000000..cbfc69b --- /dev/null +++ b/.config/qutebrowser/scripts/dev/gen_resources.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# copyright 2014 florian bruhin (the compiler) <mail@qutebrowser.org> + +# this file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the gnu general public license as published by +# the free software foundation, either version 3 of the license, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but without any warranty; without even the implied warranty of +# merchantability or fitness for a particular purpose. see the +# gnu general public license for more details. +# +# you should have received a copy of the gnu general public license +# along with qutebrowser. if not, see <http://www.gnu.org/licenses/>. + +"""Generate Qt resources based on source files.""" + +import subprocess + +with open('qutebrowser/resources.py', 'w', encoding='utf-8') as f: + subprocess.run(['pyrcc5', 'qutebrowser.rcc'], stdout=f, check=True) diff --git a/.config/qutebrowser/scripts/dev/gen_versioninfo.py b/.config/qutebrowser/scripts/dev/gen_versioninfo.py new file mode 100644 index 0000000..1aa4b64 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/gen_versioninfo.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Generate file_version_info.txt for Pyinstaller use with Windows builds.""" + +import os.path +import sys + +# pylint: disable=import-error,no-member,useless-suppression +from PyInstaller.utils.win32 import versioninfo as vs +# pylint: enable=import-error,no-member,useless-suppression + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +import qutebrowser +from scripts import utils + + +def main(): + utils.change_cwd() + out_filename = 'misc/file_version_info.txt' + + filevers = qutebrowser.__version_info__ + (0,) + prodvers = qutebrowser.__version_info__ + (0,) + str_filevers = qutebrowser.__version__ + str_prodvers = qutebrowser.__version__ + + comment_text = qutebrowser.__doc__ + copyright_text = qutebrowser.__copyright__ + trademark_text = ("qutebrowser is free software under the GNU General " + "Public License") + + # https://www.science.co.il/language/Locale-codes.php#definitions + # https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx + en_us = 1033 # 0x0409 + utf_16 = 1200 # 0x04B0 + + ffi = vs.FixedFileInfo(filevers, prodvers) + + kids = [ + vs.StringFileInfo([ + # 0x0409: MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) + # 0x04B0: codepage 1200 (UTF-16LE) + vs.StringTable('040904B0', [ + vs.StringStruct('Comments', comment_text), + vs.StringStruct('CompanyName', "qutebrowser.org"), + vs.StringStruct('FileDescription', "qutebrowser"), + vs.StringStruct('FileVersion', str_filevers), + vs.StringStruct('InternalName', "qutebrowser"), + vs.StringStruct('LegalCopyright', copyright_text), + vs.StringStruct('LegalTrademarks', trademark_text), + vs.StringStruct('OriginalFilename', "qutebrowser.exe"), + vs.StringStruct('ProductName', "qutebrowser"), + vs.StringStruct('ProductVersion', str_prodvers) + ]), + ]), + vs.VarFileInfo([vs.VarStruct('Translation', [en_us, utf_16])]), + ] + + file_version_info = vs.VSVersionInfo(ffi, kids) + + with open(out_filename, 'w', encoding='utf-8') as f: + f.write(str(file_version_info)) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/get_coredumpctl_traces.py b/.config/qutebrowser/scripts/dev/get_coredumpctl_traces.py new file mode 100644 index 0000000..d286d38 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/get_coredumpctl_traces.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2015-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Get qutebrowser crash information and stacktraces from coredumpctl.""" + +import os +import os.path +import sys +import argparse +import subprocess +import tempfile + +import attr + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + + +@attr.s +class Line: + + """A line in "coredumpctl list".""" + + time = attr.ib() + pid = attr.ib() + uid = attr.ib() + gid = attr.ib() + sig = attr.ib() + present = attr.ib() + exe = attr.ib() + + +def _convert_present(data): + """Convert " "/"*" to True/False for parse_coredumpctl_line.""" + if data == '*': + return True + elif data == ' ': + return False + else: + raise ValueError(data) + + +def parse_coredumpctl_line(line): + """Parse a given string coming from coredumpctl and return a Line object. + + Example input: + Mon 2015-09-28 23:22:24 CEST 10606 1000 1000 11 /usr/bin/python3.4 + """ + fields = { + 'time': (0, 28, str), + 'pid': (29, 35, int), + 'uid': (36, 41, int), + 'gid': (42, 47, int), + 'sig': (48, 51, int), + 'present': (52, 53, _convert_present), + 'exe': (54, None, str), + } + + data = {} + for name, (start, end, converter) in fields.items(): + data[name] = converter(line[start:end]) + return Line(**data) + + +def get_info(pid): + """Get and parse "coredumpctl info" output for the given PID.""" + data = {} + output = subprocess.run(['coredumpctl', 'info', str(pid)], check=True, + stdout=subprocess.PIPE).stdout + output = output.decode('utf-8') + for line in output.split('\n'): + if not line.strip(): + continue + try: + key, value = line.split(':', maxsplit=1) + except ValueError: + # systemd stack output + continue + data[key.strip()] = value.strip() + return data + + +def is_qutebrowser_dump(parsed): + """Check if the given Line is a qutebrowser dump.""" + basename = os.path.basename(parsed.exe) + if basename == 'python' or basename.startswith('python3'): + info = get_info(parsed.pid) + try: + cmdline = info['Command Line'] + except KeyError: + return True + else: + return '-m qutebrowser' in cmdline + else: + return basename == 'qutebrowser' + + +def dump_infos_gdb(parsed): + """Dump all needed infos for the given crash using gdb.""" + with tempfile.TemporaryDirectory() as tempdir: + coredump = os.path.join(tempdir, 'dump') + subprocess.run(['coredumpctl', 'dump', '-o', coredump, + str(parsed.pid)], check=True) + subprocess.run(['gdb', parsed.exe, coredump, + '-ex', 'info threads', + '-ex', 'thread apply all bt full', + '-ex', 'quit'], check=True) + + +def dump_infos(parsed): + """Dump all possible infos for the given crash.""" + if not parsed.present: + info = get_info(parsed.pid) + print("{}: Signal {} with no coredump: {}".format( + parsed.time, info.get('Signal', None), + info.get('Command Line', None))) + else: + print('\n\n\n') + utils.print_title('{} - {}'.format(parsed.time, parsed.pid)) + sys.stdout.flush() + dump_infos_gdb(parsed) + + +def check_prerequisites(): + """Check if coredumpctl/gdb are installed.""" + for binary in ['coredumpctl', 'gdb']: + try: + subprocess.run([binary, '--version'], check=True) + except FileNotFoundError: + print("{} is needed to run this script!".format(binary), + file=sys.stderr) + sys.exit(1) + + +def main(): + check_prerequisites() + + parser = argparse.ArgumentParser() + parser.add_argument('--all', help="Also list crashes without coredumps.", + action='store_true') + args = parser.parse_args() + + coredumps = subprocess.run(['coredumpctl', 'list'], check=True, + stdout=subprocess.PIPE).stdout + lines = coredumps.decode('utf-8').split('\n') + for line in lines[1:]: + if not line.strip(): + continue + parsed = parse_coredumpctl_line(line) + if not parsed.present and not args.all: + continue + if is_qutebrowser_dump(parsed): + dump_infos(parsed) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/misc_checks.py b/.config/qutebrowser/scripts/dev/misc_checks.py new file mode 100644 index 0000000..2992464 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/misc_checks.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Various small code checkers.""" + +import os +import os.path +import re +import sys +import argparse +import subprocess +import tokenize +import traceback +import collections + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + + +def _get_files(only_py=False): + """Iterate over all python files and yield filenames.""" + for (dirpath, _dirnames, filenames) in os.walk('.'): + parts = dirpath.split(os.sep) + if len(parts) >= 2: + rootdir = parts[1] + if rootdir.startswith('.') or rootdir == 'htmlcov': + # ignore hidden dirs and htmlcov + continue + + if only_py: + endings = {'.py'} + else: + endings = {'.py', '.asciidoc', '.js', '.feature'} + files = (e for e in filenames if os.path.splitext(e)[1] in endings) + for name in files: + yield os.path.join(dirpath, name) + + +def check_git(): + """Check for uncommitted git files..""" + if not os.path.isdir(".git"): + print("No .git dir, ignoring") + print() + return False + untracked = [] + gitst = subprocess.run(['git', 'status', '--porcelain'], check=True, + stdout=subprocess.PIPE).stdout + gitst = gitst.decode('UTF-8').strip() + for line in gitst.splitlines(): + s, name = line.split(maxsplit=1) + if s == '??' and name != '.venv/': + untracked.append(name) + status = True + if untracked: + status = False + utils.print_col("Untracked files:", 'red') + print('\n'.join(untracked)) + print() + return status + + +def check_spelling(): + """Check commonly misspelled words.""" + # Words which I often misspell + words = {'[Bb]ehaviour', '[Qq]uitted', 'Ll]ikelyhood', '[Ss]ucessfully', + '[Oo]ccur[^rs .]', '[Ss]eperator', '[Ee]xplicitely', + '[Aa]uxillary', '[Aa]ccidentaly', '[Aa]mbigious', '[Ll]oosly', + '[Ii]nitialis', '[Cc]onvienence', '[Ss]imiliar', '[Uu]ncommited', + '[Rr]eproducable', '[Aa]n [Uu]ser', '[Cc]onvienience', + '[Ww]ether', '[Pp]rogramatically', '[Ss]plitted', '[Ee]xitted', + '[Mm]ininum', '[Rr]esett?ed', '[Rr]ecieved', '[Rr]egularily', + '[Uu]nderlaying', '[Ii]nexistant', '[Ee]lipsis', 'commiting', + 'existant', '[Rr]esetted', '[Ss]imilarily', '[Ii]nformations'} + + # Words which look better when splitted, but might need some fine tuning. + words |= {'[Ww]ebelements', '[Mm]ouseevent', '[Kk]eysequence', + '[Nn]ormalmode', '[Ee]ventloops', '[Ss]izehint', + '[Ss]tatemachine', '[Mm]etaobject', '[Ll]ogrecord', + '[Ff]iletype'} + + # Files which should be ignored, e.g. because they come from another + # package + ignored = [ + os.path.join('.', 'scripts', 'dev', 'misc_checks.py'), + os.path.join('.', 'qutebrowser', '3rdparty', 'pdfjs'), + os.path.join('.', 'tests', 'end2end', 'data', 'hints', 'ace', + 'ace.js'), + ] + + seen = collections.defaultdict(list) + try: + ok = True + for fn in _get_files(): + with tokenize.open(fn) as f: + if any(fn.startswith(i) for i in ignored): + continue + for line in f: + for w in words: + if (re.search(w, line) and + fn not in seen[w] and + '# pragma: no spellcheck' not in line): + print('Found "{}" in {}!'.format(w, fn)) + seen[w].append(fn) + ok = False + print() + return ok + except Exception: + traceback.print_exc() + return None + + +def check_vcs_conflict(): + """Check VCS conflict markers.""" + try: + ok = True + for fn in _get_files(only_py=True): + with tokenize.open(fn) as f: + for line in f: + if any(line.startswith(c * 7) for c in '<>=|'): + print("Found conflict marker in {}".format(fn)) + ok = False + print() + return ok + except Exception: + traceback.print_exc() + return None + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('checker', choices=('git', 'vcs', 'spelling'), + help="Which checker to run.") + args = parser.parse_args() + if args.checker == 'git': + ok = check_git() + elif args.checker == 'vcs': + ok = check_vcs_conflict() + elif args.checker == 'spelling': + ok = check_spelling() + return 0 if ok else 1 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/__init__.py b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/__init__.py new file mode 100644 index 0000000..1341a93 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/__init__.py @@ -0,0 +1 @@ +"""Custom pylint checkers.""" diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/config.py b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/config.py new file mode 100644 index 0000000..5aa5250 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/config.py @@ -0,0 +1,84 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Custom astroid checker for config calls.""" + +import sys +import pathlib + +import yaml +import astroid +from pylint import interfaces, checkers +from pylint.checkers import utils + + +OPTIONS = None +FAILED_LOAD = False + + +class ConfigChecker(checkers.BaseChecker): + + """Custom astroid checker for config calls.""" + + __implements__ = interfaces.IAstroidChecker + name = 'config' + msgs = { + 'E9998': ('%s is no valid config option.', # flake8: disable=S001 + 'bad-config-option', + None), + } + priority = -1 + printed_warning = False + + @utils.check_messages('bad-config-option') + def visit_attribute(self, node): + """Visit a getattr node.""" + # At the end of a config.val.foo.bar chain + if not isinstance(node.parent, astroid.Attribute): + # FIXME:conf do some proper check for this... + node_str = node.as_string() + prefix = 'config.val.' + if node_str.startswith(prefix): + self._check_config(node, node_str[len(prefix):]) + + def _check_config(self, node, name): + """Check that we're accessing proper config options.""" + if FAILED_LOAD: + if not ConfigChecker.printed_warning: + print("[WARN] Could not find configdata.yml. Please run " + "pylint from qutebrowser root.", file=sys.stderr) + print("Skipping some checks...", file=sys.stderr) + ConfigChecker.printed_warning = True + return + if name not in OPTIONS: + self.add_message('bad-config-option', node=node, args=name) + + +def register(linter): + """Register this checker.""" + linter.register_checker(ConfigChecker(linter)) + global OPTIONS + global FAILED_LOAD + yaml_file = pathlib.Path('qutebrowser') / 'config' / 'configdata.yml' + if not yaml_file.exists(): + OPTIONS = None + FAILED_LOAD = True + return + with yaml_file.open(mode='r', encoding='utf-8') as f: + OPTIONS = list(yaml.load(f)) diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/modeline.py b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/modeline.py new file mode 100644 index 0000000..429974c --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/modeline.py @@ -0,0 +1,63 @@ +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Checker for vim modelines in files.""" + +import os.path +import contextlib + +from pylint import interfaces, checkers + + +class ModelineChecker(checkers.BaseChecker): + + """Check for vim modelines in files.""" + + __implements__ = interfaces.IRawChecker + + name = 'modeline' + msgs = {'W9002': ('Does not have vim modeline', 'modeline-missing', None), + 'W9003': ('Modeline is invalid', 'invalid-modeline', None), + 'W9004': ('Modeline position is wrong', 'modeline-position', None)} + options = () + priority = -1 + + def process_module(self, node): + """Process the module.""" + if os.path.basename(os.path.splitext(node.file)[0]) == '__init__': + return + max_lineno = 1 + with contextlib.closing(node.stream()) as stream: + for (lineno, line) in enumerate(stream): + if lineno == 1 and line.startswith(b'#!'): + max_lineno += 1 + continue + elif line.startswith(b'# vim:'): + if lineno > max_lineno: + self.add_message('modeline-position', line=lineno) + if (line.rstrip() != b'# vim: ft=python ' + b'fileencoding=utf-8 sts=4 sw=4 et:'): + self.add_message('invalid-modeline', line=lineno) + break + else: + self.add_message('modeline-missing', line=1) + + +def register(linter): + """Register the checker.""" + linter.register_checker(ModelineChecker(linter)) diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/openencoding.py b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/openencoding.py new file mode 100644 index 0000000..f577011 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/openencoding.py @@ -0,0 +1,83 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Make sure open() has an encoding set.""" + +import astroid +from pylint import interfaces, checkers +from pylint.checkers import utils + + +class OpenEncodingChecker(checkers.BaseChecker): + + """Checker to check open() has an encoding set.""" + + __implements__ = interfaces.IAstroidChecker + name = 'open-encoding' + + msgs = { + 'W9400': ('open() called without encoding', 'open-without-encoding', + None), + } + + @utils.check_messages('open-without-encoding') + def visit_call(self, node): + """Visit a Call node.""" + if hasattr(node, 'func'): + infer = utils.safe_infer(node.func) + if infer and infer.root().name == '_io': + if getattr(node.func, 'name', None) in ['open', 'file']: + self._check_open_encoding(node) + + def _check_open_encoding(self, node): + """Check that an open() call always has an encoding set.""" + try: + mode_arg = utils.get_argument_from_call(node, position=1, + keyword='mode') + except utils.NoSuchArgumentError: + mode_arg = None + _encoding = None + try: + _encoding = utils.get_argument_from_call(node, position=2) + except utils.NoSuchArgumentError: + try: + _encoding = utils.get_argument_from_call(node, + keyword='encoding') + except utils.NoSuchArgumentError: + pass + if _encoding is None: + if mode_arg is None: + mode = None + else: + mode = utils.safe_infer(mode_arg) + if mode is not None and not isinstance(mode, astroid.Const): + # We can't say what mode is exactly. + return + if mode is None: + self.add_message('open-without-encoding', node=node) + elif 'b' in getattr(mode, 'value', ''): + # Files opened as binary don't need an encoding. + return + else: + self.add_message('open-without-encoding', node=node) + + +def register(linter): + """Register this checker.""" + linter.register_checker(OpenEncodingChecker(linter)) diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/settrace.py b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/settrace.py new file mode 100644 index 0000000..c82d646 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/qute_pylint/settrace.py @@ -0,0 +1,49 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Custom astroid checker for set_trace calls.""" + +from pylint.interfaces import IAstroidChecker +from pylint.checkers import BaseChecker, utils + + +class SetTraceChecker(BaseChecker): + + """Custom astroid checker for set_trace calls.""" + + __implements__ = IAstroidChecker + name = 'settrace' + msgs = { + 'E9101': ('set_trace call found', 'set-trace', None), + } + priority = -1 + + @utils.check_messages('set-trace') + def visit_call(self, node): + """Visit a Call node.""" + if hasattr(node, 'func'): + infer = utils.safe_infer(node.func) + if infer: + if getattr(node.func, 'name', None) == 'set_trace': + self.add_message('set-trace', node=node) + + +def register(linter): + """Register this checker.""" + linter.register_checker(SetTraceChecker(linter)) diff --git a/.config/qutebrowser/scripts/dev/pylint_checkers/setup.py b/.config/qutebrowser/scripts/dev/pylint_checkers/setup.py new file mode 100644 index 0000000..7833c7d --- /dev/null +++ b/.config/qutebrowser/scripts/dev/pylint_checkers/setup.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2016-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""This is only here so we can install those plugins in tox.ini easily.""" + +from setuptools import setup +setup(name='qute_pylint', packages=['qute_pylint']) diff --git a/.config/qutebrowser/scripts/dev/quit_segfault_test.sh b/.config/qutebrowser/scripts/dev/quit_segfault_test.sh new file mode 100755 index 0000000..389f125 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/quit_segfault_test.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +[[ $PWD == */scripts ]] && cd .. + +echo > crash.log +while :; do + exit=0 + while (( exit == 0 )); do + duration=$(( RANDOM % 10000 )) + python3 -m qutebrowser --debug ":later $duration quit" http://www.heise.de/ + exit=$? + done + echo "$(date) $exit $duration" >> crash.log +done diff --git a/.config/qutebrowser/scripts/dev/recompile_requirements.py b/.config/qutebrowser/scripts/dev/recompile_requirements.py new file mode 100644 index 0000000..6e26145 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/recompile_requirements.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2016-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Script to regenerate requirements files in misc/requirements.""" + +import re +import sys +import os.path +import glob +import subprocess +import tempfile + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + +REPO_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), + '..', '..') # /scripts/dev -> /scripts -> / +REQ_DIR = os.path.join(REPO_DIR, 'misc', 'requirements') + + +def convert_line(line, comments): + """Convert the given requirement line to place into the output.""" + for pattern, repl in comments['replace'].items(): + line = re.sub(pattern, repl, line) + + pkgname = line.split('=')[0] + + if pkgname in comments['ignore']: + line = '# ' + line + + try: + line += ' # ' + comments['comment'][pkgname] + except KeyError: + pass + + try: + line += ' # rq.filter: {}'.format(comments['filter'][pkgname]) + except KeyError: + pass + + return line + + +def read_comments(fobj): + """Find special comments in the config. + + Args: + fobj: A file object for the config. + + Return: + A dict with the parsed comment data. + """ + comments = { + 'filter': {}, + 'comment': {}, + 'ignore': [], + 'replace': {}, + } + for line in fobj: + if line.startswith('#@'): + command, args = line[2:].split(':', maxsplit=1) + command = command.strip() + args = args.strip() + if command == 'filter': + pkg, filt = args.split(' ', maxsplit=1) + comments['filter'][pkg] = filt + elif command == 'comment': + pkg, comment = args.split(' ', maxsplit=1) + comments['comment'][pkg] = comment + elif command == 'ignore': + comments['ignore'] += args.split(', ') + elif command == 'replace': + pattern, replacement = args.split(' ', maxsplit=1) + comments['replace'][pattern] = replacement + return comments + + +def get_all_names(): + """Get all requirement names based on filenames.""" + for filename in glob.glob(os.path.join(REQ_DIR, 'requirements-*.txt-raw')): + basename = os.path.basename(filename) + yield basename[len('requirements-'):-len('.txt-raw')] + + +def main(): + """Re-compile the given (or all) requirement files.""" + names = sys.argv[1:] if len(sys.argv) > 1 else sorted(get_all_names()) + + for name in names: + utils.print_title(name) + filename = os.path.join(REQ_DIR, + 'requirements-{}.txt-raw'.format(name)) + if name == 'qutebrowser': + outfile = os.path.join(REPO_DIR, 'requirements.txt') + else: + outfile = os.path.join(REQ_DIR, 'requirements-{}.txt'.format(name)) + + with tempfile.TemporaryDirectory() as tmpdir: + pip_bin = os.path.join(tmpdir, 'bin', 'pip') + subprocess.run(['virtualenv', tmpdir], check=True) + subprocess.run([pip_bin, 'install', '-r', filename], check=True) + proc = subprocess.run([pip_bin, 'freeze'], check=True, + stdout=subprocess.PIPE) + reqs = proc.stdout.decode('utf-8') + + with open(filename, 'r', encoding='utf-8') as f: + comments = read_comments(f) + + with open(outfile, 'w', encoding='utf-8') as f: + f.write("# This file is automatically generated by " + "scripts/dev/recompile_requirements.py\n\n") + for line in reqs.splitlines(): + f.write(convert_line(line, comments) + '\n') + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/run_profile.py b/.config/qutebrowser/scripts/dev/run_profile.py new file mode 100755 index 0000000..93e0b61 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/run_profile.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Profile qutebrowser.""" + +import sys +import cProfile +import os.path +import os +import tempfile +import subprocess +import shutil +import argparse +import shlex + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +import qutebrowser.qutebrowser + + +def parse_args(): + """Parse commandline arguments. + + Return: + A (namespace, remaining_args) tuple from argparse. + """ + parser = argparse.ArgumentParser() + parser.add_argument('--profile-tool', metavar='TOOL', + action='store', choices=['kcachegrind', 'snakeviz', + 'gprof2dot', 'none'], + default='snakeviz', + help="The tool to use to view the profiling data") + parser.add_argument('--profile-file', metavar='FILE', action='store', + help="The filename to use with --profile-tool=none") + return parser.parse_known_args() + + +def main(): + args, remaining = parse_args() + tempdir = tempfile.mkdtemp() + + if args.profile_tool == 'none': + profilefile = os.path.join(os.getcwd(), args.profile_file) + else: + profilefile = os.path.join(tempdir, 'profile') + + sys.argv = [sys.argv[0]] + remaining + + profiler = cProfile.Profile() + profiler.runcall(qutebrowser.qutebrowser.main) + + # If we have an exception after here, we don't want the qutebrowser + # exception hook to take over. + sys.excepthook = sys.__excepthook__ + profiler.dump_stats(profilefile) + + if args.profile_tool == 'none': + pass + elif args.profile_tool == 'gprof2dot': + # yep, shell=True. I know what I'm doing. + subprocess.run( + 'gprof2dot -f pstats {} | dot -Tpng | feh -F -'.format( + shlex.quote(profilefile)), shell=True) + elif args.profile_tool == 'kcachegrind': + callgraphfile = os.path.join(tempdir, 'callgraph') + subprocess.run(['pyprof2calltree', '-k', '-i', profilefile, + '-o', callgraphfile]) + elif args.profile_tool == 'snakeviz': + subprocess.run(['snakeviz', profilefile]) + + shutil.rmtree(tempdir) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/run_pylint_on_tests.py b/.config/qutebrowser/scripts/dev/run_pylint_on_tests.py new file mode 100644 index 0000000..7adf45f --- /dev/null +++ b/.config/qutebrowser/scripts/dev/run_pylint_on_tests.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Run pylint on tests. + +This is needed because pylint can't check a folder which isn't a package: +https://bitbucket.org/logilab/pylint/issue/512/ +""" + +import os +import os.path +import sys +import subprocess + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + + +def main(): + """Main entry point. + + Return: + The pylint exit status. + """ + utils.change_cwd() + files = [] + for dirpath, _dirnames, filenames in os.walk('tests'): + for fn in filenames: + if os.path.splitext(fn)[1] == '.py': + files.append(os.path.join(dirpath, fn)) + + disabled = [ + # pytest fixtures + 'redefined-outer-name', + 'unused-argument', + # things which are okay in tests + 'missing-docstring', + 'protected-access', + 'len-as-condition', + # directories without __init__.py... + 'import-error', + ] + + toxinidir = sys.argv[1] + pythonpath = os.environ.get('PYTHONPATH', '').split(os.pathsep) + [ + toxinidir, + ] + + args = (['--disable={}'.format(','.join(disabled)), + '--ignored-modules=helpers,pytest,PyQt5'] + + sys.argv[2:] + files) + env = os.environ.copy() + env['PYTHONPATH'] = os.pathsep.join(pythonpath) + + ret = subprocess.run(['pylint'] + args, env=env).returncode + return ret + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/.config/qutebrowser/scripts/dev/run_vulture.py b/.config/qutebrowser/scripts/dev/run_vulture.py new file mode 100755 index 0000000..cb19d62 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/run_vulture.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2015-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Run vulture on the source files and filter out false-positives.""" + +import sys +import os +import re +import tempfile +import inspect +import argparse + +import vulture + +import qutebrowser.app # pylint: disable=unused-import +from qutebrowser.commands import cmdutils +from qutebrowser.utils import utils +from qutebrowser.browser.webkit import rfc6266 +# To run the decorators from there +# pylint: disable=unused-import +from qutebrowser.browser.webkit.network import webkitqutescheme +# pylint: enable=unused-import +from qutebrowser.browser import qutescheme +from qutebrowser.config import configtypes + + +def whitelist_generator(): # noqa + """Generator which yields lines to add to a vulture whitelist.""" + # qutebrowser commands + for cmd in cmdutils.cmd_dict.values(): + yield utils.qualname(cmd.handler) + + # pyPEG2 classes + for name, member in inspect.getmembers(rfc6266, inspect.isclass): + for attr in ['grammar', 'regex']: + if hasattr(member, attr): + yield 'qutebrowser.browser.webkit.rfc6266.{}.{}'.format(name, + attr) + + # PyQt properties + yield 'qutebrowser.mainwindow.statusbar.bar.StatusBar.color_flags' + yield 'qutebrowser.mainwindow.statusbar.url.UrlText.urltype' + + # Not used yet, but soon (or when debugging) + yield 'qutebrowser.utils.debug.log_events' + yield 'qutebrowser.utils.debug.log_signals' + yield 'qutebrowser.utils.debug.qflags_key' + yield 'qutebrowser.utils.qtutils.QtOSError.qt_errno' + yield 'scripts.utils.bg_colors' + + # Qt attributes + yield 'PyQt5.QtWebKit.QWebPage.ErrorPageExtensionReturn().baseUrl' + yield 'PyQt5.QtWebKit.QWebPage.ErrorPageExtensionReturn().content' + yield 'PyQt5.QtWebKit.QWebPage.ErrorPageExtensionReturn().encoding' + yield 'PyQt5.QtWebKit.QWebPage.ErrorPageExtensionReturn().fileNames' + yield 'PyQt5.QtWidgets.QStyleOptionViewItem.backgroundColor' + + ## qute://... handlers + for name in qutescheme._HANDLERS: # pylint: disable=protected-access + name = name.replace('-', '_') + yield 'qutebrowser.browser.qutescheme.qute_' + name + + # Other false-positives + yield 'qutebrowser.completion.models.listcategory.ListCategory().lessThan' + yield 'qutebrowser.utils.jinja.Loader.get_source' + yield 'qutebrowser.utils.log.QtWarningFilter.filter' + yield 'qutebrowser.browser.pdfjs.is_available' + yield 'qutebrowser.misc.guiprocess.spawn_output' + yield 'QEvent.posted' + yield 'log_stack' # from message.py + yield 'propagate' # logging.getLogger('...).propagate = False + # vulture doesn't notice the hasattr() and thus thinks netrc_used is unused + # in NetworkManager.on_authentication_required + yield 'PyQt5.QtNetwork.QNetworkReply.netrc_used' + yield 'qutebrowser.browser.downloads.last_used_directory' + yield 'PaintContext.clip' # from completiondelegate.py + yield 'logging.LogRecord.log_color' # from logging.py + yield 'scripts.utils.use_color' # from asciidoc2html.py + for attr in ['pyeval_output', 'log_clipboard', 'fake_clipboard']: + yield 'qutebrowser.misc.utilcmds.' + attr + + for attr in ['fileno', 'truncate', 'closed', 'readable']: + yield 'qutebrowser.utils.qtutils.PyQIODevice.' + attr + + for attr in ['msgs', 'priority', 'visit_attribute']: + yield 'scripts.dev.pylint_checkers.config.' + attr + for attr in ['visit_call', 'process_module']: + yield 'scripts.dev.pylint_checkers.modeline.' + attr + + for name, _member in inspect.getmembers(configtypes, inspect.isclass): + yield 'qutebrowser.config.configtypes.' + name + yield 'qutebrowser.config.configexc.ConfigErrorDesc.traceback' + yield 'qutebrowser.config.configfiles.ConfigAPI.load_autoconfig' + yield 'types.ModuleType.c' # configfiles:read_config_py + for name in ['configdir', 'datadir']: + yield 'qutebrowser.config.configfiles.ConfigAPI.' + name + + yield 'include_aliases' + + for attr in ['_get_default_metavar_for_optional', + '_get_default_metavar_for_positional', '_metavar_formatter']: + yield 'scripts.dev.src2asciidoc.UsageFormatter.' + attr + + # attrs + yield 'qutebrowser.browser.webkit.network.networkmanager.ProxyId.hostname' + yield 'qutebrowser.command.command.ArgInfo._validate_exclusive' + yield 'scripts.get_coredumpctl_traces.Line.uid' + yield 'scripts.get_coredumpctl_traces.Line.gid' + yield 'scripts.importer.import_moz_places.places.row_factory' + + +def filter_func(item): + """Check if a missing function should be filtered or not. + + Return: + True if the missing function should be filtered/ignored, False + otherwise. + """ + return bool(re.fullmatch(r'[a-z]+[A-Z][a-zA-Z]+', item.name)) + + +def report(items): + """Generate a report based on the given vulture.Item's. + + Based on vulture.Vulture.report, but we can't use that as we can't set the + properties which get used for the items. + """ + output = [] + for item in sorted(items, + key=lambda e: (e.filename.lower(), e.first_lineno)): + output.append(item.get_report()) + return output + + +def run(files): + """Run vulture over the given files.""" + with tempfile.NamedTemporaryFile(mode='w', delete=False) as whitelist_file: + for line in whitelist_generator(): + whitelist_file.write(line + '\n') + + whitelist_file.close() + + vult = vulture.Vulture(verbose=False) + vult.scavenge(files + [whitelist_file.name]) + + os.remove(whitelist_file.name) + + filters = { + 'unused_funcs': filter_func, + 'unused_props': lambda item: False, + 'unused_vars': lambda item: False, + 'unused_attrs': lambda item: False, + } + + items = [] + + for attr, func in filters.items(): + sub_items = getattr(vult, attr) + for item in sub_items: + filtered = func(item) + if not filtered: + items.append(item) + + return report(items) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('files', nargs='*', default=['qutebrowser', 'scripts', + 'setup.py']) + args = parser.parse_args() + out = run(args.files) + for line in out: + print(line) + sys.exit(bool(out)) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/segfault_test.py b/.config/qutebrowser/scripts/dev/segfault_test.py new file mode 100755 index 0000000..aaf495f --- /dev/null +++ b/.config/qutebrowser/scripts/dev/segfault_test.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Tester for Qt segfaults with different harfbuzz engines.""" + +import os +import os.path +import signal +import sys +import subprocess + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +from scripts import utils + + +SCRIPT = """ +import sys + +from PyQt5.QtCore import QUrl +from PyQt5.QtWidgets import QApplication +from PyQt5.QtWebKitWidgets import QWebView + +def on_load_finished(ok): + if ok: + app.exit(0) + else: + app.exit(1) + +app = QApplication([]) +wv = QWebView() +wv.loadFinished.connect(on_load_finished) +wv.load(QUrl(sys.argv[1])) +#wv.show() +app.exec_() +""" + + +def print_ret(ret): + """Print information about an exit status.""" + if ret == 0: + utils.print_col("success", 'green') + elif ret == -signal.SIGSEGV: + utils.print_col("segfault", 'red') + else: + utils.print_col("error {}".format(ret), 'yellow') + print() + + +def main(): + retvals = [] + if len(sys.argv) < 2: + # pages which previously caused problems + pages = [ + # ANGLE, https://bugreports.qt.io/browse/QTBUG-39723 + ('http://www.binpress.com/', False), + ('http://david.li/flow/', False), + ('https://imzdl.com/', False), + # not reproducible + # https://bugreports.qt.io/browse/QTBUG-39847 + ('http://www.20min.ch/', True), + # HarfBuzz, https://bugreports.qt.io/browse/QTBUG-39278 + ('http://www.the-compiler.org/', True), + ('http://phoronix.com', True), + ('http://twitter.com', True), + # HarfBuzz #2, https://bugreports.qt.io/browse/QTBUG-36099 + ('http://lenta.ru/', True), + # Unknown, https://bugreports.qt.io/browse/QTBUG-41360 + ('http://salt.readthedocs.org/en/latest/topics/pillar/', True), + ] + else: + pages = [(e, True) for e in sys.argv[1:]] + for page, test_harfbuzz in pages: + utils.print_bold("==== {} ====".format(page)) + if test_harfbuzz: + print("With system harfbuzz:") + ret = subprocess.run([sys.executable, '-c', SCRIPT, page]).returncode + print_ret(ret) + retvals.append(ret) + if test_harfbuzz: + print("With QT_HARFBUZZ=old:") + env = dict(os.environ) + env['QT_HARFBUZZ'] = 'old' + ret = subprocess.run([sys.executable, '-c', SCRIPT, page], + env=env).returncode + print_ret(ret) + retvals.append(ret) + print("With QT_HARFBUZZ=new:") + env = dict(os.environ) + env['QT_HARFBUZZ'] = 'new' + ret = subprocess.run([sys.executable, '-c', SCRIPT, page], + env=env).returncode + print_ret(ret) + retvals.append(ret) + if all(r == 0 for r in retvals): + sys.exit(0) + else: + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/src2asciidoc.py b/.config/qutebrowser/scripts/dev/src2asciidoc.py new file mode 100755 index 0000000..cc00c37 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/src2asciidoc.py @@ -0,0 +1,561 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Generate asciidoc source for qutebrowser based on docstrings.""" + +import os +import os.path +import sys +import shutil +import inspect +import subprocess +import tempfile +import argparse + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, + os.pardir)) + +# We import qutebrowser.app so all @cmdutils-register decorators are run. +import qutebrowser.app +from qutebrowser import qutebrowser, commands +from qutebrowser.commands import cmdutils, argparser +from qutebrowser.config import configdata, configtypes +from qutebrowser.utils import docutils, usertypes +from scripts import asciidoc2html, utils + +FILE_HEADER = """ +// DO NOT EDIT THIS FILE DIRECTLY! +// It is autogenerated by running: +// $ python3 scripts/dev/src2asciidoc.py +// vim: readonly: + +""".lstrip() + + +class UsageFormatter(argparse.HelpFormatter): + + """Patched HelpFormatter to include some asciidoc markup in the usage. + + This does some horrible things, but the alternative would be to reimplement + argparse.HelpFormatter while copying 99% of the code :-/ + """ + + def _format_usage(self, usage, actions, groups, _prefix): + """Override _format_usage to not add the 'usage:' prefix.""" + return super()._format_usage(usage, actions, groups, '') + + def _get_default_metavar_for_optional(self, action): + """Do name transforming when getting metavar.""" + return argparser.arg_name(action.dest.upper()) + + def _get_default_metavar_for_positional(self, action): + """Do name transforming when getting metavar.""" + return argparser.arg_name(action.dest) + + def _metavar_formatter(self, action, default_metavar): + """Override _metavar_formatter to add asciidoc markup to metavars. + + Most code here is copied from Python 3.4's argparse.py. + """ + if action.metavar is not None: + result = "'{}'".format(action.metavar) + elif action.choices is not None: + choice_strs = [str(choice) for choice in action.choices] + result = ('{' + ','.join('*{}*'.format(e) for e in choice_strs) + + '}') + else: + result = "'{}'".format(default_metavar) + + def fmt(tuple_size): + """Format the result according to the tuple size.""" + if isinstance(result, tuple): + return result + else: + return (result, ) * tuple_size + return fmt + + def _format_actions_usage(self, actions, groups): + """Override _format_actions_usage to add asciidoc markup to flags. + + Because argparse.py's _format_actions_usage is very complex, we first + monkey-patch the option strings to include the asciidoc markup, then + run the original method, then undo the patching. + """ + old_option_strings = {} + for action in actions: + old_option_strings[action] = action.option_strings[:] + action.option_strings = ['*{}*'.format(s) + for s in action.option_strings] + ret = super()._format_actions_usage(actions, groups) + for action in actions: + action.option_strings = old_option_strings[action] + return ret + + +def _open_file(name, mode='w'): + """Open a file with a preset newline/encoding mode.""" + return open(name, mode, newline='\n', encoding='utf-8') + + +def _get_cmd_syntax(_name, cmd): + """Get the command syntax for a command. + + We monkey-patch the parser's formatter_class here to use our UsageFormatter + which adds some asciidoc markup. + """ + old_fmt_class = cmd.parser.formatter_class + cmd.parser.formatter_class = UsageFormatter + usage = cmd.parser.format_usage().rstrip() + cmd.parser.formatter_class = old_fmt_class + return usage + + +def _get_command_quickref(cmds): + """Generate the command quick reference.""" + out = [] + out.append('[options="header",width="75%",cols="25%,75%"]') + out.append('|==============') + out.append('|Command|Description') + for name, cmd in cmds: + desc = inspect.getdoc(cmd.handler).splitlines()[0] + out.append('|<<{},{}>>|{}'.format(name, name, desc)) + out.append('|==============') + return '\n'.join(out) + + +def _get_setting_quickref(): + """Generate the settings quick reference.""" + out = [] + out.append('') + out.append('[options="header",width="75%",cols="25%,75%"]') + out.append('|==============') + out.append('|Setting|Description') + for opt in sorted(configdata.DATA.values()): + desc = opt.description.splitlines()[0] + out.append('|<<{},{}>>|{}'.format(opt.name, opt.name, desc)) + out.append('|==============') + return '\n'.join(out) + + +def _get_configtypes(): + """Get configtypes classes to document.""" + predicate = lambda e: ( + inspect.isclass(e) and + # pylint: disable=protected-access + e not in [configtypes.BaseType, configtypes.MappingType, + configtypes._Numeric] and + # pylint: enable=protected-access + issubclass(e, configtypes.BaseType)) + yield from inspect.getmembers(configtypes, predicate) + + +def _get_setting_types_quickref(): + """Generate the setting types quick reference.""" + out = [] + out.append('[[types]]') + out.append('[options="header",width="75%",cols="25%,75%"]') + out.append('|==============') + out.append('|Type|Description') + + for name, typ in _get_configtypes(): + parser = docutils.DocstringParser(typ) + desc = parser.short_desc + if parser.long_desc: + desc += '\n\n' + parser.long_desc + out.append('|{}|{}'.format(name, desc)) + + out.append('|==============') + return '\n'.join(out) + + +def _get_command_doc(name, cmd): + """Generate the documentation for a command.""" + output = ['[[{}]]'.format(name)] + output += ['=== {}'.format(name)] + syntax = _get_cmd_syntax(name, cmd) + if syntax != name: + output.append('Syntax: +:{}+'.format(syntax)) + output.append("") + parser = docutils.DocstringParser(cmd.handler) + output.append(parser.short_desc) + if parser.long_desc: + output.append("") + output.append(parser.long_desc) + + output += list(_get_command_doc_args(cmd, parser)) + output += list(_get_command_doc_count(cmd, parser)) + output += list(_get_command_doc_notes(cmd)) + + output.append("") + output.append("") + return '\n'.join(output) + + +def _get_command_doc_args(cmd, parser): + """Get docs for the arguments of a command. + + Args: + cmd: The Command to get the docs for. + parser: The DocstringParser to use. + + Yield: + Strings which should be added to the docs. + """ + if cmd.pos_args: + yield "" + yield "==== positional arguments" + for arg, name in cmd.pos_args: + try: + yield "* +'{}'+: {}".format(name, parser.arg_descs[arg]) + except KeyError as e: + raise KeyError("No description for arg {} of command " + "'{}'!".format(e, cmd.name)) from e + + if cmd.opt_args: + yield "" + yield "==== optional arguments" + for arg, (long_flag, short_flag) in cmd.opt_args.items(): + try: + yield '* +*{}*+, +*{}*+: {}'.format(short_flag, long_flag, + parser.arg_descs[arg]) + except KeyError as e: + raise KeyError("No description for arg {} of command " + "'{}'!".format(e, cmd.name)) from e + + +def _get_command_doc_count(cmd, parser): + """Get docs for the count of a command. + + Args: + cmd: The Command to get the docs for. + parser: The DocstringParser to use. + + Yield: + Strings which should be added to the docs. + """ + for param in inspect.signature(cmd.handler).parameters.values(): + if cmd.get_arg_info(param).count: + yield "" + yield "==== count" + try: + yield parser.arg_descs[param.name] + except KeyError as e: + raise KeyError("No description for count arg {!r} of command " + "{!r}!".format(param.name, cmd.name)) from e + + +def _get_command_doc_notes(cmd): + """Get docs for the notes of a command. + + Args: + cmd: The Command to get the docs for. + parser: The DocstringParser to use. + + Yield: + Strings which should be added to the docs. + """ + if (cmd.maxsplit is not None or cmd.no_cmd_split or + cmd.no_replace_variables and cmd.name != "spawn"): + yield "" + yield "==== note" + if cmd.maxsplit is not None: + yield ("* This command does not split arguments after the last " + "argument and handles quotes literally.") + if cmd.no_cmd_split: + yield ("* With this command, +;;+ is interpreted literally " + "instead of splitting off a second command.") + if cmd.no_replace_variables and cmd.name != "spawn": + yield r"* This command does not replace variables like +\{url\}+." + + +def _get_action_metavar(action, nargs=1): + """Get the metavar to display for an argparse action. + + Args: + action: The argparse action to get the metavar for. + nargs: The nargs setting for the related argument. + """ + if action.metavar is not None: + if isinstance(action.metavar, str): + elems = [action.metavar] * nargs + else: + elems = action.metavar + return ' '.join("'{}'".format(e) for e in elems) + elif action.choices is not None: + choices = ','.join(str(e) for e in action.choices) + return "'{{{}}}'".format(choices) + else: + return "'{}'".format(action.dest.upper()) + + +def _format_action_args(action): + """Get an argument string based on an argparse action.""" + if action.nargs is None: + return _get_action_metavar(action) + elif action.nargs == '?': + return '[{}]'.format(_get_action_metavar(action)) + elif action.nargs == '*': + return '[{mv} [{mv} ...]]'.format(mv=_get_action_metavar(action)) + elif action.nargs == '+': + return '{mv} [{mv} ...]'.format(mv=_get_action_metavar(action)) + elif action.nargs == '...': + return '...' + else: + return _get_action_metavar(action, nargs=action.nargs) + + +def _format_action(action): + """Get an invocation string/help from an argparse action.""" + if action.help == argparse.SUPPRESS: + return None + if not action.option_strings: + invocation = '*{}*::'.format(_get_action_metavar(action)) + else: + parts = [] + if action.nargs == 0: + # Doesn't take a value, so the syntax is -s, --long + parts += ['*{}*'.format(s) for s in action.option_strings] + else: + # Takes a value, so the syntax is -s ARGS or --long ARGS. + args_string = _format_action_args(action) + for opt in action.option_strings: + parts.append('*{}* {}'.format(opt, args_string)) + invocation = ', '.join(parts) + '::' + return '{}\n {}\n'.format(invocation, action.help) + + +def generate_commands(filename): + """Generate the complete commands section.""" + with _open_file(filename) as f: + f.write(FILE_HEADER) + f.write("= Commands\n\n") + f.write(commands.__doc__) + normal_cmds = [] + other_cmds = [] + debug_cmds = [] + for name, cmd in cmdutils.cmd_dict.items(): + if cmd.deprecated: + continue + if usertypes.KeyMode.normal not in cmd.modes: + other_cmds.append((name, cmd)) + elif cmd.debug: + debug_cmds.append((name, cmd)) + else: + normal_cmds.append((name, cmd)) + normal_cmds.sort() + other_cmds.sort() + debug_cmds.sort() + f.write("\n") + f.write("== Normal commands\n") + f.write(".Quick reference\n") + f.write(_get_command_quickref(normal_cmds) + '\n') + for name, cmd in normal_cmds: + f.write(_get_command_doc(name, cmd)) + f.write("\n") + f.write("== Commands not usable in normal mode\n") + f.write(".Quick reference\n") + f.write(_get_command_quickref(other_cmds) + '\n') + for name, cmd in other_cmds: + f.write(_get_command_doc(name, cmd)) + f.write("\n") + f.write("== Debugging commands\n") + f.write("These commands are mainly intended for debugging. They are " + "hidden if qutebrowser was started without the " + "`--debug`-flag.\n") + f.write("\n") + f.write(".Quick reference\n") + f.write(_get_command_quickref(debug_cmds) + '\n') + for name, cmd in debug_cmds: + f.write(_get_command_doc(name, cmd)) + + +def _generate_setting_backend_info(f, opt): + """Generate backend information for the given option.""" + all_backends = [usertypes.Backend.QtWebKit, usertypes.Backend.QtWebEngine] + if opt.raw_backends is not None: + for name, conditional in sorted(opt.raw_backends.items()): + if conditional is True: + pass + elif conditional is False: + f.write("\nOn {}, this setting is unavailable.\n".format(name)) + else: + f.write("\nOn {}, this setting requires {} or newer.\n" + .format(name, conditional)) + elif opt.backends == all_backends: + pass + elif opt.backends == [usertypes.Backend.QtWebKit]: + f.write("\nThis setting is only available with the QtWebKit " + "backend.\n") + elif opt.backends == [usertypes.Backend.QtWebEngine]: + f.write("\nThis setting is only available with the QtWebEngine " + "backend.\n") + else: + raise ValueError("Invalid value {!r} for opt.backends" + .format(opt.backends)) + + +def _generate_setting_option(f, opt): + """Generate documentation for a single section.""" + f.write("\n") + f.write('[[{}]]'.format(opt.name) + "\n") + f.write("=== {}".format(opt.name) + "\n") + f.write(opt.description + "\n") + if opt.restart: + f.write("This setting requires a restart.\n") + if opt.supports_pattern: + f.write("\nThis setting supports URL patterns.\n") + if opt.no_autoconfig: + f.write("\nThis setting can only be set in config.py.\n") + f.write("\n") + typ = opt.typ.get_name().replace(',', ',') + f.write('Type: <<types,{typ}>>\n'.format(typ=typ)) + f.write("\n") + + valid_values = opt.typ.get_valid_values() + if valid_values is not None and valid_values.generate_docs: + f.write("Valid values:\n") + f.write("\n") + for val in valid_values: + try: + desc = valid_values.descriptions[val] + f.write(" * +{}+: {}".format(val, desc) + "\n") + except KeyError: + f.write(" * +{}+".format(val) + "\n") + f.write("\n") + + f.write("Default: {}\n".format(opt.typ.to_doc(opt.default))) + _generate_setting_backend_info(f, opt) + + +def generate_settings(filename): + """Generate the complete settings section.""" + configdata.init() + with _open_file(filename) as f: + f.write(FILE_HEADER) + f.write("= Setting reference\n\n") + f.write("== All settings\n") + f.write(_get_setting_quickref() + "\n") + for opt in sorted(configdata.DATA.values()): + _generate_setting_option(f, opt) + f.write("\n== Setting types\n") + f.write(_get_setting_types_quickref() + "\n") + + +def _format_block(filename, what, data): + """Format a block in a file. + + The block is delimited by markers like these: + // QUTE_*_START + ... + // QUTE_*_END + + The * part is the part which should be given as 'what'. + + Args: + filename: The file to change. + what: What to change (authors, options, etc.) + data; A list of strings which is the new data. + """ + what = what.upper() + oshandle, tmpname = tempfile.mkstemp() + try: + with _open_file(filename, mode='r') as infile, \ + _open_file(oshandle, mode='w') as temp: + found_start = False + found_end = False + for line in infile: + if line.strip() == '// QUTE_{}_START'.format(what): + temp.write(line) + temp.write(''.join(data)) + found_start = True + elif line.strip() == '// QUTE_{}_END'.format(what.upper()): + temp.write(line) + found_end = True + elif (not found_start) or found_end: + temp.write(line) + if not found_start: + raise Exception("Marker '// QUTE_{}_START' not found in " + "'{}'!".format(what, filename)) + elif not found_end: + raise Exception("Marker '// QUTE_{}_END' not found in " + "'{}'!".format(what, filename)) + except: + os.remove(tmpname) + raise + else: + os.remove(filename) + shutil.move(tmpname, filename) + + +def regenerate_manpage(filename): + """Update manpage OPTIONS using an argparse parser.""" + parser = qutebrowser.get_argparser() + groups = [] + # positionals, optionals and user-defined groups + # pylint: disable=protected-access + for group in parser._action_groups: + groupdata = [] + groupdata.append('=== {}'.format(group.title)) + if group.description is not None: + groupdata.append(group.description) + for action in group._group_actions: + action_data = _format_action(action) + if action_data is not None: + groupdata.append(action_data) + groups.append('\n'.join(groupdata)) + # pylint: enable=protected-access + options = '\n'.join(groups) + # epilog + if parser.epilog is not None: + options += parser.epilog + _format_block(filename, 'options', options) + + +def regenerate_cheatsheet(): + """Generate cheatsheet PNGs based on the SVG.""" + files = [ + ('doc/img/cheatsheet-small.png', 300, 185), + ('doc/img/cheatsheet-big.png', 3342, 2060), + ] + + for filename, x, y in files: + subprocess.run(['inkscape', '-e', filename, '-b', 'white', + '-w', str(x), '-h', str(y), + 'misc/cheatsheet.svg'], check=True) + + +def main(): + """Regenerate all documentation.""" + utils.change_cwd() + print("Generating manpage...") + regenerate_manpage('doc/qutebrowser.1.asciidoc') + print("Generating settings help...") + generate_settings('doc/help/settings.asciidoc') + print("Generating command help...") + generate_commands('doc/help/commands.asciidoc') + if '--cheatsheet' in sys.argv: + print("Regenerating cheatsheet .pngs") + regenerate_cheatsheet() + if '--html' in sys.argv: + asciidoc2html.main() + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/standardpaths_tester.py b/.config/qutebrowser/scripts/dev/standardpaths_tester.py new file mode 100644 index 0000000..27b8382 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/standardpaths_tester.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2017-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Show various QStandardPath paths.""" + +import os +import sys + +from PyQt5.QtCore import (QT_VERSION_STR, PYQT_VERSION_STR, qVersion, + QStandardPaths, QCoreApplication) + + +def print_header(): + """Show system information.""" + print("Python {}".format(sys.version)) + print("os.name: {}".format(os.name)) + print("sys.platform: {}".format(sys.platform)) + print() + + print("Qt {}, compiled {}".format(qVersion(), QT_VERSION_STR)) + print("PyQt {}".format(PYQT_VERSION_STR)) + print() + + +def print_paths(): + """Print all QStandardPaths.StandardLocation members.""" + for name, obj in vars(QStandardPaths).items(): + if isinstance(obj, QStandardPaths.StandardLocation): + location = QStandardPaths.writableLocation(obj) + print("{:25} {}".format(name, location)) + + +def main(): + print_header() + + print("No QApplication") + print("===============") + print() + print_paths() + + app = QCoreApplication(sys.argv) + app.setApplicationName("qapp_name") + + print() + print("With QApplication") + print("=================") + print() + print_paths() + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/strip_whitespace.sh b/.config/qutebrowser/scripts/dev/strip_whitespace.sh new file mode 100644 index 0000000..ee14278 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/strip_whitespace.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Strip trailing whitespace from files in this repo + +find qutebrowser scripts tests \ + -type f \( \ + -name '*.py' -o \ + -name '*.feature' -o \ + -name '*.sh' \ + \) -exec sed -i 's/ \+$//' {} + diff --git a/.config/qutebrowser/scripts/dev/ua_fetch.py b/.config/qutebrowser/scripts/dev/ua_fetch.py new file mode 100755 index 0000000..75ce4c2 --- /dev/null +++ b/.config/qutebrowser/scripts/dev/ua_fetch.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2015-2018 lamarpavel +# Copyright 2015-2018 Alexey Nabrodov (Averrin) +# Copyright 2015-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + + +"""Fetch list of popular user-agents. + +The script is based on a gist posted by github.com/averrin, the output of this +script is formatted to be pasted into configdata.yml +""" + +import requests +from lxml import html # pylint: disable=import-error + + +def fetch(): + """Fetch list of popular user-agents. + + Return: + List of relevant strings. + """ + url = 'https://techblog.willshouse.com/2012/01/03/most-common-user-agents/' + page = requests.get(url) + page = html.fromstring(page.text) + path = '//*[@id="post-2229"]/div[2]/table/tbody' + return page.xpath(path)[0] + + +def filter_list(complete_list, browsers): + """Filter the received list based on a look up table. + + The LUT should be a dictionary of the format {browser: versions}, where + 'browser' is the name of the browser (eg. "Firefox") as string and + 'versions' is a set of different versions of this browser that should be + included when found (eg. {"Linux", "MacOSX"}). This function returns a + dictionary with the same keys as the LUT, but storing lists of tuples + (user_agent, browser_description) as values. + """ + # pylint: disable=too-many-nested-blocks + table = {} + for entry in complete_list: + # Tuple of (user_agent, browser_description) + candidate = (entry[1].text_content(), entry[2].text_content()) + for name in browsers: + found = False + if name.lower() in candidate[1].lower(): + for version in browsers[name]: + if version.lower() in candidate[1].lower(): + if table.get(name) is None: + table[name] = [] + table[name].append(candidate) + browsers[name].remove(version) + found = True + break + if found: + break + return table + + +def add_diversity(table): + """Insert a few additional entries for diversity into the dict. + + (as returned by filter_list()) + """ + table["Obscure"] = [ + ('Mozilla/5.0 (compatible; Googlebot/2.1; ' + '+http://www.google.com/bot.html', + "Google Bot"), + ('Wget/1.16.1 (linux-gnu)', + "wget 1.16.1"), + ('curl/7.40.0', + "curl 7.40.0"), + ('Mozilla/5.0 (Linux; U; Android 7.1.2) AppleWebKit/534.30 ' + '(KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', + "Mobile Generic Android"), + ('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like ' + 'Gecko', + "IE 11.0 for Desktop Win7 64-bit"), + ] + return table + + +def main(): + """Generate user agent code.""" + fetched = fetch() + lut = { + "Firefox": {"Win", "MacOSX", "Linux", "Android"}, + "Chrome": {"Win", "MacOSX", "Linux"}, + "Safari": {"MacOSX", "iOS"} + } + filtered = filter_list(fetched, lut) + filtered = add_diversity(filtered) + + tab = " " + for browser in ["Firefox", "Safari", "Chrome", "Obscure"]: + for it in filtered[browser]: + print('{}- - "{}"'.format(3 * tab, it[0])) + desc = it[1].replace('\xa0', ' ').replace(' ', ' ') + print("{}- {}".format(4 * tab, desc)) + print("") + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dev/update_3rdparty.py b/.config/qutebrowser/scripts/dev/update_3rdparty.py new file mode 100755 index 0000000..c40015d --- /dev/null +++ b/.config/qutebrowser/scripts/dev/update_3rdparty.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2015 Daniel Schadt +# Copyright 2016-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Update all third-party-modules.""" + +import argparse +import urllib.request +import urllib.error +import shutil +import json +import os +import sys + +sys.path.insert( + 0, os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)) +from scripts import dictcli +from qutebrowser.config import configdata + + +def get_latest_pdfjs_url(): + """Get the URL of the latest pdf.js prebuilt package. + + Returns a (version, url)-tuple. + """ + github_api = 'https://api.github.com' + endpoint = 'repos/mozilla/pdf.js/releases/latest' + request_url = '{}/{}'.format(github_api, endpoint) + with urllib.request.urlopen(request_url) as fp: + data = json.loads(fp.read().decode('utf-8')) + + download_url = data['assets'][0]['browser_download_url'] + version_name = data['name'] + return (version_name, download_url) + + +def update_pdfjs(target_version=None): + """Download and extract the latest pdf.js version. + + If target_version is not None, download the given version instead. + + Args: + target_version: None or version string ('x.y.z') + """ + if target_version is None: + version, url = get_latest_pdfjs_url() + else: + # We need target_version as x.y.z, without the 'v' prefix, though the + # user might give it on the command line + if target_version.startswith('v'): + target_version = target_version[1:] + # version should have the prefix to be consistent with the return value + # of get_latest_pdfjs_url() + version = 'v' + target_version + url = ('https://github.com/mozilla/pdf.js/releases/download/' + 'v{0}/pdfjs-{0}-dist.zip').format(target_version) + + os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), + '..', '..')) + target_path = os.path.join('qutebrowser', '3rdparty', 'pdfjs') + print("=> Downloading pdf.js {}".format(version)) + try: + (archive_path, _headers) = urllib.request.urlretrieve(url) + except urllib.error.HTTPError as error: + print("Could not retrieve pdfjs {}: {}".format(version, error)) + return + if os.path.isdir(target_path): + print("Removing old version in {}".format(target_path)) + shutil.rmtree(target_path) + os.makedirs(target_path) + print("Extracting new version") + with open(archive_path, 'rb') as archive: + shutil.unpack_archive(archive, target_path, 'zip') + urllib.request.urlcleanup() + + +def update_dmg_makefile(): + """Update fancy-dmg Makefile. + + See https://el-tramo.be/blog/fancy-dmg/ + """ + print("Updating fancy-dmg Makefile...") + url = 'https://raw.githubusercontent.com/remko/fancy-dmg/master/Makefile' + target_path = os.path.join('scripts', 'dev', 'Makefile-dmg') + urllib.request.urlretrieve(url, target_path) + urllib.request.urlcleanup() + + +def update_ace(): + """Update ACE. + + See https://ace.c9.io/ and https://github.com/ajaxorg/ace-builds/ + """ + print("Updating ACE...") + url = 'https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src/ace.js' + target_path = os.path.join('tests', 'end2end', 'data', 'hints', 'ace', + 'ace.js') + urllib.request.urlretrieve(url, target_path) + urllib.request.urlcleanup() + + +def test_dicts(): + """Test available dictionaries.""" + configdata.init() + for lang in dictcli.available_languages(): + print('Testing dictionary {}... '.format(lang.code), end='') + lang_url = urllib.parse.urljoin(dictcli.API_URL, lang.remote_path) + request = urllib.request.Request(lang_url, method='HEAD') + response = urllib.request.urlopen(request) + if response.status == 200: + print('OK') + else: + print('ERROR: {}'.format(response.status)) + + +def run(ace=False, pdfjs=True, fancy_dmg=False, pdfjs_version=None, + dicts=False): + """Update components based on the given arguments.""" + if pdfjs: + update_pdfjs(pdfjs_version) + if ace: + update_ace() + if fancy_dmg: + update_dmg_makefile() + if dicts: + test_dicts() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--pdfjs', '-p', + help='Specify pdfjs version. If not given, ' + 'the latest version is used.', + required=False, metavar='VERSION') + parser.add_argument('--fancy-dmg', help="Update fancy-dmg Makefile", + action='store_true') + parser.add_argument( + '--dicts', '-d', + help='Test whether all available dictionaries ' + 'can be reached at the remote repository.', + required=False, action='store_true') + args = parser.parse_args() + run(ace=True, pdfjs=True, fancy_dmg=args.fancy_dmg, + pdfjs_version=args.pdfjs, dicts=args.dicts) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/dictcli.py b/.config/qutebrowser/scripts/dictcli.py new file mode 100755 index 0000000..4017159 --- /dev/null +++ b/.config/qutebrowser/scripts/dictcli.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2017-2018 Michal Siedlaczek <michal.siedlaczek@gmail.com> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""A script installing Hunspell dictionaries. + +Use: python -m scripts.dictcli [-h] {list,update,remove-old,install} ... +""" + +import argparse +import base64 +import json +import os +import sys +import re +import urllib.request + +import attr + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) +from qutebrowser.browser.webengine import spell +from qutebrowser.config import configdata +from qutebrowser.utils import standarddir + + +API_URL = 'https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries.git/+/master/' + + +class InvalidLanguageError(Exception): + + """Raised when requesting invalid languages.""" + + def __init__(self, invalid_langs): + msg = 'invalid languages: {}'.format(', '.join(invalid_langs)) + super().__init__(msg) + + +@attr.s +class Language: + + """Dictionary language specs.""" + + code = attr.ib() + name = attr.ib() + remote_filename = attr.ib() + local_filename = attr.ib(default=None) + _file_extension = attr.ib('bdic', init=False) + + def __attrs_post_init__(self): + if self.local_filename is None: + self.local_filename = spell.local_filename(self.code) + + @property + def remote_path(self): + """Resolve the filename with extension the remote dictionary.""" + return '.'.join([self.remote_filename, self._file_extension]) + + @property + def local_path(self): + """Resolve the filename with extension the local dictionary.""" + if self.local_filename is None: + return None + return '.'.join([self.local_filename, self._file_extension]) + + @property + def remote_version(self): + """Resolve the version of the local dictionary.""" + return spell.version(self.remote_path) + + @property + def local_version(self): + """Resolve the version of the local dictionary.""" + local_path = self.local_path + if local_path is None: + return None + return spell.version(local_path) + + +def get_argparser(): + """Get the argparse parser.""" + desc = 'Install and manage Hunspell dictionaries for QtWebEngine.' + parser = argparse.ArgumentParser(prog='dictcli', + description=desc) + subparsers = parser.add_subparsers(help='Command', dest='cmd') + subparsers.required = True + subparsers.add_parser('list', + help='Display the list of available languages.') + subparsers.add_parser('update', + help='Update dictionaries') + subparsers.add_parser('remove-old', + help='Remove old versions of dictionaries.') + + install_parser = subparsers.add_parser('install', + help='Install dictionaries') + install_parser.add_argument('language', + nargs='*', + help="A list of languages to install.") + + return parser + + +def version_str(version): + return '.'.join(str(n) for n in version) + + +def print_list(languages): + """Print the list of available languages.""" + pat = '{:<7}{:<26}{:<8}{:<5}' + print(pat.format('Code', 'Name', 'Version', 'Installed')) + for lang in languages: + remote_version = version_str(lang.remote_version) + local_version = '-' + if lang.local_version is not None: + local_version = version_str(lang.local_version) + if lang.local_version < lang.remote_version: + local_version += ' - update available!' + print(pat.format(lang.code, lang.name, remote_version, local_version)) + + +def valid_languages(): + """Return a mapping from valid language codes to their names.""" + option = configdata.DATA['spellcheck.languages'] + return option.typ.valtype.valid_values.descriptions + + +def parse_entry(entry): + """Parse an entry from the remote API.""" + dict_re = re.compile(r""" + (?P<filename>(?P<code>[a-z]{2}(-[A-Z]{2})?).*)\.bdic + """, re.VERBOSE) + match = dict_re.fullmatch(entry['name']) + if match is not None: + return match.group('code'), match.group('filename') + else: + return None + + +def language_list_from_api(): + """Return a JSON with a list of available languages from Google API.""" + listurl = API_URL + '?format=JSON' + response = urllib.request.urlopen(listurl) + # A special 5-byte prefix must be stripped from the response content + # See: https://github.com/google/gitiles/issues/22 + # https://github.com/google/gitiles/issues/82 + json_content = response.read()[5:] + entries = json.loads(json_content.decode('utf-8'))['entries'] + parsed_entries = [parse_entry(entry) for entry in entries] + return [entry for entry in parsed_entries if entry is not None] + + +def latest_yet(code2file, code, filename): + """Determine whether the latest version so far.""" + if code not in code2file: + return True + return spell.version(code2file[code]) < spell.version(filename) + + +def available_languages(): + """Return a list of Language objects of all available languages.""" + lang_map = valid_languages() + api_list = language_list_from_api() + code2file = {} + for code, filename in api_list: + if latest_yet(code2file, code, filename): + code2file[code] = filename + return [ + Language(code, name, code2file[code]) + for code, name in lang_map.items() + if code in code2file + ] + + +def download_dictionary(url, dest): + """Download a decoded dictionary file.""" + response = urllib.request.urlopen(url) + decoded = base64.decodebytes(response.read()) + with open(dest, 'bw') as dict_file: + dict_file.write(decoded) + + +def filter_languages(languages, selected): + """Filter a list of languages based on an inclusion list. + + Args: + languages: a list of languages to filter + selected: a list of keys to select + """ + filtered_languages = [] + for language in languages: + if language.code in selected: + filtered_languages.append(language) + selected.remove(language.code) + if selected: + raise InvalidLanguageError(selected) + return filtered_languages + + +def install_lang(lang): + """Install a single lang given by the argument.""" + lang_url = API_URL + lang.remote_path + '?format=TEXT' + if not os.path.isdir(spell.dictionary_dir()): + msg = '{} does not exist, creating the directory' + print(msg.format(spell.dictionary_dir())) + os.makedirs(spell.dictionary_dir()) + print('Downloading {}'.format(lang_url)) + dest = os.path.join(spell.dictionary_dir(), lang.remote_path) + download_dictionary(lang_url, dest) + print('Done.') + + +def install(languages): + """Install languages.""" + for lang in languages: + try: + print('Installing {}: {}'.format(lang.code, lang.name)) + install_lang(lang) + except PermissionError as e: + sys.exit(str(e)) + + +def update(languages): + """Update the given languages.""" + installed = [lang for lang in languages if lang.local_version is not None] + for lang in installed: + if lang.local_version < lang.remote_version: + print('Upgrading {} from {} to {}'.format( + lang.code, + version_str(lang.local_version), + version_str(lang.remote_version))) + install_lang(lang) + + +def remove_old(languages): + """Remove old versions of languages.""" + installed = [lang for lang in languages if lang.local_version is not None] + for lang in installed: + local_files = spell.local_files(lang.code) + for old_file in local_files[1:]: + os.remove(os.path.join(spell.dictionary_dir(), old_file)) + + +def main(): + if configdata.DATA is None: + configdata.init() + standarddir.init(None) + + parser = get_argparser() + argv = sys.argv[1:] + args = parser.parse_args(argv) + languages = available_languages() + if args.cmd == 'list': + print_list(languages) + elif args.cmd == 'update': + update(languages) + elif args.cmd == 'remove-old': + remove_old(languages) + elif not args.language: + sys.exit('You must provide a list of languages to install.') + else: + try: + install(filter_languages(languages, args.language)) + except InvalidLanguageError as e: + print(e) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/hist_importer.py b/.config/qutebrowser/scripts/hist_importer.py new file mode 100755 index 0000000..914701a --- /dev/null +++ b/.config/qutebrowser/scripts/hist_importer.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2017-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# Copyright 2017-2018 Josefson Souza <josefson.br@gmail.com> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + + +"""Tool to import browser history from other browsers.""" + + +import argparse +import sqlite3 +import sys +import os + + +class Error(Exception): + + """Exception for errors in this module.""" + + pass + + +def parse(): + """Parse command line arguments.""" + description = ("This program is meant to extract browser history from your" + " previous browser and import them into qutebrowser.") + epilog = ("Databases:\n\n\tqutebrowser: Is named 'history.sqlite' and can " + "be found at your --basedir. In order to find where your " + "basedir is you can run ':open qute:version' inside qutebrowser." + "\n\n\tFirefox: Is named 'places.sqlite', and can be found at " + "your system's profile folder. Check this link for where it is " + "located: http://kb.mozillazine.org/Profile_folder" + "\n\n\tChrome: Is named 'History', and can be found at the " + "respective User Data Directory. Check this link for where it is" + "located: https://chromium.googlesource.com/chromium/src/+/" + "master/docs/user_data_dir.md\n\n" + "Example: hist_importer.py -b firefox -s /Firefox/Profile/" + "places.sqlite -d /qutebrowser/data/history.sqlite") + parser = argparse.ArgumentParser( + description=description, epilog=epilog, + formatter_class=argparse.RawTextHelpFormatter + ) + parser.add_argument('-b', '--browser', dest='browser', required=True, + type=str, help='Browsers: {firefox, chrome}') + parser.add_argument('-s', '--source', dest='source', required=True, + type=str, help='Source: Full path to the sqlite data' + 'base file from the source browser.') + parser.add_argument('-d', '--dest', dest='dest', required=True, type=str, + help='\nDestination: Full path to the qutebrowser ' + 'sqlite database') + return parser.parse_args() + + +def open_db(data_base): + """Open connection with database.""" + if os.path.isfile(data_base): + return sqlite3.connect(data_base) + raise Error('The file {} does not exist.'.format(data_base)) + + +def extract(source, query): + """Get records from source database. + + Args: + source: File path to the source database where we want to extract the + data from. + query: The query string to be executed in order to retrieve relevant + attributes as (datetime, url, time) from the source database according + to the browser chosen. + """ + try: + conn = open_db(source) + cursor = conn.cursor() + cursor.execute(query) + history = cursor.fetchall() + conn.close() + return history + except sqlite3.OperationalError as op_e: + raise Error('Could not perform queries on the source database: ' + '{}'.format(op_e)) + + +def clean(history): + """Clean up records from source database. + + Receives a list of record and sanityze them in order for them to be + properly imported to qutebrowser. Sanitation requires adding a 4th + attribute 'redirect' which is filled with '0's, and also purging all + records that have a NULL/None datetime attribute. + + Args: + history: List of records (datetime, url, title) from source database. + """ + # replace missing titles with an empty string + for index, record in enumerate(history): + if record[1] is None: + cleaned = list(record) + cleaned[1] = '' + history[index] = tuple(cleaned) + + nulls = [record for record in history if None in record] + for null_record in nulls: + history.remove(null_record) + history = [list(record) for record in history] + for record in history: + record.append('0') + return history + + +def insert_qb(history, dest): + """Insert history into dest database. + + Args: + history: List of records. + dest: File path to the destination database, where history will be + inserted. + """ + conn = open_db(dest) + cursor = conn.cursor() + cursor.executemany( + 'INSERT INTO History (url,title,atime,redirect) VALUES (?,?,?,?)', + history + ) + cursor.execute('DROP TABLE CompletionHistory') + conn.commit() + conn.close() + + +def run(): + """Main control flux of the script.""" + args = parse() + browser = args.browser.lower() + source, dest = args.source, args.dest + query = { + 'firefox': 'select url,title,last_visit_date/1000000 as date ' + 'from moz_places where url like "http%" or url ' + 'like "ftp%" or url like "file://%"', + 'chrome': 'select url,title,last_visit_time/10000000 as date ' + 'from urls', + } + if browser not in query: + raise Error('Sorry, the selected browser: "{}" is not ' + 'supported.'.format(browser)) + else: + history = extract(source, query[browser]) + history = clean(history) + insert_qb(history, dest) + + +def main(): + try: + run() + except Error as e: + sys.exit(str(e)) + + +if __name__ == "__main__": + main() diff --git a/.config/qutebrowser/scripts/hostblock_blame.py b/.config/qutebrowser/scripts/hostblock_blame.py new file mode 100755 index 0000000..2f68d29 --- /dev/null +++ b/.config/qutebrowser/scripts/hostblock_blame.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Check by which hostblock list a host was blocked.""" + +import sys +import io +import os +import os.path +import urllib.request + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) +from qutebrowser.browser import adblock +from qutebrowser.config import configdata + + +def main(): + """Check by which hostblock list a host was blocked.""" + if len(sys.argv) != 2: + print("Usage: {} <host>".format(sys.argv[0]), file=sys.stderr) + sys.exit(1) + + configdata.init() + + for url in configdata.DATA['content.host_blocking.lists'].default: + print("checking {}...".format(url)) + raw_file = urllib.request.urlopen(url) + byte_io = io.BytesIO(raw_file.read()) + f = adblock.get_fileobj(byte_io) + for line in f: + line = line.decode('utf-8') + if sys.argv[1] in line: + print("FOUND {} in {}:".format(sys.argv[1], url)) + print(" " + line.rstrip()) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/importer.py b/.config/qutebrowser/scripts/importer.py new file mode 100755 index 0000000..eb808a6 --- /dev/null +++ b/.config/qutebrowser/scripts/importer.py @@ -0,0 +1,349 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Claude (longneck) <longneck@scratchbook.ch> +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + + +"""Tool to import data from other browsers. + +Currently importing bookmarks from Netscape Bookmark files and Mozilla +profiles is supported. +""" + + +import argparse +import sqlite3 +import os +import urllib.parse +import json +import string + +browser_default_input_format = { + 'chromium': 'chrome', + 'chrome': 'chrome', + 'ie': 'netscape', + 'firefox': 'mozilla', + 'seamonkey': 'mozilla', + 'palemoon': 'mozilla', +} + + +def main(): + args = get_args() + bookmark_types = [] + output_format = None + input_format = args.input_format + if args.search_output: + bookmark_types = ['search'] + if args.oldconfig: + output_format = 'oldsearch' + else: + output_format = 'search' + else: + if args.bookmark_output: + output_format = 'bookmark' + elif args.quickmark_output: + output_format = 'quickmark' + if args.import_bookmarks: + bookmark_types.append('bookmark') + if args.import_keywords: + bookmark_types.append('keyword') + if not bookmark_types: + bookmark_types = ['bookmark', 'keyword'] + if not output_format: + output_format = 'quickmark' + if not input_format: + if args.browser: + input_format = browser_default_input_format[args.browser] + else: + #default to netscape + input_format = 'netscape' + + import_function = { + 'netscape': import_netscape_bookmarks, + 'mozilla': import_moz_places, + 'chrome': import_chrome, + } + import_function[input_format](args.bookmarks, bookmark_types, + output_format) + + +def get_args(): + """Get the argparse parser.""" + parser = argparse.ArgumentParser( + epilog="To import bookmarks from Chromium, Firefox or IE, " + "export them to HTML in your browsers bookmark manager. ") + parser.add_argument( + 'browser', + help="Which browser? {%(choices)s}", + choices=browser_default_input_format.keys(), + nargs='?', + metavar='browser') + parser.add_argument( + '-i', + '--input-format', + help='Which input format? (overrides browser default; "netscape" if ' + 'neither given)', + choices=set(browser_default_input_format.values()), + required=False) + parser.add_argument( + '-b', + '--bookmark-output', + help="Output in bookmark format.", + action='store_true', + default=False, + required=False) + parser.add_argument( + '-q', + '--quickmark-output', + help="Output in quickmark format (default).", + action='store_true', + default=False, + required=False) + parser.add_argument( + '-s', + '--search-output', + help="Output config.py search engine format (negates -B and -K)", + action='store_true', + default=False, + required=False) + parser.add_argument( + '--oldconfig', + help="Output search engine format for old qutebrowser.conf format", + default=False, + action='store_true', + required=False) + parser.add_argument( + '-B', + '--import-bookmarks', + help="Import plain bookmarks (can be combiend with -K)", + action='store_true', + default=False, + required=False) + parser.add_argument( + '-K', + '--import-keywords', + help="Import keywords (can be combined with -B)", + action='store_true', + default=False, + required=False) + parser.add_argument( + 'bookmarks', + help="Bookmarks file (html format) or " + "profile folder (Mozilla format)") + args = parser.parse_args() + return args + + +def search_escape(url): + """Escape URLs such that preexisting { and } are handled properly. + + Will obviously trash a properly-formatted qutebrowser URL. + """ + return url.replace('{', '{{').replace('}', '}}') + + +def opensearch_convert(url): + """Convert a basic OpenSearch URL into something qutebrowser can use. + + Exceptions: + KeyError: + An unknown and required parameter is present in the URL. This + usually means there's browser/addon specific functionality needed + to build the URL (I'm looking at you and your browser, Google) that + obviously won't be present here. + """ + subst = { + 'searchTerms': '%s', # for proper escaping later + 'language': '*', + 'inputEncoding': 'UTF-8', + 'outputEncoding': 'UTF-8' + } + + # remove optional parameters (even those we don't support) + for param in string.Formatter().parse(url): + if param[1]: + if param[1].endswith('?'): + url = url.replace('{' + param[1] + '}', '') + elif param[2] and param[2].endswith('?'): + url = url.replace('{' + param[1] + ':' + param[2] + '}', '') + return search_escape(url.format(**subst)).replace('%s', '{}') + + +def import_netscape_bookmarks(bookmarks_file, bookmark_types, output_format): + """Import bookmarks from a NETSCAPE-Bookmark-file v1. + + Generated by Chromium, Firefox, IE and possibly more browsers. Not all + export all possible bookmark types: + - Firefox mostly works with everything + - Chrome doesn't support keywords at all; searches are a separate + database + """ + import bs4 + with open(bookmarks_file, encoding='utf-8') as f: + soup = bs4.BeautifulSoup(f, 'html.parser') + bookmark_query = { + 'search': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' in tag.attrs) and + ('%s' in tag['href'])), + 'keyword': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' in tag.attrs) and + ('%s' not in tag['href'])), + 'bookmark': lambda tag: ( + (tag.name == 'a') and + ('shortcuturl' not in tag.attrs) and + (tag.string)), + } + output_template = { + 'search': { + 'search': + "c.url.searchengines['{tag[shortcuturl]}'] = " + "'{tag[href]}' #{tag.string}" + }, + 'oldsearch': { + 'search': '{tag[shortcuturl]} = {tag[href]} #{tag.string}', + }, + 'bookmark': { + 'bookmark': '{tag[href]} {tag.string}', + 'keyword': '{tag[href]} {tag.string}' + }, + 'quickmark': { + 'bookmark': '{tag.string} {tag[href]}', + 'keyword': '{tag[shortcuturl]} {tag[href]}' + } + } + bookmarks = [] + for typ in bookmark_types: + tags = soup.findAll(bookmark_query[typ]) + for tag in tags: + if typ == 'search': + tag['href'] = search_escape(tag['href']).replace('%s', '{}') + if tag['href'] not in bookmarks: + bookmarks.append( + output_template[output_format][typ].format(tag=tag)) + for bookmark in bookmarks: + print(bookmark) + + +def import_moz_places(profile, bookmark_types, output_format): + """Import bookmarks from a Mozilla profile's places.sqlite database.""" + place_query = { + 'bookmark': ( + "SELECT DISTINCT moz_bookmarks.title,moz_places.url " + "FROM moz_bookmarks,moz_places " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id NOT IN (SELECT place_id FROM moz_keywords) " + "AND moz_places.url NOT LIKE 'place:%';" + ), # Bookmarks with no keywords assigned + 'keyword': ( + "SELECT moz_keywords.keyword,moz_places.url " + "FROM moz_keywords,moz_places,moz_bookmarks " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id=moz_keywords.place_id " + "AND moz_places.url NOT LIKE '%!%s%' ESCAPE '!';" + ), # Bookmarks with keywords assigned but no %s substitution + 'search': ( + "SELECT moz_keywords.keyword, " + " moz_bookmarks.title, " + " search_conv(moz_places.url) AS url " + "FROM moz_keywords,moz_places,moz_bookmarks " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id=moz_keywords.place_id " + "AND moz_places.url LIKE '%!%s%' ESCAPE '!';" + ) # bookmarks with keyword and %s substitution + } + out_template = { + 'bookmark': { + 'bookmark': '{url} {title}', + 'keyword': '{url} {keyword}' + }, + 'quickmark': { + 'bookmark': '{title} {url}', + 'keyword': '{keyword} {url}' + }, + 'oldsearch': { + 'search': '{keyword} {url} #{title}' + }, + 'search': { + 'search': "c.url.searchengines['{keyword}'] = '{url}' #{title}" + } + } + + def search_conv(url): + return search_escape(url).replace('%s', '{}') + + places = sqlite3.connect(os.path.join(profile, "places.sqlite")) + places.create_function('search_conv', 1, search_conv) + places.row_factory = sqlite3.Row + c = places.cursor() + for typ in bookmark_types: + c.execute(place_query[typ]) + for row in c: + print(out_template[output_format][typ].format(**row)) + + +def import_chrome(profile, bookmark_types, output_format): + """Import bookmarks and search keywords from Chrome-type profiles. + + On Chrome, keywords and search engines are the same thing and handled in + their own database table; bookmarks cannot have associated keywords. This + is why the dictionary lookups here are much simpler. + """ + out_template = { + 'bookmark': '{url} {name}', + 'quickmark': '{name} {url}', + 'search': "c.url.searchengines['{keyword}'] = '{url}'", + 'oldsearch': '{keyword} {url}' + } + + if 'search' in bookmark_types: + webdata = sqlite3.connect(os.path.join(profile, 'Web Data')) + c = webdata.cursor() + c.execute('SELECT keyword,url FROM keywords;') + for keyword, url in c: + try: + url = opensearch_convert(url) + print(out_template[output_format].format( + keyword=keyword, url=url)) + except KeyError: + print('# Unsupported parameter in url for {}; skipping....'. + format(keyword)) + + else: + with open(os.path.join(profile, 'Bookmarks'), encoding='utf-8') as f: + bookmarks = json.load(f) + + def bm_tree_walk(bm, template): + """Recursive function to walk through bookmarks.""" + assert 'type' in bm, bm + if bm['type'] == 'url': + if urllib.parse.urlparse(bm['url']).scheme != 'chrome': + print(template.format(**bm)) + elif bm['type'] == 'folder': + for child in bm['children']: + bm_tree_walk(child, template) + + for root in bookmarks['roots'].values(): + bm_tree_walk(root, out_template[output_format]) + + +if __name__ == '__main__': + main() diff --git a/.config/qutebrowser/scripts/keytester.py b/.config/qutebrowser/scripts/keytester.py new file mode 100755 index 0000000..ee5eb34 --- /dev/null +++ b/.config/qutebrowser/scripts/keytester.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Small test script to show key presses. + +Use python3 -m scripts.keytester to launch it. +""" + +from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout + +from qutebrowser.keyinput import keyutils + + +class KeyWidget(QWidget): + + """Widget displaying key presses.""" + + def __init__(self, parent=None): + super().__init__(parent) + self._layout = QHBoxLayout(self) + self._label = QLabel(text="Waiting for keypress...") + self._layout.addWidget(self._label) + + def keyPressEvent(self, e): + """Show pressed keys.""" + lines = [ + str(keyutils.KeyInfo.from_event(e)), + '', + 'key: 0x{:x}'.format(int(e.key())), + 'modifiers: 0x{:x}'.format(int(e.modifiers())), + 'text: {!r}'.format(e.text()), + ] + self._label.setText('\n'.join(lines)) + + +app = QApplication([]) +w = KeyWidget() +w.show() +app.exec_() diff --git a/.config/qutebrowser/scripts/link_pyqt.py b/.config/qutebrowser/scripts/link_pyqt.py new file mode 100755 index 0000000..ae7eaa6 --- /dev/null +++ b/.config/qutebrowser/scripts/link_pyqt.py @@ -0,0 +1,233 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Symlink PyQt into a given virtualenv.""" + +import os +import os.path +import argparse +import shutil +import sys +import subprocess +import tempfile +import filecmp + + +class Error(Exception): + + """Exception raised when linking fails.""" + + pass + + +def run_py(executable, *code): + """Run the given python code with the given executable.""" + if os.name == 'nt' and len(code) > 1: + # Windows can't do newlines in arguments... + oshandle, filename = tempfile.mkstemp() + with os.fdopen(oshandle, 'w') as f: + f.write('\n'.join(code)) + cmd = [executable, filename] + try: + ret = subprocess.run(cmd, universal_newlines=True, check=True, + stdout=subprocess.PIPE).stdout + finally: + os.remove(filename) + else: + cmd = [executable, '-c', '\n'.join(code)] + ret = subprocess.run(cmd, universal_newlines=True, check=True, + stdout=subprocess.PIPE).stdout + return ret.rstrip() + + +def verbose_copy(src, dst, *, follow_symlinks=True): + """Copy function for shutil.copytree which prints copied files.""" + if '-v' in sys.argv: + print('{} -> {}'.format(src, dst)) + shutil.copy(src, dst, follow_symlinks=follow_symlinks) + + +def get_ignored_files(directory, files): + """Get the files which should be ignored for link_pyqt() on Windows.""" + needed_exts = ('.py', '.dll', '.pyd', '.so') + ignored_dirs = ('examples', 'qml', 'uic', 'doc') + filtered = [] + for f in files: + ext = os.path.splitext(f)[1] + full_path = os.path.join(directory, f) + if os.path.isdir(full_path) and f in ignored_dirs: + filtered.append(f) + elif (ext not in needed_exts) and os.path.isfile(full_path): + filtered.append(f) + return filtered + + +def needs_update(source, dest): + """Check if a file to be linked/copied needs to be updated.""" + if os.path.islink(dest): + # No need to delete a link and relink -> skip this + return False + elif os.path.isdir(dest): + diffs = filecmp.dircmp(source, dest) + ignored = get_ignored_files(source, diffs.left_only) + has_new_files = set(ignored) != set(diffs.left_only) + return (has_new_files or diffs.right_only or diffs.common_funny or + diffs.diff_files or diffs.funny_files) + else: + return not filecmp.cmp(source, dest) + + +def get_lib_path(executable, name, required=True): + """Get the path of a python library. + + Args: + executable: The Python executable to use. + name: The name of the library to get the path for. + required: Whether Error should be raised if the lib was not found. + """ + code = [ + 'try:', + ' import {}'.format(name), + 'except ImportError as e:', + ' print("ImportError: " + str(e))', + 'else:', + ' print("path: " + {}.__file__)'.format(name) + ] + output = run_py(executable, *code) + + try: + prefix, data = output.split(': ') + except ValueError: + raise ValueError("Unexpected output: {!r}".format(output)) + + if prefix == 'path': + return data + elif prefix == 'ImportError': + if required: + raise Error("Could not import {} with {}: {}!".format( + name, executable, data)) + else: + return None + else: + raise ValueError("Unexpected output: {!r}".format(output)) + + +def link_pyqt(executable, venv_path): + """Symlink the systemwide PyQt/sip into the venv. + + Args: + executable: The python executable where the source files are present. + venv_path: The path to the virtualenv site-packages. + """ + try: + get_lib_path(executable, 'PyQt5.sip') + except Error: + # There is no PyQt5.sip, so we need to copy the toplevel sip. + sip_file = get_lib_path(executable, 'sip') + else: + # There is a PyQt5.sip, it'll get copied with the PyQt5 dir. + sip_file = None + + sipconfig_file = get_lib_path(executable, 'sipconfig', required=False) + pyqt_dir = os.path.dirname(get_lib_path(executable, 'PyQt5.QtCore')) + + for path in [sip_file, sipconfig_file, pyqt_dir]: + if path is None: + continue + + fn = os.path.basename(path) + dest = os.path.join(venv_path, fn) + + if os.path.exists(dest): + if needs_update(path, dest): + remove(dest) + else: + continue + + copy_or_link(path, dest) + + +def copy_or_link(source, dest): + """Copy or symlink source to dest.""" + if os.name == 'nt': + if os.path.isdir(source): + print('{} -> {}'.format(source, dest)) + shutil.copytree(source, dest, ignore=get_ignored_files, + copy_function=verbose_copy) + else: + print('{} -> {}'.format(source, dest)) + shutil.copy(source, dest) + else: + print('{} -> {}'.format(source, dest)) + os.symlink(source, dest) + + +def remove(filename): + """Remove a given filename, regardless of whether it's a file or dir.""" + if os.path.isdir(filename): + shutil.rmtree(filename) + else: + os.unlink(filename) + + +def get_venv_lib_path(path): + """Get the library path of a virtualenv.""" + subdir = 'Scripts' if os.name == 'nt' else 'bin' + executable = os.path.join(path, subdir, 'python') + return run_py(executable, + 'from distutils.sysconfig import get_python_lib', + 'print(get_python_lib())') + + +def get_tox_syspython(tox_path): + """Get the system python based on a virtualenv created by tox.""" + path = os.path.join(tox_path, '.tox-config1') + with open(path, encoding='ascii') as f: + line = f.readline() + _md5, sys_python = line.rstrip().split(' ', 1) + return sys_python + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('path', help="Base path to the venv.") + parser.add_argument('--tox', help="Add when called via tox.", + action='store_true') + args = parser.parse_args() + + if args.tox: + # Workaround for the lack of negative factors in tox.ini + if 'LINK_PYQT_SKIP' in os.environ: + print('LINK_PYQT_SKIP set, exiting...') + sys.exit(0) + executable = get_tox_syspython(args.path) + else: + executable = sys.executable + + venv_path = get_venv_lib_path(args.path) + link_pyqt(executable, venv_path) + + +if __name__ == '__main__': + try: + main() + except Error as e: + print(str(e), file=sys.stderr) + sys.exit(1) diff --git a/.config/qutebrowser/scripts/open_url_in_instance.sh b/.config/qutebrowser/scripts/open_url_in_instance.sh new file mode 100755 index 0000000..a6ce0ed --- /dev/null +++ b/.config/qutebrowser/scripts/open_url_in_instance.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# initial idea: Florian Bruhin (The-Compiler) +# author: Thore Bödecker (foxxx0) + +_url="$1" +_qb_version='1.0.4' +_proto_version=1 +_ipc_socket="${XDG_RUNTIME_DIR}/qutebrowser/ipc-$(echo -n "$USER" | md5sum | cut -d' ' -f1)" +_qute_bin="/usr/bin/qutebrowser" + +printf '{"args": ["%s"], "target_arg": null, "version": "%s", "protocol_version": %d, "cwd": "%s"}\n' \ + "${_url}" \ + "${_qb_version}" \ + "${_proto_version}" \ + "${PWD}" | socat - UNIX-CONNECT:"${_ipc_socket}" 2>/dev/null || "$_qute_bin" "$@" & diff --git a/.config/qutebrowser/scripts/setupcommon.py b/.config/qutebrowser/scripts/setupcommon.py new file mode 100755 index 0000000..50eabac --- /dev/null +++ b/.config/qutebrowser/scripts/setupcommon.py @@ -0,0 +1,74 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + + +"""Data used by setup.py and the PyInstaller qutebrowser.spec.""" + +import sys +import os +import os.path +import subprocess +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir)) + + +if sys.hexversion >= 0x03000000: + open_file = open +else: + import codecs + open_file = codecs.open + + +BASEDIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), + os.path.pardir) + + +def _git_str(): + """Try to find out git version. + + Return: + string containing the git commit ID and timestamp. + None if there was an error or we're not in a git repo. + """ + if BASEDIR is None: + return None + if not os.path.isdir(os.path.join(BASEDIR, ".git")): + return None + try: + # https://stackoverflow.com/questions/21017300/21017394#21017394 + commit_hash = subprocess.run( + ['git', 'describe', '--match=NeVeRmAtCh', '--always', '--dirty'], + cwd=BASEDIR, check=True, + stdout=subprocess.PIPE).stdout.decode('UTF-8').strip() + date = subprocess.run( + ['git', 'show', '-s', '--format=%ci', 'HEAD'], + cwd=BASEDIR, check=True, + stdout=subprocess.PIPE).stdout.decode('UTF-8').strip() + return '{} ({})'.format(commit_hash, date) + except (subprocess.CalledProcessError, OSError): + return None + + +def write_git_file(): + """Write the git-commit-id file with the current commit.""" + gitstr = _git_str() + if gitstr is None: + gitstr = '' + path = os.path.join(BASEDIR, 'qutebrowser', 'git-commit-id') + with open_file(path, 'w', encoding='ascii') as f: + f.write(gitstr) diff --git a/.config/qutebrowser/scripts/testbrowser/cpp/webengine/main.cpp b/.config/qutebrowser/scripts/testbrowser/cpp/webengine/main.cpp new file mode 100644 index 0000000..311432e --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/cpp/webengine/main.cpp @@ -0,0 +1,13 @@ +#include <QApplication> +#include <QWebEngineView> +#include <QUrl> + + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWebEngineView view; + view.load(QUrl(argv[1])); + view.show(); + return app.exec(); +} diff --git a/.config/qutebrowser/scripts/testbrowser/cpp/webengine/testbrowser.pro b/.config/qutebrowser/scripts/testbrowser/cpp/webengine/testbrowser.pro new file mode 100644 index 0000000..12a1cf7 --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/cpp/webengine/testbrowser.pro @@ -0,0 +1,6 @@ +QT += core widgets webenginewidgets + +TARGET = testbrowser +TEMPLATE = app + +SOURCES += main.cpp diff --git a/.config/qutebrowser/scripts/testbrowser/cpp/webkit/main.cpp b/.config/qutebrowser/scripts/testbrowser/cpp/webkit/main.cpp new file mode 100644 index 0000000..06c3d1a --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/cpp/webkit/main.cpp @@ -0,0 +1,13 @@ +#include <QApplication> +#include <QWebView> +#include <QUrl> + + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QWebView view; + view.load(QUrl(argv[1])); + view.show(); + return app.exec(); +} diff --git a/.config/qutebrowser/scripts/testbrowser/cpp/webkit/testbrowser.pro b/.config/qutebrowser/scripts/testbrowser/cpp/webkit/testbrowser.pro new file mode 100644 index 0000000..59f55dd --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/cpp/webkit/testbrowser.pro @@ -0,0 +1,6 @@ +QT += core widgets webkit webkitwidgets + +TARGET = testbrowser +TEMPLATE = app + +SOURCES += main.cpp diff --git a/.config/qutebrowser/scripts/testbrowser/testbrowser_webengine.py b/.config/qutebrowser/scripts/testbrowser/testbrowser_webengine.py new file mode 100755 index 0000000..fdf6728 --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/testbrowser_webengine.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Very simple browser for testing purposes.""" + +import sys +import argparse + +from PyQt5.QtCore import QUrl +from PyQt5.QtWidgets import QApplication +from PyQt5.QtWebEngineWidgets import QWebEngineView + + +def parse_args(): + """Parse commandline arguments.""" + parser = argparse.ArgumentParser() + parser.add_argument('url', help='The URL to open') + return parser.parse_known_args()[0] + + +if __name__ == '__main__': + args = parse_args() + app = QApplication(sys.argv) + wv = QWebEngineView() + + wv.loadStarted.connect(lambda: print("Loading started")) + wv.loadProgress.connect(lambda p: print("Loading progress: {}%".format(p))) + wv.loadFinished.connect(lambda: print("Loading finished")) + + wv.load(QUrl.fromUserInput(args.url)) + wv.show() + + app.exec_() diff --git a/.config/qutebrowser/scripts/testbrowser/testbrowser_webkit.py b/.config/qutebrowser/scripts/testbrowser/testbrowser_webkit.py new file mode 100755 index 0000000..73cae08 --- /dev/null +++ b/.config/qutebrowser/scripts/testbrowser/testbrowser_webkit.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Very simple browser for testing purposes.""" + +import sys +import argparse + +from PyQt5.QtCore import QUrl +from PyQt5.QtWidgets import QApplication +from PyQt5.QtWebKit import QWebSettings +from PyQt5.QtWebKitWidgets import QWebView + + +def parse_args(): + """Parse commandline arguments.""" + parser = argparse.ArgumentParser() + parser.add_argument('url', help='The URL to open') + parser.add_argument('--plugins', '-p', help='Enable plugins', + default=False, action='store_true') + return parser.parse_known_args()[0] + + +if __name__ == '__main__': + args = parse_args() + app = QApplication(sys.argv) + wv = QWebView() + + wv.loadStarted.connect(lambda: print("Loading started")) + wv.loadProgress.connect(lambda p: print("Loading progress: {}%".format(p))) + wv.loadFinished.connect(lambda: print("Loading finished")) + + if args.plugins: + wv.settings().setAttribute(QWebSettings.PluginsEnabled, True) + + wv.load(QUrl.fromUserInput(args.url)) + wv.show() + + app.exec_() diff --git a/.config/qutebrowser/scripts/utils.py b/.config/qutebrowser/scripts/utils.py new file mode 100755 index 0000000..9a1a751 --- /dev/null +++ b/.config/qutebrowser/scripts/utils.py @@ -0,0 +1,103 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org> + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>. + +"""Utility functions for scripts.""" + +import os +import os.path + + +# Import side-effects are an evil thing, but here it's okay so scripts using +# colors work on Windows as well. +try: + import colorama +except ImportError: + colorama = None +else: + colorama.init() + + +use_color = os.name != 'nt' or colorama + + +fg_colors = { + 'black': 30, + 'red': 31, + 'green': 32, + 'yellow': 33, + 'blue': 34, + 'magenta': 35, + 'cyan': 36, + 'white': 37, + 'reset': 39, +} + + +bg_colors = {name: col + 10 for name, col in fg_colors.items()} + + +term_attributes = { + 'bright': 1, + 'dim': 2, + 'normal': 22, + 'reset': 0, +} + + +def _esc(code): + """Get an ANSI color code based on a color number.""" + return '\033[{}m'.format(code) + + +def print_col(text, color): + """Print a colorized text.""" + if use_color: + fg = _esc(fg_colors[color.lower()]) + reset = _esc(fg_colors['reset']) + print(''.join([fg, text, reset])) + else: + print(text) + + +def print_title(text): + """Print a title.""" + print_col("==================== {} ====================".format(text), + 'yellow') + + +def print_subtitle(text): + """Print a subtitle.""" + print_col("------ {} ------".format(text), 'cyan') + + +def print_bold(text): + """Print a bold text.""" + if use_color: + bold = _esc(term_attributes['bright']) + reset = _esc(term_attributes['reset']) + print(''.join([bold, text, reset])) + else: + print(text) + + +def change_cwd(): + """Change the scripts cwd if it was started inside the script folder.""" + cwd = os.getcwd() + if os.path.split(cwd)[1] == 'scripts': + os.chdir(os.path.join(cwd, os.pardir)) diff --git a/.config/ranger/__pycache__/commands_full.cpython-38.pyc b/.config/ranger/__pycache__/commands_full.cpython-38.pyc Binary files differnew file mode 100644 index 0000000..36be13b --- /dev/null +++ b/.config/ranger/__pycache__/commands_full.cpython-38.pyc diff --git a/.config/ranger/bookmarks b/.config/ranger/bookmarks new file mode 100755 index 0000000..1062f09 --- /dev/null +++ b/.config/ranger/bookmarks @@ -0,0 +1,19 @@ +M:/home/opensuse/vgg/macosxd3/Media/Series +t:/scratch3/Media +U:/home/opensuse/vgg/macosxd3/Media/Series +c:/home/opensuse/vgg/Videos/Logan (2017) 720p BrRip x264 - VPPV +':/home/archlinux/vgg/u4/Media/Mvs +z:/home/opensuse/vgg/macosxd4/Media-Tutorial/Linux +e:/run +o:/home/archlinux/vgg +g:/home/opensuse/vgg/macosxd4/Media-Tutorial/Linux/Gotbletu +a:/scratch3/Media/Tutorials +y:/home/archlinux/vgg/macosxd3/Media/Series +P:/home/opensuse/vgg/macosxd4/Media-Tutorial/Python/Python Fundamentals – Austin Bingham +l:/home/opensuse/vgg/macosxd4/Media-Tutorial/Linux/LukeSmith +r:/run +T:/home/opensuse/vgg/macosxd4/Media-Tutorial/Linux/The Complete Deep Web Course +k:/home/archlinux/vgg/macosxd3/Media/Series +4:/home/archlinux/vgg/macosxd3/Media +q:/home/archlinux/vgg +V:/home/archlinux/vgg/macosxd3/Media/Series diff --git a/.config/ranger/commands.py b/.config/ranger/commands.py new file mode 100755 index 0000000..f814a8b --- /dev/null +++ b/.config/ranger/commands.py @@ -0,0 +1,162 @@ +# This is a sample commands.py. You can add your own commands here. +# +# Please refer to commands_full.py for all the default commands and a complete +# documentation. Do NOT add them all here, or you may end up with defunct +# commands when upgrading ranger. + +# You always need to import ranger.api.commands here to get the Command class: +from ranger.api.commands import * + +# A simple command for demonstration purposes follows. +# ----------------------------------------------------------------------------- + +# You can import any python module as needed. +import os + +# Any class that is a subclass of "Command" will be integrated into ranger as a +# command. Try typing ":my_edit<ENTER>" in ranger! + + +class my_edit(Command): + # The so-called doc-string of the class will be visible in the built-in + # help that is accessible by typing "?c" inside ranger. + """:my_edit <filename> + + A sample command for demonstration purposes that opens a file in an editor. + """ + + # The execute method is called when you run this command in ranger. + def execute(self): + # self.arg(1) is the first (space-separated) argument to the function. + # This way you can write ":my_edit somefilename<ENTER>". + if self.arg(1): + # self.rest(1) contains self.arg(1) and everything that follows + target_filename = self.rest(1) + else: + # self.fm is a ranger.core.filemanager.FileManager object and gives + # you access to internals of ranger. + # self.fm.thisfile is a ranger.container.file.File object and is a + # reference to the currently selected file. + target_filename = self.fm.thisfile.path + + # This is a generic function to print text in ranger. + self.fm.notify("Let's edit the file " + target_filename + "!") + + # Using bad=True in fm.notify allows you to print error messages: + if not os.path.exists(target_filename): + self.fm.notify("The given file does not exist!", bad=True) + return + + # This executes a function from ranger.core.acitons, a module with a + # variety of subroutines that can help you construct commands. + # Check out the source, or run "pydoc ranger.core.actions" for a list. + self.fm.edit_file(target_filename) + + # The tab method is called when you press tab, and should return a list of + # suggestions that the user will tab through. + # tabnum is 1 for <TAB> and -1 for <S-TAB> by default + def tab(self, tabnum): + # This is a generic tab-completion function that iterates through the + # content of the current directory. + return self._tab_directory_content() + +# https://github.com/ranger/ranger/wiki/Integrating-File-Search-with-fzf +# Now simply bind this function to a key, by adding this to your ~/.config/ranger/rc.conf: map <C-f> fzf_select + +class fzf_select(Command): + """ + :fzf_select + + Find a file using fzf. + + With a prefix argument select only directories. + + See: https://github.com/junegunn/fzf + """ + def execute(self): + import subprocess + import os.path + + if self.quantifier: # match only directories + command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune -o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" + else: # match files and directories + command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune -o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" + + fzf =self.fm.execute_command(command, universal_newlines=True, stdout=subprocess.PIPE) + stdout, stderr = fzf.communicate() + if fzf.returncode == 0: + fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) + if os.path.isdir(fzf_file): + self.fm.cd(fzf_file) + else: + self.fm.select_file(fzf_file) + + +class fzf_locate(Command): + """ + :fzf_locate + + Find a file using fzf. + + With a prefix argument select only directories. + + See: https://github.com/junegunn/fzf + """ + def execute(self): + import subprocess + if self.quantifier: + command=" locate home MacOSX-Data1 MacOSX-Data3 user4 scratch scratch2 scratch3 | fzf -e -i" + else: + command=" locate home MacOSX-Data1 MacOSX-Data3 user4 scratch scratch2 scratch3 | fzf -e -i" + + fzf =self.fm.execute_command(command, stdout=subprocess.PIPE) + stdout, stderr = fzf.communicate() + + if fzf.returncode == 0: + fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) + if os.path.isdir(fzf_file): + self.fm.cd(fzf_file) + else: + self.fm.select_file(fzf_file) + +# fzf_fasd - Fasd + Fzf + Ranger (Interactive Style) +class fzf_fasd(Command): + """ + :fzf_fasd + + Jump to a file or folder using Fasd and fzf + + URL: https://github.com/clvv/fasd + URL: https://github.com/junegunn/fzf + """ + def execute(self): + import subprocess + if self.quantifier: + command="fasd | fzf -e -i --tac --no-sort | awk '{print $2}'" + else: + command="fasd | fzf -e -i --tac --no-sort | awk '{print $2}'" + fzf = self.fm.execute_command(command, stdout=subprocess.PIPE) + stdout, stderr = fzf.communicate() + if fzf.returncode == 0: + fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) + if os.path.isdir(fzf_file): + self.fm.cd(fzf_file) + else: + self.fm.select_file(fzf_file) + +# Fasd with ranger (Command Line Style) +# https://github.com/ranger/ranger/wiki/Commands +class fasd(Command): + """ + :fasd + + Jump to directory using fasd + URL: https://github.com/clvv/fasd + """ + def execute(self): + import subprocess + arg = self.rest(1) + if arg: + directory = subprocess.check_output(["fasd", "-d"]+arg.split(), universal_newlines=True).strip() + self.fm.cd(directory) + diff --git a/.config/ranger/commands_full.py b/.config/ranger/commands_full.py new file mode 100755 index 0000000..a384f42 --- /dev/null +++ b/.config/ranger/commands_full.py @@ -0,0 +1,1486 @@ +# -*- coding: utf-8 -*- +# This file is part of ranger, the console file manager. +# This configuration file is licensed under the same terms as ranger. +# =================================================================== +# +# NOTE: If you copied this file to ~/.config/ranger/commands_full.py, +# then it will NOT be loaded by ranger, and only serve as a reference. +# +# =================================================================== +# This file contains ranger's commands. +# It's all in python; lines beginning with # are comments. +# +# Note that additional commands are automatically generated from the methods +# of the class ranger.core.actions.Actions. +# +# You can customize commands in the file ~/.config/ranger/commands.py. +# It has the same syntax as this file. In fact, you can just copy this +# file there with `ranger --copy-config=commands' and make your modifications. +# But make sure you update your configs when you update ranger. +# +# =================================================================== +# Every class defined here which is a subclass of `Command' will be used as a +# command in ranger. Several methods are defined to interface with ranger: +# execute(): called when the command is executed. +# cancel(): called when closing the console. +# tab(tabnum): called when <TAB> is pressed. +# quick(): called after each keypress. +# +# tab() argument tabnum is 1 for <TAB> and -1 for <S-TAB> by default +# +# The return values for tab() can be either: +# None: There is no tab completion +# A string: Change the console to this string +# A list/tuple/generator: cycle through every item in it +# +# The return value for quick() can be: +# False: Nothing happens +# True: Execute the command afterwards +# +# The return value for execute() and cancel() doesn't matter. +# +# =================================================================== +# Commands have certain attributes and methods that facilitate parsing of +# the arguments: +# +# self.line: The whole line that was written in the console. +# self.args: A list of all (space-separated) arguments to the command. +# self.quantifier: If this command was mapped to the key "X" and +# the user pressed 6X, self.quantifier will be 6. +# self.arg(n): The n-th argument, or an empty string if it doesn't exist. +# self.rest(n): The n-th argument plus everything that followed. For example, +# if the command was "search foo bar a b c", rest(2) will be "bar a b c" +# self.start(n): Anything before the n-th argument. For example, if the +# command was "search foo bar a b c", start(2) will be "search foo" +# +# =================================================================== +# And this is a little reference for common ranger functions and objects: +# +# self.fm: A reference to the "fm" object which contains most information +# about ranger. +# self.fm.notify(string): Print the given string on the screen. +# self.fm.notify(string, bad=True): Print the given string in RED. +# self.fm.reload_cwd(): Reload the current working directory. +# self.fm.thisdir: The current working directory. (A File object.) +# self.fm.thisfile: The current file. (A File object too.) +# self.fm.thistab.get_selection(): A list of all selected files. +# self.fm.execute_console(string): Execute the string as a ranger command. +# self.fm.open_console(string): Open the console with the given string +# already typed in for you. +# self.fm.move(direction): Moves the cursor in the given direction, which +# can be something like down=3, up=5, right=1, left=1, to=6, ... +# +# File objects (for example self.fm.thisfile) have these useful attributes and +# methods: +# +# cf.path: The path to the file. +# cf.basename: The base name only. +# cf.load_content(): Force a loading of the directories content (which +# obviously works with directories only) +# cf.is_directory: True/False depending on whether it's a directory. +# +# For advanced commands it is unavoidable to dive a bit into the source code +# of ranger. +# =================================================================== + +from ranger.api.commands import * + + +class alias(Command): + """:alias <newcommand> <oldcommand> + + Copies the oldcommand as newcommand. + """ + + context = 'browser' + resolve_macros = False + + def execute(self): + if not self.arg(1) or not self.arg(2): + self.fm.notify('Syntax: alias <newcommand> <oldcommand>', bad=True) + else: + self.fm.commands.alias(self.arg(1), self.rest(2)) + + +class echo(Command): + """:echo <text> + + Display the text in the statusbar. + """ + def execute(self): + self.fm.notify(self.rest(1)) + + +class cd(Command): + """:cd [-r] <dirname> + + The cd command changes the directory. + The command 'cd -' is equivalent to typing ``. + Using the option "-r" will get you to the real path. + """ + + def execute(self): + import os.path + if self.arg(1) == '-r': + self.shift() + destination = os.path.realpath(self.rest(1)) + if os.path.isfile(destination): + self.fm.select_file(destination) + return + else: + destination = self.rest(1) + + if not destination: + destination = '~' + + if destination == '-': + self.fm.enter_bookmark('`') + else: + self.fm.cd(destination) + + def tab(self, tabnum): + import os + from os.path import dirname, basename, expanduser, join + + cwd = self.fm.thisdir.path + rel_dest = self.rest(1) + + bookmarks = [v.path for v in self.fm.bookmarks.dct.values() + if rel_dest in v.path] + + # expand the tilde into the user directory + if rel_dest.startswith('~'): + rel_dest = expanduser(rel_dest) + + # define some shortcuts + abs_dest = join(cwd, rel_dest) + abs_dirname = dirname(abs_dest) + rel_basename = basename(rel_dest) + rel_dirname = dirname(rel_dest) + + try: + # are we at the end of a directory? + if rel_dest.endswith('/') or rel_dest == '': + _, dirnames, _ = next(os.walk(abs_dest)) + + # are we in the middle of the filename? + else: + _, dirnames, _ = next(os.walk(abs_dirname)) + dirnames = [dn for dn in dirnames + if dn.startswith(rel_basename)] + except (OSError, StopIteration): + # os.walk found nothing + pass + else: + dirnames.sort() + if self.fm.settings.cd_bookmarks: + dirnames = bookmarks + dirnames + + # no results, return None + if len(dirnames) == 0: + return + + # one result. since it must be a directory, append a slash. + if len(dirnames) == 1: + return self.start(1) + join(rel_dirname, dirnames[0]) + '/' + + # more than one result. append no slash, so the user can + # manually type in the slash to advance into that directory + return (self.start(1) + join(rel_dirname, dirname) for dirname in dirnames) + + +class chain(Command): + """:chain <command1>; <command2>; ... + + Calls multiple commands at once, separated by semicolons. + """ + def execute(self): + for command in [s.strip() for s in self.rest(1).split(";")]: + self.fm.execute_console(command) + + +class shell(Command): + escape_macros_for_shell = True + + def execute(self): + if self.arg(1) and self.arg(1)[0] == '-': + flags = self.arg(1)[1:] + command = self.rest(2) + else: + flags = '' + command = self.rest(1) + + if command: + self.fm.execute_command(command, flags=flags) + + def tab(self, tabnum): + from ranger.ext.get_executables import get_executables + if self.arg(1) and self.arg(1)[0] == '-': + command = self.rest(2) + else: + command = self.rest(1) + start = self.line[0:len(self.line) - len(command)] + + try: + position_of_last_space = command.rindex(" ") + except ValueError: + return (start + program + ' ' for program + in get_executables() if program.startswith(command)) + if position_of_last_space == len(command) - 1: + selection = self.fm.thistab.get_selection() + if len(selection) == 1: + return self.line + selection[0].shell_escaped_basename + ' ' + else: + return self.line + '%s ' + else: + before_word, start_of_word = self.line.rsplit(' ', 1) + return (before_word + ' ' + file.shell_escaped_basename + for file in self.fm.thisdir.files or [] + if file.shell_escaped_basename.startswith(start_of_word)) + + +class open_with(Command): + def execute(self): + app, flags, mode = self._get_app_flags_mode(self.rest(1)) + self.fm.execute_file( + files=[f for f in self.fm.thistab.get_selection()], + app=app, + flags=flags, + mode=mode) + + def tab(self, tabnum): + return self._tab_through_executables() + + def _get_app_flags_mode(self, string): + """Extracts the application, flags and mode from a string. + + examples: + "mplayer f 1" => ("mplayer", "f", 1) + "aunpack 4" => ("aunpack", "", 4) + "p" => ("", "p", 0) + "" => None + """ + + app = '' + flags = '' + mode = 0 + split = string.split() + + if len(split) == 0: + pass + + elif len(split) == 1: + part = split[0] + if self._is_app(part): + app = part + elif self._is_flags(part): + flags = part + elif self._is_mode(part): + mode = part + + elif len(split) == 2: + part0 = split[0] + part1 = split[1] + + if self._is_app(part0): + app = part0 + if self._is_flags(part1): + flags = part1 + elif self._is_mode(part1): + mode = part1 + elif self._is_flags(part0): + flags = part0 + if self._is_mode(part1): + mode = part1 + elif self._is_mode(part0): + mode = part0 + if self._is_flags(part1): + flags = part1 + + elif len(split) >= 3: + part0 = split[0] + part1 = split[1] + part2 = split[2] + + if self._is_app(part0): + app = part0 + if self._is_flags(part1): + flags = part1 + if self._is_mode(part2): + mode = part2 + elif self._is_mode(part1): + mode = part1 + if self._is_flags(part2): + flags = part2 + elif self._is_flags(part0): + flags = part0 + if self._is_mode(part1): + mode = part1 + elif self._is_mode(part0): + mode = part0 + if self._is_flags(part1): + flags = part1 + + return app, flags, int(mode) + + def _is_app(self, arg): + return not self._is_flags(arg) and not arg.isdigit() + + def _is_flags(self, arg): + from ranger.core.runner import ALLOWED_FLAGS + return all(x in ALLOWED_FLAGS for x in arg) + + def _is_mode(self, arg): + return all(x in '0123456789' for x in arg) + + +class set_(Command): + """:set <option name>=<python expression> + + Gives an option a new value. + + Use `:set <option>!` to toggle or cycle it, e.g. `:set flush_input!` + """ + name = 'set' # don't override the builtin set class + + def execute(self): + name = self.arg(1) + name, value, _, toggle = self.parse_setting_line_v2() + if toggle: + self.fm.toggle_option(name) + else: + self.fm.set_option_from_string(name, value) + + def tab(self, tabnum): + from ranger.gui.colorscheme import get_all_colorschemes + name, value, name_done = self.parse_setting_line() + settings = self.fm.settings + if not name: + return sorted(self.firstpart + setting for setting in settings) + if not value and not name_done: + return sorted(self.firstpart + setting for setting in settings + if setting.startswith(name)) + if not value: + # Cycle through colorschemes when name, but no value is specified + if name == "colorscheme": + return sorted(self.firstpart + colorscheme for colorscheme + in get_all_colorschemes()) + return self.firstpart + str(settings[name]) + if bool in settings.types_of(name): + if 'true'.startswith(value.lower()): + return self.firstpart + 'True' + if 'false'.startswith(value.lower()): + return self.firstpart + 'False' + # Tab complete colorscheme values if incomplete value is present + if name == "colorscheme": + return sorted(self.firstpart + colorscheme for colorscheme + in get_all_colorschemes() if colorscheme.startswith(value)) + + +class setlocal(set_): + """:setlocal path=<regular expression> <option name>=<python expression> + + Gives an option a new value. + """ + PATH_RE = re.compile(r'^\s*path="?(.*?)"?\s*$') + + def execute(self): + import os.path + match = self.PATH_RE.match(self.arg(1)) + if match: + path = os.path.normpath(os.path.expanduser(match.group(1))) + self.shift() + elif self.fm.thisdir: + path = self.fm.thisdir.path + else: + path = None + + if path: + name = self.arg(1) + name, value, _ = self.parse_setting_line() + self.fm.set_option_from_string(name, value, localpath=path) + + +class setintag(setlocal): + """:setintag <tag or tags> <option name>=<option value> + + Sets an option for directories that are tagged with a specific tag. + """ + def execute(self): + tags = self.arg(1) + self.shift() + name, value, _ = self.parse_setting_line() + self.fm.set_option_from_string(name, value, tags=tags) + + +class default_linemode(Command): + def execute(self): + import re + from ranger.container.fsobject import FileSystemObject + + if len(self.args) < 2: + self.fm.notify("Usage: default_linemode [path=<regexp> | tag=<tag(s)>] <linemode>", bad=True) + + # Extract options like "path=..." or "tag=..." from the command line + arg1 = self.arg(1) + method = "always" + argument = None + if arg1.startswith("path="): + method = "path" + argument = re.compile(arg1[5:]) + self.shift() + elif arg1.startswith("tag="): + method = "tag" + argument = arg1[4:] + self.shift() + + # Extract and validate the line mode from the command line + linemode = self.rest(1) + if linemode not in FileSystemObject.linemode_dict: + self.fm.notify("Invalid linemode: %s; should be %s" % + (linemode, "/".join(FileSystemObject.linemode_dict)), bad=True) + + # Add the prepared entry to the fm.default_linemodes + entry = [method, argument, linemode] + self.fm.default_linemodes.appendleft(entry) + + # Redraw the columns + if hasattr(self.fm.ui, "browser"): + for col in self.fm.ui.browser.columns: + col.need_redraw = True + + def tab(self, tabnum): + mode = self.arg(1) + return (self.arg(0) + " " + linemode + for linemode in self.fm.thisfile.linemode_dict.keys() + if linemode.startswith(self.arg(1))) + + +class quit(Command): + """:quit + + Closes the current tab. If there is only one tab, quit the program. + """ + + def execute(self): + if len(self.fm.tabs) <= 1: + self.fm.exit() + self.fm.tab_close() + + +class quitall(Command): + """:quitall + + Quits the program immediately. + """ + + def execute(self): + self.fm.exit() + + +class quit_bang(quitall): + """:quit! + + Quits the program immediately. + """ + name = 'quit!' + allow_abbrev = False + + +class terminal(Command): + """:terminal + + Spawns an "x-terminal-emulator" starting in the current directory. + """ + def execute(self): + from ranger.ext.get_executables import get_term + self.fm.run(get_term(), flags='f') + + +class delete(Command): + """:delete + + Tries to delete the selection or the files passed in arguments (if any). + The arguments use a shell-like escaping. + + "Selection" is defined as all the "marked files" (by default, you + can mark files with space or v). If there are no marked files, + use the "current file" (where the cursor is) + + When attempting to delete non-empty directories or multiple + marked files, it will require a confirmation. + """ + + allow_abbrev = False + escape_macros_for_shell = True + + def execute(self): + import os + import shlex + from functools import partial + from ranger.container.file import File + + def is_directory_with_files(f): + import os.path + return (os.path.isdir(f) and not os.path.islink(f) + and len(os.listdir(f)) > 0) + + if self.rest(1): + files = shlex.split(self.rest(1)) + many_files = (len(files) > 1 or is_directory_with_files(files[0])) + else: + cwd = self.fm.thisdir + cf = self.fm.thisfile + if not cwd or not cf: + self.fm.notify("Error: no file selected for deletion!", bad=True) + return + + # relative_path used for a user-friendly output in the confirmation. + files = [f.relative_path for f in self.fm.thistab.get_selection()] + many_files = (cwd.marked_items or is_directory_with_files(cf.path)) + + confirm = self.fm.settings.confirm_on_delete + if confirm != 'never' and (confirm != 'multiple' or many_files): + filename_list = files + self.fm.ui.console.ask("Confirm deletion of: %s (y/N)" % + ', '.join(files), + partial(self._question_callback, files), ('n', 'N', 'y', 'Y')) + else: + # no need for a confirmation, just delete + self.fm.delete(files) + + def tab(self, tabnum): + return self._tab_directory_content() + + def _question_callback(self, files, answer): + if answer == 'y' or answer == 'Y': + self.fm.delete(files) + + +class mark_tag(Command): + """:mark_tag [<tags>] + + Mark all tags that are tagged with either of the given tags. + When leaving out the tag argument, all tagged files are marked. + """ + do_mark = True + + def execute(self): + cwd = self.fm.thisdir + tags = self.rest(1).replace(" ", "") + if not self.fm.tags or not cwd.files: + return + for fileobj in cwd.files: + try: + tag = self.fm.tags.tags[fileobj.realpath] + except KeyError: + continue + if not tags or tag in tags: + cwd.mark_item(fileobj, val=self.do_mark) + self.fm.ui.status.need_redraw = True + self.fm.ui.need_redraw = True + + +class console(Command): + """:console <command> + + Open the console with the given command. + """ + def execute(self): + position = None + if self.arg(1)[0:2] == '-p': + try: + position = int(self.arg(1)[2:]) + self.shift() + except Exception: + pass + self.fm.open_console(self.rest(1), position=position) + + +class load_copy_buffer(Command): + """:load_copy_buffer + + Load the copy buffer from confdir/copy_buffer + """ + copy_buffer_filename = 'copy_buffer' + + def execute(self): + from ranger.container.file import File + from os.path import exists + try: + fname = self.fm.confpath(self.copy_buffer_filename) + f = open(fname, 'r') + except Exception: + return self.fm.notify("Cannot open %s" % + (fname or self.copy_buffer_filename), bad=True) + self.fm.copy_buffer = set(File(g) + for g in f.read().split("\n") if exists(g)) + f.close() + self.fm.ui.redraw_main_column() + + +class save_copy_buffer(Command): + """:save_copy_buffer + + Save the copy buffer to confdir/copy_buffer + """ + copy_buffer_filename = 'copy_buffer' + + def execute(self): + fname = None + try: + fname = self.fm.confpath(self.copy_buffer_filename) + f = open(fname, 'w') + except Exception: + return self.fm.notify("Cannot open %s" % + (fname or self.copy_buffer_filename), bad=True) + f.write("\n".join(f.path for f in self.fm.copy_buffer)) + f.close() + + +class unmark_tag(mark_tag): + """:unmark_tag [<tags>] + + Unmark all tags that are tagged with either of the given tags. + When leaving out the tag argument, all tagged files are unmarked. + """ + do_mark = False + + +class mkdir(Command): + """:mkdir <dirname> + + Creates a directory with the name <dirname>. + """ + + def execute(self): + from os.path import join, expanduser, lexists + from os import makedirs + + dirname = join(self.fm.thisdir.path, expanduser(self.rest(1))) + if not lexists(dirname): + makedirs(dirname) + else: + self.fm.notify("file/directory exists!", bad=True) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class touch(Command): + """:touch <fname> + + Creates a file with the name <fname>. + """ + + def execute(self): + from os.path import join, expanduser, lexists + + fname = join(self.fm.thisdir.path, expanduser(self.rest(1))) + if not lexists(fname): + open(fname, 'a').close() + else: + self.fm.notify("file/directory exists!", bad=True) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class edit(Command): + """:edit <filename> + + Opens the specified file in vim + """ + + def execute(self): + if not self.arg(1): + self.fm.edit_file(self.fm.thisfile.path) + else: + self.fm.edit_file(self.rest(1)) + + def tab(self, tabnum): + return self._tab_directory_content() + + +class eval_(Command): + """:eval [-q] <python code> + + Evaluates the python code. + `fm' is a reference to the FM instance. + To display text, use the function `p'. + + Examples: + :eval fm + :eval len(fm.directories) + :eval p("Hello World!") + """ + name = 'eval' + resolve_macros = False + + def execute(self): + if self.arg(1) == '-q': + code = self.rest(2) + quiet = True + else: + code = self.rest(1) + quiet = False + import ranger + global cmd, fm, p, quantifier + fm = self.fm + cmd = self.fm.execute_console + p = fm.notify + quantifier = self.quantifier + try: + try: + result = eval(code) + except SyntaxError: + exec(code) + else: + if result and not quiet: + p(result) + except Exception as err: + p(err) + + +class rename(Command): + """:rename <newname> + + Changes the name of the currently highlighted file to <newname> + """ + + def execute(self): + from ranger.container.file import File + from os import access + + new_name = self.rest(1) + + tagged = {} + old_name = self.fm.thisfile.relative_path + for f in self.fm.tags.tags: + if str(f).startswith(self.fm.thisfile.path): + tagged[f] = self.fm.tags.tags[f] + self.fm.tags.remove(f) + + if not new_name: + return self.fm.notify('Syntax: rename <newname>', bad=True) + + if new_name == old_name: + return + + if access(new_name, os.F_OK): + return self.fm.notify("Can't rename: file already exists!", bad=True) + + if self.fm.rename(self.fm.thisfile, new_name): + f = File(new_name) + # Update bookmarks that were pointing on the previous name + obsoletebookmarks = [b for b in self.fm.bookmarks + if b[1].path == self.fm.thisfile] + if obsoletebookmarks: + for key, _ in obsoletebookmarks: + self.fm.bookmarks[key] = f + self.fm.bookmarks.update_if_outdated() + + self.fm.thisdir.pointed_obj = f + self.fm.thisfile = f + for t in tagged: + self.fm.tags.tags[t.replace(old_name, new_name)] = tagged[t] + self.fm.tags.dump() + + def tab(self, tabnum): + return self._tab_directory_content() + + +class rename_append(Command): + """:rename_append + + Creates an open_console for the rename command, automatically placing the cursor before the file extension. + """ + + def execute(self): + cf = self.fm.thisfile + path = cf.relative_path.replace("%", "%%") + if path.find('.') != 0 and path.rfind('.') != -1 and not cf.is_directory: + self.fm.open_console('rename ' + path, position=(7 + path.rfind('.'))) + else: + self.fm.open_console('rename ' + path) + + +class chmod(Command): + """:chmod <octal number> + + Sets the permissions of the selection to the octal number. + + The octal number is between 0 and 777. The digits specify the + permissions for the user, the group and others. + + A 1 permits execution, a 2 permits writing, a 4 permits reading. + Add those numbers to combine them. So a 7 permits everything. + """ + + def execute(self): + mode = self.rest(1) + if not mode: + mode = str(self.quantifier) + + try: + mode = int(mode, 8) + if mode < 0 or mode > 0o777: + raise ValueError + except ValueError: + self.fm.notify("Need an octal number between 0 and 777!", bad=True) + return + + for file in self.fm.thistab.get_selection(): + try: + os.chmod(file.path, mode) + except Exception as ex: + self.fm.notify(ex) + + try: + # reloading directory. maybe its better to reload the selected + # files only. + self.fm.thisdir.load_content() + except Exception: + pass + + +class bulkrename(Command): + """:bulkrename + + This command opens a list of selected files in an external editor. + After you edit and save the file, it will generate a shell script + which does bulk renaming according to the changes you did in the file. + + This shell script is opened in an editor for you to review. + After you close it, it will be executed. + """ + def execute(self): + import sys + import tempfile + from ranger.container.file import File + from ranger.ext.shell_escape import shell_escape as esc + py3 = sys.version_info[0] >= 3 + + # Create and edit the file list + filenames = [f.relative_path for f in self.fm.thistab.get_selection()] + listfile = tempfile.NamedTemporaryFile(delete=False) + listpath = listfile.name + + if py3: + listfile.write("\n".join(filenames).encode("utf-8")) + else: + listfile.write("\n".join(filenames)) + listfile.close() + self.fm.execute_file([File(listpath)], app='editor') + listfile = open(listpath, 'r') + new_filenames = listfile.read().split("\n") + listfile.close() + os.unlink(listpath) + if all(a == b for a, b in zip(filenames, new_filenames)): + self.fm.notify("No renaming to be done!") + return + + # Generate script + cmdfile = tempfile.NamedTemporaryFile() + script_lines = [] + script_lines.append("# This file will be executed when you close the editor.\n") + script_lines.append("# Please double-check everything, clear the file to abort.\n") + script_lines.extend("mv -vi -- %s %s\n" % (esc(old), esc(new)) + for old, new in zip(filenames, new_filenames) if old != new) + script_content = "".join(script_lines) + if py3: + cmdfile.write(script_content.encode("utf-8")) + else: + cmdfile.write(script_content) + cmdfile.flush() + + # Open the script and let the user review it, then check if the script + # was modified by the user + self.fm.execute_file([File(cmdfile.name)], app='editor') + cmdfile.seek(0) + script_was_edited = (script_content != cmdfile.read()) + + # Do the renaming + self.fm.run(['/bin/sh', cmdfile.name], flags='w') + cmdfile.close() + + # Retag the files, but only if the script wasn't changed during review, + # because only then we know which are the source and destination files. + if not script_was_edited: + tags_changed = False + for old, new in zip(filenames, new_filenames): + if old != new: + oldpath = self.fm.thisdir.path + '/' + old + newpath = self.fm.thisdir.path + '/' + new + if oldpath in self.fm.tags: + old_tag = self.fm.tags.tags[oldpath] + self.fm.tags.remove(oldpath) + self.fm.tags.tags[newpath] = old_tag + tags_changed = True + if tags_changed: + self.fm.tags.dump() + else: + fm.notify("files have not been retagged") + + +class relink(Command): + """:relink <newpath> + + Changes the linked path of the currently highlighted symlink to <newpath> + """ + + def execute(self): + from ranger.container.file import File + + new_path = self.rest(1) + cf = self.fm.thisfile + + if not new_path: + return self.fm.notify('Syntax: relink <newpath>', bad=True) + + if not cf.is_link: + return self.fm.notify('%s is not a symlink!' % cf.relative_path, bad=True) + + if new_path == os.readlink(cf.path): + return + + try: + os.remove(cf.path) + os.symlink(new_path, cf.path) + except OSError as err: + self.fm.notify(err) + + self.fm.reset() + self.fm.thisdir.pointed_obj = cf + self.fm.thisfile = cf + + def tab(self, tabnum): + if not self.rest(1): + return self.line + os.readlink(self.fm.thisfile.path) + else: + return self._tab_directory_content() + + +class help_(Command): + """:help + + Display ranger's manual page. + """ + name = 'help' + + def execute(self): + def callback(answer): + if answer == "q": + return + elif answer == "m": + self.fm.display_help() + elif answer == "c": + self.fm.dump_commands() + elif answer == "k": + self.fm.dump_keybindings() + elif answer == "s": + self.fm.dump_settings() + + c = self.fm.ui.console.ask("View [m]an page, [k]ey bindings," + " [c]ommands or [s]ettings? (press q to abort)", callback, list("mkcsq") + [chr(27)]) + + +class copymap(Command): + """:copymap <keys> <newkeys1> [<newkeys2>...] + + Copies a "browser" keybinding from <keys> to <newkeys> + """ + context = 'browser' + + def execute(self): + if not self.arg(1) or not self.arg(2): + return self.fm.notify("Not enough arguments", bad=True) + + for arg in self.args[2:]: + self.fm.ui.keymaps.copy(self.context, self.arg(1), arg) + + +class copypmap(copymap): + """:copypmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "pager" keybinding from <keys> to <newkeys> + """ + context = 'pager' + + +class copycmap(copymap): + """:copycmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "console" keybinding from <keys> to <newkeys> + """ + context = 'console' + + +class copytmap(copymap): + """:copycmap <keys> <newkeys1> [<newkeys2>...] + + Copies a "taskview" keybinding from <keys> to <newkeys> + """ + context = 'taskview' + + +class unmap(Command): + """:unmap <keys> [<keys2>, ...] + + Remove the given "browser" mappings + """ + context = 'browser' + + def execute(self): + for arg in self.args[1:]: + self.fm.ui.keymaps.unbind(self.context, arg) + + +class cunmap(unmap): + """:cunmap <keys> [<keys2>, ...] + + Remove the given "console" mappings + """ + context = 'browser' + + +class punmap(unmap): + """:punmap <keys> [<keys2>, ...] + + Remove the given "pager" mappings + """ + context = 'pager' + + +class tunmap(unmap): + """:tunmap <keys> [<keys2>, ...] + + Remove the given "taskview" mappings + """ + context = 'taskview' + + +class map_(Command): + """:map <keysequence> <command> + + Maps a command to a keysequence in the "browser" context. + + Example: + map j move down + map J move down 10 + """ + name = 'map' + context = 'browser' + resolve_macros = False + + def execute(self): + if not self.arg(1) or not self.arg(2): + return self.fm.notify("Not enough arguments", bad=True) + + self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2)) + + +class cmap(map_): + """:cmap <keysequence> <command> + + Maps a command to a keysequence in the "console" context. + + Example: + cmap <ESC> console_close + cmap <C-x> console_type test + """ + context = 'console' + + +class tmap(map_): + """:tmap <keysequence> <command> + + Maps a command to a keysequence in the "taskview" context. + """ + context = 'taskview' + + +class pmap(map_): + """:pmap <keysequence> <command> + + Maps a command to a keysequence in the "pager" context. + """ + context = 'pager' + + +class scout(Command): + """:scout [-FLAGS] <pattern> + + Swiss army knife command for searching, traveling and filtering files. + The command takes various flags as arguments which can be used to + influence its behaviour: + + -a = automatically open a file on unambiguous match + -e = open the selected file when pressing enter + -f = filter files that match the current search pattern + -g = interpret pattern as a glob pattern + -i = ignore the letter case of the files + -k = keep the console open when changing a directory with the command + -l = letter skipping; e.g. allow "rdme" to match the file "readme" + -m = mark the matching files after pressing enter + -M = unmark the matching files after pressing enter + -p = permanent filter: hide non-matching files after pressing enter + -r = interpret pattern as a regular expression pattern + -s = smart case; like -i unless pattern contains upper case letters + -t = apply filter and search pattern as you type + -v = inverts the match + + Multiple flags can be combined. For example, ":scout -gpt" would create + a :filter-like command using globbing. + """ + AUTO_OPEN = 'a' + OPEN_ON_ENTER = 'e' + FILTER = 'f' + SM_GLOB = 'g' + IGNORE_CASE = 'i' + KEEP_OPEN = 'k' + SM_LETTERSKIP = 'l' + MARK = 'm' + UNMARK = 'M' + PERM_FILTER = 'p' + SM_REGEX = 'r' + SMART_CASE = 's' + AS_YOU_TYPE = 't' + INVERT = 'v' + + def __init__(self, *args, **kws): + Command.__init__(self, *args, **kws) + self._regex = None + self.flags, self.pattern = self.parse_flags() + + def execute(self): + thisdir = self.fm.thisdir + flags = self.flags + pattern = self.pattern + regex = self._build_regex() + count = self._count(move=True) + + self.fm.thistab.last_search = regex + self.fm.set_search_method(order="search") + + if (self.MARK in flags or self.UNMARK in flags) and thisdir.files: + value = flags.find(self.MARK) > flags.find(self.UNMARK) + if self.FILTER in flags: + for f in thisdir.files: + thisdir.mark_item(f, value) + else: + for f in thisdir.files: + if regex.search(f.relative_path): + thisdir.mark_item(f, value) + + if self.PERM_FILTER in flags: + thisdir.filter = regex if pattern else None + + # clean up: + self.cancel() + + if self.OPEN_ON_ENTER in flags or \ + self.AUTO_OPEN in flags and count == 1: + if os.path.exists(pattern): + self.fm.cd(pattern) + else: + self.fm.move(right=1) + + if self.KEEP_OPEN in flags and thisdir != self.fm.thisdir: + # reopen the console: + if not pattern: + self.fm.open_console(self.line) + else: + self.fm.open_console(self.line[0:-len(pattern)]) + + if self.quickly_executed and thisdir != self.fm.thisdir and pattern != "..": + self.fm.block_input(0.5) + + def cancel(self): + self.fm.thisdir.temporary_filter = None + self.fm.thisdir.refilter() + + def quick(self): + asyoutype = self.AS_YOU_TYPE in self.flags + if self.FILTER in self.flags: + self.fm.thisdir.temporary_filter = self._build_regex() + if self.PERM_FILTER in self.flags and asyoutype: + self.fm.thisdir.filter = self._build_regex() + if self.FILTER in self.flags or self.PERM_FILTER in self.flags: + self.fm.thisdir.refilter() + if self._count(move=asyoutype) == 1 and self.AUTO_OPEN in self.flags: + return True + return False + + def tab(self, tabnum): + self._count(move=True, offset=tabnum) + + def _build_regex(self): + if self._regex is not None: + return self._regex + + frmat = "%s" + flags = self.flags + pattern = self.pattern + + if pattern == ".": + return re.compile("") + + # Handle carets at start and dollar signs at end separately + if pattern.startswith('^'): + pattern = pattern[1:] + frmat = "^" + frmat + if pattern.endswith('$'): + pattern = pattern[:-1] + frmat += "$" + + # Apply one of the search methods + if self.SM_REGEX in flags: + regex = pattern + elif self.SM_GLOB in flags: + regex = re.escape(pattern).replace("\\*", ".*").replace("\\?", ".") + elif self.SM_LETTERSKIP in flags: + regex = ".*".join(re.escape(c) for c in pattern) + else: + regex = re.escape(pattern) + + regex = frmat % regex + + # Invert regular expression if necessary + if self.INVERT in flags: + regex = "^(?:(?!%s).)*$" % regex + + # Compile Regular Expression + options = re.UNICODE + if self.IGNORE_CASE in flags or self.SMART_CASE in flags and \ + pattern.islower(): + options |= re.IGNORECASE + try: + self._regex = re.compile(regex, options) + except Exception: + self._regex = re.compile("") + return self._regex + + def _count(self, move=False, offset=0): + count = 0 + cwd = self.fm.thisdir + pattern = self.pattern + + if not pattern or not cwd.files: + return 0 + if pattern == '.': + return 0 + if pattern == '..': + return 1 + + deq = deque(cwd.files) + deq.rotate(-cwd.pointer - offset) + i = offset + regex = self._build_regex() + for fsobj in deq: + if regex.search(fsobj.relative_path): + count += 1 + if move and count == 1: + cwd.move(to=(cwd.pointer + i) % len(cwd.files)) + self.fm.thisfile = cwd.pointed_obj + if count > 1: + return count + i += 1 + + return count == 1 + + +class filter_inode_type(Command): + """ + :filter_inode_type [dfl] + + Displays only the files of specified inode type. Parameters + can be combined. + + d display directories + f display files + l display links + """ + + FILTER_DIRS = 'd' + FILTER_FILES = 'f' + FILTER_LINKS = 'l' + + def execute(self): + if not self.arg(1): + self.fm.thisdir.inode_type_filter = None + else: + self.fm.thisdir.inode_type_filter = lambda file: ( + True if ((self.FILTER_DIRS in self.arg(1) and file.is_directory) or + (self.FILTER_FILES in self.arg(1) and file.is_file and not file.is_link) or + (self.FILTER_LINKS in self.arg(1) and file.is_link)) else False) + self.fm.thisdir.refilter() + + +class grep(Command): + """:grep <string> + + Looks for a string in all marked files or directories + """ + + def execute(self): + if self.rest(1): + action = ['grep', '--line-number'] + action.extend(['-e', self.rest(1), '-r']) + action.extend(f.path for f in self.fm.thistab.get_selection()) + self.fm.execute_command(action, flags='p') + + +class flat(Command): + """ + :flat <level> + + Flattens the directory view up to the specified level. + + -1 fully flattened + 0 remove flattened view + """ + + def execute(self): + try: + level = self.rest(1) + level = int(level) + except ValueError: + level = self.quantifier + if level < -1: + self.fm.notify("Need an integer number (-1, 0, 1, ...)", bad=True) + self.fm.thisdir.unload() + self.fm.thisdir.flat = level + self.fm.thisdir.load_content() + +# Version control commands +# -------------------------------- + + +class stage(Command): + """ + :stage + + Stage selected files for the corresponding version control system + """ + def execute(self): + from ranger.ext.vcs import VcsError + + if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track: + filelist = [f.path for f in self.fm.thistab.get_selection()] + try: + self.fm.thisdir.vcs.action_add(filelist) + except VcsError as error: + self.fm.notify('Unable to stage files: {0:s}'.format(str(error))) + self.fm.ui.vcsthread.process(self.fm.thisdir) + else: + self.fm.notify('Unable to stage files: Not in repository') + + +class unstage(Command): + """ + :unstage + + Unstage selected files for the corresponding version control system + """ + def execute(self): + from ranger.ext.vcs import VcsError + + if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track: + filelist = [f.path for f in self.fm.thistab.get_selection()] + try: + self.fm.thisdir.vcs.action_reset(filelist) + except VcsError as error: + self.fm.notify('Unable to unstage files: {0:s}'.format(str(error))) + self.fm.ui.vcsthread.process(self.fm.thisdir) + else: + self.fm.notify('Unable to unstage files: Not in repository') + +# Metadata commands +# -------------------------------- + + +class prompt_metadata(Command): + """ + :prompt_metadata <key1> [<key2> [<key3> ...]] + + Prompt the user to input metadata for multiple keys in a row. + """ + + _command_name = "meta" + _console_chain = None + + def execute(self): + prompt_metadata._console_chain = self.args[1:] + self._process_command_stack() + + def _process_command_stack(self): + if prompt_metadata._console_chain: + key = prompt_metadata._console_chain.pop() + self._fill_console(key) + else: + for col in self.fm.ui.browser.columns: + col.need_redraw = True + + def _fill_console(self, key): + metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path) + if key in metadata and metadata[key]: + existing_value = metadata[key] + else: + existing_value = "" + text = "%s %s %s" % (self._command_name, key, existing_value) + self.fm.open_console(text, position=len(text)) + + +class meta(prompt_metadata): + """ + :meta <key> [<value>] + + Change metadata of a file. Deletes the key if value is empty. + """ + + def execute(self): + key = self.arg(1) + value = self.rest(1) + update_dict = dict() + update_dict[key] = self.rest(2) + selection = self.fm.thistab.get_selection() + for f in selection: + self.fm.metadata.set_metadata(f.path, update_dict) + self._process_command_stack() + + def tab(self, tabnum): + key = self.arg(1) + metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path) + if key in metadata and metadata[key]: + return [" ".join([self.arg(0), self.arg(1), metadata[key]])] + else: + return [self.arg(0) + " " + key for key in sorted(metadata) + if key.startswith(self.arg(1))] + + +class linemode(default_linemode): + """ + :linemode <mode> + + Change what is displayed as a filename. + + - "mode" may be any of the defined linemodes (see: ranger.core.linemode). + "normal" is mapped to "filename". + """ + + def execute(self): + mode = self.arg(1) + + if mode == "normal": + mode = DEFAULT_LINEMODE + + if mode not in self.fm.thisfile.linemode_dict: + self.fm.notify("Unhandled linemode: `%s'" % mode, bad=True) + return + + self.fm.thisdir._set_linemode_of_children(mode) + + # Ask the browsercolumns to redraw + for col in self.fm.ui.browser.columns: + col.need_redraw = True diff --git a/.config/ranger/history b/.config/ranger/history new file mode 100755 index 0000000..737d078 --- /dev/null +++ b/.config/ranger/history @@ -0,0 +1,50 @@ +rename Jorja Smith - Lost & Found +shell unzip %s +rename [OAirVPN-OVPN +rename [O[I[OAirVPN-OVPN +rename AirVPN-OVPN +rename [O[IAirVPN-OVPN +rename Athlean Xero +rename Dan Inosanto The Filipino Martial Arts DVD 1 ~.mp4 +rename Inosanto Kali Filipino Martial Arts on Dummy.mp4 +rename Dan Inosanto The Filipino Martial Arts DVD 1 ~.mp4 +rename Dan Inosanto The Filipino Martial Arts DVD 1 ~.mp4 +bulkrename +search +tvd +shell find %s/*.{jpg,jpeg,png} | shuf | sxiv -t - +shell find %s/*.jpg | shuf | sxiv -t - +shell find %d/*.jpg | shuf | sxiv -t - +shell find %d/*.jpg -type f | shuf | sxiv -t - +shell find %s/{*.jpg} -type f | shuf | sxiv -t - +shell find %s/*{.jpg -type f | shuf | sxiv -t - +shell find %s/*{.jpg} -type f | shuf | sxiv -t - +shell find %s/*.jpg -type f | shuf | sxiv -t - +search vifm +rename Skype-Angelo-2020-04-23-Video.mp4 +rename shower.jpeg +search green +rename .How to Last Longer in Bed - Crucial Advice for Men.epub +search wal +search samur +find f +mkdir sdcard +find +q +find gpw +search music +? +filter +fasd X-ray +fasd xray +open_with a +fasd Astro +fasd X-Rau +fasd X-Ray +help +dT + +trash %s +trash +trash ESDAM - KALI - Single Stick - Angles Inosanto-Lacoste - 1-17.mp4 +delete diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf new file mode 100755 index 0000000..ef8b6fe --- /dev/null +++ b/.config/ranger/rc.conf @@ -0,0 +1,668 @@ +# =================================================================== +# This file contains the default startup commands for ranger. +# To change them, it is recommended to create the file +# ~/.config/ranger/rc.conf and add your custom commands there. +# +# If you copy this whole file there, you may want to set the environment +# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice. +# +# The purpose of this file is mainly to define keybindings and settings. +# For running more complex python code, please create a plugin in "plugins/" or +# a command in "commands.py". +# +# Each line is a command that will be run before the user interface +# is initialized. As a result, you can not use commands which rely +# on the UI such as :delete or :mark. +# =================================================================== + +# =================================================================== +# == Options +# =================================================================== + +# Which viewmode should be used? Possible values are: +# miller: Use miller columns which show multiple levels of the hierarchy +# multipane: Midnight-commander like multipane view showing all tabs next +# to each other +set viewmode miller +#set viewmode multipane + +# How many columns are there, and what are their relative widths? +set column_ratios 1,3,4 + +# Which files should be hidden? (regular expression) +set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp|aux|log|toc)$|^lost\+found$|^__(py)?cache__$ + +# Show hidden files? You can toggle this by typing 'zh' +set show_hidden false + +# Ask for a confirmation when running the "delete" command? +# Valid values are "always", "never", "multiple" (default) +# With "multiple", ranger will ask only if you delete multiple files at once. +set confirm_on_delete multiple + +# Which script is used to generate file previews? +# ranger ships with scope.sh, a script that calls external programs (see +# README.md for dependencies) to preview images, archives, etc. +set preview_script ~/.config/ranger/scope.sh + +# Use the external preview script or display simple plain text or image previews? +set use_preview_script true + +# Automatically count files in the directory, even before entering them? +set automatically_count_files true + +# Open all images in this directory when running certain image viewers +# like feh or sxiv? You can still open selected files by marking them. +set open_all_images true + + +# Be aware of version control systems and display information. +set vcs_aware false + +# State of the three backends git, hg, bzr. The possible states are +# disabled, local (only show local info), enabled (show local and remote +# information). +set vcs_backend_git enabled +set vcs_backend_hg disabled +set vcs_backend_bzr disabled + +# Use one of the supported image preview protocols +set preview_images true + + +# Set the preview image method. Supported methods: +# +# * w3m (default): +# Preview images in full color with the external command "w3mimgpreview"? +# This requires the console web browser "w3m" and a supported terminal. +# It has been successfully tested with "xterm" and "urxvt" without tmux. +# +# * iterm2: +# Preview images in full color using iTerm2 image previews +# (http://iterm2.com/images.html). This requires using iTerm2 compiled +# with image preview support. +# +# * urxvt: +# Preview images in full color using urxvt image backgrounds. This +# requires using urxvt compiled with pixbuf support. +# +# * urxvt-full: +# The same as urxvt but utilizing not only the preview pane but the +# whole terminal window. +set preview_images_method ueberzug +#set w3m_delay 0.1 + +# Use a unicode "..." character to mark cut-off filenames? +set unicode_ellipsis false + +# Show dotfiles in the bookmark preview box? +set show_hidden_bookmarks true + +# Which colorscheme to use? These colorschemes are available by default: +# default, jungle, snow, solarized +set colorscheme default + +# Preview files on the rightmost column? +# And collapse (shrink) the last column if there is nothing to preview? +set preview_files true +set preview_directories true +set collapse_preview true + +# Save the console history on exit? +set save_console_history true + +# Draw the status bar on top of the browser window (default: bottom) +set status_bar_on_top false + +# Draw a progress bar in the status bar which displays the average state of all +# currently running tasks which support progress bars? +set draw_progress_bar_in_status_bar true + +# Draw borders around columns? +set draw_borders true + +# Display the directory name in tabs? +set dirname_in_tabs false + +# Enable the mouse support? +set mouse_enabled false + +# Display the file size in the main column or status bar? +set display_size_in_main_column true +set display_size_in_status_bar true + +# Display files tags in all columns or only in main column? +set display_tags_in_all_columns true + +# Set a title for the window? +set update_title false + +# Set the title to "ranger" in the tmux program? +set update_tmux_title false + +# open a tmux terminal in the same ranger directory +map ew eval fm.run("tmux split-window -h") + +# Shorten the title if it gets long? The number defines how many +# directories are displayed at once, 0 turns off this feature. +set shorten_title 3 + +# Abbreviate $HOME with ~ in the titlebar (first line) of ranger? +set tilde_in_titlebar false + +# How many directory-changes or console-commands should be kept in history? +set max_history_size 20 +set max_console_history_size 50 + +# Try to keep so much space between the top/bottom border when scrolling: +set scroll_offset 8 + +# Flush the input after each key hit? (Noticeable when ranger lags) +set flushinput true + +# Padding on the right when there's no preview? +# This allows you to click into the space to run the file. +set padding_right true + +# Save bookmarks (used with mX and `X) instantly? +# This helps to synchronize bookmarks between multiple ranger +# instances but leads to *slight* performance loss. +# When false, bookmarks are saved when ranger is exited. +set autosave_bookmarks true + +# You can display the "real" cumulative size of directories by using the +# command :get_cumulative_size or typing "dc". The size is expensive to +# calculate and will not be updated automatically. You can choose +# to update it automatically though by turning on this option: +set autoupdate_cumulative_size false + +# Turning this on makes sense for screen readers: +set show_cursor false + +# One of: size, natural, basename, atime, ctime, mtime, type, random +set sort natural + +# Additional sorting options +set sort_reverse false +set sort_case_insensitive true +set sort_directories_first true +set sort_unicode false + +# Enable this if key combinations with the Alt Key don't work for you. +# (Especially on xterm) +set xterm_alt_key false + +# Whether to include bookmarks in cd command +set cd_bookmarks true + +# Avoid previewing files larger than this size, in bytes. Use a value of 0 to +# disable this feature. +set preview_max_size 0 + +# Add the highlighted file to the path in the titlebar +set show_selection_in_titlebar true + +# The delay that ranger idly waits for user input, in milliseconds, with a +# resolution of 100ms. Lower delay reduces lag between directory updates but +# increases CPU load. +set idle_delay 2000 + +# When the metadata manager module looks for metadata, should it only look for +# a ".metadata.json" file in the current directory, or do a deep search and +# check all directories above the current one as well? +set metadata_deep_search false + +# Clear all existing filters when leaving a directory +set clear_filters_on_dir_change false + +# Disable displaying line numbers in main column +set line_numbers false + +# =================================================================== +# == Local Options +# =================================================================== +# You can set local options that only affect a single directory. + +# Examples: +# setlocal path=~/downloads sort mtime + +# =================================================================== +# == Command Aliases in the Console +# =================================================================== + +alias e edit +alias q quit +alias q! quitall +alias qa quitall +alias qall quitall +alias setl setlocal + +alias filter scout -prt +alias find scout -aeit +alias mark scout -mr +alias unmark scout -Mr +alias search scout -rs +alias search_inc scout -rts +alias travel scout -aefiklst + +# =================================================================== +# == Define keys for the browser +# =================================================================== + +# Basic +map Q quit! +map q quit +copymap q ZZ ZQ + +map R reload_cwd +map <C-r> reset +map <C-l> redraw_window +map <C-c> abort +#map fzs fzf_select +map (C-f> fzf_select +#map fzl fzf_locate +map (C-g> fzf_locate +map zz fzf_fasd +map zo console fasd%space +map <esc> change_mode normal +map ~ set viewmode! + +map i display_file +map ? help +map W display_log +map w taskview_open +map S shell $SHELL + +map : console +map ; console +map ! console shell%space +map @ console -p6 shell %s +map # console shell -p%space +#map s console shell%space +map r chain draw_possible_programs; console open_with%space +map cd console cd%space + + +#Music +map Mc shell mocp -c +map Ma shell mocp -a %s +map Ms shell mocp -p +map MS shell mocp -S +map Mp shell mocp -G +map Mn shell mocp -f +map Mb shell mocp -r +map MN shell mocp -s && mocp -c && mocp -a %s && mocp -p +map Mo shell mocp -j 0%% +map MK shell killall mocp + +# Tagging / Marking +map at tag_toggle +map ut tag_remove +map "<any> tag_toggle tag=%any +map <Space> mark_files toggle=True +map va mark_files all=True toggle=True +map uv mark_files all=True val=False +map vs toggle_visual_mode +map uV toggle_visual_mode reverse=True + +map V console shell vim%space + +# VIM-like +copymap <UP> k +copymap <DOWN> j +copymap <LEFT> h +copymap <RIGHT> l +copymap <HOME> gg +copymap <END> G +copymap <PAGEDOWN> <C-F> +copymap <PAGEUP> <C-B> + +map J move down=0.5 pages=True +map K move up=0.5 pages=True +copymap J <C-D> +copymap K <C-U> + +# Jumping around +map H history_go -1 +map L history_go 1 +map ] move_parent 1 +map [ move_parent -1 +map } traverse + +map gh cd ~ +#map ge cd /etc +#map gu cd /usr +#map gd cd /dev +#map gl cd -r . +#map gL cd -r %f +#map go cd /opt +#map gv cd /var +#map gm cd /media +#map gM cd /mnt +#map gs cd /srv +#map gr cd / +#map gR eval fm.cd(ranger.RANGERDIR) +#map g/ cd / +#map g? cd /usr/share/doc/ranger + +# External Programs +map E edit +map du shell -p du --max-depth=1 -h --apparent-size +map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh +map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b +map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b +map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b +map tq shell TS_SOCKET=/tmp/mpv-q ts mpv --osd-font-size=30 %s + +# Filesystem Operations +map = chmod + +map cw console rename%space +map cW bulkrename %s +map aa rename_append +map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%")) +map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7) + +map pp paste +map po paste overwrite=True +map pP paste append=True +map pO paste overwrite=True append=True +map pl paste_symlink relative=False +map pL paste_symlink relative=True +map phl paste_hardlink +map pht paste_hardlinked_subtree + +map dD console delete + +map dd cut +map ud uncut +map da cut mode=add +map dr cut mode=remove +map dt cut mode=toggle + +map yy copy +map uy uncut +map ya copy mode=add +map yr copy mode=remove +map yt copy mode=toggle + +# Temporary workarounds +map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) +map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) +map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) +map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) +map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) +map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) +map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) +map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) + +# Searching +map / console search%space +map n search_next +map N search_next forward=False +#map ct search_next order=tag +#map cs search_next order=size +#map ci search_next order=mimetype +#map cc search_next order=ctime +#map cm search_next order=mtime +#map ca search_next order=atime + +# Tabs +map <C-n> tab_new ~ +map <C-w> tab_close +map <TAB> tab_move 1 +map <S-TAB> tab_move -1 +map <A-Right> tab_move 1 +map <A-Left> tab_move -1 +map gt tab_move 1 +map gT tab_move -1 +map gn tab_new ~ +map gc tab_close +map uq tab_restore +map <a-1> tab_open 1 +map <a-2> tab_open 2 +map <a-3> tab_open 3 +map <a-4> tab_open 4 +map <a-5> tab_open 5 +map <a-6> tab_open 6 +map <a-7> tab_open 7 +map <a-8> tab_open 8 +map <a-9> tab_open 9 + +# Sorting +map or set sort_reverse! +map oz set sort=random +map os chain set sort=size; set sort_reverse=False +map ob chain set sort=basename; set sort_reverse=False +map on chain set sort=natural; set sort_reverse=False +map om chain set sort=mtime; set sort_reverse=False +map oc chain set sort=ctime; set sort_reverse=False +map oa chain set sort=atime; set sort_reverse=False +map ot chain set sort=type; set sort_reverse=False +map oe chain set sort=extension; set sort_reverse=False + +map oS chain set sort=size; set sort_reverse=True +map oB chain set sort=basename; set sort_reverse=True +map oN chain set sort=natural; set sort_reverse=True +map oM chain set sort=mtime; set sort_reverse=True +map oC chain set sort=ctime; set sort_reverse=True +map oA chain set sort=atime; set sort_reverse=True +map oT chain set sort=type; set sort_reverse=True +map oE chain set sort=extension; set sort_reverse=True + +map dc get_cumulative_size + +# Settings +map zc set collapse_preview! +map zd set sort_directories_first! +map zh set show_hidden! +map <C-h> set show_hidden! +map zi set flushinput! +#map zi set preview_images! +map zm set mouse_enabled! +map zp set preview_files! +map zP set preview_directories! +map zs set sort_case_insensitive! +map zu set autoupdate_cumulative_size! +map zv set use_preview_script! +map zf console filter%space + +# Bookmarks +map `<any> enter_bookmark %any +map '<any> enter_bookmark %any +map m<any> set_bookmark %any +map um<any> unset_bookmark %any + +map m<bg> draw_bookmarks +copymap m<bg> um<bg> `<bg> '<bg> + +# Generate all the chmod bindings with some python help: +eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg)) + +eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg)) +eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg)) + +# =================================================================== +# == Define keys for the console +# =================================================================== +# Note: Unmapped keys are passed directly to the console. + +# Basic +cmap <tab> eval fm.ui.console.tab() +cmap <s-tab> eval fm.ui.console.tab(-1) +cmap <ESC> eval fm.ui.console.close() +cmap <CR> eval fm.ui.console.execute() +cmap <C-l> redraw_window + +copycmap <ESC> <C-c> +copycmap <CR> <C-j> + +# Move around +cmap <up> eval fm.ui.console.history_move(-1) +cmap <down> eval fm.ui.console.history_move(1) +cmap <left> eval fm.ui.console.move(left=1) +cmap <right> eval fm.ui.console.move(right=1) +cmap <home> eval fm.ui.console.move(right=0, absolute=True) +cmap <end> eval fm.ui.console.move(right=-1, absolute=True) +cmap <a-left> eval fm.ui.console.move_word(left=1) +cmap <a-right> eval fm.ui.console.move_word(right=1) + +# Line Editing +cmap <backspace> eval fm.ui.console.delete(-1) +cmap <delete> eval fm.ui.console.delete(0) +cmap <C-w> eval fm.ui.console.delete_word() +cmap <A-d> eval fm.ui.console.delete_word(backward=False) +cmap <C-k> eval fm.ui.console.delete_rest(1) +cmap <C-u> eval fm.ui.console.delete_rest(-1) +cmap <C-y> eval fm.ui.console.paste() + +# Note: There are multiple ways to express backspaces. <backspace> (code 263) +# and <backspace2> (code 127). To be sure, use both. +copycmap <backspace> <backspace2> + +# This special expression allows typing in numerals: +cmap <allow_quantifiers> false + +# =================================================================== +# == Pager Keybindings +# =================================================================== + +# Movement +pmap <down> pager_move down=1 +pmap <up> pager_move up=1 +pmap <left> pager_move left=4 +pmap <right> pager_move right=4 +pmap <home> pager_move to=0 +pmap <end> pager_move to=-1 +pmap <pagedown> pager_move down=1.0 pages=True +pmap <pageup> pager_move up=1.0 pages=True +pmap <C-d> pager_move down=0.5 pages=True +pmap <C-u> pager_move up=0.5 pages=True + +copypmap <UP> k <C-p> +copypmap <DOWN> j <C-n> <CR> +copypmap <LEFT> h +copypmap <RIGHT> l +copypmap <HOME> g +copypmap <END> G +copypmap <C-d> d +copypmap <C-u> u +copypmap <PAGEDOWN> n f <C-F> <Space> +copypmap <PAGEUP> p b <C-B> + +# Basic +pmap <C-l> redraw_window +pmap <ESC> pager_close +copypmap <ESC> q Q i <F3> +pmap E edit_file + +# =================================================================== +# == Taskview Keybindings +# =================================================================== + +# Movement +tmap <up> taskview_move up=1 +tmap <down> taskview_move down=1 +tmap <home> taskview_move to=0 +tmap <end> taskview_move to=-1 +tmap <pagedown> taskview_move down=1.0 pages=True +tmap <pageup> taskview_move up=1.0 pages=True +tmap <C-d> taskview_move down=0.5 pages=True +tmap <C-u> taskview_move up=0.5 pages=True + +copytmap <UP> k <C-p> +copytmap <DOWN> j <C-n> <CR> +copytmap <HOME> g +copytmap <END> G +copytmap <C-u> u +copytmap <PAGEDOWN> n f <C-F> <Space> +copytmap <PAGEUP> p b <C-B> + +# Changing priority and deleting tasks +tmap J eval -q fm.ui.taskview.task_move(-1) +tmap K eval -q fm.ui.taskview.task_move(0) +tmap dd eval -q fm.ui.taskview.task_remove() +tmap <pagedown> eval -q fm.ui.taskview.task_move(-1) +tmap <pageup> eval -q fm.ui.taskview.task_move(0) +tmap <delete> eval -q fm.ui.taskview.task_remove() + +# Basic +tmap <C-l> redraw_window +tmap <ESC> taskview_close +copytmap <ESC> q Q w <C-c> + +#MUSIC TAGGING +map Tr console shell taffy %s -r%space" +map Tl console shell taffy %s -l%space" +map Tt console shell taffy %s -t%space" +map Tn console shell taffy %s -n%space" +map Ty console shell taffy %s -n%space" + +#ETC +#map ss shell rsync -avr --rsh='ssh -p2222' %s lukesmith@lukesmith.xyz:/home1/lukesmith/public_html +#map slt shell rsync -avr --rsh='ssh -p2222' %s lukesmith@lukesmith.xyz:/home1/lukesmith/public_html/longterm +map X shell xtrct %s +map Z shell tar -cvzf %f.tar.gz %f +map ytv console shell youtube-dl -ic%space +map yta console shell youtube-dl -xic%space + +#IMAGES +#map bg shell cp %f ~/.config/wall.png && xwallpaper --zoom ~/.config/wall.png +map bg shell ln -sf %p ~/.config/wall.png && xwallpaper --zoom ~/.config/wall.png +map bw shell find %s/*.{jpg,jpeg,png} -type f | shuf | sxiv -t - +map bW shell setbg %s + +map C shell killall w3mimgdisplay && convert -rotate 90 %s %s +map F shell killall w3mimgdisplay && convert -flop %s %s +map bl shell killall w3mimgdisplay && convert %s -resize 1440x1080\> bl_%s + +#LATEX +map TC shell find . -maxdepth 1 -regextype gnu-awk -regex "^.*\.(pyc|pyo|bak|swp|aux|log|nav|out|snm|toc|bcf|run\.xml|synctex\.gz|blg|bbl)" -delete +map Txa console shell cp ~/Documents/LaTeX/article.tex%space +map Txs console shell cp ~/Documents/LaTeX/beamer.tex%space +map Txh console shell cp ~/Documents/LaTeX/handout.tex%space + +#CALIBRE +map ca1 shell calibredb add %s --library-path /MacOSX-Data2/Calibre +map ca2 shell calibredb add %s --library-path /MacOSX-Data2/Comix +map ca3 shell calibredb add %s --library-path /MacOSX-Data2/Magazines +map bk shell /usr/bin/ebook-viewer %f + +#MARKDOWN +map MP shell ~/.config/Scripts/markdown-pdf.sh %f +map MD shell ~/.config/Scripts/markdown.sh %f + +#PALM +map pi shell palm-install %f + +#ANDROID +map pa shell adb push %s /sdcard/Download/ + +#Mountjutsu +map mj shell ~/bin/scripts/mountjutsu + +###MOVEMENT### + +#DOCUMENT MOVEMENT +map gusb cd /run/media/vgg +map tusb tab_new /run/media/vgg +map musb shell ts mv %s /run/media/vgg +map Yusb shell ts cp %s /run/media/vgg +map LU4M shell ln -sf /user4/Media/%s ~/macosxd3/Media/Series/%s +map mU4M shell ts mv %s /user4/Media/ && ts ln -sf /user4/Media/%s ~/macosxd3/Media/Series/%s +map LSCM shell ln -sf /scratch/Media/%s ~/macosxd3/Media/Series/%s +map mSCM shell ts mv %s /scratch/Media/ && ts ln -sf /scratch/Media/%s ~/macosxd3/Media/Series/%s +map LS2M shell ln -sf /scratch2/Media/%s ~/macosxd3/Media/Series/%s +map mS2M shell ts mv %s /scratch2/Media/ && ts ln -sf /scratch2/Media/%s ~/macosxd3/Media/Series/%s +map LS3M shell ln -sf /scratch3/Media/Mvs/%s ~/macosxd3/Media/Mvs/%s +map mS3M shell ts mv %s /scratch3/Media/Mvs/ && ts ln -sf /scratch3/Media/Mvs/%s ~/macosxd3/Media/Mvs/%s + +map tma shell transmission-remote --add %s +source /home/archlinux/vgg/.config/ranger/shortcuts.conf diff --git a/.config/ranger/rifle.conf b/.config/ranger/rifle.conf new file mode 100755 index 0000000..950925e --- /dev/null +++ b/.config/ranger/rifle.conf @@ -0,0 +1,217 @@ +# vim: ft=cfg +# +# This is the configuration file of "rifle", ranger's file executor/opener. +# Each line consists of conditions and a command. For each line the conditions +# are checked and if they are met, the respective command is run. +# +# Syntax: +# <condition1> , <condition2> , ... = command +# +# The command can contain these environment variables: +# $1-$9 | The n-th selected file +# $@ | All selected files +# +# If you use the special command "ask", rifle will ask you what program to run. +# +# Prefixing a condition with "!" will negate its result. +# These conditions are currently supported: +# match <regexp> | The regexp matches $1 +# ext <regexp> | The regexp matches the extension of $1 +# mime <regexp> | The regexp matches the mime type of $1 +# name <regexp> | The regexp matches the basename of $1 +# path <regexp> | The regexp matches the absolute path of $1 +# has <program> | The program is installed (i.e. located in $PATH) +# env <variable> | The environment variable "variable" is non-empty +# file | $1 is a file +# directory | $1 is a directory +# number <n> | change the number of this command to n +# terminal | stdin, stderr and stdout are connected to a terminal +# X | $DISPLAY is not empty (i.e. Xorg runs) +# +# There are also pseudo-conditions which have a "side effect": +# flag <flags> | Change how the program is run. See below. +# label <label> | Assign a label or name to the command so it can +# | be started with :open_with <label> in ranger +# | or `rifle -p <label>` in the standalone executable. +# else | Always true. +# +# Flags are single characters which slightly transform the command: +# f | Fork the program, make it run in the background. +# | New command = setsid $command >& /dev/null & +# r | Execute the command with root permissions +# | New command = sudo $command +# t | Run the program in a new terminal. If $TERMCMD is not defined, +# | rifle will attempt to extract it from $TERM. +# | New command = $TERMCMD -e $command +# Note: The "New command" serves only as an illustration, the exact +# implementation may differ. +# Note: When using rifle in ranger, there is an additional flag "c" for +# only running the current file even if you have marked multiple files. + +#------------------------------------------- +# Websites +#------------------------------------------- +# Rarely installed browsers get higher priority; It is assumed that if you +# install a rare browser, you probably use it. Firefox/konqueror/w3m on the +# other hand are often only installed as fallback browsers. +ext x?html?, has qutebrowser, X, flag f = qutebrowser -- "$@" +ext x?html?, has w3m, terminal = w3m "$@" +ext x?html?, has surf, X, flag f = surf -- file://"$1" +ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@" +ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@" +ext x?html?, has dwb, X, flag f = dwb -- "$@" +ext x?html?, has jumanji, X, flag f = jumanji -- "$@" +ext x?html?, has luakit, X, flag f = luakit -- "$@" +ext x?html?, has uzbl, X, flag f = uzbl -- "$@" +ext x?html?, has uzbl-tabbed, X, flag f = uzbl-tabbed -- "$@" +ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@" +ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@" +ext x?html?, has midori, X, flag f = midori -- "$@" +ext x?html?, has chromium, X, flag f = chromium -- "$@" +ext x?html?, has opera, X, flag f = opera -- "$@" +ext x?html?, has firefox, X, flag f = firefox -- "$@" +ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@" +ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@" +ext x?html?, has epiphany, X, flag f = epiphany -- "$@" +ext x?html?, has konqueror, X, flag f = konqueror -- "$@" +ext x?html?, has elinks, terminal = elinks "$@" +ext x?html?, has links2, terminal = links2 "$@" +ext x?html?, has links, terminal = links "$@" +ext x?html?, has lynx, terminal = lynx -- "$@" + +#------------------------------------------- +# Misc +#------------------------------------------- +# Define the "editor" for text files as first action +mime ^text, label editor = $EDITOR -- "$@" +mime ^text, label pager = "$PAGER" -- "$@" +!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" +!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" + +ext 1 = man "$1" +ext s[wmf]c, has zsnes, X = zsnes "$1" +ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1" +ext nes, has fceux, X = fceux "$1" +ext exe = wine "$1" +name ^[mM]akefile$ = make + +#-------------------------------------------- +# Code +#------------------------------------------- +ext py = python -- "$1" +ext pl = perl -- "$1" +ext rb = ruby -- "$1" +ext js = node -- "$1" +ext sh = sh -- "$1" +ext php = php -- "$1" + +#-------------------------------------------- +# Audio without X +#------------------------------------------- +mime ^audio|ogg$, terminal, has mpv = mpv --osd-font-size=30 --input-ipc-server=/tmp/mpvsoc$(date +%s) -- "$@" +mime ^audio|ogg$, terminal, has mpv = mpv --osd-font-size=30 -- "$@" +mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@" +mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@" +ext midi?, terminal, has wildmidi = wildmidi -- "$@" + +#-------------------------------------------- +# Video/Audio with a GUI +#------------------------------------------- +mime ^video, has mpv, X, flag f = mpv --osd-font-size=30 --input-ipc-server=/tmp/mpvsoc$(date +%s) -- "$@" +mime ^video, has mpv, X, flag f = mpv --osd-font-size=30 -- "$@" +mime ^video, has mpv, X, flag f = mpv --osd-font-size=30 --fs -- "$@" +mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@" +mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@" +mime ^video, has mplayer, X, flag f = mplayer -- "$@" +mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@" +mime ^video|audio, has vlc, X, flag f = vlc -- "$@" +mime ^video|audio, has totem, X, flag f = totem -- "$@" +mime ^video|audio, has totem, X, flag f = totem --fullscreen -- "$@" +mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@" +mime ^video|audio, has smplayer, X, flag f = smplayer "$@" + +#-------------------------------------------- +# Video without X: +#------------------------------------------- +mime ^video, terminal, !X, has mpv = mpv --osd-font-size=30 -- "$@" +mime ^video, terminal, !X, has mplayer = mplayer -- "$@" +mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@" + +#------------------------------------------- +# Documents +#------------------------------------------- +ext pdf, has zathura, X, flag f = zathura -- "$@" +ext pdf, has mupdf, X, flag f = mupdf "$@" +ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@" +ext pdf, has okular, X, flag f = okular -- "$@" +ext pdf, has llpp, X, flag f = llpp "$@" +ext pdf, has apvlv, X, flag f = apvlv -- "$@" +ext pdf, has xpdf, X, flag f = xpdf -- "$@" +ext pdf, has evince, X, flag f = evince -- "$@" +ext pdf, has atril, X, flag f = atril -- "$@" +ext pdf, has epdfview, X, flag f = epdfview -- "$@" +ext pdf, has qpdfview, X, flag f = qpdfview "$@" + + +ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@" + +ext doc?, has libreoffice, terminal = libreoffice --writer --view "$@" +ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER" + +ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@" +ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@" +ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@" +ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@" +ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@" + +ext djvu, has zathura,X, flag f = zathura -- "$@" +ext djvu, has evince, X, flag f = evince -- "$@" +ext djvu, has atril, X, flag f = atril -- "$@" + +#------------------------------------------- +# Image Viewing: +#------------------------------------------- +mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" +mime ^image/svg, has display, X, flag f = display -- "$@" + +mime ^image, has sxiv, X, flag f = sxiv -- "$@" +mime ^image, has feh, X, flag f = feh -- "$@" +mime ^image, has mirage, X, flag f = mirage -- "$@" +mime ^image, has ristretto, X, flag f = ristretto "$@" +mime ^image, has eog, X, flag f = eog -- "$@" +mime ^image, has eom, X, flag f = eom -- "$@" +mime ^image, has pqiv, X, flag f = pqiv -- "$@" +mime ^image, has gimp, X, flag f = gimp -- "$@" +ext xcf, X, flag f = gimp -- "$@" + +#------------------------------------------- +# Archives +#------------------------------------------- + +# avoid password prompt by providing empty password +ext 7z, has 7z = 7z -p l "$@" | "$PAGER" +# This requires atool +ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has als = als -- "$@" | "$PAGER" +ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als = als -- "$@" | "$PAGER" +ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = aunpack -- "$@" +ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@" + +# Fallback: +ext tar|gz, has tar = tar vvtf "$@" | "$PAGER" +ext tar|gz, has tar = tar vvxf "$@" + +#------------------------------------------- +# Misc +#------------------------------------------- +label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1" +label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1" +label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1" +label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1" + +# Define the editor for non-text files + pager as last action + !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask +label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@" +label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" + +# The very last action, so that it's never triggered accidentally, is to execute a program: +mime application/x-executable = "$1" diff --git a/.config/ranger/scope.sh b/.config/ranger/scope.sh new file mode 100755 index 0000000..027285c --- /dev/null +++ b/.config/ranger/scope.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env sh +# ranger supports enhanced previews. If the option "use_preview_script" +# is set to True and this file exists, this script will be called and its +# output is displayed in ranger. ANSI color codes are supported. + +# NOTES: This script is considered a configuration file. If you upgrade +# ranger, it will be left untouched. (You must update it yourself.) +# Also, ranger disables STDIN here, so interactive scripts won't work properly + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | success. display stdout as preview +# 1 | no preview | failure. display no preview at all +# 2 | plain text | display the plain content of the file +# 3 | fix width | success. Don't reload when width changes +# 4 | fix height | success. Don't reload when height changes +# 5 | fix both | success. Don't ever reload +# 6 | image | success. display the image $cached points to as an image preview +# 7 | image | success. display the file directly as an image + +# Meaningful aliases for arguments: +path="$1" # Full path of the selected file +width="$2" # Width of the preview pane (number of fitting characters) +height="$3" # Height of the preview pane (number of fitting characters) +cached="$4" # Path that should be used to cache image previews +preview_images="$5" # "True" if image previews are enabled, "False" otherwise. + +maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln + +# Find out something about the file: +mimetype=$(file --mime-type -Lb "$path") +extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') + +# Functions: +# runs a command and saves its output into $output. Useful if you need +# the return value AND want to use the output in a pipe +try() { output=$(eval '"$@"'); } + +# writes the output of the previously used "try" command +dump() { /bin/echo "$output"; } + +# a common post-processing function used after most commands +trim() { head -n "$maxln"; } + +# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success +safepipe() { "$@"; test $? = 0 -o $? = 141; } + +# Image previews, if enabled in ranger. +if [ "$preview_images" = "True" ]; then + case "$mimetype" in + # Image previews for SVG files, disabled by default. + ###image/svg+xml) + ### convert "$path" "$cached" && exit 6 || exit 1;; + # Image previews for image files. w3mimgdisplay will be called for all + # image files (unless overriden as above), but might fail for + # unsupported types. + image/*) + exit 7;; + # Image preview for video, disabled by default.: + #video/*) + #ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; + esac +fi + +case "$extension" in + # Archive extensions: + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + try als "$path" && { dump | trim; exit 0; } + try acat "$path" && { dump | trim; exit 3; } + try bsdtar -lf "$path" && { dump | trim; exit 0; } + exit 1;; + rar) + # avoid password prompt by providing empty password + try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; + 7z) + # avoid password prompt by providing empty password + try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; + # PDF documents: + pdf) + try pdftotext -l 10 -nopgbrk -q "$path" - && \ + { dump | trim | fmt -s -w $width; exit 0; } || exit 1;; + # BitTorrent Files + torrent) + try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; + # ODT Files + odt|ods|odp|sxw) + try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; + # HTML Pages: + htm|html|xhtml) + try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; } + ;; # fall back to highlight/cat if the text browsers fail +esac + +case "$mimetype" in + # Syntax highlight for text files: + text/* | */xml) + if [ "$(tput colors)" -ge 256 ]; then + pygmentize_format=terminal256 + highlight_format=xterm256 + else + pygmentize_format=terminal + highlight_format=ansi + fi + try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } + try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } + exit 2;; + # Ascii-previews of images: + image/*) + img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; + # Display information about media files: + video/* | audio/*) + exiftool "$path" && exit 5 + # Use sed to remove spaces so the output fits into the narrow window + try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; +esac + +exit 1 diff --git a/.config/ranger/shortcuts.conf b/.config/ranger/shortcuts.conf new file mode 100644 index 0000000..e66d6bf --- /dev/null +++ b/.config/ranger/shortcuts.conf @@ -0,0 +1,123 @@ +map gh cd ~/ +map th tab_new ~/ +map mh shell mv -v %s ~/ +map Yh shell cp -rv %s ~/ +map gcf cd ~/.config +map tcf tab_new ~/.config +map mcf shell mv -v %s ~/.config +map Ycf shell cp -rv %s ~/.config +map gsc cd ~/.scripts +map tsc tab_new ~/.scripts +map msc shell mv -v %s ~/.scripts +map Ysc shell cp -rv %s ~/.scripts +map gd cd ~/Documents +map td tab_new ~/Documents +map md shell mv -v %s ~/Documents +map Yd shell cp -rv %s ~/Documents +map gD cd ~/Downloads +map tD tab_new ~/Downloads +map mD shell mv -v %s ~/Downloads +map YD shell cp -rv %s ~/Downloads +map gvd cd ~/dwhelper +map tvd tab_new ~/dwhelper +map mvd shell mv -v %s ~/dwhelper +map Yvd shell cp -rv %s ~/dwhelper +map gm cd ~/music +map tm tab_new ~/music +map mm shell mv -v %s ~/music +map Ym shell cp -rv %s ~/music +map gpp cd ~/Pictures +map tpp tab_new ~/Pictures +map mpp shell mv -v %s ~/Pictures +map Ypp shell cp -rv %s ~/Pictures +map gpw cd ~/Pictures/wallpapers +map tpw tab_new ~/Pictures/wallpapers +map mpw shell mv -v %s ~/Pictures/wallpapers +map Ypw shell cp -rv %s ~/Pictures/wallpapers +map gvv cd ~/Videos +map tvv tab_new ~/Videos +map mvv shell mv -v %s ~/Videos +map Yvv shell cp -rv %s ~/Videos +map ge cd /etc +map te tab_new /etc +map me shell mv -v %s /etc +map Ye shell cp -rv %s /etc +map gmn cd /mnt +map tmn tab_new /mnt +map mmn shell mv -v %s /mnt +map Ymn shell cp -rv %s /mnt +map gmd1 cd ~/macosxd1 +map tmd1 tab_new ~/macosxd1 +map mmd1 shell mv -v %s ~/macosxd1 +map Ymd1 shell cp -rv %s ~/macosxd1 +map gmd2 cd ~/macosxd2 +map tmd2 tab_new ~/macosxd2 +map mmd2 shell mv -v %s ~/macosxd2 +map Ymd2 shell cp -rv %s ~/macosxd2 +map gvt cd ~/macosxd2/Training +map tvt tab_new ~/macosxd2/Training +map mvt shell mv -v %s ~/macosxd2/Training +map Yvt shell cp -rv %s ~/macosxd2/Training +map gmd3 cd ~/macosxd3 +map tmd3 tab_new ~/macosxd3 +map mmd3 shell mv -v %s ~/macosxd3 +map Ymd3 shell cp -rv %s ~/macosxd3 +map gmd4 cd ~/macosxd4 +map tmd4 tab_new ~/macosxd4 +map mmd4 shell mv -v %s ~/macosxd4 +map Ymd4 shell cp -rv %s ~/macosxd4 +map gva cd ~/macosxd3/Media/anime +map tva tab_new ~/macosxd3/Media/anime +map mva shell mv -v %s ~/macosxd3/Media/anime +map Yva shell cp -rv %s ~/macosxd3/Media/anime +map gvf cd ~/macosxd3/Media/Fights +map tvf tab_new ~/macosxd3/Media/Fights +map mvf shell mv -v %s ~/macosxd3/Media/Fights +map Yvf shell cp -rv %s ~/macosxd3/Media/Fights +map gvm cd ~/macosxd3/Media/Mvs +map tvm tab_new ~/macosxd3/Media/Mvs +map mvm shell mv -v %s ~/macosxd3/Media/Mvs +map Yvm shell cp -rv %s ~/macosxd3/Media/Mvs +map gvs cd ~/macosxd3/Media/Series +map tvs tab_new ~/macosxd3/Media/Series +map mvs shell mv -v %s ~/macosxd3/Media/Series +map Yvs shell cp -rv %s ~/macosxd3/Media/Series +map gvc cd ~/macosxd4/Media-Tutorial +map tvc tab_new ~/macosxd4/Media-Tutorial +map mvc shell mv -v %s ~/macosxd4/Media-Tutorial +map Yvc shell cp -rv %s ~/macosxd4/Media-Tutorial +map gu4 cd /user4 +map tu4 tab_new /user4 +map mu4 shell mv -v %s /user4 +map Yu4 shell cp -rv %s /user4 +map gu4m cd /user4/Media +map tu4m tab_new /user4/Media +map mu4m shell mv -v %s /user4/Media +map Yu4m shell cp -rv %s /user4/Media +map gscm cd /scratch/Media +map tscm tab_new /scratch/Media +map mscm shell mv -v %s /scratch/Media +map Yscm shell cp -rv %s /scratch/Media +map gs2m cd /scratch2/Media +map ts2m tab_new /scratch2/Media +map ms2m shell mv -v %s /scratch2/Media +map Ys2m shell cp -rv %s /scratch2/Media +map bf shell $EDITOR ~/.config/bmfiles +map bd shell $EDITOR ~/.config/bmdirs +map cfb shell $EDITOR ~/.bashrc +map cfe shell $EDITOR ~/.bashrc.d/01environ.bash.linux +map cfa shell $EDITOR ~/.bashrc.d/02aliases.bash.linux +map cff shell $EDITOR ~/.bashrc.d/03functions.bash.linux +map cfz shell $EDITOR ~/.zshrc +map cfv shell $EDITOR ~/.vimrc +map cfr shell $EDITOR ~/.config/ranger/rc.conf +map cfi shell $EDITOR ~/.config/i3/config +map cfm shell $EDITOR ~/.config/mutt/muttrc +map eb shell $EDITOR ~/Documents/LaTeX/uni.bib +map cv shell $EDITOR ~/Documents/LaTeX/cv.tex +map cfd shell $EDITOR ~/.Xdefaults +map cfu shell $EDITOR ~/.newsboat/urls +map cfn shell $EDITOR ~/.newsboat/config +map cfmb shell $EDITOR ~/.config/ncmpcpp/bindings +map cfmc shell $EDITOR ~/.config/ncmpcpp/config +map er shell $EDITOR ~/Documents/referbib diff --git a/.config/ranger/tagged b/.config/ranger/tagged new file mode 100755 index 0000000..0cff07f --- /dev/null +++ b/.config/ranger/tagged @@ -0,0 +1 @@ +/home/archlinux/vgg/yify-api.html diff --git a/.config/reddio/token b/.config/reddio/token new file mode 100644 index 0000000..2556dbf --- /dev/null +++ b/.config/reddio/token @@ -0,0 +1 @@ +1566905124 255696709693-Ps3hb8krWslVE53bXrcqoqbPT14 255696709693-q5s4Nx5nh2byWMytZoPZ1x38Y6E diff --git a/.config/surfraw/bookmarks b/.config/surfraw/bookmarks new file mode 100755 index 0000000..2639f3e --- /dev/null +++ b/.config/surfraw/bookmarks @@ -0,0 +1,31 @@ +cm https://www.churchmilitant.com/ # Catholic RC tv +arch https://wiki.archlinux.org/ # linux wiki arch +eztv https://eztv.ag/ # torrents tv series +yts https://yts.ag/ # torrents movies +extratorrent https://extratorrent.ag/ # torrents movies tv series music games applications other +1337x https://1337x.to/home/ # torrents movies tv series music games applications other +tpb https://thepiratebay.org/ # torrents movies tv series music games applications other +jbr https://jobregister.aas.org # Astronomy jobs +luke https://lukesmith.xyz/ # Luke Smith linux configs rice larbs +lukegh https://github.com/LukeSmithxyz/ # github Luke Smith linux configs rice larbs +gotbletu https://www.youtube.com/user/gotbletu # gotbletu youtube linux cli terminal +gotbletugh https://github.com/gotbletu/ # github gotbletu shownotes linux configs +boxsdk https://github.com/box/box-python-sdk # github box python sdk +pandascb https://github.com/jvns/pandas-cookbook # github pandas cookbook python +gittips https://github.com/git-tips/tips # github git tips +kodifac https://github.com/NapoleonWils0n/kodi-playercorefactory # kodi player core factory bash scripts +omz https://github.com/robbyrussell/oh-my-zsh # github oh-my-zsh zsh +pyxmm https://github.com/evandromr/python_xmmscripts # github python xmm scripts +pyscitools https://github.com/evandromr/python_scitools # github python sci tools scripts +hiddenwiki http://wikihiddkz5w3hfg.onion # tor hidden wiki onion +suckless https://suckless.org/rocks/ # suckless software +dotfiles https://dotfiles.github.io/ # GitHub does dotfiles - dotfiles.github.io +ranger https://github.com/ranger/ranger/wiki/Official-user-guide # Ranger Wiki +turses https://turses.readthedocs.io/en/latest/user/configuration.html # Configuration — turses 0.3.1 documentation +vim http://vimdoc.sourceforge.net/htmldoc/message.html # Vim documentation: message +stevelosh http://stevelosh.com/blog/2012/10/the-homely-mutt/ # The Homely Mutt / Steve Losh +muttman http://www.mutt.org/doc/manual/ #sidebar The Mutt E-Mail Client +smtp http://www.samlogic.net/articles/smtp-commands-reference.htm #SMTP Commands Reference +flask http://flask.pocoo.org/ #Flask (A Python Microframework) +checktor https://check.torproject.org/ #check client running correct tor settings +piratebaytor https://uj3wazyk5u4hnvtk.onion #tornetwork torrent magnet links diff --git a/.config/surfraw/conf b/.config/surfraw/conf new file mode 100755 index 0000000..cb85ae4 --- /dev/null +++ b/.config/surfraw/conf @@ -0,0 +1,5 @@ +SURFRAW_text_browser=$BROWSERCLI +SURFRAW_graphical_browser=$BROWSER +SURFRAW_graphical=no +SURFRAW_screen=tmux +SURFRAW_new_screen=yes diff --git a/.config/surfraw/elvi/1337x b/.config/surfraw/elvi/1337x new file mode 100755 index 0000000..5eb7212 --- /dev/null +++ b/.config/surfraw/elvi/1337x @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Feb 27, 2016 +# +# DESC: Elvi to search 1337x +# elvis: 1337x -- Search 1337x for torrents (1337x.to) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search 1337x (1337x.to) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://1337x.to" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://1337x.to/search/${escaped_args}/1/" +fi diff --git a/.config/surfraw/elvi/alluc b/.config/surfraw/elvi/alluc new file mode 100755 index 0000000..302bcd1 --- /dev/null +++ b/.config/surfraw/elvi/alluc @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker files +# elvis: alluc -- Search Cyberlocker Files (http://www.alluc.ee/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://www.alluc.ee/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.alluc.ee/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.alluc.ee/download/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/archive b/.config/surfraw/elvi/archive new file mode 100755 index 0000000..9f862d8 --- /dev/null +++ b/.config/surfraw/elvi/archive @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun August 09, 2015 +# +# DESC: Elvi to search old software, games, other media +# elvis: archive -- Search old software, games, other media (https://archive.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search old software, games, other media (https://archive.org) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://archive.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://archive.org/search.php?query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/aurmirror b/.config/surfraw/elvi/aurmirror new file mode 100755 index 0000000..7509681 --- /dev/null +++ b/.config/surfraw/elvi/aurmirror @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun Feb 21, 2016 +# +# DESC: Elvi to search mirrored aur package builds +# elvis: aurmirror -- Search Mirrored AUR Package Builds (http://pkgbuild.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Mirrored AUR Package Builds (http://pkgbuild.com/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://pkgbuild.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pkgbuild.com/git/aur-mirror.git/plain/${escaped_args}/PKGBUILD" +fi diff --git a/.config/surfraw/elvi/avxhome b/.config/surfraw/elvi/avxhome new file mode 100755 index 0000000..3b18ab7 --- /dev/null +++ b/.config/surfraw/elvi/avxhome @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun August 09, 2015 +# +# DESC: Elvi to search cyberlocker files +# elvis: avxhome -- Search Cyberlocker Files (http://avxhome.se/ || http://avxsearch.se/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://avxhome.se/ || http://avxsearch.se/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://avxsearch.se/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://avxsearch.se/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/binsearch b/.config/surfraw/elvi/binsearch new file mode 100755 index 0000000..5797806 --- /dev/null +++ b/.config/surfraw/elvi/binsearch @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Jan 17 2013 +# +# DESC: Elvi to search binsearch +# elvis: binsearch -- Search binsearch for NZB (www.binsearch.info) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search binsearch (www.binsearch.info) for NZB +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.binsearch.info" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.binsearch.info/?q=${escaped_args}&max=100&adv_age=1100&server=" +fi diff --git a/.config/surfraw/elvi/btdb b/.config/surfraw/elvi/btdb new file mode 100755 index 0000000..bbd5804 --- /dev/null +++ b/.config/surfraw/elvi/btdb @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue January 10, 2017 +# +# DESC: Elvi to search btdb +# elvis: btdb -- Search btdb for torrents (https://btdb.in) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search btdb (https://btdb.in) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://btdb.in" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://btdb.in/q/${escaped_args}/?sort=time" +fi diff --git a/.config/surfraw/elvi/cachegoogle b/.config/surfraw/elvi/cachegoogle new file mode 100755 index 0000000..cbe2522 --- /dev/null +++ b/.config/surfraw/elvi/cachegoogle @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Feb 27, 2016 +# +# DESC: Elvi to search google webpage cache +# elvis: cachegoogle -- Search google for webpage cache (https://google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google (https://google.com) for webpage cache +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://webcache.googleusercontent.com/search?q=cache:${escaped_args}" +fi diff --git a/.config/surfraw/elvi/cbcomic b/.config/surfraw/elvi/cbcomic new file mode 100755 index 0000000..3bae108 --- /dev/null +++ b/.config/surfraw/elvi/cbcomic @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon December 26, 2016 +# +# DESC: Elvi to search cbcomic +# elvis: cbcomic -- Search calibre for local comic database (http://192.168.1.100:57771) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search calibre for local comic database (http://192.168.1.100:57771) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://192.168.1.100:57771" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://192.168.1.100:57771/browse/search?query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/cbdojinshi b/.config/surfraw/elvi/cbdojinshi new file mode 100755 index 0000000..a22f594 --- /dev/null +++ b/.config/surfraw/elvi/cbdojinshi @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Apr 07, 2016 +# +# DESC: Elvi to search cbdojinshi +# elvis: cbdojinshi -- Search calibre for local hentai managa comics (http://192.168.1.100:57772) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search calibre for local hentai managa comics (http://192.168.1.100:57772) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://192.168.1.100:57772" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://192.168.1.100:57772/browse/search?query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/cbsuper b/.config/surfraw/elvi/cbsuper new file mode 100755 index 0000000..d28e8c0 --- /dev/null +++ b/.config/surfraw/elvi/cbsuper @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Apr 07, 2016 +# +# DESC: Elvi to search cbsuper +# elvis: cbsuper -- Search calibre for local porn database (http://192.168.1.100:57773) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search calibre for local porn database (http://192.168.1.100:57773) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://192.168.1.100:57773" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://192.168.1.100:57773/browse/search?query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/chiasenhac b/.config/surfraw/elvi/chiasenhac new file mode 100755 index 0000000..7dadabe --- /dev/null +++ b/.config/surfraw/elvi/chiasenhac @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue November 21, 2017 +# +# DESC: Elvi to search asian chinese vietnamese music +# elvis: chiasenhac -- Search asian chinese vietnamese music (http://chiasenhac.vn) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search asian chinese vietnamese music (http://chiasenhac.vn) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://chiasenhac.vn" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://search.chiasenhac.vn/search.php?s=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/demonoid b/.config/surfraw/elvi/demonoid new file mode 100755 index 0000000..5d009a2 --- /dev/null +++ b/.config/surfraw/elvi/demonoid @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search demonoid +# elvis: demonoid -- Search demonoid for torrents (https://www.demonoid.pw) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search demonoid (https://www.demonoid.pw) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.demonoid.pw" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.demonoid.pw/files/?category=0&subcategory=All&quality=All&seeded=2&external=2&query=${escaped_args}&uid=0&sort=S" +fi diff --git a/.config/surfraw/elvi/ehentai b/.config/surfraw/elvi/ehentai new file mode 100755 index 0000000..6f3c46b --- /dev/null +++ b/.config/surfraw/elvi/ehentai @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun Feb 07, 2016 +# +# DESC: Elvi to search e-hentai +# elvis: ehentai -- Search e-hentai for hentai mangas (http://g.e-hentai.org/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search ehentai (http://g.e-hentai.org/) for hentai mangas +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://g.e-hentai.org/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://g.e-hentai.org/?f_doujinshi=1&f_manga=1&f_artistcg=1&f_gamecg=1&f_western=1&f_non-h=1&f_imageset=1&f_cosplay=1&f_asianporn=1&f_misc=1&f_search=${escaped_args}&f_apply=Apply+Filter" +fi diff --git a/.config/surfraw/elvi/epguides b/.config/surfraw/elvi/epguides new file mode 100755 index 0000000..32818a1 --- /dev/null +++ b/.config/surfraw/elvi/epguides @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Nov 06 2012 +# +# DESC: Elvi to search epguides +# elvis: epguides -- Search epguides for TV Show air dates (www.epguides.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search epguides (www.epguides.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?hl=en&q=allintitle%3A&q=site%3Aepguides.com&q=${escaped_args}&btnG=Search" +fi diff --git a/.config/surfraw/elvi/eztv b/.config/surfraw/elvi/eztv new file mode 100755 index 0000000..91fca3b --- /dev/null +++ b/.config/surfraw/elvi/eztv @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue May 23, 2017 +# +# DESC: Elvi to search eztv +# elvis: eztv -- Search eztv for torrents (https://eztv.ag) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search eztv (https://eztv.ag) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://eztv.ag" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://eztv.ag/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/fakku b/.config/surfraw/elvi/fakku new file mode 100755 index 0000000..cad4c8a --- /dev/null +++ b/.config/surfraw/elvi/fakku @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue May 11 2013 +# +# DESC: Elvi to search Fakku +# elvis: fakku -- Search Fakku for hentai mangas (www.fakku.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Fakku (www.fakku.net) for hentai mangas +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.fakku.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.fakku.net/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/fdroid b/.config/surfraw/elvi/fdroid new file mode 100755 index 0000000..3f08fe7 --- /dev/null +++ b/.config/surfraw/elvi/fdroid @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Fri July 12, 2013 +# +# DESC: Elvi to search F-droid +# elvis: fdroid -- Search F-Droid for open source android apps (https://f-droid.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search fdroid (https://f-droid.org) for open source android apps +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://f-droid.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://f-droid.org/repository/browse/?fdfilter=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/filemare b/.config/surfraw/elvi/filemare new file mode 100755 index 0000000..0481e84 --- /dev/null +++ b/.config/surfraw/elvi/filemare @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search filemare +# elvis: filemare -- Search filemare for FTP files (https://filemare.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search filemare (https://filemare.com) for FTP files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://filemare.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://filemare.com/en-us/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/filepursuit b/.config/surfraw/elvi/filepursuit new file mode 100755 index 0000000..de960e8 --- /dev/null +++ b/.config/surfraw/elvi/filepursuit @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search filepursuit +# elvis: filepursuit -- Search filepursuit for Open Directories files (https://filepursuit.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search filepursuit (https://filepursuit.com) for Open Directories files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://filepursuit.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://filepursuit.com/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/gdrive b/.config/surfraw/elvi/gdrive new file mode 100755 index 0000000..7dcf635 --- /dev/null +++ b/.config/surfraw/elvi/gdrive @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu February 09, 2017 +# +# DESC: Elvi to search google drive +# elvis: gdrive -- Search google drive for personal files (https://drive.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google drive for personal files (https://drive.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://drive.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://drive.google.com/drive/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/hentaibedta b/.config/surfraw/elvi/hentaibedta new file mode 100755 index 0000000..675f27c --- /dev/null +++ b/.config/surfraw/elvi/hentaibedta @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 22 2014 +# +# DESC: Elvi to search HentaiBedta +# elvis: hentaibedta -- Search HentaiBedta for hentai mangas (www.hentaibedta.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search HentaiBedta (www.hentaibedta.net) for hentai mangas +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.hentaibedta.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.hentaibedta.net/?s=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/iafd b/.config/surfraw/elvi/iafd new file mode 100755 index 0000000..68fce19 --- /dev/null +++ b/.config/surfraw/elvi/iafd @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Mar 01, 2016 +# +# DESC: Elvi to search Internet Adult Film Database +# elvis: iafd -- Search Internet Adult Film Database (www.iafd.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Internet Adult Film Database (www.iafd.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.iafd.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.iafd.com/results.asp?searchtype=comprehensive&searchstring=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/imagesgoogle b/.config/surfraw/elvi/imagesgoogle new file mode 100755 index 0000000..f531d11 --- /dev/null +++ b/.config/surfraw/elvi/imagesgoogle @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun June 11, 2017 +# +# DESC: Elvi to search google images +# elvis: imagesgoogle -- Search google for images (https://images.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google (https://images.google.com) for images +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://images.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?site=&tbm=isch&source=hp&biw=1280&bih=655&q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/irc b/.config/surfraw/elvi/irc new file mode 100755 index 0000000..017bc9b --- /dev/null +++ b/.config/surfraw/elvi/irc @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: V.G. Graffagnino +# +# DATE: Mon Aug 28 2017 +# +# DESC: Elvi to search IRC Channel Search +# elvis: preware -- Search for IRC channels (netsplit.de) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search IRC channels +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://netsplit.de/channels/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://netsplit.de/channels/?chat=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/ixirc b/.config/surfraw/elvi/ixirc new file mode 100755 index 0000000..50a33d0 --- /dev/null +++ b/.config/surfraw/elvi/ixirc @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun Feb 14, 2016 +# +# DESC: Elvi to search ixirc for irc xdcc files +# elvis: ixirc -- Search ixirc for irc xdcc files (http://ixirc.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search ixirc (http://ixirc.com/) for irc xdcc files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://ixirc.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://ixirc.com/?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/katcr b/.config/surfraw/elvi/katcr new file mode 100755 index 0000000..07df5a2 --- /dev/null +++ b/.config/surfraw/elvi/katcr @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu December 29, 2016 +# +# DESC: Elvi to search katcr +# elvis: katcr -- Search katcr for torrents (katcr.co) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search katcr (katcr.co) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://katcr.co" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://katcr.co/new/torrents-search.php?search=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/kickasstorrent b/.config/surfraw/elvi/kickasstorrent new file mode 100755 index 0000000..be04072 --- /dev/null +++ b/.config/surfraw/elvi/kickasstorrent @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: gotbletu (https://twitter.com/gotbletu) +# +# DATE: Thu June 06, 2013 +# +# DESC: Elvi to search kickasstorrents +# elvis: kickasstorrent -- Search kickasstorrent for torrents (www.kat.ph) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search kickasstorrents (www.kat.ph) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://kickass.unblocked.red" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://kickass.unblocked.red/usearch/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/manned b/.config/surfraw/elvi/manned new file mode 100755 index 0000000..6e9eae7 --- /dev/null +++ b/.config/surfraw/elvi/manned @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 17 2012 +# +# DESC: Elvi to search Manned ManPage +# elvis: manned -- Search Manned linux/bsd manpages (www.manned.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Manned ManPage (www.manned.org) for manpages +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.manned.org/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://manned.org/browse/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/megafindr b/.config/surfraw/elvi/megafindr new file mode 100755 index 0000000..1fbfaed --- /dev/null +++ b/.config/surfraw/elvi/megafindr @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Fri January 06, 2017 +# +# DESC: Elvi to search cyberlocker files +# elvis: megafindr -- Search Cyberlocker Files (http://megafindr.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://megafindr.com/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://megafindr.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://megafindr.com/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/megasearch b/.config/surfraw/elvi/megasearch new file mode 100755 index 0000000..b61f351 --- /dev/null +++ b/.config/surfraw/elvi/megasearch @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker files +# elvis: megasearch -- Search Cyberlocker Files (http://megasearch.co/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://megasearch.co/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://megasearch.co/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://megasearch.co/?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/metabear b/.config/surfraw/elvi/metabear new file mode 100755 index 0000000..2c87306 --- /dev/null +++ b/.config/surfraw/elvi/metabear @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search metabear +# elvis: metabear -- Search metabear [aka metabot] for FTP files (http://metabear.ru) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search metabear (http://metabear.ru) for FTP files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://metabear.ru" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://results.metabot.ru/?wd=2&st=${escaped_args}&ln=1" +fi diff --git a/.config/surfraw/elvi/mibbit b/.config/surfraw/elvi/mibbit new file mode 100755 index 0000000..3cc49c7 --- /dev/null +++ b/.config/surfraw/elvi/mibbit @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: February 08, 2014 +# +# DESC: Elvi to search mibbit for IRC chat channels +# elvis: mibbit -- Search mibbit for IRC chat channels (https://search.mibbit.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search mibbit (https://search.mibbit.com) for IRC chat channels +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://search.mibbit.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://search.mibbit.com/search/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/mmnt b/.config/surfraw/elvi/mmnt new file mode 100755 index 0000000..316e8b3 --- /dev/null +++ b/.config/surfraw/elvi/mmnt @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search mmnt +# elvis: mmnt -- Search mmnt [aka mamont] for FTP files (http://mmnt.ru/int) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search mmnt (http://mmnt.ru) for FTP files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://mmnt.ru/int" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.mmnt.ru/int/get?st=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/motherless b/.config/surfraw/elvi/motherless new file mode 100755 index 0000000..7b2a590 --- /dev/null +++ b/.config/surfraw/elvi/motherless @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Nov 06 2012 +# +# DESC: Elvi to search Motherless +# elvis: motherless -- Search Motherless for adult videos (www.motherless.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Motherless (www.motherless.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.motherless.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://motherless.com/search/videos?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/myanimelist b/.config/surfraw/elvi/myanimelist new file mode 100755 index 0000000..a29797e --- /dev/null +++ b/.config/surfraw/elvi/myanimelist @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu June 06, 2013 +# +# DESC: Elvi to search myanimelist +# elvis: myanimelist -- Search myanimelist for anime information (www.myanimelist.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search myanimelist (www.myanimelist.net) for anime information +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.myanimelist.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://myanimelist.net/anime.php?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/mymangalist b/.config/surfraw/elvi/mymangalist new file mode 100755 index 0000000..c3c6bbe --- /dev/null +++ b/.config/surfraw/elvi/mymangalist @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu June 06, 2013 +# +# DESC: Elvi to search mymangalist +# elvis: mymangalist -- Search myanimelist for manga information (www.myanimelist.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search mymangalist (www.myanimelist.net) for manga information +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.myanimelist.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://myanimelist.net/manga.php?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/nhaccuatui b/.config/surfraw/elvi/nhaccuatui new file mode 100755 index 0000000..74a419c --- /dev/null +++ b/.config/surfraw/elvi/nhaccuatui @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Jan 27, 2015 +# +# DESC: Elvi to search asian chinese vietnamese music +# elvis: nhaccuatui -- Search asian chinese vietnamese music (www.nhaccuatui.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search asian chinese vietnamese music (www.nhaccuatui.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.nhaccuatui.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.nhaccuatui.com/tim-kiem?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/nhacso b/.config/surfraw/elvi/nhacso new file mode 100755 index 0000000..35eb1dd --- /dev/null +++ b/.config/surfraw/elvi/nhacso @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Jan 27, 2015 +# +# DESC: Elvi to search asian chinese vietnamese music +# elvis: nhacso -- Search asian chinese vietnamese music (www.nhacso.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search asian chinese vietnamese music (www.nhacso.net) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://nhacso.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://nhacso.net/tim-kiem-tat-ca.html?keyName=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/nibl b/.config/surfraw/elvi/nibl new file mode 100755 index 0000000..7f8096c --- /dev/null +++ b/.config/surfraw/elvi/nibl @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon Feb 15, 2016 +# +# DESC: Elvi to search nibl for irc xdcc files +# elvis: nibl -- Search nibl for irc xdcc files (http://nibl.co.uk/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search nibl (http://nibl.co.uk/) for irc xdcc files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://nibl.co.uk/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://nibl.co.uk/bots.php?search=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/npmjs b/.config/surfraw/elvi/npmjs new file mode 100755 index 0000000..5377d26 --- /dev/null +++ b/.config/surfraw/elvi/npmjs @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Feb 03 2015 +# +# DESC: Elvi to search npmjs linux packages +# elvis: npmjs -- Search NpmJs for nodejs javascript packages (www.npmjs.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search npmjs (www.npmjs.com) for nodejs javascript packages +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.npmjs.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.npmjs.com/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/nyaa b/.config/surfraw/elvi/nyaa new file mode 100755 index 0000000..64731f2 --- /dev/null +++ b/.config/surfraw/elvi/nyaa @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu June 06, 2013 +# +# DESC: Elvi to search nyaa +# elvis: nyaa -- Search nyaa for anime torrents (www.nyaa.eu) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search nyaa (www.nyaa.eu) for anime torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.nyaa.eu" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.nyaa.eu/?page=search&cats=0_0&filter=0&term=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/nzbclub b/.config/surfraw/elvi/nzbclub new file mode 100755 index 0000000..bfb53f0 --- /dev/null +++ b/.config/surfraw/elvi/nzbclub @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Jan 17 2013 +# +# DESC: Elvi to search nzbclub +# elvis: nzbclub -- Search NZBClub for NZB (www.nzbclub.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search NZBClub (www.nzbclub.com) for NZB +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.nzbclub.com/search.aspx?q=${escaped_args}&sp=1" +fi diff --git a/.config/surfraw/elvi/nzbfriends b/.config/surfraw/elvi/nzbfriends new file mode 100755 index 0000000..f65b8d3 --- /dev/null +++ b/.config/surfraw/elvi/nzbfriends @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue May 23, 2017 +# +# DESC: Elvi to search nzbfriends +# elvis: nzbfriends -- Search nzbfriends for NZB (www.nzbfriends.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search nzbfriends (www.nzbfriends.com) for NZB +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://nzbfriends.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://nzbfriends.com/?q=${escaped_args}&init=form&type=&age=0&group=&min=100&max=&sort=relevance&limit=200" +fi diff --git a/.config/surfraw/elvi/nzbindex b/.config/surfraw/elvi/nzbindex new file mode 100755 index 0000000..03f32f6 --- /dev/null +++ b/.config/surfraw/elvi/nzbindex @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Jan 17 2013 +# +# DESC: Elvi to search nzbindex +# elvis: nzbindex -- Search nzbindex for NZB (www.nzbindex.nl) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search nzbindex (www.nzbindex.nl) for NZB +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.nzbindex.nl/search/?q=${escaped_args}&age=&max=250&sort=agedesc&minsize=50&maxsize=&dq=&poster=&nfo=&hidecross=1&complete=1&hidespam=0&hidespam=1&more=1" +fi diff --git a/.config/surfraw/elvi/offerupnow b/.config/surfraw/elvi/offerupnow new file mode 100755 index 0000000..52c6673 --- /dev/null +++ b/.config/surfraw/elvi/offerupnow @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun August 09, 2015 +# +# DESC: Elvi to search locally listed items for sell or trade +# elvis: offerupnow -- Search locally listed items for sell or trade (https://offerupnow.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search locally listed items for sell or trade (https://offerupnow.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://offerupnow.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://offerupnow.com/search/?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/opendir_apps b/.config/surfraw/elvi/opendir_apps new file mode 100755 index 0000000..a4610b8 --- /dev/null +++ b/.config/surfraw/elvi/opendir_apps @@ -0,0 +1,45 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories apps files +# elvis: opendir_apps -- Search google for open directories apps files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories apps files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + # w3_browse_url "https://www.google.com" + w3_browse_url "https://www.google.com/search?q=%2B(.exe|.iso|.tar|.rar|.zip|.apk)+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%2B(.exe|.iso|.tar|.rar|.zip|.apk)%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opendir_ebook b/.config/surfraw/elvi/opendir_ebook new file mode 100755 index 0000000..d7a0d82 --- /dev/null +++ b/.config/surfraw/elvi/opendir_ebook @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories ebook files +# elvis: opendir_ebook -- Search google for open directories ebook files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories ebook files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=%2B(.MOBI|.CBZ|.CBR|.CBC|.CHM|.EPUB|.FB2|.LIT|.LRF|.ODT|.PDF|.PRC|.PDB|.PML|.RB|.RTF|.TCR)+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%2B(.MOBI|.CBZ|.CBR|.CBC|.CHM|.EPUB|.FB2|.LIT|.LRF|.ODT|.PDF|.PRC|.PDB|.PML|.RB|.RTF|.TCR)%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opendir_googledrive b/.config/surfraw/elvi/opendir_googledrive new file mode 100755 index 0000000..1ff8388 --- /dev/null +++ b/.config/surfraw/elvi/opendir_googledrive @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon November 20, 2017 +# +# DESC: Elvi to search google for open directories from google drive files +# elvis: opendir_googledrive -- Search google for open directories from google drive files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories from google drive files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=site%3Adrive.google.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=site%3Adrive.google.com+${escaped_args}" +fi diff --git a/.config/surfraw/elvi/opendir_googledrivefolder b/.config/surfraw/elvi/opendir_googledrivefolder new file mode 100755 index 0000000..991e2a6 --- /dev/null +++ b/.config/surfraw/elvi/opendir_googledrivefolder @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon November 20, 2017 +# +# DESC: Elvi to search google for open directories from google drive files +# elvis: opendir_googledrivefolder -- Search google for open directories from google drive files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories from google drive files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=site%3Adrive.google.com+%2B%22drive%2Ffolders%22" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=site%3Adrive.google.com+%2B%22drive%2Ffolders%22+${escaped_args}" +fi diff --git a/.config/surfraw/elvi/opendir_images b/.config/surfraw/elvi/opendir_images new file mode 100755 index 0000000..b70e750 --- /dev/null +++ b/.config/surfraw/elvi/opendir_images @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories images files +# elvis: opendir_images -- Search google for open directories images files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories images files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=%2B(.jpg|.jpeg|.svg|.gif|.png|.tif|.tiff|.psd)+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%2B(.jpg|.jpeg|.svg|.gif|.png|.tif|.tiff|.psd)%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opendir_music b/.config/surfraw/elvi/opendir_music new file mode 100755 index 0000000..62c4d5d --- /dev/null +++ b/.config/surfraw/elvi/opendir_music @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories music files +# elvis: opendir_music -- Search google for open directories music files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories music files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=%2B(.ogg|.mp3|.wav|.ac3|.flac|.wma|.m4a)+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%2B(.ogg|.mp3|.wav|.ac3|.flac|.wma|.m4a)%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opendir_other b/.config/surfraw/elvi/opendir_other new file mode 100755 index 0000000..b82f920 --- /dev/null +++ b/.config/surfraw/elvi/opendir_other @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories other files +# elvis: opendir_other -- Search google for open directories other files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories other files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opendir_video b/.config/surfraw/elvi/opendir_video new file mode 100755 index 0000000..34d0fbd --- /dev/null +++ b/.config/surfraw/elvi/opendir_video @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed October 04, 2017 +# +# DESC: Elvi to search google for open directories video files +# elvis: opendir_video -- Search google for open directories video files (https://www.google.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search google for open directories video files (https://www.google.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.google.com/search?q=%2B(.mkv|.m4v|.mp4|.avi|.mov|.mpg|.mpeg|.wmv)+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.google.com/search?q=%2B(.mkv|.m4v|.mp4|.avi|.mov|.mpg|.mpeg|.wmv)%20+${escaped_args}%20+intitle:%22index%20of%22%20-inurl:(jsp|pl|php|html|aspx|htm|cf|shtml)%20-inurl:(listen77|mp3raid|mp3toss|mp3drug|index_of|wallywashis)" +fi diff --git a/.config/surfraw/elvi/opensuse b/.config/surfraw/elvi/opensuse new file mode 100755 index 0000000..9cf9862 --- /dev/null +++ b/.config/surfraw/elvi/opensuse @@ -0,0 +1,29 @@ +https://software.opensuse.org/search +#!/bin/sh +# +# AUTHOR: V.G. Graffagnino +# +# DATE: Mon Aug 28 2017 +# +# DESC: Elvi to search opensuse packages +# elvis: opensuse -- Search Opensuse Software Catalog (https://software.opensuse.org/search) +#!/bin/sh +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Opensuse Software Catalog (https://software.opensuse.org/search) for applications +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://software.opensuse.org/search" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://software.opensuse.org/search?utf8=✓&q=${escaped_args}&search_devel=false&search_unsupported=false&baseproject=openSUSE%3ALeap%3A42.3" +fi diff --git a/.config/surfraw/elvi/pastebin b/.config/surfraw/elvi/pastebin new file mode 100755 index 0000000..a05f1c8 --- /dev/null +++ b/.config/surfraw/elvi/pastebin @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Feb 16 2013 +# +# DESC: Elvi to search Pastebin +# elvis: pastebin -- Search Pastebin for text files (www.pastebin.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Pastebin (www.pastebin.com) for text files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.pastebin.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pastebin.com/search?cx=partner-pub-7089230323117142%3A2864958357&cof=FORID%3A10&ie=UTF-8&q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/pkgs b/.config/surfraw/elvi/pkgs new file mode 100755 index 0000000..97d0cd8 --- /dev/null +++ b/.config/surfraw/elvi/pkgs @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 17 2012 +# +# DESC: Elvi to search pkgs linux packages +# elvis: pkgs -- Search PKGS for linux packages (www.pkgs.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search pkgs (www.pkgs.org) for linux packages +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.pkgs.org/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pkgs.org/search/?keyword=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/pornhub b/.config/surfraw/elvi/pornhub new file mode 100755 index 0000000..3cdf80d --- /dev/null +++ b/.config/surfraw/elvi/pornhub @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon October 02, 2017 +# +# DESC: Elvi to search PornHub +# elvis: pornhub -- Search PornHub for adult videos (www.pornhub.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search PornHub (www.pornhub.com) for adult videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.pornhub.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.pornhub.com/video/search?search=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/pornmd b/.config/surfraw/elvi/pornmd new file mode 100755 index 0000000..6f6fb78 --- /dev/null +++ b/.config/surfraw/elvi/pornmd @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 17 2012 +# +# DESC: Elvi to search PornMD +# elvis: pornmd -- Search PornMD for adult videos (www.pornmd.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search PornMD (www.pornmd.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.pornmd.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.pornmd.com/straight/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/preware b/.config/surfraw/elvi/preware new file mode 100755 index 0000000..741f3e9 --- /dev/null +++ b/.config/surfraw/elvi/preware @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: V.G. Graffagnino +# +# DATE: Mon Aug 28 2017 +# +# DESC: Elvi to search Preware Catalog +# elvis: preware -- Search Preware Catalog (preware.pivotce.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Preware Catalog (preware.pivotce.com) for webos applications +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://preware.pivotce.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://preware.pivotce.com/?s=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/prontvdl b/.config/surfraw/elvi/prontvdl new file mode 100755 index 0000000..6c357c7 --- /dev/null +++ b/.config/surfraw/elvi/prontvdl @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker adult files +# elvis: prontvdl -- Search Cyberlocker Adult Files (http://pron.tv/download) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Adult Files (http://pron.tv/download) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://pron.tv" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pron.tv/download/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/prontvst b/.config/surfraw/elvi/prontvst new file mode 100755 index 0000000..cf3b0ab --- /dev/null +++ b/.config/surfraw/elvi/prontvst @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker adult streaming files +# elvis: prontvst -- Search Cyberlocker Adult Streaming Files (http://pron.tv/stream) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Adult Streaming Files (http://pron.tv/stream) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://pron.tv" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pron.tv/stream/${escaped_args}" +fi diff --git a/.config/surfraw/elvi/pururin b/.config/surfraw/elvi/pururin new file mode 100755 index 0000000..cd6397f --- /dev/null +++ b/.config/surfraw/elvi/pururin @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 22 2014 +# +# DESC: Elvi to search pururin +# elvis: pururin -- Search pururin for hentai mangas (www.pururin.us) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search pururin (www.pururin.us) for hentai mangas +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.pururin.us" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://pururin.us/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/python b/.config/surfraw/elvi/python new file mode 100755 index 0000000..5a645da --- /dev/null +++ b/.config/surfraw/elvi/python @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat October 26, 2013 +# +# DESC: Elvi to search Python Package Index +# elvis: python -- Search Python Package Index (https://pypi.python.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Python Package Index (https://pypi.python.org) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://pypi.python.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://pypi.python.org/pypi?%3Aaction=search&term=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/rapid4me b/.config/surfraw/elvi/rapid4me new file mode 100755 index 0000000..5921143 --- /dev/null +++ b/.config/surfraw/elvi/rapid4me @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker files +# elvis: rapid4me -- Search Cyberlocker Files (http://rapid4me.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://rapid4me.com/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://rapid4me.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://rapid4me.com/?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/rarbg b/.config/surfraw/elvi/rarbg new file mode 100755 index 0000000..49c8e35 --- /dev/null +++ b/.config/surfraw/elvi/rarbg @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed Mar 02, 2016 +# +# DESC: Elvi to search rarbg +# elvis: rarbg -- Search rarbg for torrents (rarbg.to) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search rarbg (rarbg.to) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://rarbg.to" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://rarbg.to/torrents.php?search=${escaped_args}&order=seeders&by=DESC" +fi diff --git a/.config/surfraw/elvi/reddit b/.config/surfraw/elvi/reddit new file mode 100755 index 0000000..6e28a7e --- /dev/null +++ b/.config/surfraw/elvi/reddit @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: April 07, 2013 +# +# DESC: Elvi to search Reddit News +# elvis: reddit -- Search Reddit for user submitted news (www.reddit.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Reddit (www.reddit.com) for user submitted news +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.reddit.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.reddit.com/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/redtube b/.config/surfraw/elvi/redtube new file mode 100755 index 0000000..128d654 --- /dev/null +++ b/.config/surfraw/elvi/redtube @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Nov 06 2012 +# +# DESC: Elvi to search RedTube +# elvis: redtube -- Search RedTube for adult videos (www.redtube.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search RedTube (www.redtube.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.redtube.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.redtube.com/?search=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/rubygems b/.config/surfraw/elvi/rubygems new file mode 100755 index 0000000..fa41187 --- /dev/null +++ b/.config/surfraw/elvi/rubygems @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue January 17, 2017 +# +# DESC: Elvi to search rubygems Package Index +# elvis: rubygems -- Search rubygems Package Index (https://rubygems.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search rubygems Package Index (https://rubygems.org) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://rubygems.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://rubygems.org/search?utf8=✓&query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/rutracker b/.config/surfraw/elvi/rutracker new file mode 100755 index 0000000..1097afc --- /dev/null +++ b/.config/surfraw/elvi/rutracker @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue January 10, 2017 +# +# DESC: Elvi to search rutracker +# elvis: rutracker -- Search rutracker for russian torrents (https://rutracker.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search rutracker (https://rutracker.org) for russian torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://rutracker.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://rutracker.org/forum/search_cse.php?cx=014434608714260776013%3Aggcq1kovlga&cof=FORID%3A9&ie=utf-8&q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/searchcode b/.config/surfraw/elvi/searchcode new file mode 100755 index 0000000..e952b24 --- /dev/null +++ b/.config/surfraw/elvi/searchcode @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu January 26, 2017 +# +# DESC: Elvi to search code +# elvis: searchcode -- Search code (https://searchcode.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search code (https://searchcode.com) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://searchcode.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://searchcode.com/?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/sharedir b/.config/surfraw/elvi/sharedir new file mode 100755 index 0000000..a4f7fc1 --- /dev/null +++ b/.config/surfraw/elvi/sharedir @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 18, 2016 +# +# DESC: Elvi to search cyberlocker files +# elvis: sharedir -- Search Cyberlocker Files (http://sharedir.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Cyberlocker Files (http://sharedir.com/) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.sharedir.ee/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://sharedir.com/index.php?s=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/skytorrents b/.config/surfraw/elvi/skytorrents new file mode 100755 index 0000000..4a8d08c --- /dev/null +++ b/.config/surfraw/elvi/skytorrents @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue May 23, 2017 +# +# DESC: Elvi to search skytorrents +# elvis: skytorrents -- Search skytorrents for torrents (https://skytorrents.in) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search skytorrents (https://skytorrents.in) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://skytorrents.in" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.skytorrents.in/search/all/ed/1/?l=en-us&q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/slickdeals b/.config/surfraw/elvi/slickdeals new file mode 100755 index 0000000..97fd16b --- /dev/null +++ b/.config/surfraw/elvi/slickdeals @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Jan 17 2013 +# +# DESC: Elvi to search slickdeals +# elvis: slickdeals -- Search SlickDeals for low price deals (www.slickdeals.net) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search SlickDeals (www.slickdeals.net) for low price deals +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://slickdeals.net" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://slickdeals.net/newsearch.php?forumchoice%5B%5D=9&q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/stackexchange b/.config/surfraw/elvi/stackexchange new file mode 100755 index 0000000..0eaeda3 --- /dev/null +++ b/.config/surfraw/elvi/stackexchange @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sat Nov 17 2012 +# +# DESC: Elvi to search stackexchange computer questions +# elvis: stackexchange -- Search StackExchange for computer questions (www.stackexchange.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search stackexchange (www.stackexchange.org) for computer questions +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.stackexchange.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://stackexchange.com/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/sukebei b/.config/surfraw/elvi/sukebei new file mode 100755 index 0000000..c60a34b --- /dev/null +++ b/.config/surfraw/elvi/sukebei @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: gotbletu (https://twitter.com/gotbletu) +# +# DATE: Thu June 06, 2013 +# +# DESC: Elvi to search sukebei +# elvis: sukebei -- Search nyaa for hentai and dojinshi torrents (http://sukebei.nyaa.eu) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search sukebei (http://sukebei.nyaa.eu) for hentai and dojinshi torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://sukebei.nyaa.eu" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://sukebei.nyaa.eu/?page=search&cats=0_0&filter=0&term=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/sunxdcc b/.config/surfraw/elvi/sunxdcc new file mode 100755 index 0000000..5b9f142 --- /dev/null +++ b/.config/surfraw/elvi/sunxdcc @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Sun Feb 14, 2016 +# +# DESC: Elvi to search sunxdcc for irc xdcc files +# elvis: sunxdcc -- Search sunxdcc for irc xdcc files (http://sunxdcc.com/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search sunxdcc (http://sunxdcc.com/) for irc xdcc files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://sunxdcc.com/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://sunxdcc.com/?sterm=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/tldr b/.config/surfraw/elvi/tldr new file mode 100755 index 0000000..078f866 --- /dev/null +++ b/.config/surfraw/elvi/tldr @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Fri Feb 12, 2016 +# +# DESC: Elvi to search tldr for linux simplified man pages +# elvis: tldr -- Search tldr for linux simplified man pages (http://tldr-pages.github.io/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search tldr (http://tldr-pages.github.io/) for linux simplified man pages +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://tldr-pages.github.io/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.ostera.io/tldr.jsx/#/${escaped_args}?_k=65vjze" +fi diff --git a/.config/surfraw/elvi/top100pirate b/.config/surfraw/elvi/top100pirate new file mode 100755 index 0000000..f6b368d --- /dev/null +++ b/.config/surfraw/elvi/top100pirate @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: vgg +# +# DATE: Fri Nov 10 2017 +# +# DESC: Elvi to search the piratebay.org top 100 +# elvis: top100pirate -- Search top 100 torrents on piratebay (https://thepiratebay.org/top) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Piratebay Top 100 (https://thepiratebay.org/top) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://thepiratebay.org/top" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://thepiratebay.org/top/search?f=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/torlock b/.config/surfraw/elvi/torlock new file mode 100755 index 0000000..ec35e49 --- /dev/null +++ b/.config/surfraw/elvi/torlock @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search torlock +# elvis: torlock -- Search torlock for torrents (https://torlock.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search torlock (https://torlock.com) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://torlock.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.torlock.com/all/torrents/${escaped_args}.html" +fi diff --git a/.config/surfraw/elvi/torrentfunk b/.config/surfraw/elvi/torrentfunk new file mode 100755 index 0000000..bb8838f --- /dev/null +++ b/.config/surfraw/elvi/torrentfunk @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue June 27, 2017 +# +# DESC: Elvi to search torrentfunk +# elvis: torrentfunk -- Search torrentfunk for torrents (https://www.torrentfunk.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search torrentfunk (https://www.torrentfunk.com) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.torrentfunk.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.torrentfunk.com/all/torrents/${escaped_args}.html" +fi diff --git a/.config/surfraw/elvi/torrentproject b/.config/surfraw/elvi/torrentproject new file mode 100755 index 0000000..006a666 --- /dev/null +++ b/.config/surfraw/elvi/torrentproject @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Fri August 05, 2016 +# +# DESC: Elvi to search torrentproject +# elvis: torrentproject -- Search torrentproject for torrents (https://torrentproject.se) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search torrentproject (https://torrentproject.se) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://torrentproject.se" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://torrentproject.se/?safe=off&t=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/torrentz b/.config/surfraw/elvi/torrentz new file mode 100755 index 0000000..047a06b --- /dev/null +++ b/.config/surfraw/elvi/torrentz @@ -0,0 +1,27 @@ +#!/bin/sh +# +# AUTHOR: gotbletu (https://twitter.com/gotbletu) +# +# DATE: Sat Nov 17 2012 +# +# DESC: Elvi to search torrentz +# elvis: torrentz -- Search Torrentz for torrents (www.torrentz.eu) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search torrentz (www.torrentz.eu) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://torrentz.unblocked.red" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://torrentz.unblocked.red/search?f=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/torrentz2 b/.config/surfraw/elvi/torrentz2 new file mode 100755 index 0000000..dcfdda1 --- /dev/null +++ b/.config/surfraw/elvi/torrentz2 @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue January 10, 2017 +# +# DESC: Elvi to search torrentz2 +# elvis: torrentz2 -- Search torrentz2 for torrents (https://torrentz2.eu) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search torrentz2 (https://torrentz2.eu) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://torrentz2.eu" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://torrentz2.eu/search?f=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/tsumino b/.config/surfraw/elvi/tsumino new file mode 100755 index 0000000..fd5ec7c --- /dev/null +++ b/.config/surfraw/elvi/tsumino @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Feb 25 2016 +# +# DESC: Elvi to search tsumino +# elvis: tsumino -- Search tsumino for hentai mangas (www.tsumino.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search tsumino (www.tsumino.com) for hentai mangas +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.tsumino.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.tsumino.com/Browse/Search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/tunefind b/.config/surfraw/elvi/tunefind new file mode 100755 index 0000000..a4e39eb --- /dev/null +++ b/.config/surfraw/elvi/tunefind @@ -0,0 +1,28 @@ +#!/bin/sh +# +# AUTHOR: V.G. Graffagnino +# +# DATE: Sat Apr 07 2018 +# +# DESC: Elvi to search tunefind +# elvis: tunefind -- Search tunefind (www.tunefind.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search Tunefind (www.tunefind.com) to find music from TV shows and Movies. +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.tunefind.com/" + +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://www.tunefind.com/search/site?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/twitter b/.config/surfraw/elvi/twitter new file mode 100755 index 0000000..3fc2ce7 --- /dev/null +++ b/.config/surfraw/elvi/twitter @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Mon May 27, 2013 +# +# DESC: Elvi to search twitter +# elvis: twitter -- Search twitter for tweets (www.twitter.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search twitter (www.twitter.com) for tweets +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://www.twitter.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://twitter.com/search?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/winehq b/.config/surfraw/elvi/winehq new file mode 100755 index 0000000..c71d183 --- /dev/null +++ b/.config/surfraw/elvi/winehq @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Thu Jan 17 2013 +# +# DESC: Elvi to search winehq +# elvis: winehq -- Search WineHQ for wine software ratings (www.winehq.org) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search winehq (www.winehq.org) for wine software ratings +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.winehq.org" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.winehq.org/search?cx=partner-pub-0971840239976722:w9sqbcsxtyf&cof=FORID:10&ie=UTF-8&q=${escaped_args}&siteurl=appdb.winehq.org/" +fi diff --git a/.config/surfraw/elvi/xdcceu b/.config/surfraw/elvi/xdcceu new file mode 100755 index 0000000..c0e1cfb --- /dev/null +++ b/.config/surfraw/elvi/xdcceu @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Wed June 14, 2017 +# +# DESC: Elvi to search xdcceu for irc xdcc files +# elvis: xdcceu -- Search xdcceu for irc xdcc files (http://xdcc.eu/) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search xdcceu (http://xdcc.eu/) for irc xdcc files +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://xdcc.eu/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.xdcc.eu/search.php?searchkey=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/xvideos b/.config/surfraw/elvi/xvideos new file mode 100755 index 0000000..aa2254c --- /dev/null +++ b/.config/surfraw/elvi/xvideos @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Nov 06 2012 +# +# DESC: Elvi to search XVideos +# elvis: xvideos -- Search XVideos for adult videos (www.xvideos.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search XVideos (www.xvideos.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.xvideos.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.xvideos.com/?k=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/youporn b/.config/surfraw/elvi/youporn new file mode 100755 index 0000000..3632f3a --- /dev/null +++ b/.config/surfraw/elvi/youporn @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Nov 06 2012 +# +# DESC: Elvi to search YouPorn +# elvis: youporn -- Search YouPorn for adult videos (www.youporn.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search YouPorn (www.youporn.com) for videos +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://www.youporn.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://www.youporn.com/search/?query=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/zing b/.config/surfraw/elvi/zing new file mode 100755 index 0000000..dcf55e5 --- /dev/null +++ b/.config/surfraw/elvi/zing @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Tue Jan 27, 2015 +# +# DESC: Elvi to search asian chinese vietnamese music +# elvis: zing -- Search asian chinese vietnamese music (http://mp3.zing.vn) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search asian chinese vietnamese music (http://mp3.zing.vn) +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "http://mp3.zing.vn/" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "http://mp3.zing.vn/tim-kiem/bai-hat.html?q=${escaped_args}" +fi diff --git a/.config/surfraw/elvi/zooqle b/.config/surfraw/elvi/zooqle new file mode 100755 index 0000000..4354e2d --- /dev/null +++ b/.config/surfraw/elvi/zooqle @@ -0,0 +1,44 @@ +#!/bin/sh +# ______ _ _ ______ _______ ______ _______ _ _ _ +# / _____)(_) (_)(_____ \ (_______)(_____ \ (_______)(_)(_)(_) +# ( (____ _ _ _____) ) _____ _____) ) _______ _ _ _ +# \____ \ | | | || __ / | ___) | __ / | ___ || || || | +# _____) )| |___| || | \ \ | | | | \ \ | | | || || || | +# (______/ \_____/ |_| |_||_| |_| |_||_| |_| \_____/ +# Surfraw - Shell Users' Revolutionary Front Rage Against the Web +# https://surfraw.alioth.debian.org +# _ _ _ _ +# __ _ ___ | |_| |__ | | ___| |_ _ _ +# / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +#| (_| | (_) | |_| |_) | | __/ |_| |_| | +# \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +# |___/ +# https://www.youtube.com/user/gotbletu +# https://twitter.com/gotbletu +# https://plus.google.com/+gotbletu +# https://github.com/gotbletu +# gotbleu@gmail.com +# +# DATE: Fri August 05, 2016 +# +# DESC: Elvi to search zooqle +# elvis: zooqle -- Search zooqle for torrents (https://zooqle.com) +. surfraw || exit 1 + +w3_usage_hook () { + cat <<EOF +Usage: $w3_argv0 [options] [search words]... +Description: + Search zooqle (https://zooqle.com) for torrents +EOF + w3_global_usage +} + +w3_config +w3_parse_args "$@" +if test -z "$w3_args"; then + w3_browse_url "https://zooqle.com" +else + escaped_args=`w3_url_of_arg $w3_args` + w3_browse_url "https://zooqle.com/search?q=${escaped_args}" +fi diff --git a/.config/sxiv/exec/key-handler b/.config/sxiv/exec/key-handler new file mode 100755 index 0000000..0dd23e8 --- /dev/null +++ b/.config/sxiv/exec/key-handler @@ -0,0 +1,41 @@ +#!/bin/sh +while read file +do + fullpath="$(pwd)/$file" + case "$1" in + "w") + mv ~/.config/wall.png{,.orig} && + cp "$file" ~/.config/wall.png && + wal -c; wal -s -i ~/.config/wall.png -o ~/.config/wal/postrun; xsetroot -name "fsignal:xrd"; + #feh --bg-scale "$HOME/.config/wall.png" && + xwallpaper --zoom "$HOME/.config/wall.png" && + notify-send -i "$HOME/.config/wall.png" "Wallpaper changed." ;; + "c") + [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ~/.bmdirs | awk '{print $2}' | \ + dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" + [ -z "$destdir" ] && exit + cp "$file" "$destdir" && notify-send -i "$fullpath" "$file copied to $destdir." & ;; + "m") + [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ~/.bmdirs | awk '{print $2}' | \ + dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" + [ -z "$destdir" ] && exit + mv "$file" "$destdir" && notify-send -i "$fullpath" "$file moved to $destdir." & ;; + "r") + convert -rotate 90 "$file" "$file" ;; + "R") + convert -rotate -90 "$file" "$file" ;; + "f") + convert -flop "$file" "$file" ;; + "y") + echo -n "$file" | xclip -selection clipboard + notify-send "$file copied to clipboard" & ;; + "Y") + echo -n "$fullpath" | xclip -selection clipboard + notify-send "$fullpath copied to clipboard" & ;; + "d") + [ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm -f "$file" && + notify-send "$file deleted " & ;; + + esac +done + diff --git a/.config/torrench/config.ini b/.config/torrench/config.ini new file mode 100755 index 0000000..8f7accd --- /dev/null +++ b/.config/torrench/config.ini @@ -0,0 +1,43 @@ +[Torrench-Config] + +## Torrench - Command-line torrent search program +## project by @kryptxy +## github: https://github.com/kryptxy/torrench +## Configuration file for TPB/KAT/SkyTorrents indexing + +## *nix users (Linux, MacOS..): Default config directory is $XDG_CONFIG_HOME/torrench/ +## If not set, fallback to $HOME/.config/torrench/ +## (Create missing directories) +## Windows: Default directory is: +## C:\Users\<user>\.config\torrench\ + +## WARNING: Some of the content hosted on these sites is illegal +## and downloading those contents can get you into serious troubles. +## Use it at your own risk. +## Using this is completely optional. +## You have been warned. + +TPB_URL = https://thepiratebay.org https://proxybay.one +SKY_URL = https://www.skytorrents.in + +## KAT Proxy is quite shaky, and might not work at all times +## I have been unable to find any reliable KAT proxy. +## If you know of some working proxy, you can edit KAT_URL with that working proxy +## Simply append the proxy (either in the beginning or at the end) +## Update me if it works? +## Alternatively, use TPB/SkyTorrent. They are pretty reliable and work most of the time. + +KAT_URL = https://kickass.cd/ https://kickass.unblocked.bid/ https://kickass.unlockproj.faith/ +NYAA_URL = https://nyaa.si/ +XBIT_URL = https://xbit.pw/ +RARBG_URL = https://torrentapi.org/pubapi_v2.php? +1337X_URL = https://1337x.to https://1337x.unblockall.org https://proxyportal.net/1337x-proxy +IDOPE_URL = https://idope.se +LIBGEN_URL = http://libgen.io/ +LIMETORRENTS_URL = https://limetorrents.cc https://swaptorrents.com + +## To enable TPB indexing, + set enable=1 +enable=-1 + +CLIENT = transmission-remote diff --git a/.config/transmission-daemon/blocklists/blocklist.bin b/.config/transmission-daemon/blocklists/blocklist.bin Binary files differnew file mode 100755 index 0000000..479e644 --- /dev/null +++ b/.config/transmission-daemon/blocklists/blocklist.bin diff --git a/.config/transmission-daemon/dht.dat b/.config/transmission-daemon/dht.dat Binary files differnew file mode 100644 index 0000000..c847f43 --- /dev/null +++ b/.config/transmission-daemon/dht.dat diff --git a/.config/transmission-daemon/settings.json b/.config/transmission-daemon/settings.json new file mode 100644 index 0000000..7479f77 --- /dev/null +++ b/.config/transmission-daemon/settings.json @@ -0,0 +1,68 @@ +{ + "alt-speed-down": 50, + "alt-speed-enabled": false, + "alt-speed-time-begin": 540, + "alt-speed-time-day": 127, + "alt-speed-time-enabled": false, + "alt-speed-time-end": 1020, + "alt-speed-up": 50, + "bind-address-ipv4": "0.0.0.0", + "bind-address-ipv6": "::", + "blocklist-enabled": true, + "blocklist-url": "http://list.iblocklist.com/?list=ydxerpxkpcfqjaybcssw&fileformat=p2p&archiveformat=gz", + "cache-size-mb": 4, + "dht-enabled": true, + "download-dir": "/MacOSX-Data3/Media", + "download-queue-enabled": true, + "download-queue-size": 20, + "encryption": 1, + "idle-seeding-limit": 30, + "idle-seeding-limit-enabled": false, + "incomplete-dir": "~/", + "incomplete-dir-enabled": false, + "lpd-enabled": false, + "message-level": 2, + "peer-congestion-algorithm": "", + "peer-id-ttl-hours": 6, + "peer-limit-global": 200, + "peer-limit-per-torrent": 50, + "peer-port": 63138, + "peer-port-random-high": 65535, + "peer-port-random-low": 49152, + "peer-port-random-on-start": true, + "peer-socket-tos": "default", + "pex-enabled": true, + "port-forwarding-enabled": true, + "preallocation": 1, + "prefetch-enabled": true, + "queue-stalled-enabled": true, + "queue-stalled-minutes": 30, + "ratio-limit": 2, + "ratio-limit-enabled": false, + "rename-partial-files": true, + "rpc-authentication-required": false, + "rpc-bind-address": "0.0.0.0", + "rpc-enabled": true, + "rpc-host-whitelist": "", + "rpc-host-whitelist-enabled": true, + "rpc-password": "{9848e1cd756a85e0874a7416511ca779b3f7e6184CK3IJDT", + "rpc-port": 9091, + "rpc-url": "/transmission/", + "rpc-username": "", + "rpc-whitelist": "127.0.0.1", + "rpc-whitelist-enabled": true, + "scrape-paused-torrents-enabled": true, + "script-torrent-done-enabled": true, + "script-torrent-done-filename": "~/bin/scripts/tordone", + "seed-queue-enabled": false, + "seed-queue-size": 10, + "speed-limit-down": 100, + "speed-limit-down-enabled": false, + "speed-limit-up": 100, + "speed-limit-up-enabled": false, + "start-added-torrents": true, + "trash-original-torrent-files": false, + "umask": 18, + "upload-slots-per-torrent": 14, + "utp-enabled": true +} diff --git a/.config/transmission-daemon/stats.json b/.config/transmission-daemon/stats.json new file mode 100644 index 0000000..694a2d2 --- /dev/null +++ b/.config/transmission-daemon/stats.json @@ -0,0 +1,7 @@ +{ + "downloaded-bytes": 3629093326084, + "files-added": 262915, + "seconds-active": 23043161, + "session-count": 2445, + "uploaded-bytes": 2831353531899 +} diff --git a/.config/transmission-remote-cli/settings.cfg b/.config/transmission-remote-cli/settings.cfg new file mode 100644 index 0000000..332123e --- /dev/null +++ b/.config/transmission-remote-cli/settings.cfg @@ -0,0 +1,42 @@ +[Connection] +password = +username = +port = 9091 +host = localhost +path = /transmission/rpc +ssl = False + +[Sorting] +order = percentDone,status + +[Filtering] +filter = +invert = False + +[Misc] +compact_list = False +blank_lines = True +torrentname_is_progressbar = True +file_viewer = xdg-open %%s +file_open_in_terminal = True + +[Colors] +title_seed = bg:blue,fg:black +title_download = bg:green,fg:black +title_idle = bg:cyan,fg:black +title_verify = bg:magenta,fg:black +title_paused = bg:black,fg:yellow +title_error = bg:red,fg:white +download_rate = bg:black,fg:green +upload_rate = bg:black,fg:red +eta+ratio = bg:black,fg:white +filter_status = bg:red,fg:black +dialog = bg:black,fg:white +dialog_important = bg:red,fg:black +button = bg:white,fg:black +button_focused = bg:black,fg:white +file_prio_high = bg:red,fg:black +file_prio_normal = bg:green,fg:black +file_prio_low = bg:yellow,fg:black +file_prio_off = bg:blue,fg:black + diff --git a/.config/transmission/dht.dat b/.config/transmission/dht.dat new file mode 100755 index 0000000..9bd4172 --- /dev/null +++ b/.config/transmission/dht.dat @@ -0,0 +1,4 @@ +d2:id20:>ajԊre_e5:nodes534:nR.7RL.-
k:U9/\|b`[w`nʦ wcGUAm'We +.d|ۡCN|\xY3ɱ_ۖLt_d'N%&&rđxN<lK0]%Oݧ|WƆI"SHҬUZñ,!SLPP{'\l&đR,QBKgj"S"CU=AYVV] R}",Hډ¬Dr6>Ҷ>P?!:<Wl=@XFrOtL.=. +i-1cQid˱&X{lJyA\-ذ]K]!]Wجz@V5 +đIX҅b\V6E*_T[QB
[1iI9 NmZbz_"brFv )sq-ZvBU!6D'VʿU
sI"S4GGnBdeZrl]e
\ No newline at end of file diff --git a/.config/transmission/settings.json b/.config/transmission/settings.json new file mode 100755 index 0000000..ad70970 --- /dev/null +++ b/.config/transmission/settings.json @@ -0,0 +1,96 @@ +{ + "alt-speed-down": 50, + "alt-speed-enabled": false, + "alt-speed-time-begin": 540, + "alt-speed-time-day": 127, + "alt-speed-time-enabled": false, + "alt-speed-time-end": 1020, + "alt-speed-up": 50, + "bind-address-ipv4": "0.0.0.0", + "bind-address-ipv6": "::", + "blocklist-enabled": false, + "blocklist-updates-enabled": true, + "blocklist-url": "http://www.example.com/blocklist", + "cache-size-mb": 4, + "compact-view": false, + "dht-enabled": true, + "download-dir": "/MacOSX-Data2/media", + "download-queue-enabled": true, + "download-queue-size": 50, + "encryption": 2, + "idle-seeding-limit": 30, + "idle-seeding-limit-enabled": false, + "incomplete-dir": "", + "incomplete-dir-enabled": false, + "inhibit-desktop-hibernation": false, + "lpd-enabled": true, + "main-window-height": 742, + "main-window-is-maximized": 0, + "main-window-width": 1242, + "main-window-x": 19, + "main-window-y": 19, + "message-level": 2, + "open-dialog-dir": "/MacOSX-Data2/media", + "peer-congestion-algorithm": "", + "peer-id-ttl-hours": 6, + "peer-limit-global": 200, + "peer-limit-per-torrent": 50, + "peer-port": 63413, + "peer-port-random-high": 65535, + "peer-port-random-low": 49152, + "peer-port-random-on-start": false, + "peer-socket-tos": "default", + "pex-enabled": true, + "port-forwarding-enabled": true, + "preallocation": 1, + "prefetch-enabled": 1, + "queue-stalled-enabled": true, + "queue-stalled-minutes": 30, + "ratio-limit": 2, + "ratio-limit-enabled": false, + "recent-download-dir-1": "/MacOSX-Data2/media", + "recent-download-dir-2": "/MacOSX-Data2/media", + "rename-partial-files": false, + "rpc-authentication-required": false, + "rpc-bind-address": "0.0.0.0", + "rpc-enabled": false, + "rpc-password": "{39be245fb3bca56a87373146a0a52d7de53fbaf9AYqdwHVo", + "rpc-port": 9091, + "rpc-url": "/transmission/", + "rpc-username": "", + "rpc-whitelist": "127.0.0.1", + "rpc-whitelist-enabled": true, + "scrape-paused-torrents-enabled": true, + "script-torrent-done-enabled": false, + "script-torrent-done-filename": "", + "seed-queue-enabled": false, + "seed-queue-size": 10, + "show-backup-trackers": true, + "show-extra-peer-details": true, + "show-filterbar": true, + "show-notification-area-icon": true, + "show-options-window": true, + "show-statusbar": true, + "show-toolbar": true, + "show-tracker-scrapes": true, + "sort-mode": "sort-by-progress", + "sort-reversed": false, + "speed-limit-down": 100, + "speed-limit-down-enabled": false, + "speed-limit-up": 100, + "speed-limit-up-enabled": false, + "start-added-torrents": true, + "statusbar-stats": "total-ratio", + "torrent-added-notification-enabled": true, + "torrent-complete-notification-enabled": true, + "torrent-complete-sound-command": "canberra-gtk-play -i complete-download -d 'transmission torrent downloaded'", + "torrent-complete-sound-enabled": true, + "trash-can-enabled": true, + "trash-original-torrent-files": false, + "umask": 18, + "upload-slots-per-torrent": 14, + "user-has-given-informed-consent": true, + "utp-enabled": true, + "watch-dir": "", + "watch-dir-enabled": false +} diff --git a/.config/transmission/stats.json b/.config/transmission/stats.json new file mode 100755 index 0000000..aa77a9c --- /dev/null +++ b/.config/transmission/stats.json @@ -0,0 +1,7 @@ +{ + "downloaded-bytes": 118815992718, + "files-added": 3071, + "seconds-active": 391235, + "session-count": 77, + "uploaded-bytes": 15922360328 +} diff --git a/.config/tremc/settings.cfg b/.config/tremc/settings.cfg new file mode 100644 index 0000000..171bedd --- /dev/null +++ b/.config/tremc/settings.cfg @@ -0,0 +1,41 @@ +[Connection] +password = +username = +port = 9091 +host = localhost +path = /transmission/rpc +ssl = False + +[Sorting] +order = name + +[Filtering] +filter = +invert = False + +[Misc] +compact_list = False +torrentname_is_progressbar = True +file_viewer = xdg-open %%s +file_open_in_terminal = True + +[Colors] +title_seed = bg:blue,fg:black +title_download = bg:green,fg:black +title_idle = bg:cyan,fg:black +title_verify = bg:magenta,fg:black +title_paused = bg:black,fg:white +title_error = bg:red,fg:white +download_rate = bg:black,fg:blue +upload_rate = bg:black,fg:red +eta+ratio = bg:black,fg:white +filter_status = bg:red,fg:black +dialog = bg:black,fg:white +dialog_important = bg:red,fg:black +button = bg:white,fg:black +button_focused = bg:black,fg:white +file_prio_high = bg:red,fg:black +file_prio_normal = bg:white,fg:black +file_prio_low = bg:yellow,fg:black +file_prio_off = bg:blue,fg:black + diff --git a/.config/tuir/tuir.cfg b/.config/tuir/tuir.cfg new file mode 100644 index 0000000..ebf240d --- /dev/null +++ b/.config/tuir/tuir.cfg @@ -0,0 +1,237 @@ +; Terminal UI for Reddit Configuration File +; https://gitlab.com/ajak/tuir +; +; This file should be placed in $XDG_CONFIG/tuir/tuir.cfg +; If $XDG_CONFIG is not set, use ~/.config/tuir/tuir.cfg + +[tuir] +################## +# General Settings +################## + +; Turn on ascii-only mode to disable all unicode characters. +; This may be necessary for compatibility with some terminal browsers. +ascii = False + +; Turn on monochrome mode to disable color. +monochrome = False + +; Data being copied is piped into this command +;clipboard_cmd = xclip +;clipboard_cmd = xsel -b -i +;clipboard_cmd = wl-copy +;clipboard_cmd = pbcopy w + +; Flash when an invalid action is executed. +flash = True + +; Enable debugging by logging all HTTP requests and errors to the given file. +;log = /tmp/tuir.log + +; Default subreddit that will be opened when the program launches. +subreddit = front +;subreddit = python +;subreddit = python+linux+programming +;subreddit = all + +; Allow tuir to store reddit authentication credentials between sessions. +persistent = True + +; Automatically log in on startup, if credentials are available. +autologin = True + +; Clear any stored credentials when the program starts. +clear_auth = False + +; Maximum number of opened links that will be saved in the history file. +history_size = 200 + +; Open external links using programs defined in the mailcap config. +enable_media = False + +; Maximum number of columns for a comment +max_comment_cols = 120 + +; Maximum number of columns for pager +;max_pager_cols = 70 + +; Hide username if logged in, display "Logged in" instead +hide_username = False + +; Set the look and feel. Default allows posts to be spread across 4 lines, +; while compact reduces it to 2 lines. Compact reduces the vertical space +; the cost of horizontal space - the title won't be wrapped to the next +; line. +; look_and_feel = default +; look_and_feel = compact + +; The subreddit_format option defines the format of submissions in a +; SubredditPage. Some caveats: +; +; If specified, this option will override whatever was set in +; look_and_feel. +; +; Lines after the first line must be intented for Python's config parser to +; understand the option having multiple lines +; +; Attributes are assigned only to the text written from a format specifier. +; Certain characters ("<>/{}[]()|_-~") are assigned the separator attribute, +; but no extraneous text added by the user will have an attribute. +; +; This feature is experimental and bound to have bugs. If you find one, please +; file a bug report at https://gitlab.com/ajak/tuir/issues +; +; List of valid format specifiers and what they evaluate to: +; %i index +; %t title +; %s score +; %v vote status +; %c comment count +; %r relative creation time +; %R absolute creation time +; %e relative edit time +; %E absolute edit time +; %a author +; %S subreddit +; %u short url - 'self.reddit' or 'gfycat.com' for example +; %U full url +; %A saved +; %h hidden +; %T stickied +; %g gold +; %n nsfw +; %f post flair +; %F all flair - saved, hidden, stickied, gold, nsfw, post flair, +; separated by spaces +; +; For example, the compact look_and_feel is a format of: +; subreddit_format = %t +; <%i|%s%v|%cC> %r%e %a %S %F +; + +; Color theme, use "tuir --list-themes" to view a list of valid options. +; This can be an absolute filepath, or the name of a theme file that has +; been installed into either the custom of default theme paths. +;theme = molokai + +; Open a new browser window instead of a new tab in existing instance +force_new_browser_window = False + +################ +# OAuth Settings +################ +; This sections defines the paramaters that will be used during the OAuth +; authentication process. tuir is registered as an "installed app", +; see https://github.com/reddit/reddit/wiki/OAuth2 for more information. + +; These settings are defined at https://www.reddit.com/prefs/apps and should +; not be altered unless you are defining your own developer application. +oauth_client_id = zjyhNI7tK8ivzQ +oauth_client_secret = praw_gapfill +oauth_redirect_uri = http://127.0.0.1:65000/ + +; Port that the tuir webserver will listen on. This should match the redirect +; uri defined above. +oauth_redirect_port = 65000 + +; Access permissions that will be requested. +oauth_scope = edit,history,identity,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote + +; This is a separate token for the imgur api. It's used to extract images +; from imgur links and albums so they can be opened with mailcap. +; See https://imgur.com/account/settings/apps to generate your own key. +imgur_client_id = b33d69ac8931734 + +[bindings] +############## +# Key Bindings +############## +; If you would like to define custom bindings, copy this section into your +; config file with the [bindings] heading. All commands must be bound to at +; least one key for the config to be valid. +; +; 1.) Plain keys can be represented by either uppercase/lowercase characters +; or the hexadecimal numbers referring their ascii codes. For reference, see +; https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +; e.g. Q, q, 1, ? +; e.g. 0x20 (space), 0x3c (less-than sign) +; +; 2.) Special ascii control codes should be surrounded with <>. For reference, +; see https://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart +; e.g. <LF> (enter), <ESC> (escape) +; +; 3.) Other special keys are defined by curses, they should be surrounded by <> +; and prefixed with KEY_. For reference, see +; https://docs.python.org/2/library/curses.html#constants +; e.g. <KEY_LEFT> (left arrow), <KEY_F5>, <KEY_NPAGE> (page down) +; +; Notes: +; - Curses <KEY_ENTER> is unreliable and should always be used in conjunction +; with <LF>. +; - Use 0x20 for the space key. +; - A subset of Ctrl modifiers are available through the ascii control codes. +; For example, Ctrl-D will trigger an <EOT> signal. See the table above for +; a complete reference. + +; Base page +EXIT = q +FORCE_EXIT = Q +HELP = ? +SORT_1 = 1 +SORT_2 = 2 +SORT_3 = 3 +SORT_4 = 4 +SORT_5 = 5 +SORT_6 = 6 +SORT_7 = 7 +MOVE_UP = k, <KEY_UP> +MOVE_DOWN = j, <KEY_DOWN> +PREVIOUS_THEME = <KEY_F2> +NEXT_THEME = <KEY_F3> +PAGE_UP = m, <KEY_PPAGE>, <NAK> +PAGE_DOWN = n, <KEY_NPAGE>, <EOT> +PAGE_TOP = gg +PAGE_BOTTOM = G +UPVOTE = a +DOWNVOTE = z +LOGIN = u +DELETE = d +EDIT = e +INBOX = i +REFRESH = r, <KEY_F5> +PROMPT = / +SAVE = w +COPY_PERMALINK = y +COPY_URL = Y +PRIVATE_MESSAGE = C +SUBSCRIPTIONS = s +MULTIREDDITS = S + +; Submission page +SUBMISSION_TOGGLE_COMMENT = 0x20 +SUBMISSION_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER> +SUBMISSION_POST = c +SUBMISSION_EXIT = h, <KEY_LEFT> +SUBMISSION_OPEN_IN_PAGER = l, <KEY_RIGHT> +SUBMISSION_OPEN_IN_URLVIEWER = b +SUBMISSION_GOTO_PARENT = K +SUBMISSION_GOTO_SIBLING = J + +; Subreddit page +SUBREDDIT_SEARCH = f +SUBREDDIT_POST = c +SUBREDDIT_OPEN = l, <KEY_RIGHT> +SUBREDDIT_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER> +SUBREDDIT_FRONTPAGE = p +SUBREDDIT_HIDE = 0x20 + +; Subscription page +SUBSCRIPTION_SELECT = l, <LF>, <KEY_ENTER>, <KEY_RIGHT> +SUBSCRIPTION_EXIT = h, s, S, <ESC>, <KEY_LEFT> + +; Inbox page +INBOX_VIEW_CONTEXT = l, <KEY_RIGHT> +INBOX_OPEN_SUBMISSION = o, <LF>, <KEY_ENTER> +INBOX_REPLY = c +INBOX_MARK_READ = w +INBOX_EXIT = h, <ESC>, <KEY_LEFT> diff --git a/.config/vifm/colors/COPYING b/.config/vifm/colors/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/.config/vifm/colors/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/.config/vifm/colors/ChangeLog b/.config/vifm/colors/ChangeLog new file mode 100644 index 0000000..a0d7340 --- /dev/null +++ b/.config/vifm/colors/ChangeLog @@ -0,0 +1,27 @@ +0.9 to current + Add new color scheme: iceberg (Thanks puven12) + Add new color scheme: dracula (Thanks EgZvor) + Add new color scheme: molokai (Thanks mimadrid) + Add missing `:highlight clear` to: + * lucius + * reicheltd-light + + Update near-default scheme: + * Add CmpMismatch (since vifm v0.9). + * Add one more document type: mobi. + * Support change of terminal background. + +0.8.2 to 0.9 + Add new color scheme: lucius (Thanks francogonzaga) + Add new color scheme: SemiDarkDesert (Thanks clausED) + Add new color scheme: near-default (Thanks xaizek) + Clean up info in README + +0.8 to 0.8.2 + Add GPL-2 license file + + Add new color scheme: ph (Thanks pihao) + Add new color scheme: reicheltd-light (Thanks reicheltd) + Add new color scheme: snowwhite (Thanks durcheinandr) + Add new color scheme: semidarkdesert (Thanks clausED) + Add new color scheme: near-default diff --git a/.config/vifm/colors/Default.vifm b/.config/vifm/colors/Default.vifm new file mode 100644 index 0000000..fa715ae --- /dev/null +++ b/.config/vifm/colors/Default.vifm @@ -0,0 +1,65 @@ +" You can edit this file by hand. +" The " character at the beginning of a line comments out the line. +" Blank lines are ignored. + +" The Default color scheme is used for any directory that does not have +" a specified scheme and for parts of user interface like menus. A +" color scheme set for a base directory will also +" be used for the sub directories. + +" The standard ncurses colors are: +" Default = -1 = None, can be used for transparency or default color +" Black = 0 +" Red = 1 +" Green = 2 +" Yellow = 3 +" Blue = 4 +" Magenta = 5 +" Cyan = 6 +" White = 7 + +" Light versions of colors are also available (set bold attribute): +" LightBlack +" LightRed +" LightGreen +" LightYellow +" LightBlue +" LightMagenta +" LightCyan +" LightWhite + +" Available attributes (some of them can be combined): +" bold +" underline +" reverse or inverse +" standout +" none + +" Vifm supports 256 colors you can use color numbers 0-255 +" (requires properly set up terminal: set your TERM environment variable +" (directly or using resources) to some color terminal name (e.g. +" xterm-256color) from /usr/lib/terminfo/; you can check current number +" of colors in your terminal with tput colors command) + +" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color + +highlight clear + +highlight Win cterm=none ctermfg=white ctermbg=black +highlight Directory cterm=bold ctermfg=cyan ctermbg=default +highlight Link cterm=bold ctermfg=yellow ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=default ctermbg=blue +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=bold ctermfg=black ctermbg=default +highlight StatusLine cterm=bold ctermfg=black ctermbg=white +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black +highlight Border cterm=none ctermfg=black ctermbg=white +highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white diff --git a/.config/vifm/colors/README.md b/.config/vifm/colors/README.md new file mode 100644 index 0000000..2202a91 --- /dev/null +++ b/.config/vifm/colors/README.md @@ -0,0 +1,58 @@ +# vifm-colors + +Various colorschemes for [vifm](https://vifm.info/): +- astrell (by astrell) +- darkdesert (by langner) +- Default +- desert +- dracula (by EgZvor) +- g80 +- iceberg (by puven12) +- lucius (by francogonzaga) +- matrix +- mc-like (by Petteri Knihti) +- molokai (by Miguel Madrid Mencía) +- near-default +- ph (by pihao) +- reicheltd-light (by reicheltd) +- semidarkdesert (by clausED) +- snowwhite (by durcheinandr) +- solarized-dark +- zenburn +- zenburn_1 (by frgm) + +The solarized-dark theme is based on [istib](https://github.com/istib)'s [version](https://github.com/istib/dotfiles/blob/master/vifm/vifm-colors). + +## Installation + +### Distribution +Some distributions offer a package for vifm color schemes. In this case you can install them easily using your package manager. + +#### openSUSE + +``` +zypper in vifm-colors +``` + +### Manual +If you would like to have just one theme you could download it via wget, for example: + +`wget -P ~/.vifm/colors https://raw.githubusercontent.com/vifm/vifm-colors/master/solarized-dark.vifm` + +If you prefer to download all themes you could set it up with git, and stay up to date. + +`rm -rf ~/.config/vifm/colors` + +`git clone https://github.com/vifm/vifm-colors ~/.config/vifm/colors` + +To check for updates just type `git pull` in `~/.config/vifm/colors`. + +*Note:* replace `~/.config/vifm` with `~/.vifm` in commands above if you store your configuration there. + +## Preview +A preview of all color themes contained in this repository are available at [the official vifm site](https://vifm.info/colorschemes.shtml). + +## Set a theme +Load with `:colorscheme theme-name` in vifm, or write `colorscheme theme-name` in vifm's configuration file `~/.config/vifm/vifmrc`. + +If you have any color themes that are not in this repo, feel free to fork, add it and send a pull request! diff --git a/.config/vifm/colors/astrell.vifm b/.config/vifm/colors/astrell.vifm new file mode 100644 index 0000000..f182559 --- /dev/null +++ b/.config/vifm/colors/astrell.vifm @@ -0,0 +1,33 @@ +" by astrell +" with builtin regular/root user differentiation + +highlight clear + +highlight Border cterm=none ctermfg=black ctermbg=131 + +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=bold ctermfg=default ctermbg=default + +highlight StatusLine cterm=none ctermfg=black ctermbg=white +highlight WildMenu cterm=none ctermfg=default ctermbg=153 + +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=default + +highlight Win cterm=none ctermfg=0 ctermbg=224 +highlight Directory cterm=bold ctermfg=17 ctermbg=default +highlight Link cterm=none ctermfg=94 ctermbg=default +highlight BrokenLink cterm=bold ctermfg=160 ctermbg=default +highlight Socket cterm=bold ctermfg=91 ctermbg=default +highlight Device cterm=bold ctermfg=52 ctermbg=default +highlight Fifo cterm=bold ctermfg=105 ctermbg=default +highlight Executable cterm=bold ctermfg=23 ctermbg=default +highlight Selected cterm=bold ctermfg=default ctermbg=182 +highlight CurrLine cterm=bold ctermfg=238 ctermbg=153 +highlight OtherLine cterm=default ctermfg=default ctermbg=default + +" overwrite some colors for root user +if $USER == 'root' + highlight Win cterm=none ctermfg=0 ctermbg=182 + highlight Selected cterm=bold ctermfg=default ctermbg=217 +endif diff --git a/.config/vifm/colors/create_themes.md b/.config/vifm/colors/create_themes.md new file mode 100644 index 0000000..029871a --- /dev/null +++ b/.config/vifm/colors/create_themes.md @@ -0,0 +1 @@ +To port themes from vim to vifm [this](http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim) is helpful to look up colors. diff --git a/.config/vifm/colors/darkdesert.vifm b/.config/vifm/colors/darkdesert.vifm new file mode 100644 index 0000000..c456374 --- /dev/null +++ b/.config/vifm/colors/darkdesert.vifm @@ -0,0 +1,24 @@ +" Dark Desert +" by Karol M. Langner +" based on Desert by Michael jubalh Vetter +" https://github.com/vifm/vifm-colors + +highlight clear + +highlight Win cterm=none ctermfg=220 ctermbg=233 +highlight Directory cterm=bold ctermfg=77 ctermbg=default +highlight Link cterm=bold ctermfg=239 ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=24 ctermbg=default +highlight Device cterm=bold ctermfg=31 ctermbg=default +highlight Fifo cterm=bold ctermfg=31 ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=131 ctermbg=228 +highlight TopLine cterm=none ctermfg=124 ctermbg=235 +highlight TopLineSel cterm=bold ctermfg=124 ctermbg=235 +highlight StatusLine cterm=bold ctermfg=124 ctermbg=235 +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=217 ctermbg=black +highlight ErrorMsg cterm=none ctermfg=7 ctermbg=1 +highlight Border cterm=none ctermfg=black ctermbg=235 diff --git a/.config/vifm/colors/desert.vifm b/.config/vifm/colors/desert.vifm new file mode 100644 index 0000000..3b28180 --- /dev/null +++ b/.config/vifm/colors/desert.vifm @@ -0,0 +1,23 @@ +" Desert +" by Michael jubalh Vetter +" https://github.com/jubalh/vifm-colors + +highlight clear + +highlight Win cterm=none ctermfg=220 ctermbg=237 +highlight Directory cterm=bold ctermfg=77 ctermbg=default +highlight Link cterm=bold ctermfg=239 ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=24 ctermbg=default +highlight Device cterm=bold ctermfg=31 ctermbg=default +highlight Fifo cterm=bold ctermfg=31 ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=131 ctermbg=228 +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=bold ctermfg=red ctermbg=default +highlight StatusLine cterm=bold ctermfg=red ctermbg=white +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=217 ctermbg=black +highlight ErrorMsg cterm=none ctermfg=7 ctermbg=1 +highlight Border cterm=none ctermfg=black ctermbg=white diff --git a/.config/vifm/colors/dracula.vifm b/.config/vifm/colors/dracula.vifm new file mode 100644 index 0000000..ebd2b75 --- /dev/null +++ b/.config/vifm/colors/dracula.vifm @@ -0,0 +1,45 @@ +" VIFM COLORS +" dracula +" based on: https://github.com/istib/dotfiles/blob/master/vifm/vifm-colors + +" Default = -1 = None, can be used for transparency or default color +" Black = 0 +" Red = 1 +" Green = 2 +" Yellow = 3 +" Blue = 4 +" Magenta = 5 +" Cyan = 6 +" White = 7 + +" STYLES +" bold +" underline +" reverse or inverse +" standout +" none + + +highlight clear + +highlight Win cterm=none ctermfg=default ctermbg=none + +highlight TopLine cterm=none ctermfg=blue ctermbg=none +highlight TopLineSel cterm=none ctermfg=magenta ctermbg=none +highlight StatusLine cterm=none ctermfg=blue ctermbg=none +highlight Border cterm=none ctermfg=blue ctermbg=none + +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=236 ctermbg=blue + +highlight WildMenu cterm=none,reverse ctermfg=blue ctermbg=236 +highlight CmdLine cterm=none ctermfg=255 ctermbg=236 +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black + +highlight Directory cterm=none ctermfg=blue ctermbg=default +highlight Link cterm=none ctermfg=cyan ctermbg=default +highlight BrokenLink cterm=none ctermfg=red ctermbg=default +highlight Socket cterm=none ctermfg=magenta ctermbg=black +highlight Device cterm=none ctermfg=red ctermbg=default +highlight Fifo cterm=none ctermfg=yellow ctermbg=black +highlight Executable cterm=none ctermfg=green ctermbg=default diff --git a/.config/vifm/colors/g80.vifm b/.config/vifm/colors/g80.vifm new file mode 100644 index 0000000..3eaa6ae --- /dev/null +++ b/.config/vifm/colors/g80.vifm @@ -0,0 +1,28 @@ +" G80 + +" Reset all styles first +highlight clear + +highlight Border cterm=none ctermfg=237 ctermbg=237 + +highlight TopLine cterm=none ctermfg=188 ctermbg=237 +highlight TopLineSel cterm=underline ctermfg=188 ctermbg=237 + +highlight Win cterm=none ctermfg=188 ctermbg=237 +highlight Directory cterm=none ctermfg=188 ctermbg=237 +highlight CurrLine cterm=none ctermfg=188 ctermbg=236 +highlight OtherLine cterm=none ctermfg=247 ctermbg=237 +highlight Selected cterm=none ctermfg=188 ctermbg=238 + +highlight JobLine cterm=bold ctermfg=188 ctermbg=238 +highlight StatusLine cterm=none ctermfg=188 ctermbg=235 +highlight WildMenu cterm=none ctermfg=188 ctermbg=238 +highlight CmdLine cterm=none ctermfg=188 ctermbg=237 +highlight ErrorMsg cterm=none ctermfg=188 ctermbg=237 + +highlight Executable cterm=none ctermfg=188 ctermbg=237 +highlight Link cterm=none ctermfg=188 ctermbg=237 +highlight BrokenLink cterm=none ctermfg=188 ctermbg=237 +highlight Device cterm=none ctermfg=188 ctermbg=237 +highlight Fifo cterm=none ctermfg=188 ctermbg=237 +highlight Socket cterm=none ctermfg=188 ctermbg=237 diff --git a/.config/vifm/colors/iceberg.vifm b/.config/vifm/colors/iceberg.vifm new file mode 100644 index 0000000..2606641 --- /dev/null +++ b/.config/vifm/colors/iceberg.vifm @@ -0,0 +1,29 @@ +" iceberg +" by puven12 +" +" This colorscheme is based on iceberg colorscheme for vim +" by cocopon + +highlight clear + +highlight Win cterm=none ctermfg=255 ctermbg=234 +highlight Directory cterm=bold ctermfg=109 ctermbg=default +highlight Link cterm=bold ctermfg=216 ctermbg=234 +highlight BrokenLink cterm=bold ctermfg=red ctermbg=239 +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=none ctermfg=150 ctermbg=default +highlight Selected cterm=none ctermfg=255 ctermbg=236 +highlight CurrLine cterm=reverse +highlight TopLine cterm=none ctermfg=255 ctermbg=234 +highlight TopLineSel cterm=bold ctermfg=110 ctermbg=default +highlight StatusLine cterm=none ctermfg=240 ctermbg=235 +highlight WildMenu cterm=underline,reverse ctermfg=255 ctermbg=black +highlight CmdLine cterm=none ctermfg=255 ctermbg=234 +highlight ErrorMsg cterm=none ctermfg=203 ctermbg=234 +highlight Border cterm=none ctermfg=black ctermbg=234 +highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=255 +highlight SuggestBox cterm=bold ctermfg=default ctermbg=default +highlight CmpMismatch cterm=bold ctermfg=255 ctermbg=red +highlight AuxWin cterm=bold,underline,reverse,standout ctermfg=default ctermbg=default diff --git a/.config/vifm/colors/lucius.vifm b/.config/vifm/colors/lucius.vifm new file mode 100644 index 0000000..0278aaf --- /dev/null +++ b/.config/vifm/colors/lucius.vifm @@ -0,0 +1,25 @@ +" lucius +" by francogonzaga +" +" https://gist.github.com/francogonzaga/5509523 +" +" This color scheme is loosely based on the lucius color scheme for vim + +highlight clear +highlight Win cterm=none ctermfg=250 ctermbg=236 +highlight Directory cterm=bold ctermfg=4 ctermbg=236 +highlight Link cterm=bold ctermfg=yellow ctermbg=236 +highlight BrokenLink cterm=bold ctermfg=red ctermbg=none +highlight Socket cterm=bold ctermfg=magenta ctermbg=black +highlight Device cterm=bold ctermfg=red ctermbg=black +highlight Fifo cterm=bold ctermfg=cyan ctermbg=none +highlight Executable cterm=bold ctermfg=112 ctermbg=236 +highlight Selected cterm=none ctermfg=236 ctermbg=208 +highlight CurrLine cterm=bold ctermfg=251 ctermbg=240 +highlight TopLine cterm=none ctermfg=black ctermbg=240 +highlight TopLineSel cterm=none ctermfg=250 ctermbg=12 +highlight StatusLine cterm=bold ctermfg=255 ctermbg=12 +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=240 +highlight ErrorMsg cterm=none ctermfg=250 ctermbg=124 +highlight Border cterm=none ctermfg=236 ctermbg=236 diff --git a/.config/vifm/colors/luke.vifm b/.config/vifm/colors/luke.vifm new file mode 100644 index 0000000..f3da172 --- /dev/null +++ b/.config/vifm/colors/luke.vifm @@ -0,0 +1,33 @@ +highlight clear +highlight Win cterm=none ctermfg=white ctermbg=black +highlight Directory cterm=bold ctermfg=cyan ctermbg=default +highlight Link cterm=bold ctermfg=blue ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=bold ctermfg=black ctermbg=default +highlight StatusLine cterm=bold ctermfg=black ctermbg=blue +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black +highlight Border cterm=none ctermfg=white ctermbg=black +highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white +highlight SuggestBox cterm=bold ctermfg=default ctermbg=default +highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red +highlight AuxWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight TabLine cterm=none ctermfg=white ctermbg=black +highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default +highlight User1 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User2 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User3 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User4 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User5 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User6 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User7 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User8 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default +highlight User9 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default diff --git a/.config/vifm/colors/matrix.vifm b/.config/vifm/colors/matrix.vifm new file mode 100644 index 0000000..a5416cc --- /dev/null +++ b/.config/vifm/colors/matrix.vifm @@ -0,0 +1,27 @@ +" Matrix +" by Michael jubalh Vetter +" https://github.com/jubalh/vifm-colors + +highlight clear + +highlight Win cterm=none ctermfg=green ctermbg=black + +highlight TopLine cterm=none ctermfg=green ctermbg=none +highlight TopLineSel cterm=none ctermfg=green ctermbg=none +highlight StatusLine cterm=none ctermfg=green ctermbg=none +highlight Border cterm=none ctermfg=green ctermbg=none + +highlight Selected cterm=bold ctermfg=red ctermbg=default +highlight CurrLine cterm=bold ctermfg=black ctermbg=green + +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black + +highlight Directory cterm=none ctermfg=blue ctermbg=default +highlight Link cterm=none ctermfg=yellow ctermbg=default +highlight BrokenLink cterm=none ctermfg=red ctermbg=default +highlight Socket cterm=none ctermfg=yellow ctermbg=default +highlight Device cterm=none ctermfg=yellow ctermbg=default +highlight Fifo cterm=none ctermfg=yellow ctermbg=default +highlight Executable cterm=none ctermfg=green ctermbg=default diff --git a/.config/vifm/colors/mc-like.vifm b/.config/vifm/colors/mc-like.vifm new file mode 100644 index 0000000..80589e9 --- /dev/null +++ b/.config/vifm/colors/mc-like.vifm @@ -0,0 +1,26 @@ +" mimicking midnight commander +" by Petteri Knihti + +highlight clear + +highlight Win cterm=none ctermfg=white ctermbg=blue + +highlight CurrLine cterm=none ctermfg=black ctermbg=cyan +highlight Selected cterm=bold ctermfg=yellow ctermbg=default + +highlight TopLine cterm=none ctermfg=black ctermbg=cyan +highlight TopLineSel cterm=bold ctermfg=yellow ctermbg=cyan +highlight StatusLine cterm=none ctermfg=black ctermbg=cyan +highlight Border cterm=none ctermfg=none ctermbg=blue + +highlight WildMenu cterm=reverse ctermfg=black ctermbg=white +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black + +highlight Directory cterm=bold ctermfg=cyan ctermbg=default +highlight Link cterm=bold ctermfg=yellow ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default diff --git a/.config/vifm/colors/molokai.vifm b/.config/vifm/colors/molokai.vifm new file mode 100644 index 0000000..c1db26d --- /dev/null +++ b/.config/vifm/colors/molokai.vifm @@ -0,0 +1,31 @@ +" Molokai +" by Miguel Madrid Mencia +" https://github.com/vifm/vifm-colors + +highlight clear + +highlight Border cterm=none ctermfg=black ctermbg=232 +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight CurrLine cterm=bold ctermfg=default ctermbg=208 +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Directory cterm=bold ctermfg=12 ctermbg=default +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Link cterm=bold ctermfg=green ctermbg=default +highlight OtherLine cterm=bold ctermfg=default ctermbg=130 +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight StatusLine cterm=none ctermfg=white ctermbg=233 +highlight SuggestBox cterm=none ctermfg=white ctermbg=black +highlight TopLine cterm=none ctermfg=15 ctermbg=233 +highlight TopLineSel cterm=none ctermfg=148 ctermbg=default +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight Win cterm=none ctermfg=white ctermbg=black + +if $USER == 'root' + highlight Border cterm=none ctermfg=default ctermbg=red + highlight StatusLine cterm=none ctermfg=white ctermbg=red + highlight TopLine cterm=none ctermfg=default ctermbg=red +endif diff --git a/.config/vifm/colors/near-default.vifm b/.config/vifm/colors/near-default.vifm new file mode 100644 index 0000000..bd514a6 --- /dev/null +++ b/.config/vifm/colors/near-default.vifm @@ -0,0 +1,89 @@ +" vim: filetype=vifm : + +" xterm color customization: +" +" ! regular (not bold) red +" XTerm*color1: #ff3030 +" ! regular (not bold) green +" XTerm*color2: #70dd70 +" ! regular (not bold) yellow +" XTerm*color3: #f0f000 +" ! regular (not bold) blue +" XTerm*color4: #6060dd +" ! bold red +" XTerm*color9: #ff8080 +" ! bold green +" XTerm*color10: #20dd20 +" ! bold yellow +" XTerm*color11: #e0e000 +" ! bold blue +" XTerm*color12: #a8a8ff + +highlight clear +highlight Win cterm=none ctermfg=white ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold,reverse ctermfg=red ctermbg=default +highlight Fifo cterm=bold,reverse ctermfg=cyan ctermbg=default +highlight CurrLine cterm=reverse,bold ctermfg=default ctermbg=default +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=underline ctermfg=black ctermbg=default +highlight StatusLine cterm=none ctermfg=black ctermbg=white +highlight WildMenu cterm=underline,bold,reverse ctermfg=yellow ctermbg=black +highlight CmdLine cterm=bold ctermfg=white ctermbg=default +highlight ErrorMsg cterm=bold ctermfg=white ctermbg=red +highlight Border cterm=none ctermfg=white ctermbg=default +highlight OtherLine cterm=reverse ctermfg=234 ctermbg=white +highlight SuggestBox cterm=bold,reverse ctermfg=cyan ctermbg=default + +" no 256-color palette on Windows +if $OS == 'Windows_NT' + highlight Directory cterm=bold ctermfg=cyan ctermbg=default + highlight Link cterm=bold ctermfg=yellow ctermbg=default + highlight Executable cterm=bold ctermfg=green ctermbg=default + highlight Selected cterm=bold ctermfg=magenta ctermbg=default + highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red + finish +endif + +highlight Directory cterm=bold ctermfg=123 ctermbg=default +highlight Link cterm=bold ctermfg=229 ctermbg=default +highlight Executable cterm=bold ctermfg=119 ctermbg=default +highlight Selected cterm=bold ctermfg=213 ctermbg=default +highlight CmpMismatch cterm=bold ctermfg=white ctermbg=88 + +" software documentation +highlight {COPYRIGHT,COPYING*,BUGS,ChangeLog*,FAQ,INSTALL*,LICEN[CS]E,NEWS, + \README*,AUTHORS,TODO,THANKS} + \ cterm=none ctermfg=187 ctermbg=default +" build system files +highlight {Makefile,Makefile.am,Makefile.in,Makefile.win,*.mak,*.mk, + \CMakeLists.txt} + \ cterm=none ctermfg=121 ctermbg=default +" archives +highlight {*.7z,*.ace,*.arj,*.bz2,*.cpio,*.deb,*.dz,*.gz,*.jar,*.lzh,*.lzma, + \*.rar,*.rpm,*.rz,*.tar,*.taz,*.tb2,*.tbz,*.tbz2,*.tgz,*.tlz,*.trz, + \*.txz,*.tz,*.tz2,*.xz,*.z,*.zip,*.zoo} + \ cterm=none ctermfg=215 ctermbg=default +" documents +highlight {*.djvu,*.htm,*.html,*.shtml,*.css,*.markdown,*.md,*[^0-9].[1-9], + \*.mkd,*.org,*.pandoc,*.pdc,*.pdf,*.epub,*.fb2,*.tex,*.txt,*.xhtml, + \*.xml,*.pptx,*.ppt,*.doc,*.docx,*.xls,*.xls[mx],*.mobi} + \ cterm=none ctermfg=217 ctermbg=default +" media +highlight {*.aac,*.anx,*.asf,*.au,*.avi,*.ts,*.axa,*.axv,*.divx,*.flac,*.m2a, + \*.m2v,*.m4a,*.m4p,*.m4v,*.mid,*.midi,*.mka,*.mkv,*.mov,*.mp3,*.mp4, + \*.flv,*.mp4v,*.mpc,*.mpeg,*.mpg,*.nuv,*.oga,*.ogg,*.ogv,*.ogx,*.pbm, + \*.pgm,*.qt,*.ra,*.ram,*.rm,*.spx,*.vob,*.wav,*.wma,*.wmv,*.xvid, + \*.ac3} + \ cterm=none ctermfg=49 ctermbg=default +" images +highlight {*.bmp,*.gif,*.jpeg,*.jpg,*.ico,*.png,*.ppm,*.svg,*.svgz,*.tga,*.tif, + \*.tiff,*.xbm,*.xcf,*.xpm,*.xspf,*.xwd} + \ cterm=none ctermfg=117 ctermbg=default +" executables +highlight {*.sh,*.bash,*.bat,*.btm,*.cmd,*.com,*.dll,*.exe,*.run,*.msu,*.msi} + \ cterm=none ctermfg=77 ctermbg=default +" source code +highlight {*.patch,*.diff,*.py,*.[ch]pp,*.mk,*.c,*.h,*.[ch]pp,*.cc,*.hs,*.php} + \ cterm=none ctermfg=193 ctermbg=default diff --git a/.config/vifm/colors/ph.vifm b/.config/vifm/colors/ph.vifm new file mode 100644 index 0000000..1704da5 --- /dev/null +++ b/.config/vifm/colors/ph.vifm @@ -0,0 +1,27 @@ +" ph + +highlight clear + +highlight Win cterm=none ctermfg=248 ctermbg=234 +highlight Directory cterm=bold ctermfg=033 ctermbg=234 +highlight Link cterm=bold ctermfg=yellow ctermbg=234 +highlight BrokenLink cterm=reverse ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=125 ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=166 ctermbg=default +highlight Selected cterm=bold ctermfg=255 ctermbg=237 +highlight CurrLine cterm=bold ctermfg=default ctermbg=237 +highlight TopLine cterm=bold ctermfg=black ctermbg=235 +highlight TopLineSel cterm=bold ctermfg=black ctermbg=default +highlight StatusLine cterm=bold ctermfg=black ctermbg=235 +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black +highlight Border cterm=none ctermfg=black ctermbg=234 +highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white +highlight SuggestBox cterm=bold ctermfg=default ctermbg=default + +if $USER == 'root' + highlight Border ctermbg=red +endif diff --git a/.config/vifm/colors/reicheltd-light.vifm b/.config/vifm/colors/reicheltd-light.vifm new file mode 100644 index 0000000..b74e4de --- /dev/null +++ b/.config/vifm/colors/reicheltd-light.vifm @@ -0,0 +1,28 @@ +" vim: filetype=vifm : + +" Author: Daniel R. (a.k.a. reicheltd) + +highlight clear + +highlight Win cterm=none ctermfg=236 ctermbg=255 +highlight Directory cterm=bold ctermfg=21 ctermbg=255 +highlight Link cterm=bold ctermfg=39 ctermbg=default + +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=magenta ctermbg=default +highlight Device cterm=bold ctermfg=blue ctermbg=default + +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=red ctermbg=default +highlight Selected cterm=bold ctermfg=200 ctermbg=default + +highlight CurrLine cterm=bold ctermfg=255 ctermbg=27 +highlight TopLine cterm=none ctermfg=236 ctermbg=255 +highlight TopLineSel cterm=bold ctermfg=236 ctermbg=255 + +highlight StatusLine cterm=bold ctermfg=236 ctermbg=255 +highlight WildMenu cterm=underline,reverse ctermfg=236 ctermbg=255 +highlight CmdLine cterm=none ctermfg=236 ctermbg=255 + +highlight ErrorMsg cterm=none ctermfg=red ctermbg=236 +highlight Border cterm=none ctermfg=236 ctermbg=255 diff --git a/.config/vifm/colors/semidarkdesert.vifm b/.config/vifm/colors/semidarkdesert.vifm new file mode 100644 index 0000000..5fbccd8 --- /dev/null +++ b/.config/vifm/colors/semidarkdesert.vifm @@ -0,0 +1,23 @@ +" SemiDarkDesert +" by Claus E. Durst, based on 'Desert' by Michael jubalh Vetter +" https://github.com/clausED/vifm-colors + +highlight clear + +highlight Win cterm=none ctermfg=220 ctermbg=233 +highlight Directory cterm=bold ctermfg=77 ctermbg=default +highlight Link cterm=bold ctermfg=239 ctermbg=default +highlight BrokenLink cterm=bold ctermfg=red ctermbg=default +highlight Socket cterm=bold ctermfg=24 ctermbg=default +highlight Device cterm=bold ctermfg=31 ctermbg=default +highlight Fifo cterm=bold ctermfg=31 ctermbg=default +highlight Executable cterm=bold ctermfg=green ctermbg=default +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=131 ctermbg=228 +highlight TopLine cterm=none ctermfg=black ctermbg=248 +highlight TopLineSel cterm=bold ctermfg=red ctermbg=default +highlight StatusLine cterm=bold ctermfg=red ctermbg=248 +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=217 ctermbg=black +highlight ErrorMsg cterm=none ctermfg=7 ctermbg=1 +highlight Border cterm=none ctermfg=black ctermbg=240 diff --git a/.config/vifm/colors/snowwhite.vifm b/.config/vifm/colors/snowwhite.vifm new file mode 100644 index 0000000..7aded4d --- /dev/null +++ b/.config/vifm/colors/snowwhite.vifm @@ -0,0 +1,31 @@ +" snowwhite +" Author: Jochen Schweizer +" https://github.com/durcheinandr/vifm-colors + +highlight clear + +highlight SuggestBox cterm=none ctermfg=16 ctermbg=231 +highlight Win cterm=none ctermfg=16 ctermbg=231 +highlight Directory cterm=bold ctermfg=16 ctermbg=231 +highlight Link cterm=none ctermfg=16 ctermbg=231 + +highlight BrokenLink cterm=bold ctermfg=196 ctermbg=231 +highlight Socket cterm=none ctermfg=16 ctermbg=231 +highlight Device cterm=none ctermfg=16 ctermbg=231 + +highlight Fifo cterm=none ctermfg=16 ctermbg=231 +highlight Executable cterm=none ctermfg=16 ctermbg=231 +highlight Selected cterm=none ctermfg=208 ctermbg=231 + +highlight CurrLine cterm=none ctermfg=231 ctermbg=208 +highlight TopLine cterm=none ctermfg=16 ctermbg=255 +highlight TopLineSel cterm=none ctermfg=231 ctermbg=16 + +highlight StatusLine cterm=bold ctermfg=16 ctermbg=255 +highlight WildMenu cterm=underline,reverse ctermfg=16 ctermbg=231 +highlight CmdLine cterm=none ctermfg=16 ctermbg=231 + +highlight ErrorMsg cterm=bold ctermfg=196 ctermbg=231 +highlight Border cterm=none ctermfg=16 ctermbg=255 + + diff --git a/.config/vifm/colors/solarized-dark.vifm b/.config/vifm/colors/solarized-dark.vifm new file mode 100644 index 0000000..a792bd9 --- /dev/null +++ b/.config/vifm/colors/solarized-dark.vifm @@ -0,0 +1,45 @@ +" VIFM COLORS +" solarized dark +" based on: https://github.com/istib/dotfiles/blob/master/vifm/vifm-colors + +" Default = -1 = None, can be used for transparency or default color +" Black = 0 +" Red = 1 +" Green = 2 +" Yellow = 3 +" Blue = 4 +" Magenta = 5 +" Cyan = 6 +" White = 7 + +" STYLES +" bold +" underline +" reverse or inverse +" standout +" none + + +highlight clear + +highlight Win cterm=none ctermfg=default ctermbg=none + +highlight TopLine cterm=none ctermfg=blue ctermbg=none +highlight TopLineSel cterm=none ctermfg=blue ctermbg=none +highlight StatusLine cterm=none ctermfg=blue ctermbg=none +highlight Border cterm=none ctermfg=blue ctermbg=none + +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=default ctermbg=blue + +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black + +highlight Directory cterm=none ctermfg=cyan ctermbg=default +highlight Link cterm=none ctermfg=yellow ctermbg=default +highlight BrokenLink cterm=none ctermfg=red ctermbg=default +highlight Socket cterm=none ctermfg=magenta ctermbg=default +highlight Device cterm=none ctermfg=red ctermbg=default +highlight Fifo cterm=none ctermfg=cyan ctermbg=default +highlight Executable cterm=none ctermfg=green ctermbg=default diff --git a/.config/vifm/colors/zenburn.vifm b/.config/vifm/colors/zenburn.vifm new file mode 100644 index 0000000..fccfbbd --- /dev/null +++ b/.config/vifm/colors/zenburn.vifm @@ -0,0 +1,22 @@ +highlight clear + +highlight Win cterm=none ctermfg=245 ctermbg=234 +highlight Directory cterm=bold ctermfg=166 ctermbg=234 +highlight Link cterm=bold ctermfg=yellow ctermbg=234 +highlight BrokenLink cterm=reverse ctermfg=red ctermbg=default + +highlight Socket cterm=bold ctermfg=125 ctermbg=default +highlight Device cterm=bold ctermfg=red ctermbg=default +highlight Fifo cterm=bold ctermfg=cyan ctermbg=default +highlight Executable cterm=bold ctermfg=0x2aa198 ctermbg=default + +highlight Selected cterm=bold ctermfg=125 ctermbg=235 +highlight CurrLine cterm=bold ctermfg=245 ctermbg=235 + +highlight TopLine cterm=none ctermfg=black ctermbg=white +highlight TopLineSel cterm=bold ctermfg=black ctermbg=default +highlight StatusLine cterm=bold ctermfg=black ctermbg=white +highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black +highlight Border cterm=none ctermfg=black ctermbg=white diff --git a/.config/vifm/colors/zenburn_1.vifm b/.config/vifm/colors/zenburn_1.vifm new file mode 100644 index 0000000..86b4338 --- /dev/null +++ b/.config/vifm/colors/zenburn_1.vifm @@ -0,0 +1,29 @@ +" zenburn like color scheme for vifm +" http://kippura.org/zenburnpage/ + +" Reset all styles first +highlight clear + +highlight Border cterm=none ctermfg=235 ctermbg=237 + +highlight TopLine cterm=none ctermfg=108 ctermbg=235 +highlight TopLineSel cterm=bold ctermfg=186 ctermbg=235 + +highlight Win cterm=none ctermfg=188 ctermbg=237 +highlight Directory cterm=none ctermfg=108 ctermbg=237 +highlight CurrLine cterm=none ctermfg=223 ctermbg=235 +highlight OtherLine cterm=none ctermfg=247 ctermbg=237 +highlight Selected cterm=none ctermfg=116 ctermbg=238 + +highlight JobLine cterm=bold ctermfg=116 ctermbg=238 +highlight StatusLine cterm=bold ctermfg=144 ctermbg=236 +highlight ErrorMsg cterm=bold ctermfg=115 ctermbg=237 +highlight WildMenu cterm=bold ctermfg=235 ctermbg=144 +highlight CmdLine cterm=none ctermfg=188 ctermbg=237 + +highlight Executable cterm=none ctermfg=172 ctermbg=237 +highlight Link cterm=none ctermfg=142 ctermbg=237 +highlight BrokenLink cterm=none ctermfg=174 ctermbg=237 +highlight Device cterm=none ctermfg=228 ctermbg=237 +highlight Fifo cterm=none ctermfg=109 ctermbg=237 +highlight Socket cterm=none ctermfg=110 ctermbg=237 diff --git a/.config/vifm/scripts/README-vifm-imagepreview.sh b/.config/vifm/scripts/README-vifm-imagepreview.sh new file mode 100755 index 0000000..7694952 --- /dev/null +++ b/.config/vifm/scripts/README-vifm-imagepreview.sh @@ -0,0 +1,6 @@ +This directory is dedicated for user-supplied scripts/executables. +vifm modifies its PATH environment variable to let user run those +scripts without specifying full path. All subdirectories are added +as well. File in a subdirectory overrules file with the same name +in parent directories. Restart might be needed to recognize files +in newly created or renamed subdirectories.
\ No newline at end of file diff --git a/.config/vifm/scripts/vifm-imagepreview.sh b/.config/vifm/scripts/vifm-imagepreview.sh new file mode 100755 index 0000000..fbe0431 --- /dev/null +++ b/.config/vifm/scripts/vifm-imagepreview.sh @@ -0,0 +1,50 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: vifm-imagepreview.sh +# +# USAGE: ./vifm-imagepreview.sh +# +# DESCRIPTION: Image previewer for vifm. +# Based on script by z3bra -- 2014-01-21 +# This is called by vifm by adding the following line to vimfrc file: +# +# fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm vifm-imagepreviewer.sh %px %py %pw %ph %c +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: Vito G. Graffagnino (), v.graffagnino@btinternet.com +# ORGANIZATION: +# CREATED: 04/05/17 11:19:39 +# REVISION: --- +#=============================================================================== +set -o nounset # Treat unset variables as an error +W3MIMGDISPLAY="/usr/lib64/w3m/w3mimgdisplay" +FONTH=15 # Size of one terminal row +FONTW=7 # Size of one terminal column +X=$1 +Y=$2 +COLUMNS=$3 +LINES=$4 +FILENAME=$5 +read width height <<< `echo "5;$FILENAME" | $W3MIMGDISPLAY` +if [ -z "$width" -o -z "$height" ]; then + echo 'Error: Failed to obtain image size.' + exit 1 +fi +x=$((FONTW * X)) +y=$((FONTH * Y)) +max_width=$((FONTW * COLUMNS)) +max_height=$((FONTH * LINES)) +if [ "$width" -gt "$max_width" ]; then + height=$((height * max_width / width)) + width=$max_width +fi +if [ "$height" -gt "$max_height" ]; then + width=$((width * max_height / height)) + height=$max_height +fi +w3m_command="0;1;$x;$y;$width;$height;;;;;$FILENAME\n4;\n3;" +echo -e "$w3m_command" | $W3MIMGDISPLAY diff --git a/.config/vifm/scripts/vifmimg b/.config/vifm/scripts/vifmimg new file mode 100755 index 0000000..98e15c8 --- /dev/null +++ b/.config/vifm/scripts/vifmimg @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +readonly ID_PREVIEW="preview" + +#PLAY_GIF="yes" +# By enabling this option the GIF will be animated, by leaving it commented like it +# is now will make the gif preview behave the same was a video preview. + +#AUTO_REMOVE="yes" +# By enabling this option the script will remove the preview file after it is drawn +# and by doing so the preview will always be up-to-date with the file. +# This however, requires more CPU and therefore affects the overall performance. + +if [ -e "$FIFO_UEBERZUG" ]; then + if [[ "$1" == "draw" ]]; then + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="$PWD/$6") \ + > "$FIFO_UEBERZUG" + elif [[ "$1" == "videopreview" ]]; then + [[ ! -d "/tmp$PWD/$6/" ]] && mkdir -p "/tmp$PWD/$6/" + [[ ! -f "/tmp$PWD/$6.png" ]] && ffmpegthumbnailer -i "$PWD/$6" -o "/tmp$PWD/$6.png" -s 0 -q 10 + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp$PWD/$6.png") \ + > "$FIFO_UEBERZUG" + elif [[ "$1" == "gifpreview" ]]; then + [[ ! -d "/tmp$PWD/$6/" ]] && mkdir -p "/tmp$PWD/$6/" && convert -coalesce "$PWD/$6" "/tmp$PWD/$6/$6.png" + if [[ ! -z "$PLAY_GIF" ]]; then + for frame in $(ls -1 /tmp$PWD/$6/$6*.png | sort -V); do + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="$frame") \ + > "$FIFO_UEBERZUG" + # Sleep between frames to make the animation smooth. + sleep .07 + done + else + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp$PWD/$6/$6-0.png") \ + > "$FIFO_UEBERZUG" + fi + elif [[ "$1" == "epubpreview" ]]; then + [[ ! -d "/tmp$PWD/$6/" ]] && mkdir -p "/tmp$PWD/$6/" + [[ ! -f "/tmp$PWD/$6.png" ]] && epub-thumbnailer "$6" "/tmp$PWD/$6.png" 512 + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp$PWD/$6.png") \ + > "$FIFO_UEBERZUG" + elif [[ "$1" == "pdfpreview" ]]; then + [[ ! -d "/tmp$PWD/$6/" ]] && mkdir -p "/tmp$PWD/$6/" + [[ ! -f "/tmp$PWD/$6.png" ]] && pdftoppm -png -singlefile "$6" "/tmp$PWD/$6" + declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" + [x]="$2" [y]="$3" [width]="$4" [height]="$5" \ + [path]="/tmp$PWD/$6.png") \ + > "$FIFO_UEBERZUG" + elif [[ "$1" == "clear" ]]; then + declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \ + > "$FIFO_UEBERZUG" + [[ ! -z $AUTO_REMOVE ]] && [[ -f "/tmp$PWD/$6.png" ]] && rm -f "/tmp$PWD/$6.png" + [[ ! -z $AUTO_REMOVE ]] && [[ -d "/tmp$PWD/$6/" ]] && rm -rf "/tmp$PWD/$6/" + + fi +fi diff --git a/.config/vifm/scripts/vifmrun b/.config/vifm/scripts/vifmrun new file mode 100755 index 0000000..cc27b25 --- /dev/null +++ b/.config/vifm/scripts/vifmrun @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +export FIFO_UEBERZUG="/tmp/vifm-ueberzug-${PPID}" + +function cleanup { + rm "$FIFO_UEBERZUG" 2>/dev/null + pkill -P $$ 2>/dev/null +} +rm "$FIFO_UEBERZUG" 2>/dev/null +mkfifo "$FIFO_UEBERZUG" 2>/dev/null +trap cleanup EXIT 2>/dev/null +tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash & + +vifm +cleanup diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt new file mode 100755 index 0000000..a812f88 --- /dev/null +++ b/.config/vifm/vifm-help.txt @@ -0,0 +1,4454 @@ +VIFM(1) General Commands Manual VIFM(1) + + + +NAME + vifm - vi file manager + +SYNOPSIS + vifm [OPTION]... + vifm [OPTION]... LWIN_DIR + vifm [OPTION]... LWIN_DIR RWIN_DIR + +DESCRIPTION + Vifm is an ncurses based file manager with vi like keybindings. If you + use vi, vifm gives you complete keyboard control over your files with- + out having to learn a new set of commands. + +OPTIONS + vifm starts in the current directory unless it is given a different + directory on the command line. + + <lwinpath> + Starts Vifm in the specified path. + + <lwinpath> <rwinpath> + Starts Vifm in the specified paths. + + Specifying two directories triggers split view even when vifm was in + single-view mode on finishing previous session. To suppress this be- + haviour :only command can be put in the vifmrc file. + + When only one path argument is found on command-line, the left/top pane + is automatically set as the current view. + + Paths to files are also allowed in case you want vifm to start with + some archive opened. If you want to select file, prepend its path with + --select. + + -f Makes vifm instead of opening files write selection to + $VIFM/vimfiles and quit. + + --choose-files <path>|- + Sets output file to write selection into on exit instead of + opening files. "-" means standard output. Use empty value to + disable it. + + --choose-dir <path>|- + Sets output file to write last visited directory into on exit. + "-" means standard output. Use empty value to disable it. + + --delimiter <delimiter> + Sets separator for list of file paths written out by vifm. + Empty value means null character. Default is new line charac- + ter. + + --on-choose <command> + Sets command to be executed on selected files instead of opening + them. The command may use any of macros described in "Command + macros" section below. The command is executed once for whole + selection. + + --logging + Log some errors to $VIFM/log. Also /var/log/vifm-startup-log + (on *nix) and startup-log in the directory of executable (on + Windows) is used to log startup process (when configuration + directory isn't determined). + + --remote + Sends the rest of command line to the active vifm server (one of + already running instances if any). When there is no server, + quits silently. There is no limit on how many arguments can be + processed. One can combine --remote with -c <command> or +<com- + mand> to execute command in already running instance of vifm. + See also "Client-Server" section below. + + -c <command> or +<command> + Run command-line mode <command> on startup. Commands in such + arguments are executed in the order they appear in command line. + Commands with spaces or special symbols must be enclosed in dou- + ble or single quotes or all special symbols should be escaped + (the exact syntax strongly depends on shell). + + --help, -h + Show a brief command summary and exit vifm. + + --version, -v + Show version information and quit. + + --no-configs + Skip reading vifmrc and vifminfo. + + + See "Startup" section below for the explanations on $VIFM. + +General keys + Ctrl-C or Escape + cancel most operations (see "Cancellation" section below), clear + all selected files. + + Ctrl-L clear and redraw the screen. + +Basic Movement + The basic vi key bindings are used to move through the files and pop-up + windows. + + k, gk, or Ctrl-P + move cursor up one line. + + j, gj or Ctrl-N + move cursor down one line. + + h when 'lsview' is off move up one directory, otherwise move left + one file. + + l when 'lsview' is off move into a directory or launches a file, + otherwise move right one file. + + gg move to the first line of the file list. + + G move to the last line in the file list. + + gh go up one directory. + + gl or Enter + enter directory or launch a file. + + H move to the first file in the window. + + M move to the file in the middle of the window. + + L move to the last file in the window. + + Ctrl-F or Page Down + move forward one page. + + Ctrl-B or Page Up + move back one page. + + Ctrl-D jump back one half page. + + Ctrl-U jump forward one half page. + + n% move to the file that is n percent from the top of the list (for + example 25%). + + 0 or ^ move cursor to the first column. See 'lsview' option descrip- + tion. + + $ move cursor to the last column. See 'lsview' option descrip- + tion. + + Space switch file lists. + +Movement with Count + Most movement commands also accept a count, 12j would move down 12 + files. + + [count]% + move to percent of the file list. + + [count]j + move down [count] files. + + [count]k + move up [count] files. + + [count]G or [count]gg + move to list position [count]. + +Scrolling panes + zt redraw pane with file in top of list. + + zz redraw pane with file in center of list. + + zb redraw pane with file in bottom of list. + + Ctrl-E scroll pane one line down. + + Ctrl-Y scroll pane one line up. + +Pane manipulation + Second character can be entered with or without Control key. + + Ctrl-W H + move the pane to the far left. + + Ctrl-W J + move the pane to the very bottom. + + Ctrl-W K + move the pane to the very top. + + Ctrl-W L + move the pane to the far right. + + + Ctrl-W h + switch to the left pane. + + Ctrl-W j + switch to the pane below. + + Ctrl-W k + switch to the pane above. + + Ctrl-W l + switch to the right pane. + + + Ctrl-W b + switch to bottom-right window. + + Ctrl-W t + switch to top-left window. + + + Ctrl-W p + switch to previous window. + + Ctrl-W w + switch to other pane. + + + Ctrl-W o + leave only one pane. + + Ctrl-W s + split window horizontally. + + Ctrl-W v + split window vertically. + + + Ctrl-W x + exchange panes. + + Ctrl-W z + quit preview pane or view modes. + + + Ctrl-W - + decrease size of the view by count. + + Ctrl-W + + increase size of the view by count. + + Ctrl-W < + decrease size of the view by count. + + Ctrl-W > + increase size of the view by count. + + + Ctrl-W | + maximize current view. + + Ctrl-W _ + maximize current view. + + Ctrl-W = + make size of two views equal. + + For Ctrl-W +, Ctrl-W -, Ctrl-W < and Ctrl-W > commands count can be + given before and/or after Ctrl-W. The resulting count is a multiplica- + tion of those two. So "2 Ctrl-W 2 -" decreases window size by 4 lines + or columns. + +Marks + Marks are set the same way as they are in vi. + + You can use this characters for marks [a-z][A-Z][0-9]. + + m[a-z][A-Z][0-9] + set a mark for the file at the current cursor position. + + '[a-z][A-Z][0-9] + navigate to the file set for the mark. + + + There are also several special marks that can't be set manually: + + - ' (single quote) - previously visited directory of the view, thus + hitting '' allows switching between two last locations + + - < - the first file of the last visually selected block + + - > - the last file of the last visually selected block + +Searching + /regular expression pattern + search for files matching regular expression in forward direc- + tion and advance cursor to next match. + + / perform forward search with top item of search pattern history. + + ?regular expression pattern + search for files matching regular expression in backward direc- + tion and advance cursor to previous match. + + ? perform backward search with top item of search pattern history. + + Matches are automatically selected if 'hlsearch' is set. Enabling + 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' + options affect case sensitivity of search queries. + + + [count]n + go to the next file matching last search pattern. Takes last + search direction into account. + + [count]N + go to the previous file matching last search pattern. Takes + last search direction into account. + + If 'hlsearch' option is set, hitting n/N to perform search and go to + the first matching item resets current selection in normal mode. It is + not the case if search was already performed on files in the directory, + thus selection is not reset after clearing selection with escape key + and hitting n/N key again. + + Note: vifm uses extended regular expressions for / and ?. + + + [count]f[character] + search forward for file with [character] as first character in + name. Search wraps around the end of the list. + + [count]F[character] + search backward for file with [character] as first character in + name. Search wraps around the end of the list. + + [count]; + find the next match of f or F. + + [count], + find the previous match of f or F. + + Note: f, F, ; and , wrap around list beginning and end when they are + used alone and they don't wrap when they are used as selectors. + +File Filters + There are three basic file filters: + + - dot files filter (excluding "." and ".." special directories, which + appearance is controlled by the 'dotdirs' option); + + - manual filter for file names; + + - automatic filter for file names; + + - local filter for file names (see description of the "=" normal mode + command). + + Performing operations on manual filter for file names automatically + does the same on automatic one. The file name filter is separated + mainly for convenience purpose and to get more deterministic behaviour. + + The basic vim folding key bindings are used for filtering files. + + Each file list has its own copy of each filter. + + Filtered files are not checked in / search or :commands. + + Files and directories are filtered separately. For this a slash is + appended to a directory name before testing whether it matches the fil- + ter. Examples: + + + " filter directories which names end with '.files' + :filter /^.*\.files\/$/ + + " filter files which names end with '.d' + :filter /^.*\.d$/ + + " filter files and directories which names end with '.o' + :filter /^.*\.o\/?$/ + + za toggle visibility of dot files. + + zo show dot files. + + zm hide dot files. + + zf add selected files to file name filter. + + zO show files hidden by file name filter. + + zM restore all filters. + + zR remove all filters. + + zd exclude selection or current file from custom view. Does noth- + ing for regular view. + + =regular expression pattern + filter out files that don't match regular expression. Whether + view is updated as regular expression is changed depends on the + value of the 'incsearch' option. This kind of filter is auto- + matically reset when directory is changed. + +Other Normal Mode Keys + [count]: + enter command line mode. [count] generates range. + + q: open external editor to prompt for command-line command. See + "Command line editing" section for details. + + q/ open external editor to prompt for search pattern to be searched + in forward direction. See "Command line editing" section for + details. + + q? open external editor to prompt for search pattern to be searched + in backward direction. See "Command line editing" section for + details. + + q= open external editor to prompt for filter pattern. See "Command + line editing" section for details. Unlike other q{x} commands + this one doesn't work in Visual mode. + + [count]!! and [count]!<selector> + enter command line mode with entered ! command. [count] modi- + fies range. + + Ctrl-O go backwards through directory history of current view. Nonex- + istent directories are automatically skipped. + + Ctrl-I if 'cpoptions' contains "t" flag, <tab> and <c-i> switch active + pane just like <space> does, otherwise it goes forward through + directory history of current view. Nonexistent directories are + automatically skipped. + + Ctrl-G create a window showing detailed information about the current + file. + + Shift-Tab + enters view mode (works only after activating view pane with + :view command). + + ga calculate directory size. Uses cached directory sizes when pos- + sible for better performance. + + gA like ga, but force update. Ignores old values of directory + sizes. + + If file under cursor is selected, each selected item is processed, oth- + erwise only current file is updated. + + gf find link destination (like l with 'followlinks' off, but also + finds directories). + + gr only for MS-Windows + same as l key, but tries to run program with administrative + privileges. + + av go to visual mode into selection amending state preserving cur- + rent selection. + + gv go to visual mode restoring last selection. + + gs restore last t selection, like gv for visual mode selection. + + gu<selector> + make names of selected files lowercase. + + [count]guu and [count]gugu + make names of [count] files starting from the current one lower- + case. Without [count] only current file is affected. + + gU<selector> + make names of selected files uppercase. + + [count]gUU and [count]gUgU + make names of [count] files starting from the current one upper- + case. Without [count] only current file is affected. + + e explore file in the current pane. + + i handle file (even if it's an executable and 'runexec' option is + set). + + cw change word is used to rename a file or files. + + cW change WORD is used to change only name of file (without exten- + sion). + + cl change link target. + + co only for *nix + change file owner. + + cg only for *nix + change file group. + + cp change file attributes (permission on *nix and properties on + Windows). + + [count]C + clone file [count] times. + + [count]dd or d[count]selector + move selected file or files to trash directory (if 'trash' + option is set, otherwise delete). See "Trash directory" section + below. + + [count]DD or D[count]selector + like dd and d<selector>, but omitting trash directory (even when + 'trash' option is set). + + Y, [count]yy or y[count]selector + yank selected files. + + p copy yanked files to the current directory or move the files to + the current directory if they were deleted with dd or :d[elete] + or if the files were yanked from trash directory. See "Trash + directory" section below. + + P move the last yanked files. The advantage of using P instead of + d followed by p is that P moves files only once. This isn't + important in case you're moving files in the same file system + where your home directory is, but using P to move files on some + other file system (or file systems, in case you want to move + files from fs1 to fs2 and your home is on fs3) can save your + time. + + al put symbolic links with absolute paths. + + rl put symbolic links with relative paths. + + t select or unselect (tag) the current file. + + u undo last change. + + Ctrl-R redo last change. + + v or V enter visual mode, clears current selection. + + [count]Ctrl-A + increment first number in file name by [count] (1 by default). + + [count]Ctrl-X + decrement first number in file name by [count] (1 by default). + + ZQ same as :quit!. + + ZZ same as :quit. + + . repeat last command-line command (not normal mode command) of + this session (does nothing right after startup or :restart com- + mand). The command doesn't depend on command-line history and + can be used with completely disabled history. + + ( goto previous group. Groups are defined by primary sorting key. + For name and iname members of each group have same first letter, + for all other sorting keys vifm uses size, uid, ... + + ) goto next group. See ( key description above. + +Using Count + You can use count with commands like yy. + + [count]yy + yank count files starting from current cursor position downward. + + Or you can use count with motions passed to y, d or D. + + d[count]j + delete (count + 1) files starting from current cursor position + upward. + +Registers + vifm supports multiple registers for temporary storing list of yanked + or deleted files. + + Registers should be specified by hitting double quote key followed by a + register name. Count is specified after register name. By default + commands use unnamed register, which has double quote as its name. + + Though all commands accept registers, most of commands ignores them + (for example H or Ctrl-U). Other commands can fill register or append + new files to it. + + Presently vifm supports ", _, a-z and A-Z characters as register names. + + As mentioned above " is unnamed register and has special meaning of the + default register. Every time when you use named registers (a-z and A- + Z) unnamed register is updated to contain same list of files as the + last used register. + + _ is black hole register. It can be used for writing, but its list is + always empty. + + Registers with names from a to z and from A to Z are named ones. Low- + ercase registers are cleared before adding new files, while uppercase + aren't and should be used to append new files to the existing file list + of appropriate lowercase register (A for a, B for b, ...). + + Registers can be changed on :empty command if they contain files under + trash directory (see "Trash directory" section below). + + Registers do not contain one file more than once. + + Example: + + "a2yy + + puts names of two files to register a (and to the unnamed register), + + "Ad + + removes one file and append its name to register a (and to the unnamed + register), + + p or "ap or "Ap + + inserts previously yanked and deleted files into current directory. + +Selectors + y, d, D, !, gu and gU commands accept selectors. You can combine them + with any of selectors below to quickly remove or yank several files. + + Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, + ;, comma, ', ^, 0 and $. But there are some additional ones. + + a all files in current view. + + s selected files. + + S all files except selected. + + Examples: + + - dj - delete file under cursor and one below; + + - d2j - delete file under cursor and two below; + + - y6gg - yank all files from cursor position to 6th file in the list. + + When you pass a count to whole command and its selector they are multi- + plied. So: + + - 2d2j - delete file under cursor and four below; + + - 2dj - delete file under cursor and two below; + + - 2y6gg - yank all files from cursor position to 12th file in the + list. + +Visual Mode + Visual mode has to generic operating submodes: + + - plain selection as it is in Vim; + + - selection editing submode. + + Both modes select files in range from cursor position at which visual + mode was entered to current cursor position (let's call it "selection + region"). Each of two borders can be adjusted by swapping them via "o" + or "O" keys and updating cursor position with regular cursor motion + keys. Obviously, once initial cursor position is altered this way, + real start position becomes unavailable. + + Plain Vim-like visual mode starts with cleared selection, which is not + restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- + trary to it, selection editing doesn't clear previously selected files + and restores them after reject. Accepting selection by performing an + operation on selected items (e.g. yanking them via "y") moves cursor to + the top of current selection region (not to the top most selected file + of the view). + + In turn, selection editing supports three types of editing (look at + statusbar to know which one is currently active): + + - append - amend selection by selecting elements in selection region; + + - remove - amend selection by deselecting elements in selection + region; + + - invert - amend selection by inverting selection of elements in + selection region. + + No matter how you activate selection editing it starts in "append". + One can switch type of operation (in the order given above) via "Ctrl- + G" key. + + Almost all normal mode keys work in visual mode, but instead of accept- + ing selectors they operate on selected items. + + Enter save selection and go back to normal mode not moving cursor. + + av leave visual mode if in amending mode (restores previous selec- + tion), otherwise switch to amending selection mode. + + gv restore previous visual selection. + + v, V, Ctrl-C or Escape + leave visual mode if not in amending mode, otherwise switch to + normal visual selection. + + Ctrl-G switch type of amending by round robin scheme: append -> remove + -> invert. + + : enter command line mode. Selection is cleared on leaving the + mode. + + o switch active selection bound. + + O switch active selection bound. + + gu, u make names of selected files lowercase. + + gU, U make names of selected files uppercase. + +View Mode + This mode tries to imitate the less program. List of builtin shortcuts + can be found below. Shortcuts can be customized using :qmap, :qnoremap + and :qunmap command-line commands. + + Shift-Tab, Tab, q, Q, ZZ + return to normal mode. + + [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter + scroll forward one line (or [count] lines). + + [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P + scroll backward one line (or [count] lines). + + [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space + scroll forward one window (or [count] lines). + + [count]b, [count]Ctrl-B, [count]Alt-V + scroll backward one window (or [count] lines). + + [count]z + scroll forward one window (and set window to [count]). + + [count]w + scroll backward one window (and set window to [count]). + + [count]Alt-Space + scroll forward one window, but don't stop at end-of-file. + + [count]d, [count]Ctrl-D + scroll forward one half-window (and set half-window to [count]). + + [count]u, [count]Ctrl-U + scroll backward one half-window (and set half-window to + [count]). + + r, Ctrl-R, Ctrl-L + repaint screen. + + R reload view preserving scroll position. + + F toggle automatic forwarding. Roughly equivalent to periodic + file reload and scrolling to the bottom. The behaviour is simi- + lar to `tail -F` or F key in less. + + [count]/pattern + search forward for ([count]-th) matching line. + + [count]?pattern + search backward for ([count]-th) matching line. + + [count]n + repeat previous search (for [count]-th occurrence). + + [count]N + repeat previous search in reverse direction (for [count]-th + occurrence). + + [count]g, [count]<, [count]Alt-< + scroll to the first line of the file (or line [count]). + + [count]G, [count]>, [count]Alt-> + scroll to the last line of the file (or line [count]). + + [count]p, [count]% + scroll to the beginning of the file (or N percent into file). + + v invoke an editor to edit the current file being viewed. The + command for editing is taken from the 'vicmd'/'vixcmd' option + value and extended with middle line number prepended by a plus + sign and name of the current file. + + All "Ctrl-W x" keys work the same was as in Normal mode. Active mode + is automatically changed on navigating among windows. When less-like + mode activated on file preview is left using one by "Ctrl-W x" keys, + its state is stored until another file is displayed using preview (it's + possible to leave the mode, hide preview pane, do something else, then + get back to the file and show preview pane again with previously stored + state in it). + +Command line Mode + These keys are available in all submodes of the command line mode: com- + mand, search, prompt and filtering. + + Down, Up, Left, Right, Home, End and Delete are extended keys and they + are not available if vifm is compiled with --disable-extended-keys + option. + + Esc, Ctrl-C + leave command line mode, cancels input. Cancelled input is + saved into appropriate history and can be recalled later. + + Ctrl-M, Enter + execute command and leave command line mode. + + Ctrl-I, Tab + complete command or its argument. + + Shift-Tab + complete in reverse order. + + Ctrl-_ stop completion and return original input. + + Ctrl-B, Left + move cursor to the left. + + Ctrl-F, Right + move cursor to the right. + + Ctrl-A, Home + go to line beginning. + + Ctrl-E, End + go to line end. + + Alt-B go to the beginning of previous word. + + Alt-F go to the end of next word. + + Ctrl-U remove characters from cursor position till the beginning of + line. + + Ctrl-K remove characters from cursor position till the end of line. + + Ctrl-H, Backspace + remove character before the cursor. + + Ctrl-D, Delete + remove character under the cursor. + + Ctrl-W remove characters from cursor position till the beginning of + previous word. + + Alt-D remove characters from cursor position till the beginning of + next word. + + Ctrl-T swap the order of current and previous character and move cursor + forward or, if cursor past the end of line, swap the order of + two last characters in the line. + + Alt-. insert last part of previous command to current cursor position. + Each next call will insert last part of older command. + + Ctrl-G edit command-line content in external editor. See "Command line + editing" section for details. + + Ctrl-N recall more recent command-line from history. + + Ctrl-P recall older command-line from history. + + Up recall more recent command-line from history, that begins as the + current command-line. + + Down recall older command-line from history, that begins as the cur- + rent command-line. + + Ctrl-] trigger abbreviation expansion. + +Pasting special values + The shortcuts listed below insert specified values into current cursor + position. Last key of every shortcut references value that it inserts: + - c - [c]urrent file + - d - [d]irectory path + - e - [e]xtension of a file name + - r - [r]oot part of a file name + - t - [t]ail part of directory path + + - a - [a]utomatic filter + - m - [m]anual filter + - = - local filter, which is bound to "=" in normal mode + + Values related to filelist in current pane are available through Ctrl-X + prefix, while values from the other pane have doubled Ctrl-X key as + their prefix (doubled Ctrl-X is presumably easier to type than upper- + case letters; it's still easy to remap the keys to correspond to names + of similar macros). + + Ctrl-X c + name of the current file of the active pane. + + Ctrl-X d + path to the current directory of the active pane. + + Ctrl-X e + extension of the current file of the active pane. + + Ctrl-X r + name root of current file of the active pane. + + Ctrl-X t + the last component of path to the current directory of the + active pane. + + Ctrl-X Ctrl-X c + name of the current file of the inactive pane. + + Ctrl-X Ctrl-X d + path to the current directory of the inactive pane. + + Ctrl-X Ctrl-X e + extension of the current file of the inactive pane. + + Ctrl-X Ctrl-X r + name root of current file of the inactive pane. + + Ctrl-X Ctrl-X t + the last component of path to the current directory of the inac- + tive pane. + + + Ctrl-X a + value of automatic filter of the active pane. + + Ctrl-X m + value of manual filter of the active pane. + + Ctrl-X = + value of local filter of the active pane. + + + Ctrl-X / + last pattern from search history. + +Command line editing + vifm provides a facility to edit several kinds of data, that is usually + edited in command-line mode, in external editor (using command speci- + fied by 'vicmd' or 'vixcmd' option). This has at least two advantages + over built-in command-line mode: + - one can use full power of Vim to edit text; + - finding and reusing history entries becomes possible. + + The facility is supported by four input submodes of the command-line: + - command; + - forward search; + - backward search; + - file rename (see description of cw and cW normal mode keys). + + Editing command-line using external editor is activated by the Ctrl-G + shortcut. It's also possible to do almost the same from Normal and + Visual modes using q:, q/ and q? commands. + + Temporary file created for the purpose of editing the line has the fol- + lowing structure: + + 1. First line, which is either empty or contains text already entered + in command-line. + + 2. 2nd and all other lines with history items starting with the most + recent one. Altering this lines in any way won't change history + items stored by vifm. + + After editing application is finished the first line of the file is + taken as the result of operation, when the application returns zero + exit code. If the application returns an error (see :cquit command in + Vim), all the edits made to the file are ignored, but the initial value + of the first line is saved in appropriate history. + +Commands + Commands are executed with :command_name<Enter> + + Commented out lines should start with the double quote symbol, which + may be preceded by whitespace characters. + + Most of the commands have two forms: complete and the short one. Exam- + ple: + + :noh[lsearch] + + This means the complete command is nohlsearch, and the short one is + noh. + + Most of command-line commands completely reset selection in the current + view. However, there are several exceptions: + + - ":invert s" most likely leaves some files selected; + + - :if and :else commands doesn't affect selection on successful exe- + cution. + + '|' can be used to separate commands, so you can give multiple commands + in one line. If you want to use '|' in an argument, precede it with + '\'. + + These commands see '|' as part of their arguments even when it's + escaped: + + :[range]! + :cmap + :cnoremap + :command + :filetype + :fileviewer + :filextype + :map + :mmap + :mnoremap + :nmap + :nnoremap + :noremap + :normal + :qmap + :qnoremap + :vmap + :vnoremap + :windo + :winrun + + To be able to use another command after one of these, wrap it with the + :execute command. An example: + + if filetype('.') == 'reg' | execute '!!echo regular file' | endif + + :[count] + + :number + move to the file number. + :12 would move to the 12th file in the list. + :0 move to the top of the list. + :$ move to the bottom of the list. + + :[count]command + The only builtin :[count]command are :[count]d[elete] and + :[count]y[ank]. + + :d3 would delete three files starting at the current file position + moving down. + + :3d would delete one file at the third line in the list. + + :command [args] + + :[range]!program + execute command via shell. Accepts macros. + + :[range]!command & + + same as above, but the command is run in the background using vifm's + means. + + Programs that write to stdout like "ls" create an error message showing + partial output of the command. + + Note the space before ampersand symbol, if you omit it, command will be + run in the background using job control of your shell. + + Accepts macros. + + :!! + + :[range]!!command + same as :!, but pauses before returning. + + :!! repeat the last command. + + :alink + + :[range]alink[!?] + create absolute symbolic links to files in directory of inactive + view. With "?" prompts for destination file names in an edi- + tor. "!" forces overwrite. + + :[range]alink[!] path + create absolute symbolic links to files in directory specified + by the path (absolute or relative to directory of inactive + view). + + :[range]alink[!] name1 name2... + create absolute symbolic links of files in directory of other + view giving each next link a corresponding name from the argu- + ment list. + + :apropos + + :apropos manpage + create a menu of items returned by the apropos command. Select- + ing an item in the menu opens corresponding man page. By + default the command relies on the external "apropos" utility, + which can be customized by altering value of the 'aproposprg' + option. + + :apropos + repeat last :apropos command. + + :cabbrev + + :ca[bbrev] + display menu of command-line mode abbreviations. + + :ca[bbrev] lhs-prefix + display command-line mode abbreviations which left-hand side + starts with specified prefix. + + :ca[bbrev] lhs rhs + register new or overwrites existing abbreviation for command- + line mode. rhs can contain spaces and any special sequences + accepted in rhs of mappings (see "Mappings" section below). + Abbreviations are expanded non-recursively. + + :cnoreabbrev + + :cnorea[bbrev] + display menu of command-line mode abbreviations. + + :cnorea[bbrev] lhs-prefix + display command-line mode abbreviations which left-hand side + starts with specified prefix. + + :cnorea[bbrev] lhs rhs + same as :cabbrev, but mappings in rhs are ignored during expan- + sion. + + :cd + + :cd or :cd ~ or :cd $HOME + change to home directory. + + :cd - go to the last visited directory. + + :cd ~/dir + change directory to ~/dir. + + :cd /curr/dir /other/dir + change directory of the current pane to /curr/dir and directory + of the other pane to /other/dir. Relative paths are assumed to + be relative to directory of current view. Command won't fail if + one of directories is invalid. All forms of the command accept + macros. + + :cd! /dir + same as :cd /dir /dir. + + :change + + :c[hange] + create a menu window to alter a files properties. + + :chmod + + :[range]chmod + display file attributes (permission on *nix and properties on + Windows) change dialog. + + :[range]chmod[!] arg... + only for *nix + change permissions for files. See `man 1 chmod` for arg format. + "!" means set permissions recursively. + + :chown + + :[range]chown + only for *nix + same as co key in normal mode. + + :[range]chown [user][:][group] + only for *nix + change owner and/or group of files. Operates on directories + recursively. + + :clone + + :[range]clone[!?] + clones files in current directory. With "?" vifm will open vi + to edit file names. "!" forces overwrite. Macros are expanded. + + :[range]clone[!] path + clones files to directory specified with the path (absolute or + relative to current directory). "!" forces overwrite. Macros + are expanded. + + :[range]clone[!] name1 name2... + clones files in current directory giving each next clone a cor- + responding name from the argument list. "!" forces overwrite. + Macros are expanded. + + :colorscheme + + :colo[rscheme]? + print current color scheme name on the status bar. + + :colo[rscheme] + display a menu with a list of available color schemes. You can + choose primary color scheme here. It is used for view if no + directory specific colorscheme fits current path. It's also + used to set border color (except view titles) and colors in + menus and dialogs. + + :colo[rscheme] color_scheme_name + change primary color scheme to color_scheme_name. In case of + errors (e.g. some colors are not supported by terminal) either + nothing is changed or color scheme is reset to builtin colors to + ensure that TUI is left in a usable state. + + :colo[rscheme] color_scheme_name directory + associate directory with the color scheme. The directory argu- + ment can be either absolute or relative path when :colorscheme + command is executed from command line, but mandatory should be + an absolute path when the command is executed in scripts loaded + at startup (until vifm is completely loaded). + + :comclear + + :comc[lear] + remove all user defined commands. + + :command + + :com[mand] + display a menu of user commands. + + :com[mand] beginning + display user defined commands that start with the beginning. + + :com[mand] name action + set a new user command. + Trying to use a reserved command name will result in an error + message. + Use :com[mand]! to overwrite a previously set command. + Unlike vim user commands do not have to start with a capital + letter. User commands are run in a shell by default. To run a + command in the background you must set it as a background com- + mand with & at the end of the commands action (:com rm rm %f &). + Command name cannot contain numbers or special symbols (except + '?' and '!'). + + :com[mand] name /pattern + set search pattern. + + :com[mand] name =pattern + set local filter value. + + :com[mand] name filter{:filter args} + set file name filter (see :filter command description). For + example: + + " display only audio files + :command onlyaudio filter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i + " display everything except audio files + :command noaudio filter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i + + :com[mand] cmd :commands + set kind of an alias for internal command (like in a shell). + Passes range given to alias to an aliased command, so running + :%cp after + :command cp :copy %a + equals + :%copy + + :copy + + :[range]co[py][!?][ &] + copy files to directory of other view. With "?" prompts for + destination file names in an editor. "!" forces overwrite. + + :[range]co[py][!] path[ &] + copy files to directory specified with the path (absolute or + relative to directory of other view). "!" forces overwrite. + + :[range]co[py][!] name1 name2...[ &] + copy files to directory of other view giving each next file a + corresponding name from the argument list. "!" forces over- + write. + + :cquit + + :cq[uit][!] + same as :quit, but also aborts directory choosing via + --choose-dir (empties output file) and returns non-zero exit + code. + + :cunabbrev + + :cuna[bbrev] lhs + unregister command-line mode abbreviation by its lhs. + + :cuna[bbrev] rhs + unregister command-line mode abbreviation by its rhs, so that + abbreviation could be removed even after expansion. + + :delete + + :[range]d[elete][!][ &] + delete selected file or files. "!" means complete removal + (omitting trash). + + :[range]d[elete][!] [reg] [count][ &] + delete selected or [count] files to the reg register. "!" means + complete removal (omitting trash). + + :delcommand + + :delc[ommand] user_command + remove user defined command named user_command. + + :delmarks + + :delm[arks]! + delete all marks. + + :delm[arks] marks ... + delete specified marks, each argument is treated as a set of + marks. + + :display + + :di[splay] + display menu with registers content. + + :di[splay] list ... + display the contents of the numbered and named registers that + are mentioned in list (for example "az to display "", "a and "z + content). + + :dirs + + :dirs display directory stack. + + :echo + + :ec[ho] [<expr>...] + evaluate each argument as an expression and output them sepa- + rated with a space. See help on :let command for a definition + of <expr>. + + :edit + + :[range]e[dit] [file...] + open selected or passed file(s) in editor. Accepts macros. + + :else + + :el[se] + execute commands until next matching :endif if they previously + were not being executed. See also help on :if and :endif com- + mands. + + :empty + + :empty permanently remove files from all existing non-empty trash + directories (see "Trash directory" section below). Also remove + all operations from undolist that have no sense after :empty and + remove all records about files located inside directories from + all registers. Removal is performed as background task with + undetermined amount of work and can be checked via :jobs menu. + + :endif + + :en[dif] + end conditional block. See also help on :if and :else commands. + + :execute + + :exe[cute] [<expr>...] + evaluate each argument as an expression and join results sepa- + rated by a space to get a single string which is then executed + as a command-line command. See help on :let command for a defi- + nition of <expr>. + + :exit + + :exi[t][!] + same as :quit. + + :file + + :f[ile][ &] + display menu of programs set for the file type of the current + file. " &" forces running associated program in background. + + :f[ile] arg[ &] + run associated command that begins with the arg skipping opening + menu. " &" forces running associated program in background. + + :filetype + + :filet[ype] pat1,pat2,... [{descr}]def_prog[ &],[{descr}]prog2[ &],... + associate given program list to each of the patterns. Associ- + ated program (command) is used by handlers of l and Enter keys + (and also in the :file menu). If you need to insert comma into + command just double it (",,"). Space followed by an ampersand + as two last characters of a command means running of the command + in the background. Optional description can be given to each + command to ease understanding of what command will do in the + :file menu. Vifm will try the rest of the programs for an asso- + ciation when the default isn't found. When program entry + doesn't contain any of vifm macros, name of current file is + appended as if program entry ended with %c macro on *nix and %"c + on Windows. On Windows path to executables containing spaces + can (and should be for correct work with such paths) be double + quoted. See "Patterns" section below for pattern definition. + See also "Automatic FUSE mounts" section below. Example for zip + archives and several actions: + + filetype *.zip,*.jar,*.war,*.ear + \ {Mount with fuse-zip} + \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, + \ {View contents} + \ zip -sf %c | less, + \ {Extract here} + \ tar -xf %c, + + :filet[ype] filename + list (in menu mode) currently registered patterns that match + specified file name. Same as ":filextype filename". + + :filextype + + :filex[type] pat1,pat2,... [{ description }] def_program,program2,... + same as :filetype, but this command is ignored if not running in + X. In X :filextype is equal to :filetype. See "Patterns" sec- + tion below for pattern definition. See also "Automatic FUSE + mounts" section below. + + For example, consider the following settings (the order might + seem strange, but it's for the demonstration purpose): + + filetype *.html,*.htm + \ {View in lynx} + \ lynx + filextype *.html,*.htm + \ {Open with dwb} + \ dwb %f %i &, + filetype *.html,*.htm + \ {View in links} + \ links + filextype *.html,*.htm + \ {Open with firefox} + \ firefox %f &, + \ {Open with uzbl} + \ uzbl-browser %f %i &, + + If you're using vifm inside a terminal emulator that is running + in graphical environment (when X is used on *nix; always on Win- + dows), vifm attempts to run application in this order: + + 1. lynx + 2. dwb + 3. links + 4. firefox + 5. uzbl + + If there is no graphical environment (checked presence of $DIS- + PLAY environment variable on *nix; never happens on Windows), + the list will look like: + + 1. lynx + 2. links + + Just as if all :filextype commands were not there. + + The purpose of such differentiation is to allow comfortable use + of vifm with same settings in desktop environment/through remote + connection (SSH)/in native console. + + :filext[ype] filename + list (in menu mode) currently registered patterns that match + specified file name. Same as ":filetype filename". + + :fileviewer + + :filev[iewer] pat1,pat2,... command1,command2,... + register specified list of commands as viewers for each of the + patterns. Viewer is a command which output is captured and dis- + played in the second pane of vifm after running :view command. + When the command doesn't contain any of vifm macros, name of + current file is appended as if command ended with %c macro. + Comma escaping and missing commands processing rules as for + :filetype apply to this command. See "Patterns" section below + for pattern definition. + + Example for zip archives: + + fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to preview:" + + :filev[iewer] filename + list (in menu mode) currently registered patterns that match + specified filename. + + :filter + + :filter[!] regular_expression_pattern + + :filter[!] /regular_expression_pattern/[flags] + will filter all the files out of the directory listing that + match the regular expression. Using second variant you can use + the bar ('|') symbol without escaping. Empty regular expression + (specified by //, "" or '') means using of the last search pat- + tern. Use '!' to control state of filter inversion after updat- + ing filter value (also see 'cpoptions' description). Filter is + matched case sensitively on *nix and case insensitively on Win- + dows. + + Supported flags: + - "i" makes filter case insensitive; + - "I" makes filter case sensitive. + + Flags might be repeated multiple times, later ones win (e.g. + "iiiI" is equivalent to "I" and "IiIi" is the same as "i"). + + " filter all files ending in .o from the filelist. + :filter /.o$/ + + Note: vifm uses extended regular expressions. + + :filter + reset filter (set it to empty string) and show all files. + + :filter! + same as :invert. + + :filter? + show information on local, name and auto filters. + + :find + + :[range]fin[d] pattern + display results of find command in the menu. Searches among + selected files if any. Accepts macros. By default the command + relies on the external "find" utility, which can be customized + by altering value of the 'findprg' option. + + :[range]fin[d] -opt... + same as :find above, but user defines all find arguments. + Searches among selected files if any. + + :[range]fin[d] path -opt... + same as :find above, but user defines all find arguments. + Ignores selection and range. + + :[range]fin[d] + repeat last :find command. + + :finish + + :fini[sh] + stop sourcing a script. Can only be used in a vifm script file. + This is a quick way to skip the rest of the file. + + :grep + + :[range]gr[ep][!] pattern + will show results of grep command in the menu. Add "!" to + request inversion of search (look for lines that do not match + pattern). Searches among selected files if any and no range + given. Ignores binary files by default. By default the command + relies on the external "grep" utility, which can be customized + by altering value of the 'grepprg' option. + + :[range]gr[ep][!] -opt... + same as :grep above, but user defines all grep arguments, which + are not escaped. Searches among selected files if any. + + :[range]gr[ep][!] + repeats last :grep command. "!" of this command inverts "!" in + repeated command. + + :help + + :h[elp] + show the help file. + + :h[elp] argument + is the same as using ':h argument' in vim. Use vifm-<something> + to get help on vifm (tab completion works). This form of the + command doesn't work when 'vimhelp' option is off. + + :highlight + + :hi[ghlight] + will show information about all highlight groups in the current + directory. + + :hi[ghlight] clear + will reset all highlighting to builtin defaults. + + :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) + will show information on given highlight group or file name pat- + tern of color scheme used in the active view. + + :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) + cterm=style | ctermfg=color | ctermbg=color + sets style (cterm), foreground (ctermfg) or/and background + (ctermbg) parameters of highlight group or file name pattern for + color scheme used in the active view. + + All style values as well as color names are case insensitive. + + Available style values (some of them can be combined): + - bold + - underline + - reverse or inverse + - standout + - none + + Available group-name values: + - Win - color of all windows (views, dialogs, menus) and default color + for their content (e.g. regular files in views) + - Border - color of vertical parts of the border + - TopLineSel - top line color of the current pane + - TopLine - top line color of the other pane + - CmdLine - the command line/status bar color + - ErrorMsg - color of error messages in the status bar + - StatusLine - color of the line above the status bar + - JobLine - color of job line that appears above the status line + - WildMenu - color of the wild menu items + - CurrLine - line at cursor position in active view + - OtherLine - line at cursor position in inactive view + - Selected - color of selected files + - Directory - color of directories + - Link - color of symbolic links in the views + - BrokenLink - color of broken symbolic links + - Socket - color of sockets + - Device - color of block and character devices + - Executable - color of executable files + - Fifo - color of fifo pipes + + Available colors: + - -1 or default or none - default or transparent + - black and lightblack + - red and lightred + - green and lightgreen + - yellow and lightyellow + - blue and lightblue + - magenta and lightmagenta + - cyan and lightcyan + - white and lightwhite + - 0-255 - corresponding colors from 256-color palette + + Light versions of colors are regular colors with bold attribute set. + So order of arguments of :highlight command is important and it's bet- + ter to put "cterm" in front of others to prevent it from overwriting + attributes set by "ctermfg" or "ctermbg" arguments. + + For convenience of color scheme authors xterm-like names for 256 color + palette is also supported. The mapping is taken from + http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- + cated entries were altered by adding an underscore followed by numeri- + cal suffix. + + 0 Black 86 Aquamarine1 172 Orange3 + 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 + 2 Green 88 DarkRed_2 174 LightPink3 + 3 Yellow 89 DeepPink4_2 175 Pink3 + 4 Blue 90 DarkMagenta 176 Plum3 + 5 Magenta 91 DarkMagenta_2 177 Violet + 6 Cyan 92 DarkViolet 178 Gold3_2 + 7 White 93 Purple 179 LightGoldenrod3 + 8 LightBlack 94 Orange4_2 180 Tan + 9 LightRed 95 LightPink4 181 MistyRose3 + 10 LightGreen 96 Plum4 182 Thistle3 + 11 LightYellow 97 MediumPurple3 183 Plum2 + 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 + 13 LightMagenta 99 SlateBlue1 185 Khaki3 + 14 LightCyan 100 Yellow4 186 LightGoldenrod2 + 15 LightWhite 101 Wheat4 187 LightYellow3 + 16 Grey0 102 Grey53 188 Grey84 + 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 + 18 DarkBlue 104 MediumPurple 190 Yellow2 + 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 + 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- + reen1_2 + 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 + 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 + 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 + 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 + 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 + 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 + 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 + 28 Green4 114 PaleGreen3_2 200 Magenta2_2 + 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 + 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 + 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 + 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 + 33 DodgerBlue1 119 LightGreen_2 205 HotPink + 34 Green3 120 LightGreen_3 206 HotPink_2 + 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 + 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange + 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 + 38 DeepSkyBlue2 124 Red3 210 LightCoral + 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 + 40 Green3_2 126 MediumVioletRed 212 Orchid2 + 41 SpringGreen3_2 127 Magenta3 213 Orchid1 + 42 SpringGreen2 128 DarkViolet_2 214 Orange1 + 43 Cyan3 129 Purple_2 215 SandyBrown + 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 + 45 Turquoise2 131 IndianRed 217 LightPink1 + 46 Green1 132 HotPink3 218 Pink1 + 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 + 48 SpringGreen1 134 MediumOrchid 220 Gold1 + 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- + rod2_2 + 50 Cyan2 136 DarkGoldenrod 222 LightGolden- + rod2_3 + 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 + 52 DarkRed 138 RosyBrown 224 MistyRose1 + 53 DeepPink4 139 Grey63 225 Thistle1 + 54 Purple4 140 MediumPurple2_2 226 Yellow1 + 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 + 56 Purple3 142 Gold3 228 Khaki1 + 57 BlueViolet 143 DarkKhaki 229 Wheat1 + 58 Orange4 144 NavajoWhite3 230 Cornsilk1 + 59 Grey37 145 Grey69 231 Grey100 + 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 + 61 SlateBlue3 147 LightSteelBlue 233 Grey7 + 62 SlateBlue3_2 148 Yellow3 234 Grey11 + 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 + 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 + 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 + 66 PaleTurquoise4 152 LightCyan3 238 Grey27 + 67 SteelBlue 153 LightSkyBlue1 239 Grey30 + 68 SteelBlue3 154 GreenYellow 240 Grey35 + 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 + 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 + 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 + 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 + 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 + 74 SkyBlue3 160 Red3_2 246 Grey58 + 75 SteelBlue1 161 DeepPink3 247 Grey62 + 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 + 77 PaleGreen3 163 Magenta3_2 249 Grey70 + 78 SeaGreen3 164 Magenta3_3 250 Grey74 + 79 Aquamarine3 165 Magenta2 251 Grey78 + 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 + 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 + 82 Chartreuse2 168 HotPink3_2 254 Grey89 + 83 SeaGreen2 169 HotPink2 255 Grey93 + 84 SeaGreen1 170 Orchid + 85 SeaGreen1_2 171 MediumOrchid1 + + There are two colors (foreground and background) and only one bold + attribute. Thus single bold attribute affects both colors when + "reverse" attribute is used in vifm run inside terminal emulator. At + the same time linux native console can handle boldness of foreground + and background colors independently, but for consistency with terminal + emulators this is available only implicitly by using light versions of + colors. This behaviour might be changed in the future. + + Although vifm supports 256 colors in a sense they are supported by UI + drawing library, whether you will be able to use all of them highly + depends on your terminal. To set up terminal properly, make sure that + $TERM in the environment you run vifm is set to name of 256-color ter- + minal (on *nixes it can also be set via X resources), e.g. + xterm-256color. One can find list of available terminal names by list- + ing /usr/lib/terminfo/. Number of colors supported by terminal with + current settings can be checked via "tput colors" command. + + Here is the hierarchy of highlight groups, which you need to know for + using transparency: + JobLine + StatusLine + WildMenu + Border + CmdLine + ErrorMsg + Win + File name specific highlights + Directory + Link + BrokenLink + Socket + Device + Fifo + Executable + Selected + CurrLine + OtherLine + TopLine + TopLineSel + + "none" means default terminal color for highlight groups at the first + level of the hierarchy and transparency for all others. + + Here file name specific highlights mean those configured via globs ({}) + or regular expressions (//). At most one of them is applied per file + entry, namely the first that matches file name, hence order of :high- + light commands might be important in certain cases. + + :history + + :his[tory] + creates a pop-up menu of directories visited. + + :his[tory] x + x can be: + d[ir] or . show directory history. + c[md] or : show command line history. + s[earch] or / show search history and search forward on l key. + f[search] or / show search history and search forward on l key. + b[search] or ? show search history and search backward on l key. + i[nput] or @ show prompt history (e.g. on one file renaming). + fi[lter] or = show filter history (see description of the "=" + normal mode command). + + :if + + :if {expr1} + starts conditional block. Commands are executed until next + matching :else of :endif command if {expr1} evaluates to non- + zero, otherwise they are ignored. See also help on :else and + :endif commands. + + Example: + + if $TERM == "screen.linux" + highlight CurrLine ctermfg=lightwhite ctermbg=lightblack + else + highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white + endif + + :invert + + :invert [f] + invert file name filter. + + :invert? [f] + show current filter state. + + :invert s + invert selection. + + :invert o + invert sorting order of the primary sorting key. + + :invert? o + show sorting order of the primary sorting key. + + :jobs + + :jobs shows menu of current backgrounded processes. + + :let + + :let $ENV_VAR = <expr> + sets environment variable. Warning: setting environment vari- + able to an empty string on Windows removes it. + + :let $ENV_VAR .= <expr> + append value to environment variable. + + Where <expr> could be a single-quoted string, double-quoted string, an + environment variable, function call or a concatanation of any of them + in any order using the '.' operator. Any whitespace is ignored. + + :locate + + :locate filename + use "locate" command to create a menu of filenames. Selecting a + file from the menu will reload the current file list in vifm to + show the selected file. By default the command relies on the + external "locate" utility (it's assumed that its database is + already built), which can be customized by altering value of the + 'locateprg' option. + + :locate + repeats last :locate command. + + :ls + + :ls lists windows of active terminal multiplexer (only when terminal + multiplexer is used). This is achieved by issuing proper com- + mand for active terminal multiplexer, thus the list is not han- + dled by vifm. + + :lstrash + + :lstrash + displays a menu with list of files in trash. Each element of + the list is original path of a deleted file, thus the list can + contain duplicates. + + :mark + + :[range]ma[rk][?] x [/full/path] [filename] + Set mark x (a-zA-Z0-9) at /full/path and filename. By default + current directory is being used. If no filename was given and + /full/path is current directory then last file in [range] is + used. Using of macros is allowed. Question mark will stop com- + mand from overwriting existing marks. + + :marks + + :marks create a pop-up menu of bookmarks. + + :marks list ... + display the contents of the marks that are mentioned in list. + + :messages + + :mes[sages] + shows previously given messages (up to 50). + + :mkdir + + :mkdir[!] dir ... + creates directories with given names. "!" means make parent + directories as needed. Macros are expanded. + + :move + + :[range]m[ove][!?][ &] + move files to directory of other view. With "?" prompts for + destination file names in an editor. "!" forces overwrite. + + :[range]m[ove][!] path[ &] + move files to directory specified with the path (absolute or + relative to directory of other view). "!" forces overwrite. + + :[range]m[ove][!] name1 name2...[ &] + move files to directory of other view giving each next file a + corresponding name from the argument list. "!" forces over- + write. + + :nohlsearch + + :noh[lsearch] + clear selection in current pane. + + :normal + + :norm[al][!] commands + execute normal mode commands. If "!" is used, user defined map- + pings are ignored. Unfinished last command is aborted as if + <esc> or <c-c> was typed. A ":" should be completed as well. + Commands can't start with a space, so put a count of 1 (one) + before it. + + :only + + :on[ly] + switch to a one window view. + + :popd + + :popd remove pane directories from stack. + + :pushd + + :pushd[!] /curr/dir [/other/dir] + add pane directories to stack and process arguments like :cd + command. + + :pushd exchange the top two items of the directory stack. + + :pwd + + :pw[d] show the present working directory. + + :quit + + :q[uit][!] + exit vifm (add ! to skip saving changes and checking for active + backgrounded commands). + + :redraw + + :redr[aw] + redraw the screen immediately. + + :registers + + :reg[isters] + display menu with registers content. + + :reg[isters] list ... + display the contents of the numbered and named registers that + are mentioned in list (for example "az to display "", "a and "z + content). + + :rename + + :[range]rename[!] + rename files using vi to edit names. ! means go recursively + through directories. + + :[range]rename name1 name2... + rename each of selected files to a corresponding name. + + :restart + + :restart + free a lot of things (histories, commands, etc.), reread + vifminfo and vifmrc files and run startup commands passed in the + argument list, thus losing all unsaved changes (e.g. recent his- + tory or keys mapped in current session). + + :restore + + :[range]restore + restore file from trash directory, doesn't work outside one of + trash directories. See "Trash directory" section below. + + :rlink + + :[range]rlink[!?] + create relative symbolic links to files in directory of other + view. With "?" prompts for destination file names in an editor. + "!" forces overwrite. + + :[range]rlink[!] path + create relative symbolic links of files in directory specified + with the path (absolute or relative to directory of other view). + "!" forces overwrite. + + :[range]rlink[!] name1 name2... + create relative symbolic links of files in directory of other + view giving each next link a corresponding name from the argu- + ment list. "!" forces overwrite. + + :screen + + :screen + toggle whether to use the terminal multiplexer or not. + A terminal multiplexer uses pseudo terminals to allow multiple + windows to be used in the console or in a single xterm. Start- + ing vifm from terminal multiplexer with appropriate support + turned on will cause vifm to open a new terminal multiplexer + window for each new file edited or program launched from vifm. + This requires screen version 3.9.9 or newer for the screen -X + argument or tmux (1.8 version or newer is recommended). + + :screen? + display whether integration with terminal multiplexers is + enabled. + + Note: the command is called screen for historical reasons (when tmux + wasn't yet supported) and might be changed in future releases, or get + an alias. + + :set + + :se[t] display all options that differ from their default value. + + :se[t] all + display all options. + + :se[t] opt1=val1 opt2='val2' opt3="val3" ... + sets given options. + You can use following syntax: + - for all options - option, option? and option& + - for boolean options - nooption, invoption and option! + - for integer options - option=x, option+=x and option-=x + - for string options - option=x + - for string list options - option=x, option+=x and option-=x + - for enumeration options - option=x, option+=x and option-=x + - for set options - option=x, option+=x and option-=x + - for charset options - option=x, option+=x, option-=x and + option^=x + + the meaning: + - option - turn option on (for boolean) or print its value (for + all others) + - nooption - turn option off + - invoption - invert option state + - option! - invert option state + - option? - print option value + - option& - reset option to its default value + - option=x or option:x - set option to x + - option+=x - add x to option + - option-=x - remove (or subtract) x from option + - option^=x - toggle x presence among values of the option + + Option name can be prepended and appended by any number of + whitespace characters. + + :shell + + :sh[ell] + start a shell in current directory. + + :sort + + :sor[t] + display dialog with different sorting methods, when one can + select primary sorting key. When 'viewcolumns' options is empty + and 'lsview' is off, changing primary sorting key will also + affect view look (in particular the second column of the view + will be changed). + + :source + + :so[urce] file + read command-line commands from the file. + + :split + + :sp[lit] + switch to a two window horizontal view. + + :sp[lit]! + toggle horizontal window splitting. + + :sp[lit] path + splits the window horizontally to show both file directories. + Also changes other pane to path (absolute or relative to current + directory of active pane). + + :substitute + + :[range]s[ubstitute]/pattern/string/[flags] + for each file in range replace a match of pattern with string. + + String can contain \0...\9 to link to capture groups (\0 - all match, + \1 - first group, etc.). + + Pattern is stored in search history. + + Available flags: + + - i - ignore case (the 'ignorecase' and 'smartcase' options are not + used) + + - I - don't ignore case (the 'ignorecase' and 'smartcase' options are + not used) + + - g - substitute all matches in each file name (each g toggles this) + + :[range]s[ubstitute]/pattern + substitute pattern with an empty string. + + :[range]s[ubstitute]//string/[flags] + use last pattern from search history. + + :[range]s[ubstitute] + repeat previous substitution command. + + :sync + + :sync [relative path] + change the other pane to the current pane directory or to some + path relative to the current directory. Using macros is + allowed. + + :sync! change the other pane to the current pane directory and synchro- + nize cursor position. + + + :sync! [location | cursorpos | localopts | filters | all]... + change enumerated properties of the other pane to match corre- + sponding properties of the current pane. Arguments have the + following meanings: + + - location - current directory of the pane; + + - cursorpos - cursor position (doesn't make sense without + "location"); + + - localopts - all local options; + + - filters - all filters; + + - all - all of the above. + + :touch + + :touch file... + create file(s). Aborts on errors. Doesn't update time of + existing files. Macros are expanded. + + :tr + + :[range]tr/pattern/string/ + for each file in range transliterate the characters which appear + in pattern to the corresponding character in string. When + string is shorter than pattern, it's padded with its last char- + acter. + + :trashes + + :trashes + lists all valid trash directories in a menu. Only non-empty and + writable trash directories are shown. This is exactly the list + of directories that are cleared when :empty command is executed. + + :trashes? + same as :trashes, but also displays size of each trash direc- + tory. + + :undolist + + :undol[ist] + display list of latest changes. Use "!" to see actual commands. + + :unlet + + :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... + remove environment variables. Add ! to omit displaying of warn- + ings about nonexistent variables. + + :version + + :ve[rsion] + show menu with version information. + + :vifm + + :vifm same as :version. + + :view + + :vie[w] + toggle on and off the quick file view. + + :vie[w]! + turn on quick file view if it's off. + + :volumes + + :volumes + only for MS-Windows + display menu with volume list. Hitting l (or Enter) key opens + appropriate volume in the current pane. + + :vsplit + + :vs[plit] + switch to a two window vertical view. + + :vs[plit]! + toggle window vertical splitting. + + :vs[plit] path + split the window vertically to show both file directories. And + changes other pane to path (absolute or relative to current + directory of active pane). + + :windo + + :windo [command...] + execute command for each pane (same as :winrun % command). + + :winrun + + :winrun type [command...] + execute command for pane(s), which is determined by type argu- + ment: + - ^ - top-left pane + - $ - bottom-right pane + - % - all panes + - . - current pane + - , - other pane + + :write + + :w[rite] + write vifminfo file. + + :wq + + :wq[!] same as :quit, but ! only disables check of backgrounded com- + mands. + + :xit + + :x[it][!] + will exit Vifm (add ! if you don't want to save changes). + + :yank + + :[range]y[ank] [reg] [count] + will yank files to the reg register. + + :map lhs rhs + + :map lhs rhs + map lhs key sequence to rhs in normal and visual modes. + + :map! lhs rhs + map lhs key sequence to rhs in command line mode. + + + :cm[ap] lhs rhs + map lhs to rhs in command line mode. + + :mm[ap] lhs rhs + map lhs to rhs in menu mode. + + :nm[ap] lhs rhs + map lhs to rhs in normal mode. + + :qm[ap] lhs rhs + map lhs to rhs in view mode. + + :vm[ap] lhs rhs + map lhs to rhs in visual mode. + + :map + + :cm[ap] + list all maps in command line mode. + + :mm[ap] + list all maps in menu mode. + + :nm[ap] + list all maps in normal mode. + + :qm[ap] + list all maps in view mode. + + :vm[ap] + list all maps in visual mode. + + :map beginning + + :cm[ap] beginning + list all maps in command line mode that start with the begin- + ning. + + :mm[ap] beginning + list all maps in menu mode that start with the beginning. + + :nm[ap] beginning + list all maps in normal mode that start with the beginning. + + :qm[ap] beginning + list all maps in view mode that start with the beginning. + + :vm[ap] beginning + list all maps in visual mode that start with the beginning. + + :noremap + + :no[remap] lhs rhs + map the key sequence lhs to {rhs} for normal and visual modes, + but disallow mapping of rhs. + + :no[remap]! lhs rhs + map the key sequence lhs to {rhs} for command line mode, but + disallow mapping of rhs. + + :cno[remap] lhs rhs + map the key sequence lhs to {rhs} for command line mode, but + disallow mapping of rhs. + + :mn[oremap] lhs rhs + map the key sequence lhs to {rhs} for menu mode, but disallow + mapping of rhs. + + :nn[oremap] lhs rhs + map the key sequence lhs to {rhs} for normal mode, but disallow + mapping of rhs. + + :qn[oremap] lhs rhs + map the key sequence lhs to {rhs} for view mode, but disallow + mapping of rhs. + + :vn[oremap] lhs rhs + map the key sequence lhs to {rhs} for visual mode, but disallow + mapping of rhs. + + :unmap + + :unm[ap] lhs + remove the mapping of lhs from normal and visual modes. + + :unm[ap]! lhs + remove the mapping of lhs from command line mode. + + :cu[nmap] lhs + remove the mapping of lhs from command line mode. + + :mu[nmap] lhs + remove the mapping of lhs from menu mode. + + :nun[map] lhs + remove the mapping of lhs from normal mode. + + :qun[map] lhs + remove the mapping of lhs from view mode. + + :vu[nmap] lhs + remove the mapping of lhs from visual mode. + +Ranges + The ranges implemented include: + 2,3 - from second to third file in the list (including it) + % - the entire directory. + . - the current position in the filelist. + $ - the end of the filelist. + 't - the mark position t. + + Examples: + + :%delete + + would delete all files in the directory. + + :2,4delete + + would delete the files in the list positions 2 through 4. + + :.,$delete + + would delete the files from the current position to the end of the + filelist. + + :3delete4 + + would delete the files in the list positions 3, 4, 5, 6. + + If a backward range is given :4,2delete - an query message is given and + user can chose what to do next. + + The builtin commands that accept a range are :d[elete] and :y[ank]. + +Command macros + The command macros may be used in user commands. + + %a User arguments. When user arguments contain macros, they are + expanded before preforming substitution of %a. + + %c %"c The current file under the cursor. + + %C %"C The current file under the cursor in the other directory. + + %f %"f All of the selected files. + + %F %"F All of the selected files in the other directory list. + + %b %"b Same as %f %F. + + %d %"d Full path to current directory. + + %D %"D Full path to other file list directory. + + %rx %"rx + Full paths to files in the register {x}. In case of invalid + symbol in place of {x}, it's processed with the rest of the line + and default register is used. + + %m Show command output in a menu. + + %M Same as %m, but l (or Enter) key is handled like for :locate and + :find commands. + + %u Process command output as list of paths and compose custom view + out of it. + + %U Same as %u, but implies less list updates inside vifm, which is + absence of sorting at the moment. + + %S Show command output in the status bar. + + %s Execute command in split window of active terminal multiplexer + (ignored if not running inside one). + + %n Forbid using of terminal multiplexer to run the command. + + %i Completely ignore command output. + + + The following dimensions and coordinates are in characters: + + %px x coordinate of top-left corner of preview area. + + %py y coordinate of top-left corner of preview area. + + %pw width of preview area. + + %ph height of preview area. + + + Use %% if you need to put a percent sign in your command. + + Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. + Only the last one of them on the command will take effect. + + You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D + macros. Supported modifiers are: + + - :p - full path + + - :u - UNC name of path (e.g. "\\server" in + "\\server\share"), Windows only. Expands to current computer name + for not UNC paths. + + - :~ - relative to the home directory + + - :. - relative to current directory + + - :h - head of the file name + + - :t - tail of the file name + + - :r - root of the file name (without last extension) + + - :e - extension of the file name (last one) + + - :s?pat?sub? - substitute the first occurrence of pat with sub. + You can use any character for '?', but it must not occur in pat or + sub. + + - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with + sub. + + See ':h filename-modifiers' in Vim's documentation for the detailed + description. + + Using %x means expand corresponding macro escaping all characters that + have special meaning. And %"x means using of double quotes and escape + only backslash and double quote characters, which is more useful on + Windows systems. + + Position and quantity (if there is any) of %m, %M, %S or %s macros in + the command is unimportant. All their occurrences are removed from the + resulting command. + + %c and %f macros are expanded to file names only, when %C and %F are + expanded to full paths. %f and %F follow this in %b too. + + :com move mv %f %D + set the :move command to move all of the files selected in the + current directory to the other directory. + + The %a macro is replaced with any arguments given to an alias command. + All arguments are considered optional. + :com lsl !!ls -l %a - set the lsl command to execute ls -l with + or without an argument. + + :lsl<Enter> + will list the directory contents of the current directory. + + :lsl filename<Enter> + will list only the given filename. + + The macros can also be used in directly executing commands. ":!mv %f + %D" would move the current directory selected files to the other direc- + tory. + + Appending & to the end of a command causes it to be executed in the + background. Typically you want to run two kinds of external commands + in the background: + + - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); + + - console tools that do not work with terminal (:!mv %f %D &). + + You don't want to run terminal commands, which require terminal input + or output something in background because they will mess up vifm's TUI. + Anyway, if you did run such a command, you can use Ctrl-L key to update + vifm's TUI. + + Rewriting the example command with macros given above with background- + ing: + + %m, %M, %s, %S, %u and %U macros cannot be combined with background + mark (" &") as it doesn't make much sense. + +Command backgrounding + Copy and move operation can take a lot of time to proceed. That's why + vifm supports backgrounding of this two operations. To run :copy, + :move or :delete command in the background just add " &" at the end of + a command. + + For each background operation a new thread is created. Currently job + cannot be stopped or paused. + + You can see if command is still running in the :jobs menu. Back- + grounded commands have progress instead of process id at the line + beginning. + + Background operations cannot be undone. + +Cancellation + Note that cancellation works somewhat different on Windows platform due + to different mechanism of break signal propagation. One also might + need to use Ctrl-Break shortcut instead of Ctrl-C. + + There are two types of operations that can be cancelled: + + - file system operations; + + - mounting with FUSE (but not unmounting as it can cause loss of + data); + + - calls of external applications. + + Note that vifm never terminates applications, it sends SIGINT signal + and lets the application quit normally. + + When one of set of operations is cancelled (e.g. copying of 5th file of + 10 files), further operations are cancelled too. In this case undo + history will contain only actually performed operations. + + Cancelled operations are indicated by "(cancelled)" suffix appended to + information message on statusbar. + + File system operations + + Currently the following commands can be cancelled: :alink, :chmod, + :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, + :touch. File putting (on p/P key) can be cancelled as well. It's not + hard to see that these are mainly long-running operations. + + Cancelling commands when they are repeated for undo/redo operations is + allowed for convenience, but is not recommended as further undo/redo + operations might get blocked by side-effects of partially cancelled + group of operations. + + These commands can't be cancelled: :empty, :rename, :substitute, :tr. + + Mounting with FUSE + + It's not considered to be an error, so only notification on the status + bar is shown. + + External application calls + + Each of this operations can be cancelled: :apropos, :find, :grep, + :locate. + +Patterns + :highlight, :filetype, :filextype and :fileviewer commands support both + globs and regular expressions as patterns to match file names or full + paths. + + There are five possible ways to write them: + + 1. {comma-seperated-name-globs} + + 2. {{comma-seperated-path-globs}} + + 3. /name-regular-expression/[iI] + + 4. //path-regular-expression//[iI] + + 5. undecorated-pattern + + The last form is implicitly refers to one of others. :highlight does + not accept undecorated form, while :filetype, :filextype and :file- + viewer treat it as list of name globals. + + Regular expression patterns are case insensitive by default. + + "Globs" section below provides short overview of globs and some impor- + tant points that one needs to know about them. + +Globs + Globs are always case insensitive as it makes sense in general case. + + *, ?, [ and ] are treated as special symbols in the pattern. E.g. + + :filetype * less %c + + matches all files. One can use character classes for escaping, so + + :filetype [*] less %c + + matches only one file name, the one which contains only asterisk sym- + bol. + + * means any number of any characters (possibly an empty substring), + with one exception: asterisk at the pattern beginning doesn't match dot + in the first position. E.g. + + :fileviewer *.zip,*.jar zip -sf %c + + associates using of zip program to preview all files with zip or jar + extensions as listing of their content. + + ? means any character at this position. E.g. + + :fileviewer ?.out file %c + + calls file tool for all files which has exactly one character before + their extension (e.g. a.out, b.out). + + Square brackets designate character class, which means that whole char- + acter class matches against any of characters listed in it. For exam- + ple + + :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c + + makes vifm call highlight program to colorize source and header files + in C language for a 256-color terminal. Equal command would be + + :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c + + + Inside square brackets ^ or ! can be used for symbol class negotiation + and the - symbol to set a range. ^ and ! should appear right after the + opening square bracket. For example + + :filetype *.[!d]/ inspect_dir + + associates inspect_dir as additional handler for all directories that + have one character extension unless it's "d" letter. And + + :filetype [0-9].jpg sxiv + + associates sxiv picture viewer only for JPEG-files that contain single + digit in their name. + +:set options + Local options + These are kind of options that are local to a specific view. So + you can set ascending sorting order for left pane and descending + order for right pane. + + 'aproposprg' + type: string + default: "apropos %a" + Specifies format for an external command to be invoked by the + :apropos command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %a + macro to specify placement of arguments passed to the :apropos + command. If the macro is not used, it will be implicitly added + after a space to the value of this option. + + 'autochpos' + type: boolean + default: true + When disabled vifm will set cursor to the first line in the view + after :cd and :pushd commands instead of saved cursor position. + Disabling this will also make vifm clear information about cur- + sor position in the view history on :cd and :pushd commands (and + on startup if 'autochpos' is disabled in the vifmrc). l key in + the ":history ." and ":trashes" menus is treated like :cd com- + mand. This option also affects bookmarks so that navigating to + a bookmark doesn't restore cursor position. + + 'columns' 'co' + type: integer + default: terminal width on startup + Terminal width in characters. + + 'cdpath' 'cd' + type: string list + default: value of $CDPATH with commas instead of colons + Specifies locations to check on changing directory with relative + path that doesn't start with "./" or "../". When non-empty, + current directory is examined after directories listed in the + option. + + This option doesn't affect completion of :cd command. + + Example: + + set cdpath=~ + + This way ":cd bin" will switch to "~/bin" even if directory + named "bin" exists in current directory, while ":cd ./bin" com- + mand will ignore value of 'cdpath'. + + 'chaselinks' + type: boolean + default: false + When enabled path of view is always resolved to real path (with + all symbolic links expanded). + + 'classify' + type: string list + default: ":dir:/" + Specifies file name prefixes and suffixes depending on file + types. The format is: [{prefix}]:{filetype}:[{suffix}]. Either + {prefix} or {suffix} or both of them can be omitted (which is + the default for all unspecified file types), this means empty + {prefix} and/or {suffix}. {prefix} and {suffix} should consist + exactly of one character. Elements are separated by commas. + Neither prefixes nor suffixes are part of file names, so they + don't affect commands which operate on file names in any way. + Comma (',') character should not be used. List of file type + names can be found in the description of filetype() function. + + 'confirm' 'cf' + type: boolean + default: true + Ask about permanent deletion of files (on D or :delete! command + or on undo/redo operation). + + 'cpoptions' 'cpo' + type: charset + default: "fst" + Contains a sequence of single-character flags. Each flag + enables behaviour of older versions of vifm. Flags: + f - when included, running :filter command results in not + inverted (matching files are filtered out) and :filter! in + inverted (matching files are left) filter, when omitted, meaning + of the exclamation mark changes to the opposite; + s - when included, yy, dd and DD normal mode commands act on + selection, otherwise they operate on current file only; + t - when included, <tab> (thus <c-i>) behave as <space> and + switch active pane, otherwise <tab> and <c-i> go forward in the + view history. + + 'dotdirs' + type: set + default: nonrootparent + Controls displaying of dot directories. The following values + are possible: + - rootparent - show "../" in root directory of file system + - nonrootparent - show "../" in non-root directories of file + system + Note that empty directories always contain "../" entry regard- + less of value of this option. "../" disappears at the moment at + least one file is created. + + 'fastrun' + type: boolean + default: false + With this option turned on you can run partially entered com- + mands with unambiguous beginning using :! (e.g. :!Te instead of + :!Terminal or :!Te<tab>). + + 'fillchars' 'fcs' + type: string list + default: "" + Sets characters used to fill borders. + item default Used for + vborder:c ' ' left, middle and right vertical borders + + If value is omitted, its default value is used. Example: + + set fillchars=vborder:. + + 'findprg' + type: string + default: "find %s %a -print , -type d \( ! -readable -o ! -exe- + cutable \) -prune" + Specifies format for an external command to be invoked by the + :find command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %s + macro to specify placement of list of paths to search in and %a + or %A macro to specify placement of arguments passed to the + :find command. If some of the macros are not used, they will be + implicitly added after a space to the value of the option in the + following order: %s, %a. Note that when neither %a nor %A are + specified, it's %a which is added implicitly. + + The macros can slightly change their meaning depending on :find + command arguments. When the first argument points to an exist- + ing directory, %s is assigned all arguments and %a/%A are left + empty. Otherwise, %s is assigned a dot (".") meaning current + directory or list of selected file names, if any. %a/%A are + assigned arguments when first argument starts with a dash ("-"), + otherwise %a gets an escaped version of arguments, prepended by + "-name" (on *nix) or "-iname" (on Windows) predicate. + + %a and %A macros contain almost the same value, the difference + is that %a can be escaped and %A is never escaped. %A is to be + used mainly on Windows, where shell escaping is a mess and can + break command execution. + + Starting from Windows Server 2003 a where command is available, + one can configure vifm to use it in the following way: + + set findprg="where /R %s %A" + + As the syntax of this command is rather limited, one can't use + :find command with selection of more than one item in this case. + The command looks for files only completely ignoring directo- + ries. + + When using find port on Windows, another option is to setup + 'findprg' like this: + + set findprg="find %s %a" + + 'followlinks' + type: boolean + default: true + Follow links on l or Enter. + + 'fusehome' + type: string + default: "($TMPDIR | $TEMP | $TEMPDIR | $TMP)/vifm_FUSE/" + Directory to be used as a root dir for FUSE mounts. Value of + the option can contain environment variables (in form + "$envname"), which will be expanded (prepend it with a slash to + prevent expansion). The value should expand to an absolute + path. + + If you change this option, vifm won't remount anything. It + affects future mounts only. See "Automatic FUSE mounts" section + below for more information. + + 'gdefault' 'gd' + type: boolean + default: false + When on, 'g' flag is on for :substitute by default. + + 'grepprg' + type: string + default: "grep -n -H -I -r %i %a %s" + Specifies format for an external command to be invoked by the + :grep command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %i + macro to specify placement of "-v" string when inversion of + results is requested, %a or %A macro to specify placement of + arguments passed to the :grep command and the %s macro to spec- + ify placement of list of files to search in. If some of the + macros are not used, they will be implicitly added after a space + to the value of the 'grepprg' option in the following order: %i, + %a, %s. Note that when neither %a nor %A are specified, it's %a + which is added implicitly. + + See 'findprg' option for description of difference between %a + and %A. + + Example of setup to use ack (http://beyondgrep.com/) instead of + grep: + + set grepprg=ack\ -H\ -r\ %i\ %a\ %s + + or The Silver Searcher (https://github.com/ggreer/the_sil- + ver_searcher): + + set grepprg=ag\ --line-numbers\ %i\ %a\ %s + + + + 'history' 'hi' + type: integer + default: 15 + Maximum number of directories in the view history and lines in + the prompt, command line and search histories. + + 'hlsearch' 'hls' + type: boolean + default: true + Highlight all matches of search pattern. + + 'iec' type: boolean + default: false + Use KiB, MiB, ... instead of KB, MB, ... + + 'ignorecase' 'ic' + type: boolean + default: false + Ignore case in search patterns (:substitute, / and ? commands) + and characters after f and F commands. It doesn't affect file + filtering. + + 'incsearch' 'is' + type: boolean + default: false + When this option is set, search and view update for local filter + is be performed starting from initial cursor position each time + search pattern is changed. + + 'laststatus' 'ls' + type: boolean + default: true + Controls if status bar is visible. + + 'lines' + type: integer + default: terminal height on startup + Terminal height in lines. + + 'locateprg' + type: string + default: "locate %a" + Specifies format for an external command to be invoked by the + :locate command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %a + macro to specify placement of arguments passed to the :locate + command. If the macro is not used, it will be implicitly added + after a space to the value of this option. + + 'mintimeoutlen' + type: integer + default: 150 + The fracture of 'timeoutlen' in milliseconds that is waited + between subsequent input polls, which affects various asynchro- + nous operations (detecting changes made by external applica- + tions, monitoring background jobs, redrawing UI). There are no + strict guarantees, however the higher this value is, the less is + CPU load in idle mode. + + 'lsview' + type: boolean + default: false + type: local + When this option is set, directory view will be displayed in + multiple columns with file names similar to output of `ls -x` + command. See "ls-like view" section below for format descrip- + tion. + + 'number' 'nu' + type: boolean + default: false + type: local + Print line number in front of each file name when 'lsview' + option is turned off. Use 'numberwidth' to control width of + line number. Also see 'relativenumber'. + + 'numberwidth' 'nuw' + type: integer + default: 4 + type: local + Minimal number of characters for line number field. + + 'relativenumber' 'rnu' + type: boolean + default: false + type: local + Print relative line number in front of each file name when + 'lsview' option is turned off. Use 'numberwidth' to control + width of line number. Various combinations of 'number' and + 'relativenumber' lead to such results: + + nonumber number + + norelativenumber | first | 1 first + | second | 2 second + | third | 3 third + + relativenumber | 1 first | 1 first + | 0 second |2 second + | 1 third | 1 third + + + 'rulerformat' 'ruf' + type: string + default: "%l/%S " + Determines the content of the ruler. Its minimal width is 13 + characters and it's right aligned. Following macros are sup- + ported: + %l - file number + %L - total number of files in view (including filtered out + ones) + %- - number of filtered out files + %S - number of displayed files + %= - separation point between left and right align items + %% - percent sign + %[ - designates beginning of an optional block + %] - designates end of an optional block + + Percent sign can be followed by optional minimum field width. + Add '-' before minimum field width if you want field to be right + aligned. Note ambiguity with number of filtered out files, + which can be resolved with the help of width field ("%0-"). + + Example: + + set rulerformat='%2l-%S%[ +%0-%]' + + 'runexec' + type: boolean + default: false + Run executable file on Enter or l. + + 'scrollbind' 'scb' + type: boolean + default: false + When this option is set, vifm will try to keep difference of + scrolling positions of two windows constant. + + 'scrolloff' 'so' + type: integer + default: 0 + Minimal number of screen lines to keep above and below the cur- + sor. If you want cursor line to always be in the middle of the + view (except at the beginning or end of the file list), set this + option to some large value (e.g. 999). + + 'shell' 'sh' + type: string + default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) + Full path to the shell to use to run external commands. + + 'shortmess' 'shm' + type: charset + default: "p" + Contains a sequence of single-character flags. Each flag + enables shortening of some message displayed by vifm in the TUI. + Flags: + T - truncate status-bar messages in the middle if they are too + long to fit on the command line. "..." will appear in the mid- + dle. + p - use tilde shortening in view titles. + + 'slowfs' + type: string list + default: "" + only for *nix + A list of mounter fs name beginnings (first column in /etc/mtab + or /proc/mounts) or paths prefixes for fs/directories that work + too slow for you. This option can be used to stop vifm from + making some requests to particular kinds of file systems that + can slow down file browsing. Currently this means don't check + if directory has changed, skip check if target of symbolic links + exists, assume that link target located on slow fs to be a + directory (allows entering directories and navigating to files + via gf). + + Example for autofs root /mnt/autofs: + + set slowfs+=/mnt/autofs + + 'smartcase' 'scs' + type: boolean + default: false + Overrides the ignorecase option if the search pattern contains + at least one upper case character. Only used when ignorecase + option is enabled. It doesn't affect file filtering. + + 'sort' type: string list + default: +name on *nix and +iname on Windows + type: local + Sets list of sorting keys (first item is primary key, second is + secondary key, etc.): + [+-]ext - extension + [+-]name - name (including extension) + [+-]iname - name (including extension, ignores case) + [+-]type - file type (dir/reg/exe/link/char/block/sock/fifo) + [+-]dir - directory grouping (directory < file) + [+-]gid - group id (*nix only) + [+-]gname - group name (*nix only) + [+-]mode - file type derived from its mode (*nix only) + [+-]perms - permissions string (*nix only) + [+-]uid - owner id (*nix only) + [+-]uname - owner name (*nix only) + [+-]size - size + [+-]atime - time accessed (e.g. read, executed) + [+-]ctime - time changed (changes in metadata, e.g. mode) + [+-]mtime - time modified (when file contents is changed) + + Note: look for st_atime, st_ctime and st_mtime in "man 2 stat" + for more information on time keys. + + '+' means ascending sort for this key, and '-' means descending + sort. + + In case "name" ("iname" on Windows) is skipped, it will be added + at the end automatically. + + Value of the option is checked to include default sorting key + (name on *nix, iname on Windows). When it is absent, the key is + appended to the value of the option. + + Type key is somewhat similar in this regard but it's added + implicitly: when "type" is not specified, sorting behaves as if + it was the first key in the list. That's why if one wants sort- + ing algorithm to mix directories and files, "type" should be + appended to sorting option, for example like this: + + set sort+=type + + or + + set sort=-size,type + + Value of the option is checked to include type key and default + sorting key (name on *nix, iname on Windows). Here is what hap- + pens if one of them is missing: + + - type key is added at the beginning; + + - default key is added at the end; + + all other keys are left untouched (at most they are moved). + + This option also changes view columns according to primary sort- + ing key set, unless 'viewcolumns' option is not empty. + + 'sortnumbers' + type: boolean + default: false + type: local + Natural sort of (version) numbers within text. + + 'statusline' 'stl' + type: string + default: "" + Determines the content of the status line (the line right above + command-line). Empty string means use same format like in pre- + vious versions. Following macros are supported: + + - %t - file name (considering value of the 'classify' option) + + - %A - file attributes (permissions on *nix or properties on + Windows) %u - user name or uid (if it cannot be resolved) + + - %g - group name or gid (if it cannot be resolved) + + - %s - file size in human readable format + + - %E - size of selected files in human readable format, same as + %s when no files are selected, except that it will never show + size of ../ in visual mode, since it cannot be selected + + - %d - file modification date (uses 'timefmt' option) + + - all 'rulerformat' macros + + Percent sign can be followed by optional minimum field width. + Add '-' before minimum field width if you want field to be right + aligned. Example: + + set statusline=" %t%= %A %10u:%-7g %15s %20d " + + On Windows file properties include next flags (upper case means + flag is on): + A - archive + H - hidden + I - content isn't indexed + R - readonly + S - system + C - compressed + D - directory + E - encrypted + P - reparse point (e.g. symbolic link) + Z - sparse file + + 'sortorder' + type: enumeration + default: ascending + Sets sort order for primary key: ascending, descending. + + 'syscalls' + type: boolean + default: false + When disabled, vifm will rely on external applications to per- + form file-system operations, otherwise system calls are used + instead (much faster). The feature is {EXPERIMENTAL} and {WORK- + IN-PROGRESS}. The option will be eventually removed. Mostly + *nix-like systems are affected. + + 'tabstop' 'ts' + type: integer + default: value from curses library + Number of spaces that a Tab in the file counts for. + + 'timefmt' + type: string + default: " %m/%d %H:%M" + Format of time in file list. See "man 1 date" or "man 3 strf- + time" for details. + + 'timeoutlen' 'tm' + type: integer + default: 1000 + The time in milliseconds that is waited for a mapped key in case + of already typed key sequence is ambiguous. + + 'trash' + type: boolean + default: true + Use trash directory. See "Trash directory" section below. + + 'trashdir' + type: string + default: "%r/.vifm-Trash,$VIFM/Trash" or if $VIFM/Trash doesn't + exist + "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" + List of trash directory path specifications, separated with com- + mas. Each list item either defines an absolute path to trash + directory or a path relative to a mount point root when list + element starts with "%r/". Value of the option can contain + environment variables (of form "$envname"), which will be + expanded (prepend $ with a slash to prevent expansion). Envi- + ronment variables are expanded when the option is set. + + When new file gets cut (deleted) vifm traverses each element of + the option in the order of their appearance and uses first trash + directory that it was able to create or that is already + writable. + + Default value tries to use trash directory per mount point and + falls back to ~/.vifm/Trash on failure. + + Will attempt to create the directory if it does not exist. See + "Trash directory" section below. + + 'tuioptions' 'to' + type: charset + default: "ps" + Each flag configures some aspect of TUI appearance. The flags + are: + p - when included, file list inside a pane gets additional sin- + gle character padding on left and right sides; + s - when included, left and right borders (side borders, hence + "s" character) are visible. + + 'undolevels' 'ul' + type: integer + default: 100 + Maximum number of changes that can be undone. Note that here + single file operation is used as a unit, not operation, i.e. + deletion of 101 files will exceed default limit. + + 'vicmd' + type: string + default: "vim" + The actual command used to start vi. Ampersand sign at the end + (regardless whether it's preceded by space or not) means back- + grounding of command. + + 'viewcolumns' + type: string + default: "" + type: local + Format string containing list of columns in the view. When this + option is empty view columns to show are chosen automatically + using sorting keys (see 'sort') as a base. Value of this option + is ignored if 'lsview' is set. See "Column view" section below + for format description. + + An example of setting the options for both panes (note vifm- + windo command): + + windo set viewcolumns=-{name}..,6{size},11{perms} + + 'vixcmd' + type: string + default: value of 'vicmd' + The command used to start vi when in X. Ampersand sign at the + end (regardless whether it's preceded by space or not) means + backgrounding of command. + + 'vifminfo' + type: set + default: bookmarks + Controls what will be saved in the $VIFM/vifminfo file. + + bookmarks - bookmarks, except special ones like '< and '> + tui - state of the user interface (sorting, number of + windows, quick + view state, active view) + dhistory - directory history + state - file name and dot filters and terminal multiplex- + ers integration + state + cs - primary color scheme + savedirs - save last visited directory (requires dhistory) + chistory - command line history + shistory - search history (/ and ? commands) + phistory - prompt history + fhistory - history of local filter (see description of the + "=" normal mode + command) + dirstack - directory stack overwrites previous stack, unless + stack of + current session is empty + registers - registers content + options - all options that can be set with the :set command + (obsolete) + filetypes - associated programs and viewers (obsolete) + commands - user defined commands (see :command description) + (obsolete) + + 'vimhelp' + type: boolean + default: false + Use vim help format. + + 'wildmenu' 'wmnu' + type: boolean + default: false + Controls whether possible matches of completion will be shown + above the command line. + + 'wordchars' + type: string list + default: "1-8,14-31,33-255" (that is all non-whitespace charac- + ters) + Specifies which characters in command-line mode should be con- + sidered as part of a word. Value of the option is comma-sepa- + rated list of ranges. If both endpoints of a range match, sin- + gle endpoint is enough (e.g. "a" = "a-a"). Both endpoints are + inclusive. There are two accepted forms: character representing + itself or number encoding character according to ASCII table. + In case of ambiguous characters (dash, comma, digit) use numeric + form. Accepted characters are in the range from 0 to 255. Any + Unicode character with code greater than 255 is considered to be + part of a word. + + The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This + is intentionally to allow two use cases: + + - Moving by WORDS and deletion by words. + - Moving by words and deletion by WORDS. + + To get the latter use the following mapping: + + cnoremap <c-w> <a-b><a-d> + + Also used for abbreviations. + + 'wrap' type: boolean + default: true + Controls whether to wrap text in quick view. + + 'wrapscan' 'ws' + type: boolean + default: true + Searches wrap around end of the list. + +Mappings + Since it's not easy to enter special characters there are several spe- + cial sequences that can be used in place of them. They are: + + <cr> Enter key. + + <esc> Escape key. + + <space> + Space key. + + <lt> Less-than character (<). + + <nop> provides a way to disable a mapping (by mapping it to <nop>). + + <bs> Backspace key (see key conflict description below). + + <tab> <s-tab> + Tabulation and Shift+Tabulation keys. + + <home> <end> + Home/End. + + <left> <right> <up> <down> + Arrow keys. + + <pageup> <pagedown> + PageUp/PageDown. + + <del> <delete> + Delete key. <del> and <delete> mean different codes, but + <delete> is more common. + + <c-a>,<c-b>,...,<c-z>,<c-[>,<c->,<c-]>,<c-^>,<c-_> + Control + some key (see key conflict description below). + + <a-a>,<a-b>,...,<a-z> + <m-a>,<m-b>,...,<m-z> Alt + some key. + + <a-c-a>,<a-c-b>,...,<a-c-z> + <m-c-a>,<m-c-b>,...,<m-c-z> only for *nix + Alt + Ctrl + some key. + + <f0> - <f63> + Functional keys. + + <c-f1> - <c-f12> + only for MS-Windows + functional keys with Control key pressed. + + <a-f1> - <a-f12> + only for MS-Windows + functional keys with Alt key pressed. + + <s-f1> - <s-f12> + only for MS-Windows + functional keys with Shift key pressed. + + Note that due to the way terminals process their input, several key- + board keys might be mapped to single key code, for example: + + - <cr> and <c-m>; + + - <tab> and <c-i>; + + - <c-h> and <bs>; + + - etc. + + Most of the time they are defined consistenly and don't cause sur- + prises, but <c-h> and <bs> are treated differently in different envi- + ronments (although they match each other all the time), that's why they + correspond to different keys in vifm. As a consequence, if you map <c- + h> or <bs> be sure to map the other one to the same combination so that + the mapping will work in all environments. + + vifm removes whitespace characters at the beginning and end of com- + mands. That's why you may want to use <space> at the end of rhs in + mappings. For example: + + cmap <f1> man<space> + + will put "man " in line when you hit the <f1> key in the command line + mode. + +Expression syntax + Supported expressions is a subset of what VimL provides. + + Expression syntax summary, from least to most significant: + + expr1 expr2 == expr2 equal + expr2 != expr2 not equal + expr2 > expr2 greater than + expr2 >= expr2 greater than or equal + expr2 < expr2 smaller than + expr2 <= expr2 smaller than or equal + + expr2 expr3 . expr3 .. string concatenation + + expr3 - expr3 unary minus + + expr3 unary plus + ! expr3 logical NOT + + expr4 number number constant + "string" string constant, \ is special + 'string' string constant, ' is doubled + &option option value + $VAR environment variable + function(expr1, ...) function call + + ".." indicates that the operations in this level can be concatenated. + + expr1 + ----- + expr2 {cmp} expr2 + + Compare two expr2 expressions, resulting in a 0 if it evaluates to + false or 1 if it evaluates to true. + + equal == + not equal != + greater than > + greater than or equal >= + smaller than < + smaller than or equal <= + + Examples: + + 'a' == 'a' == 1 + 'a' > 'b' == 1 + 'a' == 'b' == 0 + '2' > 'b' == 0 + 2 > 'b' == 1 + 2 > '1b' == 1 + 2 > '9b' == 0 + -1 == -'1' == 1 + 0 == '--1' == 1 + + expr2 + ----- + expr3 . expr3 .. string concatenation + + Examples: + + 'a' . 'b' == 'ab' + 'aaa' . '' . 'c' == 'aaac' + + expr3 + ----- + + - expr3 unary minus + + expr3 unary plus + ! expr3 logical NOT + + For '-' the sign of the number is changed. + For '+' the number is unchanged. + For '!' non-zero becomes zero, zero becomes one. + + A String will be converted to a Number first. + + These operations can be repeated and mixed. Examples: + + --9 == 9 + ---9 == -9 + -+9 == 9 + !-9 == 0 + !'' == 1 + !'x' == 0 + !!9 == 1 + + expr4 + ----- + + number number constant + ----- + + Decimal number. Examples: + + 0 == 0 + 0000 == 0 + 01 == 1 + 123 == 123 + 10000 == 10000 + + string + ------ + "string" string constant + + Note that double quotes are used. + + A string constant accepts these special characters: + \b backspace <bs> + \e escape <esc> + \n newline + \r return <cr> + \t tab <tab> + \\ backslash + \" double quote + + Examples: + + "\"Hello,\tWorld!\"" + "Hi,\nthere!" + + literal-string + -------------- + 'string' string constant + + Note that single quotes are used. + + This string is taken as it is. No backslashes are removed or have a + special meaning. The only exception is that two quotes stand for one + quote. + + Examples: + + 'All\slashes\are\saved.' + 'This string contains doubled single quotes ''here''' + + option + ------ + &option option value + + Examples: + + echo 'Terminal size: '.&columns.'x'.&lines + if &columns > 100 + + Any valid option name can be used here (note that "all" in ":set all" + is a pseudo option). See ":set options" section above. + + environment variable + -------------------- + $VAR environment variable + + The String value of any environment variable. When it is not defined, + the result is an empty string. + + Examples: + + 'This is my $PATH env: ' . $PATH + 'vifmrc at ' . $MYVIFMRC . ' is used.' + + function call + ------------- + function(expr1, ...) function call + + See "Functions" section below. + + Examples: + + "'" . filetype('.') . "'" + filetype('.') == 'reg' + +Functions + USAGE RESULT DESCRIPTION + + executable({expr}) Integer Checks whether {expr} command avail- + able. + expand({expr}) String Expands special keywords in {expr}. + filetype({fnum}) String Returns file type from position. + has({property}) Integer Checks whether instance has {prop- + erty}. + system({command}) String Executes shell command and returns + its output. + + executable({expr}) + If {expr} is absolute or relative path, checks whether path destination + exists and refers to an executable, otherwise checks whether command + named {expr} is present in directories listed in $PATH. Checks for + various executable extensions on Windows. Returns boolean value + describing result of the check. + + Example: + + " use custom default viewer script if it's available and installed + " in predefined system directory, otherwise try to find it elsewhere + if executable('/usr/local/bin/defviewer') + fileview * /usr/local/bin/defviewer %c + else + if executable('defviewer') + fileview * defviewer %c + endif + endif + + expand({expr}) + Expands environment variables and macros in {expr} just like it's done + for command-line commands. Returns a string. See "Command macros" + section above. + + Examples: + + " percent sign + :echo expand('%%') + " the last part of directory name of the other pane + :echo expand('%D:t') + " $PATH environment variable (same as `:echo $PATH`) + :echo expand('$PATH') + + filetype({fnum}) + The result is a string, which represents file type and is one of the + list: + exe executables + reg regular files + link symbolic links + dir directories + char character devices + block block devices + fifo pipes + sock *nix domain sockets + ? unknown file type (should never appear) + Parameter {fnum} can have following values: + - '.' to get type of file under the cursor in the active pane + + has({property}) + Allows examining internal parameters from scripts to e.g. figure out + environment in which application is running. Returns 1 if property is + true/present, otherwise 0 is returned. Currently the following proper- + ties are supported (anything else will yield 0): + unix runs in *nix-like environment (including Cygwin) + win runs on Windows + + Usage example: + + " skip user/group on Windows + if !has('win') + let $RIGHTS = '%10u:%-7g ' + endif + + execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' + + system({command}) + Runs the command in shell and returns its output (joined standard out- + put and standard error streams). All trailing newline characters are + stripped to allow easy appending to command output. Ctrl-C should + interrupt the command. + + Usage example: + + " command to enter .git/ directory of git-repository (when ran inside one) + command! cdgit :execute 'cd' system('git rev-parse --git-dir') + +Menus and dialogs + General + + j, Ctrl-N - move down. + k, Ctrl-P - move up. + Enter, l - select and exit the menu. + Ctrl-L - redraw the menu. + + Escape, Ctrl-C, ZZ, ZQ, q - quit. + + In all menus + + The following set of keys has the same meaning as in normal mode. + + Ctrl-B, Ctrl-F + Ctrl-D, Ctrl-U + Ctrl-E, Ctrl-Y + /, ? + n, N + [count]G, [count]gg + H, M, L + zb, zt, zz + + zh - scroll menu items [count] characters to the right. + zl - scroll menu items [count] characters to the left. + zH - scroll menu items half of screen width characters to the right. + zL - scroll menu items half of screen width characters to the left. + + : - enter command line mode for menus (currently only :exi[t], :q[uit], + :x[it] and :{range} are supported). + + b - interpret content of the menu as list of paths and use it to create + custom view in place of previously active pane. See "Custom views" + section below. + + + Below is description of additional commands and reaction on selection + in some menus and dialogs. + + Apropos menu + + Selecting menu item run man on a given topic. Menu won't be closed + automatically to allow view several pages one by one. + + Command-line mode abbreviations menu + + Type dd on an abbreviation to remove it. + + Color scheme menu + + Selecting name of a color scheme applies it the same way as if ":col- + orscheme <name>" was executed on the command-line. + + Commands menu + + Selecting command executes it with empty arguments (%a). + + dd on a command to remove. + + Bookmarks menu + + Selecting bookmark navigates to it. + + dd on a bookmark to remove. + + Trash menu + + r on a file name to restore it from trash. + + Directory history and Trashes menus + + Selecting directory name will change directory of the current view as + if :cd command was used. + + Directory stack menu + + Selecting directory name will rotate stack to put selected directory + pair at the top of the stack. + + Filetype menu + + Commands from vifmrc or typed in command-line are displayed above empty + line. All commands below empty line are from .desktop files. + + Grep, find, locate and user menu with navigation (%M macro) + + gf - navigate previously active view to currently selected item. + Leaves menu mode except for grep menu. Pressing Enter key has the same + effect. + + e - open selected path in the editor, stays in menu mode. + + Grep menu + + Selecting file (via Enter or l key) opens it in editor set by 'vicmd' + at given line number. Menu won't be closed automatically to allow + viewing more than one result. + + See above for "gf" and "e" keys description. + + Command-line history menu + + Selecting an item will execute it as command-line command or search + query. + + Volumes menu + + Selecting a drive navigates previously active pane to the root of that + drive. + + Fileinfo dialog + + Enter, q - close dialog + + Sort dialog + + h, Space - switch ascending/descending. + q - close dialog + + Attributes (permissions or properties) dialog + + h, Space - check/uncheck. + q - close dialog + + Item states: + + - * - checked flag. + + - X - means that it has different value for files in selection. + + - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or o-x+X + argument for the chmod program. If you want to remove execute right + from all files, but preserve it for directories, set all execute + flags to 'd' and check 'Set Recursively' flag. + +Custom views + Definition + + Normally file views contain list of files from a single directory, but + sometimes it's useful to populate them with list of files that do not + belong to the same directory, which is what custom views are for. + + Presentation + + Custom views are still related to directory they were in before custom + list was loaded. Path to that directory (original directory) can be + seen in the title of a custom view. + + Files in same directory have to be named differently, this doesn't hold + for custom views thus seeing just file names might be rather confusing. + In order to give an idea where files come from and when possible, rela- + tive paths to original directory of the view is displayed, otherwise + full path is used instead. + + Custom views normally don't contain any inexistent files. + + Navigation + + Custom views have some differences related to navigation in regular + views. + + gf - acts similar to gf on symbolic links and navigates to the file at + its real + location. + + h, gh - return to the original directory. + + Opening ".." entry also causes return to the original directory. + + History + + Custom list exists only while it's visible, once left one can't return + to it, so there is no appearances of it in any history. + + Filters + + Only local filter affects content of the view. This is intentional, + presumably if one loads list, precisely that list should be displayed + (except for inexistent paths, which are ignored). + + Search + + Although directory names are visible in listing, they are not search- + able. Only file names are taken into account (might be changed in + future, searching whole lines seems quite reasonable). + + Sorting + + Contrary to search sorting by name works on whole visible part of file + path. + + Highlight + + Whole file name is highlighted as one entity, even if there are direc- + tory elements. + + Updates + + Reloads can occur, though they are not automatic due to files being + scattered among different places. On a reload, inexistent files are + removed and meta-data of all other files is updated. + + Once custom view forgets about the file, it won't add it back even if + it's created again. So not seeing file previously affected by an oper- + ation, which was undone is normal. + + Operations + + All operations that add files are forbidden for custom views. For + example, moving/copying/putting files into a custom view doesn't work, + because it doesn't make much sense. + + On the other hand, operations that use files of a custom view as a + source (e.g. yanking, copying, moving file from custom view, deletion) + and operations that modify names are all allowed. + +Startup + On startup vifm determines several variables that are used during the + session. They are determined in the order they appear below. + + On *nix systems $HOME is normally present and used as is. On Windows + systems vifm tries to find correct home directory in the following + order: + - $HOME variable; + - $USERPROFILE variable; + - a combination of $HOMEDRIVE and $HOMEPATH variables. + + vifm tries to find correct configuration directory by checking the fol- + lowing places: + - $VIFM variable; + - parent directory of the executable file (on Windows only); + - $HOME/.vifm directory; + - $APPDATA/Vifm directory (on Windows only); + - $XDG_CONFIG_HOME/vifm directory; + - $HOME/.config/vifm directory. + + vifm tries to find correct configuration file by checking the following + places: + - $MYVIFMRC variable; + - vifmrc in parent directory of the executable file (on Windows only); + - $VIFM/vifmrc file. + +Configure + See "Startup" section above for the explanations on $VIFM and $MYV- + IFMRC. + + The vifmrc file contains commands that will be executed on vifm + startup. There are two such files: global and local. Global one is at + {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the + search algorithm used to find local vifmrc. Global vifmrc is loaded + before the local one, so that the later one can redefine anything con- + figured globally. + + Use vifmrc to set settings, mappings, filetypes etc. To use multi line + commands precede each next line with a slash (whitespace before slash + is ignored, but all spaces at the end of the lines are saved). For + example: + + set + \smartcase + + equals "setsmartcase". When + + set<space here> + \ smartcase + + equals "set smartcase". + + The $VIFM/vifminfo file contains session settings. You may edit it by + hand to change the settings, but it's not recommended to do that, edit + vifmrc instead. You can control what settings will be saved in + vifminfo by setting 'vifminfo' option. Vifm always writes this file on + exit unless 'vifminfo' option is empty. Bookmarks, commands, histo- + ries, filetypes, fileviewers and registers in the file are merged with + vifm configuration (which has bigger priority). + + Generally, runtime configuration has bigger priority during merging, + but there are some exceptions: + + - directory stack stored in the file is not overwritten unless some- + thing is changed in vifm session that performs merge; + + - each bookmark is marked with a timestamp, so that newer value is + not overwritten by older one, thus no matter from where bookmark + comes, the newer one wins. + + The $VIFM/scripts directory can contain shell scripts. vifm modifies + it's PATH environment variable to let user run those scripts without + specifying full path. All subdirectories of the $VIFM/scripts will be + added to PATH too. Script in a subdirectory overlaps script with the + same name in all its parent directories. + + The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain + color schemes. Available color schemes are searched in that order, so + on name conflict the one in $VIFM/colors/ wins. + + Each color scheme should have ".vifm" extension. This wasn't the case + before and for this reason the following rules apply during lookup: + + - if there is no file with .vifm extension, all regular files are + listed; + + - otherwise only files with .vifm extension are listed (with the + extension being truncated). + +Automatic FUSE mounts + vifm has a builtin support of automated FUSE file system mounts. It is + implemented using file associations mechanism. To enable automated + mounts, one needs to use a specially formated program line in filetype + or filextype commands. Currently two formats are supported: + + 1) FUSE_MOUNT This format should be used in case when all information + needed for mounting all files of a particular type is the same. E.g. + mounting of tar files don't require any file specific options. + + Format line: + FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] + + Example filetype command: + + :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR + + 2) FUSE_MOUNT2 This format allows one to use specially formatted files + to perform mounting and is useful for mounting remotes, for example + remote file systems over ftp or ssh. + + Format line: + FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] + + Example filetype command: + + :filetype FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR + + Example file content: + + root@127.0.0.1:/ + + All % macros are expanded by vifm at runtime and have the following + meaning: + - %SOURCE_FILE is replaced by full path to selected file; + - %DESTINATION_DIR is replaced by full path to mount directory, which + is created by vifm basing on the value of 'fusehome' option; + - %PARAM value is filled from the first line of file (whole line), + though in the future it can be changed to whole file content; + - %FOREGROUND means that you want to run mount command as a regular + command (required to be able to provide input for communication with + mounter in interactive way). + + %FOREGROUND is an optional macro. Other macros are not mandatory, but + mount commands likely won't work without them. + + %CLEAR is obsolete name of %FOREGROUND, which is still supported, but + might be removed in future. Its use is discouraged. + + The mounted FUSE file systems will be automatically unmounted in two + cases: + + - when vifm quits (with ZZ, :q, etc. or when killed by signal); + + - when you explicitly leave mount point going up to its parent direc- + tory (with h, Enter on "../" or ":cd ..") and other pane is not in + the same directory or its child directories. + +View look + vifm supports displaying of file list view in two different ways: + + - in a table mode, when multiple columns can be set using 'view- + columns' option (see "Column view" section below for details); + + - in a multicolumn list manner which looks almost like `ls -x` com- + mand output (see "ls-like view" section below for details). + + The look is local for each view and can be chosen by changing value of + the 'lsview' boolean option. + + Depending on view look some of keys change their meaning to allow more + natural cursor moving. This concerns mainly h, j, k, l and other simi- + lar navigation keys. + + Also some of options can be ignored if they don't affect view display- + ing in selected look. For example value of 'viewcolumns' when 'lsview' + is set. + +ls-like view + When this view look is enabled by setting 'lsview' option on, vifm will + display files in multiple columns. Number of columns depends on the + length of the longest file name present in current directory of the + view. Whole file list is automatically reflowed on directory change, + terminal or view resize. + + View looks close to output of `ls -x` command, so files are listed left + to right in rows. + + In this mode file manipulation commands (e.g. d) don't work line-wise + like they do in Vim, since such operations would be uncommon for file + manipulating tasks. Thus, for example, dd will remove only current + file. + +Column view + View columns are described by a comma-separated list of column descrip- + tions, each of which has the following format + [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} + where fw stands for full width and tw stands for text width. + + So it basically consists of four parts: + 1. Optional alignment specifier + 2. Optional width specifier + 3. Mandatory column name + 4. Optional cropping specifier + + Alignment specifier + + It's an optional minus sign as the first symbol of the string. + + Specifies type of text alignment within a column. Two types are sup- + ported: + + - left align + + set viewcolumns=-{name} + + - right align (default) + + set viewcolumns={name} + + Width specifier + + It's a number followed by a percent sign, two numbers (second one + should be less than or equal to the first one) separated with a dot or + a single number. + + Specifies column width and its units. There are tree size types: + + - absolute size - column width is specified in characters + + set viewcolumns=-100{name},20.15{ext} + + results in two columns with lengths of 100 and 20 and a reserved + space of five characters on the left of second column. + + - relative (percent) size - column width is specified in percents of + view width + + set viewcolumns=-80%{name},15%{ext},5%{mtime} + + results in three columns with lengths of 80/100, 15/100 and 5/100 of + view width. + + - auto size (default) - column width is automatically determined + + set viewcolumns=-{name},{ext},{mtime} + + results in three columns with length of one third of view width. + There is no size adjustment to content, since it will slow down ren- + dering. + + Columns of different sizing types can be freely mixed in one view. + Though sometimes some of columns can be seen partly or be completely + invisible if there is not enough space to display them. + + Column name + + This is just a sort key surrounded with curly braces, e.g. + + {name},{ext},{mtime} + + {name} and {iname} keys are the same and present both for consistency + with 'sort' option. + + Empty curly braces ({}) are replaced with the default secondary column + for primary sort key. So after the next command view will be displayed + almost as if 'viewcolumns' is empty, but adding ellipsis for long file + names: + + set viewcolumns=-{name}..,6{}. + + Cropping specifier + + It's from one to three dots after closing curly brace in column format. + + Specifies type of text truncation if it doesn't fit in the column. + Currently tree types are supported: + + - truncation - text is truncated + + set viewcolumns=-{name}. + + results in truncation of names that are too long too fit in the + view. + + - adding of ellipsis - ellipsis on the left or right are added when + needed + + set viewcolumns=-{name}.. + + results in that ellipsis are added at the end of too long file + names. + + - none (default) - text can pass column boundaries + + set viewcolumns=-{name}...,{ext} + + results in that long file names can partially be written on the ext + column. + +Color schemes + The color schemes in vifm can be applied in two different ways: + + - as the primary color scheme; + + - as local to a pane color scheme. + + Both types are set using :colorscheme command, but of different forms: + + - :colorscheme color_scheme_name - for the primary color scheme; + + - :colorscheme color_scheme_name directory - for local color schemes. + + Look of different parts of the TUI (Text User Interface) is determined + in this way: + + - Border, TopLineSel, TopLine, CmdLine, ErrorMsg, StatusLine, JobLine + and WildMenu are always determined by the primary color scheme; + + - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device, + Executable, Fifo and Win are determined by primary color scheme and + a set of local color schemes, which can be empty. + + There might be a set of local color schemes because they are structured + hierarchically according to file system structure. For example, having + the following piece of file system: + + ~ + `-- bin + | + `-- my + + Two color schemes: + + # ~/.vifm/colors/for_bin + highlight Win cterm=none ctermfg=white ctermbg=red + highlight CurrLine cterm=none ctermfg=red ctermbg=black + + # ~/.vifm/colors/for_bin_my + highlight CurrLine cterm=none ctermfg=green ctermbg=black + + And these three commands in the vifmrc file: + + colorscheme Default + colorscheme for_bin ~/bin + colorscheme for_bin_my ~/bin/my + + File list will look in the following way for each level: + + - ~/ - Default color scheme + black background + cursor with blue background + + - ~/bin/ - mix of Default and for_bin color schemes + red background + cursor with black background and red foreground + + - ~/bin/my/ - mix of Default, for_bin and for_bin_my color schemes + red background + cursor with black background and green foreground + +Trash directory + vifm has support of trash directory, which is used as temporary storage + for deleted files or files that were cut. Using trash is controlled by + the 'trash' option, and exact path to the trash can be set with + 'trashdir' option. Trash directory in vifm differs from the system- + wide one by default, because of possible incompatibilities of storing + deleted files among different file managers. But one can set + 'trashdir' to "~/.local/share/Trash" to use a "standard" trash direc- + tory. + + There are two scenarios of using trash in vifm: + + 1. As a place for storing files that were cut by "d" and may be + inserted to some other place in file system. + + 2. As a storage of files, that are deleted but not purged yet. + + The first scenario uses deletion ("d") operations to put files to trash + and put ("p") operations to restore files from trash directory. Note + that such operations move files to and from trash directory, which can + be long term operations in case of different partitions or remote + drives mounted locally. + + The second scenario uses deletion ("d") operations for moving files to + trash directory and :empty command-line command to purge all previously + deleted files. + + Deletion and put operations depend on registers, which can point to + files in trash directory. Normally, there are no nonexistent files in + registers, but vifm doesn't keep track of modifications under trash + directory, so one shouldn't expect value of registers to be absolutely + correct if trash directory was modified not by operation that are meant + for it. But this won't lead to any issues with operations, since they + ignore nonexistent files. + +Client-Server + vifm supports remote execution of command-line mode commands as well as + remote changing of directories. This is possible using --remote com- + mand-line argument. + + To execute a command remotely combine --remote argument with -c <com- + mand> or +<command>. For example: + + vifm --remote -c 'cd /' + vifm --remote '+cd /' + + To change directory not using command-line mode commands one can spec- + ify paths right after --remote argument, like this: + + vifm --remote / + vifm --remote ~ + vifm --remote /usr/bin /tmp + + At the moment there is no way of specifying, which instance of vifm + should arguments be sent. The main purpose of --remote argument is to + provide support of using vifm as a single-instance application. + +Plugin + Plugin for using vifm in vim as a file selector. + + Commands: + + :EditVifm select a file or files to open in the current buffer. + :SplitVifm split buffer and select a file or files to open. + :VsplitVifm vertically split buffer and select a file or files to + open. + :DiffVifm select a file or files to compare to the current file + with + :vert diffsplit. + :TabVifm select a file or files to open in tabs. + + Each command accepts up to two arguments: left pane directory and right + pane directory. After arguments are checked, vifm process is spawned + in a special "file-picker" mode. To pick files just open them either + by pressing l, i or Enter keys, or by running :edit command. If no + files are selected, file under the cursor is opened, otherwise whole + selection is passed to the plugin and opened in vim. + + The plugin have only two settings. It's a string variable named + g:vifm_term to let user specify command to run GUI terminal. By + default it's equal to 'xterm -e'. And another string variable named + g:vifm_exec, which equals "vifm" by default and specifies path to + vifm's executable. To pass arguments to vifm use g:vifm_exec_args, + which is empty by default. + + To use the plugin copy the vifm.vim file to either the system wide + vim/plugin directory or into ~/.vim/plugin. + + If you would prefer not to use the plugin and it is in the system wide + plugin directory add + + let loaded_vifm=1 + + to your ~/.vimrc file. + +Reserved + The following command names are reserved and shouldn't be used for user + commands. + + g[lobal] + v[global] + +ENVIRONMENT + VIFM Points to main configuration directory (usually ~/.vifm/). + + MYVIFMRC + Points to main configuration file (usually ~/.vifm/vifmrc). + + These environment variables are valid inside vifm and also can be used + to configure it by setting some of them before running vifm. + + When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Win- + dows: vifmrc in the same directory as vifm.exe has higher priority than + $VIFM/vifmrc). + + See "Startup" section above for more details. + + VIFM_FUSE_FILE + On execution of external commands this variable is set to the + full path of file used to initiate FUSE mount of the closes + mount point from current pane directory up. It's not set when + outside FUSE mount point. When vifm is used inside terminal + multiplexer, it tries to set this variable as well (it doesn't + work this way on its own). + +SEE ALSO + vifm-convert-dircolors(1), vifm-pause(1), vifmrc-converter(1) + + Website: http://vifm.info/ + Wiki: http://wiki.vifm.info/ + + Esperanto translation of the documentation by Sebastian Cyprych: + http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html + +AUTHOR + Vifm was written by ksteen <ksteen@users.sourceforge.net> + And currently is developed by xaizek <xaizek@openmailbox.org> + + + +vifm 0.8 July 09, 2015 VIFM(1) diff --git a/.config/vifm/vifminfo b/.config/vifm/vifminfo new file mode 100644 index 0000000..2efba2e --- /dev/null +++ b/.config/vifm/vifminfo @@ -0,0 +1,1004 @@ +# You can edit this file by hand, but it's recommended not to do that. + +# Marks: +'H + $HOME/ + .. +1460294363 +'a + /home/archlinux/vgg/macosxd3/Media + diskutil.info +1571932923 +'b + /home/archlinux/vgg/bin/ + .. +1527005860 +'c + /MacOSX-Data3/Media/Series + .. +1483912400 +'d + /MacOSX-Data/Computing/Media-Tutorial/Misc/Lynda - Data Science Foundations: Data Mining + .. +1491576070 +'e + /MacOSX-Data/Computing/Media-Tutorial/Misc/Lynda - Data Science Foundations: Data Mining + .. +1484569444 +'f + $HOME/macosxd2/Training/FMA + .. +1487770242 +'h + /home/archlinux/vgg/ + .. +1527005860 +'k + $HOME/Computing/Android/nexus4/BackUp + Kon-Boot for Windows 2.5.0 Retail [deepstatus].rar +1478036950 +'o + /home/archlinux/vgg/macosxd3/Media/Series/Black Books/Series 3 + EP6 - Party.avi +1577236529 +'p + /MacOSX-Data/Computing/Media-Tutorial/Python + .. +1491576093 +'q + /MacOSX-Data/Computing/Media-Tutorial/Misc/Vim + .. +1491576171 +'r + $HOME/Computing/Media-Tutorial/R + .. +1490814769 +'u + /run/media/vgg/FB5B-E338 + Wil_Wheaton_plays_Lanterns_on_TABLETOP__270p-360p.mp4 +1493296818 +'v + $HOME/Videos + .. +1461747139 +'w + $HOME/dwhelper + Win Poker Games Every Time With This Secret Cheat - Scam Sch.mp4 +1487595979 +'x + /run/media/vgg/ED500GB/Backup/EHD2 + .. +1490611072 +'y + /MacOSX-Data2/media/Youtube/PythonDataAnalysisTutorial + .. +1486123815 + +# TUI: +al +q0 +v2 +ov +m-1 +l-11,2 +r2 + +# Left window history (oldest to newest): +d/home/archlinux/vgg + Pictures +25 +d/home/archlinux/vgg/Pictures + Centro.DCIM +31 +d/home/archlinux/vgg/Pictures/Centro.DCIM + Training +15 +d/home/archlinux/vgg/Pictures/Centro.DCIM/Training + .. +0 +d/home/archlinux/vgg/Pictures/Centro.DCIM + Misc +13 +d/home/archlinux/vgg/Pictures/Centro.DCIM/Misc + Photo_101607_002.jpg +16 +d/home/archlinux/vgg/Pictures/Centro.DCIM + Isabella&Donna +12 +d/home/archlinux/vgg/Pictures/Centro.DCIM/Isabella&Donna + Photo_120209_010.jpg +39 +d/home/archlinux/vgg/Pictures/Centro.DCIM + BackImage +10 +d/home/archlinux/vgg/Pictures/Centro.DCIM/BackImage + boulder_a17.jpg.pdb +18 +d/home/archlinux/vgg/Pictures/Centro.DCIM + Palm +1 +d/home/archlinux/vgg/Pictures + Centro.DCIM +31 +d/home/archlinux/vgg + Pictures +25 +d/ + home +25 +d/home/archlinux/vgg/Downloads + TheUrbanPrepper-All-PDFs +2 +d/home/archlinux/vgg/Downloads/TheUrbanPrepper-All-PDFs + Altoids +1 +d/home/archlinux/vgg/Downloads/TheUrbanPrepper-All-PDFs/Altoids + Urban-Altoids-EDC-Kit-v3.pdf +1 +d/home/archlinux/vgg/Downloads/TheUrbanPrepper-All-PDFs + Vehicle Preps +9 +d/home/archlinux/vgg/Downloads/TheUrbanPrepper-All-PDFs/Vehicle Preps + Vehicle Preps - Signaling Module.pdf +1 +d/home/archlinux/vgg/Downloads/TheUrbanPrepper-All-PDFs + Vehicle Preps +9 +d/home/archlinux/vgg/Downloads + .. +0 +d/home/archlinux/vgg + macosxd3 +18 +d/home/archlinux/vgg/macosxd3 + Media +1 +d/home/archlinux/vgg/macosxd3/Media + Nancy.Drew.2019.S01E03.HDTV.x264-SVA[eztv].mkv +21 +d/home/archlinux/vgg/macosxd3 + Media +1 +d/home/archlinux/vgg/macosxd3/Media + Series +4 +d/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Jeet Kune Do Entering to Trapping to Grappling by Larry Hartsell +12 +d/home/archlinux/vgg/macosxd3 + Media +1 +d/home/archlinux/vgg/macosxd3/Media + S.W.A.T.2017.S03E04.HDTV.x264-KILLERS[ettv] +2 +d/home/archlinux/vgg/macosxd3/Media/S.W.A.T.2017.S03E04.HDTV.x264-KILLERS[ettv] + .. +0 +d/home/archlinux/vgg/macosxd3/Media + SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv] +3 +d/home/archlinux/vgg/macosxd3/Media/SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv] + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Project A (1983) [BluRay] [720p] [YTS.AM] +2 +d/home/archlinux/vgg/macosxd3/Media/Project A (1983) [BluRay] [720p] [YTS.AM] + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Series +1 +d/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t] +5 +d/home/archlinux/vgg/macosxd3/Media/Dizzy Gillespie, Charlie Parker, Bud Powell, Charles Mingus, Max Roach - Toronto, Massey Hall, (jazz)(flac)[rogercc][h33t] + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Series +1 +d/home/archlinux/vgg/macosxd3/Media/Series + ProdigalSon +3 +d/home/archlinux/vgg/macosxd3/Media/Series/ProdigalSon + .. +0 +d/home/archlinux/vgg/macosxd3/Media/Series + FBI +7 +d/home/archlinux/vgg/macosxd3/Media/Series/FBI + .. +0 +d/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Series +1 +d/home/archlinux/vgg/macosxd3/Media/Series + SealTeam +3 +d/home/archlinux/vgg/macosxd3/Media/Series/SealTeam + .. +0 +d/home/archlinux/vgg/macosxd3/Media/Series + SWAT +4 +d/home/archlinux/vgg/macosxd3/Media/Series/SWAT + S.W.A.T.2017.S03E04.HDTV.x264-KILLERS[ettv].mkv +1 +d/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Mvs +5 +d/home/archlinux/vgg/macosxd3/Media/Mvs + .. +0 +d/home/archlinux/vgg/macosxd3/Media + Series +2 +d/home/archlinux/vgg/macosxd3/Media/Series + Black Books +5 +d/home/archlinux/vgg/macosxd3/Media/Series/Black Books + Series 3 +1 +d/home/archlinux/vgg/macosxd3/Media/Series/Black Books/Series 3 + .. +0 +d/home/archlinux/vgg/macosxd3/Media/Series + BrooklynNineNine +1 +d/home/archlinux/vgg/macosxd3/Media + Series +1 +d/home/archlinux/vgg/macosxd3/Media/Series + BrooklynNineNine +1 +d/home/archlinux/vgg/macosxd3/Media/Series/BrooklynNineNine + .. +0 +d/home/archlinux/vgg/macosxd3/Media/Series + BrooklynNineNine +1 +d/home/archlinux/vgg/macosxd3/Media + .. +0 +d/home/archlinux/vgg/macosxd3 + Media +1 +d/home/archlinux/vgg/macosxd3/Media + .. +0 +d/home/archlinux/vgg/macosxd3 + Media +1 +d/home/archlinux/vgg/macosxd3/Media + .. +0 +d/home/archlinux/vgg/macosxd3 + .. +0 +d/home/archlinux/vgg + Pictures +29 +d/home/archlinux/vgg/Pictures + IMAG2798.jpg +36 +d/home/archlinux/vgg + Pictures +29 +d/home/archlinux + vgg +1 +d/home + archlinux +2 +d/ + home +24 +d/home + archlinux +2 +d/home/archlinux + vgg +1 +d/home/archlinux/vgg + Pictures +29 +d/home/archlinux/vgg/Pictures + MonsterRace +32 +d/home/archlinux/vgg/Pictures/MonsterRace + .. +0 +d/home/archlinux/vgg/Pictures + MonsterRace +32 +d/home/archlinux/vgg/Pictures/MonsterRace + D3B_3011%20copy.jpg +2 +d/home/archlinux/vgg/Pictures + MonsterRace +32 +d/home/archlinux/vgg + Pictures +29 +d/home/archlinux + vgg +1 +d/home/archlinux/vgg + Pictures +29 +d/home/archlinux/vgg/Pictures + wallpapers +1 +d/home/archlinux/vgg/Pictures/wallpapers + Unsorted +1 +d/home/archlinux/vgg/Pictures/wallpapers/Unsorted + Wallpapers Girls №581 +1 +d/home/archlinux/vgg/Pictures/wallpapers/Unsorted/Wallpapers Girls №581 + Wallpapers Girls №581_224.jpg +7 +d/home/archlinux/vgg/macosxd3/Media + Fights +3 +d/home/archlinux/vgg + Pictures +16 +d/home/archlinux/vgg/Pictures + PicDump20181221 +4 +d/home/archlinux/vgg/Pictures/PicDump20181221 + Camera +1 +d/home/archlinux/vgg/Pictures/PicDump20181221/Camera + .. +0 +d/home/archlinux/vgg/Pictures/PicDump20181221 + Camera +1 +d/home/archlinux/vgg/Pictures/PicDump20181221/Camera + .. +0 +d/home/archlinux/vgg/Pictures/PicDump20181221 + .. +0 +d/home/archlinux/vgg/Pictures + .. +0 +d/home/archlinux/vgg + goto_clipboard.cgi +25 +d/home/archlinux/vgg/macosxd3/Media + Books +3 +d + +# Right window history (oldest to newest): +D/MacOSX-Data2/media + ewtn +8 +D/MacOSX-Data2 + media +6 +D/MacOSX-Data2/media + .. +0 +D/MacOSX-Data2 + media +6 +D/ + MacOSX-Data3 +4 +D/MacOSX-Data3 + Media +1 +D/MacOSX-Data3/Media + Series +3 +D/MacOSX-Data3/Media/Series + DoomPatrol +14 +D/MacOSX-Data3/Media/Series/DoomPatrol + .. +0 +D/MacOSX-Data3/Media/Series + LastManStanding +27 +D/MacOSX-Data3/Media/Series/LastManStanding + .. +0 +D/MacOSX-Data3/Media/Series + StrikeBack +39 +D/MacOSX-Data3/Media/Series/StrikeBack + .. +0 +D/MacOSX-Data3/Media/Series + TheBlackList +39 +D/MacOSX-Data3/Media/Series/TheBlackList + .. +0 +D/MacOSX-Data3/Media/Series + TheBlackList +39 +D/MacOSX-Data3/Media + Series +3 +D/MacOSX-Data3 + Media +1 +D/ + MacOSX-Data2 +3 +D/MacOSX-Data2 + media +6 +D/MacOSX-Data2/media + Audio +1 +D/MacOSX-Data2/media/Audio + Jazz +4 +D/MacOSX-Data2/media/Audio/Jazz + .. +0 +D/MacOSX-Data2/media/Audio + .. +0 +D/MacOSX-Data2/media + .. +0 +D/MacOSX-Data2 + media +6 +D/ + MacOSX-Data4 +5 +D/MacOSX-Data4 + Media-Tutorial +2 +D/MacOSX-Data4/Media-Tutorial + Misc +4 +D/MacOSX-Data4/Media-Tutorial/Misc + .. +0 +D/MacOSX-Data4/Media-Tutorial + .. +0 +D/MacOSX-Data4 + Media-Tutorial +2 +D/ + MacOSX-Data2 +3 +D/MacOSX-Data2 + media +6 +D/MacOSX-Data2/media + Audio +1 +D/MacOSX-Data2/media/Audio + Isabella +3 +D/MacOSX-Data2/media/Audio/Isabella + .. +0 +D/MacOSX-Data2/media/Audio + SpokenWord +6 +D/MacOSX-Data2/media/Audio/SpokenWord + Misc +2 +D/MacOSX-Data2/media/Audio/SpokenWord/Misc + .. +0 +D/MacOSX-Data2/media/Audio/SpokenWord + .. +0 +D/MacOSX-Data2/media/Audio + .. +0 +D/MacOSX-Data2/media + Audio +1 +D/MacOSX-Data2 + media +6 +D/ + AIPS +0 +D/home/archlinux/vgg/macosxd3/Media/Series + IntoTheBadlands +22 +D/home/archlinux/vgg/macosxd3/Media/Series/IntoTheBadlands + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + NancyDrew +27 +D/home/archlinux/vgg/macosxd3/Media/Series/NancyDrew + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + NancyDrew +27 +D/home/archlinux/vgg/macosxd3/Media + Series +11 +D/home/archlinux/vgg/macosxd3 + Media +1 +D/home/archlinux/vgg + macosxd3 +29 +D/home/archlinux + vgg +1 +D/home + archlinux +1 +D/home/archlinux + vgg +1 +D/home/archlinux/vgg + macosxd3 +29 +D/home/archlinux/vgg/macosxd3 + Media +1 +D/home/archlinux/vgg/macosxd3/Media + Series +10 +D/home/archlinux/vgg/macosxd3/Media/Series + NancyDrew +23 +D/home/archlinux/vgg/macosxd3/Media/Series/NancyDrew + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + Arrow +3 +D/home/archlinux/vgg/macosxd3/Media/Series/Arrow + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + Treadstone +23 +D/home/archlinux/vgg/macosxd3/Media/Series/Treadstone + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + FBI +13 +D/home/archlinux/vgg/macosxd3/Media/Series/FBI + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + TheFlash +23 +D/home/archlinux/vgg/macosxd3/Media/Series/TheFlash + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + MrMercedes +4 +D/home/archlinux/vgg/macosxd3/Media/Series/MrMercedes + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + BlackLightning +4 +D/home/archlinux/vgg/macosxd3/Media/Series/BlackLightning + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + ProdigalSon +23 +D/home/archlinux/vgg/macosxd3/Media/Series/ProdigalSon + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + SWAT +23 +D/home/archlinux/vgg/macosxd3/Media/Series/SWAT + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + SealTeam +23 +D/home/archlinux/vgg/macosxd3/Media/Series/SealTeam + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + SealTeam +23 +D/home/archlinux/vgg/macosxd3/Media + Series +11 +D/home/archlinux/vgg/macosxd3/Media/Series + StarTrek +23 +D/home/archlinux/vgg/macosxd3 + license-ws-120-e2-201505 +4 +D/home/archlinux/vgg + macosxd3 +23 +D/home/archlinux/vgg/macosxd3 + .. +0 +D/home/archlinux/vgg + .config +14 +D/home/archlinux/vgg/.config + vifm +18 +D/home/archlinux/vgg/.config/vifm + .. +0 +D/home/archlinux/vgg/music + .. +0 +D/home/archlinux/vgg + macosxd3 +21 +D/home/archlinux/vgg/macosxd3 + .Trashes +4 +D/home/archlinux/vgg/macosxd3/.Trashes + .. +0 +D/home/archlinux/vgg/macosxd3 + Media +1 +D/home/archlinux/vgg/macosxd3/Media + Series +3 +D/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +D/home/archlinux/vgg/macosxd3/Media + Series +4 +D/home/archlinux/vgg/macosxd3/Media/Series + Babylon5 +4 +D/home/archlinux/vgg/macosxd3/Media/Series/Babylon5 + .. +0 +D/home/archlinux/vgg/macosxd3/Media/Series + .. +0 +D/home/archlinux/vgg/macosxd3/Media + Series +3 +D + +# Command line history (oldest to newest): +:help rename file +:help vifmrc +:vimhelp on +:quit +:cd /home +:view! +:vs! +:!mkdir 1-Introduction +:q! +:!ls +:!echo $PWD +:rename +:help empty +:%s/.//g +:": +:set num +:mkdir WalkingDead +:w +:u +:mkdir Six +:mkdir SonOfZorn +:mkdir Salem +:set confirm off +:set confirm=permdelete +:set confirm +:mkdir 24 +:mkdir MacGyver +:mkdir Legion +:mkdir HackingTheWild +:undo +:mkdir ComicBookMen +:mkdir Bucky +:mkdir Datacamp +:ls -lrt +:mkdir Rebel +:mkdir ForgedInFire +:mkdir Guerillas +:%s/h\ S/h.S/ +:%s/\ /./g +:%s/T/t +:S/Training.Day.S01E09/training.day.109/ +:s/Training.Day.S01E09/training.day.109/ +:s/S01E/1 +:s/Training.Day/training.day/ +:mkdir Genius +:Trash +:preview +:empty +:registers +:colorscheme Default +:help colorscheme +:colorscheme solarized-dark +:view hidden +:help modes +:t +:set number +:h +:help sort +:set sort=mtime +:set sort-=mtime +:set sort+=mtime +:set sort=-mtime +:? +:help trash +:mkdir Treadstone +:mkdir FBI +:sp +:marks list +:marks +:colorscheme +:help +:help preview +:help window +:help view +:view +:o +:split +:two +:vs +:goto / +:Q +:ZZ +:zz +:q + +# Search history (oldest to newest): +/girl +/////////****************9999999999999999999999999999999999999999: +/dw +/empty +/. +/a +/transm +/vim +/gri +/py +/24 +/let +/exp +/leg +/col +/amer +/des +// +/leth +/mkv +/cri +/legi +/sha +/hom +/r +/rans +/int +/legio +/expa +/dc +/marv +/reb +/powe +/ran +/ho +/shad +/ele +/h\ S +/\ +/luc +/T +/Training.Day.S01E09 +/out +/tak +/S01E +/Training.Day +/got +/kev +/sco +/desi +/big +/sup +/cat +/haw +/tra +/se +/shel +/config +/vifm +/.Trash +/doo +/last +/stri +/llist +/list +/pic +/bad +/tread +/fbi +/flas +/mer +/lightn +/prod + +# Prompt history (oldest to newest): +pHawaii.Five-0.2010.S07E18.HDTV.XviD-FUM[ettv].avi +phawaii.five-0.2010.716.hdtv-lol[ettv]hawaii.five-0.2010.716.hdtv-lol[ettv].mkv +pHawaii.Five-0.2010.S07E18.HDTV.XviD-FUM[ett].avi +pHawaii.Five-0.2010.S07E16.HDTV.XviD-FUM].mkv +pHawaii.Five-0.2010.S07E17.HDTV.XviD-FUM.mkv +pJesusOfNazareth +pHeadshot.srt +pHeadshot.2016.HDRip.XviD.AC3-EVO.avi +pHeadshot.2016.HDRip.XviD.AC3-EVO.srt +pRedHotChiliPeppers-TheStorySoFar +pRed Hot Chili Peppers - The Story So Far +pTwilight of the Thunder God +pMegadeth - Dystopia +pDisturbed - Immortalized +pMystic Prophecy - Killhammer +pRag’n’Bone Man Human +pShadesOfBlue +pTimeAfterTime +pTheAmericans +pAssassins.Creed.2016.DVDRip.XviD.AC3-EVO.avi +pAssassins.Creed.2016.DVDRip.XviD.AC3-EVO.srt +pR tutorial - 1.The True Basics of R.mp4 +pR tutorial - 2.The basic data types in R.mp4 +pR tutorial - 3.How to Create and Name Vectors in R.mkv +pR tutorial - 04.Different Ways to Create and Name Vectors in R.mkv +pR tutorial - 01.The True Basics of R.mp4 +pR tutorial - 02.The basic data types in R.mp4 +pR tutorial - 03.How to Create and Name Vectors in R.mkv +pR tutorial - 05.Subsetting your Vectors in R.mkv +pR tutorial - 06.Learn How to Create and Name Matrices in R.mkv +pR tutorial - 07.Learn How to Subset Matrices in R.mp4 +pR tutorial - 08.Matrix Arithmetic in R.mp4 +pR tutorial - 09.Using Factors in R.mp4 +pR tutorial - 10.How to Create & Name Lists in R.mp4 +pR Tutorial - 11.How to Subset & Extend Lists in R.mp4 +pR Tutorial - 12.Using the Data Frame in R.mp4 +pR tutorial - 13.Learn How to Subset, Extend & Sort Data Frames in R.mp4 +pR tutorial - 11.How to Subset & Extend Lists in R.mp4 +pR tutorial - 12.Using the Data Frame in R.mp4 +pR tutorial - 14.Making Basic Graphics in R.mp4 +pR tutorial - 15.Customizing Your Plots In R.mp4 +pR tutorial - 16.How to plot multiple graphs in R.mp4 +pR tutorial - 17.How To Use Conditional Statements in R.mp4 +pR tutorial - 18.Logical Operators and Vectors in R.mp4 +pR tutorial - 19.Relational Operators in R.mp4 +pR tutorial - 20.Writing functions in R.mkv +pR tutorial - 21.Scoping with R.mkv +pR tutorial - 22.Data structures in R.mkv +pR tutorial - 23.Working with for loops in R.mkv +pVikings.mp4 +pAssassins.Creed.2016.DCDRip.XviD.AC3-EVO.mp4 +pAssassins.Creed.2016.DVDRip.XviD.AC3-EVO.mp4 +pSetting up Sublime Text to Build Python. +pThe.Catch.S02E01.WEB-DL.XviD-FUM[ettv].avi +pTheCatch +pSnatch +pMarvelsIronFist +pConMan +pIntoTheBadlands +pScorpion.S03E20.HDTV.x264-LOL.mkv +pThe.Catch.S02E03.720p.HEVC.x265-MeGusta.mkv +pOasis +pGantz.O +pTime.After.Time.US.S01E04.hdtv-lol.mkv +pdesignated.survivor.112.HDTV.x264-KILLERS.mkv +pJamiroquai - Automaton +pOutcast +pPrisonBreak +pdesignated.survivor.115.HDTV.x264-KILLERS[ettv].mkv +pTheGetDownSeason1 +pTheGetDown +pdesignated.survivor.116.HDTV.x264-KILLERS.mkv +pMarvel.Agents.of.S.H.I.E.L.D.S04E17.Identity.and.Change.720p.WEB-DL.x264.AAC.mp4 +pMarvel.Agents.of.S.H.I.E.L.D.S04E17.Identity.and.Change.720p.WEB-DL.x264.AAC.srt +pMarvels.Agents.of.S.H.I.E.L.D.S04E17.Identity.and.Change.720p.WEB-DL.x264.AAC.mp4 +pBetterCallSaul +pPowerless.108.HDTV.x264-KILLERS.mkv +ppowerless.108.x264-KILLERS.mkv +psupernatural.1218.WEB-DL.x264-FUM.mp4 +phawaii.five-0.2010.722.HDTV.x264-SVA.mkv +ptraining.day.108.WEB-DL.x264-FUM.mp4 +pGuerilla +pdesignated.survivor.117.HDTV.x264-KILLERS.mkv +pBosch +pBosch.S03E05 Blood Under The Bridge WEBRip x264-RMTeam.mp4 +pBosch.S03E06 Birdland WEBRip x264-RMTeam.mkv +pdesignated.survivor.118.HDTV.x264-KILLERS.mkv +pblindspot.219.HDTV.x264-SVA.mkv +pTraining.Day.S01E10.HDTV.x264-SVA[eztv].mkv +ptraining.day.110.HDTV.x264-SVA.mkv +pAmericanGods +pInto.the.Badlands.S02E07.CONVERT.avi +pTalking.With.Chris.Hardwick.S01E01.720p.WEB-DL.x264.mp4 +pGenius.S01E02.hdtv.x264.mkv +pdesignated.survivor.119.HDTV.x264-KILLERS.mkv +plindspot.220.HDTV.x264-SVA.mkv +pblindspot.220.HDTV.x264-SVA.mkv +ptraining.day.111.480p.x264mSD.mkv +pSense8 +ppy files to the opposite pane + +# Local filter history (oldest to newest): +|jj + +# Registers: +""/MacOSX-Data3/.vifm-Trash-1000/000_SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv].mkv + +# Directory stack (oldest to newest): + +# Trash content: +t/MacOSX-Data2/.vifm-Trash-1000/000_Young.Sheldon.S02E14.iNTERNAL.480p.x264-mSD[eztv].mkv + /home/archlinux/vgg/macosxd3/Media/Series/YoungSheldon/Young.Sheldon.S02E14.iNTERNAL.480p.x264-mSD[eztv].mkv +t/MacOSX-Data3/.vifm-Trash-1000/000_eclipseLuna.p2f + /home/archlinux/vgg/macosxd3/Media/Series/YoungSheldon/eclipseLuna.p2f +t/user4/.vifm-Trash-1000/000_The.Christ.Slayer.2019.720p.WEBRip.x264-[YTS.AM].mp4 + /home/archlinux/vgg/macosxd3/Media/Mvs/The.Christ.Slayer.2019.720p.WEBRip.x264-[YTS.AM].mp4 +t/user4/.vifm-Trash-1000/000_The.Christ.Slayer.2019.720p.WEBRip.x264-[YTS.AM].mp4_ + /home/archlinux/vgg/macosxd3/Media/Mvs/The.Christ.Slayer.2019.720p.WEBRip.x264-[YTS.AM].mp4_ +t/MacOSX-Data2/.vifm-Trash-1000/000_The Christ Slayer (2019) [WEBRip] [720p] [YTS.AM] + /MacOSX-Data2/media/The Christ Slayer (2019) [WEBRip] [720p] [YTS.AM] +t/MacOSX-Data3/.vifm-Trash-1000/000_SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv] + /home/archlinux/vgg/macosxd3/Media/SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv] +t/MacOSX-Data3/.vifm-Trash-1000/000_S.W.A.T.2017.S03E04.HDTV.x264-KILLERS[ettv] + /home/archlinux/vgg/macosxd3/Media/S.W.A.T.2017.S03E04.HDTV.x264-KILLERS[ettv] +t/MacOSX-Data3/.vifm-Trash-1000/000_Project A (1983) [BluRay] [720p] [YTS.AM] + /home/archlinux/vgg/macosxd3/Media/Project A (1983) [BluRay] [720p] [YTS.AM] +t/MacOSX-Data3/.vifm-Trash-1000/000_diskutil.info + /home/archlinux/vgg/macosxd3/Media/diskutil.info +t/MacOSX-Data3/.vifm-Trash-1000/000_blob + /home/archlinux/vgg/macosxd3/Media/blob +t/MacOSX-Data3/.vifm-Trash-1000/000_diskutil(1).info + /home/archlinux/vgg/macosxd3/Media/diskutil(1).info +t/MacOSX-Data3/.vifm-Trash-1000/000_FBI.S02E05.720p.HDTV.x265-MiNX[eztv].mkv + /home/archlinux/vgg/macosxd3/Media/Series/FBI/FBI.S02E05.720p.HDTV.x265-MiNX[eztv].mkv +t/MacOSX-Data3/.vifm-Trash-1000/000_Prodigal.Son.S01E05.480p.x264-mSD[eztv].mkv + /home/archlinux/vgg/macosxd3/Media/Prodigal.Son.S01E05.480p.x264-mSD[eztv].mkv +t/MacOSX-Data3/.vifm-Trash-1000/001_FBI.S02E05.720p.HDTV.x265-MiNX[eztv].mkv + /home/archlinux/vgg/macosxd3/Media/FBI.S02E05.720p.HDTV.x265-MiNX[eztv].mkv +t/MacOSX-Data3/.vifm-Trash-1000/000_SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv].mkv + /home/archlinux/vgg/macosxd3/Media/Series/SealTeam/SEAL.Team.S03E04.HDTV.x264-KILLERS[ettv].mkv + +# State: +f +i1 +[.1 +[F +F +I1 +].1 +]F +s0 diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc new file mode 100755 index 0000000..004ae84 --- /dev/null +++ b/.config/vifm/vifmrc @@ -0,0 +1,449 @@ +" nvim: filetype=vifm +source ~/.config/vifm/vifmshortcuts +" ------------------------------------------------------------------------------ +" --- General Settings ----- {{{ + +" This is the actual command used to start vi. +set vicmd=nvim + +" confirm delete set only to permanent deleteset +set confirm=permdelete + +" This is how many directories to store in the directory history. +set history=100 + +" Automatically resolve symbolic links on l or Enter. +set nofollowlinks + +" With this option turned on you can run partially entered commands withset +" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te<tab>). +set fastrun + +" Natural sort of (version) numbers within text. +set sortnumbers + +" Maximum number of changes that can be undone. +set undolevels=100 + +" If you installed the nvim.txt help file set vimhelp. If would rather use a plain text help file set novimhelp. +set vimhelp + +" If you would like to run an executable file when you +" press return on the file name set this. +set norunexec + +" Use KiB, MiB, ... instead of KB, MB, ... +set noiec + +" Selected color schemecolorscheme +colorscheme luke +"colorscheme solarized-dark + +" Show list of matches on tab completion in command-line modeset +set wildmenu + +" Ignore case in search patterns unless it contains at least one uppercaseset +" letterset +set ignorecase +set smartcase + +" Don't highlight search results automaticallyset +set nohlsearch + +" Use increment searching (search while typing) +set incsearch + +" Try to leave some space from cursor to upper/lower border in listsset +set scrolloff=4 + +" Don't do too many requests to slow file systemsset +set slowfs=curlftpfs + +" The FUSE_HOME directory will be used as a root dir for all FUSE mounts. +" Unless it exists with write/exec permissions set, vifm will attempt to +" create it. +set fusehome=/tmp/vifm_FUSE +" ------------------------------------------------------------------------------ +" Examples of configuring both panels +" Customize view columns a bit (enable ellipsis for truncated file names) +" windo set viewcolumns=-{name}..,6{}. +" Filter-out build and temporary files +" windo filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/ +" ------------------------------------------------------------------------------ + +" }}} +" ------------------------------------------------------------------------------ +" --- Commands & Mappings ----- {{{ +" +" :com[mand][!] command_name action +" The following macros can be used in a command +" %a is replaced with the user arguments. +" %c the current file under the cursor. +" %C the current file under the cursor in the other directory. +" %f the current selected file, or files. +" %F the current selected file, or files in the other directory. +" %b same as %f %F. +" %d the current directory name. +" %D the other window directory name. +" %m run the command in a menu window +" Sample mappings + +command! df df -h %m 2> /dev/null +command! diff nvim -d %f %F +command! zip zip -r %f.zip %f +command! run !! ./%f +command! make !!make %a +command! mkcd :mkdir %a | cd %a +command! vgrep nvim "+grep %a" +command! reload :write | restart + + +nnoremap s :shell<cr> " Start shell in current directory +nnoremap S :sort<cr> " Display sorting dialog +nnoremap o :!nvim --remote-tab-silent %f<cr> " Open file in existing instance of vim +nnoremap O :!nvim %f<cr> " Open file in new instance of vim +nnoremap gb :file &<cr>l " Open file in the background using its default program +nnoremap yd :!echo %d | xclip %i<cr> " Yank current directory path into the clipboard +nnoremap yf :!echo %c:p | xclip %i<cr> " Yank current file path into the clipboard +nnoremap ,t :!st &<cr> " Open console in current directory +nnoremap ,w :set wrap!<cr> " Toggle wrap setting on ,w key +map R :restart<CR> +map x :!sxiv -ft * 2>/dev/null &<CR> +nnoremap o :file &<cr> +map E :!$EDITOR %f<CR> +map mkd :mkdir<space> +map bg :!setbg %f &<CR> +map X :!ext %f &<CR> +nnoremap s :shell<cr> +nnoremap w :view<cr> +vnoremap w :view<cr>gv +nnoremap yd :!echo %d | xclip %i<cr> +nnoremap yf :!echo %c:p | xclip %i<cr> +nnoremap I cw<c-a> +nnoremap cc cw<c-u> +nnoremap A cw +nmap <space> tj + +" Mappings for faster renaming +nnoremap I cw<c-a> +nnoremap cc cw<c-u> +nnoremap A cw<c-w> + +nnoremap ,c :write | execute ':!nvim $MYVIFMRC' | restart<cr> " Open vim to edit vifmrc and apply settings after returning to vifm + +" Toggle visibility of preview window +nnoremap w :view<cr> +vnoremap w :view<cr>gv + +" Example of standard two-panel file managers mappings +nnoremap <f3> :!less %f<cr> +nnoremap <f4> :edit<cr> +nnoremap <f5> :copy<cr> +nnoremap <f6> :move<cr> +nnoremap <f7> :mkdir<space> +nnoremap <f8> :delete<cr> +nnoremap <backspace> :delete<cr> + +nmap yy :!cp %f %D<cr> " copy files to the opposite pane +nmap dd :!mv %f %D<cr> " move files to the opposite pane +nmap yp :clone <cr> " make a backup copy files in the same pane + +" copy files to the opposite pane (using rsync) +nmap ry :!tsp rsync -a %f %D<cr> + +" move files to the opposite pane (using rsync) +nmap rd :!tsp rsync -a --remove-source-files %f %D && tsp find %f -type d -empty -exec rmdir {} \; && tsp rmdir %f<cr> + +"nmap <space> t " spacebar to select files; same as t (tag) +nmap q ZZ " quicker quit + +" atool archive management +" extracts current file (similar to ranger file manager) +nmap EE :!atool -x %f <cr> +command extract atool -x %f %m 2> /dev/null + +map <C-h> <C-w>h +map <C-j> <C-w>j +map <C-k> <C-w>k +map <C-l> <C-w>l +map <C-o> <C-w>o +map <C-s> <C-w>s +map <C-v> <C-w>v + +" }}} +" ------------------------------------------------------------------------------ +" --- Format & Status Line ----- {{{ +" Format for displaying time in file list. For example: +" TIME_STAMP_FORMAT=%m/%d-%H:%M +" See man date or man strftime for details. + +set timefmt=%m/%d\ %H:%M +set statusline=" %t%= %A %10u:%-7g %15s %20d " " Set custom status line look +" }}} +" ------------------------------------------------------------------------------ +" --- Bookmarks & shortcuts ----- {{{ +" :mark mark /full/directory/path [filename] + +nmap bb :marks <cr> " show all bookmarks + +" }}} +" ------------------------------------------------------------------------------ +" --- Trash Directory ----- {{{ + +" The default is to move files that are deleted with dd or :d to +" the trash directory. If you change this you will not be able to move +" files by deleting them and then using p to put the file in the new location. +" I recommend not changing this until you are familiar with vifm. +" This probably shouldn't be an option. + +set trash "trash-cli interface to handle trash +nmap DD :!trash-put %f <cr> +nmap u :!trash-restore<cr> +nmap DE :!trash-empty <cr> + +" }}}" ------------------------------------------------------------------------------ +" ------------------------------------------------------------------------------ +" --- File Types & Viewers ----- {{{ +" The file type is for the default programs to be used with +" a file extension. +" :filetype pattern1,pattern2 defaultprogram,program2 +" :fileviewer pattern1,pattern2 consoleviewer +" The other programs for the file type can be accessed with the :file command +" The command macros %f, %F, %d, %F may be used in the commands. +" The %a macro is ignored. To use a % you must put %%. + +" For automated FUSE mounts, you must register an extension with :file[x]type +" in one of following formats: +" +" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables +" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. +" A sample line might look like this: +" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR +" +" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables +" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. +" A sample line might look like this: +" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR +" %PARAM value is filled from the first line of file (whole line). +" Example first line for SshMount filetype: root@127.0.0.1:/ +" +" You can also add %CLEAR if you want to clear screen before running FUSE +" program. + +" --- PDF ----- {{{ +filetype *.pdf + \ {View in zathura} + \ zathura %c, + \ {View in okular} + \ okular %f, + \ {View in evince} + \ evince %f, +fileviewer *.pdf pdftotext -nopgbrk %c - +" }}} +" --- PostScript ----- {{{ +filextype *.ps,*.eps,*.ps.gz + \ {View in zathura} + \ zathura %f, + \ {View in gv} + \ gv %c %i &, +" }}} +" --- Djvu ----- {{{ +filextype *.djvu + \ {View in zathura} + \ zathura %f, + \ {View in apvlv} + \ apvlv %f, +" }}} +" --- Audio ----- {{{ +filetype *.wav,*.mp3,*.flac,*.ogg,*.m4a,*.wma,*.ape,*.ac3 + \ {Play using mpv} + \ mpv %f, + \ {Play using ffplay} + \ ffplay -nodisp %c, + \ {Play using MPlayer} + \ mplayer %f, +fileviewer *.mp3 mp3info +fileviewer *.flac soxi +" }}} +" --- Video ----- {{{ +filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.vob,*.flv,*.m2v,*.mov,*.webm,*.ts,*.m4v + \ {View using mpv} + \ mpv %f, + \ {View using mplayer} + \ mplayer %f, + \ {View using ffplay} + \ ffplay -fs %c, + \ {View using vlc} + \ vlc %f, + \ {View using Dragon} + \ dragon %f, +"fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.vob,*.flv,*.m2v,*.mov,*.webm,*.ts,*.m4v +" \ vifmimg videopreview %px %py %pw %ph %c +" \ %pc +" \ vifmimg clear +" "\ ffprobe -pretty %c 2>&1 +" }}} +" --- Web ----- {{{ +filextype *.html,*.htm + \ {Open with w3m} + \ w3m %f + \ {Open with qutebrowser} + \ qutebrowser %f &, + \ {Open with uzbl} + \ uzbl-browser %f %i &, +filetype *.html,*.htm links, lynx +" }}} +" --- Object ----- {{{ +filetype *.o nm %f | less +" }}} +" --- Man page ----- {{{ +filetype *.[1-8] man ./%c +fileviewer *.[1-8] man ./%c | col -b +" }}} +" --- Image ----- {{{ +filetype *.bmp,*.jpg,*.jpeg,*.png,*.xpm + \ {view in sxiv} + \ sxiv -ia %c %d &, + \ {View in feh} + \ feh %d &, +fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.xpm + \ vifmimg draw %px %py %pw %ph %c + \ %pc + \ vifmimg clear +filetype *.gif + \ {View in feh} + \ feh %d &, +"fileviewer *.gif +" \ vifimg gifpreview %px %py %pw %ph %c +" \ %pc +" \ vifmimg clear +" }}} +" --- MD5 ----- {{{ +filetype *.md5 + \ {Check MD5 hash sum} + \ md5sum -c %f, +" }}} +" --- GPG signature ----- {{{ +filetype *.asc + \ {Check signature} + \ !!gpg --verify %c, +" }}} +" --- Torrent ----- {{{ +filetype *.torrent transmission-remote --add %f, +fileviewer *.torrent transmission-show %c +" }}} +" --- FuseZipMount ----- {{{ +filetype *.zip,*.jar,*.war,*.ear,*.oxt + \ {Mount with fuse-zip} + \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, + \ {View contents} + \ zip -sf %c | less, + \ {Extract here} + \ tar -xf %c, +fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c +" }}} +" --- ArchiveMount ----- {{{ +filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz + \ {Mount with archivemount} + \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR, +fileviewer *.tgz,*.tar.gz tar -tzf %c +fileviewer *.tar.bz2,*.tbz2 tar -tjf %c +fileviewer *.tar.txz,*.txz xz --list %c +" }}} +" --- Rar2FsMount and rar archives ----- {{{ +filetype *.rar + \ {Mount with rar2fs} + \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR, +fileviewer *.rar unrar v %c +" }}} +" --- IsoMount ----- {{{ +filetype *.iso + \ {Mount with fuseiso} + \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR, +" }}} +" --- SshMount ----- {{{ +filetype *.ssh + \ {Mount with sshfs} + \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR, +" }}} +" --- FtpMount ----- {{{ +filetype *.ftp + \ {Mount with curlftpfs} + \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR, +" }}} +" --- Fuse7z and 7z archives ----- {{{ +filetype *.7z + \ {Mount with fuse-7z} + \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR, +fileviewer *.7z 7z l %c +" }}} +" --- Office files ----- {{{ +filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx libreoffice %f & +fileviewer *.doc catdoc %c +fileviewer *.docx, docx2txt.pl %f - +filetype *.csv,*.xlsx sc-im %c +fileviewer *.csv sed "s/,,,,/,,-,,/g;s/,,/ /g" %c | column -t | sed "s/ - / /g" | cut -c -%pw +fileviewer *md,*xml,*.css,*.py,*.c,*.h,*.sh,*.diff,*.tex,*.md,*.bib,*.sty,*.desktop highlight -O ansi %c +fileviewer *.html w3m -dump %c +filextype *.html,*.htm firefox %f 2>/dev/null & + +fileviewer *.docx docx2txt %c - +" }}} +" --- TuDu files ----- {{{ +filetype *.tudu tudu -f %c +" }}} +" --- Qt projects ----- {{{ +filextype *.pro qtcreator %f & +" }}} +" --- Directories ----- {{{ +fileviewer .*/,*/ tree %f +fileview */ tree %c -L 1 --dirsfirst +fileview ../ tree %c -L 1 --dirsfirst +" }}} +" --- Previews ----- {{{ +" +" Explicitly set highlight type for some extensions +" +" 256-color terminal +" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c +" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c +" +" 16-color terminal +" fileviewer *.c,*.h highlight -O ansi -s dante %c +" +" Or leave it for automatic detection +" +" fileviewer * pygmentize -O style=monokai -f console256 -g + +" Displaying pictures in terminal +" +" fileviewer *.jpg,*.png shellpic %c +" }}} +" --- Other File types ----- {{{ +" Open all other files with default system programs (you can also remove all +" :file[x]type commands above to ensure they don't interfere with system-wide +" settings). By default all unknown files are opened with 'vi[x]cmd' +" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option +" for unknown file types. +" For *nix: + filetype * xdg-open %c +" For OS X: +" filetype * open +" }}} +" }}} +" ------------------------------------------------------------------------------ +" What should be saved automatically between vifm runs +" Like in previous versions of vifm +" set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs +" Like in vi +set vifminfo=dhistory,savedirs,chistory,state,tui,shistory, + \phistory,fhistory,dirstack,registers,bookmarks +" ------------------------------------------------------------------------------ +" Various customization examples +" Use ag (the silver searcher) instead of grep +" set grepprg=ag\ --line-numbers\ %i\ %a\ %s +" Add additional place to look for executables +" let $PATH=$HOME.'/bin/fuse:'.$PATH +" Block particular shortcut +" +" nnoremap <left> <nop> diff --git a/.config/vifm/vifmshortcuts b/.config/vifm/vifmshortcuts new file mode 100644 index 0000000..fbfec80 --- /dev/null +++ b/.config/vifm/vifmshortcuts @@ -0,0 +1,120 @@ +" vim: filetype=vim +map gh :cd ~/<CR> +map th <tab>:cd ~/<CR><tab> +map Mh <tab>:cd ~/<CR><tab>:mo<CR> +map Yh <tab>:cd ~/<CR><tab>:co<CR> +map gcf :cd ~/.config<CR> +map tcf <tab>:cd ~/.config<CR><tab> +map Mcf <tab>:cd ~/.config<CR><tab>:mo<CR> +map Ycf <tab>:cd ~/.config<CR><tab>:co<CR> +map gsc :cd ~/.scripts<CR> +map tsc <tab>:cd ~/.scripts<CR><tab> +map Msc <tab>:cd ~/.scripts<CR><tab>:mo<CR> +map Ysc <tab>:cd ~/.scripts<CR><tab>:co<CR> +map gd :cd ~/Documents<CR> +map td <tab>:cd ~/Documents<CR><tab> +map Md <tab>:cd ~/Documents<CR><tab>:mo<CR> +map Yd <tab>:cd ~/Documents<CR><tab>:co<CR> +map gD :cd ~/Downloads<CR> +map tD <tab>:cd ~/Downloads<CR><tab> +map MD <tab>:cd ~/Downloads<CR><tab>:mo<CR> +map YD <tab>:cd ~/Downloads<CR><tab>:co<CR> +map gvd :cd ~/dwhelper<CR> +map tvd <tab>:cd ~/dwhelper<CR><tab> +map Mvd <tab>:cd ~/dwhelper<CR><tab>:mo<CR> +map Yvd <tab>:cd ~/dwhelper<CR><tab>:co<CR> +map gm :cd ~/music<CR> +map tm <tab>:cd ~/music<CR><tab> +map Mm <tab>:cd ~/music<CR><tab>:mo<CR> +map Ym <tab>:cd ~/music<CR><tab>:co<CR> +map gpp :cd ~/Pictures<CR> +map tpp <tab>:cd ~/Pictures<CR><tab> +map Mpp <tab>:cd ~/Pictures<CR><tab>:mo<CR> +map Ypp <tab>:cd ~/Pictures<CR><tab>:co<CR> +map gpw :cd ~/Pictures/wallpapers<CR> +map tpw <tab>:cd ~/Pictures/wallpapers<CR><tab> +map Mpw <tab>:cd ~/Pictures/wallpapers<CR><tab>:mo<CR> +map Ypw <tab>:cd ~/Pictures/wallpapers<CR><tab>:co<CR> +map gvv :cd ~/Videos<CR> +map tvv <tab>:cd ~/Videos<CR><tab> +map Mvv <tab>:cd ~/Videos<CR><tab>:mo<CR> +map Yvv <tab>:cd ~/Videos<CR><tab>:co<CR> +map ge :cd /etc<CR> +map te <tab>:cd /etc<CR><tab> +map Me <tab>:cd /etc<CR><tab>:mo<CR> +map Ye <tab>:cd /etc<CR><tab>:co<CR> +map gmn :cd /mnt<CR> +map tmn <tab>:cd /mnt<CR><tab> +map Mmn <tab>:cd /mnt<CR><tab>:mo<CR> +map Ymn <tab>:cd /mnt<CR><tab>:co<CR> +map gmd1 :cd ~/macosxd1<CR> +map tmd1 <tab>:cd ~/macosxd1<CR><tab> +map Mmd1 <tab>:cd ~/macosxd1<CR><tab>:mo<CR> +map Ymd1 <tab>:cd ~/macosxd1<CR><tab>:co<CR> +map gmd2 :cd ~/macosxd2<CR> +map tmd2 <tab>:cd ~/macosxd2<CR><tab> +map Mmd2 <tab>:cd ~/macosxd2<CR><tab>:mo<CR> +map Ymd2 <tab>:cd ~/macosxd2<CR><tab>:co<CR> +map gmd3 :cd ~/macosxd3<CR> +map tmd3 <tab>:cd ~/macosxd3<CR><tab> +map Mmd3 <tab>:cd ~/macosxd3<CR><tab>:mo<CR> +map Ymd3 <tab>:cd ~/macosxd3<CR><tab>:co<CR> +map gmd4 :cd ~/macosxd4<CR> +map tmd4 <tab>:cd ~/macosxd4<CR><tab> +map Mmd4 <tab>:cd ~/macosxd4<CR><tab>:mo<CR> +map Ymd4 <tab>:cd ~/macosxd4<CR><tab>:co<CR> +map gva :cd ~/macosxd3/Media/anime<CR> +map tva <tab>:cd ~/macosxd3/Media/anime<CR><tab> +map Mva <tab>:cd ~/macosxd3/Media/anime<CR><tab>:mo<CR> +map Yva <tab>:cd ~/macosxd3/Media/anime<CR><tab>:co<CR> +map gvf :cd ~/macosxd3/Media/Fights<CR> +map tvf <tab>:cd ~/macosxd3/Media/Fights<CR><tab> +map Mvf <tab>:cd ~/macosxd3/Media/Fights<CR><tab>:mo<CR> +map Yvf <tab>:cd ~/macosxd3/Media/Fights<CR><tab>:co<CR> +map gvm :cd ~/macosxd3/Media/Mvs<CR> +map tvm <tab>:cd ~/macosxd3/Media/Mvs<CR><tab> +map Mvm <tab>:cd ~/macosxd3/Media/Mvs<CR><tab>:mo<CR> +map Yvm <tab>:cd ~/macosxd3/Media/Mvs<CR><tab>:co<CR> +map gvs :cd ~/macosxd3/Media/Series<CR> +map tvs <tab>:cd ~/macosxd3/Media/Series<CR><tab> +map Mvs <tab>:cd ~/macosxd3/Media/Series<CR><tab>:mo<CR> +map Yvs <tab>:cd ~/macosxd3/Media/Series<CR><tab>:co<CR> +map gvc :cd ~/macosxd4/Media-Tutorial<CR> +map tvc <tab>:cd ~/macosxd4/Media-Tutorial<CR><tab> +map Mvc <tab>:cd ~/macosxd4/Media-Tutorial<CR><tab>:mo<CR> +map Yvc <tab>:cd ~/macosxd4/Media-Tutorial<CR><tab>:co<CR> +map gu4 :cd /user4<CR> +map tu4 <tab>:cd /user4<CR><tab> +map Mu4 <tab>:cd /user4<CR><tab>:mo<CR> +map Yu4 <tab>:cd /user4<CR><tab>:co<CR> +map gu4m :cd /user4/Media<CR> +map tu4m <tab>:cd /user4/Media<CR><tab> +map Mu4m <tab>:cd /user4/Media<CR><tab>:mo<CR> +map Yu4m <tab>:cd /user4/Media<CR><tab>:co<CR> +map gscm :cd /scratch/Media<CR> +map tscm <tab>:cd /scratch/Media<CR><tab> +map Mscm <tab>:cd /scratch/Media<CR><tab>:mo<CR> +map Yscm <tab>:cd /scratch/Media<CR><tab>:co<CR> +map gs2m :cd /scratch2/Media<CR> +map ts2m <tab>:cd /scratch2/Media<CR><tab> +map Ms2m <tab>:cd /scratch2/Media<CR><tab>:mo<CR> +map Ys2m <tab>:cd /scratch2/Media<CR><tab>:co<CR> +map bf :e ~/.config/bmfiles<CR> +map bd :e ~/.config/bmdirs<CR> +map cfb :e ~/.bashrc<CR> +map cfe :e ~/.bashrc.d/01environ.bash.linux<CR> +map cfa :e ~/.bashrc.d/02aliases.bash.linux<CR> +map cff :e ~/.bashrc.d/03functions.bash.linux<CR> +map cfz :e ~/.zshrc<CR> +map cfv :e ~/.vimrc<CR> +map cfr :e ~/.config/ranger/rc.conf<CR> +map cfi :e ~/.config/i3/config<CR> +map cfm :e ~/.config/mutt/muttrc<CR> +map eb :e ~/Documents/LaTeX/uni.bib<CR> +map cv :e ~/Documents/LaTeX/cv.tex<CR> +map cfd :e ~/.Xdefaults<CR> +map cfu :e ~/.newsboat/urls<CR> +map cfn :e ~/.newsboat/config<CR> +map cfmb :e ~/.config/ncmpcpp/bindings<CR> +map cfmc :e ~/.config/ncmpcpp/config<CR> +map er :e ~/Documents/referbib<CR> diff --git a/.config/youtube-dl/config b/.config/youtube-dl/config new file mode 100644 index 0000000..b76383d --- /dev/null +++ b/.config/youtube-dl/config @@ -0,0 +1,2 @@ +# +# -o ~/dwhelper/%(title)s.%(ext)s diff --git a/.config/youtube-viewer/api.json b/.config/youtube-viewer/api.json new file mode 100644 index 0000000..7ab6233 --- /dev/null +++ b/.config/youtube-viewer/api.json @@ -0,0 +1,5 @@ +{ + "key": "AIzaSyAMc8ISWh-WZ6tX16gxlkM7SJua206ThJE", + "client_id": "526003644271-2scpssqf8fdbtgkud41rigmv0n8h2013.apps.googleusercontent.com", + "client_secret": "x-j3Qlf6vnQEbWiJIi1WSl0v" +} diff --git a/.config/youtube-viewer/youtube-viewer.conf b/.config/youtube-viewer/youtube-viewer.conf new file mode 100755 index 0000000..678b5b5 --- /dev/null +++ b/.config/youtube-viewer/youtube-viewer.conf @@ -0,0 +1,108 @@ +#!/usr/bin/perl + +# YouTube Viewer 3.7.5 - configuration file + +our $CONFIG = { + auto_captions => 0, + autohide_watched => 0, + autoplay_mode => 0, + cache_dir => "/home/archlinux/vgg/.cache/youtube-viewer", + captions_dir => "/tmp", + colors => 1, + comments_order => "time", + confirm => 0, + convert_cmd => "ffmpeg -i *IN* *OUT*", + convert_to => undef, + copy_caption => 0, + custom_layout => 0, + custom_layout_format => [ + { align => "right", color => "bold", text => "*NO*.", width => 3 }, + { text => "*TITLE*", width => "60%" }, + { align => "right", color => "green", text => "*AUTHOR*", width => "20%" }, + { align => "right", color => "blue", text => "*TIME*", width => 8 }, + ], + dash_mp4_audio => 1, + dash_segmented => 1, + dash_support => 1, + debug => 0, + download_and_play => 1, + download_with_wget => 1, + downloads_dir => "/home/archlinux/vgg/dwhelper", + env_proxy => 1, + fat32safe => 0, + ffmpeg_cmd => "/usr/bin/ffmpeg", + fullscreen => 0, + get_captions => 0, + get_term_width => 1, + highlight_color => "bold", + highlight_watched => 0, + history => 0, + history_file => "~/.config/youtube-viewer/history.txt", + history_limit => 10000, + hl => "en_US", + http_proxy => undef, + interactive => 1, + keep_original_video => 0, + maxResults => 30, + merge_into_mkv => 1, + merge_into_mkv_args => "-loglevel warning -c:s srt -c:v copy -c:a copy -disposition:s forced", + merge_with_captions => 1, + order => undef, + page => 1, + prefer_av1 => 0, + prefer_mp4 => 0, + publishedAfter => undef, + publishedBefore => undef, + regionCode => undef, + remember_watched => 0, + remove_played_file => 0, + resolution => "original", + results_fixed_width => 0, + results_with_colors => 0, + results_with_details => 0, + safeSearch => undef, + show_video_info => 1, + skip_if_exists => 0, + skip_watched => 0, + srt_languages => ["en", "es"], + subscriptions_order => "relevance", + thousand_separator => ",", + use_invidious_api => 0, + video_filename_format => "*FTITLE*.*FORMAT*", + video_player_selected => "mpv", + video_players => { + mplayer => { + arg => "-prefer-ipv4 -really-quiet -title *TITLE*", + audio => "-audiofile *AUDIO*", + cmd => "/usr/bin/mplayer", + fs => "-fs", + novideo => "-novideo", + srt => "-sub *SUB*", + }, + mpv => { + arg => "--really-quiet --title=*TITLE* --no-ytdl", + audio => "--audio-file=*AUDIO*", + cmd => "mpv", + fs => "--fullscreen", + novideo => "--no-video", + srt => "--sub-file=*SUB*", + }, + vlc => { + arg => "--quiet --play-and-exit --no-video-title-show --input-title-format *TITLE*", + audio => "--input-slave *AUDIO*", + cmd => "vlc", + fs => "--fullscreen", + novideo => "--intf dummy --novideo", + srt => "--sub-file *SUB*", + }, + }, + videoCaption => undef, + videoDefinition => undef, + videoDimension => undef, + videoDuration => undef, + videoLicense => undef, + videoSyndicated => undef, + watched_file => "$ENV{HOME}/.config/youtube-viewer/watched.txt", + wget_cmd => "wget", + youtube_video_url => "https://www.youtube.com/watch?v=%s", +} diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc new file mode 120000 index 0000000..2977075 --- /dev/null +++ b/.config/zathura/zathurarc @@ -0,0 +1 @@ +/home/archlinux/vgg/.cache/wal/zathurarc
\ No newline at end of file @@ -0,0 +1,52 @@ +# $_FASD_DATA +# Path to the fasd data file, default "$HOME/.fasd". +# +# $_FASD_BLACKLIST +# List of blacklisted strings. Commands matching them will not be processed. +# Default is "--help". +# +# $_FASD_SHIFT +# List of all commands that needs to be shifted, defaults to "sudo busybox". +# +# $_FASD_IGNORE +# List of all commands that will be ignored, defaults to "fasd ls echo". +# +# $_FASD_TRACK_PWD +# Fasd defaults to track your "$PWD". Set this to 0 to disable this behavior. +# +# $_FASD_AWK +# Which awk to use. Fasd can detect and use a compatible awk. +# +# $_FASD_SINK +# File to log all STDERR to, defaults to "/dev/null". +# +# $_FASD_MAX +# Max total score / weight, defaults to 2000. +# +# $_FASD_SHELL +# Which shell to execute. Some shells will run faster than others. fasd +# runs faster with dash and ksh variants. +# +# $_FASD_BACKENDS +# Default backends. +# +# $_FASD_RO +# If set to any non-empty string, fasd will not add or delete entries from +# database. You can set and export this variable from command line. +# +# $_FASD_FUZZY +# Level of "fuzziness" when doing fuzzy matching. More precisely, the number of +# characters that can be skipped to generate a match. Set to empty or 0 to +# disable fuzzy matching. Default value is 2. +# +# $_FASD_VIMINFO +# Path to .viminfo file for viminfo backend, defaults to "$HOME/.viminfo" +# +# $_FASD_RECENTLY_USED_XBEL +# Path to XDG recently-used.xbel file for recently-used backend, defaults to +# "$HOME/.local/share/recently-used.xbel" +# +alias V='f -t -e vim -b viminfo' +alias v='f -e vim' # quick opening files with vim +alias m='f -e mpv' # quick opening files with mpv +alias o='a -e xdg-open' # quick opening files with xdg-open diff --git a/.i3/.i3exit b/.i3/.i3exit new file mode 100755 index 0000000..cec55dd --- /dev/null +++ b/.i3/.i3exit @@ -0,0 +1,31 @@ +#!/bin/sh +lock() { + +# Add a small delay to prevent suspend races + +i3lock && sleep 1 + +} + +case "$1" in + lock) + lock + ;; + logout) + i3-msg exit + ;; + suspend) + lock && systemctl suspend + ;; + reboot) + systemctl reboot + ;; + shutdown) + systemctl poweroff + ;; + *) + echo "Usage: $0 {lock | logout | suspend | reboot | shutdown}" + exit 2 +esac + +exit 0 diff --git a/.i3/config b/.i3/config new file mode 100755 index 0000000..4c80886 --- /dev/null +++ b/.i3/config @@ -0,0 +1,669 @@ +## This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout some time, delete +# this file and re-run i3-config-wizard(1). +# + +# ================================= +# +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! +# ================================= + +##################################################### +# +# --- Constants --- {{{ +# +##################################################### + +set $base00 #101218 +set $base01 #1f222d +set $base02 #252936 +set $base03 #7780a1 +set $base04 #C0C5CE +set $base05 #d1d4e0 +set $base06 #C9CCDB +set $base07 #ffffff +set $base08 #ee829f +set $base09 #f99170 +set $base0A #ffefcc +set $base0B #a5ffe1 +set $base0C #97e0ff +set $base0D #97bbf7 +set $base0E #c0b7f9 +set $base0F #fcc09e + +set_from_resource $darkblack color0 #000000 +set_from_resource $black color8 #000000 +set_from_resource $darkred color1 #000000 +set_from_resource $red color9 #000000 +set_from_resource $darkgreen color2 #000000 +set_from_resource $green color10 #000000 +set_from_resource $darkyellow color3 #000000 +set_from_resource $yellow color11 #000000 +set_from_resource $darkblue color4 #000000 +set_from_resource $blue color12 #000000 +set_from_resource $darkmagenta color5 #000000 +set_from_resource $magenta color13 #000000 +set_from_resource $darkcyan color6 #000000 +set_from_resource $cyan color14 #000000 +set_from_resource $darkwhite color7 #000000 +set_from_resource $white color15 #000000 +set $transparent #000000 + +set $workspace1 "1:" +set $workspace2 "2:Term" +set $workspace3 "3:Astro" +set $workspace4 "4:Simul" +set $workspace5 "5:Web" +set $workspace6 "6:Sys" +set $workspace7 "7:Dev" +set $workspace8 "8:Tuts" +set $workspace9 "9:Media" +set $workspace10 "10:" + +##################################################### +# +# }}} +# +##################################################### +##################################################### +# +# --- General Configuration --- {{{ +# +##################################################### +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. + +font pango:System San Francisco Display 10 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# Before i3 v4.8, we used to recommend this one as the default: +# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 +# The font above is very space-efficient, that is, it looks good, sharp and +# clear in small sizes. However, its unicode glyph coverage is limited, the old +# X core fonts rendering does not support right-to-left and this being a bitmap +# font, it doesn’t scale on retina/hidpi displays. + +# Use Mouse+$mod to drag floating windows to their wanted position + + +set $mod Mod4 +floating_modifier $mod + +set $term --no-startup-id /usr/local/bin/st +set $term2 /usr/bin/alacritty +set $term3 /usr/bin/xterm +set $term4 /usr/bin/urxvt +set $browser /usr/bin/qutebrowser + + +#SYSTEMD +set $shutdown sudo shutdown -h now +set $reboot sudo reboot +set $netrefresh --no-startup-id sudo systemctl restart NetworkManager +set $hibernate sudo systemctl suspend + + +# #---Audio and Music Definitions---# # + +# For mpc: +set $music --no-startup-id st -e ncmpcpp -s playlist -S visualizer +set $togglepause --no-startup-id mpc toggle +set $trupause --no-startup-id mpc pause +set $pause --no-startup-id pausempv +set $next --no-startup-id mpc next +set $prev --no-startup-id mpc prev +set $lilfor --no-startup-id mpc seek +10 +set $bigfor --no-startup-id mpc seek +120 +set $lilbak --no-startup-id mpc seek -10 +set $bigbak --no-startup-id mpc seek -120 +set $beg --no-startup-id mpc seek 0% + + +#For PULSEAUDIO/PAMIXER +set $inc --no-startup-id pamixer --allow-boost -i 5 +set $biginc --no-startup-id pamixer --allow-boost -i 15 +set $dec --no-startup-id pamixer --allow-boost -d 5 +set $bigdec --no-startup-id pamixer --allow-boost -d 15 +set $mute --no-startup-id pamixer --allow-boost -t +set $micmute --no-startup-id pamixer --allow-boost -t +set $truemute --no-startup-id pamixer -m +set $unmute --no-startup-id pamixer -u + +# bindsym $mod+BackSpace +bindsym $mod+Shift+BackSpace exec prompt "Are you sure you want to reboot?" "$reboot" + +#STOP/HIDE EVERYTHING: +bindsym $mod+Shift+Escape exec $truemute ; exec $truepause ; workspace lmao ; exec $term -e htop ; exec $term -e ranger +bindsym $mod+Ctrl+Escape exec $unmute ; exec $togglepause + +##################################################### +# +# ================================= +# --- i3-gaps --- {{{ +# ================================= +# +##################################################### + +#hide_edge_borders both +#for_window [class="^.*"] border pixel 0 +for_window [class="^.*"] border pixel 3 +gaps inner 15 +gaps outer 15 + +bindsym $mod+s gaps inner current plus 5 +bindsym $mod+Shift+s gaps inner current minus 5 +bindsym $mod+z gaps outer current plus 5 +bindsym $mod+Shift+z gaps outer current minus 5 + +bindsym $mod+Ctrl+0 gaps inner current set 0; gaps outer current set 0 +bindsym $mod+Ctrl+9 gaps inner current set 15; gaps outer current set 15 + +# }}} +# +##################################################### +##################################################### +# +# ================================= +# --- Window decorations, movement, resize, focus --- {{{ +# ================================= +# +##################################################### + +hide_edge_borders none + +#new_window pixel 2 +#bindsym $mod+y border pixel 2 +bindsym $mod+b border normal +bindsym $mod+Ctrl+b border none + +# kill focused window +bindsym $mod+Shift+q kill + +# change focus +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# move focused window +bindsym $mod+Shift+h move left 30 +bindsym $mod+Shift+j move down 30 +bindsym $mod+Shift+k move up 30 +bindsym $mod+Shift+l move right 30 + +# split in horizontal orientation +bindsym $mod+apostrophe split h + +# split in vertical orientation +bindsym $mod+slash split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+t layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent/child container +bindsym $mod+Shift+a focus parent +bindsym $mod+Ctrl+a focus child + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing h will shrink the window’s width. + # Pressing j will shrink the window’s height. + # Pressing k will grow the window’s height. + # Pressing l will grow the window’s width. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize shrink height 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize shrink height 10 px or 10 ppt + bindsym Up resize grow height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+Ctrl+r mode "resize" + +# Resize window without going into Resize mode + +bindsym $mod+Ctrl+y resize shrink width 10 px or 10ppt +bindsym $mod+Ctrl+u resize shrink height 10 px or 10 ppt +bindsym $mod+Ctrl+i resize grow height 10 px or 10 ppt +bindsym $mod+Ctrl+o resize grow width 10 px or 10 ppt + +# Floating + + for_window [class="Lxappearance"] floating enable + for_window [class="Mplayer"] floating enable #, border normal + for_window [class="mpv"] floating enable move position 640px 10px + for_window [class="matplotlib"] floating enable move position 40px 80px + for_window [class="Matplotlib"] floating enable move position 620px 10px + for_window [class="Vlc"] floating enable + for_window [class="Pavucontrol"] floating enable + for_window [class="Blueman-manager"] floating enable + for_window [title="Gimp"] move workspace $workspace9 + for_window [title="GIMP Startup"] move workspace $workspace9 + for_window [window_role="gimp-dock"] floating disable; move left; resize shrink width 50 px or 50ppt + for_window [window_role="gimp-toolbox"] floating disable; move right; resize grow width 30 px or 30ppt + +#---Dropdown/Scratchpad windows---# +# Below we bind this to $mod+u + +for_window [instance="tmuxdd"] floating enable +for_window [instance="tmuxdd"] resize set 925 500 +for_window [instance="tmuxdd"] move scratchpad +for_window [instance="tmuxdd"] border pixel 5 +for_window [instance="tmuxdd"] sticky enable +exec --no-startup-id $term -n tmuxdd -e tmux -2 + +#---window running R for basic arithmetic ---# +# Below we bind this to $mod+Ctrl+grave + +for_window [instance="dropdowncalc"] floating enable +for_window [instance="dropdowncalc"] resize set 800 300 +for_window [instance="dropdowncalc"] move scratchpad +for_window [instance="dropdowncalc"] border pixel 5 +for_window [instance="dropdowncalc"] sticky enable +exec --no-startup-id $term -n dropdowncalc -f mono:pixelsize=24 -e R -q + +#---Toggle Scratchpad ---# +bindsym $mod+Shift+minus move scratchpad +bindsym $mod+minus scratchpad show +##---YouTube Download window---# + +#for_window [instance="youtube-st"] floating enable +#for_window [instance="youtube-st"] resize set 925 500 +#for_window [instance="youtube-st"] move scratchpad +#for_window [instance="youtube-st"] border pixel 5 +#for_window [instance="youtube-st"] sticky enable +#exec --no-startup-id $term -n youtube-st -e TERM="tmux-256color" tmux -2 + + +# Window Colours +# border background text indicator child_border + client.focused $red $red $magenta $darkmagenta $darkblue + client.unfocused $transparent $blue $white $darkblue $transparent + client.focused_inactive $transparent $blue $white $darkblue $transparent + client.urgent $darkred $darkred $black $darkred $darkred + client.background $black + + +# ================================= +# }}} +# ================================= +# ================================= +# --- Workspaces --- {{{ +# ================================= +# switch to workspace +bindsym $mod+1 workspace $workspace1; exec xwallpaper --zoom "$HOME/.config/wall.png" +bindsym $mod+2 workspace $workspace2; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Anime/samurai.jpg" +bindsym $mod+3 workspace $workspace3; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Spacescapes/Space Exploration 3.jpg" +bindsym $mod+4 workspace $workspace4; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Future/moon SF.jpg" +bindsym $mod+5 workspace $workspace5; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Cityscapes/1433294607949-3.jpg" +bindsym $mod+6 workspace $workspace6; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/100 Beautiful Ultra HD 4K Wallpapers (55).jpg" +bindsym $mod+7 workspace $workspace7; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Landscapes/1490216161620.jpg" +bindsym $mod+8 workspace $workspace8; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Etc/trinity_college.jpg" +bindsym $mod+9 workspace $workspace9; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/Supes cool 39.jpg" +bindsym $mod+0 workspace $workspace10; exec xwallpaper --zoom "$HOME/Pictures/wallpapers/Unsorted/Wallpapers Girls №581/cityscape_32.png" + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $workspace1 +bindsym $mod+Shift+2 move container to workspace $workspace2 +bindsym $mod+Shift+3 move container to workspace $workspace3 +bindsym $mod+Shift+4 move container to workspace $workspace4 +bindsym $mod+Shift+5 move container to workspace $workspace5 +bindsym $mod+Shift+6 move container to workspace $workspace6 +bindsym $mod+Shift+7 move container to workspace $workspace7 +bindsym $mod+Shift+8 move container to workspace $workspace8 +bindsym $mod+Shift+9 move container to workspace $workspace9 +bindsym $mod+Shift+0 move container to workspace $workspace10 + +# automatic switching back and forth between workspaces +workspace_auto_back_and_forth yes +# ================================= +# }}} +# ================================= +# +##################################################### +##################################################### +# +# --- Functions --- {{{ +# +##################################################### +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + font pango: System San Francisco Display, FontAwesome 9 + status_command i3blocks -c ~/.i3/i3blocks.conf + position top + mode dock + modifier None + + colors { + separator $base03 + background $base01 + statusline $base05 + # border background text + focused_workspace $base01 $base01 $base07 + active_workspace $base01 $base02 $base03 + inactive_workspace $base01 $base01 $base03 + urgent_workspace $base01 $base01 $base08 + } +} + +# Run the script to update the mpd i3block on change. +exec --no-startup-id ~/.i3/scripts/i3mpdupdate' + +bindsym $mod+Shift+c reload + +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart + +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" + +# #---Function Buttons---# # + +# Volume Control +bindsym $mod+F11 exec --no-startup-id amixer set Master 5%- +bindsym $mod+F12 exec --no-startup-id amixer set Master 5%+ + +# Brightness Control +bindsym $mod+F1 exec --no-startup-id xbacklight -dec 5 +bindsym $mod+F2 exec --no-startup-id xbacklight -inc 5 + +# Screen Lock/ Logout / Suspend / Reboot +#set $Locker ". $HOME/.i3/scripts/lock.sh $HOME/Pictures/Icons/lock.png" +# bindsym s exec --no-startup-id i3lock --color="$base02" && sleep1 && systemctl suspend, mode "default" + +set $mode_system System (e) logout, (s) suspend, (r) reboot, (Shift+s) shutdown, (n) restart network +mode "$mode_system" { + bindsym e exec --no-startup-id i3-msg exit, mode "default" + bindsym s exec --no-startup-id $HOME/.i3/scripts/lockscreen, mode "default" + #bindsym s exec --no-startup-id $LockerSuspend, mode "default" + bindsym r exec --no-startup-id systemctl reboot, mode "default" + bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" + bindsym n exec --no-startup-id systemctl restart NetworkManager, mode "default" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+F3 exec $term -e nmtui +bindsym $mod+F4 mode "$mode_system" + +bindsym $mod+F5 exec --no-startup-id $netrefresh +bindsym $mod+F6 exec --no-startup-id $term -e transmission-remote-cli +bindsym $mod+F7 exec --no-startup-id $HOME/.i3/scripts/dmenumount +bindsym $mod+F8 exec --no-startup-id $term -n tmuxdd -e $HOME/bin/scripts/mountjutsu +bindsym $mod+F9 exec --no-startup-id $HOME/.i3/scripts/dmenuumount +##################################################### +# +# }}} +# +##################################################### +##################################################### +# +# --- Launch Specific Apps --- {{{ +# +##################################################### + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id j4-dmenu-desktop --dmenu="dmenu -i -fn 'DejaVu Sans-10' -l 20" +bindsym $mod+Ctrl+d exec --no-startup-id j4-dmenu-desktop --dmenu="dmenu_run -i -fn 'DejaVu Sans-10' -l 20" +bindsym $mod+Shift+d exec --no-startup-id passmenu -fn 'DejaVu Sans-10' -l 30 + +#set $mclip ${HOME}/bin/greenclip +#exec --no-startup-id $mclip daemon + +# start a terminal +bindsym $mod+Return exec --no-startup-id $term # st +bindsym $mod+Shift+Return exec --no-startup-id $term -e tmux # st - tmux +bindsym $mod+Ctrl+Return exec --no-startup-id $term2 # alacritty +bindsym $mod+Ctrl+z exec --no-startup-id $term3 # xterm +bindsym $mod+u [instance="tmuxdd"] scratchpad show; [instance="tmuxdd"] move position center +bindsym $mod+Shift+u exec --no-startup-id $term -n tmuxdd -e tmux +bindsym $mod+Ctrl+grave [instance="dropdowncalc"] scratchpad show; [instance="dropdowncalc"] move position center +bindsym $mod+Shift+grave exec --no-startup-id $term -n dropdowncalc -f mono:pixelsize=24 -e R -q + +# Miscellaneous Actions + +bindsym $mod+Ctrl+p exec $togglepause +bindsym $mod+Shift+p exec $pause +bindsym $mod+Shift+m exec $mute +bindsym $mod+Ctrl+x exec --no-startup-id sh $HOME/.local/bin/displayselect +bindsym $mod+Ctrl+s exec --no-startup-id $term -e sh $HOME/bin/scripts/ssh-select.sh +bindsym $mod+grave exec --no-startup-id sh $HOME/.local/bin/dmenuunicode +bindsym $mod+Ctrl+Shift+v exec --no-startup-id sh $HOME/bin/scripts/viewmovies +bindsym $mod+Ctrl+Shift+f exec --no-startup-id sh $HOME/bin/scripts/viewfights +bindsym $mod+Ctrl+Shift+t exec --no-startup-id sh $HOME/bin/scripts/viewseries +bindsym $mod+Ctrl+Shift+a exec --no-startup-id sh $HOME/bin/scripts/viewanime + +# Miscellaneous Apps + +bindsym $mod+a exec --no-startup-id $term -e ncpamixer +bindsym $mod+e exec --no-startup-id $term -e "mutt" +bindsym $mod+i exec --no-startup-id $term -e htop +bindsym $mod+m exec --no-startup-id $music +bindsym $mod+n exec --no-startup-id $term -e newsboat +bindsym $mod+r exec --no-startup-id $term -e ranger +bindsym $mod+v exec --no-startup-id $term -e $EDITOR ${HOME}/vimwiki/index.md +bindsym $mod+w exec --no-startup-id $browser +bindsym $mod+y exec --no-startup-id $term -e calcurse +bindsym $mod+p exec --no-startup-id ls $HOME/Computing/Palm/webos/BACKUPS/ipk-backups/*.ipk | dmenu -l 30 | xargs /opt/PalmSDK/Current/bin/palm-install && notify-send "webos install completed" +bindsym $mod+Shift+Ctrl+p exec --no-startup-id ls $HOME/Raccoon/content/apps/**/*.apk | dmenu -l 30 | xargs /usr/bin/adb install && notify-send "adb install completed" + + +bindsym $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +bindsym $mod+Shift+Ctrl+n exec --no-startup-id $term2 -e nmtui +bindsym $mod+Shift+b exec --no-startup-id /usr/bin/blueman-applet +bindsym $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +bindsym $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +bindsym $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +bindsym $mod+Shift+w exec --no-startup-id sh $HOME/bin/scripts/imgselect +bindsym $mod+Shift+v exec --no-startup-id $term2 -e ncmpcpp -s playlist -S visualizer + +bindsym $mod+Ctrl+w exec --no-startup-id $term -e curl wttr.in/~hatfield + +# Assign Development IDE's to workspace 7 + +assign [class="^Eclipse$"] $workspace7 +assign [class="jetbrains-pycharm-ce"] $workspace7 + +# Assign media applications to workspace 9 + +assign [class="^Vlc$"] $workspace9 +assign [class="^Rhythmbox$"] $workspace9 +assign [class="^Gimp$"] $workspace9 +# +# }}} +# +##################################################### +##################################################### +# +# --- Startup Apps --- {{{ +# +##################################################### +# Set the background +exec --no-startup-id feh --bg-scale $HOME/.config/wall.png +#Starts dunst for notifications: --moved to .xinitrc +#exec --no-startup-id dunst + +# +#start mpd so that ncmpcpp can access it when launched +# +#exec --no-startup-id i3-msg 'exec --no-startup-id /usr/bin/mpd ~/.conf/mpd/mpd.conf' + + +# Unclutter makes the mouse invisible after a brief period - moved to .xinitrc +# exec --no-startup-id unclutter + +#start window effects +#Moved to .xinitrc +#exec compton -f +# +# start up some applications in their respective workspaces +# +exec i3-msg 'workspace $workspace1 ; exec --no-startup-id $term2' + +# }}} +# +##################################################### +# +# }}} +# +##################################################### +# +# --- Key Bindings List --- {{{ +# +##################################################### +# +# $mod+{} +# ======= +# $mod+a focus parent +# $mod+b split h +# $mod+d exec --no-startup-id dmenu_run +# $mod+e exec --no-startup-id $term -e "mutt -F ~/.muttrc" +# $mod+f fullscreen toggle +# $mod+h focus left +# $mod+j focus down +# $mod+k focus up +# $mod+l focus right +# $mod+m exec --no-startup-id /usr/bin/mplayer +# $mod+n border normal +# $mod+r exec --no-startup-id $term -e ranger +# $mod+t layout toggle split +# $mod+u border none +# $mod+v split v +# $mod+w exec --no-startup-id $browser +# $mod+y border pixel 2 +# $mod+z split v, layout stacking +# $mod+space focus mode_toggle +# $mod+Return exec --no-startup-id +# $mod+grave exec --no-startup-id $HOME/bin/scripts/any_term_dropdown.sh +# $mod+F11 exec --no-startup-id amixer set Master 5%- +# $mod+F12 exec --no-startup-id amixer set Master 5%+ +# $mod+F1 exec --no-startup-id xbacklight -dec 5 +# $mod+F2 exec --no-startup-id xbacklight -inc 5 +# $mod+F4 mode "$mode_system" +# +# ======= +# $mod+Shift+{} +# ======= +# $mod+Shift+c reload +# $mod+Shift+d exec --no-startup-id rofi -show run -lines 10 -eh 2 -width 80 \ +# -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) \ +# -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" \ +# -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 12" +# $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut.\ +# Do you really want to exit i3? This will end your X session.' -b \ +# 'Yes, exit i3' 'i3-msg exit'" +# $mod+Shift+f exec --no-startup-id /usr/bin/firefox -no-remote -P default +# $mod+Shift+h move left +# $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +# $mod+Shift+j move down +# $mod+Shift+k move up +# $mod+Shift+l move right +# $mod+Shift+m exec --no-startup-id /usr/bin/mpv +# $mod+Shift+n exec --no-startup-id /usr/bin/nm-applet +# $mod+Shift+q kill +# $mod+Shift+r restart +# $mod+Shift+t exec --no-startup-id /usr/bin/firefox -private-window -no-remote -P Torrent +# $mod+Shift+u resize shrink height 10 px or 10 ppt +# $mod+Shift+w exec --no-startup-id /usr/local/bin/eclipse/eclipse +# $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +# $mod+Shift+space floating toggle +# $mod+Shift+Return exec --no-startup-id $term -e tmux +# +# ======= +# $mod+Ctrl+{} +# ======= +# $mod+Ctrl+r mode "resize" +# $mod+Ctrl+d gaps inner current set 0; gaps outer current set 0 +# $mod+Ctrl+t gaps inner current set 15; gaps outer current set 15 + +# $mod+Ctrl+i resize grow height 10 px or 10 ppt +# $mod+Ctrl+o resize grow width 10 px or 10 ppt +# $mod+Ctrl+u resize shrink height 10 px or 10 ppt +# $mod+Ctrl+y resize shrink width 10 px or 10ppt + +# $mod+Ctrl+h gaps inner current plus 5 +# $mod+Ctrl+j gaps outer current minus 5 +# $mod+Ctrl+k gaps outer current plus 5 +# $mod+Ctrl+l gaps inner current minus 5 +# $mod+Ctrl+space exec --no-startup-id $HOME/bin/scripts/rofi-scripts-collection/rofi-bangs.sh \ +# -font "System San Francisco Display 12" +# $mod+Ctrl+Return exec --no-startup-id guake +# +# ======= + + +##################################################### +# +# --- }}} +# +##################################################### +##################################################### +# +# --- Archive --- {{{ +# +##################################################### +##################################################### +# +# --- Layouts --- {{{ +# +##################################################### + +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp; workspace $workspace1' +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" -e tmux -T "NCMPCPP" -b ; workspace $workspace1' +#exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +#exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id terminator --role="vim"; exec --no-startup-id terminator --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +# +# Refresh layouts if one of the windows is killed +# + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b + +#bindsym $mod+Shift+x exec --no-startup-id workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' + +#bindsym $mod+Shift+x exec --no-startup-id workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id terminator --role="vim"; exec --no-startup-id terminator --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e tmux + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp + +##################################################### +# +# }}} +# +##################################################### +# +# }}} +# +# +##################################################### +# vim:filetype=i3 diff --git a/.i3/config.save b/.i3/config.save new file mode 100755 index 0000000..98d6297 --- /dev/null +++ b/.i3/config.save @@ -0,0 +1,368 @@ +# This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout some time, delete +# this file and re-run i3-config-wizard(1). +# + +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + + +##################################################### +# +# Constants +# +##################################################### + +set $base00 #101218 +set $base01 #1f222d +set $base02 #252936 +set $base03 #7780a1 +set $base04 #C0C5CE +set $base05 #d1d4e0 +set $base06 #C9CCDB +set $base07 #ffffff +set $base08 #ee829f +set $base09 #f99170 +set $base0A #ffefcc +set $base0B #a5ffe1 +set $base0C #97e0ff +set $base0D #97bbf7 +set $base0E #c0b7f9 +set $base0F #fcc09e + +set $workspace1 "1: " +set $workspace2 "2:Term " +set $workspace3 "3:Astro " +set $workspace4 "4:Simul " +set $workspace5 "5:Web " +set $workspace6 "6:Sys " +set $workspace7 "7:Dev " +set $workspace8 "8:Tuts " +set $workspace9 "9:Media " +set $workspace10 "10:" + + +##################################################### +# +# General Configuration +# +##################################################### +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:System San Francisco Display 10 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# Before i3 v4.8, we used to recommend this one as the default: +# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 +# The font above is very space-efficient, that is, it looks good, sharp and +# clear in small sizes. However, its unicode glyph coverage is limited, the old +# X core fonts rendering does not support right-to-left and this being a bitmap +# font, it doesn’t scale on retina/hidpi displays. + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +hide_edge_borders none + +# window decorations + +new_window pixel 2 +bindsym $mod+u border none +bindsym $mod+y border pixel 2 +bindsym $mod+n border normal + +# start a terminal +bindsym $mod+Return exec --no-startup-id gnome-terminal +bindsym $mod+Shift+Return exec --no-startup-id guake +#bindsym $mod+Shift+Return exec --no-startup-id terminator + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +bindsym $mod+d exec --no-startup-id dmenu_run + +# start rofi (alternative program launcher) +bindsym $mod+Shift+d exec --no-startup-id rofi -show run -lines 3 -eh 2 -width 80 -padding $(($(xwininfo -root | awk '/Height/ {print $2}')/4)) -opacity "75" -bw 0 -bc "$base02" -bg "$base02" -fg "$base03" -hlbg "$base02" -hlfg "#9575cd" -font "System San Francisco Display 18" +# There also is the (new) i3-dmenu-desktop which only displays applications +# shipping a .desktop file. It is a wrapper around dmenu, so you need that +# installed. +# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop + +# change focus +#bindsym $mod+j focus left +#bindsym $mod+k focus down +#bindsym $mod+l focus up +#bindsym $mod+semicolon focus right +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +#bindsym $mod+Shift+j move left +#bindsym $mod+Shift+k move down +#bindsym $mod+Shift+l move up +#bindsym $mod+Shift+semicolon move right +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+b split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# split and stack in vertical orientation +bindsym $mod+z split v, layout stacking + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus tfhe child container +#bindsym $mod+d focus child + +# Toggle the sticky modifier (allows floating windows to +# follow to each workspace). TODO (this doesnt work -check syntax) +#bindsym $mod+Shift+w exec i3-msg 'toggle sticky ' + +# switch to workspace +bindsym $mod+1 workspace $workspace1 +bindsym $mod+2 workspace $workspace2 +bindsym $mod+3 workspace $workspace3 +bindsym $mod+4 workspace $workspace4 +bindsym $mod+5 workspace $workspace5 +bindsym $mod+6 workspace $workspace6 +bindsym $mod+7 workspace $workspace7 +bindsym $mod+8 workspace $workspace8 +bindsym $mod+9 workspace $workspace9 +bindsym $mod+0 workspace $workspace10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $workspace1 +bindsym $mod+Shift+2 move container to workspace $workspace2 +bindsym $mod+Shift+3 move container to workspace $workspace3 +bindsym $mod+Shift+4 move container to workspace $workspace4 +bindsym $mod+Shift+5 move container to workspace $workspace5 +bindsym $mod+Shift+6 move container to workspace $workspace6 +bindsym $mod+Shift+7 move container to workspace $workspace7 +bindsym $mod+Shift+8 move container to workspace $workspace8 +bindsym $mod+Shift+9 move container to workspace $workspace9 +bindsym $mod+Shift+0 move container to workspace $workspace10 + +# automatic switching back and forth between workspaces +workspace_auto_back_and_forth yes + +# reload the configuration file +bindsym $mod+Shift+c reload + +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart + +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec --no-startup-id "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + #bindsym j resize shrink width 10 px or 10 ppt + #bindsym k resize grow height 10 px or 10 ppt + #bindsym l resize shrink height 10 px or 10 ppt + #bindsym semicolon resize grow width 10 px or 10 ppt + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize shrink height 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +# Volume Control + +bindsym $mod+F11 exec --no-startup-id amixer set Master 5%- +bindsym $mod+F12 exec --no-startup-id amixer set Master 5%+ + +# Brightness Control + +bindsym $mod+F1 exec --no-startup-id xbacklight -dec 5 +bindsym $mod+F2 exec --no-startup-id xbacklight -inc 5 + +# +# Screen Lock/ Logout / Suspend / Reboot +# +set $Locker ". $HOME/.i3/scripts/lock.sh $HOME/Pictures/Icons/lock.png" +set $LockerSuspend "i3lock && sleep 1" + +set $mode_system System (l) lock, (e) logout, (s) suspend, (r) reboot, (Shift+s) shutdown +mode "$mode_system" { + bindsym l exec --no-startup-id $Locker, mode "default" + bindsym e exec --no-startup-id i3-msg exit, mode "default" + bindsym s exec --no-startup-id i3lock --color="$base02" && sleep1 && systemctl suspend, mode "default" + bindsym r exec --no-startup-id systemctl reboot, mode "default" + bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+F4 mode "$mode_system" + +# Floating + + for_window [class="Lxappearance"] floating enable + for_window [class="Mplayer" ] floating enable + for_window [class="Mpv" ] floating enable, border normal #move absolute 10 100 + for_window [class="Vlc"] floating enable + for_window [class="YaST2"] floating enable + for_window [class="Pavucontrol"] floating enable + for_window [class="Blueman-manager"] floating enable + +# Widow Colours +# border background text indicator + client.focused $base01 $base01 $base07 $base0F + client.focused_inactive $base02 $base02 $base03 $base0F + client.unfocused $base02 $base02 $base03 $base0F + client.urgent $base02 $base08 $base00 $base0F + + + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + font pango: System San Francisco Display, FontAwesome 10 + status_command $HOME/bin/conky-i3bar.sh +# status_command i3status +# status_command i3blocks -c $HOME/.i3/i3blocks.conf + # strip_workspace_numbers yes + colors { + separator $base03 + background $base01 + statusline $base05 + # border background text + focused_workspace $base01 $base01 $base07 + active_workspace $base01 $base02 $base03 + inactive_workspace $base01 $base01 $base03 + urgent_workspace $base01 $base01 $base08 + } + + +} + +# Assign Development IDE's to workspace 7 + +assign [class="^Eclipse$"] $workspace7 +assign [class="jetbrains-pycharm-ce"] $workspace7 + +# Assign media applications to workspace 9 + +assign [class="^vlc$"] $workspace9 +assign [class="^Rhythmbox$"] $workspace9 + + + +# +# Launch Specific Apps +# +bindsym $mod+Shift+g exec --no-startup-id /usr/local/bin/eclipse/eclipse +bindsym $mod+Shift+f exec --no-startup-id /usr/bin/firefox +bindsym $mod+Shift+y exec --no-startup-id /usr/bin/firefox -no-remote -P Youtube +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Jupyter +bindsym $mod+Shift+i exec --no-startup-id /usr/bin/firefox -no-remote -P Torrent +bindsym $mod+Shift+m exec --no-startup-id /usr/bin/mplayer +bindsym $mod+Shift+n exec --no-startup-id /usr/bin/nixnote2 +bindsym $mod+Shift+v exec --no-startup-id /usr/bin/vlc + +# +# Refresh layouts if one of the windows is killed +# + +bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e tmux + +#bindsym $mod+Shift+x exec --no-startup-id workspace $2; focus parent; focus parent; focus parent; focus parent; focus parent; kill; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp + +# +# Startup Apps +# +# Set the background +exec --no-startup-id feh --bg-scale $HOME/Pictures/Anime/samurai.jpg +#exec --no-startup-id feh --bg-scale $HOME/Pictures/MeteorM31_hemmerich_960.jpg +#exec --no-startup-id feh --bg-scale $HOME/Pictures/space-wallpaper-7-610x343.jpg +# +#start mpd so that ncmpcpp can access it when launched +# +# +# start the network applet +# +exec --no-startup-id /usr/bin/nm-applet +# +# start the bluetooth applet +# +#exec --no-startup-id /usr/bin/blueman-applet +# +#start window effects +# +exec compton -f +# +# start up some applications in their respective workspaces +# +exec --no-startup-id i3-msg 'workspace $workspace5 ; exec --no-startup-id /usr/bin/firefox ' +# +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic.json; exec gnome-terminal --role="vim"; exec gnome-terminal --role="zypper"; exec gnome-terminal --role="mc" -e mc ; exec terminator --role="ncmpcpp" -e ncmpcpp; workspace $workspace1' +#exec --no-startup-id i3-msg 'workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="ranger" -T "RANGER" -b -e ranger ; exec --no-startup-id terminator --role="ncmpcpp" -e tmux -T "NCMPCPP" -b ; workspace $workspace1' +exec --no-startup-id i3-msg ' exec --no-startup-id /usr/bin/mpd $HOME/.mpd/mpd.conf; workspace $workspace2; append_layout $HOME/.i3/ws_2-generic-t.json; exec --no-startup-id gnome-terminal --role="vim"; exec --no-startup-id gnome-terminal --role="zypper"; exec --no-startup-id terminator --role="vifm" -T "VIFM" -b -e vifm ; exec --no-startup-id terminator --role="ncmpcpp" --layout="NCMPCPP" -T "NCMPCPP" -b ; workspace $workspace1' +# + diff --git a/.i3/i3blocks.conf b/.i3/i3blocks.conf new file mode 100755 index 0000000..15cf4f4 --- /dev/null +++ b/.i3/i3blocks.conf @@ -0,0 +1,73 @@ +command=/usr/lib/i3blocks/$BLOCK_NAME +separator_block_width=15 +markup=pango + +[mpd] +label=🎼 +command=~/.i3/scripts/i3mpd +interval=once +align=left +signal=11 + +[volume] +interval=1 +command=~/.i3/scripts/i3volume +markup=pango + +[torrent] +interval=20 +command=~/.i3/scripts/torrent +signal=7 + +[weather] +command=~/.i3/scripts/i3weather +interval=1800 + +[mailbox] +label=📬 +interval=180 +command=~/.i3/scripts/mailbox +signal=12 + +[vpn] +command=~/.i3/scripts/i3vpn +interval=10 +align=left + +[iface] +command=~/.i3/scripts/i3iface +color=#00FF00 +interval=10 + +#[iface] +#instance=eth0 +#color=#00FF00 +#interval=10 + +#[iface] +#instance=enp2s0f0 +#color=#00FF00 +#interval=10 + +#[wifi] +##instance=wlan0 +#color=#0000FF +#interval=10 + +[wifi] +##instance=wlp3s0b1 +#color=#0000FF +#interval=10 + +[battery] +command=~/.i3/scripts/i3battery +interval=5 + +[temperature] +label= +interval=10 + +[time] +label=📅 +command=echo $(date '+%Y %b %d %I:%M%p') 🕓 +interval=5 diff --git a/.i3/i3blocks.conf.orig b/.i3/i3blocks.conf.orig new file mode 100755 index 0000000..6c4b7e6 --- /dev/null +++ b/.i3/i3blocks.conf.orig @@ -0,0 +1,191 @@ +# i3blocks config file +# +# Please see man i3blocks for a complete reference! +# The man page is also hosted at http://vivien.github.io/i3blocks +# +# List of valid properties: +# +# align +# color +# command +# full_text +# instance +# interval +# label +# min_width +# name +# separator +# separator_block_width +# short_text +# signal +# urgent + +# Global properties +# +# The top properties below are applied to every block, but can be overridden. +# Each block command defaults to the script name to avoid boilerplate. +command=/usr/local/libexec/i3blocks/$BLOCK_NAME +separator_block_width=15 +#markup=none +markup=pango +full_text= +align=center +color=#7780a1 +separator=false +separator_block_width=3 + +#[separator] +# Volume indicator +# +# The first parameter sets the step (and units to display) +# The second parameter overrides the mixer selection +# See the script for details. +[volume] +#label=VOL +label= +instance=Master +#instance=PCM +interval=1 +signal=10 +#color=#C9CCDB + +[separator] + +[#volume] +#command=$SCRIPT_DIR/volume.sh +#interval=1 +#label= +#color=#C9CCDB + + +# Memory usage +# +# The type defaults to "mem" if the instance is not specified. +#[memory] +#label=MEM +#separator=false +#interval=30 + +#[memory] +#label=SWAP +#instance=swap +#separator=false +#interval=30 + +# Disk usage +# +# The directory defaults to $HOME if the instance is not specified. +# The script may be called with a optional argument to set the alert +# (defaults to 10 for 10%). +[disk] +label= +#instance=/mnt/data +interval=persist +markup=pango + +#[disk-io] +#label= +#command=$SCRIPT_DIR/disk-io +#command=$SCRIPT_DIR/disk-io -w 3 -M -P 0 +#interval=persist +#markup=pango +#instance=/^sda/ + +# Network interface monitoring +# +# If the instance is not specified, use the interface used for default route. +# The address can be forced to IPv4 or IPv6 with -4 or -6 switches. +#[iface] +#instance=wlan0 +#instance=eth0 +#color=#00FF00 +#interval=10 +#separator=false + +[wifi] +label= +instance=eth0 +#instance=wlp3s0 +color=#00FF00 +interval=10 +separator=false + +#[bandwidth] +#instance=eth0 +#interval=5 +#[bandwidth] +#command=$SCRIPT_DIR/bandwidth +#interval=persist +#[separator] + +#[vpn] +#command=echo "Secure Connection" +#interval=1 +#label= +#color=#C9CCDB + +[openvpn] +command=$SCRIPT_DIR/openvpn -d /proc/sys/net/ipv4/conf/tun0 +interval=20 + +# CPU usage +# +# The script may be called with -w and -c switches to specify thresholds, +# see the script for details. +#[cpu_usage] +#label=CPU +#interval=10 +#min_width=CPU: 100.00% +#separator=false + +#[load] +#command=$SCRIPT_DIR/load_average +#interval=1 +#label= +#color=#C9CCDB + +# Battery indicator +# +# The battery instance defaults to 0. +#[battery] +#label=BAT +#label=⚡ +#instance=1 +#interval=30 + +[batterybar] +command=$SCRIPT_DIR/batterybar #run batterybar -h for options +label=⚡: +#label=bat: +interval=5 +markup=pango +min_width=bat: ■■■■■ + +[mediaplayer] +label= +command=$SCRIPT_DIR/mediaplayer +#instance=spotify +interval=5 +signal=10 + +# Date Time +# +#[time] +#command=date '+%Y-%m-%d %H:%M:%S' +#interval=1 + +[separator] + +[date] +command=echo "`date +'%d %b'`" +interval=1 +label= +color=#C9CCDB + +[separator] + +[time] +command=echo "`date +'%H:%M'`" +interval=1 +label= +color=#C9CCDB diff --git a/.i3/loadWSmain.sh b/.i3/loadWSmain.sh new file mode 100755 index 0000000..b666e6c --- /dev/null +++ b/.i3/loadWSmain.sh @@ -0,0 +1,25 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: loadWSmain.sh +# +# USAGE: ./loadWSmain.sh +# +# DESCRIPTION: +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: YOUR NAME (), +# ORGANIZATION: +# CREATED: 24/05/18 18:46:57 +# REVISION: --- +#=============================================================================== + +i3-msg "workspace $workspace6" +i3-msg "append_layout $HOME/.i3/workspace-main.json" +i3-msg "exec --no-startup-id urxvt -e cmatrix" +i3-msg "exec --no-startup-id urxvt" +i3-msg "exec --no-startup-id urxvt -e ncmpcpp -s visualizer" +i3-msg "exec --no-startup-id urxvt -e htop" diff --git a/.i3/loadWSmusic.sh b/.i3/loadWSmusic.sh new file mode 100755 index 0000000..77aad75 --- /dev/null +++ b/.i3/loadWSmusic.sh @@ -0,0 +1,25 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: loadWSmusic.sh +# +# USAGE: ./loadWSmusic.sh +# +# DESCRIPTION: +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: YOUR NAME (), +# ORGANIZATION: +# CREATED: 24/05/18 18:46:57 +# REVISION: --- +#=============================================================================== + +i3-msg "workspace $workspace9" +i3-msg "append_layout $HOME/.i3/workspace-music.json" +i3-msg "exec --no-startup-id urxvt -e ncmpcpp -s playlist -S visualizer" +i3-msg "exec --no-startup-id mpv " +i3-msg "exec --no-startup-id urxvt -e mpsyt" +i3-msg "exec --no-startup-id urxvt -e ranger" diff --git a/.i3/scripts/audio b/.i3/scripts/audio new file mode 100755 index 0000000..cb630c8 --- /dev/null +++ b/.i3/scripts/audio @@ -0,0 +1,27 @@ +#!/bin/bash + +# This script records audio. +# It runs an appropriate record script for either ALSA and Pulseaudio. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/screencast$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/screencast$n.mkv" + +# For Pulseaudio with ALSA: +record_pulse() { \ +ffmpeg \ +-f alsa -i default \ +-c:a flac \ +$filename ;} + +# For ALSA: +record_alsa() { \ +ffmpeg -y \ +-f alsa -ar 44100 -i hw:1 \ +$filename ;} + +if [[ $(pgrep -x pulseaudio) ]]; then record_pulse; else record_alsa; fi diff --git a/.i3/scripts/bandwidth.sh b/.i3/scripts/bandwidth.sh new file mode 100755 index 0000000..22414e9 --- /dev/null +++ b/.i3/scripts/bandwidth.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2015 James Murphy +# Licensed under the terms of the GNU GPL v2 only. +# +# i3blocks blocklet script to monitor bandwidth usage + +iface="${BLOCK_INSTANCE:-$(ip route | awk '/^default/ {print $5; exit}')}" +dt=3 +unit=Mb +printf_command='printf "%-5.1f/%5.1f %s/s\n", rx, wx, unit;' + +function check_proc_net_dev { + if [ ! -f "/proc/net/dev" ]; then + echo "/proc/net/dev not found" + exit 1 + fi +} + +function list_interfaces { + check_proc_net_dev + echo "Interfaces in /proc/net/dev:" + grep -o "^[^:]\\+:" /proc/net/dev | tr -d " :" +} + +while getopts i:t:u:p:lh opt; do + case "$opt" in + i) iface="$OPTARG" ;; + t) dt="$OPTARG" ;; + u) unit="$OPTARG" ;; + p) printf_command="$OPTARG" ;; + l) list_interfaces && exit 0 ;; + h) printf \ +"Usage: bandwidth [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h] +Options: +-i\tNetwork interface to measure. Default determined using \`ip route\`. +-t\tTime interval in seconds between measurements. Default: 3 +-u\tUnits to measure bytes in. Default: Mb +\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB +\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte +-p\tAwk command to be called after a measurement is made. +\tDefault: printf \"%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit; +\tExposed variables: rx, wx, tx, unit, iface +-l\tList available interfaces in /proc/net/dev +-h\tShow this help text +" && exit 0;; + esac +done + +check_proc_net_dev + +if [ -z "$iface" ]; then + echo Could not determine default interface + exit 1 +fi + +case "$unit" in + Kb|Kbit|Kbits) bytes_per_unit=$((1024 / 8));; + KB|KByte|KBytes) bytes_per_unit=$((1024));; + Mb|Mbit|Mbits) bytes_per_unit=$((1024 * 1024 / 8));; + MB|MByte|MBytes) bytes_per_unit=$((1024 * 1024 / 8));; + Gb|Gbit|Gbits) bytes_per_unit=$((1024 * 1024 * 1024 / 8));; + GB|GByte|GBytes) bytes_per_unit=$((1024 * 1024 * 1024));; + Tb|Tbit|Tbits) bytes_per_unit=$((1024 * 1024 * 1024 * 1024 / 8));; + TB|TByte|TBytes) bytes_per_unit=$((1024 * 1024 * 1024 * 1024));; + *) echo Bad unit "$unit" && exit 1;; +esac + +scalar=$((bytes_per_unit * dt)) +init_line=$(cat /proc/net/dev | grep "^[ ]*$iface:") +if [ -z "$init_line" ]; then + echo Interface not found in /proc/net/dev: "$iface" + exit 1 +fi + +init_received=$(awk '{print $2}' <<< $init_line) +init_sent=$(awk '{print $10}' <<< $init_line) +sleep "$dt" + +(while true; do cat /proc/net/dev; sleep "$dt"; done) |\ + stdbuf -oL grep "^[ ]*$iface:" |\ + awk -v scalar="$scalar" -v unit="$unit" -v iface="$iface" ' +BEGIN{old_received='"$init_received"';old_sent='"$init_sent"'} +{ + received=$2 + sent=$10 + rx=(received-old_received)/scalar; + wx=(sent-old_sent)/scalar; + tx=rx+wr; + old_received=received; + old_sent=sent; + if(rx >= 0 && wx >= 0){ + '"$printf_command"'; + fflush(stdout); + } +} +' diff --git a/.i3/scripts/battery.sh b/.i3/scripts/battery.sh new file mode 100755 index 0000000..5ba6498 --- /dev/null +++ b/.i3/scripts/battery.sh @@ -0,0 +1,74 @@ +#!/usr/bin/perl +# +# Copyright 2014 Pierre Mavro <deimos@deimos.fr> +# Copyright 2014 Vivien Didelot <vivien@didelot.org> +# +# Licensed under the terms of the GNU GPL v3, or any later version. +# +# This script is meant to use with i3blocks. It parses the output of the "acpi" +# command (often provided by a package of the same name) to read the status of +# the battery, and eventually its remaining time (to full charge or discharge). +# +# The color will gradually change for a percentage below 85%, and the urgency +# (exit code 33) is set if there is less that 5% remaining. + +use strict; +use warnings; +use utf8; + +my $acpi; +my $status; +my $percent; +my $full_text; +my $short_text; +my $bat_number = $ENV{BLOCK_INSTANCE} || 0; + +# read the first line of the "acpi" command output +open (ACPI, "acpi -b | grep 'Battery $bat_number' |") or die; +$acpi = <ACPI>; +close(ACPI); + +# fail on unexpected output +if ($acpi !~ /: (\w+), (\d+)%/) { + die "$acpi\n"; +} + +$status = $1; +$percent = $2; +$full_text = "$percent%"; + +if ($status eq 'Discharging') { + $full_text .= ' DIS'; +} elsif ($status eq 'Charging') { + $full_text .= ' CHR'; +} + +$short_text = $full_text; + +if ($acpi =~ /(\d\d:\d\d):/) { + $full_text .= " ($1)"; +} + +# print text +print "$full_text\n"; +print "$short_text\n"; + +# consider color and urgent flag only on discharge +if ($status eq 'Discharging') { + + if ($percent < 20) { + print "#FF0000\n"; + } elsif ($percent < 40) { + print "#FFAE00\n"; + } elsif ($percent < 60) { + print "#FFF600\n"; + } elsif ($percent < 85) { + print "#A8FF00\n"; + } + + if ($percent < 5) { + exit(33); + } +} + +exit(0); diff --git a/.i3/scripts/batterybar.sh b/.i3/scripts/batterybar.sh new file mode 100755 index 0000000..e583aab --- /dev/null +++ b/.i3/scripts/batterybar.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash +# batterybar; displays battery percentage as a bar on i3blocks +# +# Copyright 2015 Keftaa <adnan.37h@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# + + + +output=$(acpi battery) +percentage=$(echo "$output" | grep -o -m1 '[0-9]\{1,3\}%' | tr -d '%') +status=$(echo "$output" | egrep -o -m1 'Discharging|Charging|AC|Full|Unknown') +remaining=$( echo "$output" | egrep -o -m1 '[0-9][0-9]:[0-9][0-9]') +[[ -n $remaining ]] && remaining_formatted=" ($remaining)" +squares="■" + + +#There are 8 colors that reflect the current battery percentage when +#discharging +dis_colors=("#FF0027" "#FF3B05" "#FFB923" "#FFD000" "#E4FF00" "#ADFF00" + "#6DFF00" "#10BA00") +charging_color="#00AFE3" +full_color="#FFFFFF" +ac_color="#535353" + + +while getopts 1:2:3:4:5:6:7:8:c:f:a:h opt; do + case "$opt" in + 1) dis_colors[0]="$OPTARG";; + 2) dis_colors[1]="$OPTARG";; + 3) dis_colors[2]="$OPTARG";; + 4) dis_colors[3]="$OPTARG";; + 5) dis_colors[4]="$OPTARG";; + 6) dis_colors[5]="$OPTARG";; + 7) dis_colors[6]="$OPTARG";; + 8) dis_colors[7]="$OPTARG";; + c) charging_color="$OPTARG";; + f) full_color="$OPTARG";; + a) ac_color="$OPTARG";; + h) printf "Usage: batterybar [OPTION] color + When discharging, there are 8 [1-8] levels colors. + You can specify custom colors, for example: + + batterybar -1 red -2 \"#F6F6F6\" -8 green + + You can also specify the colors for the charging, AC and + charged states: + + batterybar -c green -f white -a \"#EEEEEE\"\n"; + exit 0; + esac +done + + + +if (( percentage > 0 && percentage < 20 )); then + squares="■" +elif (( percentage >= 20 && percentage < 40 )); then + squares="■■" +elif (( percentage >= 40 && percentage < 60 )); then + squares="■■■" +elif (( percentage >= 60 && percentage < 80 )); then + squares="■■■■" +elif (( percentage >=80 )); then + squares="■■■■■" +fi + +if [[ "$status" = "Unknown" ]]; then + squares="<sup>?</sup>$squares" +fi + +case "$status" in +"Charging") + color="$charging_color" +;; +"Full") + color="$full_color" +;; +"AC") + color="$ac_color" +;; +"Discharging"|"Unknown") + if (( percentage >= 0 && percentage < 10 )); then + color="${dis_colors[0]}" + elif (( percentage >= 10 && percentage < 20 )); then + color="${dis_colors[1]}" + elif (( percentage >= 20 && percentage < 30 )); then + color="${dis_colors[2]}" + elif (( percentage >= 30 && percentage < 40 )); then + color="${dis_colors[3]}" + elif (( percentage >= 40 && percentage < 60 )); then + color="${dis_colors[4]}" + elif (( percentage >= 60 && percentage < 70 )); then + color="${dis_colors[5]}" + elif (( percentage >= 70 && percentage < 80 )); then + color="${dis_colors[6]}" + elif (( percentage >= 80 )); then + color="${dis_colors[7]}" + fi +;; +esac + +if [[ "$BLOCK_BUTTON" -eq 1 ]]; then + echo "$status <span foreground=\"$color\">$percentage%$remaining_formatted</span>" +fi + echo "<span foreground=\"$color\">$squares</span>" diff --git a/.i3/scripts/bottomleft b/.i3/scripts/bottomleft new file mode 100755 index 0000000..5f05beb --- /dev/null +++ b/.i3/scripts/bottomleft @@ -0,0 +1,17 @@ +#!/bin/bash + +# This script move the selected window to the bottom left of the screen. + +current=$(xdotool getwindowfocus) + +# The window will take up no more than a third of +# the width or height of the screen. +newwidth=$(($(xdotool getdisplaygeometry | awk '{print $2}') / 3)) +newheight=$(($(xdotool getdisplaygeometry | awk '{print $1}') / 3)) + +xdotool windowsize $(xdotool getwindowfocus) $newheight $newwidth + +newsize=$(xdotool getwindowgeometry $(xdotool getwindowfocus) | grep Geometry | sed -e 's/x/ /g' | awk '{print $3}') + +height=$(($(xdotool getdisplaygeometry | awk '{print $2}') - newsize)) +xdotool windowmove $current 0 $height diff --git a/.i3/scripts/camtoggle b/.i3/scripts/camtoggle new file mode 100755 index 0000000..1e39dec --- /dev/null +++ b/.i3/scripts/camtoggle @@ -0,0 +1,2 @@ +#!/bin/bash +pkill -f /dev/video || mpv --no-osc --no-input-default-bindings --input-conf=/dev/null --geometry=-0-0 --autofit=30% --title="mpvfloat" /dev/video0 diff --git a/.i3/scripts/clear.sh b/.i3/scripts/clear.sh new file mode 100755 index 0000000..af13a73 --- /dev/null +++ b/.i3/scripts/clear.sh @@ -0,0 +1 @@ +find . -maxdepth 1 -regextype gnu-awk -regex "^.*\.(pyc|p yo|bak|swp|aux|log|lof|nav|out|snm|toc|bcf|run\.xml|synctex\.gz|blg|bbl)" -delete diff --git a/.i3/scripts/compiler b/.i3/scripts/compiler new file mode 100755 index 0000000..cf628aa --- /dev/null +++ b/.i3/scripts/compiler @@ -0,0 +1,50 @@ +#!/bin/sh + +# This script will compile or run another finishing operation on a document. I +# have this script run via vim. +# +# tex files: Compiles to pdf, including bibliography if necessary +# md files: Compiles to pdf via pandoc +# rmd files: Compiles via R Markdown +# c files: Compiles via whatever compiler is set to cc. Usually gcc. +# py files: runs via python command +# go files: compiles and runs with "go run" +# config.h files: (For suckless utils) recompiles and installs program. +# all others: run `sent` to show a presentation + +file=$(readlink -f "$1") +dir=$(dirname "$file") +base="${file%.*}" +shebang=$(sed -n 1p "$file") + +cd "$dir" || exit + +textype() { \ + command="pdflatex" + ( sed 5q "$file" | grep -i -q 'xelatex' ) && command="xelatex" + $command --output-directory="$dir" "$base" && + grep -i addbibresource "$file" >/dev/null && + biber --input-directory "$dir" "$base" && + $command --output-directory="$dir" "$base" && + $command --output-directory="$dir" "$base" + } + +shebangtest() { + case "$shebang" in + \#\!*) "$file" ;; + *) sent "$file" 2>/dev/null & ;; + esac +} + +case "$file" in + *\.ms) refer -PS -e "$file" | groff -me -ms -kejpt -T pdf > "$base".pdf ;; + *\.mom) refer -PS -e "$file" | groff -mom -kejpt -T pdf > "$base".pdf ;; + *\.rmd) echo "require(rmarkdown); render('$file')" | R -q --vanilla ;; + *\.tex) textype "$file" ;; + *\.md) pandoc "$file" --pdf-engine=xelatex -o "$base".pdf ;; + *config.h) make && sudo make install ;; + *\.c) cc "$file" -o "$base" && "$base" ;; + *\.py) python "$file" ;; + *\.go) go run "$file" ;; + *) shebangtest ;; +esac diff --git a/.i3/scripts/ddspawn b/.i3/scripts/ddspawn new file mode 100755 index 0000000..0871a59 --- /dev/null +++ b/.i3/scripts/ddspawn @@ -0,0 +1,25 @@ +#!/bin/sh + +# This script simplifies dropdown windows in i3. +# Shows/hides a scratchpad of a given name, if it doesn't exist, creates it. +# Usage: +# argument 1: script to run in dropdown window +# all other args are interpreted as options for your terminal +# My usage: +# ddpawn +# bindsym $mod+u exec --no-startup-id ddspawn tmuxdd +# Will hide/show window running the `tmuxdd` script when I press mod+u in i3 +# bindsym $mod+a exec --no-startup-id ddspawn dropdowncalc -f mono:pixelsize=24 +# Similar to above but with `dropdowncalc` and the other args are interpretated as for my terminal emulator (to increase font) + +[ -z "$1" ] && exit + +if xwininfo -tree -root | grep "(\"$1\" "; +then + echo "Window detected." +else + echo "Window not detected... spawning." + i3 "exec --no-startup-id $TERMINAL -n $1 $(echo "$@" | cut -d ' ' -f2-) -e $1" && i3 "[instance=\"$1\"] scratchpad show; [instance=\"$1\"] move position center" + sleep .25 # This sleep is my laziness, will fix later (needed for immediate appearance after spawn). +fi +i3 "[instance=\"$1\"] scratchpad show; [instance=\"$1\"] move position center" diff --git a/.i3/scripts/disk-io.sh b/.i3/scripts/disk-io.sh new file mode 100755 index 0000000..c27b60d --- /dev/null +++ b/.i3/scripts/disk-io.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2016 James Murphy +# Licensed under the terms of the GNU GPL v2 only. +# +# i3blocks blocklet script to monitor disk io + +label="" +dt=5 +MB_only=0 +kB_only=0 +width=4 +MB_precision=1 +kB_precision=0 +regex="${BLOCK_INSTANCE:-/^(s|h)d[a-zA-Z]+/}" +threshold=0 +warn_color="#FF0000" +sep="/" +unit_suffix="B/s" + +function list_devices { + echo "Devices iostat reports that match our regex:" + iostat | awk '$1~/^(s|h)d[a-zA-Z]+/{print $1}' +} + +while getopts L:t:w:p:P:R:s:ST:C:lLMmKkh opt; do + case "$opt" in + L) label="$OPTARG" ;; + t) dt="$OPTARG" ;; + w) width="$OPTARG" ;; + p) kB_precision="$OPTARG" ;; + P) MB_precision="$OPTARG" ;; + R) regex="$OPTARG" ;; + s) sep="$OPTARG" ;; + S) unit_suffix="" ;; + T) threshold="$OPTARG" ;; + C) warn_color="$OPTARG" ;; + l) list_devices; exit 0 ;; + M|m) MB_only=1 ;; + K|k) kB_only=1 ;; + h) printf \ +"Usage: disk-io [-t time] [-w width] [-p kB_precision] [-P MB_precision] [-R regex] [-s separator] [-S] [-T threshold [-C warn_color]] [-k|-M] [-l] [-h] +Options: +-L\tLabel to put in front of the text. Default: $label +-t\tTime interval in seconds between measurements. Default: $dt +-w\tThe width of printed floats. Default: $width +-p\tThe precision of kB/s floats. Default: $kB_precision +-P\tThe precision of MB/s floats. Default: $MB_precision +-R\tRegex that devices must match. Default: $regex +-s\tSeparator to put between rates. Default: $sep +-S\tShort units, omit B/s in kB/s and MB/s. +-T\tRate in kB/s to exceed to trigger a warning. Default: not enabled +-C\tColor to change the blocklet to warn the user. Default: $warn_color +-l\tList devices that iostat reports +-M\tDo not switch between MB/s and kB/s, use only MB/s +-k\tDo not switch between MB/s and kB/s, use only kB/s +-h\tShow this help text +" && exit 0;; + esac +done + +iostat -dyz "$dt" | awk -v sep="$sep" " + BEGIN { + rx = wx = 0; + } + { + if(\$0 == \"\") { + if ($threshold > 0 && (rx >= $threshold || wx >= $threshold)) { + printf \"<span color='$warn_color'>\"; + } + printf \"$label\"; + if(!$kB_only && ($MB_only || rx >= 1024 || wx >= 1024)) { + printf \"%-$width.${MB_precision}f%s%$width.${MB_precision}f M$unit_suffix\", rx/1024, sep, wx/1024; + } + else { + printf \"%-$width.${kB_precision}f%s%$width.${kB_precision}f k$unit_suffix\", rx, sep, wx; + } + if ($threshold > 0 && (rx >= $threshold || wx >= $threshold)) { + printf \"</span>\"; + } + printf \"\n\"; + fflush(stdout); + } + else if(\$1~/^Device:/) { + rx = wx = 0; + } + else if(\$1~$regex) { + rx += \$3; + wx += \$4; + } + }" diff --git a/.i3/scripts/displayselect b/.i3/scripts/displayselect new file mode 100755 index 0000000..f1f12c1 --- /dev/null +++ b/.i3/scripts/displayselect @@ -0,0 +1,16 @@ +#!/bin/sh + +choices="laptop\nlaptopdual\nVGA\nHDMI\nManual selection" + +chosen=$(echo -e "$choices" | dmenu -i) + +case "$chosen" in + laptopdual) xrandr --output LVDS-1 --auto --output VGA-1 --auto --right-of LVDS-1 ;; + laptop) xrandr --output LVDS-1 --auto --output VGA-1 --off ;; + VGA) xrandr --output VGA-1 --auto --output LVDS-1 --off ;; + HDMI) xrandr --output HDMI-1 --auto --output LVDS-1 --off ;; + "Manual selection") arandr ;; +esac + +# Relaunch polybar if there was a selection. +[ "$chosen" == "" ] || polybar_launch diff --git a/.i3/scripts/dmenuhandler b/.i3/scripts/dmenuhandler new file mode 100755 index 0000000..f00178b --- /dev/null +++ b/.i3/scripts/dmenuhandler @@ -0,0 +1,15 @@ +#!/bin/sh +# Feed this script a link and it will give dmenu +# some choice programs to use to open it. + +case "$(printf "copy url\\nmpv\\nmpv (loop)\\nqueue download\\n\\nqueue youtube-dl\\nfeh\\nbrowser\\nw3m\\nmpv (float)" | dmenu -i -p "Open link with what program?")" in + "copy url") echo "$1" | xclip -selection clipboard ;; + mpv) setsid mpv -quiet "$1" >/dev/null 2>&1 & ;; + "mpv (loop)") setsid mpv -quiet --loop "$1" >/dev/null 2>&1 & ;; + "queue download") tsp curl -LO "$1" >/dev/null 2>&1 ;; + "queue youtube-dl") tsp youtube-dl --write-metadata -ic "$1" >/dev/null 2>&1 ;; + browser) setsid "$TRUEBROWSER" "$1" >/dev/null 2>&1 & ;; + feh) setsid feh "$1" >/dev/null 2>&1 & ;; + w3m) w3m "$1" >/dev/null 2>&1 ;; + "mpv (float)") setsid mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$1" >/dev/null 2>&1 & ;; +esac diff --git a/.i3/scripts/dmenumount b/.i3/scripts/dmenumount new file mode 100755 index 0000000..e0bb500 --- /dev/null +++ b/.i3/scripts/dmenumount @@ -0,0 +1,25 @@ +#!/bin/sh + +# Gives a dmenu prompt to mount unmounted drives. +# If they're in /etc/fstab, they'll be mounted automatically. +# Otherwise, you'll be prompted to give a mountpoint from already existsing directories. +# If you input a novel directory, it will prompt you to create that directory. + +pgrep -x dmenu && exit + +mountable=$(lsblk -lp | grep part | grep -v "t /" | awk '{print $1, "(" $4 ")"}') +[[ "$mountable" = "" ]] && exit 1 +chosen=$(echo "$mountable" | dmenu -i -p "Mount which drive?" | awk '{print $1}') +[[ "$chosen" = "" ]] && exit 1 +sudo mount "$chosen" && exit 0 +# You may want to change the line below for more suggestions for mounting. +# I.e. you can increase the depth of the search, or add directories. +# This will increase the load time briefly though. +dirs=$(find /mnt /media /mount /home -type d -maxdepth 5 2>/dev/null) +mountpoint=$(echo "$dirs" | dmenu -i -p "Type in mount point.") +[[ "$mountpoint" = "" ]] && exit 1 +if [[ ! -d "$mountpoint" ]]; then + mkdiryn=$(echo -e "No\nYes" | dmenu -i -p "$mountpoint does not exist. Create it?") + [[ "$mkdiryn" = Yes ]] && sudo mkdir -p "$mountpoint" +fi +sudo mount $chosen $mountpoint && pgrep -x dunst && notify-send "$chosen mounted to $mountpoint." diff --git a/.i3/scripts/dmenurecord b/.i3/scripts/dmenurecord new file mode 100755 index 0000000..75cc6ff --- /dev/null +++ b/.i3/scripts/dmenurecord @@ -0,0 +1,24 @@ +#!/bin/bash + +# A dmenu recording prompt for my different recording scripts. + +# Asks for type of recording and uses one of my three different scripts. +asktype() { \ +case $(echo -e "Screencast\nVideo only\nAudio only" | dmenu -i -p "Select recording style:") in + Screencast) screencast ;; + "Audio only") audio ;; + "Video only") video ;; +esac ;} + +# If already running, will ask to end previous recording. + +asktoend() { \ +response=$(echo -e "No\nYes" | dmenu -i -p "Recording still active. End recording?") && +if [[ "$response" = "Yes" ]]; then killall ffmpeg; fi ;} + +if (( $(pgrep dmenurecord | wc -l) > 2 )); then +asktoend; +else +asktype; +fi +echo $response diff --git a/.i3/scripts/dmenuumount b/.i3/scripts/dmenuumount new file mode 100755 index 0000000..d333e2a --- /dev/null +++ b/.i3/scripts/dmenuumount @@ -0,0 +1,14 @@ +#!/bin/sh + +# A dmenu prompt to unmount drives. +# Provides you with mounted partitions, select one to unmount. + +# Drives mounted at /, /boot and /home will not be options to unmount. +# This can be changed by modifying $exclusionregex. + +exclusionregex="\(/boot\|/home\|/\)$" +drives=$(lsblk -lp | grep "t /" | grep -v "$exclusionregex" | awk '{print $1, "(" $4 ")", "on", $7}') +[[ "$drives" = "" ]] && exit +chosen=$(echo "$drives" | dmenu -i -p "Unmount which drive?" | awk '{print $1}') +[[ "$chosen" = "" ]] && exit +sudo umount $chosen && pgrep -x dunst && notify-send "$chosen unmounted." diff --git a/.i3/scripts/dmenuunicode b/.i3/scripts/dmenuunicode new file mode 100755 index 0000000..a4ab828 --- /dev/null +++ b/.i3/scripts/dmenuunicode @@ -0,0 +1,18 @@ +#!/bin/sh +# Give dmenu list of all unicode characters to copy. +# Shows the selected character in dunst if running. + +# Must have xclip installed to even show menu. +xclip -h >/dev/null || exit + +chosen=$(grep -v "#" ~/.emoji | dmenu -i -l 10 -fn Monospace-12) + +[ "$chosen" != "" ] || exit + +c=$(echo "$chosen" | sed "s/ .*//") +echo "$c" | tr -d '\n' | xclip -selection clipboard +notify-send "'$c' copied to clipboard." & + +s=$(echo "$chosen" | sed "s/.*; //" | awk '{print $1}') +echo "$s" | tr -d '\n' | xclip +notify-send "'$s' copied to primary." & diff --git a/.i3/scripts/dropdowncalc b/.i3/scripts/dropdowncalc new file mode 100755 index 0000000..fee8f07 --- /dev/null +++ b/.i3/scripts/dropdowncalc @@ -0,0 +1,5 @@ +#!/bin/sh +# This script ensures that i3 will spawn a calculator. +# If R is installed, it will run R, otherwise it will run +# Python. +([ -e /usr/bin/R ] && R -q --no-save) || python -q diff --git a/.i3/scripts/ducksearch b/.i3/scripts/ducksearch new file mode 100755 index 0000000..13a1e19 --- /dev/null +++ b/.i3/scripts/ducksearch @@ -0,0 +1,15 @@ +#!/bin/sh + +# Gives a dmenu prompt to search DuckDuckGo. +# Without input, will open DuckDuckGo.com. +# Anything else, it search it. + +pgrep -x dmenu && exit + +choice=$(echo "🦆" | dmenu -i -p "Search DuckDuckGo:") || exit 1 + +if [ "$choice" = "🦆" ]; then + $BROWSER "https://duckduckgo.com" +else + $BROWSER "https://duckduckgo.com/?q=$choice&t=ffab&atb=v1-1" +fi diff --git a/.i3/scripts/ext b/.i3/scripts/ext new file mode 100755 index 0000000..c214583 --- /dev/null +++ b/.i3/scripts/ext @@ -0,0 +1,41 @@ +#!/bin/sh +# A general, all-purpose extraction script. +# +# Default behavior: Extract archive into new directory +# Behavior with `-c` option: Extract contents into current directory + +while getopts "hc" o; do case "${o}" in + c) extracthere="True" ;; + *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;; +esac done + +if [ -z "$extracthere" ]; then + archive="$(readlink -f "$*")" && + directory=${archive%.*} && + mkdir -p "$directory" && + cd "$directory" || exit +else + archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")" +fi + +[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit + +if [ -f "$archive" ] ; then + case "$archive" in + *.tar.bz2|*.tar.xz|*.tbz2) tar xvjf "$archive" ;; + *.tar.gz|*.tgz) tar xvzf "$archive" ;; + *.lzma) unlzma "$archive" ;; + *.bz2) bunzip2 "$archive" ;; + *.rar) unrar x -ad "$archive" ;; + *.gz) gunzip "$archive" ;; + *.tar) tar xvf "$archive" ;; + *.zip) unzip "$archive" ;; + *.Z) uncompress "$archive" ;; + *.7z) 7z x "$archive" ;; + *.xz) unxz "$archive" ;; + *.exe) cabextract "$archive" ;; + *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; + esac +else + printf "File \"%s\" not found.\\n" "$archive" +fi diff --git a/.i3/scripts/extract b/.i3/scripts/extract new file mode 100755 index 0000000..c214583 --- /dev/null +++ b/.i3/scripts/extract @@ -0,0 +1,41 @@ +#!/bin/sh +# A general, all-purpose extraction script. +# +# Default behavior: Extract archive into new directory +# Behavior with `-c` option: Extract contents into current directory + +while getopts "hc" o; do case "${o}" in + c) extracthere="True" ;; + *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;; +esac done + +if [ -z "$extracthere" ]; then + archive="$(readlink -f "$*")" && + directory=${archive%.*} && + mkdir -p "$directory" && + cd "$directory" || exit +else + archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")" +fi + +[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit + +if [ -f "$archive" ] ; then + case "$archive" in + *.tar.bz2|*.tar.xz|*.tbz2) tar xvjf "$archive" ;; + *.tar.gz|*.tgz) tar xvzf "$archive" ;; + *.lzma) unlzma "$archive" ;; + *.bz2) bunzip2 "$archive" ;; + *.rar) unrar x -ad "$archive" ;; + *.gz) gunzip "$archive" ;; + *.tar) tar xvf "$archive" ;; + *.zip) unzip "$archive" ;; + *.Z) uncompress "$archive" ;; + *.7z) 7z x "$archive" ;; + *.xz) unxz "$archive" ;; + *.exe) cabextract "$archive" ;; + *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;; + esac +else + printf "File \"%s\" not found.\\n" "$archive" +fi diff --git a/.i3/scripts/getbib b/.i3/scripts/getbib new file mode 100755 index 0000000..bf02694 --- /dev/null +++ b/.i3/scripts/getbib @@ -0,0 +1,21 @@ +#!/bin/sh + +# Give this script a .pdf and it will attempt +# to return a proper .bib citation via doi. +# Internet connection required. + +if [ -f "$1" ]; +then + # Get the doi from metadata, if not possible, get + # doi from pdftotext output, if not possible, exit. + doi=$(pdfinfo "$1" | grep -io "doi:.*") || + doi=$(pdftotext "$1" 2>/dev/null - | grep -o "doi:.*" -m 1) || + exit 1 +else + # If not given file, assume argument is doi + doi="$1" +fi + +# Check crossref.org for the bib citation. +curl -s "http://api.crossref.org/works/$doi/transform/application/x-bibtex" -w "\\n" | + sed -e "/^[^\\(\\t\\|@\\|}\\)]/d" diff --git a/.i3/scripts/getkeys b/.i3/scripts/getkeys new file mode 100755 index 0000000..928e435 --- /dev/null +++ b/.i3/scripts/getkeys @@ -0,0 +1,5 @@ +#!/bin/sh + +cat ~/.scripts/.getkeys/"$1" 2>/dev/null && exit +echo Run command with one of the following arguments for info about that program: +ls ~/.scripts/.getkeys diff --git a/.i3/scripts/i3battery b/.i3/scripts/i3battery new file mode 100755 index 0000000..c140da2 --- /dev/null +++ b/.i3/scripts/i3battery @@ -0,0 +1,2 @@ +#!/bin/sh +acpi | cut -d " " -f3-5 | sed -e "s/,//g;s/Discharging/🔋/;s/Charging/🔌/;s/Full/⚡/;s/ 0*/ /g;s/ :/ /g" diff --git a/.i3/scripts/i3iface b/.i3/scripts/i3iface new file mode 100755 index 0000000..e354f50 --- /dev/null +++ b/.i3/scripts/i3iface @@ -0,0 +1,70 @@ +#!/bin/bash +# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> +# Copyright (C) 2014 Alexander Keller <github@nycroth.com> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +#------------------------------------------------------------------------ + +# Use the provided interface, otherwise the device used for the default route. +if [[ -n $BLOCK_INSTANCE ]]; then + IF=$BLOCK_INSTANCE +else + IF=$(ip route | awk '/^default/ { print $5 ; exit }') +fi + +#------------------------------------------------------------------------ + +# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless +# connection (think desktop), the corresponding block should not be displayed. +[[ ! -d /sys/class/net/${IF} ]] && exit + +#------------------------------------------------------------------------ + +AF=inet6? +LABEL="" + +for flag in "$1" "$2"; do + case "$flag" in + -4) + AF=inet ;; + -6) + AF=inet6 ;; + -L) + if [[ "$IF" = "" ]]; then + LABEL="iface " + else + LABEL="$IF: " + fi ;; + esac +done + +if [[ "$IF" = "" ]] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then + echo "${LABEL}down" # full text + echo "${LABEL}down" # short text + echo \#FF0000 # color + exit +fi + +# if no interface is found, use the first device with a global scope +IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit") + +case $BLOCK_BUTTON in + 3) echo -n "$IPADDR" | xclip -q -se c ;; +esac + +#------------------------------------------------------------------------ + +echo "$LABEL$IPADDR" # full text +echo "$LABEL$IPADDR" # short text diff --git a/.i3/scripts/i3mail b/.i3/scripts/i3mail new file mode 100755 index 0000000..9b4aa3e --- /dev/null +++ b/.i3/scripts/i3mail @@ -0,0 +1,5 @@ +#!/bin/sh +case $BLOCK_BUTTON in + 1) $TERMINAL -e neomutt ;; +esac +echo $(find ~/.mail -wholename */INBOX/new/* | wc -l) diff --git a/.i3/scripts/i3mpd b/.i3/scripts/i3mpd new file mode 100755 index 0000000..b66f4c8 --- /dev/null +++ b/.i3/scripts/i3mpd @@ -0,0 +1,24 @@ +#!/bin/bash + +# Pass the password in the block instance +#if [[ -n $BLOCK_INSTANCE ]]; then + #password=("-h" "$BLOCK_INSTANCE@localhost") +#fi + +filter() { +# tr '\n' ' ' | grep -Po '.*(?= \[playing\])|paused' | tr -d '\n' + sed 2q | tac | sed -e "s/\&/&/g;/volume:/d;s/\[paused\].*/<span color=\"gray\" font_style=\"italic\">/g;s/\[playing\].*/<span>/g" | tr -d '\n' | sed -e "s/$/<\/span>/g" +} + +case $BLOCK_BUTTON in + 1) mpc status | filter && $TERMINAL -e ncmpcpp & disown ;; # right click, pause/unpause + 3) mpc toggle | filter ;; # right click, pause/unpause + 4) mpc prev | filter ;; # scroll up, previous + 5) mpc next | filter ;; # scroll down, next + *) mpc status | filter ;; + #1) mpc $password status | filter && $TERMINAL -e ncmpcpp & disown ;; # right click, pause/unpause + #3) mpc $password toggle | filter ;; # right click, pause/unpause + #4) mpc $password prev | filter ;; # scroll up, previous + #5) mpc $password next | filter ;; # scroll down, next + #*) mpc $password status | filter ;; +esac diff --git a/.i3/scripts/i3mpdupdate b/.i3/scripts/i3mpdupdate new file mode 100755 index 0000000..881b68f --- /dev/null +++ b/.i3/scripts/i3mpdupdate @@ -0,0 +1,6 @@ +#!/bin/bash +while : ; do + mpc idle > /dev/null + pkill -RTMIN+11 i3blocks ; +done + diff --git a/.i3/scripts/i3volume b/.i3/scripts/i3volume new file mode 100755 index 0000000..b47a6fa --- /dev/null +++ b/.i3/scripts/i3volume @@ -0,0 +1,12 @@ +#!/bin/bash + +case $BLOCK_BUTTON in + 1) $TERMINAL -e ncpamixer & disown ;; + 3) pamixer -t ;; + 4) pamixer -i 5 ;; + 5) pamixer -d 5 ;; +esac + +printpastatus() { [[ $(pamixer --get-mute) = "true" ]] && echo -n 🔇 && exit +echo 🔊 $(pamixer --get-volume)% ;} +printpastatus diff --git a/.i3/scripts/i3vpn b/.i3/scripts/i3vpn new file mode 100755 index 0000000..61caff7 --- /dev/null +++ b/.i3/scripts/i3vpn @@ -0,0 +1,23 @@ +#!/bin/bash +#Check VPN status + +GET_VPN=$(nmcli con show | grep tun0 | cut -d ' ' -f1) + +#Store status in STATUS + +if [[ $GET_VPN == *"tun0"* ]] +then + STATUSMSG=" `wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'`" + color=#00ff00 + echo "$STATUSMSG" + echo + echo $color +else + STATUSMSG="VPN OFF" + color=#ff0000 + echo "$STATUSMSG" + echo + echo $color +fi + + diff --git a/.i3/scripts/i3weather b/.i3/scripts/i3weather new file mode 100755 index 0000000..7aee4f3 --- /dev/null +++ b/.i3/scripts/i3weather @@ -0,0 +1,16 @@ +#!/bin/bash + +[[ $BLOCK_BUTTON = "1" ]] && st -e w3m wttr.in/~london + +ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` >/dev/null || exit + +### This is only if your location isn't automatically detected, otherwise you can leave it blank. +loc="hatfield" +location=${loc// /+} + +curl wttr.in/~$location > ~/.weatherreport + +echo -n ☔ $(cat ~/.weatherreport | sed -n 16p | sed -e 's/[^m]*m//g' | grep -o "[0-9]*%" | sort -n | sed -e '$!d') + +cat ~/.weatherreport | sed -n 13p | sed -e 's/[^m]*m//g;s/[^0-9]/ /g;s/ /\n/g;/^s*$/d' | grep [0-9] | sort -n | sed -e 1b -e '$!d' | tr '\n' ' ' | awk '{print " ❄️",$1 "°","☀️",$2 "°"}' + diff --git a/.i3/scripts/iface-down.png b/.i3/scripts/iface-down.png new file mode 100644 index 0000000..fc52879 --- /dev/null +++ b/.i3/scripts/iface-down.png @@ -0,0 +1,566 @@ + + + + + + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://assets-cdn.github.com"> + <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-hqbuBb0QOOmiWgl8a1V1N5q6TI/G0A2hVt/lCFYafR+fYsuXeRUcsdcb/yUyVEHYXktmUXl0Mx9s/BOUNZVq4w==" rel="stylesheet" href="https://assets-cdn.github.com/assets/frameworks-23c9e7262eee71bc6f67f6950190a162.css" /> + <link crossorigin="anonymous" media="all" integrity="sha512-elrcfQA6O59ztZagZ8cAOxGBBl3W1LD9cHCZYAlZYGvEmf7DQFKtSZH+aQAgGJkZVNtXvUSgfyuhMCUlJa+qnw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/github-96998038581f9d275d4a4a841c12e652.css" /> + + + <link crossorigin="anonymous" media="all" integrity="sha512-cCY9KKeDzfGd+snVDZwcOIrTjK+JAFW4FR1c4OGJo1Z2QZNbAGVD6JlcnHL19LBcdByWHVxwrAPwigT/v/DWyQ==" rel="stylesheet" href="https://assets-cdn.github.com/assets/site-7472e7b4603d4095447d49d428375ab8.css" /> + + + <meta name="viewport" content="width=device-width"> + + <title>i3blocks-contrib/iface-down.png at master · vivien/i3blocks-contrib · GitHub</title> + <meta name="description" content="GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 80 million projects."> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + + + <meta property="og:image" content="https://avatars1.githubusercontent.com/u/285808?s=400&v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="vivien/i3blocks-contrib" /><meta property="og:url" content="https://github.com/vivien/i3blocks-contrib" /><meta property="og:description" content="i3blocks-contrib - Official repository for community contributed blocklets" /> + + <link rel="assets" href="https://assets-cdn.github.com/"> + + <meta name="pjax-timeout" content="1000"> + + <meta name="request-id" content="E2CA:59D6:39F8654:69BA4FD:5AF9DDAC" data-pjax-transient> + + + + + <meta name="selected-link" value="repo_source" data-pjax-transient> + + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + <meta name="google-analytics" content="UA-3769691-2"> + +<meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="E2CA:59D6:39F8654:69BA4FD:5AF9DDAC" /><meta name="octolytics-dimension-region_edge" content="iad" /><meta name="octolytics-dimension-region_render" content="iad" /> +<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" /> + + + + + <meta class="js-ga-set" name="dimension1" content="Logged Out"> + + + + + <meta name="hostname" content="github.com"> + <meta name="user-login" content=""> + + <meta name="expected-hostname" content="github.com"> + <meta name="js-proxy-site-detection-payload" content="YjRkNWRmNjljMGY3Njc2ZTkzODAyODg2NzcxM2JiNmY5MThhNGQ2OTNjNDg3NmU3NzlkMTU0ODZiNDU2NzY4N3x7InJlbW90ZV9hZGRyZXNzIjoiMjE3LjE1MS45OC4xNjgiLCJyZXF1ZXN0X2lkIjoiRTJDQTo1OUQ2OjM5Rjg2NTQ6NjlCQTRGRDo1QUY5RERBQyIsInRpbWVzdGFtcCI6MTUyNjMyNDY1MywiaG9zdCI6ImdpdGh1Yi5jb20ifQ=="> + + <meta name="enabled-features" content="UNIVERSE_BANNER,FREE_TRIALS,MARKETPLACE_INSIGHTS,MARKETPLACE_SELF_SERVE,MARKETPLACE_FREE_APPS,MARKETPLACE_INSIGHTS_CONVERSION_PERCENTAGES"> + + <meta name="html-safe-nonce" content="f71badab740469551fca6e4a4dcc1b60fa7e9620"> + + <meta http-equiv="x-pjax-version" content="b458851e8418d0ed3493c36c4d0efee5"> + + + <link href="https://github.com/vivien/i3blocks-contrib/commits/master.atom" rel="alternate" title="Recent Commits to i3blocks-contrib:master" type="application/atom+xml"> + + <meta name="description" content="i3blocks-contrib - Official repository for community contributed blocklets"> + <meta name="go-import" content="github.com/vivien/i3blocks-contrib git https://github.com/vivien/i3blocks-contrib.git"> + + <meta name="octolytics-dimension-user_id" content="285808" /><meta name="octolytics-dimension-user_login" content="vivien" /><meta name="octolytics-dimension-repository_id" content="39731454" /><meta name="octolytics-dimension-repository_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="39731454" /><meta name="octolytics-dimension-repository_network_root_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" /> + + + <link rel="canonical" href="https://github.com/vivien/i3blocks-contrib/blob/master/iface/iface-down.png" data-pjax-transient> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000"> + <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://assets-cdn.github.com/favicon.ico"> + +<meta name="theme-color" content="#1e2327"> + + + +<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + + </head> + + <body class="logged-out env-production page-blob"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a> + <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div> + + + + + + + + <header class="Header header-logged-out position-relative f4 py-3" role="banner"> + <div class="container-lg d-flex px-3"> + <div class="d-flex flex-justify-between flex-items-center"> + <a class="header-logo-invertocat my-0" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> + <svg height="32" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> + </a> + + </div> + + <div class="HeaderMenu HeaderMenu--bright d-flex flex-justify-between flex-auto"> + <nav class="mt-0"> + <ul class="d-flex list-style-none"> + <li class="ml-2"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features/project-management /features/code-review /features/project-management /features/integrations /features" href="/features"> + Features +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business" href="/business"> + Business +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore"> + Explore +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace" href="/marketplace"> + Marketplace +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing" href="/pricing"> + Pricing +</a> </li> + </ul> + </nav> + + <div class="d-flex"> + <div class="d-lg-flex flex-items-center mr-3"> + <div class="header-search scoped-search site-scoped-search js-site-search" role="search"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" data-scope-type="Repository" data-scope-id="39731454" data-scoped-search-url="/vivien/i3blocks-contrib/search" data-unscoped-search-url="/search" action="/vivien/i3blocks-contrib/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <label class="form-control header-search-wrapper js-chromeless-input-container"> + <a class="header-search-scope no-underline" href="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png">This repository</a> + <input type="text" + class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable" + data-hotkey="s,/" + name="q" + value="" + placeholder="Search" + aria-label="Search this repository" + data-unscoped-placeholder="Search GitHub" + data-scoped-placeholder="Search" + autocapitalize="off" + > + <input type="hidden" class="js-site-search-type-field" name="type" > + </label> +</form></div> + + </div> + + <span class="d-inline-block"> + <div class="HeaderNavlink px-0 py-2 m-0"> + <a class="text-bold text-white no-underline" href="/login?return_to=%2Fvivien%2Fi3blocks-contrib%2Fblob%2Fmaster%2Fiface%2Fiface-down.png" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a> + <span class="text-gray">or</span> + <a class="text-bold text-white no-underline" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a> + </div> + </span> + </div> + </div> + </div> +</header> + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + <div id="js-flash-container"> +</div> + + + + <div role="main" class="application-main "> + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <div id="js-repo-pjax-container" data-pjax-container > + + + + + + + + + <div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav "> + <div class="repohead-details-container clearfix container"> + + <ul class="pagehead-actions"> + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to watch a repository" rel="nofollow"> + <svg class="octicon octicon-eye" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg> + Watch + </a> + <a class="social-count" href="/vivien/i3blocks-contrib/watchers" + aria-label="24 users are watching this repository"> + 24 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to star a repository" rel="nofollow"> + <svg class="octicon octicon-star" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg> + Star + </a> + + <a class="social-count js-social-count" href="/vivien/i3blocks-contrib/stargazers" + aria-label="285 users starred this repository"> + 285 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to fork a repository" rel="nofollow"> + <svg class="octicon octicon-repo-forked" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + Fork + </a> + + <a href="/vivien/i3blocks-contrib/network" class="social-count" + aria-label="96 users forked this repository"> + 96 + </a> + </li> +</ul> + + <h1 class="public "> + <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg> + <span class="author" itemprop="author"><a class="url fn" rel="author" href="/vivien">vivien</a></span><!-- +--><span class="path-divider">/</span><!-- +--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/vivien/i3blocks-contrib">i3blocks-contrib</a></strong> + +</h1> + + </div> + +<nav class="reponav js-repo-nav js-sidenav-container-pjax container" + itemscope + itemtype="http://schema.org/BreadcrumbList" + role="navigation" + data-pjax="#js-repo-pjax-container"> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /vivien/i3blocks-contrib" href="/vivien/i3blocks-contrib"> + <svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg> + <span itemprop="name">Code</span> + <meta itemprop="position" content="1"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /vivien/i3blocks-contrib/issues" href="/vivien/i3blocks-contrib/issues"> + <svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg> + <span itemprop="name">Issues</span> + <span class="Counter">15</span> + <meta itemprop="position" content="2"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a data-hotkey="g p" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /vivien/i3blocks-contrib/pulls" href="/vivien/i3blocks-contrib/pulls"> + <svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + <span itemprop="name">Pull requests</span> + <span class="Counter">20</span> + <meta itemprop="position" content="3"> +</a> </span> + + <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /vivien/i3blocks-contrib/projects" href="/vivien/i3blocks-contrib/projects"> + <svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg> + Projects + <span class="Counter" >0</span> +</a> + <a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /vivien/i3blocks-contrib/wiki" href="/vivien/i3blocks-contrib/wiki"> + <svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg> + Wiki +</a> + + <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse /vivien/i3blocks-contrib/pulse" href="/vivien/i3blocks-contrib/pulse"> + <svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg> + Insights +</a> + +</nav> + + + </div> + +<div class="container new-discussion-timeline experiment-repo-nav "> + <div class="repository-content "> + + + <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/vivien/i3blocks-contrib/blob/72e7afea8e35f63cee5956c84206d5c7b70ddae5/iface/iface-down.png">Permalink</a> + + <!-- blob contrib key: blob_contributors:v21:117bbdfe28c55630230299ddf394bb80 --> + + <div class="file-navigation"> + +<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left"> + <button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w" + + type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true"> + <i>Branch:</i> + <span class="js-select-button css-truncate-target">master</span> + </button> + + <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax> + + <div class="select-menu-modal"> + <div class="select-menu-header"> + <svg class="octicon octicon-x js-menu-close" role="img" aria-label="Close" viewBox="0 0 12 16" version="1.1" width="12" height="16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + <span class="select-menu-title">Switch branches/tags</span> + </div> + + <div class="select-menu-filters"> + <div class="select-menu-text-filter"> + <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags"> + </div> + <div class="select-menu-tabs"> + <ul> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a> + </li> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a> + </li> + </ul> + </div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu"> + + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open selected" + href="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png" + data-name="master" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + master + </span> + </a> + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/blob/next/iface/iface-down.png" + data-name="next" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + next + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags"> + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/tree/v1.4.0/iface/iface-down.png" + data-name="v1.4.0" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target" title="v1.4.0"> + v1.4.0 + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + </div> + </div> +</div> + + <div class="BtnGroup float-right"> + <a href="/vivien/i3blocks-contrib/find/master" + class="js-pjax-capture-input btn btn-sm BtnGroup-item" + data-pjax + data-hotkey="t"> + Find file + </a> + <clipboard-copy for="blob-path" class="btn btn-sm BtnGroup-item"> + Copy path + </clipboard-copy> + </div> + <div id="blob-path" class="breadcrumb"> + <span class="repo-root js-repo-root"><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib"><span>i3blocks-contrib</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib/tree/master/iface"><span>iface</span></a></span><span class="separator">/</span><strong class="final-path">iface-down.png</strong> + </div> + </div> + + + <include-fragment src="/vivien/i3blocks-contrib/contributors/master/iface/iface-down.png" class="commit-tease"> + <div> + Fetching contributors… + </div> + + <div class="commit-tease-contributors"> + <img alt="" class="loader-loading float-left" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" height="16" /> + <span class="loader-error">Cannot retrieve contributors at this time</span> + </div> +</include-fragment> + + + <div class="file"> + <div class="file-header"> + <div class="file-actions"> + + <div class="BtnGroup"> + <a id="raw-url" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/raw/master/iface/iface-down.png">Download</a> + <a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/commits/master/iface/iface-down.png">History</a> + </div> + + + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" action="/vivien/i3blocks-contrib/delete/master/iface/iface-down.png" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="rkIxbHS/riwl3JY191MlJDlI3CKSXs9h5RTsXZalhGPRDZFxSXUJ6Ebk2ySf+AtM0FiNdnGbqga632necwjPUw==" /> + <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit" + aria-label="You must be signed in to make or propose changes" data-disable-with> + <svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg> + </button> +</form> </div> + + <div class="file-info"> + 459 Bytes + </div> +</div> + + + + <div itemprop="text" class="blob-wrapper data type-text"> + <div class="image"> + <span class="border-wrap"><img src="/vivien/i3blocks-contrib/blob/master/iface/iface-down.png?raw=true" alt="iface-down.png"></span> + </div> + </div> + + </div> + + <button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button> + <div id="jump-to-line" style="display:none"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button type="submit" class="btn">Go</button> +</form> </div> + + + </div> + <div class="modal-backdrop js-touch-events"></div> +</div> + + </div> + </div> + + </div> + + +<div class="footer container-lg px-3" role="contentinfo"> + <div class="position-relative d-flex flex-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light "> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3">© 2018 <span title="0.26529s from unicorn-570656551-l7df6">GitHub</span>, Inc.</li> + <li class="mr-3"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li> + <li class="mr-3"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li> + <li class="mr-3"><a href="https://help.github.com/articles/github-security/" data-ga-click="Footer, go to security, text:security">Security</a></li> + <li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> + <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li> + </ul> + + <a aria-label="Homepage" title="GitHub" class="footer-octicon" href="https://github.com"> + <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> +</a> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li> + <li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li> + <li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li> + <li class="mr-3"><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li> + <li class="mr-3"><a href="https://blog.github.com" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + + </ul> + </div> + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 text-gray-light"></span> + </div> +</div> + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + You can’t perform that action at this time. + </div> + + + <script crossorigin="anonymous" integrity="sha512-2GVr5rsbbfKbHM6oRrri41+qJ2ltJBCqluASS29fj+9yHGLFmFhq0C64VMdL57UJ34G2+FXU+8FZhaAOnsCEhw==" type="application/javascript" src="https://assets-cdn.github.com/assets/compat-bb7abfb15ed4ffb0da9056d4c980fba5.js"></script> + <script crossorigin="anonymous" integrity="sha512-Aff3pZ4kxDZQtwoDgGXK3pyN4iQf3iacjHCHaTq0uvu7OAGAVBmvy1B9BIl72Yr4elhuVbdYlkDdCLOERCA3sw==" type="application/javascript" src="https://assets-cdn.github.com/assets/frameworks-69305c61e4ce67cdef4a70845fc0e959.js"></script> + + <script crossorigin="anonymous" async="async" integrity="sha512-lR6qGUwl+E+II1nTIoUOEsiPPSiFXngO9f8qpYgVtj4Qpz3Txge9KdIdqLMLrpdpVLzkTgyB3Un3aexsxttJ8Q==" type="application/javascript" src="https://assets-cdn.github.com/assets/github-bed113001abefcd143ae6f67ad18ff59.js"></script> + + + + + <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <div class="facebox" id="facebox" style="display:none;"> + <div class="facebox-popup"> + <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description"> + </div> + <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + </div> +</div> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;"> + </div> +</div> + +<div id="hovercard-aria-description" class="sr-only"> + Press h to open a hovercard with more details. +</div> + + + </body> +</html> + diff --git a/.i3/scripts/iface-up.png b/.i3/scripts/iface-up.png new file mode 100644 index 0000000..cb82ac5 --- /dev/null +++ b/.i3/scripts/iface-up.png @@ -0,0 +1,566 @@ + + + + + + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://assets-cdn.github.com"> + <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com"> + <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + + + + <link crossorigin="anonymous" media="all" integrity="sha512-hqbuBb0QOOmiWgl8a1V1N5q6TI/G0A2hVt/lCFYafR+fYsuXeRUcsdcb/yUyVEHYXktmUXl0Mx9s/BOUNZVq4w==" rel="stylesheet" href="https://assets-cdn.github.com/assets/frameworks-23c9e7262eee71bc6f67f6950190a162.css" /> + <link crossorigin="anonymous" media="all" integrity="sha512-elrcfQA6O59ztZagZ8cAOxGBBl3W1LD9cHCZYAlZYGvEmf7DQFKtSZH+aQAgGJkZVNtXvUSgfyuhMCUlJa+qnw==" rel="stylesheet" href="https://assets-cdn.github.com/assets/github-96998038581f9d275d4a4a841c12e652.css" /> + + + <link crossorigin="anonymous" media="all" integrity="sha512-cCY9KKeDzfGd+snVDZwcOIrTjK+JAFW4FR1c4OGJo1Z2QZNbAGVD6JlcnHL19LBcdByWHVxwrAPwigT/v/DWyQ==" rel="stylesheet" href="https://assets-cdn.github.com/assets/site-7472e7b4603d4095447d49d428375ab8.css" /> + + + <meta name="viewport" content="width=device-width"> + + <title>i3blocks-contrib/iface-up.png at master · vivien/i3blocks-contrib · GitHub</title> + <meta name="description" content="GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 80 million projects."> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + + + <meta property="og:image" content="https://avatars1.githubusercontent.com/u/285808?s=400&v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="vivien/i3blocks-contrib" /><meta property="og:url" content="https://github.com/vivien/i3blocks-contrib" /><meta property="og:description" content="i3blocks-contrib - Official repository for community contributed blocklets" /> + + <link rel="assets" href="https://assets-cdn.github.com/"> + + <meta name="pjax-timeout" content="1000"> + + <meta name="request-id" content="B4A0:59D3:2A3610C:4FCF2E5:5AF9DDBA" data-pjax-transient> + + + + + <meta name="selected-link" value="repo_source" data-pjax-transient> + + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + <meta name="google-analytics" content="UA-3769691-2"> + +<meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-request_id" content="B4A0:59D3:2A3610C:4FCF2E5:5AF9DDBA" /><meta name="octolytics-dimension-region_edge" content="iad" /><meta name="octolytics-dimension-region_render" content="iad" /> +<meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" /> + + + + + <meta class="js-ga-set" name="dimension1" content="Logged Out"> + + + + + <meta name="hostname" content="github.com"> + <meta name="user-login" content=""> + + <meta name="expected-hostname" content="github.com"> + <meta name="js-proxy-site-detection-payload" content="ZWVhNWU3OTM1N2E2NTM0NDkzOGI3MDIwNTlkYWYzYzY2MjdkZjdjNDhjMDY5MDU4Y2VlODY0NTRiNzc1ZjVjY3x7InJlbW90ZV9hZGRyZXNzIjoiMjE3LjE1MS45OC4xNjgiLCJyZXF1ZXN0X2lkIjoiQjRBMDo1OUQzOjJBMzYxMEM6NEZDRjJFNTo1QUY5RERCQSIsInRpbWVzdGFtcCI6MTUyNjMyNDY2NywiaG9zdCI6ImdpdGh1Yi5jb20ifQ=="> + + <meta name="enabled-features" content="UNIVERSE_BANNER,FREE_TRIALS,MARKETPLACE_INSIGHTS,MARKETPLACE_SELF_SERVE,MARKETPLACE_FREE_APPS,MARKETPLACE_INSIGHTS_CONVERSION_PERCENTAGES"> + + <meta name="html-safe-nonce" content="05d40f24d38bfbd71ae717619ec73b2102c17ff8"> + + <meta http-equiv="x-pjax-version" content="b458851e8418d0ed3493c36c4d0efee5"> + + + <link href="https://github.com/vivien/i3blocks-contrib/commits/master.atom" rel="alternate" title="Recent Commits to i3blocks-contrib:master" type="application/atom+xml"> + + <meta name="description" content="i3blocks-contrib - Official repository for community contributed blocklets"> + <meta name="go-import" content="github.com/vivien/i3blocks-contrib git https://github.com/vivien/i3blocks-contrib.git"> + + <meta name="octolytics-dimension-user_id" content="285808" /><meta name="octolytics-dimension-user_login" content="vivien" /><meta name="octolytics-dimension-repository_id" content="39731454" /><meta name="octolytics-dimension-repository_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="39731454" /><meta name="octolytics-dimension-repository_network_root_nwo" content="vivien/i3blocks-contrib" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" /> + + + <link rel="canonical" href="https://github.com/vivien/i3blocks-contrib/blob/master/iface/iface-up.png" data-pjax-transient> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000"> + <link rel="icon" type="image/x-icon" class="js-site-favicon" href="https://assets-cdn.github.com/favicon.ico"> + +<meta name="theme-color" content="#1e2327"> + + + +<link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + + </head> + + <body class="logged-out env-production page-blob"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" tabindex="1" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a> + <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div> + + + + + + + + <header class="Header header-logged-out position-relative f4 py-3" role="banner"> + <div class="container-lg d-flex px-3"> + <div class="d-flex flex-justify-between flex-items-center"> + <a class="header-logo-invertocat my-0" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark"> + <svg height="32" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> + </a> + + </div> + + <div class="HeaderMenu HeaderMenu--bright d-flex flex-justify-between flex-auto"> + <nav class="mt-0"> + <ul class="d-flex list-style-none"> + <li class="ml-2"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features/project-management /features/code-review /features/project-management /features/integrations /features" href="/features"> + Features +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business" href="/business"> + Business +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore"> + Explore +</a> </li> + + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace" href="/marketplace"> + Marketplace +</a> </li> + <li class="ml-4"> + <a class="js-selected-navigation-item HeaderNavlink px-0 py-2 m-0" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing" href="/pricing"> + Pricing +</a> </li> + </ul> + </nav> + + <div class="d-flex"> + <div class="d-lg-flex flex-items-center mr-3"> + <div class="header-search scoped-search site-scoped-search js-site-search" role="search"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" data-scope-type="Repository" data-scope-id="39731454" data-scoped-search-url="/vivien/i3blocks-contrib/search" data-unscoped-search-url="/search" action="/vivien/i3blocks-contrib/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <label class="form-control header-search-wrapper js-chromeless-input-container"> + <a class="header-search-scope no-underline" href="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png">This repository</a> + <input type="text" + class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable" + data-hotkey="s,/" + name="q" + value="" + placeholder="Search" + aria-label="Search this repository" + data-unscoped-placeholder="Search GitHub" + data-scoped-placeholder="Search" + autocapitalize="off" + > + <input type="hidden" class="js-site-search-type-field" name="type" > + </label> +</form></div> + + </div> + + <span class="d-inline-block"> + <div class="HeaderNavlink px-0 py-2 m-0"> + <a class="text-bold text-white no-underline" href="/login?return_to=%2Fvivien%2Fi3blocks-contrib%2Fblob%2Fmaster%2Fiface%2Fiface-up.png" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a> + <span class="text-gray">or</span> + <a class="text-bold text-white no-underline" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a> + </div> + </span> + </div> + </div> + </div> +</header> + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + <div id="js-flash-container"> +</div> + + + + <div role="main" class="application-main "> + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <div id="js-repo-pjax-container" data-pjax-container > + + + + + + + + + <div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav "> + <div class="repohead-details-container clearfix container"> + + <ul class="pagehead-actions"> + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to watch a repository" rel="nofollow"> + <svg class="octicon octicon-eye" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg> + Watch + </a> + <a class="social-count" href="/vivien/i3blocks-contrib/watchers" + aria-label="24 users are watching this repository"> + 24 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to star a repository" rel="nofollow"> + <svg class="octicon octicon-star" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z"/></svg> + Star + </a> + + <a class="social-count js-social-count" href="/vivien/i3blocks-contrib/stargazers" + aria-label="285 users starred this repository"> + 285 + </a> + + </li> + + <li> + <a href="/login?return_to=%2Fvivien%2Fi3blocks-contrib" + class="btn btn-sm btn-with-count tooltipped tooltipped-n" + aria-label="You must be signed in to fork a repository" rel="nofollow"> + <svg class="octicon octicon-repo-forked" viewBox="0 0 10 16" version="1.1" width="10" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + Fork + </a> + + <a href="/vivien/i3blocks-contrib/network" class="social-count" + aria-label="96 users forked this repository"> + 96 + </a> + </li> +</ul> + + <h1 class="public "> + <svg class="octicon octicon-repo" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg> + <span class="author" itemprop="author"><a class="url fn" rel="author" href="/vivien">vivien</a></span><!-- +--><span class="path-divider">/</span><!-- +--><strong itemprop="name"><a data-pjax="#js-repo-pjax-container" href="/vivien/i3blocks-contrib">i3blocks-contrib</a></strong> + +</h1> + + </div> + +<nav class="reponav js-repo-nav js-sidenav-container-pjax container" + itemscope + itemtype="http://schema.org/BreadcrumbList" + role="navigation" + data-pjax="#js-repo-pjax-container"> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a class="js-selected-navigation-item selected reponav-item" itemprop="url" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /vivien/i3blocks-contrib" href="/vivien/i3blocks-contrib"> + <svg class="octicon octicon-code" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg> + <span itemprop="name">Code</span> + <meta itemprop="position" content="1"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a itemprop="url" data-hotkey="g i" class="js-selected-navigation-item reponav-item" data-selected-links="repo_issues repo_labels repo_milestones /vivien/i3blocks-contrib/issues" href="/vivien/i3blocks-contrib/issues"> + <svg class="octicon octicon-issue-opened" viewBox="0 0 14 16" version="1.1" width="14" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg> + <span itemprop="name">Issues</span> + <span class="Counter">15</span> + <meta itemprop="position" content="2"> +</a> </span> + + <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement"> + <a data-hotkey="g p" itemprop="url" class="js-selected-navigation-item reponav-item" data-selected-links="repo_pulls checks /vivien/i3blocks-contrib/pulls" href="/vivien/i3blocks-contrib/pulls"> + <svg class="octicon octicon-git-pull-request" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg> + <span itemprop="name">Pull requests</span> + <span class="Counter">20</span> + <meta itemprop="position" content="3"> +</a> </span> + + <a data-hotkey="g b" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /vivien/i3blocks-contrib/projects" href="/vivien/i3blocks-contrib/projects"> + <svg class="octicon octicon-project" viewBox="0 0 15 16" version="1.1" width="15" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg> + Projects + <span class="Counter" >0</span> +</a> + <a class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /vivien/i3blocks-contrib/wiki" href="/vivien/i3blocks-contrib/wiki"> + <svg class="octicon octicon-book" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z"/></svg> + Wiki +</a> + + <a class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors dependency_graph pulse /vivien/i3blocks-contrib/pulse" href="/vivien/i3blocks-contrib/pulse"> + <svg class="octicon octicon-graph" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg> + Insights +</a> + +</nav> + + + </div> + +<div class="container new-discussion-timeline experiment-repo-nav "> + <div class="repository-content "> + + + <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/vivien/i3blocks-contrib/blob/72e7afea8e35f63cee5956c84206d5c7b70ddae5/iface/iface-up.png">Permalink</a> + + <!-- blob contrib key: blob_contributors:v21:00be70e057fac8faca0df3c6ddb9e4be --> + + <div class="file-navigation"> + +<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left"> + <button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w" + + type="button" aria-label="Switch branches or tags" aria-expanded="false" aria-haspopup="true"> + <i>Branch:</i> + <span class="js-select-button css-truncate-target">master</span> + </button> + + <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax> + + <div class="select-menu-modal"> + <div class="select-menu-header"> + <svg class="octicon octicon-x js-menu-close" role="img" aria-label="Close" viewBox="0 0 12 16" version="1.1" width="12" height="16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + <span class="select-menu-title">Switch branches/tags</span> + </div> + + <div class="select-menu-filters"> + <div class="select-menu-text-filter"> + <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags"> + </div> + <div class="select-menu-tabs"> + <ul> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a> + </li> + <li class="select-menu-tab"> + <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a> + </li> + </ul> + </div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu"> + + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open selected" + href="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png" + data-name="master" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + master + </span> + </a> + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/blob/next/iface/iface-up.png" + data-name="next" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text"> + next + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags"> + <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring"> + + + <a class="select-menu-item js-navigation-item js-navigation-open " + href="/vivien/i3blocks-contrib/tree/v1.4.0/iface/iface-up.png" + data-name="v1.4.0" + data-skip-pjax="true" + rel="nofollow"> + <svg class="octicon octicon-check select-menu-item-icon" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg> + <span class="select-menu-item-text css-truncate-target" title="v1.4.0"> + v1.4.0 + </span> + </a> + </div> + + <div class="select-menu-no-results">Nothing to show</div> + </div> + + </div> + </div> +</div> + + <div class="BtnGroup float-right"> + <a href="/vivien/i3blocks-contrib/find/master" + class="js-pjax-capture-input btn btn-sm BtnGroup-item" + data-pjax + data-hotkey="t"> + Find file + </a> + <clipboard-copy for="blob-path" class="btn btn-sm BtnGroup-item"> + Copy path + </clipboard-copy> + </div> + <div id="blob-path" class="breadcrumb"> + <span class="repo-root js-repo-root"><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib"><span>i3blocks-contrib</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a data-pjax="true" href="/vivien/i3blocks-contrib/tree/master/iface"><span>iface</span></a></span><span class="separator">/</span><strong class="final-path">iface-up.png</strong> + </div> + </div> + + + <include-fragment src="/vivien/i3blocks-contrib/contributors/master/iface/iface-up.png" class="commit-tease"> + <div> + Fetching contributors… + </div> + + <div class="commit-tease-contributors"> + <img alt="" class="loader-loading float-left" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" height="16" /> + <span class="loader-error">Cannot retrieve contributors at this time</span> + </div> +</include-fragment> + + + <div class="file"> + <div class="file-header"> + <div class="file-actions"> + + <div class="BtnGroup"> + <a id="raw-url" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/raw/master/iface/iface-up.png">Download</a> + <a rel="nofollow" class="btn btn-sm BtnGroup-item" href="/vivien/i3blocks-contrib/commits/master/iface/iface-up.png">History</a> + </div> + + + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" action="/vivien/i3blocks-contrib/delete/master/iface/iface-up.png" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="MZmDWDObtREjPfRx5mScjdITJoYbp2Nm14yo94+c8EtUs8M7uoDs9QDtWO9/kFEufweJZO5PhZzlsmogu0em4Q==" /> + <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit" + aria-label="You must be signed in to make or propose changes" data-disable-with> + <svg class="octicon octicon-trashcan" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg> + </button> +</form> </div> + + <div class="file-info"> + 856 Bytes + </div> +</div> + + + + <div itemprop="text" class="blob-wrapper data type-text"> + <div class="image"> + <span class="border-wrap"><img src="/vivien/i3blocks-contrib/blob/master/iface/iface-up.png?raw=true" alt="iface-up.png"></span> + </div> + </div> + + </div> + + <button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button> + <div id="jump-to-line" style="display:none"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form" action="" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓" /> + <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button type="submit" class="btn">Go</button> +</form> </div> + + + </div> + <div class="modal-backdrop js-touch-events"></div> +</div> + + </div> + </div> + + </div> + + +<div class="footer container-lg px-3" role="contentinfo"> + <div class="position-relative d-flex flex-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light "> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3">© 2018 <span title="0.28781s from unicorn-3245507942-jb7sd">GitHub</span>, Inc.</li> + <li class="mr-3"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li> + <li class="mr-3"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li> + <li class="mr-3"><a href="https://help.github.com/articles/github-security/" data-ga-click="Footer, go to security, text:security">Security</a></li> + <li class="mr-3"><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li> + <li><a data-ga-click="Footer, go to help, text:help" href="https://help.github.com">Help</a></li> + </ul> + + <a aria-label="Homepage" title="GitHub" class="footer-octicon" href="https://github.com"> + <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg> +</a> + <ul class="list-style-none d-flex flex-wrap "> + <li class="mr-3"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li> + <li class="mr-3"><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li> + <li class="mr-3"><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li> + <li class="mr-3"><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li> + <li class="mr-3"><a href="https://blog.github.com" data-ga-click="Footer, go to blog, text:blog">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + + </ul> + </div> + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 text-gray-light"></span> + </div> +</div> + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + You can’t perform that action at this time. + </div> + + + <script crossorigin="anonymous" integrity="sha512-2GVr5rsbbfKbHM6oRrri41+qJ2ltJBCqluASS29fj+9yHGLFmFhq0C64VMdL57UJ34G2+FXU+8FZhaAOnsCEhw==" type="application/javascript" src="https://assets-cdn.github.com/assets/compat-bb7abfb15ed4ffb0da9056d4c980fba5.js"></script> + <script crossorigin="anonymous" integrity="sha512-Aff3pZ4kxDZQtwoDgGXK3pyN4iQf3iacjHCHaTq0uvu7OAGAVBmvy1B9BIl72Yr4elhuVbdYlkDdCLOERCA3sw==" type="application/javascript" src="https://assets-cdn.github.com/assets/frameworks-69305c61e4ce67cdef4a70845fc0e959.js"></script> + + <script crossorigin="anonymous" async="async" integrity="sha512-lR6qGUwl+E+II1nTIoUOEsiPPSiFXngO9f8qpYgVtj4Qpz3Txge9KdIdqLMLrpdpVLzkTgyB3Un3aexsxttJ8Q==" type="application/javascript" src="https://assets-cdn.github.com/assets/github-bed113001abefcd143ae6f67ad18ff59.js"></script> + + + + + <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none"> + <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"/></svg> + <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <div class="facebox" id="facebox" style="display:none;"> + <div class="facebox-popup"> + <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description"> + </div> + <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal"> + <svg class="octicon octicon-x" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg> + </button> + </div> +</div> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;"> + </div> +</div> + +<div id="hovercard-aria-description" class="sr-only"> + Press h to open a hovercard with more details. +</div> + + + </body> +</html> + diff --git a/.i3/scripts/larbs.png b/.i3/scripts/larbs.png Binary files differnew file mode 100644 index 0000000..0dbc687 --- /dev/null +++ b/.i3/scripts/larbs.png diff --git a/.i3/scripts/linkhandler b/.i3/scripts/linkhandler new file mode 100755 index 0000000..4f364fc --- /dev/null +++ b/.i3/scripts/linkhandler @@ -0,0 +1,27 @@ +#!/bin/sh + +# Feed script a url or file location. +# If an image, it will view in feh, +# if a video or gif, it will view in mpv +# if a music file or pdf, it will download, +# otherwise it opens link in browser. + +# Sci-Hub's domain occasionally changes due to shutdowns: +scihub="http://sci-hub.tw/" + +# If no url given. Opens browser. For using script as $BROWSER. +[ -z "$1" ] && { "$TRUEBROWSER"; exit; } + +case "$1" in + *mkv|*webm|*mp4|*gif|*youtube.com*|*youtu.be*|*hooktube.com*|*bitchute.com*) + setsid mpv -quiet "$1" >/dev/null 2>&1 & ;; + *png|*jpg|*jpe|*jpeg) + setsid feh "$1" >/dev/null 2>&1 & ;; + *mp3|*flac|*opus|*mp3?source) + setsid tsp curl -LO "$1" >/dev/null 2>&1 & ;; + *springer.com*) + setsid curl -sO "$(curl -s "$scihub$*" | grep -Po "(?<=location.href=').+.pdf")" >/dev/null 2>&1 & ;; + *) + if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1" + else setsid "$TRUEBROWSER" "$1" >/dev/null 2>&1 & fi ;; +esac diff --git a/.i3/scripts/lmc b/.i3/scripts/lmc new file mode 100755 index 0000000..45cfcd9 --- /dev/null +++ b/.i3/scripts/lmc @@ -0,0 +1,43 @@ +#!/bin/sh + +# A general audio interface for LARBS. + +newvol="pkill -RTMIN+10 i3blocks" + +[ -z "$2" ] && num="2" || num="$2" + +case "$1" in + u*) pulsemixer --change-volume +"$num" ; $newvol ;; + d*) pulsemixer --change-volume -"$num" ; $newvol ;; + m*) pulsemixer --toggle-mute ; $newvol ;; + truemute) pulsemixer --mute ; $newvol ;; + play) mpc play ;; + n*) mpc next ;; + prev) mpc prev ;; + t*) mpc toggle ;; + p*) mpc pause ; pauseallmpv ;; + f*) mpc seek +"$num" ;; + b*) mpc seek -"$num" ;; + r*) mpc seek 0% ;; + *) cat << EOF +lmc: cli music interface for mpd and pulse for those with divine intellect too +grand to remember the mpc/pamixer commands. + +Allowed options: + up NUM Increase volume (2 secs default) + down NUM Decrease volume (2 secs default) + mute Toggle mute + truemute Mute + next Next track + prev Previous track + toggle Toggle pause + truepause Pause + foward NUM Seek foward in song (2 secs default) + back NUM Seek back in song (2 secs default) + restart Restart current song + all else Print this message + +All of these commands, except for \`truemute\`, \`prev\` and \`play\` can be truncated, +i.e. \`lmc r\` for \`lmc restart\`. +EOF +esac diff --git a/.i3/scripts/load_average.sh b/.i3/scripts/load_average.sh new file mode 100755 index 0000000..37a5c71 --- /dev/null +++ b/.i3/scripts/load_average.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load="$(cut -d ' ' -f1 /proc/loadavg)" +cpus="$(nproc)" + +# full text +echo "$load" + +# short text +echo "$load" + +# color if load is too high +awk -v cpus=$cpus -v cpuload=$load ' + BEGIN { + if (cpus <= cpuload) { + print "#FF0000"; + exit 33; + } + } +' diff --git a/.i3/scripts/lock.sh b/.i3/scripts/lock.sh new file mode 100755 index 0000000..0377cb1 --- /dev/null +++ b/.i3/scripts/lock.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +icon="$HOME/Pictures/Icons/lock.png" +tmpbg='/tmp/screen.png' + +(( $# )) && { icon=$1; } + +scrot "$tmpbg" +convert "$tmpbg" -scale 10% -scale 1000% "$tmpbg" +convert "$tmpbg" "$icon" -gravity center -composite -matte "$tmpbg" +i3lock -i "$tmpbg" diff --git a/.i3/scripts/lockscreen b/.i3/scripts/lockscreen new file mode 100755 index 0000000..c628938 --- /dev/null +++ b/.i3/scripts/lockscreen @@ -0,0 +1,19 @@ +#!/bin/sh + +rm -f /tmp/locked.png + +# If `imagemagick` is not installed, use a blank screen. +[ -f /usr/bin/convert ] && +scrot -m -z /tmp/base.png && +pgrep -x dunst && notify-send -i ~/Pictures/Icons/lock.png "Locking computer..." && +convert /tmp/base.png -blur 0x8 /tmp/locked.png + +# Pause music (mocp, mpd and send the pause key to all mpv videos): +mocp -P >/dev/null 2>&1 +mpc pause >/dev/null 2>&1 +~/.i3/scripts/pauseallmpv >/dev/null 2>&1 + +i3lock -e -f -c 000000 -i /tmp/locked.png + +# In five seconds, turn off display unless key press in last 4 seconds. +sleep 5 && [ 4000 -lt "$(xssstate -i)" ] && pgrep -x i3lock && xset dpms force off diff --git a/.i3/scripts/mailbox b/.i3/scripts/mailbox new file mode 100755 index 0000000..c0794e5 --- /dev/null +++ b/.i3/scripts/mailbox @@ -0,0 +1,16 @@ +#!/bin/sh + +# i3blocks mail module. +# Displays number of unread mail and an loading icon if updating. +# When clicked, brings up `neomutt`. + +case $BLOCK_BUTTON in + 1) "$TERMINAL" -e neomutt ;; + 2) setsid $HOME/.config/mutt/etc/mailsync.sh >/dev/null & ;; + 3) pgrep -x dunst >/dev/null && notify-send "📬 Mail module" "\- Shows unread mail +- Shows 🔃 if syncing mail +- Left click opens neomutt +- Middle click syncs mail" ;; +esac + +echo "$(du -a ~/.local/share/mail/*/INBOX/new/* 2>/dev/null | sed -n '$=')$(cat /tmp/imapsyncicon 2>/dev/null)" diff --git a/.i3/scripts/mediaplayer.sh b/.i3/scripts/mediaplayer.sh new file mode 100755 index 0000000..705e4df --- /dev/null +++ b/.i3/scripts/mediaplayer.sh @@ -0,0 +1,126 @@ +#!/usr/bin/perl +# Copyright (C) 2014 Tony Crisci <tony@dubstepdish.com> +# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Requires playerctl binary to be in your path (except cmus) +# See: https://github.com/acrisci/playerctl + +# Set instance=NAME in the i3blocks configuration to specify a music player +# (playerctl will attempt to connect to org.mpris.MediaPlayer2.[NAME] on your +# DBus session). + +use Time::HiRes qw(usleep); +use Env qw(BLOCK_INSTANCE); + +use constant DELAY => 50; # Delay in ms to let network-based players (spotify) reflect new data. +use constant SPOTIFY_STR => 'spotify'; + +my @metadata = (); +my $player_arg = ""; + +if ($BLOCK_INSTANCE) { + $player_arg = "--player='$BLOCK_INSTANCE'"; +} + +sub buttons { + my $method = shift; + + if($method eq 'mpd') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("mpc prev"); + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("mpc toggle"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("mpc next"); + } + } elsif ($method eq 'cmus') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("cmus-remote --prev"); + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("cmus-remote --pause"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("cmus-remote --next"); + } + } elsif ($method eq 'playerctl') { + if ($ENV{'BLOCK_BUTTON'} == 1) { + system("playerctl $player_arg previous"); + usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR; + } elsif ($ENV{'BLOCK_BUTTON'} == 2) { + system("playerctl $player_arg play-pause"); + } elsif ($ENV{'BLOCK_BUTTON'} == 3) { + system("playerctl $player_arg next"); + usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR; + } + } +} + +sub cmus { + my @cmus = split /^/, qx(cmus-remote -Q); + if ($? == 0) { + foreach my $line (@cmus) { + my @data = split /\s/, $line; + if (shift @data eq 'tag') { + my $key = shift @data; + my $value = join ' ', @data; + + @metadata[0] = $value if $key eq 'artist'; + @metadata[1] = $value if $key eq 'title'; + } + } + + if (@metadata) { + buttons('cmus'); + + # metadata found so we are done + print(join ' - ', @metadata); + exit 0; + } + } +} + +sub mpd { + my $data = qx(mpc current); + if (not $data eq '') { + buttons("mpd"); + print($data); + exit 0; + } +} + +sub playerctl { + buttons('playerctl'); + + my $artist = qx(playerctl $player_arg metadata artist); + # exit status will be nonzero when playerctl cannot find your player + exit(0) if $? || $artist eq '(null)'; + + push(@metadata, $artist) if $artist; + + my $title = qx(playerctl $player_arg metadata title); + exit(0) if $? || $title eq '(null)'; + + push(@metadata, $title) if $title; + + print(join(" - ", @metadata)) if @metadata; +} + +if ($player_arg eq '' or $player_arg =~ /mpd/) { + mpd; +} +if ($player_arg =~ /cmus/) { + cmus; +} +playerctl; diff --git a/.i3/scripts/note b/.i3/scripts/note new file mode 100755 index 0000000..09186ea --- /dev/null +++ b/.i3/scripts/note @@ -0,0 +1,8 @@ +#!/bin/sh +# This is a general notification command for my own ease. +# $1 should be a message +# $2 is an optional image for notify-send +# Echos content on terminal and if dunst is running, shows notification. + +[ -z "$2" ] || img="-i $2" +echo "$1" && pgrep -x dunst >/dev/null && notify-send $img "$1" diff --git a/.i3/scripts/offlineimap-daemon.py b/.i3/scripts/offlineimap-daemon.py new file mode 100755 index 0000000..fea76fc --- /dev/null +++ b/.i3/scripts/offlineimap-daemon.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import subprocess +import signal +import threading +import sys + +import dbus +from dbus.mainloop.glib import DBusGMainLoop +from gi.repository import GLib + + +class OfflineimapCtl(object): + def __init__(self): + self.daemon_proc = None + self.run_ev = threading.Event() + self.run_daemon = False + + def run(self): + t = threading.Thread(target=self._watch_daemon, daemon=True) + t.start() + + def _watch_daemon(self): + while True: + self.run_ev.wait() + self.run_ev.clear() + if self.run_daemon: + self.is_running = True + print('offlineimap is being started') + self._spawn_daemon() + print('offlineimap has stopped') + self.run_ev.set() # check state and restart if needed + + def _spawn_daemon(self): + self.daemon_proc = subprocess.Popen(['offlineimap', '-u', 'basic'], shell=False) + self.daemon_proc.wait() + self.daemon_proc = None + + def start(self): + print('starting offlineimap') + self.run_daemon = True + self.run_ev.set() + + def stop(self): + print('stopping offlineimap') + self.run_daemon = False + if self.daemon_proc: + try: + self.daemon_proc.send_signal(signal.SIGUSR2) + except OSError: + print('Unable to stop offlineimap') + + def restart(self): + print('restarting offlineimap') + if self.run_daemon: + self.stop() + self.start() + + def onConnectivityChanged(self, state): + # 70 means fully connected + if state == 70: + self.start() + else: + self.stop() + +def main(): + oi_ctl = OfflineimapCtl() + oi_ctl.run() + + try: + bus = dbus.SystemBus(mainloop=DBusGMainLoop()) + network_manager = bus.get_object( + 'org.freedesktop.NetworkManager', + '/org/freedesktop/NetworkManager') + network = dbus.Interface(network_manager, + dbus_interface='org.freedesktop.NetworkManager') + + network.connect_to_signal('StateChanged', oi_ctl.onConnectivityChanged) + + # send current state as first event + state = network.state() + oi_ctl.onConnectivityChanged(state) + + except dbus.exceptions.DBusException: + print('Unable to connect to dbus') + sys.exit(3) + + # start receiving events from dbus + loop = GLib.MainLoop() + loop.run() + +if __name__ == '__main__': + main() diff --git a/.i3/scripts/offlineimap-daemonctl.sh b/.i3/scripts/offlineimap-daemonctl.sh new file mode 100755 index 0000000..18daf3d --- /dev/null +++ b/.i3/scripts/offlineimap-daemonctl.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# this script runs offline imap as daemon (configured to check periodically) + +LOG=~/.offlineimap/sync.log +PIDFILE=~/.offlineimap/pid + +# if not present on PATH, those vars must point to proper locations +THIS_SCRIPT=offlineimap-daemonctl.sh +PYTHON_DAEMON=offlineimap-daemon.py + +daemon(){ + $PYTHON_DAEMON 2>&1 | + # add timestamps to logs + (while read line; do + echo `date` "$line" >> $LOG + done) +} + +stop(){ + kill -USR2 `cat $PIDFILE` +} + +refresh(){ + kill -USR1 `cat $PIDFILE` +} + +case "$1" in + '--daemon' | '-d' ) + nohup $THIS_SCRIPT < /dev/null > /dev/null 2>&1 & + ;; + '--kill' | '-k' ) + stop + ;; + '--refresh' | '-r' ) + refresh + ;; + * ) + daemon + ;; +esac
\ No newline at end of file diff --git a/.i3/scripts/openvpn.sh b/.i3/scripts/openvpn.sh new file mode 100755 index 0000000..f1d4e29 --- /dev/null +++ b/.i3/scripts/openvpn.sh @@ -0,0 +1,150 @@ +#!/usr/bin/perl +# Made by Pierre Mavro/Deimosfr <deimos@deimos.fr> +# Minor contribution by Thor K. H. <thor@roht.no> +# Licensed under the terms of the GNU GPL v3, or any later version. +# Version: 0.3 + +# Usage: +# 1. The configuration name of OpenVPN should be familiar for you (home,work...) +# 2. The device name in your configuration file should be fully named (tun0,tap1...not only tun or tap) +# 3. When you launch one or multiple OpenVPN connexion, be sure the PID file is written in the correct folder (ex: --writepid /run/openvpn/home.pid) + +use strict; +use warnings; +use utf8; +use Getopt::Long; + +my $openvpn_enabled='/dev/shm/openvpn_i3blocks_enabled'; +my $openvpn_disabled='/dev/shm/openvpn_i3blocks_disabled'; + +# Print output +sub print_output { + my $ref_pid_files = shift; + my @pid_files = @$ref_pid_files; + my $change=0; + + # Total pid files + my $total_pid = @pid_files; + if ($total_pid == 0) { + print "down\n"x2; + # Delete OpenVPN i3blocks temp files + if (-f $openvpn_enabled) { + unlink $openvpn_enabled or die "Can't delete $openvpn_enabled\n"; + # Colorize if VPN has just went down + print '#FF0000\n'; + } + unless (-f $openvpn_disabled) { + open(my $shm, '>', $openvpn_disabled) or die "Can't write $openvpn_disabled\n"; + } + exit(0); + } + + # Check if interface device is present + my $vpn_found=0; + my $pid; + my $cmd_line; + my @config_name; + my @config_path; + my $interface; + my $current_config_path; + my $current_config_name; + foreach (@pid_files) { + # Get current PID + $pid=0; + open(PID, '<', $_); + while(<PID>) { + chomp $_; + $pid = $_; + } + close(PID); + # Check if PID has been found + if ($pid ==0) { + print "Can't get PID $_: $!\n"; + } + + # Check if PID is still alive + $cmd_line='/proc/'.$pid.'/cmdline'; + if (-f $cmd_line) { + # Get config name + open(CMD_LINE, '<', $cmd_line); + while(<CMD_LINE>) { + chomp $_; + if ($_ =~ /--config\s*(.*\.conf)/) { + # Get interface from config file + $current_config_path = $1; + # Remove unwanted escape chars + $current_config_path =~ s/\x{00}//g; + $interface = 'null'; + # Get configuration name + if ($current_config_path =~ /(\w+).conf/) { + $current_config_name=$1; + } else { + $current_config_name='unknow'; + } + # Get OpenVPN interface device name + open(CONFIG, '<', $current_config_path) or die "Can't read config file '$current_config_path': $!\n"; + while(<CONFIG>) { + chomp $_; + if ($_ =~ /dev\s+(\w+)/) { + $interface=$1; + last; + } + } + close(CONFIG); + # check if interface exist + unless ($interface eq 'null') { + if (-d "/sys/class/net/$interface") { + push @config_name, $current_config_name; + $vpn_found=1; + # Write enabled file + unless (-f $openvpn_enabled) { + open(my $shm, '>', $openvpn_enabled) or die "Can't write $openvpn_enabled\n"; + $change=1; + } + } + } + } + } + close(CMD_LINE); + } + } + + # Check if PID found + my $names; + my $short_status; + if ($vpn_found == 1) { + $names = join('/', @config_name); + $short_status='up'; + } else { + $short_status='down'; + $names = $short_status; + } + + print "$names\n"; + print "$short_status\n"; + + # Print color if there were changes + print "#00FF00\n" if ($change == 1); + + exit(0); +} + +sub check_opts { + # Vars + my @pid_file=glob '/run/openvpn/*.pid'; + + # Set options + GetOptions( "help|h" => \&help, + "p=s" => \@pid_file); + + print_output(\@pid_file); +} + +sub help { + print "Usage: openvpn [-d pid folder files]\n"; + print "-d : pid folder files (default /run/openvpn/*.pid)\n"; + print "Note: devices in configuration file should be named with their number (ex: tun0, tap1)\n"; + exit(1); +} + +&check_opts; diff --git a/.i3/scripts/opout b/.i3/scripts/opout new file mode 100755 index 0000000..d52f285 --- /dev/null +++ b/.i3/scripts/opout @@ -0,0 +1,11 @@ +#!/bin/sh +# opout: "open output": A general handler for opening a file's intended output. +# I find this useful especially running from vim. + +basename="${1%.*}" + +case "$1" in + *.tex|*.md|*.rmd|*.ms|*.me|*.mom) setsid "$READER" "$basename".pdf >/dev/null 2>&1 & ;; + *.html) setsid "$BROWSER" --new-window "$basename".html >/dev/null 2>&1 & ;; + *.sent) setsid sent "$1" >/dev/null 2>&1 & ;; +esac diff --git a/.i3/scripts/pauseallmpv b/.i3/scripts/pauseallmpv new file mode 100755 index 0000000..08241b5 --- /dev/null +++ b/.i3/scripts/pauseallmpv @@ -0,0 +1,4 @@ +#!/bin/sh +# Sends a , key to all mpv instances, pausing them at the last frame. + +xdotool search --class mpv | xargs -I % xdotool key --window % comma diff --git a/.i3/scripts/polybar_launch b/.i3/scripts/polybar_launch new file mode 100755 index 0000000..2af56ab --- /dev/null +++ b/.i3/scripts/polybar_launch @@ -0,0 +1,16 @@ +#!/bin/sh +#!/usr/bin/env sh + +# Terminate already running bar instances +killall -q polybar + +# Wait until the processes have been shut down +while pgrep -x polybar >/dev/null; do sleep 1; done + +# Launch bar1 and bar2 +#polybar example & + +for i in $(polybar -m | awk -F: '{print $1}'); do MONITOR=$i polybar example -c ~/.config/polybar/config & done +feh --bg-scale ~/.config/wall.png + +echo "Bars launched..." diff --git a/.i3/scripts/prompt b/.i3/scripts/prompt new file mode 100755 index 0000000..0a2aba9 --- /dev/null +++ b/.i3/scripts/prompt @@ -0,0 +1,8 @@ +#!/bin/sh +# A dmenu binary prompt script. +# Gives a dmenu prompt labeled with $1 to perform command $2. +# For example: +# `./prompt "Do you want to shutdown?" "shutdown -h now"` + +[ $(echo -e "No\nYes" | dmenu -i -p "$1" -nb darkred -sb red -sf white -nf gray -fn mono) \ +== "Yes" ] && $2 diff --git a/.i3/scripts/remaps b/.i3/scripts/remaps new file mode 100755 index 0000000..74c1057 --- /dev/null +++ b/.i3/scripts/remaps @@ -0,0 +1,19 @@ +#!/bin/sh + +# This script is called by i3 on startup. + +# Increase key speed via a rate change +xset r rate 300 50 +# Map the caps lock key to super... +#setxkbmap -layout us -variant altgr-intl -option caps:super +# If you don't want a us international keyboard, rather whatever keyboard +# you set in your installation, comment out the above line and uncomment +# the one below. +setxkbmap -option caps:super + +# But when it is pressed only once, treat it as escape. +killall xcape ; xcape -e 'Super_L=Escape' + +# Map the menu button to right super as well. +xmodmap -e 'keycode 135 = Super_R' +#keycode 135 = Super_R NoSymbol Super_R diff --git a/.i3/scripts/screen.sh b/.i3/scripts/screen.sh new file mode 100755 index 0000000..03a8e79 --- /dev/null +++ b/.i3/scripts/screen.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +#Feed this script either: +# "l" for laptop screen only, +# "v" for vga screen only, +# or "d" for dual vga/laptop. + +d() { if [[ $(xrandr -q | grep VGA1\ con) ]] + then param $1 + else echo "No VGA input detected." + fi ;} +dual() { xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1 ;} +laptop() { xrandr --output LVDS1 --auto --output VGA1 --off ;} +vga() { xrandr --output VGA1 --auto --output LVDS1 --off ;} +#mirror() { xrandr --addmode VGA1 $lapres && xrandr --output LVDS1 --mode $lapres --output VGA1 --mode $lapres ;} + +param() { +case $1 in + d) dual ;; + v) vga ;; + l) laptop ;; + *) echo -e "Invalid parameter. Add one of the following:\n\"d\" for dualscreen laptop and VGA.\n\"l\" for laptop only\n\"v\" for VGA only." ;; +esac ;} +d $1 diff --git a/.i3/scripts/screencast b/.i3/scripts/screencast new file mode 100755 index 0000000..cd37ab9 --- /dev/null +++ b/.i3/scripts/screencast @@ -0,0 +1,36 @@ +#!/bin/bash + +# This script records a screencast with audio and video. +# It runs an appropriate record script for either ALSA and Pulseaudio. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/screencast$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/screencast$n.mkv" + +# For Pulseaudio with ALSA: +record_pulse() { \ +ffmpeg -y \ +-f x11grab \ +-framerate 60 \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ +-f alsa -i default \ +-r 30 \ + -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac $filename ;} + +# For ALSA: +record_alsa() { \ +ffmpeg -y \ +-f x11grab \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ +-thread_queue_size 1024 \ + -f alsa -ar 44100 -i hw:1 \ + -c:v libx264 -r 30 -c:a flac $filename ;} + + +if [[ $(pgrep -x pulseaudio) ]]; then record_pulse; else record_alsa; fi diff --git a/.i3/scripts/shortcuts b/.i3/scripts/shortcuts new file mode 100755 index 0000000..5ccb114 --- /dev/null +++ b/.i3/scripts/shortcuts @@ -0,0 +1,38 @@ +#!/bin/bash + +# Shell rc file (i.e. bash vs. zsh, etc.) +shellrc="$HOME/.bashrc" + +# Bookmark file locations +bmdirs="$HOME/.bmdirs" +bmfiles="$HOME/.bmfiles" + +# Output locations. Unactivated progs should go to /dev/null. +shell_shortcuts="$HOME/.shortcuts" +ranger_shortcuts="$HOME/.config/ranger/shortcuts.conf" +qute_shortcuts="/dev/null" +fish_shortcuts="/dev/null" + +# Remove, prepare files +rm -f "$ranger_shortcuts" "$qute_shortcuts" 2>/dev/null +#echo "abbr \\" > "$fish_shortcuts" +echo "alias \\" > "$shell_shortcuts" + +# Ensure text of argument 1 exists in the file argument 2 +ensure() { (grep "$1" "$2")>/dev/null 2>&1 || echo "$1" >> "$2" ;} + +ensure "source $shell_shortcuts" "$shellrc" +ensure "source $HOME/.config/ranger/shortcuts.conf" "$HOME/.config/ranger/rc.conf" +#ensure "config.source('shortcuts.py')" "$HOME/.config/qutebrowser/config.py" +#ensure "source $HOME/.config/fish/shortcuts.fish" "$HOME/.config/fish/config.fish" + +# Format the `bmdirs` file in the correct syntax and sent it to all three configs. +sed "s/#.*$//;/^$/d" "$bmdirs" | tee >(awk '{print $1"=\"cd "$2" && ls -a\" \\"}' >> "$shell_shortcuts") \ + >(awk '{print $1, "\"cd " $2 "; and ls -a\" \\"}' >> "$fish_shortcuts") \ + >(awk '{print "config.bind(\";"$1"\", \"set downloads.location.directory "$2" ;; hint links download\")"}' >> "$qute_shortcuts") \ + | awk '{print "map g"$1" cd "$2"\nmap t"$1" tab_new "$2"\nmap m"$1" shell mv -v %s "$2"\nmap Y"$1" shell cp -rv %s "$2}' >> "$ranger_shortcuts" + +# Format the `configs` file in the correct syntax and sent it to both configs. +sed "s/#.*$//;/^$/d" "$bmfiles" | tee >(awk '{print $1"=\"$EDITOR "$2"\" \\"}' >> "$shell_shortcuts") \ + >(awk '{print $1, "\"$EDITOR "$2"\" \\"}' >> "$fish_shortcuts") \ + | awk '{print "map "$1" shell $EDITOR "$2}' >> "$ranger_shortcuts" diff --git a/.i3/scripts/spawndl b/.i3/scripts/spawndl new file mode 100755 index 0000000..a419041 --- /dev/null +++ b/.i3/scripts/spawndl @@ -0,0 +1,2 @@ +#!/bin/bash +i3 exec "st -n dl -e youtube-dl $1" diff --git a/.i3/scripts/speedvid.sh b/.i3/scripts/speedvid.sh new file mode 100755 index 0000000..ba3a4f6 --- /dev/null +++ b/.i3/scripts/speedvid.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +base=$(basename $1) +ext="${base##*.}" +base="${base%.*}" + +ffmpeg -i $1 -vf "setpts=$2*PTS" -an $base'_sped.'$ext diff --git a/.i3/scripts/texclear b/.i3/scripts/texclear new file mode 100755 index 0000000..20f435c --- /dev/null +++ b/.i3/scripts/texclear @@ -0,0 +1,14 @@ +#!/bin/sh + +# Clears the build files of a LaTeX/XeLaTeX build. +# I have vim run this file whenever I exit a .tex file. + +case "$1" in + *.tex) + file=$(readlink -f "$1") + dir=$(dirname "$file") + base="${file%.*}" + find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)" -delete ;; + *) printf "Give .tex file as argument.\\n" ;; +esac + diff --git a/.i3/scripts/tmuxdd b/.i3/scripts/tmuxdd new file mode 100755 index 0000000..e821057 --- /dev/null +++ b/.i3/scripts/tmuxdd @@ -0,0 +1,4 @@ +#!/bin/sh +# This is the script that i3 runs to either start tmux in +# the dropdown terminal or log into a previous session. +tmux a || TERM="screen-256color" tmux diff --git a/.i3/scripts/tmuxinit b/.i3/scripts/tmuxinit new file mode 100755 index 0000000..68a4b86 --- /dev/null +++ b/.i3/scripts/tmuxinit @@ -0,0 +1,4 @@ +#!/bin/bash +# This is the script that i3 runs to either start tmux in +# the dropdown terminal or log into a previous session. +tmux a || tmux diff --git a/.i3/scripts/torrent b/.i3/scripts/torrent new file mode 100755 index 0000000..0ab811c --- /dev/null +++ b/.i3/scripts/torrent @@ -0,0 +1,28 @@ +#!/bin/sh + +transmission-remote -l | grep % | + sed " # This first sed command is to ensure a desirable order with sort + s/.*Stopped.*/A/g; + s/.*Seeding.*/Z/g; + s/.*100%.*/N/g; + s/.*Idle.*/B/g; + s/.*Uploading.*/L/g; + s/.*%.*/M/g" | + sort -h | uniq -c | sed " # Now we replace the standin letters with icons. + s/A/🛑/g; + s/B/⌛️/g; + s/L/🔼/g; + s/M/🔽/g; + s/N/✅/g; + s/Z/🌱/g" | awk '{print $2, $1}' | tr '\n' ' ' | sed -e "s/ $//g" + +case $BLOCK_BUTTON in + 1) $TERMINAL -e transmission-remote-cli ;; + 3) pgrep -x dunst >/dev/null && notify-send "Torrent module" "🛑: paused +⏳: idle (seeds needed) +🔼: uploading (unfinished) +🔽: downloading +✅: done +🌱: done and seeding" ;; +esac + diff --git a/.i3/scripts/tpb b/.i3/scripts/tpb new file mode 100755 index 0000000..7a2913a --- /dev/null +++ b/.i3/scripts/tpb @@ -0,0 +1,169 @@ +#!/bin/sh +# +# by Sairon Istyar, 2012 +# distributed under the GPLv3 license +# http://www.opensource.org/licenses/gpl-3.0.html +# + +### CONFIGURATION ### +# program to use for torrent download +# magnet link to torrent will be appended +# you can add -- at the end to indicate end of options +# (if your program supports it, most do) +program='/usr/bin/transmission-remote -a' +daemon='transmission-daemon' +TPB="https://thepiratebay.org" + +# show N first matches by default +limit=50 + +# colors +numbcolor='\x1b[1;35m' +namecolor='\x1b[1;33m' +sizecolor='\x1b[1;36m' +seedcolor='\x1b[1;31m' +peercolor='\x1b[1;32m' +errocolor='\x1b[1;31m' +mesgcolor='\x1b[1;37m' +nonecolor='\x1b[0m' + +# default ordering method +# 1 - name ascending; 2 - name descending; +# 3 - recent first; 4 - oldest first; +# 5 - size descending; 6 - size ascending; +# 7 - seeds descending; 8 - seeds ascending; +# 9 - leechers descending; 10 - leechers ascending; +orderby=7 +### END CONFIGURATION ### + +thisfile="$0" + +printhelp() { + echo -e "Usage:" + echo -e "\t$thisfile [options] search query" + echo + echo + echo -e "Available options:" + echo -e "\t-h\t\tShow help" + echo -e "\t-n [num]\tShow only first N results (default 15; max 100 [top] or 30 [search])" + echo -e "\t-C\t\tDo not use colors" + echo -e "\t-P [prog]\tSet torrent client command (\`-P torrent-client\` OR \`-P \"torrent-client --options\"\`)" + echo + echo -e "Current client settings: $program [magnet link]" +} + +# change torrent client +chex() { + sed "s!^program=.*!program=\'$program\'!" -i "$thisfile" + if [ $? -eq 0 ] ; then + echo "Client changed successfully." + exit 0 + else + echo -e "${errocolor}(EE) ${mesgcolor}==> Something went wrong!${nonecolor}" + exit 1 + fi +} + +# script cmdline option handling +while getopts :hn:CP:: opt ; do + case "$opt" in + h) printhelp; exit 0;; + n) limit="$OPTARG";; + C) unset numbcolor namecolor sizecolor seedcolor peercolor nonecolor errocolor mesgcolor;; + P) program="$OPTARG"; chex;; + *) echo -e "Unknown option(s)."; printhelp; exit 1;; + esac +done + +shift `expr $OPTIND - 1` + +# correctly encode query +q=`echo "$*" | tr -d '\n' | od -t x1 -A n | tr ' ' '%'` + +# if not searching, show top torrents +if [ -z "$q" ] ; then + url="top/all" +else + url='search/'"$q"'/0/'"$orderby"'/0' +fi + +# get results +# Here be dragons! +r=`curl -k -A Mozilla -b "lw=s" -m 15 -s "$TPB/$url" \ + | grep -Eo '^<td><a href=\"/torrent/[^>]*>.*|^<td><nobr><a href=\"[^"]*|<td align=\"right\">[^<]*' \ + | sed 's!^<td><a href=\"/torrent/[^>]*>!!; \ + s!</a>$!!; \ + s!^<td><nobr><a href=\"!!; \ + s!^<td [^>]*>!!; \ + s! !\ !g; \ + s/|/!/g' \ + | sed 'N;N;N;N;s!\n!|!g'` + +# number of results +n=`echo "$r" | wc -l` + +IFS=$'\n' + +# print results +echo "$r" \ + | head -n "$limit" \ + | awk -v N=1 \ + -v NU="$numbcolor" \ + -v NA="$namecolor" \ + -v SI="$sizecolor" \ + -v SE="$seedcolor" \ + -v PE="$peercolor" \ + -v NO="$nonecolor" \ + -F '|' \ + '{print NU N ") " NA $1 " " SI $3 " " SE $4 " " PE $5 NO; N++}' + +# read ID(s), expand ranges, ignore everything else +read -p ">> Torrents to download (eg. 1 3 5-7): " selection +IFS=$'\n\ ' +for num in $selection ; do + if [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*'`" ] ; then + down="$down $num" + elif [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*-[[:digit:]][[:digit:]]*'`" ] ; then + seqstart="${num%-*}" + seqend="${num#*-}" + if [ $seqstart -le $seqend ] ; then + down="$down `seq $seqstart $seqend`" + fi + fi +done + +# normalize download list, sort it and remove dupes +down="$(echo $down | tr '\ ' '\n' | sort -n | uniq)" +IFS=$'\n' + +# check whether we're downloading something, else exit +if [ -z "$down" ] ; then + exit 0 +fi + +# starts daemon if it was not already running and download all torrents in list +echo -n "Downloading torrent(s): " +if ! [ "$(pidof $daemon)" ]; then + $daemon + for torrent in $down ; do + # check if ID is valid and in range of results, download torrent + if [ $torrent -ge 1 ] ; then + if [ $torrent -le $limit ] ; then + echo -n "$torrent " + command="$program `echo "$r" | awk -F '|' 'NR=='$torrent'{print $2; exit}'`" + status=$(eval "$command" 2>&1) + if [ $? -ne 0 ] ; then + echo -n '(failed!) ' + report="$report\n(#$torrent) $status" + fi + fi + fi + done +fi + +echo +if [ -n "$report" ] ; then + echo -n "Exited with errors:" + echo -e "$report" +fi +unset IFS diff --git a/.i3/scripts/tpb.sh b/.i3/scripts/tpb.sh new file mode 100755 index 0000000..fb1b5b6 --- /dev/null +++ b/.i3/scripts/tpb.sh @@ -0,0 +1,164 @@ +#!/bin/sh +# +# by Sairon Istyar, 2012 +# distributed under the GPLv3 license +# http://www.opensource.org/licenses/gpl-3.0.html +# + +### CONFIGURATION ### +# program to use for torrent download +# magnet link to torrent will be appended +# you can add -- at the end to indicate end of options +# (if your program supports it, most do) +program='/usr/bin/transmission-remote -a' +TPB="https://thepiratebay.org" + +# show N first matches by default +limit=50 + +# colors +numbcolor='\x1b[1;35m' +namecolor='\x1b[1;33m' +sizecolor='\x1b[1;36m' +seedcolor='\x1b[1;31m' +peercolor='\x1b[1;32m' +errocolor='\x1b[1;31m' +mesgcolor='\x1b[1;37m' +nonecolor='\x1b[0m' + +# default ordering method +# 1 - name ascending; 2 - name descending; +# 3 - recent first; 4 - oldest first; +# 5 - size descending; 6 - size ascending; +# 7 - seeds descending; 8 - seeds ascending; +# 9 - leechers descending; 10 - leechers ascending; +orderby=7 +### END CONFIGURATION ### + +thisfile="$0" + +printhelp() { + echo -e "Usage:" + echo -e "\t$thisfile [options] search query" + echo + echo + echo -e "Available options:" + echo -e "\t-h\t\tShow help" + echo -e "\t-n [num]\tShow only first N results (default 15; max 100 [top] or 30 [search])" + echo -e "\t-C\t\tDo not use colors" + echo -e "\t-P [prog]\tSet torrent client command (\`-P torrent-client\` OR \`-P \"torrent-client --options\"\`)" + echo + echo -e "Current client settings: $program [magnet link]" +} + +# change torrent client +chex() { + sed "s!^program=.*!program=\'$program\'!" -i "$thisfile" + if [ $? -eq 0 ] ; then + echo "Client changed successfully." + exit 0 + else + echo -e "${errocolor}(EE) ${mesgcolor}==> Something went wrong!${nonecolor}" + exit 1 + fi +} + +# script cmdline option handling +while getopts :hn:CP:: opt ; do + case "$opt" in + h) printhelp; exit 0;; + n) limit="$OPTARG";; + C) unset numbcolor namecolor sizecolor seedcolor peercolor nonecolor errocolor mesgcolor;; + P) program="$OPTARG"; chex;; + *) echo -e "Unknown option(s)."; printhelp; exit 1;; + esac +done + +shift `expr $OPTIND - 1` + +# correctly encode query +q=`echo "$*" | tr -d '\n' | od -t x1 -A n | tr ' ' '%'` + +# if not searching, show top torrents +if [ -z "$q" ] ; then + url="top/all" +else + url='search/'"$q"'/0/'"$orderby"'/0' +fi + +# get results +# Here be dragons! +r=`curl -k -A Mozilla -b "lw=s" -m 15 -s "$TPB/$url" \ + | grep -Eo '^<td><a href=\"/torrent/[^>]*>.*|^<td><nobr><a href=\"[^"]*|<td align=\"right\">[^<]*' \ + | sed 's!^<td><a href=\"/torrent/[^>]*>!!; \ + s!</a>$!!; \ + s!^<td><nobr><a href=\"!!; \ + s!^<td [^>]*>!!; \ + s! !\ !g; \ + s/|/!/g' \ + | sed 'N;N;N;N;s!\n!|!g'` + +# number of results +n=`echo "$r" | wc -l` + +IFS=$'\n' + +# print results +echo "$r" \ + | head -n "$limit" \ + | awk -v N=1 \ + -v NU="$numbcolor" \ + -v NA="$namecolor" \ + -v SI="$sizecolor" \ + -v SE="$seedcolor" \ + -v PE="$peercolor" \ + -v NO="$nonecolor" \ + -F '|' \ + '{print NU N ") " NA $1 " " SI $3 " " SE $4 " " PE $5 NO; N++}' + +# read ID(s), expand ranges, ignore everything else +read -p ">> Torrents to download (eg. 1 3 5-7): " selection +IFS=$'\n\ ' +for num in $selection ; do + if [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*'`" ] ; then + down="$down $num" + elif [ "$num" = "`echo $num | grep -o '[[:digit:]][[:digit:]]*-[[:digit:]][[:digit:]]*'`" ] ; then + seqstart="${num%-*}" + seqend="${num#*-}" + if [ $seqstart -le $seqend ] ; then + down="$down `seq $seqstart $seqend`" + fi + fi +done + +# normalize download list, sort it and remove dupes +down="$(echo $down | tr '\ ' '\n' | sort -n | uniq)" +IFS=$'\n' + +# check whether we're downloading something, else exit +if [ -z "$down" ] ; then + exit 0 +fi + +# download all torrents in list +echo -n "Downloading torrent(s): " +for torrent in $down ; do + # check if ID is valid and in range of results, download torrent + if [ $torrent -ge 1 ] ; then + if [ $torrent -le $limit ] ; then + echo -n "$torrent " + command="$program `echo "$r" | awk -F '|' 'NR=='$torrent'{print $2; exit}'`" + status=$(eval "$command" 2>&1) + if [ $? -ne 0 ] ; then + echo -n '(failed!) ' + report="$report\n(#$torrent) $status" + fi + fi + fi +done +echo +if [ -n "$report" ] ; then + echo -n "Exited with errors:" + echo -e "$report" +fi +unset IFS diff --git a/.i3/scripts/transadd b/.i3/scripts/transadd new file mode 100755 index 0000000..8cc7e80 --- /dev/null +++ b/.i3/scripts/transadd @@ -0,0 +1,12 @@ +#!/bin/sh + +# Mimeapp script for adding torrent to transmission-daemon, but will also start +# the daemon first if not running. + +# Optionally requires my `note` script. The sleep of 3 seconds is because the +# transmission-daemon sometimes fails to take remote requests in its first +# moments. + +pgrep -x transmission-da || (transmission-daemon && note "Starting daemon..." "$PIX/dl.png" && sleep 3 && pkill -RTMIN+7 i3blocks) + +transmission-remote -a "$@" && note "Torrent added." "$PIX/dl.png" diff --git a/.i3/scripts/transmission.sh b/.i3/scripts/transmission.sh new file mode 100755 index 0000000..794f6bb --- /dev/null +++ b/.i3/scripts/transmission.sh @@ -0,0 +1,7 @@ +#!/bin/bash +if [ -f $(pgrep transmission) ]; + then + urxvt -e transmission-remote-cli + else + transmission-daemon && urxvt -e transmission-remote-cli +fi diff --git a/.i3/scripts/video b/.i3/scripts/video new file mode 100755 index 0000000..357464f --- /dev/null +++ b/.i3/scripts/video @@ -0,0 +1,18 @@ +#!/bin/bash + +# This script records video. +# It also names files smartly to prevent overwrites. + +# Picks a file name for the output file based on availability: +while [[ -f $HOME/video$n.mkv ]] +do + n=$((n+1)) +done +filename="$HOME/video$n.mkv" + +# The actual ffmpeg command: +ffmpeg \ +-f x11grab \ +-s $(xdpyinfo | grep dimensions | awk '{print $2;}') \ +-i :0.0 \ + -c:v libx264 -qp 0 -r 30 $filename diff --git a/.i3/scripts/volume.sh b/.i3/scripts/volume.sh new file mode 100755 index 0000000..69fb4a4 --- /dev/null +++ b/.i3/scripts/volume.sh @@ -0,0 +1,11 @@ +pavu_status=$(pulseaudio-ctl full-status) +pavu_status=($pavu_status) + +volume=${pavu_status[0]} +muted=${pavu_status[1]} + +if [ "$muted" == "yes" ]; then + echo '<span foreground="#Cd3f45">Mute</span>' +else + echo $volume +fi diff --git a/.i3/scripts/welcome b/.i3/scripts/welcome new file mode 100755 index 0000000..2e33713 --- /dev/null +++ b/.i3/scripts/welcome @@ -0,0 +1,4 @@ +#!/bin/bash +dialog --title "Welcome to LARBS!" --msgbox "If you're new to the system, hold down the Windows key and press F1 for a full tutorial! + +(This infobox will greet you at each login until you run the command \"hello-larbs\" in the terminal.)" 10 60 diff --git a/.i3/status.conf b/.i3/status.conf new file mode 120000 index 0000000..d90a620 --- /dev/null +++ b/.i3/status.conf @@ -0,0 +1 @@ +.i3status.conf
\ No newline at end of file diff --git a/.i3/workspace-main.json b/.i3/workspace-main.json new file mode 100644 index 0000000..bd82232 --- /dev/null +++ b/.i3/workspace-main.json @@ -0,0 +1,121 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.5, + "swallows": [ + { + "class": "^URxvt$" //, +// "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + // splith split container with 1 children + "border": "normal", + "floating": "auto_off", + "layout": "splith", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 1, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^ncmpcpp$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] + } + ] +} + +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.8, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.2, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] +} + diff --git a/.i3/workspace-music.json b/.i3/workspace-music.json new file mode 100644 index 0000000..80b6c10 --- /dev/null +++ b/.i3/workspace-music.json @@ -0,0 +1,121 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, +// "name": "vgg@$HOST:~", + "percent": 0.5, + "swallows": [ + { + "class": "^mpv$" //, +// "instance": "^mpv$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + // splith split container with 1 children + "border": "normal", + "floating": "auto_off", + "layout": "splith", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 1, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^ncmpcpp$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] + } + ] +} + +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.8, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + }, + { + "border": "pixel", + "current_border_width": 0, + "floating": "auto_off", + "geometry": { + "height": 388, + "width": 644, + "x": 0, + "y": 0 + }, + "name": "vgg@$HOST:~", + "percent": 0.2, + "swallows": [ + { + "class": "^URxvt$" //, + // "instance": "^urxvt$", + // "title": "^vgg\\@$HOST\\:\\~$", + // "transient_for": "^$" + } + ], + "type": "con" + } + ] +} + diff --git a/.i3/ws_2-generic-orig.json b/.i3/ws_2-generic-orig.json new file mode 100755 index 0000000..876cc19 --- /dev/null +++ b/.i3/ws_2-generic-orig.json @@ -0,0 +1,108 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, +// { +// "border": "normal", +// "current_border_width": 2, +// "floating": "auto_off", +// "geometry": { +// "height": 416, +// "width": 658, +// "x": 0, +// "y": 0 +// }, +// "name": "Terminal1", +// "percent": 0.3, +// //"percent": 0.333333333333333, +// "swallows": [ +// { +// "class": "^Gnome\\-terminal$", +// // "instance": "^gnome\\-terminal\\-server$", +// // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", +// // "transient_for": "^$", +// "window_role": "^Terminal1$" +// } +// ], +// "type": "con" +// }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic-t.json b/.i3/ws_2-generic-t.json new file mode 100755 index 0000000..30892d3 --- /dev/null +++ b/.i3/ws_2-generic-t.json @@ -0,0 +1,119 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + // stacked split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "stacked", + "percent": 0.68, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vifm", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + //"window_role": "^ranger$" + "window_role": "^vifm$" + } + ], + "type": "con" + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "zypper", + "percent": 0.32, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^zypper$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + //"class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic.json b/.i3/ws_2-generic.json new file mode 100755 index 0000000..5afc94b --- /dev/null +++ b/.i3/ws_2-generic.json @@ -0,0 +1,115 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + // stacked split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "stacked", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + "swallows": [ + { + "class": "^Terminator$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] + }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "zypper", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^zypper$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.i3/ws_2-generic.json.bak b/.i3/ws_2-generic.json.bak new file mode 100755 index 0000000..876cc19 --- /dev/null +++ b/.i3/ws_2-generic.json.bak @@ -0,0 +1,108 @@ +// vim:ts=4:sw=4:et +{ + // splitv split container with 2 children + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.5, + "type": "con", + "nodes": [ + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "MidnightCommander", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^mc$" + } + ], + "type": "con" + }, +// { +// "border": "normal", +// "current_border_width": 2, +// "floating": "auto_off", +// "geometry": { +// "height": 416, +// "width": 658, +// "x": 0, +// "y": 0 +// }, +// "name": "Terminal1", +// "percent": 0.3, +// //"percent": 0.333333333333333, +// "swallows": [ +// { +// "class": "^Gnome\\-terminal$", +// // "instance": "^gnome\\-terminal\\-server$", +// // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", +// // "transient_for": "^$", +// "window_role": "^Terminal1$" +// } +// ], +// "type": "con" +// }, + { + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 413, + "width": 655, + "x": 0, + "y": 0 + }, + "name": "NCMPCPP", + "percent": 0.5, + //"percent": 0.333333333333333, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^ncmpcpp$" + } + ], + "type": "con" + } + ] +} + +{ + "border": "normal", + "current_border_width": 2, + "floating": "auto_off", + "geometry": { + "height": 416, + "width": 658, + "x": 0, + "y": 0 + }, + "name": "Vim", + "percent": 0.5, + "swallows": [ + { + "class": "^Gnome\\-terminal$", + // "instance": "^gnome\\-terminal\\-server$", + // "title": "^vgg\\@linux\\-gauw\\:\\ \\~$", + // "transient_for": "^$", + "window_role": "^vim$" + } + ], + "type": "con" +} + diff --git a/.ssh/config b/.ssh/config new file mode 100644 index 0000000..cbd558d --- /dev/null +++ b/.ssh/config @@ -0,0 +1,762 @@ +# Default +# gfazio Github + +Host github.com + User git + Hostname github.com + Compression yes + identityfile ~/.ssh/id_rsa + +# vitograffagninoxyz Github + +Host githubxyz + User git + Hostname github.com + Compression yes + identityfile ~/.ssh/id_rsa_xyz + +Host xyz + User vito + Hostname graffagnino.xyz + Compression yes + +Host rxyz + User root + Hostname graffagnino.xyz + Compression yes + +Host gxyz + User git + Hostname graffagnino.xyz + Compression yes + +Host ucl + User vgg + Hostname zuserver1.star.ucl.ac.uk + Compression yes + ForwardX11 yes + +Host star + User vgg + Hostname star-server.herts.ac.uk + Compression yes + ForwardX11 yes + +Host car + User vgg + Hostname car-server.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host cluster + User vgg + Hostname uhhpc.herts.ac.uk + Compression yes + ForwardX11 yes + +Host stri-cluster + User vgg + Hostname stri-cluster.herts.ac.uk + Compression yes + ForwardX11 yes + +Host uhppc0 + User vgg + Hostname uhppc0.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc1 + User vgg + Hostname uhppc0.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc2 + User vgg + Hostname uhppc0.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc3 + User vgg + Hostname uhppc0.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc4 + User vgg + Hostname uhppc4.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc5 + User vgg + Hostname uhppc5.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc6 + User vgg + Hostname uhppc6.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc7 + User vgg + Hostname uhppc7.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc8 + User vgg + Hostname uhppc8.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc9 + User vgg + Hostname uhppc9.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc10 + User vgg + Hostname uhppc10.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc11 + User vgg + Hostname uhppc11.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc12 + User vgg + Hostname uhppc12.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc13 + User vgg + Hostname uhppc13.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc14 + User vgg + Hostname uhppc14.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc15 + User vgg + Hostname uhppc15.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc16 + User vgg + Hostname uhppc16.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc17 + User vgg + Hostname uhppc17.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc18 + User vgg + Hostname uhppc18.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc19 + User vgg + Hostname uhppc19.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc20 + User vgg + Hostname uhppc20.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc21 + User vgg + Hostname uhppc21.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc22 + User vgg + Hostname uhppc22.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc23 + User vgg + Hostname uhppc23.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc24 + User vgg + Hostname uhppc24.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc25 + User vgg + Hostname uhppc25.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc26 + User vgg + Hostname uhppc26.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc27 + User vgg + Hostname uhppc27.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc28 + User vgg + Hostname uhppc28.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc29 + User vgg + Hostname uhppc29.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc30 + User vgg + Hostname uhppc30.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc31 + User vgg + Hostname uhppc31.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc32 + User vgg + Hostname uhppc32.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc33 + User vgg + Hostname uhppc33.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc34 + User vgg + Hostname uhppc34.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc35 + User vgg + Hostname uhppc35.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc36 + User vgg + Hostname uhppc36.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc37 + User vgg + Hostname uhppc37.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc38 + User vgg + Hostname uhppc38.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc39 + User vgg + Hostname uhppc39.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc40 + User vgg + Hostname uhppc40.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc41 + User vgg + Hostname uhppc41.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc42 + User vgg + Hostname uhppc42.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc43 + User vgg + Hostname uhppc43.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc44 + User vgg + Hostname uhppc44.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc45 + User vgg + Hostname uhppc45.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc46 + User vgg + Hostname uhppc46.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc47 + User vgg + Hostname uhppc47.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc48 + User vgg + Hostname uhppc48.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc49 + User vgg + Hostname uhppc49.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc50 + User vgg + Hostname uhppc50.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc51 + User vgg + Hostname uhppc51.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc52 + User vgg + Hostname uhppc52.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc53 + User vgg + Hostname uhppc53.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc54 + User vgg + Hostname uhppc54.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc55 + User vgg + Hostname uhppc55.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc56 + User vgg + Hostname uhppc56.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc57 + User vgg + Hostname uhppc57.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc58 + User vgg + Hostname uhppc58.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc59 + User vgg + Hostname uhppc59.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc60 + User vgg + Hostname uhppc60.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc61 + User vgg + Hostname uhppc61.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc62 + User vgg + Hostname uhppc62.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc63 + User vgg + Hostname uhppc63.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc64 + User vgg + Hostname uhppc64.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc65 + User vgg + Hostname uhppc65.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc66 + User vgg + Hostname uhppc66.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc67 + User vgg + Hostname uhppc67.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc68 + User vgg + Hostname uhppc68.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc69 + User vgg + Hostname uhppc69.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc70 + User vgg + Hostname uhppc70.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc71 + User vgg + Hostname uhppc71.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc72 + User vgg + Hostname uhppc72.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc73 + User vgg + Hostname uhppc73.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc74 + User vgg + Hostname uhppc74.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc75 + User vgg + Hostname uhppc75.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc76 + User vgg + Hostname uhppc76.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc77 + User vgg + Hostname uhppc77.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc78 + User vgg + Hostname uhppc78.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc79 + User vgg + Hostname uhppc79.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc80 + User vgg + Hostname uhppc80.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc81 + User vgg + Hostname uhppc81.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc82 + User vgg + Hostname uhppc82.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc83 + User vgg + Hostname uhppc83.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc84 + User vgg + Hostname uhppc84.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc85 + User vgg + Hostname uhppc85.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc86 + User vgg + Hostname uhppc86.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc87 + User vgg + Hostname uhppc87.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc88 + User vgg + Hostname uhppc88.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc89 + User vgg + Hostname uhppc89.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc90 + User vgg + Hostname uhppc90.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc91 + User vgg + Hostname uhppc91.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc92 + User vgg + Hostname uhppc92.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc93 + User vgg + Hostname uhppc93.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc94 + User vgg + Hostname uhppc94.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc95 + User vgg + Hostname uhppc95.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc96 + User vgg + Hostname uhppc96.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc97 + User vgg + Hostname uhppc97.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc98 + User vgg + Hostname uhppc98.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes + +Host uhppc99 + User vgg + Hostname uhppc99.herts.ac.uk + ProxyCommand ssh -W %h:%p star + Compression yes + ForwardX11 yes diff --git a/.tmux/.gitignore b/.tmux/.gitignore new file mode 100755 index 0000000..df9f8c1 --- /dev/null +++ b/.tmux/.gitignore @@ -0,0 +1 @@ +resurrect/** diff --git a/.tmux/.tmux.ncmpcpp b/.tmux/.tmux.ncmpcpp new file mode 100755 index 0000000..060ae8d --- /dev/null +++ b/.tmux/.tmux.ncmpcpp @@ -0,0 +1,107 @@ + +#-------- Common Settings {{{ +#------------------------------------------------------ +# how to use tmux demo video: http://www.youtube.com/watch?v=ZNM1KfqpyGo +# https://gist.github.com/1147532 +# http://crunchbanglinux.org/forums/post/236199/ +# https://gist.github.com/adinapoli/4723872 + +# change prefix key to Ctrl-a; like GNU Screen +#unbind-key C-b +#set-option -g prefix C-a + +# goto last used window +bind-key C-a last-window + +# Nested Tmux Session +# send to tmux session within another tmux session; like screen +bind-key a send-prefix + +# fix delay time between tmux & vim +set-option -sg escape-time 0 + +# default shell +set-option -g default-command /bin/zsh +set-option -g default-shell /bin/zsh + +# reload config +bind-key r source-file ~/.tmux.conf \; display-message "Configuration reloaded" + +# edit config +bind-key e new-window -n 'conf' '${EDITOR:-vim} ~/.tmux.conf && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' +bind-key '/' new-window 'man tmux' + +# clear screen and scrollback history +bind-key -n C-l send-keys C-l \; run 'tmux clear-history' + +# set display timelimit +set-option -g display-panes-time 2000 +set-option -g display-time 1000 + +# history size +set-option -g history-limit 10000 + +# enable shell hotkeys C-left/C-right +# http://sigizmund.com/tmux-and-c-leftc-right/ +set-window-option -g xterm-keys on + +# enable 256 color terminal +# http://blog.sanctum.geek.nz/256-colour-terminals/ +set-option -g default-terminal "screen-256color" + +# --- }}} +#-------- Keybinding (Vim Style) {{{ +#------------------------------------------------------ +# vim keys in command prompt +set-option -g status-keys vi + +# unicode +set-window-option -g utf8 on + +# select panes +bind-key k select-pane -U +bind-key h select-pane -L +bind-key j select-pane -D +bind-key l select-pane -R + +# cycle windows/panes (no prefix) +bind-key -n M-k select-pane -t :.- # prev pane +bind-key -n M-j select-pane -t :.+ # next pane +bind-key -n M-h select-window -t :- # previous window +bind-key -n M-l select-window -t :+ # next window + +# resize panes +bind-key -r J resize-pane -D 1 +bind-key -r K resize-pane -U 1 +bind-key -r H resize-pane -L 1 +bind-key -r L resize-pane -R 1 + +# better pane split bindings with current path (tmux 1.9+) +bind-key \ split-window -h -c "#{pane_current_path}" # vertical split +bind-key - split-window -v -c "#{pane_current_path}" # horizontal split + +# new window/pane with the current path (tmux 1.9+) +bind-key c new-window -c "#{pane_current_path}" + +# kill window/pane without prompt +# http://unix.stackexchange.com/a/30283 +bind-key & kill-window +bind-key x kill-pane + + +# sync panes; send what you are typing to other panes. +bind-key C-s set-window-option synchronize-panes + +# --- }}} +# music --- {{{ +bind-key C-m new-window -n music -c $HOME \; \ + send-keys 'clear && figlet -w 40 Radio' 'Enter' \; \ + split-window -v -p 70 -t 1 \; \ + send-keys 'ncmpcpp -s visualizer' 'Enter' \; \ + split-window -v -p 50 -t 2 \; \ + send-keys 'ncmpcpp -s playlist' 'Enter' \; \ + split-window -h -p 60 -t 1 \; \ + send-keys 'clear && figlet -w 40 Search Music' 'Enter' \; \ + select-pane -t 1 +# --- }}} + diff --git a/.vim/UltiSnips/html.snippets b/.vim/UltiSnips/html.snippets new file mode 100644 index 0000000..7641b6c --- /dev/null +++ b/.vim/UltiSnips/html.snippets @@ -0,0 +1,5 @@ +snippet tx "A simple HTML tag" +<${1:div>}> + Hello World! +</${1:div}> +endsnippet diff --git a/.vim/sessions/default.vim b/.vim/sessions/default.vim new file mode 100644 index 0000000..ccd81a0 --- /dev/null +++ b/.vim/sessions/default.vim @@ -0,0 +1,50 @@ +let SessionLoad = 1 +let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0 +let v:this_session=expand("<sfile>:p") +silent only +cd ~/ +if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' + let s:wipebuf = bufnr('%') +endif +set shortmess=aoO +badd +21 /tmp/neomutt-MBP83-ARCH-1000-5877-786581530735017297 +argglobal +%argdel +$argadd /tmp/neomutt-MBP83-ARCH-1000-5877-786581530735017297 +edit /tmp/neomutt-MBP83-ARCH-1000-5877-786581530735017297 +set splitbelow splitright +wincmd t +set winminheight=0 +set winheight=1 +set winminwidth=0 +set winwidth=1 +argglobal +setlocal fdm=manual +setlocal fde=0 +setlocal fmr={{{,}}} +setlocal fdi=# +setlocal fdl=0 +setlocal fml=1 +setlocal fdn=20 +setlocal fen +silent! normal! zE +let s:l = 16 - ((15 * winheight(0) + 21) / 43) +if s:l < 1 | let s:l = 1 | endif +exe s:l +normal! zt +16 +normal! 021| +tabnext 1 +if exists('s:wipebuf') && getbufvar(s:wipebuf, '&buftype') isnot# 'terminal' + silent exe 'bwipe ' . s:wipebuf +endif +unlet! s:wipebuf +set winheight=1 winwidth=20 winminheight=1 winminwidth=1 shortmess=filnxtToOF +let s:sx = expand("<sfile>:p:r")."x.vim" +if file_readable(s:sx) + exe "source " . fnameescape(s:sx) +endif +let &so = s:so_save | let &siso = s:siso_save +doautoall SessionLoadPost +unlet SessionLoad +" vim: set ft=vim : diff --git a/.w3m/bookmark.html b/.w3m/bookmark.html new file mode 100644 index 0000000..4c4f290 --- /dev/null +++ b/.w3m/bookmark.html @@ -0,0 +1,260 @@ +<html><head><title>Bookmarks</title></head> +<body> +<h1>Bookmarks</h1> +<h2>UoH</h2> +<ul> +<li><a href="https://pam.herts.ac.uk/private/">School of Physics, Astronomy and Mathematics (University of Hertfordshire)</a> +<li><a href="http://147.197.221.254:631/admin">Printers - CUPS 1.6.3</a> +<li><a href="http://hertfordshire.voxcharta.org/">Vox Charta</a> +</ul> +<h3>Astronomy</h3> +<ul> +<li><a href="https://arxiv.org/list/astro-ph/recent">Astrophysics authors/titles recent submissions</a> +<li><a href="https://science.nrao.edu/">NRAO</a> +<li><a href="https://casa.nrao.edu/">CASA</a> +<li><A HREF="https://archive.nrao.edu/archive/e2earchive.jsp" >NRAO Data Archive</A> +<li><A HREF="http://web.njit.edu/~gary/728/" >PHYSICS 728, RADIO ASTRONOMY</A> +<li><A HREF="http://www.cv.nrao.edu/vlbabook/" >1993 VLBA Summer School Proceedings</A> +<li><A HREF="http://www.aoc.nrao.edu/aips/" >AIPS ("Classic", not aips++) Home Page</A> +<li><A HREF="http://www.lofar.org/operations/doku.php" >Lofar Wiki</A> +<li><A HREF="http://cxc.harvard.edu/" >Chandra Science</A> +<li><A HREF="http://xspector.blogspot.com/2011/07/xspec-and-chandra-grating-spectra.html" >XSPECtor: XSPEC and Chandra grating spectra</A> +<li><A HREF="http://heasarc.gsfc.nasa.gov/docs/xmm/abc/" >XMM ABC Guide</A> +<li><A HREF="http://www.mpe.mpg.de/xray/wave/xmm/cookbook/index.php?lang=en" >XMM-Newton @ MPE</A> +<li><A HREF="https://www.google.co.uk/search?q=magnetic+CP+stars&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox-a#q=radio+magnetic+CP+stars&hl=en&client=firefox-a&hs=isF&rls=org.mozilla:en-GB:official&prmd=imvnsb&ei=TVKtT9XaAZSq8APa3rTvCg&start=10&sa=N&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=827fe311762e611a&biw=1205&bih=771" >radio magnetic cp stars - Google Search</A> +<li><A HREF="http://xrayschool.gsfc.nasa.gov/docs/xrayschool/" >2007 X-ray Astronomy School</A> +<li><A HREF="http://xmm.esac.esa.int/external/xmm_data_analysis/" >XMM-Newton</A> +<li><A HREF="http://solar.physics.montana.edu/cgi-bin/eprint/index.pl?entry=15234" >Solar Physics E-Print Archive</A> +<li><A HREF="http://sprg.ssl.berkeley.edu/~tohban/wiki/index.php/Acceleration_without_Heating" >Acceleration without Heating - RHESSI Wiki</A> +<li><A HREF="http://adsabs.harvard.edu/abs/1992ApJ...384..656W" >Multifrequency observations of a remarkable solar radio burst</A> +<li><A HREF="http://www.spacewx.com/" >Space Environment Technologies / SpaceWx</A> +<li><A HREF="http://ssc.spitzer.caltech.edu/" >Spitzer Science Center</A> +<li><A HREF="http://farside.ph.utexas.edu/teaching/celestial/Celestialhtml/Celestialhtml.html" >Celestialhtml</A> +<li><A HREF="http://farside.ph.utexas.edu/teaching/em/lectures/lectures.html" >EM lectures</A> +<li><A HREF="http://www.parliament.uk/business/committees/committees-a-z/commons-select/science-and-technology-committee/inquiries/astronomy-and-particle-physics/" >Astronomy and Particle Physics - UK Parliament</A> +<li><A HREF="http://arxiv.org/abs/1105.3508" >[1105.3508] Diagnostics of electron beam properties from the simultaneous hard X-ray and microwave emission in the 10 March 2001 flare</A> +<li><A HREF="http://casper.berkeley.edu/astrobaki/index.php/Main_Page" >AstroBaki</A> +<li><A HREF="http://astrobites.com/" >astrobites | the astro-ph reader's digest</A> +<li><A HREF="http://www.jonathansick.ca/adsbibdesk/" >ADS to BibDesk</A> +<li><A HREF="http://wiki.math.toronto.edu/DispersiveWiki/index.php/Main_Page" >Main Page - DispersiveWiki</A> +<li><A HREF="http://www.mendeley.com/getting-started/" >Getting Started with Mendeley | Mendeley</A> +<li><A HREF="http://xmm.esac.esa.int/xsa/index.shtml" >XMM-Newton Science Archive (XSA)</A> +<li><A HREF="http://paw.web.cern.ch/paw/reference_manual/" >PAW Reference manual</A> +<li><A HREF="http://www3.open.ac.uk/employment/tutors/courses/S207.shtm" >The physical world (S207) - Teaching with the Open University - our courses</A> +<li><A HREF="http://www.astro.sunysb.edu/metchev/PHY515/astrodata.html" >PHY 445/515: Astronomical Data Analysis and Software</A> +<li><A HREF="http://cxc.harvard.edu/ciao/workshop/preparation.html" >Workshop Preparation - CIAO 4.3</A> +<li><A HREF="http://xmm2.esac.esa.int/external/xmm_sw_cal/calib/ccf.shtml" >XMM-Newton Current Calibration Files</A> +<li><A HREF="http://root.cern.ch/drupal/" >ROOT | A Data Analysis Framework</A> +<li><A HREF="http://www.timeanddate.com/" >timeanddate.com</A> +<li><A HREF="http://www.lofar.org/astronomy/transients-ksp/technical-description/technical-description" >Technical Description | LOFAR</A> +<li><A HREF="http://www.lmsal.com/~aschwand/software/hydro/hydro_tutorial1.html" >HYDROSTATIC CODE - Software Tutorial</A> +<li><A HREF="http://www.fys.ruu.nl/~rutten/uso-school/Home.html" >USO Dwingeloo School 2009</A> +<li><A HREF="http://www.co-ops.nos.noaa.gov/" >NOAA Tides and Currents - Home</A> +<li><A HREF="http://www.newton.dep.anl.gov/askasci/env99/env183.htm" >Tidal Formula</A> +<li><A HREF="http://www.glad2teach.co.uk/fast_maths_calculation_tricks.htm" >http://www.glad2teach.co.uk...</A> +<li><A HREF="http://www.astro.washington.edu/docs/idl/cgi-bin/getpro/library09.html?FIT" >library09.html</A> +<li><A HREF="http://www.physics.nyu.edu/grierlab/idl_html_help/C58.html" >C58.html</A> +<li><A HREF="http://star.pst.qub.ac.uk/idl/REGRESS.html" >REGRESS.html</A> +<li><A HREF="http://www.astro.sunysb.edu/metchev/PHY515/astrostatistics.html" >astrostatistics.html</A> +<li><A HREF="http://journals.iop.org/" >Electronic Journals from Institute of Physics Publishing</A> +<li><A HREF="http://www.lmsal.com/solarsites.html" >Solar physics on the web</A> +<li><A HREF="http://www.lmsal.com/solarsoft/" >SolarSoft - Description, Last Revision: 8-Feburary-2001</A> +<li><A HREF="http://controls.engin.umich.edu/wiki/index.php/Basic_statistics:_mean,_median,_average,_standard_deviation,_z-scores,_and_p-value" >Basic statistics: mean, median, average, standard deviation, z-scores, and p-value - ControlsWiki</A> +<li><A HREF="http://www.cliffsnotes.com/WileyCDA/CliffsReviewTopic/Integration-Techniques.topicArticleId-39909,articleId-39901.html" >Calculus: Integration Techniques - CliffsNotes</A> +<li><A HREF="http://www.intmath.com/Methods-integration/7_Integration-by-parts.php" >7. Integration by Parts</A> +<li><A HREF="http://www.sosmath.com/calculus/calculus.html" >S.O.S. Math - Calculus</A> +<li><A HREF="http://www.sosmath.com/index.html" >S.O.S MATHematics home page</A> +<li><A HREF="http://tutorial.math.lamar.edu/" >Pauls Online Math Notes</A> +<li><A HREF="http://www.angelfire.com/me/marmalade/mathtips.html" >Fantastic Math Tricks</A> +<li><A HREF="http://www.pma.caltech.edu/Courses/ph136/yr2008/" >Ph 136 Applications of Classical Physics</A> +<li><A HREF="http://physlab.blogspot.com/2006/03/physics-20-reading-list-1.html" >ph20/21/22@Caltech: Physics 20 Reading List #1</A> +<li><A HREF="http://www.pma.caltech.edu/GSR/physicscourses.html" >CalTech Physics Courses</A> +<li><A HREF="http://listverse.com/science/10-easy-arithmetic-tricks/" >10 Easy Arithmetic Tricks - Listverse</A> +<li><A HREF="http://www.cut-the-knot.org/arithmetic/rapid/rapid.shtml" >Fast Arithmetic Tips from Interactive Mathematics Miscellany and Puzzles</A> +<li><A HREF="http://en.wikipedia.org/wiki/Mental_calculation" >Mental calculation - Wikipedia, the free encyclopedia</A> +<li><A HREF="http://mathforum.org/t2t/faq/faq.tricks.html" >Math Forum: T2T FAQ: Tricks for Learning Math</A> +<li><A HREF="http://www.n3kl.com/sun/images/noaa_xrays.gif?" >noaa_xrays.gif (GIF Image, 640×480 pixels)</A> +<li><A HREF="http://www.narrabri.atnf.csiro.au/" >Australia Telescope Compact Array</A> +<li><H3 >ATCA</H3> +<li><A HREF="http://www.narrabri.atnf.csiro.au/observing/" >ATCA Observing Information</A> +<li><A HREF="http://www.atnf.csiro.au/observers/docs/opal/guide.html#OPALRegistration" >guide.html</A> +<li><A HREF="http://www.narrabri.atnf.csiro.au/observing/users_guide/html/new_atug.pdf" >new_atug.pdf (application/pdf Object)</A> +<li><A HREF="http://www.narrabri.atnf.csiro.au/observing/iree.pdf" >iree.pdf (application/pdf Object)</A> +<li><A HREF="http://opal.atnf.csiro.au/" >ATNF Online Proposal Applications & Links</A> +<li><A HREF="http://astrowiki.physics.ox.ac.uk/ERIS2009" >WebHome < ERIS2009 < Oxford University Astro Wiki</A> +<li><A HREF="http://adsabs.harvard.edu/abstract_service.html" >SAO/NASA ADS Custom Query Form Mon Jul 13 13:34:13 2009</A> +<li><A HREF="http://www.sarahbridle.net/lectures/" >Sarah Bridle's homepage</A> +<li><A HREF="http://arxiv.org/abs/astro-ph/0310577" >[astro-ph/0310577] chi^2 and Linear Fits</A> +<li><A HREF="http://www.aips.nrao.edu/cook.html" >AIPS CookBook short table of contents</A> +<li><A HREF="http://simbad.u-strasbg.fr/simbad/" >SIMBAD Astronomical Database</A> +<li><A HREF="http://xmmrps.esac.esa.int/phrp/wphrp_propload.asp?wphrp_propform.asp,navigate,65522,1" >Remote Proposal Submission System</A> +<li><A HREF="http://msslxr.mssl.ucl.ac.uk:8080/SolarB/eisnuggets.jsp" >SOLAR-B Website - Hinode/EIS Nuggets Archive</A> +<li><A HREF="http://www4.wittenberg.edu/maxwell/" >A Student's Guide to Maxwell's Equations</A> +<li><A HREF="https://twiki.cern.ch/twiki/bin/view/Geant4/Geant4CernVM" >Geant4CernVM < Geant4 < TWiki</A> +<li><A HREF="http://www-geant4.kek.jp/Reference/current/" >Geant4</A> +<li><A HREF="http://www.astro.gla.ac.uk/solaire/index.php" >SOLAIRE SODAS - University of Glasgow</A> +<li><A HREF="http://star-www.herts.ac.uk/~jbarnes/lecturenotes.html" >John Barnes Lecture Notes</A> +<li><A HREF="http://users.monash.edu.au/~dprice/ndspmhd/" >Daniel Price's NDSPMHD SPH code for Smoothed Particle Hydrodynamics and Magnetohydrodynamics</A> +<li><A HREF="http://star-www.st-and.ac.uk/~fv/webnotes/chapt16.htm" >Positional Astronomy: <br>Precession</A> +<li><A HREF="http://nedwww.ipac.caltech.edu/level5/Sept08/Kaastra/Kaastra_contents.html" >Thermal radiation processes - J.S. Kaastra et al.</A> +<li><A HREF="http://www.mpe.mpg.de/resources/HE/Buchner/xrayworkshop/">X-Ray Workshop</A> +<li><A HREF="http://www.nist.gov/pml/data/chandra/index.cfm" >NIST Spectral Data for the Chandra X-Ray Observatory</A> +<li><A HREF="http://physics.nist.gov/PhysRefData/ASD/lines_form.html" >NIST: Atomic Spectra Database Lines Form</A> +<li><A HREF="http://physics.nist.gov/PhysRefData/XrayTrans/Html/search.html" >X-ray Transition Energies Search Form</A> +<li><A HREF="http://www.haystack.mit.edu/edu/undergrad/materials/RA_tutorial.html" >RA Tutorial</A> +<li><A HREF="http://www.cv.nrao.edu/course/astr534/ERA.shtml" >Essential Radio Astronomy Course</A> +<li><A HREF="http://astro.physics.uiowa.edu/courses/radioastronomy/assignments.html" >Assignments | Radio Astronomy | RLM</A> +<li><A HREF="http://www.astro.psu.edu/users/niel/" >Niel Brandt's Home Page</A> +<li><A HREF="http://stars.astro.illinois.edu/sow/sowlist.html" >Stars</A> +<li><A HREF="https://github.com/chrisjwilliams/hic" >chrisjwilliams/hic - GitHub</A> +<li><A HREF="http://bellm.org/blog/2011/05/27/why-astronomers-should-program-in-python/" >Why Astronomers Should Program in Python : Exploring the Data Universe</A> +<li><A HREF="http://python-astro.blogspot.co.uk/" >Python-Astro</A> +<li><A HREF="http://idl2python.blogspot.co.uk/" >From IDL to Python</A> +<li><A HREF="http://astroplotlib.stsci.edu/page_astroplotlib.htm" >astroplotlib</A> +<li><A HREF="http://astro-stuff.blogspot.co.uk/2010/09/python-wherehow-to-start-learning.html" >Astro-stuff - For astronomers and linux users.: Python: how to start learning?</A> +<li><A HREF="http://pythondammit.blogspot.co.uk/2012/03/plotting-figure-with-multiple-panels.html" >Python me, dammit!: Plotting a figure with multiple panels</A> +<li><A HREF="http://scipy-lectures.github.com/" >Python Scientific Lecture Notes — Scipy lecture notes</A> +<li><A HREF="http://www.scipy.org/Cookbook" >SciPy Cookbook</A> +<li><A HREF="http://matplotlib.org/" >matplotlib: python plotting — Matplotlib 1.2.0 documentation</A> +<li><A HREF="http://www.astropy.org/" >Astropy</A> +<li><A HREF="http://idl2python.blogspot.co.uk/search?updated-max=2010-09-11T21:46:00-05:00&max-results=7&start=14&by-date=false" >From IDL to Python</A> +<li><A HREF="http://www.scipy.org/Installing_SciPy/Linux#head-89e1f6afaa3314d98a22c79b063cceee2cc6313c" >Installing SciPy/Linux -</A> +<li><A HREF="https://sunpy.readthedocs.org/en/latest/guide/installation/index.html" >Installation — SunPy 0.2.0 documentation</A> +<li><A HREF="http://www.loria.fr/~rougier/teaching/matplotlib/#introduction" >Matplotlib tutorial</A> +<li><A HREF="http://python4astronomers.github.com/" >Practical Python for Astronomers — Python4Astronomers 1.1 documentation</A> +<li><A HREF="http://www.astro.umd.edu/~msk/computing/python/" >http://www.astro.umd.edu/~msk/computing/python/</A> +<li><A HREF="https://osxastrotricks.wordpress.com/" >OS X Astro Tricks | Tips and bug “fixes” for running astronomy-releated software on OS X</A> +<li><A HREF="http://farside.ph.utexas.edu/teaching/329/lectures/lectures.html" >Computational Physics</A> +<li><A HREF="http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/" >Index of /FTP/software/fitsio/c</A> +<li><A HREF="http://www.cmmp.ucl.ac.uk/~ahh/teaching/1B24n/lect01/lect01.html" >Waves, Optics and Acoustics</A> +<li><A HREF="http://en.wikipedia.org/wiki/Dispersion_relation" >Dispersion relation - Wikipedia, the free encyclopedia</A> +<li><A HREF="http://www.minimagnetosphere.org/" >Mini-Magnetosphere</A> +<li><A HREF="http://www.janerigby.net/JRR/osx.html" >OS X for Astronomers</A> +<li><A HREF="http://berkeleyjess.blogspot.co.uk/" >Jessica Kirkpatrick's Blog</A> +<li><A HREF="http://www.icg.port.ac.uk/~edmonde/mac.html" >Mac OS X for Astrophysicists</A> +<li><A HREF="https://andyxl.wordpress.com/" >The e-Astronomer | The Universe, the Internet, and Academic Life</A> +<li><A HREF="http://asterisk.apod.com/ampersand/?page_id=164" >Free college courses | Asterisk</A> +<li><A HREF="http://asterisk.apod.com/index.php" >Starship Asterisk* • Index page</A> +<li><A HREF="https://heasarc.gsfc.nasa.gov/" >HEASARC: NASA's Archive of Data on Energetic Phenomena</A> +<li><A HREF="http://www.n3kl.com/sun/noaa.html" >Current Solar Data: NOAA data</A> +<li><A HREF="http://www.edu-observatory.org/eo/algorithms.html" >Educational Observatory - Astronomical Algorithms & Calculations</A> +<li><A HREF="http://www.ece.unm.edu/summa/notes/Physics.html" >The Notes of Dr. Carl E. Baum</A> +<li><A HREF="http://xmm.esac.esa.int/external/xmm_science/workshops/2014symposium/#contact" >The X-ray Universe 2014</A> +<li><A HREF="http://ocw.mit.edu/courses/physics/8-03sc-physics-iii-vibrations-and-waves-fall-2012/" >Physics III: Vibrations and Waves | Physics | MIT OpenCourseWare</A> +<li><A HREF="http://ocw.mit.edu/courses/physics/8-02sc-physics-ii-electricity-and-magnetism-fall-2010/" >Physics II: Electricity and Magnetism | Physics | MIT OpenCourseWare</A> +<li><A HREF="http://www.chem.utoronto.ca/coursenotes/analsci/StatsTutorial/ftest.html" >F-test</A> +<li><A HREF="http://www.chem.utoronto.ca/coursenotes/analsci/StatsTutorial/AdvStats.html" >Data Evaluation and Comparisons</A> +<li><A HREF="http://obswww.unige.ch/lastro/conferences/sf2013/videos1.cgi" >"43rd Saas-Fee Course<br>Star formation in galaxy evolution: connecting numerical models to reality<br>11-16 March 2013"</A> +<li><A HREF="https://www.fourmilab.ch/etexts/www/effects/" >The Effects of Nuclear Weapons</A> +<li><A HREF="http://www.atomicarchive.com/index.shtml" >atomicarchive.com: Exploring the History, Science, and Consequences of the Atomic Bomb</A> +<li><A HREF="http://joshwalawender.github.io/IRAFtutorial/index.html" >IRAF Tutorial</A> + +</ul> +<h2>Linux</h2> +<ul> +<li><a href="https://sanctum.geek.nz/arabesque/category/vim/">Vim | Arabesque</a> +<li><a href="http://lukesmith.xyz/">Luke Smith</a> +<li><a href="http://invisible-island.net/ncurses/ncurses.faq.html">NCURSES — Frequently Asked Questions (FAQ)</a> +<li><a href="http://www.termsys.demon.co.uk/vtansi.htm">ANSI/VT100 Terminal Control</a> +<li><a href="http://www.linuxhomenetworking.com/">Linux Home Networking | Tutorials and Forums</a> +<li><a href="http://michaelminn.com/linux/home_network/">Linux Home Networking</a> +<li><a href="https://wiki.archlinux.org/">ArchWiki</a> +<li><a href="http://www.grymoire.com/Unix/index.html">Grymoire</a> +<li><a href="https://github.com/gotbletu/shownotes">GitHub - gotbletu/shownotes: notes for random stuff</a> +<li><a href="https://serverfault.com/">Server Fault</a> +<li><a href="http://www.thegeekstuff.com/">The Geek Stuff</a> +<li><a href="http://www.zdnet.com/article/how-to-customise-your-linux-desktop-kali-linux-and-i3-window-manager/">How to customise your Linux desktop: Kali Linux and i3 Window Manager | ZDNet</a> +<li><a href="https://www.virtualbox.org/manual/">Oracle VM VirtualBox</a> +<li><a href="https://www.linux.com/news/training-your-mutt">Training your Mutt | Linux.com | The source for Linux information</a> +<li><a href="http://www.mutt.org/doc/manual/">The Mutt E-Mail Client</a> +<li><a href="https://www.ucolick.org/~lharden/learnmutt.html">Learning Mutt</a> +<li><a href="http://www.guckes.net/Mutt/setup.html">MUTT Setup - Configuration Hints</a> +<li><a href="http://zshwiki.org/home/">ZshWiki</a> +<li><a href="http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html">Bash Beginners Guide</a> +<li><a href="http://tldp.org/LDP/abs/html/index.html">Advanced Bash-Scripting Guide</a> +<li><a href="https://www.tutorialspoint.com/unix_commands/csh.htm">CSH</a> +<li><a href="http://joelinoff.com/blog/?page_id=235">Translate between bash and tcsh commands – Joe's Blog</a> +<li><a href="https://www.ctan.org/">CTAN: Comprehensive TeX Archive Network</a> +<li><a href="https://i3wm.org/docs/userguide.html">i3 User's Guide</a> +<li><a href="https://wiki.zmanda.com/index.php/Main_Page">The Open Source Backup Wiki (Amanda, MySQL Backup, BackupPC)</a> +<li><a href="https://newsboat.org/releases/2.11.1/docs/newsboat.html">The Newsboat RSS Feedreader</a> +<li><a href="https://www.qutebrowser.org/index.html">Qutebrowser</a> +<li><a href="http://w3m.sourceforge.net/">w3m Home Page</a> +<li><a href="https://www.ctan.org/">CTAN: Comprehensive TeX Archive Network</a> +<li><a href="https://www.latex-tutorial.com/">LaTeX-Tutorial.com</a> +<li><a href="https://overthewire.org/wargames/">OverTheWire</a> +<li><a href="https://afew.readthedocs.io/">afew Manual</a> +<li><a href="https://wiki.termux.com/wiki/Main_Page">Termux Wiki</a> +<li><a href="https://tuxurls.com/">TuxURLS </a> +<li><a href="https://catonmat.net/books">TuxURLS-Books</a> +<li><a href="https://catonmat.net/book://catonmat.net/cookbooks/curl">TuxURLS-Curl CookBook</a> +</ul> +<h2>WebOS</h2> +<ul> +<li><a href="https://webos-internals.org/wiki/Main_Page/">WebOS Internals</a> +<li><a href="https://webos-ports.org/wiki/Main_Page/">WebOS-Ports</a> +<li><a href="https://forum.xda-developer.com/hp-touchpad">HP Touchpad</a> +<li><a href="https://forums.webosnation.com/webos-tips-info-resources/">Webos Tips/Info/Resources</a> +</ul> +<h2>S/W Development</h2> +<h3>Python</h3> +<ul> +<li><a href="https://docs.python.org/3/howto/curses.html#user-input">Curses Programming with Python — Python 3.6.4rc1 documentation</a> +<li><a href="https://github.com/box/box-python-sdk">GitHub - box/box-python-sdk: Box SDK for Python</a> +<li><a href="https://opensource.box.com/box-python-sdk/tutorials/intro.html">Box Python SDK</a> +<li><a href="https://docs.python.org/3/">3.6.4rc1 Documentation</a> +</ul> +<h3>Perl</h3> +<ul> +<li><a href="http://learn.perl.org/first_steps/">First steps - learn.perl.org</a> +<li><a href="https://qntm.org/files/perl/perl.html">Perl</a> +</ul> +<h3>Ruby</h3> +<ul> +<li><a href="http://rubylearning.com/satishtalim/tutorial.html">Ruby Tutorial: Ruby Study Notes - Best Ruby Guide, Ruby Tutorial</a> +<li><a href="https://www.ruby-lang.org/en/documentation/faq/">Official Ruby FAQ</a> +<li><a href="https://www.ruby-lang.org/en/documentation/">Ruby Documentation</a> +<li><a href="http://rvm.io/rvm/install">RVM: Ruby Version Manager - Installing RVM</a> +</ul> +<h3>Go</h3> +<ul> +<li><a href="https://golang.org/doc/">Go Language Documentation</a> +<li><a href="https://golang.org/">go lang</a> +</ul> +<h3>Haskell</h3> +<ul> +</ul> +<h2>IRC</h2> +<ul> +<li><a href="http://sunxdcc.com/">SunXDCC | The hottest XDCC search engine</a> +<li><a href="https://ixirc.com/">ixIRC - IRC / XDCC Search Engine</a> +<li><a href="https://github.com/GermainZ/weechat-vimode">WeeChat - Vimode</a> +<li><a href="https://weechat.org/files/doc/devel/weechat_quickstart.en.html">WeeChat quick start guide</a> +<li><a href="https://guides.fixato.org/setting_up_weechat.html">FiXato's Guide to WeeChat</a> +<li><a href="https://weechat.org/files/doc/stable/weechat_user.en.html">WeeChat user’s guide</a> +<li><a href="http://theloadguru.com/how-to-download-with-mirc/">How To Download With mIRC - The Load Guru</a> +<li><a href="https://www.reddit.com/r/Piracy/comments/2oftbu/guide_the_idiot_proof_guide_to_downloading_ebooks/">Guide: The idiot proof guide to downloading ebooks off IRC. With Pictures and everything! : Piracy</a> +<li><a href="http://kmacphail.blogspot.co.uk/2011/09/using-weechat-with-freenode-basics.html">Linux, open source & anything else: Using WeeChat with Freenode (the basics)</a> +<li><a href="http://ircbeginner.com/">#Beginner Website, Undernet - 2003</a> +</ul> +<h2>Miscellaneous</h2> +<ul> +<li><a href="https://eztv.ag/">EZTV - TV Torrents Online Series Download | Official</a> +<li><a href="https://xkcd.com/">xkcd: Temperature Preferences</a> +<li><a href="https://tonvid.com/">tonvid.com</a> +<li><a href="https://www.churchmilitant.com/">Church Militant - Serving Catholics</a> +<li><a href="https://returntotradition.org/">Return To Tradition</a> +<li><a href="https://alfa156.net/">Alfa156</a> +<li><a href="https://thepiratebay.org/">The Pirate Bay</a> +<li><a href="https://docs.google.com/spreadsheets/d/1HzdumNltTj2SHmCv3SRdoub8SvpIEn75fa4Q23x0keU/htmlview">Free Springer Books - Google Drive</a> +<li><a href="https://sdf.org/?tutorials#basics">SDF Public Access UNIX System - Free Shell Account and Shell Access</a> +<!--End of section (do not delete this comment)--> +</ul> +<h2>Tor</h2> +<ul> +<li><a href="https://tb-manual.torproject.org">Tor Browser Manual</a> +<li><a href="http://xmh57jrzrnw6insl.onion/">TORCH: Tor Search!</a> +<!--End of section (do not delete this comment)--> +</ul> +</body> +</html> diff --git a/.w3m/bufinfo b/.w3m/bufinfo new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/.w3m/bufinfo @@ -0,0 +1 @@ + diff --git a/.w3m/cgi-bin/fzf_surfraw.cgi b/.w3m/cgi-bin/fzf_surfraw.cgi new file mode 100755 index 0000000..00921cc --- /dev/null +++ b/.w3m/cgi-bin/fzf_surfraw.cgi @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +### _ _ _ _ +### __ _ ___ | |_| |__ | | ___| |_ _ _ +### / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +###| (_| | (_) | |_| |_) | | __/ |_| |_| | +### \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +### |___/ +### https://www.youtube.com/user/gotbletu +### https://twitter.com/gotbletu +### https://github.com/gotbletu +### gotbletu@gmail.com +### +### Author : gotbletu +### Name : fzf_surfraw.cgi +### Version : 0.2 +### Date : 2020-04-27 +### Description : interactive surfraw smart prefix search engine (mainly use within w3m web browser) +### Depends On : surfraw fzf xsel gawk coreutils grep procps-ng +### Video Demo : https://youtu.be/p5NZb8f8AHA +### References : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m + +### Setup +# vim ~/.w3m/keymap +# keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_clipboard_primary.cgi" +# keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_clipboard_primary.cgi" +# keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_clipboard.cgi" +# keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_clipboard.cgi" + +clear + +# select your elvi +PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOBAL'| fzf -e | awk '{print $1}') + +# exit script if no elvi is selected (e.g hit ESC) +if [ "$PREFIX" = "" ]; then exit; fi + +# get user input +read -r -e -p " $PREFIX >> Enter Your Search Keyword: " INPUT + +# print proper url and copy to primary clipboard (aka highlighted clipboard) and tmux clipboard +surfraw -browser=echo "$PREFIX" "$INPUT" | xsel -p +# pidof tmux >/dev/null && tmux set-buffer "$(surfraw -browser=echo "$PREFIX" "$INPUT")" diff --git a/.w3m/cgi-bin/fzf_surfraw_tmux.cgi b/.w3m/cgi-bin/fzf_surfraw_tmux.cgi new file mode 100755 index 0000000..7813c7c --- /dev/null +++ b/.w3m/cgi-bin/fzf_surfraw_tmux.cgi @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +### _ _ _ _ +### __ _ ___ | |_| |__ | | ___| |_ _ _ +### / _` |/ _ \| __| '_ \| |/ _ \ __| | | | +###| (_| | (_) | |_| |_) | | __/ |_| |_| | +### \__, |\___/ \__|_.__/|_|\___|\__|\__,_| +### |___/ +### https://www.youtube.com/user/gotbletu +### https://twitter.com/gotbletu +### https://github.com/gotbletu +### gotbletu@gmail.com +### +### Author : gotbletu +### Name : fzf_surfraw_tmux.cgi +### Version : 0.2 +### Date : 2020-04-27 +### Description : interactive surfraw smart prefix search engine (mainly use within w3m web browser) +### Depends On : surfraw fzf tmux gawk coreutils grep procps-ng +### Video Demo : https://youtu.be/p5NZb8f8AHA +### References : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m + +### Setup +# vim ~/.w3m/keymap +# keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi" +# keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi" + +clear + +# select your elvi +PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOBAL'| fzf -e | awk '{print $1}') + +# exit script if no elvi is selected (e.g hit ESC) +if [ "$PREFIX" = "" ]; then exit; fi + +# get user input +read -r -e -p " $PREFIX >> Enter Your Search Keyword: " INPUT + +# print proper url and copy to primary clipboard (aka highlighted clipboard) and tmux clipboard +# surfraw -browser=echo "$PREFIX" "$INPUT" | xsel -p +pidof tmux >/dev/null && tmux set-buffer "$(surfraw -browser=echo "$PREFIX" "$INPUT")" diff --git a/.w3m/cgi-bin/magnet.py b/.w3m/cgi-bin/magnet.py new file mode 100755 index 0000000..72b51d4 --- /dev/null +++ b/.w3m/cgi-bin/magnet.py @@ -0,0 +1,23 @@ +#!/usr/bin/python2 +# coding=utf-8 + +import sys +import os +import subprocess + +uri = os.environ.get('QUERY_STRING') +referer = os.environ.get('HTTP_REFERER') + +if not uri: + print + print "Error: No URI" + sys.exit() + +cmd_list = ("transmission-remote", "-a", uri) + +subprocess.call(cmd_list) + +if referer: + print "HTTP/1.1 303 See Other" + print "Location: %s" % referer + diff --git a/.w3m/cgi-bin/treat_as_url.cgi b/.w3m/cgi-bin/treat_as_url.cgi new file mode 100755 index 0000000..98307ce --- /dev/null +++ b/.w3m/cgi-bin/treat_as_url.cgi @@ -0,0 +1,36 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: treat_as_url.sh +# +# USAGE: ./treat_as_url.sh +# +# DESCRIPTION: Make w3m treat all plain text urls as real clickable urls +# +# OPTIONS: --- +# REQUIREMENTS: This script has to be located in the root path /usr/lib/w3m/cgi-bin/treat_as_url.cgi +# BUGS: --- +# NOTES: Install: +# chmod +x treat_as_url.cgi +# sudo cp treat_as_url.cgi /usr/lib/w3m/cgi-bin +# +# Newsboat: +# vim ~/.newsboat/config +# pager "w3m /usr/lib/w3m/cgi-bin/treat_as_url.cgi %f" +# +# w3m mark regular files: +# w3m /usr/lib/w3m/cgi-bin/treat_as_url.cgi filename.txt +# +# w3m mark url: +# w3m /usr/lib/w3m/cgi-bin/treat_as_url.cgi <URL> +# +# AUTHOR: Hola Mundo (https://www.youtube.com/channel/UCK9HlJ89Bzf7VwwMnv1w) +# Reference: http://w3m.sourceforge.net/MANUAL#LocalCGI +# ORGANIZATION: +# CREATED: 19/10/18 15:05:30 +# REVISION: --- +#=============================================================================== + +printf "%s\r\n" "W3m-control: PREV"; +printf "%s\r\n" "W3m-control: MARK_URL"; + diff --git a/.w3m/config b/.w3m/config new file mode 100755 index 0000000..e93235f --- /dev/null +++ b/.w3m/config @@ -0,0 +1,154 @@ +tabstop 8 +indent_incr 4 +pixel_per_char 7 +pixel_per_line 38 +frame 0 +target_self 0 +open_tab_blank 0 +open_tab_dl_list 0 +display_link 1 +display_link_number 1 +decode_url 0 +display_lineinfo 1 +ext_dirlist 1 +dirlist_cmd file:///$LIB/dirlist.cgi +use_dictcommand 0 +dictcommand file:///$LIB/w3mdict.cgi +multicol 0 +alt_entity 0 +graphic_char 0 +display_borders 1 +fold_textarea 0 +display_ins_del 1 +ignore_null_img_alt 1 +view_unseenobject 0 +display_image 1 +pseudo_inlines 1 +auto_image 1 +max_load_image 4 +ext_image_viewer 1 +image_scale 70 +imgdisplay w3mimgdisplay +image_map_list 1 +fold_line 0 +show_lnum 1 +show_srch_str 1 +label_topline 0 +nextpage_topline 1 +color 1 +basic_color terminal +anchor_color blue +image_color green +form_color red +mark_color cyan +bg_color terminal +active_style 0 +active_color cyan +visited_anchor 0 +visited_color magenta +pagerline 10000 +use_history 1 +history 100 +save_hist 1 +confirm_qq 1 +close_tab_back 0 +mark 0 +emacs_like_lineedit 0 +vi_prec_num 0 +mark_all_pages 0 +wrap_search 0 +ignorecase_search 1 +use_mouse 1 +reverse_mouse 0 +relative_wheel_scroll 0 +relative_wheel_scroll_ratio 30 +fixed_wheel_scroll_count 5 +clear_buffer 1 +decode_cte 0 +auto_uncompress 0 +preserve_timestamp 1 +keymap_file keymap +document_root +personal_document_root +cgi_bin ~/.w3m/cgi-bin +index_file +mime_types ~/.mime.types, /etc/mime.types +mailcap ~/.w3m/mailcap, /etc/w3m/mailcap +urimethodmap ~/.w3m/urimethodmap, /etc/w3m/urimethodmap +editor /usr/bin/vi +mailto_options 1 +mailer /usr/bin/mail +extbrowser ${BROWSER} +extbrowser2 bash -c 'transmission-remote -a "$0" && notify-send -t 3000 -i emblem-downloads "Adding Torrent" "$0" ' +extbrowser3 bash -c 'echo -n "$0" | xclip -selection clipboard && notify-send -t 3000 -i edit-copy "W3M URL Yank To Clipboard" "$0"' +extbrowser4 bash -c 'TS_SOCKET=/tmp/ytdl ts youtube-dl "$0" && notify-send -t 3000 -i package-x-generic "youtube-dl: Downloading" "$0" ' +extbrowser5 bash -c 'TS_SOCKET=/tmp/w3m ts /usr/bin/aria2c -j 1 -c -d $HOME/Downloads "$0" && notify-send -t 3000 -i package-x-generic "Aria2c: Downloading" "$0" ' +extbrowser6 bash -c 'TS_SOCKET=/tmp/mpv ts /usr/bin/mpv -ytdl -slang=en --ontop --force-window --autofit=500x200 --geometry=-15-50 "$0" && notify-send -t 3000 -i video-x-generic "MPV Queue" "$0"' +extbrowser7 +extbrowser8 bash -c '/bin/zathura "$0" && notify-send -t 500 -i package-x-generic "zathura: Launching"' +extbrowser9 bash -c 'export CUPS_SERVER="star-server.herts.ac.uk" && /bin/zathura "$0" && notify-send -t 500 -i package-x-generic "zathura: Launching"' +bgextviewer 1 +use_lessopen 0 +passwd_file ~/.w3m/passwd +disable_secret_security_check 0 +ftppasswd +ftppass_hostnamegen 1 +pre_form_file ~/.w3m/pre_form +siteconf_file ~/.w3m/siteconf +user_agent Mozilla/5.0 (Linux i686; U; w3m 0.5.3; en) +no_referer 0 +accept_language en;q=1.0 +accept_encoding gzip, compress, bzip, bzip2, deflate +accept_media text/html, text/*;q=0.5, image/* +argv_is_url 1 +retry_http 1 +default_url 1 +follow_redirection 10 +meta_refresh 0 +dns_order 0 +nntpserver news +nntpmode +max_news 50 +use_proxy 1 +http_proxy +https_proxy +ftp_proxy +no_proxy +noproxy_netaddr 1 +no_cache 0 +ssl_forbid_method 2, 3 +ssl_verify_server 1 +ssl_cert_file +ssl_key_file +ssl_ca_path +ssl_ca_file +use_cookie 1 +show_cookie 0 +accept_cookie 1 +accept_bad_cookie 0 +cookie_reject_domains +cookie_accept_domains +cookie_avoid_wrong_number_of_dots +display_charset UTF-8 +document_charset UTF-8 +auto_detect 2 +system_charset UTF-8 +follow_locale 1 +ext_halfdump 0 +use_wide 1 +use_combining 1 +east_asian_width 0 +use_language_tag 1 +ucs_conv 1 +pre_conv 0 +search_conv 1 +fix_width_conv 1 +use_gb12345_map 0 +use_jisx0201 0 +use_jisc6226 0 +use_jisx0201k 0 +use_jisx0212 0 +use_jisx0213 0 +strict_iso2022 1 +gb18030_as_ucs 0 +simple_preserve_space 0 diff --git a/.w3m/cookie b/.w3m/cookie new file mode 100644 index 0000000..024c782 --- /dev/null +++ b/.w3m/cookie @@ -0,0 +1,4 @@ +https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fusers%2Fvitograffagninoxyz%2Femails%2F124595954%2Fconfirm_verification%2F906a783599a30fbd6ef5ac9f7d599a322b9545b7 logged_in no 1630866545 .github.com / 15 0 +https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fusers%2Fvitograffagninoxyz%2Femails%2F124595954%2Fconfirm_verification%2F906a783599a30fbd6ef5ac9f7d599a322b9545b7 _octo GH1.1.989484477.1599330545 1630866545 .github.com / 15 0 +https://www.youtube.com/user/gotbletu VISITOR_INFO1_LIVE mDlKXk58i1U 1614872715 .youtube.com / 15 0 +https://eztv.io/search/the%20boys __cfduid dc876c22511fa549eab362853c2ad9cbb1599315805 1601907805 .eztv.io / 15 0 diff --git a/.w3m/keymap b/.w3m/keymap new file mode 100755 index 0000000..1f0ade4 --- /dev/null +++ b/.w3m/keymap @@ -0,0 +1,73 @@ + # External Commands {{{ + # EXTERN_LINK = under cursor + # EXTERN = current page + + # open current url (default: Shift+M) + # e.g. 2+Shift+M + #keymap e EXTERN + keymap e EXTERN_LINK ~/bin/scripts/urlportal.sh + + # open url under cursor (default: Esc+Shift+M) + # e.g. 2+Esc+Shift+M + keymap f EXTERN_LINK + + # yank url to clipboard + keymap yy EXTERN_LINK '(echo -n %s | xsel -b)' + keymap YY EXTERN '(echo -n %s | xsel -b)' + # yank url to tmux clipboard + keymap ys EXTERN_LINK 'tmux set-buffer' + keymap YS EXTERN 'tmux set-buffer' + + # open gui browser + keymap xw EXTERN_LINK '$BROWSER' + keymap XW EXTERN '$BROWSER' + keymap xn EXTERN_LINK '$BROWSER_PRIVATE' + keymap XN EXTERN '$BROWSER_PRIVATE' + + # queue download file (task-spooler) + keymap xd EXTERN_LINK 'TS_SOCKET=/tmp/w3m tsp aria2c -j 1 -x 2 -c -d ~/Downloads' + keymap xD EXTERN_LINK 'TS_SOCKET=/tmp/w3m tsp wget -c -P ~/Downloads' + + # queue external media player (task-spooler) e.g youtube, video links + keymap xm EXTERN_LINK 'tsp mpv --ontop --no-border --force-window --autofit=500x280 --geometry=-15-53' + keymap XM EXTERN 'tsp mpv --ontop --no-border --force-window --autofit=500x280 --geometry=-15-53' + + # open external image viewer + keymap xi EXTERN_LINK 'sxiv -g 900x600-15+60 %s &' + keymap xI EXTERN_LINK 'w3m -o display_image=1 -o imgdisplay=w3mimgdisplay' + keymap xg EXTERN_LINK 'mpv --loop --quiet --ontop --no-border --force-window --autofit=900x600 --geometry=-15+60' + keymap xz EXTERN_LINK 'zathura' + + # add torrent or magnetlinks + keymap xt EXTERN_LINK 'transmission-remote --add' + + # basic task-spooler view, cat, clear + keymap ts SHELL 'watch TS_SOCKET=/tmp/w3m tsp' + keymap TS SHELL 'clear && TS_SOCKET=/tmp/w3m tsp -c' + keymap tc SHELL 'clear && TS_SOCKET=/tmp/w3m tsp -C' + + # for x sessions + keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_clipboard_primary.cgi" + keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_clipboard_primary.cgi" + # keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_clipboard.cgi" + # keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_clipboard.cgi" + + # for tmux users or headless server + # keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi" + # keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi" + + # View these user-defined commands + keymap \\\? COMMAND "HELP; SEARCH User-Defined; CENTER_V" + keymap \\\m COMMAND "SHELL 'man w3m'" + + keymap \\\t COMMAND "SET_OPTION display_borders=toggle ; RESHAPE" + keymap \\\i COMMAND "SET_OPTION display_image=toggle ; RELOAD" + keymap \\\e COMMAND "SET_OPTION user_agent='' ; RELOAD" + keymap \\\a COMMAND "SET_OPTION user_agent='Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1107071606; U; en) Presto/2.8.149 Version/11.10' ; RELOAD" + keymap t COMMAND "TAB_GOTO https://duckduckgo.com/lite/; NEXT_LINK; GOTO_LINK" + keymap sg COMMAND "TAB_GOTO https://google.com/; GOTO_LINE 6; NEXT_LINK; GOTO_LINK" + keymap s1 COMMAND "TAB_GOTO https://1337x.to/; GOTO_LINE 6; NEXT_LINK; GOTO_LINK" + keymap sx COMMAND "TAB_GOTO https://stackexchange.com/; GOTO_LINE 7; NEXT_LINK; GOTO_LINK" + + # }}} + diff --git a/.w3m/mailcap b/.w3m/mailcap new file mode 100755 index 0000000..e69de29 --- /dev/null +++ b/.w3m/mailcap diff --git a/.w3m/menu b/.w3m/menu new file mode 100644 index 0000000..c40fe54 --- /dev/null +++ b/.w3m/menu @@ -0,0 +1,33 @@ +menu Main + popup "Buffer ops >(b)" Buffer "b" + popup "Links ops >(l)" Link "lL" + nop "---------------" + popup "Bookmarks >(B)" Bookmark "B" + func "Help >(h)" HELP "hH" + func "Options >(o)" OPTIONS "oO" + nop "---------------" + func "Quit >(o)" OPTIONS "qQ" +end + +menu Buffer + popup "Buffer selection (s)" Select "s" + func "URL new tab (o)" TAB_GOTO "oO" + func "View source (v)" VIEW "vV" + func "Edit source (e)" EDIT "eE" + func "Save source (S)" SAVE "S" + func "Reload (r)" RELOAD "rR" +end + +menu Link + func "Go Link (a)" GOTO_LINK "a" + func "Save Link (A)" SAVE_LINK "A" + func "View Image (i)" VIEW_IMAGE "i" + func "Save Image (I)" SAVE_IMAGE "I" + func "View Frame (f)" FRAME "fF" +end + +menu Bookmark + func "Read bookmark (b)" BOOKMARK "bB" + func "Add page to bookmark (a)" BOOKMARK "aA" +end + diff --git a/.w3m/urimethodmap b/.w3m/urimethodmap new file mode 100755 index 0000000..ad443c2 --- /dev/null +++ b/.w3m/urimethodmap @@ -0,0 +1,2 @@ +magnet: file:/cgi-bin/magnet.py?%s + diff --git a/.weechat-tutorial/alias.conf b/.weechat-tutorial/alias.conf new file mode 100755 index 0000000..069fc02 --- /dev/null +++ b/.weechat-tutorial/alias.conf @@ -0,0 +1,41 @@ +# +# weechat -- alias.conf +# + +[cmd] +AAWAY = "allserv /away" +AME = "allchan /me" +AMSG = "allchan /msg *" +ANICK = "allserv /nick" +BEEP = "print -beep" +BYE = "quit" +C = "buffer clear" +CHAT = "dcc chat" +CL = "buffer clear" +CLOSE = "buffer close" +EXIT = "quit" +IG = "ignore" +J = "join" +K = "kick" +KB = "kickban" +LEAVE = "part" +M = "msg" +MSGBUF = "command -buffer $1 * /input send $2-" +MUB = "unban *" +N = "names" +Q = "query" +REDRAW = "window refresh" +SAY = "msg *" +SIGNOFF = "quit" +T = "topic" +UB = "unban" +UMODE = "mode $nick" +V = "command core version" +W = "who" +WC = "window merge" +WI = "whois" +WII = "whois $1 $1" +WW = "whowas" + +[completion] +MSGBUF = "%(buffers_plugins_names)" diff --git a/.weechat-tutorial/aspell.conf b/.weechat-tutorial/aspell.conf new file mode 100755 index 0000000..c3d12dc --- /dev/null +++ b/.weechat-tutorial/aspell.conf @@ -0,0 +1,20 @@ +# +# weechat -- aspell.conf +# + +[color] +misspelled = lightred +suggestions = default + +[check] +commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" +default_dict = "" +during_search = off +enabled = off +real_time = off +suggestions = -1 +word_min_length = 2 + +[dict] + +[option] diff --git a/.weechat-tutorial/charset.conf b/.weechat-tutorial/charset.conf new file mode 100755 index 0000000..99a90d5 --- /dev/null +++ b/.weechat-tutorial/charset.conf @@ -0,0 +1,11 @@ +# +# weechat -- charset.conf +# + +[default] +decode = "iso-8859-1" +encode = "" + +[decode] + +[encode] diff --git a/.weechat-tutorial/exec.conf b/.weechat-tutorial/exec.conf new file mode 100755 index 0000000..39f1929 --- /dev/null +++ b/.weechat-tutorial/exec.conf @@ -0,0 +1,11 @@ +# +# weechat -- exec.conf +# + +[command] +default_options = "" +purge_delay = 0 + +[color] +flag_finished = lightred +flag_running = lightgreen diff --git a/.weechat-tutorial/irc.conf b/.weechat-tutorial/irc.conf new file mode 100755 index 0000000..901382b --- /dev/null +++ b/.weechat-tutorial/irc.conf @@ -0,0 +1,182 @@ +# +# weechat -- irc.conf +# + +[look] +buffer_open_before_autojoin = on +buffer_open_before_join = off +buffer_switch_autojoin = on +buffer_switch_join = on +color_nicks_in_names = off +color_nicks_in_nicklist = off +color_nicks_in_server_messages = on +color_pv_nick_like_channel = on +ctcp_time_format = "%a, %d %b %Y %T %z" +display_away = local +display_ctcp_blocked = on +display_ctcp_reply = on +display_ctcp_unknown = on +display_host_join = on +display_host_join_local = on +display_host_quit = on +display_join_message = "329,332,333,366" +display_old_topic = on +display_pv_away_once = on +display_pv_back = on +highlight_channel = "$nick" +highlight_pv = "$nick" +highlight_server = "$nick" +highlight_tags_restrict = "irc_privmsg,irc_notice" +item_channel_modes_hide_args = "k" +item_display_server = buffer_plugin +item_nick_modes = on +item_nick_prefix = on +join_auto_add_chantype = off +msgbuffer_fallback = current +new_channel_position = none +new_pv_position = none +nick_completion_smart = speakers +nick_mode = prefix +nick_mode_empty = off +nicks_hide_password = "nickserv" +notice_as_pv = auto +notice_welcome_redirect = on +notice_welcome_tags = "" +notify_tags_ison = "notify_message" +notify_tags_whois = "notify_message" +part_closes_buffer = off +pv_buffer = independent +pv_tags = "notify_private" +raw_messages = 256 +server_buffer = merge_with_core +smart_filter = on +smart_filter_delay = 5 +smart_filter_join = on +smart_filter_join_unmask = 30 +smart_filter_mode = "+" +smart_filter_nick = on +smart_filter_quit = on +temporary_servers = off +topic_strip_colors = off + +[color] +input_nick = lightcyan +item_channel_modes = default +item_lag_counting = default +item_lag_finished = yellow +item_nick_modes = default +message_join = green +message_quit = red +mirc_remap = "1,-1:darkgray" +nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue" +notice = green +reason_quit = default +topic_current = default +topic_new = white +topic_old = default + +[network] +autoreconnect_delay_growing = 2 +autoreconnect_delay_max = 600 +ban_mask_default = "*!$ident@$host" +channel_encode = off +colors_receive = on +colors_send = on +lag_check = 60 +lag_max = 1800 +lag_min_show = 500 +lag_reconnect = 0 +lag_refresh_interval = 1 +notify_check_ison = 1 +notify_check_whois = 5 +sasl_fail_unavailable = on +send_unknown_commands = off +whois_double_nick = off + +[msgbuffer] + +[ctcp] + +[ignore] + +[server_default] +addresses = "" +anti_flood_prio_high = 2 +anti_flood_prio_low = 2 +autoconnect = off +autojoin = "" +autoreconnect = on +autoreconnect_delay = 10 +autorejoin = off +autorejoin_delay = 30 +away_check = 0 +away_check_max_nicks = 25 +capabilities = "" +command = "" +command_delay = 0 +connection_timeout = 60 +default_msg_kick = "" +default_msg_part = "WeeChat %v" +default_msg_quit = "WeeChat %v" +ipv6 = on +local_hostname = "" +nicks = "vgg,vgg1,vgg2,vgg3,vgg4" +nicks_alternate = on +notify = "" +password = "" +proxy = "" +realname = "" +sasl_fail = continue +sasl_key = "" +sasl_mechanism = plain +sasl_password = "" +sasl_timeout = 15 +sasl_username = "" +ssl = off +ssl_cert = "" +ssl_dhkey_size = 2048 +ssl_fingerprint = "" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +ssl_verify = on +username = "vgg" + +[server] +freenode.addresses = "chat.freenode.net" +freenode.proxy +freenode.ipv6 +freenode.ssl +freenode.ssl_cert +freenode.ssl_priorities +freenode.ssl_dhkey_size +freenode.ssl_fingerprint +freenode.ssl_verify +freenode.password +freenode.capabilities +freenode.sasl_mechanism +freenode.sasl_username +freenode.sasl_password +freenode.sasl_key +freenode.sasl_timeout +freenode.sasl_fail +freenode.autoconnect +freenode.autoreconnect +freenode.autoreconnect_delay +freenode.nicks +freenode.nicks_alternate +freenode.username +freenode.realname +freenode.local_hostname +freenode.command +freenode.command_delay +freenode.autojoin +freenode.autorejoin +freenode.autorejoin_delay +freenode.connection_timeout +freenode.anti_flood_prio_high +freenode.anti_flood_prio_low +freenode.away_check +freenode.away_check_max_nicks +freenode.default_msg_kick +freenode.default_msg_part +freenode.default_msg_quit +freenode.notify diff --git a/.weechat-tutorial/iset.conf b/.weechat-tutorial/iset.conf new file mode 100755 index 0000000..1235f3e --- /dev/null +++ b/.weechat-tutorial/iset.conf @@ -0,0 +1,31 @@ +# +# weechat -- iset.conf +# + +[color] +bg_selected = red +help_default_value = green +help_option_name = white +help_text = default +option = default +option_selected = white +type = brown +type_selected = yellow +value = cyan +value_diff = magenta +value_diff_selected = lightmagenta +value_selected = lightcyan +value_undef = green +value_undef_selected = lightgreen + +[help] +show_help_bar = on +show_help_extra_info = on +show_plugin_description = off + +[look] +scroll_horiz = 10 +show_current_line = on +use_color = off +use_mute = off +value_search_char = "=" diff --git a/.weechat-tutorial/logger.conf b/.weechat-tutorial/logger.conf new file mode 100755 index 0000000..89fed53 --- /dev/null +++ b/.weechat-tutorial/logger.conf @@ -0,0 +1,26 @@ +# +# weechat -- logger.conf +# + +[look] +backlog = 20 + +[color] +backlog_end = default +backlog_line = default + +[file] +auto_log = on +flush_delay = 120 +info_lines = off +mask = "$plugin.$name.weechatlog" +name_lower_case = on +nick_prefix = "" +nick_suffix = "" +path = "%h/logs/" +replacement_char = "_" +time_format = "%Y-%m-%d %H:%M:%S" + +[level] + +[mask] diff --git a/.weechat-tutorial/logs/core.weechat.weechatlog b/.weechat-tutorial/logs/core.weechat.weechatlog new file mode 100755 index 0000000..59f1d7f --- /dev/null +++ b/.weechat-tutorial/logs/core.weechat.weechatlog @@ -0,0 +1,673 @@ +2018-01-19 18:42:18 Plugins loaded: alias, aspell, charset, exec, fifo, irc, logger, lua, perl, python, relay, ruby, script, trigger, xfer +2018-01-19 18:43:08 Plugins loaded: alias, aspell, charset, exec, fifo, irc, logger, lua, perl, python, relay, ruby, script, trigger, xfer +2018-01-19 18:44:33 Plugins loaded: alias, aspell, charset, exec, fifo, irc, logger, lua, perl, python, relay, ruby, script, trigger, xfer +2018-01-19 18:45:47 All bars have been deleted +2018-01-19 18:45:47 Bar "input" created +2018-01-19 18:45:50 Bar "title" created +2018-01-19 18:45:50 Bar "status" created +2018-01-19 18:45:50 Bar "nicklist" created +2018-01-19 18:46:38 [color] (weechat.conf) +2018-01-19 18:46:38 weechat.color.nicklist_away = cyan +2018-01-19 18:46:38 weechat.color.nicklist_group = green +2018-01-19 18:46:38 weechat.color.status_nicklist_count = default +2018-01-19 18:46:38 [bar] (weechat.conf) +2018-01-19 18:46:38 weechat.bar.nicklist.color_bg = default +2018-01-19 18:46:38 weechat.bar.nicklist.color_delim = cyan +2018-01-19 18:46:38 weechat.bar.nicklist.color_fg = default +2018-01-19 18:46:38 weechat.bar.nicklist.conditions = "${nicklist}" +2018-01-19 18:46:38 weechat.bar.nicklist.filling_left_right = vertical +2018-01-19 18:46:38 weechat.bar.nicklist.filling_top_bottom = columns_vertical +2018-01-19 18:46:38 weechat.bar.nicklist.hidden = off +2018-01-19 18:46:38 weechat.bar.nicklist.items = "buffer_nicklist" +2018-01-19 18:46:38 weechat.bar.nicklist.position = right +2018-01-19 18:46:38 weechat.bar.nicklist.priority = 200 +2018-01-19 18:46:38 weechat.bar.nicklist.separator = on +2018-01-19 18:46:38 weechat.bar.nicklist.size = 0 +2018-01-19 18:46:38 weechat.bar.nicklist.size_max = 0 +2018-01-19 18:46:38 weechat.bar.nicklist.type = window +2018-01-19 18:46:38 [look] (irc.conf) +2018-01-19 18:46:38 irc.look.color_nicks_in_nicklist = off +2018-01-19 18:46:38 18 options (matching with "*nicklist*") +2018-01-19 18:47:55 [bar] (weechat.conf) +2018-01-19 18:47:55 weechat.bar.nicklist.color_bg = default +2018-01-19 18:47:55 weechat.bar.nicklist.color_delim = cyan +2018-01-19 18:47:55 weechat.bar.nicklist.color_fg = default +2018-01-19 18:47:55 weechat.bar.nicklist.conditions = "${nicklist}" +2018-01-19 18:47:55 weechat.bar.nicklist.filling_left_right = vertical +2018-01-19 18:47:55 weechat.bar.nicklist.filling_top_bottom = columns_vertical +2018-01-19 18:47:55 weechat.bar.nicklist.hidden = off +2018-01-19 18:47:55 weechat.bar.nicklist.items = "buffer_nicklist" +2018-01-19 18:47:55 weechat.bar.nicklist.position = right +2018-01-19 18:47:55 weechat.bar.nicklist.priority = 200 +2018-01-19 18:47:55 weechat.bar.nicklist.separator = on +2018-01-19 18:47:55 weechat.bar.nicklist.size = 0 +2018-01-19 18:47:55 weechat.bar.nicklist.size_max = 0 +2018-01-19 18:47:55 weechat.bar.nicklist.type = window +2018-01-19 18:47:55 14 options (matching with "weechat.bar.nicklist*") +2018-01-19 18:48:30 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:48:42 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:49:02 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:49:22 [bar] (weechat.conf) +2018-01-19 18:49:22 weechat.bar.status.color_bg = blue +2018-01-19 18:49:22 weechat.bar.status.color_delim = cyan +2018-01-19 18:49:22 weechat.bar.status.color_fg = default +2018-01-19 18:49:22 weechat.bar.status.conditions = "" +2018-01-19 18:49:22 weechat.bar.status.filling_left_right = vertical +2018-01-19 18:49:22 weechat.bar.status.filling_top_bottom = horizontal +2018-01-19 18:49:22 weechat.bar.status.hidden = off +2018-01-19 18:49:22 weechat.bar.status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion" +2018-01-19 18:49:22 weechat.bar.status.position = bottom +2018-01-19 18:49:22 weechat.bar.status.priority = 500 +2018-01-19 18:49:22 weechat.bar.status.separator = off +2018-01-19 18:49:22 weechat.bar.status.size = 1 +2018-01-19 18:49:22 weechat.bar.status.size_max = 0 +2018-01-19 18:49:22 weechat.bar.status.type = window +2018-01-19 18:49:22 14 options (matching with "weechat.bar.status.*") +2018-01-19 18:49:31 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:49:37 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:49:40 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:49:51 Option changed: weechat.bar.status.color_bg = red (default: blue) +2018-01-19 18:49:56 Option changed: weechat.bar.status.color_bg = blue +2018-01-19 18:50:00 Option changed: weechat.bar.status.color_bg = green (default: blue) +2018-01-19 18:50:07 =!= Error: failed to set option "weechat.bar.status.color_bg" +2018-01-19 18:50:10 Option changed: weechat.bar.status.color_bg = gray (default: blue) +2018-01-19 18:50:14 Option changed: weechat.bar.status.color_bg = darkgray (default: blue) +2018-01-19 18:51:06 [core] +2018-01-19 18:51:06 away buffer command debug filter history key mouse plugin proxy reload save set upgrade version window +2018-01-19 18:51:06 bar color cursor eval help input layout mute print quit repeat secure unset uptime wait +2018-01-19 18:51:06 [python] +2018-01-19 18:51:06 python +2018-01-19 18:51:06 [aspell] +2018-01-19 18:51:06 aspell +2018-01-19 18:51:06 [relay] +2018-01-19 18:51:06 relay +2018-01-19 18:51:06 [alias] +2018-01-19 18:51:06 AAWAY AME ANICK BYE CHAT CLOSE IG K LEAVE MSGBUF N REDRAW SIGNOFF UB V WC WII +2018-01-19 18:51:06 alias AMSG BEEP C CL EXIT J KB M MUB Q SAY T UMODE W WI WW +2018-01-19 18:51:06 [charset] +2018-01-19 18:51:06 charset +2018-01-19 18:51:06 [xfer] +2018-01-19 18:51:06 me xfer +2018-01-19 18:51:06 [trigger] +2018-01-19 18:51:06 trigger +2018-01-19 18:51:06 [ruby] +2018-01-19 18:51:06 ruby +2018-01-19 18:51:06 [lua] +2018-01-19 18:51:06 lua +2018-01-19 18:51:06 [fifo] +2018-01-19 18:51:06 fifo +2018-01-19 18:51:06 [irc] +2018-01-19 18:51:06 admin connect devoice invite links motd op quiet sajoin service time users whois +2018-01-19 18:51:06 allchan ctcp die ison list msg oper quote samode servlist topic version whowas +2018-01-19 18:51:06 allpv cycle disconnect join lusers names part reconnect sanick squery trace voice +2018-01-19 18:51:06 allserv dcc halfop kick map nick ping rehash sapart squit unban wallchops +2018-01-19 18:51:06 ban dehalfop ignore kickban me notice pong remove saquit stats unquiet wallops +2018-01-19 18:51:06 cap deop info kill mode notify query restart server summon userhost who +2018-01-19 18:51:06 [exec] +2018-01-19 18:51:06 exec +2018-01-19 18:51:06 [script] +2018-01-19 18:51:06 script +2018-01-19 18:51:06 [logger] +2018-01-19 18:51:06 logger +2018-01-19 18:51:06 [perl] +2018-01-19 18:51:06 perl +2018-01-19 18:51:10 [core] +2018-01-19 18:51:10 away buffer command debug filter history key mouse plugin proxy reload save set upgrade version window +2018-01-19 18:51:10 bar color cursor eval help input layout mute print quit repeat secure unset uptime wait +2018-01-19 18:51:10 [python] +2018-01-19 18:51:10 python +2018-01-19 18:51:10 [aspell] +2018-01-19 18:51:10 aspell +2018-01-19 18:51:10 [relay] +2018-01-19 18:51:10 relay +2018-01-19 18:51:10 [alias] +2018-01-19 18:51:10 AAWAY AME ANICK BYE CHAT CLOSE IG K LEAVE MSGBUF N REDRAW SIGNOFF UB V WC WII +2018-01-19 18:51:10 alias AMSG BEEP C CL EXIT J KB M MUB Q SAY T UMODE W WI WW +2018-01-19 18:51:10 [charset] +2018-01-19 18:51:10 charset +2018-01-19 18:51:10 [xfer] +2018-01-19 18:51:10 me xfer +2018-01-19 18:51:10 [trigger] +2018-01-19 18:51:10 trigger +2018-01-19 18:51:10 [ruby] +2018-01-19 18:51:10 ruby +2018-01-19 18:51:10 [lua] +2018-01-19 18:51:10 lua +2018-01-19 18:51:10 [fifo] +2018-01-19 18:51:10 fifo +2018-01-19 18:51:10 [irc] +2018-01-19 18:51:10 admin connect devoice invite links motd op quiet sajoin service time users whois +2018-01-19 18:51:10 allchan ctcp die ison list msg oper quote samode servlist topic version whowas +2018-01-19 18:51:10 allpv cycle disconnect join lusers names part reconnect sanick squery trace voice +2018-01-19 18:51:10 allserv dcc halfop kick map nick ping rehash sapart squit unban wallchops +2018-01-19 18:51:10 ban dehalfop ignore kickban me notice pong remove saquit stats unquiet wallops +2018-01-19 18:51:10 cap deop info kill mode notify query restart server summon userhost who +2018-01-19 18:51:10 [exec] +2018-01-19 18:51:10 exec +2018-01-19 18:51:10 [script] +2018-01-19 18:51:10 script +2018-01-19 18:51:10 [logger] +2018-01-19 18:51:10 logger +2018-01-19 18:51:10 [perl] +2018-01-19 18:51:10 perl +2018-01-19 18:51:38 [core] +2018-01-19 18:51:38 away - set or remove away status +2018-01-19 18:51:38 bar - manage bars +2018-01-19 18:51:38 buffer - manage buffers +2018-01-19 18:51:38 color - define color aliases and display palette of colors +2018-01-19 18:51:38 command - launch explicit WeeChat or plugin command +2018-01-19 18:51:38 cursor - free movement of cursor on screen to execute actions on specific areas of screen +2018-01-19 18:51:38 debug - control debug for core/plugins +2018-01-19 18:51:38 eval - evaluate expression +2018-01-19 18:51:38 filter - filter messages in buffers, to hide/show them according to tags or regex +2018-01-19 18:51:38 help - display help about commands and options +2018-01-19 18:51:38 history - show buffer command history +2018-01-19 18:51:38 input - functions for command line +2018-01-19 18:51:38 key - bind/unbind keys +2018-01-19 18:51:38 layout - manage buffers/windows layouts +2018-01-19 18:51:38 mouse - mouse control +2018-01-19 18:51:38 mute - execute a command silently +2018-01-19 18:51:38 plugin - list/load/unload plugins +2018-01-19 18:51:38 print - display text on a buffer +2018-01-19 18:51:38 proxy - manage proxies +2018-01-19 18:51:38 quit - quit WeeChat +2018-01-19 18:51:38 reload - reload configuration files from disk +2018-01-19 18:51:38 repeat - execute a command several times +2018-01-19 18:51:38 save - save configuration files to disk +2018-01-19 18:51:38 secure - manage secured data (passwords or private data encrypted in file sec.conf) +2018-01-19 18:51:38 set - set config options and environment variables +2018-01-19 18:51:38 unset - unset/reset config options +2018-01-19 18:51:38 upgrade - upgrade WeeChat without disconnecting from servers +2018-01-19 18:51:38 uptime - show WeeChat uptime +2018-01-19 18:51:38 version - show WeeChat version and compilation date +2018-01-19 18:51:38 wait - schedule a command execution in future +2018-01-19 18:51:38 window - manage windows +2018-01-19 18:51:38 [python] +2018-01-19 18:51:38 python - list/load/unload scripts +2018-01-19 18:51:38 [aspell] +2018-01-19 18:51:38 aspell - aspell plugin configuration +2018-01-19 18:51:38 [relay] +2018-01-19 18:51:38 relay - relay control +2018-01-19 18:51:38 [alias] +2018-01-19 18:51:38 AAWAY - allserv /away +2018-01-19 18:51:38 alias - list, add or remove command aliases +2018-01-19 18:51:38 AME - allchan /me +2018-01-19 18:51:38 AMSG - allchan /msg * +2018-01-19 18:51:38 ANICK - allserv /nick +2018-01-19 18:51:38 BEEP - print -beep +2018-01-19 18:51:38 BYE - quit +2018-01-19 18:51:38 C - buffer clear +2018-01-19 18:51:38 CHAT - dcc chat +2018-01-19 18:51:38 CL - buffer clear +2018-01-19 18:51:38 CLOSE - buffer close +2018-01-19 18:51:38 EXIT - quit +2018-01-19 18:51:38 IG - ignore +2018-01-19 18:51:38 J - join +2018-01-19 18:51:38 K - kick +2018-01-19 18:51:38 KB - kickban +2018-01-19 18:51:38 LEAVE - part +2018-01-19 18:51:38 M - msg +2018-01-19 18:51:38 MSGBUF - command -buffer $1 * /input send $2- +2018-01-19 18:51:38 MUB - unban * +2018-01-19 18:51:38 N - names +2018-01-19 18:51:38 Q - query +2018-01-19 18:51:38 REDRAW - window refresh +2018-01-19 18:51:38 SAY - msg * +2018-01-19 18:51:38 SIGNOFF - quit +2018-01-19 18:51:38 T - topic +2018-01-19 18:51:38 UB - unban +2018-01-19 18:51:38 UMODE - mode $nick +2018-01-19 18:51:38 V - command core version +2018-01-19 18:51:38 W - who +2018-01-19 18:51:38 WC - window merge +2018-01-19 18:51:38 WI - whois +2018-01-19 18:51:38 WII - whois $1 $1 +2018-01-19 18:51:38 WW - whowas +2018-01-19 18:51:38 [charset] +2018-01-19 18:51:38 charset - change charset for current buffer +2018-01-19 18:51:38 [xfer] +2018-01-19 18:51:38 me - send a CTCP action to remote host +2018-01-19 18:51:38 xfer - xfer control +2018-01-19 18:51:38 [trigger] +2018-01-19 18:51:38 trigger - manage triggers, the Swiss Army knife for WeeChat +2018-01-19 18:51:38 [ruby] +2018-01-19 18:51:38 ruby - list/load/unload scripts +2018-01-19 18:51:38 [lua] +2018-01-19 18:51:38 lua - list/load/unload scripts +2018-01-19 18:51:38 [fifo] +2018-01-19 18:51:38 fifo - fifo plugin configuration +2018-01-19 18:51:38 [irc] +2018-01-19 18:51:38 admin - find information about the administrator of the server +2018-01-19 18:51:38 allchan - execute a command on all channels of all connected servers +2018-01-19 18:51:38 allpv - execute a command on all private buffers of all connected servers +2018-01-19 18:51:38 allserv - execute a command on all connected servers +2018-01-19 18:51:38 ban - ban nicks or hosts +2018-01-19 18:51:38 cap - client capability negotiation +2018-01-19 18:51:38 connect - connect to IRC server(s) +2018-01-19 18:51:38 ctcp - send a CTCP message (Client-To-Client Protocol) +2018-01-19 18:51:38 cycle - leave and rejoin a channel +2018-01-19 18:51:38 dcc - start a DCC (file transfer or direct chat) +2018-01-19 18:51:38 dehalfop - remove channel half-operator status from nick(s) +2018-01-19 18:51:38 deop - remove channel operator status from nick(s) +2018-01-19 18:51:38 devoice - remove voice from nick(s) +2018-01-19 18:51:38 die - shutdown the server +2018-01-19 18:51:38 disconnect - disconnect from one or all IRC servers +2018-01-19 18:51:38 halfop - give channel half-operator status to nick(s) +2018-01-19 18:51:38 ignore - ignore nicks/hosts from servers or channels +2018-01-19 18:51:38 info - get information describing the server +2018-01-19 18:51:38 invite - invite a nick on a channel +2018-01-19 18:51:38 ison - check if a nick is currently on IRC +2018-01-19 18:51:38 join - join a channel +2018-01-19 18:51:38 kick - kick a user out of a channel +2018-01-19 18:51:38 kickban - kick a user out of a channel and ban the host +2018-01-19 18:51:38 kill - close client-server connection +2018-01-19 18:51:38 links - list all servernames which are known by the server answering the query +2018-01-19 18:51:38 list - list channels and their topic +2018-01-19 18:51:38 lusers - get statistics about the size of the IRC network +2018-01-19 18:51:38 map - show a graphical map of the IRC network +2018-01-19 18:51:38 me - send a CTCP action to the current channel +2018-01-19 18:51:38 mode - change channel or user mode +2018-01-19 18:51:38 motd - get the "Message Of The Day" +2018-01-19 18:51:38 msg - send message to a nick or channel +2018-01-19 18:51:38 names - list nicks on channels +2018-01-19 18:51:38 nick - change current nick +2018-01-19 18:51:38 notice - send notice message to user +2018-01-19 18:51:38 notify - add a notification for presence or away status of nicks on servers +2018-01-19 18:51:38 op - give channel operator status to nick(s) +2018-01-19 18:51:38 oper - get operator privileges +2018-01-19 18:51:38 part - leave a channel +2018-01-19 18:51:38 ping - send a ping to server +2018-01-19 18:51:38 pong - answer to a ping message +2018-01-19 18:51:38 query - send a private message to a nick +2018-01-19 18:51:38 quiet - quiet nicks or hosts +2018-01-19 18:51:38 quote - send raw data to server without parsing +2018-01-19 18:51:38 reconnect - reconnect to server(s) +2018-01-19 18:51:38 rehash - tell the server to reload its config file +2018-01-19 18:51:38 remove - force a user to leave a channel +2018-01-19 18:51:38 restart - tell the server to restart itself +2018-01-19 18:51:38 sajoin - force a user to join channel(s) +2018-01-19 18:51:38 samode - change mode on channel, without having operator status +2018-01-19 18:51:38 sanick - force a user to use another nick +2018-01-19 18:51:38 sapart - force a user to leave channel(s) +2018-01-19 18:51:38 saquit - force a user to quit server with a reason +2018-01-19 18:51:38 server - list, add or remove IRC servers +2018-01-19 18:51:38 service - register a new service +2018-01-19 18:51:38 servlist - list services currently connected to the network +2018-01-19 18:51:38 squery - deliver a message to a service +2018-01-19 18:51:38 squit - disconnect server links +2018-01-19 18:51:38 stats - query statistics about server +2018-01-19 18:51:38 summon - give users who are on a host running an IRC server a message asking them to please join IRC +2018-01-19 18:51:38 time - query local time from server +2018-01-19 18:51:38 topic - get/set channel topic +2018-01-19 18:51:38 trace - find the route to specific server +2018-01-19 18:51:38 unban - unban nicks or hosts +2018-01-19 18:51:38 unquiet - unquiet nicks or hosts +2018-01-19 18:51:38 userhost - return a list of information about nicks +2018-01-19 18:51:38 users - list of users logged into the server +2018-01-19 18:51:38 version - give the version info of nick or server (current or specified) +2018-01-19 18:51:38 voice - give voice to nick(s) +2018-01-19 18:51:38 wallchops - send a notice to channel ops +2018-01-19 18:51:38 wallops - send a message to all currently connected users who have set the 'w' user mode for themselves +2018-01-19 18:51:38 who - generate a query which returns a list of information +2018-01-19 18:51:38 whois - query information about user(s) +2018-01-19 18:51:38 whowas - ask for information about a nick which no longer exists +2018-01-19 18:51:38 [exec] +2018-01-19 18:51:38 exec - execute external commands +2018-01-19 18:51:38 [script] +2018-01-19 18:51:38 script - WeeChat scripts manager +2018-01-19 18:51:38 [logger] +2018-01-19 18:51:38 logger - logger plugin configuration +2018-01-19 18:51:38 [perl] +2018-01-19 18:51:38 perl - list/load/unload scripts +2018-01-19 18:56:04 [completion] (weechat.conf) +2018-01-19 18:56:04 weechat.completion.base_word_until_cursor = on +2018-01-19 18:56:04 weechat.completion.command_inline = on +2018-01-19 18:56:04 weechat.completion.default_template = "%(nicks)|%(irc_channels)" +2018-01-19 18:56:04 weechat.completion.nick_add_space = on +2018-01-19 18:56:04 weechat.completion.nick_completer = ":" +2018-01-19 18:56:04 weechat.completion.nick_first_only = off +2018-01-19 18:56:04 weechat.completion.nick_ignore_chars = "[]`_-^" +2018-01-19 18:56:04 weechat.completion.partial_completion_alert = on +2018-01-19 18:56:04 weechat.completion.partial_completion_command = off +2018-01-19 18:56:04 weechat.completion.partial_completion_command_arg = off +2018-01-19 18:56:04 weechat.completion.partial_completion_count = on +2018-01-19 18:56:04 weechat.completion.partial_completion_other = off +2018-01-19 18:56:04 12 options (matching with "weechat.completion.*") +2018-01-19 18:56:43 Option changed: weechat.completion.partial_completion_command = on (default: off) +2018-01-19 18:56:53 Option changed: weechat.completion.partial_completion_command_arg = on (default: off) +2018-01-19 18:57:05 Option changed: weechat.completion.partial_completion_other = on (default: off) +2018-01-19 19:03:12 script: downloading list of scripts... +2018-01-19 19:03:14 script: 351 scripts for WeeChat 1.5 +2018-01-19 19:06:47 Option "script.look.sort": +2018-01-19 19:06:47 description: default sort keys for scripts: comma-separated list of identifiers: a=author, A=autoloaded, d=date added, e=extension, i=installed, l=language, n=name, o=obsolete, p=popularity, r=running, u=date updated; char "-" can be used before identifier to reverse order; example: "i,u": installed scripts first, sorted by update date +2018-01-19 19:06:47 type: string +2018-01-19 19:06:47 values: any string +2018-01-19 19:06:47 default value: "p,n" +2018-01-19 19:06:47 current value: "p,n" +2018-01-19 19:08:04 [script] /script list [-o|-i] +2018-01-19 19:08:04 search <text> +2018-01-19 19:08:04 show <script> +2018-01-19 19:08:04 load|unload|reload <script> [<script>...] +2018-01-19 19:08:04 autoload|noautoload|toggleautoload <script> [<script>...] +2018-01-19 19:08:04 install|remove|installremove|hold [-q] <script> [<script>...] +2018-01-19 19:08:04 upgrade +2018-01-19 19:08:04 update +2018-01-19 19:08:04 WeeChat scripts manager +2018-01-19 19:08:04 list: list loaded scripts (all languages) +2018-01-19 19:08:04 -o: send list of loaded scripts to buffer +2018-01-19 19:08:04 -i: copy list of loaded scripts in command line (for sending to buffer) +2018-01-19 19:08:04 search: search scripts by tags, language (python, perl, ...), filename extension (py, pl, ...) or text; result is displayed on scripts buffer +2018-01-19 19:08:04 show: show detailed info about a script +2018-01-19 19:08:04 load: load script(s) +2018-01-19 19:08:04 unload: unload script(s) +2018-01-19 19:08:04 reload: reload script(s) +2018-01-19 19:08:04 autoload: autoload the script +2018-01-19 19:08:04 noautoload: do not autoload the script +2018-01-19 19:08:04 toggleautoload: toggle autoload +2018-01-19 19:08:04 install: install/upgrade script(s) +2018-01-19 19:08:04 remove: remove script(s) +2018-01-19 19:08:04 installremove: install or remove script(s), depending on current state +2018-01-19 19:08:04 hold: hold/unhold script(s) (a script held will not be upgraded any more and cannot be removed) +2018-01-19 19:08:04 -q: quiet mode: do not display messages +2018-01-19 19:08:04 upgrade: upgrade all installed scripts which are obsolete (new version available) +2018-01-19 19:08:04 update: update local scripts cache +2018-01-19 19:08:04 Without argument, this command opens a buffer with list of scripts. +2018-01-19 19:08:04 On script buffer, the possible status for each script are: +2018-01-19 19:08:04 * i a H r N +2018-01-19 19:08:04 | | | | | | +2018-01-19 19:08:04 | | | | | obsolete (new version available) +2018-01-19 19:08:04 | | | | running (loaded) +2018-01-19 19:08:04 | | | held +2018-01-19 19:08:04 | | autoloaded +2018-01-19 19:08:04 | installed +2018-01-19 19:08:04 popular script +2018-01-19 19:08:04 Keys on script buffer: +2018-01-19 19:08:04 alt+i install script +2018-01-19 19:08:04 alt+r remove script +2018-01-19 19:08:04 alt+l load script +2018-01-19 19:08:04 alt+L reload script +2018-01-19 19:08:04 alt+u unload script +2018-01-19 19:08:04 alt+A autoload script +2018-01-19 19:08:04 alt+h (un)hold script +2018-01-19 19:08:04 alt+v view script +2018-01-19 19:08:04 Input allowed on script buffer: +2018-01-19 19:08:04 i/r/l/L/u/h action on script (same as keys above) +2018-01-19 19:08:04 q close buffer +2018-01-19 19:08:04 $ refresh buffer +2018-01-19 19:08:04 s:x,y sort buffer using keys x and y (see /help script.look.sort) +2018-01-19 19:08:04 s: reset sort (use default sort) +2018-01-19 19:08:04 word(s) filter scripts: search word(s) in scripts (description, tags, ...) +2018-01-19 19:08:04 * remove filter +2018-01-19 19:08:04 Mouse actions on script buffer: +2018-01-19 19:08:04 wheel scroll list +2018-01-19 19:08:04 left button select script +2018-01-19 19:08:04 right button install/remove script +2018-01-19 19:08:04 Examples: +2018-01-19 19:08:04 /script search url +2018-01-19 19:08:04 /script install iset.pl buffers.pl +2018-01-19 19:08:04 /script remove iset.pl +2018-01-19 19:08:04 /script hold urlserver.py +2018-01-19 19:08:04 /script reload urlserver +2018-01-19 19:08:04 /script upgrade +2018-01-19 19:08:14 =!= No help available, "script.look" is not a command or an option +2018-01-19 19:08:31 =!= No help available, "script.look" is not a command or an option +2018-01-19 19:14:36 New key binding (context "mouse"): @chat(perl.iset):button1 => hsignal:iset_mouse +2018-01-19 19:14:36 New key binding (context "mouse"): @chat(perl.iset):button2* => hsignal:iset_mouse +2018-01-19 19:14:36 New key binding (context "mouse"): @chat(perl.iset):wheeldown => /repeat 5 /iset **down +2018-01-19 19:14:36 New key binding (context "mouse"): @chat(perl.iset):wheelup => /repeat 5 /iset **up +2018-01-19 19:16:47 script: script "iset.pl" is already installed and up-to-date +2018-01-19 19:16:50 script: script "iset.pl" is already installed and up-to-date +2018-01-19 19:16:56 script: script "iset.pl" is already installed and up-to-date +2018-01-19 19:17:06 =!= perl: unable to register script "iset" (another script already exists with this name) +2018-01-19 19:17:06 =!= perl: unable to call function "info_get", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "config_new", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value $iset_config_file in string eq at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1409. +2018-01-19 19:17:06 perl warning: Use of uninitialized value $iset_config_file in string ne at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1532. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "config_string", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value in concatenation (.) or string at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1570. +2018-01-19 19:17:06 =!= perl: unable to call function "hook_command", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "hook_signal", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "hook_signal", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "hook_signal", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "bar_item_new", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "bar_new", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "hook_modifier", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "hook_config", script is not initialized (script: -) +2018-01-19 19:17:06 =!= perl: unable to call function "buffer_search", script is not initialized (script: -) +2018-01-19 19:17:06 perl warning: Use of uninitialized value $iset_buffer in string ne at /home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl line 1627. +2018-01-19 19:17:06 =!= perl: function "register" not found (or failed) in file "/home/opensuse/vgg/.weechat-tutorial/perl/autoload/iset.pl" +2018-01-19 19:45:35 [irc] /server list|listfull [<server>] +2018-01-19 19:45:35 add <server> <hostname>[/<port>] [-temp] [-<option>[=<value>]] [-no<option>] +2018-01-19 19:45:35 copy|rename <server> <new_name> +2018-01-19 19:45:35 reorder <server> [<server>...] +2018-01-19 19:45:35 del|keep <server> +2018-01-19 19:45:35 deloutq|jump|raw +2018-01-19 19:45:35 list, add or remove IRC servers +2018-01-19 19:45:35 list: list servers (without argument, this list is displayed) +2018-01-19 19:45:35 listfull: list servers with detailed info for each server +2018-01-19 19:45:35 add: add a new server +2018-01-19 19:45:35 server: server name, for internal and display use +2018-01-19 19:45:35 hostname: name or IP address of server, with optional port (default: 6667), many addresses can be separated by a comma +2018-01-19 19:45:35 temp: add a temporary server (not saved) +2018-01-19 19:45:35 option: set option for server (for boolean option, value can be omitted) +2018-01-19 19:45:35 nooption: set boolean option to 'off' (for example: -nossl) +2018-01-19 19:45:35 copy: duplicate a server +2018-01-19 19:45:35 rename: rename a server +2018-01-19 19:45:35 reorder: reorder list of servers +2018-01-19 19:45:35 keep: keep server in config file (for temporary servers only) +2018-01-19 19:45:35 del: delete a server +2018-01-19 19:45:35 deloutq: delete messages out queue for all servers (all messages WeeChat is currently sending) +2018-01-19 19:45:35 jump: jump to server buffer +2018-01-19 19:45:35 raw: open buffer with raw IRC data +2018-01-19 19:45:35 Examples: +2018-01-19 19:45:35 /server listfull +2018-01-19 19:45:35 /server add freenode chat.freenode.net +2018-01-19 19:45:35 /server add freenode chat.freenode.net/6697 -ssl -autoconnect +2018-01-19 19:45:35 /server add chatspike irc.chatspike.net/6667,irc.duckspike.net/6667 +2018-01-19 19:45:35 /server copy freenode freenode-test +2018-01-19 19:45:35 /server rename freenode-test freenode2 +2018-01-19 19:45:35 /server reorder freenode2 freenode +2018-01-19 19:45:35 /server del freenode +2018-01-19 19:45:35 /server deloutq +2018-01-19 19:53:02 perl: scripts unloaded +2018-01-19 19:53:04 perl scripts loaded: iset +2018-01-19 19:53:04 script: 351 scripts for WeeChat 1.5 +2018-01-19 19:53:04 Plugins loaded: alias, aspell, charset, exec, fifo, irc, logger, lua, perl, python, relay, ruby, script, trigger, xfer +2018-01-19 19:53:14 [irc] /server list|listfull [<server>] +2018-01-19 19:53:14 add <server> <hostname>[/<port>] [-temp] [-<option>[=<value>]] [-no<option>] +2018-01-19 19:53:14 copy|rename <server> <new_name> +2018-01-19 19:53:14 reorder <server> [<server>...] +2018-01-19 19:53:14 del|keep <server> +2018-01-19 19:53:14 deloutq|jump|raw +2018-01-19 19:53:14 list, add or remove IRC servers +2018-01-19 19:53:14 list: list servers (without argument, this list is displayed) +2018-01-19 19:53:14 listfull: list servers with detailed info for each server +2018-01-19 19:53:14 add: add a new server +2018-01-19 19:53:14 server: server name, for internal and display use +2018-01-19 19:53:14 hostname: name or IP address of server, with optional port (default: 6667), many addresses can be separated by a comma +2018-01-19 19:53:14 temp: add a temporary server (not saved) +2018-01-19 19:53:14 option: set option for server (for boolean option, value can be omitted) +2018-01-19 19:53:14 nooption: set boolean option to 'off' (for example: -nossl) +2018-01-19 19:53:14 copy: duplicate a server +2018-01-19 19:53:14 rename: rename a server +2018-01-19 19:53:14 reorder: reorder list of servers +2018-01-19 19:53:14 keep: keep server in config file (for temporary servers only) +2018-01-19 19:53:14 del: delete a server +2018-01-19 19:53:14 deloutq: delete messages out queue for all servers (all messages WeeChat is currently sending) +2018-01-19 19:53:14 jump: jump to server buffer +2018-01-19 19:53:14 raw: open buffer with raw IRC data +2018-01-19 19:53:14 Examples: +2018-01-19 19:53:14 /server listfull +2018-01-19 19:53:14 /server add freenode chat.freenode.net +2018-01-19 19:53:14 /server add freenode chat.freenode.net/6697 -ssl -autoconnect +2018-01-19 19:53:14 /server add chatspike irc.chatspike.net/6667,irc.duckspike.net/6667 +2018-01-19 19:53:14 /server copy freenode freenode-test +2018-01-19 19:53:14 /server rename freenode-test freenode2 +2018-01-19 19:53:14 /server reorder freenode2 freenode +2018-01-19 19:53:14 /server del freenode +2018-01-19 19:53:14 /server deloutq +2018-01-19 19:53:25 =!= Option "*freenode*" not found (tip: you can use wildcard "*" in option to see a sublist) +2018-01-19 19:54:26 No server +2018-01-19 19:54:42 No server +2018-01-19 19:55:21 Plugins loaded: +2018-01-19 19:55:21 python: Support of python scripts +2018-01-19 19:55:21 aspell: Spell checker for input (with Aspell) +2018-01-19 19:55:21 relay: Relay WeeChat data to remote application (irc/weechat protocols) +2018-01-19 19:55:21 alias: Alias commands +2018-01-19 19:55:21 charset: Charset conversions +2018-01-19 19:55:21 xfer: DCC file transfer and direct chat +2018-01-19 19:55:21 trigger: Text replacement and command execution on events triggered by WeeChat/plugins +2018-01-19 19:55:21 ruby: Support of ruby scripts +2018-01-19 19:55:21 lua: Support of lua scripts +2018-01-19 19:55:21 fifo: FIFO pipe for remote control +2018-01-19 19:55:21 irc: IRC (Internet Relay Chat) protocol +2018-01-19 19:55:21 exec: Execution of external commands in WeeChat +2018-01-19 19:55:21 script: Scripts manager +2018-01-19 19:55:21 logger: Log buffers to files +2018-01-19 19:55:21 perl: Support of perl scripts +2018-01-19 19:55:44 =!= Too few arguments for command "/server add" (help on command: /help server) +2018-01-19 19:55:57 [irc] /server list|listfull [<server>] +2018-01-19 19:55:57 add <server> <hostname>[/<port>] [-temp] [-<option>[=<value>]] [-no<option>] +2018-01-19 19:55:57 copy|rename <server> <new_name> +2018-01-19 19:55:57 reorder <server> [<server>...] +2018-01-19 19:55:57 del|keep <server> +2018-01-19 19:55:57 deloutq|jump|raw +2018-01-19 19:55:57 list, add or remove IRC servers +2018-01-19 19:55:57 list: list servers (without argument, this list is displayed) +2018-01-19 19:55:57 listfull: list servers with detailed info for each server +2018-01-19 19:55:57 add: add a new server +2018-01-19 19:55:57 server: server name, for internal and display use +2018-01-19 19:55:57 hostname: name or IP address of server, with optional port (default: 6667), many addresses can be separated by a comma +2018-01-19 19:55:57 temp: add a temporary server (not saved) +2018-01-19 19:55:57 option: set option for server (for boolean option, value can be omitted) +2018-01-19 19:55:57 nooption: set boolean option to 'off' (for example: -nossl) +2018-01-19 19:55:57 copy: duplicate a server +2018-01-19 19:55:57 rename: rename a server +2018-01-19 19:55:57 reorder: reorder list of servers +2018-01-19 19:55:57 keep: keep server in config file (for temporary servers only) +2018-01-19 19:55:57 del: delete a server +2018-01-19 19:55:57 deloutq: delete messages out queue for all servers (all messages WeeChat is currently sending) +2018-01-19 19:55:57 jump: jump to server buffer +2018-01-19 19:55:57 raw: open buffer with raw IRC data +2018-01-19 19:55:57 Examples: +2018-01-19 19:55:57 /server listfull +2018-01-19 19:55:57 /server add freenode chat.freenode.net +2018-01-19 19:55:57 /server add freenode chat.freenode.net/6697 -ssl -autoconnect +2018-01-19 19:55:57 /server add chatspike irc.chatspike.net/6667,irc.duckspike.net/6667 +2018-01-19 19:55:57 /server copy freenode freenode-test +2018-01-19 19:55:57 /server rename freenode-test freenode2 +2018-01-19 19:55:57 /server reorder freenode2 freenode +2018-01-19 19:55:57 /server del freenode +2018-01-19 19:55:57 /server deloutq +2018-01-19 19:56:37 No server found with "freenode" +2018-01-19 19:56:52 irc: server freenode added +2018-01-19 19:57:04 Servers with "freenode": +2018-01-19 19:57:04 freenode +2018-01-19 19:57:54 [server] (irc.conf) +2018-01-19 19:57:54 irc.server.freenode.addresses = "chat.freenode.net" (default if null: "") +2018-01-19 19:57:54 irc.server.freenode.anti_flood_prio_high = null -> 2 +2018-01-19 19:57:54 irc.server.freenode.anti_flood_prio_low = null -> 2 +2018-01-19 19:57:54 irc.server.freenode.autoconnect = null -> off +2018-01-19 19:57:54 irc.server.freenode.autojoin = null -> "" +2018-01-19 19:57:54 irc.server.freenode.autoreconnect = null -> on +2018-01-19 19:57:54 irc.server.freenode.autoreconnect_delay = null -> 10 +2018-01-19 19:57:54 irc.server.freenode.autorejoin = null -> off +2018-01-19 19:57:54 irc.server.freenode.autorejoin_delay = null -> 30 +2018-01-19 19:57:54 irc.server.freenode.away_check = null -> 0 +2018-01-19 19:57:54 irc.server.freenode.away_check_max_nicks = null -> 25 +2018-01-19 19:57:54 irc.server.freenode.capabilities = null -> "" +2018-01-19 19:57:54 irc.server.freenode.command = null -> "" +2018-01-19 19:57:54 irc.server.freenode.command_delay = null -> 0 +2018-01-19 19:57:54 irc.server.freenode.connection_timeout = null -> 60 +2018-01-19 19:57:54 irc.server.freenode.default_msg_kick = null -> "" +2018-01-19 19:57:54 irc.server.freenode.default_msg_part = null -> "WeeChat %v" +2018-01-19 19:57:54 irc.server.freenode.default_msg_quit = null -> "WeeChat %v" +2018-01-19 19:57:54 irc.server.freenode.ipv6 = null -> on +2018-01-19 19:57:54 irc.server.freenode.local_hostname = null -> "" +2018-01-19 19:57:54 irc.server.freenode.nicks = null -> "vgg,vgg1,vgg2,vgg3,vgg4" +2018-01-19 19:57:54 irc.server.freenode.nicks_alternate = null -> on +2018-01-19 19:57:54 irc.server.freenode.notify = null -> "" +2018-01-19 19:57:54 irc.server.freenode.password = null -> "" +2018-01-19 19:57:54 irc.server.freenode.proxy = null -> "" +2018-01-19 19:57:54 irc.server.freenode.realname = null -> "" +2018-01-19 19:57:54 irc.server.freenode.sasl_fail = null -> continue +2018-01-19 19:57:54 irc.server.freenode.sasl_key = null -> "" +2018-01-19 19:57:54 irc.server.freenode.sasl_mechanism = null -> plain +2018-01-19 19:57:54 irc.server.freenode.sasl_password = null -> "" +2018-01-19 19:57:54 irc.server.freenode.sasl_timeout = null -> 15 +2018-01-19 19:57:54 irc.server.freenode.sasl_username = null -> "" +2018-01-19 19:57:54 irc.server.freenode.ssl = null -> off +2018-01-19 19:57:54 irc.server.freenode.ssl_cert = null -> "" +2018-01-19 19:57:54 irc.server.freenode.ssl_dhkey_size = null -> 2048 +2018-01-19 19:57:54 irc.server.freenode.ssl_fingerprint = null -> "" +2018-01-19 19:57:54 irc.server.freenode.ssl_priorities = null -> "NORMAL:-VERS-SSL3.0" +2018-01-19 19:57:54 irc.server.freenode.ssl_verify = null -> on +2018-01-19 19:57:54 irc.server.freenode.username = null -> "vgg" +2018-01-19 19:57:54 39 options (matching with "*freenode*") +2018-01-19 20:18:03 =!= No help available, "keybndings" is not a command or an option +2018-01-19 20:18:09 =!= No help available, "keys" is not a command or an option +2018-01-19 20:18:20 [core] /key list|listdefault|listdiff [<context>] +2018-01-19 20:18:20 bind <key> [<command> [<args>]] +2018-01-19 20:18:20 bindctxt <context> <key> [<command> [<args>]] +2018-01-19 20:18:20 unbind <key> +2018-01-19 20:18:20 unbindctxt <context> <key> +2018-01-19 20:18:20 reset <key> +2018-01-19 20:18:20 resetctxt <context> <key> +2018-01-19 20:18:20 resetall -yes [<context>] +2018-01-19 20:18:20 missing [<context>] +2018-01-19 20:18:20 bind/unbind keys +2018-01-19 20:18:20 list: list all current keys (without argument, this list is displayed) +2018-01-19 20:18:20 listdefault: list default keys +2018-01-19 20:18:20 listdiff: list differences between current and default keys (keys added, redefined or deleted) +2018-01-19 20:18:20 context: name of context ("default" or "search") +2018-01-19 20:18:20 bind: bind a command to a key or display command bound to key (for context "default") +2018-01-19 20:18:20 bindctxt: bind a command to a key or display command bound to key, for given context +2018-01-19 20:18:20 command: command (many commands can be separated by semicolons) +2018-01-19 20:18:20 unbind: remove a key binding (for context "default") +2018-01-19 20:18:20 unbindctxt: remove a key binding for given context +2018-01-19 20:18:20 reset: reset a key to default binding (for context "default") +2018-01-19 20:18:20 resetctxt: reset a key to default binding, for given context +2018-01-19 20:18:20 resetall: restore bindings to the default values and delete ALL personal bindings (use carefully!) +2018-01-19 20:18:20 missing: add missing keys (using default bindings), useful after installing new WeeChat version +2018-01-19 20:18:20 When binding a command to a key, it is recommended to use key alt+k (or Esc then k), and then press the key to bind: this will insert key code in command line. +2018-01-19 20:18:20 For context "mouse" (possible in context "cursor" too), key has format: "@area:key" or "@area1>area2:key" where area can be: +2018-01-19 20:18:20 *: any area on screen +2018-01-19 20:18:20 chat: chat area (any buffer) +2018-01-19 20:18:20 chat(xxx): char area for buffer with name "xxx" (full name including plugin) +2018-01-19 20:18:20 bar(*): any bar +2018-01-19 20:18:20 bar(xxx): bar "xxx" +2018-01-19 20:18:20 item(*): any bar item +2018-01-19 20:18:20 item(xxx): bar item "xxx" +2018-01-19 20:18:20 Wildcard "*" is allowed in key to match many mouse events. +2018-01-19 20:18:20 A special value for command with format "hsignal:name" can be used for context mouse, this will send the hsignal "name" with the focus hashtable as argument. +2018-01-19 20:18:20 Another special value "-" can be used to disable key (it will be ignored when looking for keys). +2018-01-19 20:18:20 Examples: +2018-01-19 20:18:20 key alt-t to toggle nicklist bar: +2018-01-19 20:18:20 /key bind meta-t /bar toggle nicklist +2018-01-19 20:18:20 key alt-r to jump to #weechat IRC channel: +2018-01-19 20:18:20 /key bind meta-r /buffer #weechat +2018-01-19 20:18:20 restore default binding for key alt-r: +2018-01-19 20:18:20 /key reset meta-r +2018-01-19 20:18:20 key "tab" to stop search in buffer: +2018-01-19 20:18:20 /key bindctxt search ctrl-I /input search_stop +2018-01-19 20:18:20 middle button of mouse on a nick to retrieve info on nick: +2018-01-19 20:18:20 /key bindctxt mouse @item(buffer_nicklist):button3 /msg nickserv info ${nick} +2018-01-19 20:26:40 perl: scripts unloaded diff --git a/.weechat-tutorial/perl/autoload/iset.pl b/.weechat-tutorial/perl/autoload/iset.pl new file mode 120000 index 0000000..2746e0d --- /dev/null +++ b/.weechat-tutorial/perl/autoload/iset.pl @@ -0,0 +1 @@ +../iset.pl
\ No newline at end of file diff --git a/.weechat-tutorial/perl/iset.pl b/.weechat-tutorial/perl/iset.pl new file mode 100755 index 0000000..d6c9364 --- /dev/null +++ b/.weechat-tutorial/perl/iset.pl @@ -0,0 +1,1634 @@ +# +# Copyright (C) 2008-2017 Sebastien Helleu <flashcode@flashtux.org> +# Copyright (C) 2010-2017 Nils Görs <weechatter@arcor.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Set WeeChat and plugins options interactively. +# +# History: +# +# 2017-04-14, nils_2 <freenode.#weechat> +# version 4.3: add option "use_color" (https://github.com/weechat/scripts/issues/93) +# 2016-07-08, nils_2 <weechatter@arcor.de> +# version 4.2: add diff function +# 2016-02-06, Sebastien Helleu <flashcode@flashtux.org>: +# version 4.1: remove debug print +# 2015-12-24, Sebastien Helleu <flashcode@flashtux.org>: +# version 4.0: add support of parent options (inherited values in irc servers) +# with WeeChat >= 1.4 +# 2015-05-16, Sebastien Helleu <flashcode@flashtux.org>: +# version 3.9: fix cursor position when editing an option with WeeChat >= 1.2 +# 2015-05-02, arza <arza@arza.us>: +# version 3.8: don't append "null" to /set when setting an undefined setting +# 2015-05-01, nils_2 <weechatter@arcor.de>: +# version 3.7: fix two perl warnings (reported by t3chguy) +# 2014-09-30, arza <arza@arza.us>: +# version 3.6: fix current line counter when options aren't found +# 2014-06-03, nils_2 <weechatter@arcor.de>: +# version 3.5: add new option "use_mute" +# 2014-01-30, stfn <stfnmd@gmail.com>: +# version 3.4: add new options "color_value_diff" and "color_value_diff_selected" +# 2014-01-16, luz <ne.tetewi@gmail.com>: +# version 3.3: fix bug with column alignment in iset buffer when option +# name contains unicode characters +# 2013-08-03, Sebastien Helleu <flashcode@flashtux.org>: +# version 3.2: allow "q" as input in iset buffer to close it +# 2013-07-14, Sebastien Helleu <flashcode@flashtux.org>: +# version 3.1: remove unneeded calls to iset_refresh() in mouse callback +# (faster mouse actions when lot of options are displayed), +# fix bug when clicking on a line after the last option displayed +# 2013-04-30, arza <arza@arza.us>: +# version 3.0: simpler title, fix refresh on unset +# 2012-12-16, nils_2 <weechatter@arcor.de>: +# version 2.9: fix focus window with iset buffer on mouse click +# 2012-08-25, nils_2 <weechatter@arcor.de>: +# version 2.8: most important key and mouse bindings for iset buffer added to title-bar (idea The-Compiler) +# 2012-07-31, nils_2 <weechatter@arcor.de>: +# version 2.7: add combined option and value search (see /help iset) +# : add exact value search (see /help iset) +# : fix problem with metacharacter in value search +# : fix use of uninitialized value for unset option and reset value of option +# 2012-07-25, nils_2 <weechatter@arcor.de>: +# version 2.6: switch to iset buffer (if existing) when command /iset is called with arguments +# 2012-03-17, Sebastien Helleu <flashcode@flashtux.org>: +# version 2.5: fix check of sections when creating config file +# 2012-03-09, Sebastien Helleu <flashcode@flashtux.org>: +# version 2.4: fix reload of config file +# 2012-02-02, nils_2 <weechatter@arcor.de>: +# version 2.3: fixed: refresh problem with new search results and cursor was outside window. +# : add: new option "current_line" in title bar +# version 2.2: fixed: refresh error when toggling plugins description +# 2011-11-05, nils_2 <weechatter@arcor.de>: +# version 2.1: use own config file (iset.conf), fix own help color (used immediately) +# 2011-10-16, nils_2 <weechatter@arcor.de>: +# version 2.0: add support for left-mouse-button and more sensitive mouse gesture (for integer/color options) +# add help text for mouse support +# 2011-09-20, Sebastien Helleu <flashcode@flashtux.org>: +# version 1.9: add mouse support, fix iset buffer, fix errors on first load under FreeBSD +# 2011-07-21, nils_2 <weechatter@arcor.de>: +# version 1.8: added: option "show_plugin_description" (alt+p) +# fixed: typos in /help iset (lower case for alt+'x' keys) +# 2011-05-29, nils_2 <weechatter@arcor.de>: +# version 1.7: added: version check for future needs +# added: new option (scroll_horiz) and usage of scroll_horiz function (weechat >= 0.3.6 required) +# fixed: help_bar did not pop up immediately using key-shortcut +# 2011-02-19, nils_2 <weechatter@arcor.de>: +# version 1.6: added: display of all possible values in help bar (show_help_extra_info) +# fixed: external user options never loaded when starting iset first time +# 2011-02-13, Sebastien Helleu <flashcode@flashtux.org>: +# version 1.5: use new help format for command arguments +# 2011-02-03, nils_2 <weechatter@arcor.de>: +# version 1.4: fixed: restore value filter after /upgrade using buffer local variable. +# 2011-01-14, nils_2 <weechatter@arcor.de>: +# version 1.3: added function to search for values (option value_search_char). +# code optimization. +# 2010-12-26, Sebastien Helleu <flashcode@flashtux.org>: +# version 1.2: improve speed of /upgrade when iset buffer is open, +# restore filter used after /upgrade using buffer local variable, +# use /iset filter argument if buffer is open. +# 2010-11-21, drubin <drubin+weechat@smartcube.co.za>: +# version 1.1.1: fix bugs with cursor position +# 2010-11-20, nils_2 <weechatter@arcor.de>: +# version 1.1: cursor position set to value +# 2010-08-03, Sebastien Helleu <flashcode@flashtux.org>: +# version 1.0: move misplaced call to infolist_free() +# 2010-02-02, rettub <rettub@gmx.net>: +# version 0.9: turn all the help stuff off if option 'show_help_bar' is 'off', +# new key binding <alt>-<v> to toggle help_bar and help stuff on/off +# 2010-01-30, nils_2 <weechatter@arcor.de>: +# version 0.8: fix error when option does not exist +# 2010-01-24, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.7: display iset bar only on iset buffer +# 2010-01-22, nils_2 <weechatter@arcor.de> and drubin: +# version 0.6: add description in a bar, fix singular/plural bug in title bar, +# fix selected line when switching buffer +# 2009-06-21, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.5: fix bug with iset buffer after /upgrade +# 2009-05-02, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.4: sync with last API changes +# 2009-01-04, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.3: open iset buffer when /iset command is executed +# 2009-01-04, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.2: use null values for options, add colors, fix refresh bugs, +# use new keys to reset/unset options, sort options by name, +# display number of options in buffer's title +# 2008-11-05, Sebastien Helleu <flashcode@flashtux.org>: +# version 0.1: first official version +# 2008-04-19, Sebastien Helleu <flashcode@flashtux.org>: +# script creation + +use strict; + +my $PRGNAME = "iset"; +my $VERSION = "4.3"; +my $DESCR = "Interactive Set for configuration options"; +my $AUTHOR = "Sebastien Helleu <flashcode\@flashtux.org>"; +my $LICENSE = "GPL3"; +my $LANG = "perl"; +my $ISET_CONFIG_FILE_NAME = "iset"; + +my $iset_config_file; +my $iset_buffer = ""; +my $wee_version_number = 0; +my @iset_focus = (); +my @options_names = (); +my @options_parent_names = (); +my @options_types = (); +my @options_values = (); +my @options_default_values = (); +my @options_parent_values = (); +my @options_is_null = (); +my $option_max_length = 0; +my $current_line = 0; +my $filter = "*"; +my $description = ""; +my $options_name_copy = ""; +my $iset_filter_title = ""; +# search modes: 0 = index() on value, 1 = grep() on value, 2 = grep() on option, 3 = grep on option & value, 4 = diff all, 5 = diff parts +my $search_mode = 2; +my $search_value = ""; +my $help_text_keys = "alt + space: toggle, +/-: increase/decrease, enter: change, ir: reset, iu: unset, v: toggle help bar"; +my $help_text_mouse = "Mouse: left: select, right: toggle/set, right + drag left/right: increase/decrease"; +my %options_iset; + +my %mouse_keys = ("\@chat(perl.$PRGNAME):button1" => "hsignal:iset_mouse", + "\@chat(perl.$PRGNAME):button2*" => "hsignal:iset_mouse", + "\@chat(perl.$PRGNAME):wheelup" => "/repeat 5 /iset **up", + "\@chat(perl.$PRGNAME):wheeldown" => "/repeat 5 /iset **down"); + + +sub iset_title +{ + if ($iset_buffer ne "") + { + my $current_line_counter = ""; + if (weechat::config_boolean($options_iset{"show_current_line"}) == 1) + { + if (@options_names eq 0) + { + $current_line_counter = "0/"; + } + else + { + $current_line_counter = ($current_line + 1) . "/"; + } + } + my $show_filter = ""; + if ($search_mode eq 0) + { + $iset_filter_title = "(value) "; + $show_filter = $search_value; + if ( substr($show_filter,0,1) eq weechat::config_string($options_iset{"value_search_char"}) ) + { + $show_filter = substr($show_filter,1,length($show_filter)); + } + } + elsif ($search_mode eq 1) + { + $iset_filter_title = "(value) "; + $show_filter = "*".$search_value."*"; + } + elsif ($search_mode eq 2) + { + $iset_filter_title = ""; + $filter = "*" if ($filter eq ""); + $show_filter = $filter; + } + elsif ($search_mode == 4 or $search_mode == 5) + { + $iset_filter_title = "diff: "; + $show_filter = "all"; + $show_filter = $search_value if $search_mode == 5; + } + elsif ($search_mode eq 3) + { + $iset_filter_title = "(option) "; + $show_filter = $filter + .weechat::color("default") + ." / (value) " + .weechat::color("yellow") + ."*".$search_value."*"; + } + weechat::buffer_set($iset_buffer, "title", + $iset_filter_title + .weechat::color("yellow") + .$show_filter + .weechat::color("default")." | " + .$current_line_counter + .@options_names + ." | " + .$help_text_keys + ." | " + .$help_text_mouse); + } +} + +sub iset_create_filter +{ + $filter = $_[0]; + if ( $search_mode == 3 ) + { + my @cmd_array = split(/ /,$filter); + my $array_count = @cmd_array; + $filter = $cmd_array[0]; + $filter = $cmd_array[0] . " " . $cmd_array[1] if ( $array_count >2 ); + } + $filter = "$1.*" if ($filter =~ /f (.*)/); # search file + $filter = "*.$1.*" if ($filter =~ /s (.*)/); # search section + if ((substr($filter, 0, 1) ne "*") && (substr($filter, -1, 1) ne "*")) + { + $filter = "*".$filter."*"; + } + if ($iset_buffer ne "") + { + weechat::buffer_set($iset_buffer, "localvar_set_iset_filter", $filter); + } +} + +sub iset_buffer_input +{ + my ($data, $buffer, $string) = ($_[0], $_[1], $_[2]); + + # string begins with space? + return weechat::WEECHAT_RC_OK if (substr($string, 0, 1 ) eq " "); + + if ($string eq "q") + { + weechat::buffer_close($buffer); + return weechat::WEECHAT_RC_OK; + } + $search_value = ""; + my @cmd_array = split(/ /,$string); + my $array_count = @cmd_array; + my $string2 = substr($string, 0, 1); + if ($string2 eq weechat::config_string($options_iset{"value_search_char"}) + or (defined $cmd_array[0] and $cmd_array[0] eq weechat::config_string($options_iset{"value_search_char"}).weechat::config_string($options_iset{"value_search_char"})) ) + { + $search_mode = 1; + $search_value = substr($string, 1); + iset_get_values($search_value); + if ($iset_buffer ne "") + { + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $search_value); + } + } + # show all diff values + elsif ($string eq "d") + { + $search_mode = 4; +# iset_title(); + iset_create_filter("*"); + iset_get_options("*"); + } + elsif ( $array_count >= 2 and $cmd_array[0] eq "d") + { + $search_mode = 5; + $search_value = substr($cmd_array[1], 0); # cut value_search_char + $search_value = substr($cmd_array[2], 0) if ( $array_count > 2); # cut value_search_char + iset_create_filter($search_value); + iset_get_options($search_value); + + } + else + { + $search_mode = 2; + if ( $array_count >= 2 and $cmd_array[0] ne "f" or $cmd_array[0] ne "s" ) + { + if ( defined $cmd_array[1] and substr($cmd_array[1], 0, 1) eq weechat::config_string($options_iset{"value_search_char"}) + or defined $cmd_array[2] and substr($cmd_array[2], 0, 1) eq weechat::config_string($options_iset{"value_search_char"}) ) + { + $search_mode = 3; + $search_value = substr($cmd_array[1], 1); # cut value_search_char + $search_value = substr($cmd_array[2], 1) if ( $array_count > 2); # cut value_search_char + } + } + if ( $search_mode == 3) + { + iset_create_filter($string); + iset_get_options($search_value); + } + else + { + iset_create_filter($string); + iset_get_options(""); + } + } + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + weechat::buffer_clear($buffer); + $current_line = 0; + iset_refresh(); + return weechat::WEECHAT_RC_OK; +} + +sub iset_buffer_close +{ + $iset_buffer = ""; + + return weechat::WEECHAT_RC_OK; +} + +sub iset_init +{ + $current_line = 0; + $iset_buffer = weechat::buffer_search($LANG, $PRGNAME); + if ($iset_buffer eq "") + { + $iset_buffer = weechat::buffer_new($PRGNAME, "iset_buffer_input", "", "iset_buffer_close", ""); + } + else + { + my $new_filter = weechat::buffer_get_string($iset_buffer, "localvar_iset_filter"); + $search_mode = weechat::buffer_get_string($iset_buffer, "localvar_iset_search_mode"); + $search_value = weechat::buffer_get_string($iset_buffer, "localvar_iset_search_value"); + $filter = $new_filter if ($new_filter ne ""); + } + if ($iset_buffer ne "") + { + weechat::buffer_set($iset_buffer, "type", "free"); + iset_title(); + weechat::buffer_set($iset_buffer, "key_bind_ctrl-L", "/iset **refresh"); + weechat::buffer_set($iset_buffer, "key_bind_meta2-A", "/iset **up"); + weechat::buffer_set($iset_buffer, "key_bind_meta2-B", "/iset **down"); + weechat::buffer_set($iset_buffer, "key_bind_meta2-23~", "/iset **left"); + weechat::buffer_set($iset_buffer, "key_bind_meta2-24~" , "/iset **right"); + weechat::buffer_set($iset_buffer, "key_bind_meta- ", "/iset **toggle"); + weechat::buffer_set($iset_buffer, "key_bind_meta-+", "/iset **incr"); + weechat::buffer_set($iset_buffer, "key_bind_meta--", "/iset **decr"); + weechat::buffer_set($iset_buffer, "key_bind_meta-imeta-r", "/iset **reset"); + weechat::buffer_set($iset_buffer, "key_bind_meta-imeta-u", "/iset **unset"); + weechat::buffer_set($iset_buffer, "key_bind_meta-ctrl-J", "/iset **set"); + weechat::buffer_set($iset_buffer, "key_bind_meta-ctrl-M", "/iset **set"); + weechat::buffer_set($iset_buffer, "key_bind_meta-meta2-1~", "/iset **scroll_top"); + weechat::buffer_set($iset_buffer, "key_bind_meta-meta2-4~", "/iset **scroll_bottom"); + weechat::buffer_set($iset_buffer, "key_bind_meta-v", "/iset **toggle_help"); + weechat::buffer_set($iset_buffer, "key_bind_meta-p", "/iset **toggle_show_plugin_desc"); + weechat::buffer_set($iset_buffer, "localvar_set_iset_filter", $filter); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $search_value); + } +} + +sub iset_get_options +{ + my $var_value = $_[0]; + $var_value = "" if (not defined $var_value); + $var_value = lc($var_value); + $search_value = $var_value; + @iset_focus = (); + @options_names = (); + @options_parent_names = (); + @options_types = (); + @options_values = (); + @options_default_values = (); + @options_parent_values = (); + @options_is_null = (); + $option_max_length = 0; + my %options_internal = (); + my $i = 0; + my $key; + my $iset_struct; + my %iset_struct; + + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $var_value) if ($search_mode == 3); + + my $infolist = weechat::infolist_get("option", "", $filter); + while (weechat::infolist_next($infolist)) + { + $key = sprintf("%08d", $i); + my $name = weechat::infolist_string($infolist, "full_name"); + my $parent_name = weechat::infolist_string($infolist, "parent_name"); + next if (weechat::config_boolean($options_iset{"show_plugin_description"}) == 0 and index ($name, "plugins.desc.") != -1); + my $type = weechat::infolist_string($infolist, "type"); + my $value = weechat::infolist_string($infolist, "value"); + my $default_value = weechat::infolist_string($infolist, "default_value"); + my $parent_value; + if ($parent_name && (($wee_version_number < 0x00040300) || (weechat::infolist_search_var($infolist, "parent_value")))) + { + $parent_value = weechat::infolist_string($infolist, "parent_value"); + } + my $is_null = weechat::infolist_integer($infolist, "value_is_null"); + + if ($search_mode == 3) + { + my $value = weechat::infolist_string($infolist, "value"); + if ( grep /\Q$var_value/,lc($value) ) + { + $options_internal{$name}{"parent_name"} = $parent_name; + $options_internal{$name}{"type"} = $type; + $options_internal{$name}{"value"} = $value; + $options_internal{$name}{"default_value"} = $default_value; + $options_internal{$name}{"parent_value"} = $parent_value; + $options_internal{$name}{"is_null"} = $is_null; + $option_max_length = length($name) if (length($name) > $option_max_length); + $iset_struct{$key} = $options_internal{$name}; + push(@iset_focus, $iset_struct{$key}); + } + } + # search for diff? + elsif ( $search_mode == 4 or $search_mode == 5) + { + if ($value ne $default_value ) + { + $options_internal{$name}{"parent_name"} = $parent_name; + $options_internal{$name}{"type"} = $type; + $options_internal{$name}{"value"} = $value; + $options_internal{$name}{"default_value"} = $default_value; + $options_internal{$name}{"parent_value"} = $parent_value; + $options_internal{$name}{"is_null"} = $is_null; + $option_max_length = length($name) if (length($name) > $option_max_length); + $iset_struct{$key} = $options_internal{$name}; + push(@iset_focus, $iset_struct{$key}); + } + } + else + { + $options_internal{$name}{"parent_name"} = $parent_name; + $options_internal{$name}{"type"} = $type; + $options_internal{$name}{"value"} = $value; + $options_internal{$name}{"default_value"} = $default_value; + $options_internal{$name}{"parent_value"} = $parent_value; + $options_internal{$name}{"is_null"} = $is_null; + $option_max_length = length($name) if (length($name) > $option_max_length); + $iset_struct{$key} = $options_internal{$name}; + push(@iset_focus, $iset_struct{$key}); + } + $i++; + } + weechat::infolist_free($infolist); + + foreach my $name (sort keys %options_internal) + { + push(@options_names, $name); + push(@options_parent_names, $options_internal{$name}{"parent_name"}); + push(@options_types, $options_internal{$name}{"type"}); + push(@options_values, $options_internal{$name}{"value"}); + push(@options_default_values, $options_internal{$name}{"default_value"}); + push(@options_parent_values, $options_internal{$name}{"parent_value"}); + push(@options_is_null, $options_internal{$name}{"is_null"}); + } +} + +sub iset_get_values +{ + my $var_value = $_[0]; + $var_value = lc($var_value); + if (substr($var_value,0,1) eq weechat::config_string($options_iset{"value_search_char"}) and $var_value ne weechat::config_string($options_iset{"value_search_char"})) + { + $var_value = substr($var_value,1,length($var_value)); + $search_mode = 0; + } + iset_search_values($var_value,$search_mode); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $var_value); + $search_value = $var_value; +} +sub iset_search_values +{ + my ($var_value,$search_mode) = ($_[0],$_[1]); + @options_names = (); + @options_parent_names = (); + @options_types = (); + @options_values = (); + @options_default_values = (); + @options_parent_values = (); + @options_is_null = (); + $option_max_length = 0; + my %options_internal = (); + my $i = 0; + my $infolist = weechat::infolist_get("option", "", "*"); + while (weechat::infolist_next($infolist)) + { + my $name = weechat::infolist_string($infolist, "full_name"); + my $parent_name = weechat::infolist_string($infolist, "parent_name"); + next if (weechat::config_boolean($options_iset{"show_plugin_description"}) == 0 and index ($name, "plugins.desc.") != -1); + my $type = weechat::infolist_string($infolist, "type"); + my $is_null = weechat::infolist_integer($infolist, "value_is_null"); + my $value = weechat::infolist_string($infolist, "value"); + my $default_value = weechat::infolist_string($infolist, "default_value"); + my $parent_value; + if ($parent_name && (($wee_version_number < 0x00040300) || (weechat::infolist_search_var($infolist, "parent_value")))) + { + $parent_value = weechat::infolist_string($infolist, "parent_value"); + } + if ($search_mode) + { + if ( grep /\Q$var_value/,lc($value) ) + { + $options_internal{$name}{"parent_name"} = $parent_name; + $options_internal{$name}{"type"} = $type; + $options_internal{$name}{"value"} = $value; + $options_internal{$name}{"default_value"} = $default_value; + $options_internal{$name}{"parent_value"} = $parent_value; + $options_internal{$name}{"is_null"} = $is_null; + $option_max_length = length($name) if (length($name) > $option_max_length); + } + } + else + { +# if ($value =~ /\Q$var_value/si) + if (lc($value) eq $var_value) + { + $options_internal{$name}{"parent_name"} = $parent_name; + $options_internal{$name}{"type"} = $type; + $options_internal{$name}{"value"} = $value; + $options_internal{$name}{"default_value"} = $default_value; + $options_internal{$name}{"parent_value"} = $parent_value; + $options_internal{$name}{"is_null"} = $is_null; + $option_max_length = length($name) if (length($name) > $option_max_length); + } + } + $i++; + } + weechat::infolist_free($infolist); + foreach my $name (sort keys %options_internal) + { + push(@options_names, $name); + push(@options_parent_names, $options_internal{$name}{"parent_name"}); + push(@options_types, $options_internal{$name}{"type"}); + push(@options_values, $options_internal{$name}{"value"}); + push(@options_default_values, $options_internal{$name}{"default_value"}); + push(@options_parent_values, $options_internal{$name}{"parent_value"}); + push(@options_is_null, $options_internal{$name}{"is_null"}); + } +} + +sub iset_refresh_line +{ + if ($iset_buffer ne "") + { + my $y = $_[0]; + if ($y <= $#options_names) + { + return if (! defined($options_types[$y])); + my $format = sprintf("%%s%%s%%s %%s %%-7s %%s %%s%%s%%s"); + my $padding; + if ($wee_version_number >= 0x00040200) + { + $padding = " " x ($option_max_length - weechat::strlen_screen($options_names[$y])); + } + else + { + $padding = " " x ($option_max_length - length($options_names[$y])); + } + my $around = ""; + $around = "\"" if ((!$options_is_null[$y]) && ($options_types[$y] eq "string")); + + my $color1 = weechat::color(weechat::config_color($options_iset{"color_option"})); + my $color2 = weechat::color(weechat::config_color($options_iset{"color_type"})); + my $color3 = ""; + my $color4 = ""; + if ($options_is_null[$y]) + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value_undef"})); + $color4 = weechat::color(weechat::config_color($options_iset{"color_value"})); + } + elsif ($options_values[$y] ne $options_default_values[$y]) + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value_diff"})); + } + else + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value"})); + } + if ($y == $current_line) + { + $color1 = weechat::color(weechat::config_color($options_iset{"color_option_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + $color2 = weechat::color(weechat::config_color($options_iset{"color_type_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + if ($options_is_null[$y]) + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value_undef_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + $color4 = weechat::color(weechat::config_color($options_iset{"color_value_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + } + elsif ($options_values[$y] ne $options_default_values[$y]) + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value_diff_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + } + else + { + $color3 = weechat::color(weechat::config_color($options_iset{"color_value_selected"}).",".weechat::config_color($options_iset{"color_bg_selected"})); + } + } + my $value = $options_values[$y]; + if (weechat::config_boolean($options_iset{"use_color"}) == 1 and $options_types[$y] eq "color") + { + $value = weechat::color($options_values[$y]) . $options_values[$y]; + } + if ($options_is_null[$y]) + { + $value = "null"; + if ($options_parent_names[$y]) + { + if (defined $options_parent_values[$y]) + { + my $around_parent = ""; + $around_parent = "\"" if ($options_types[$y] eq "string"); + $value .= $color1." -> ".$color4.$around_parent.$options_parent_values[$y].$around_parent; + } + else + { + $value .= $color1." -> ".$color3."null"; + } + } + } + my $strline = sprintf($format, + $color1, $options_names[$y], $padding, + $color2, $options_types[$y], + $color3, $around, $value, $around); + weechat::print_y($iset_buffer, $y, $strline); + } + } +} + +sub iset_refresh +{ + iset_title(); + if (($iset_buffer ne "") && ($#options_names >= 0)) + { + foreach my $y (0 .. $#options_names) + { + iset_refresh_line($y); + } + } + + weechat::bar_item_update("isetbar_help") if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1); +} + +sub iset_full_refresh +{ + $iset_buffer = weechat::buffer_search($LANG, $PRGNAME); + if ($iset_buffer ne "") + { + weechat::buffer_clear($iset_buffer) unless defined $_[0]; # iset_full_refresh(1) does a full refresh without clearing buffer + # search for "*" in $filter. + if ($filter =~ m/\*/ and $search_mode == 2) + { + iset_get_options(""); + } + else + { + if ($search_mode == 0) + { + $search_value = "=" . $search_value; + iset_get_values($search_value); + } + elsif ($search_mode == 1) + { + iset_get_values($search_value); + } + elsif ($search_mode == 3) + { + iset_create_filter($filter); + iset_get_options($search_value); + } + } + if (weechat::config_boolean($options_iset{"show_plugin_description"}) == 1) + { + iset_set_current_line($current_line); + }else + { + $current_line = $#options_names if ($current_line > $#options_names); + } + iset_refresh(); + weechat::command($iset_buffer, "/window refresh"); + } +} + +sub iset_set_current_line +{ + my $new_current_line = $_[0]; + if ($new_current_line >= 0) + { + my $old_current_line = $current_line; + $current_line = $new_current_line; + $current_line = $#options_names if ($current_line > $#options_names); + if ($old_current_line != $current_line) + { + iset_refresh_line($old_current_line); + iset_refresh_line($current_line); + weechat::bar_item_update("isetbar_help") if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1); + } + } +} + +sub iset_signal_window_scrolled_cb +{ + my ($data, $signal, $signal_data) = ($_[0], $_[1], $_[2]); + if ($iset_buffer ne "") + { + my $infolist = weechat::infolist_get("window", $signal_data, ""); + if (weechat::infolist_next($infolist)) + { + if (weechat::infolist_pointer($infolist, "buffer") eq $iset_buffer) + { + my $old_current_line = $current_line; + my $new_current_line = $current_line; + my $start_line_y = weechat::infolist_integer($infolist, "start_line_y"); + my $chat_height = weechat::infolist_integer($infolist, "chat_height"); + $new_current_line += $chat_height if ($new_current_line < $start_line_y); + $new_current_line -= $chat_height if ($new_current_line >= $start_line_y + $chat_height); + $new_current_line = $start_line_y if ($new_current_line < $start_line_y); + $new_current_line = $start_line_y + $chat_height - 1 if ($new_current_line >= $start_line_y + $chat_height); + iset_set_current_line($new_current_line); + } + } + weechat::infolist_free($infolist); + } + + return weechat::WEECHAT_RC_OK; +} + +sub iset_get_window_number +{ + if ($iset_buffer ne "") + { + my $window = weechat::window_search_with_buffer($iset_buffer); + return "-window ".weechat::window_get_integer ($window, "number")." " if ($window ne ""); + } + return ""; +} + +sub iset_check_line_outside_window +{ + if ($iset_buffer ne "") + { + undef my $infolist; + if ($wee_version_number >= 0x00030500) + { + my $window = weechat::window_search_with_buffer($iset_buffer); + $infolist = weechat::infolist_get("window", $window, "") if $window; + } + else + { + $infolist = weechat::infolist_get("window", "", "current"); + } + if ($infolist) + { + if (weechat::infolist_next($infolist)) + { + my $start_line_y = weechat::infolist_integer($infolist, "start_line_y"); + my $chat_height = weechat::infolist_integer($infolist, "chat_height"); + my $window_number = ""; + if ($wee_version_number >= 0x00030500) + { + $window_number = "-window ".weechat::infolist_integer($infolist, "number")." "; + } + if ($start_line_y > $current_line) + { + weechat::command($iset_buffer, "/window scroll ".$window_number."-".($start_line_y - $current_line)); + } + else + { + if ($start_line_y <= $current_line - $chat_height) + { + weechat::command($iset_buffer, "/window scroll ".$window_number."+".($current_line - $start_line_y - $chat_height + 1)); + + } + } + } + weechat::infolist_free($infolist); + } + } +} + +sub iset_get_option_name_index +{ + my $option_name = $_[0]; + my $index = 0; + while ($index <= $#options_names) + { + return -1 if ($options_names[$index] gt $option_name); + return $index if ($options_names[$index] eq $option_name); + $index++; + } + return -1; +} + +sub iset_refresh_option +{ + my $option_name = $_[0]; + my $index = $_[1]; + my $infolist = weechat::infolist_get("option", "", $option_name); + if ($infolist) + { + weechat::infolist_next($infolist); + if (weechat::infolist_fields($infolist)) + { + $options_parent_names[$index] = weechat::infolist_string($infolist, "parent_name"); + $options_types[$index] = weechat::infolist_string($infolist, "type"); + $options_values[$index] = weechat::infolist_string($infolist, "value"); + $options_default_values[$index] = weechat::infolist_string($infolist, "default_value"); + $options_is_null[$index] = weechat::infolist_integer($infolist, "value_is_null"); + $options_parent_values[$index] = undef; + if ($options_parent_names[$index] + && (($wee_version_number < 0x00040300) || (weechat::infolist_search_var($infolist, "parent_value")))) + { + $options_parent_values[$index] = weechat::infolist_string($infolist, "parent_value"); + } + iset_refresh_line($index); + iset_title() if ($option_name eq "iset.look.show_current_line"); + } + else + { + iset_full_refresh(1); # if not found, refresh fully without clearing buffer + weechat::print_y($iset_buffer, $#options_names + 1, ""); + } + weechat::infolist_free($infolist); + } +} + +sub iset_config_cb +{ + my ($data, $option_name, $value) = ($_[0], $_[1], $_[2]); + + if ($iset_buffer ne "") + { + return weechat::WEECHAT_RC_OK if (weechat::info_get("weechat_upgrading", "") eq "1"); + + my $index = iset_get_option_name_index($option_name); + if ($index >= 0) + { + # refresh info about changed option + iset_refresh_option($option_name, $index); + # refresh any other option having this changed option as parent + foreach my $i (0 .. $#options_names) + { + if ($options_parent_names[$i] eq $option_name) + { + iset_refresh_option($options_names[$i], $i); + } + } + } + else + { + iset_full_refresh() if ($option_name ne "weechat.bar.isetbar.hidden"); + } + } + + return weechat::WEECHAT_RC_OK; +} + +sub iset_set_option +{ + my ($option, $value) = ($_[0],$_[1]); + if (defined $option and defined $value) + { + $option = weechat::config_get($option); + weechat::config_option_set($option, $value, 1) if ($option ne ""); + } +} + +sub iset_reset_option +{ + my $option = $_[0]; + if (defined $option) + { + $option = weechat::config_get($option); + weechat::config_option_reset($option, 1) if ($option ne ""); + } +} + +sub iset_unset_option +{ + my $option = $_[0]; + if (defined $option) + { + $option = weechat::config_get($option); + weechat::config_option_unset($option) if ($option ne ""); + } +} + + +sub iset_cmd_cb +{ + my ($data, $buffer, $args) = ($_[0], $_[1], $_[2]); + my $filter_set = 0; +# $search_value = ""; + if (($args ne "") && (substr($args, 0, 2) ne "**")) + { + my @cmd_array = split(/ /,$args); + my $array_count = @cmd_array; + if (substr($args, 0, 1) eq weechat::config_string($options_iset{"value_search_char"}) + or (defined $cmd_array[0] and $cmd_array[0] eq weechat::config_string($options_iset{"value_search_char"}).weechat::config_string($options_iset{"value_search_char"})) ) + { + $search_mode = 1; + my $search_value = substr($args, 1); # cut value_search_char + if ($iset_buffer ne "") + { + weechat::buffer_clear($iset_buffer); + weechat::command($iset_buffer, "/window refresh"); + } + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $search_value); + iset_init(); + iset_get_values($search_value); + iset_refresh(); + weechat::buffer_set($iset_buffer, "display", "1"); +# $filter = $var_value; + return weechat::WEECHAT_RC_OK; + } + else + { + # f/s option =value + # option =value + $search_mode = 2; # grep on option + if ( $array_count >= 2 and $cmd_array[0] ne "f" or $cmd_array[0] ne "s") + { + if ( defined $cmd_array[1] and substr($cmd_array[1], 0, 1) eq weechat::config_string($options_iset{"value_search_char"}) + or defined $cmd_array[2] and substr($cmd_array[2], 0, 1) eq weechat::config_string($options_iset{"value_search_char"}) ) + { + $search_mode = 3; # grep on option and value + $search_value = substr($cmd_array[1], 1); # cut value_search_char + $search_value = substr($cmd_array[2], 1) if ( $array_count > 2); # cut value_search_char + } + } + + # show all diff values + if ( $args eq "d") + { + $search_mode = 4; + $search_value = "*"; + $args = $search_value; + } + if ( $array_count >= 2 and $cmd_array[0] eq "d") + { + $search_mode = 5; + $search_value = substr($cmd_array[1], 0); # cut value_search_char + $search_value = substr($cmd_array[2], 0) if ( $array_count > 2); # cut value_search_char + $args = $search_value; + } + + iset_create_filter($args); + $filter_set = 1; + my $ptrbuf = weechat::buffer_search($LANG, $PRGNAME); + + if ($ptrbuf eq "") + { + iset_init(); + iset_get_options($search_value); + iset_full_refresh(); + weechat::buffer_set(weechat::buffer_search($LANG, $PRGNAME), "display", "1"); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $search_value); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + return weechat::WEECHAT_RC_OK; + } + else + { + iset_get_options($search_value); + iset_full_refresh(); + weechat::buffer_set($ptrbuf, "display", "1"); + } + } + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_mode", $search_mode); + weechat::buffer_set($iset_buffer, "localvar_set_iset_search_value", $search_value); + } + if ($iset_buffer eq "") + { + iset_init(); + iset_get_options(""); + iset_refresh(); + } + else + { +# iset_get_options($search_value); + iset_full_refresh() if ($filter_set); + } + + if ($args eq "") + { + weechat::buffer_set($iset_buffer, "display", "1"); + } + else + { + if ($args eq "**refresh") + { + iset_full_refresh(); + } + if ($args eq "**up") + { + if ($current_line > 0) + { + $current_line--; + iset_refresh_line($current_line + 1); + iset_refresh_line($current_line); + iset_check_line_outside_window(); + } + } + if ($args eq "**down") + { + if ($current_line < $#options_names) + { + $current_line++; + iset_refresh_line($current_line - 1); + iset_refresh_line($current_line); + iset_check_line_outside_window(); + } + } + if ($args eq "**left" && $wee_version_number >= 0x00030600) + { + weechat::command($iset_buffer, "/window scroll_horiz ".iset_get_window_number()."-".weechat::config_integer($options_iset{"scroll_horiz"})."%"); + } + if ($args eq "**right" && $wee_version_number >= 0x00030600) + { + weechat::command($iset_buffer, "/window scroll_horiz ".iset_get_window_number().weechat::config_integer($options_iset{"scroll_horiz"})."%"); + } + if ($args eq "**scroll_top") + { + my $old_current_line = $current_line; + $current_line = 0; + iset_refresh_line ($old_current_line); + iset_refresh_line ($current_line); + iset_title(); + weechat::command($iset_buffer, "/window scroll_top ".iset_get_window_number()); + } + if ($args eq "**scroll_bottom") + { + my $old_current_line = $current_line; + $current_line = $#options_names; + iset_refresh_line ($old_current_line); + iset_refresh_line ($current_line); + iset_title(); + weechat::command($iset_buffer, "/window scroll_bottom ".iset_get_window_number()); + } + if ($args eq "**toggle") + { + if ($options_types[$current_line] eq "boolean") + { + iset_set_option($options_names[$current_line], "toggle"); + } + } + if ($args eq "**incr") + { + if (($options_types[$current_line] eq "integer") + || ($options_types[$current_line] eq "color")) + { + iset_set_option($options_names[$current_line], "++1"); + } + } + if ($args eq "**decr") + { + if (($options_types[$current_line] eq "integer") + || ($options_types[$current_line] eq "color")) + { + iset_set_option($options_names[$current_line], "--1"); + } + } + if ($args eq "**reset") + { + iset_reset_option($options_names[$current_line]); + } + if ($args eq "**unset") + { + iset_unset_option($options_names[$current_line]); + } + if ($args eq "**toggle_help") + { + if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1) + { + weechat::config_option_set($options_iset{"show_help_bar"},0,1); + iset_show_bar(0); + } + else + { + weechat::config_option_set($options_iset{"show_help_bar"},1,1); + iset_show_bar(1); + } + } + if ($args eq "**toggle_show_plugin_desc") + { + if (weechat::config_boolean($options_iset{"show_plugin_description"}) == 1) + { + weechat::config_option_set($options_iset{"show_plugin_description"},0,1); + iset_full_refresh(); + iset_check_line_outside_window(); + iset_title(); + } + else + { + weechat::config_option_set($options_iset{"show_plugin_description"},1,1); + iset_full_refresh(); + iset_check_line_outside_window(); + iset_title(); + } + } + if ($args eq "**set") + { + my $quote = ""; + my $value = $options_values[$current_line]; + if ($options_is_null[$current_line]) + { + $value = ""; + } + else + { + $quote = "\"" if ($options_types[$current_line] eq "string"); + } + $value = " ".$quote.$value.$quote if ($value ne "" or $quote ne ""); + + my $set_command = "/set"; + my $start_index = 5; + if (weechat::config_boolean($options_iset{"use_mute"}) == 1) + { + $set_command = "/mute ".$set_command; + $start_index += 11; + } + $set_command = $set_command." ".$options_names[$current_line].$value; + my $pos_space = index($set_command, " ", $start_index); + if ($pos_space < 0) + { + $pos_space = 9999; + } + else + { + $pos_space = $pos_space + 1; + $pos_space = $pos_space + 1 if ($quote ne ""); + } + weechat::buffer_set($iset_buffer, "input", $set_command); + weechat::buffer_set($iset_buffer, "input_pos", "".$pos_space); + } + } + weechat::bar_item_update("isetbar_help") if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1); + return weechat::WEECHAT_RC_OK; +} + +sub iset_get_help +{ + my ($redraw) = ($_[0]); + + return '' if (weechat::config_boolean($options_iset{"show_help_bar"}) == 0); + + if (not defined $options_names[$current_line]) + { + return "No option selected. Set a new filter using command line (use '*' to see all options)"; + } + if ($options_name_copy eq $options_names[$current_line] and not defined $redraw) + { + return $description; + } + $options_name_copy = $options_names[$current_line]; + my $optionlist =""; + $optionlist = weechat::infolist_get("option", "", $options_names[$current_line]); + weechat::infolist_next($optionlist); + my $full_name = weechat::infolist_string($optionlist,"full_name"); + my $option_desc = ""; + my $option_default_value = ""; + my $option_range = ""; + my $possible_values = ""; + my $re = qq(\Q$full_name); + if (grep (/^$re$/,$options_names[$current_line])) + { + $option_desc = weechat::infolist_string($optionlist, "description_nls"); + $option_desc = weechat::infolist_string($optionlist, "description") if ($option_desc eq ""); + $option_desc = "No help found" if ($option_desc eq ""); + $option_default_value = weechat::infolist_string($optionlist, "default_value"); + $possible_values = weechat::infolist_string($optionlist, "string_values") if (weechat::infolist_string($optionlist, "string_values") ne ""); + if ((weechat::infolist_string($optionlist, "type") eq "integer") && ($possible_values eq "")) + { + $option_range = weechat::infolist_integer($optionlist, "min") + ." .. ".weechat::infolist_integer($optionlist, "max"); + } + } + weechat::infolist_free($optionlist); + iset_title(); + + $description = weechat::color(weechat::config_color($options_iset{"color_help_option_name"})).$options_names[$current_line] + .weechat::color("bar_fg").": " + .weechat::color(weechat::config_color($options_iset{"color_help_text"})).$option_desc; + + # show additional infos like default value and possible values + + if (weechat::config_boolean($options_iset{"show_help_extra_info"}) == 1) + { + $description .= + weechat::color("bar_delim")." [" + .weechat::color("bar_fg")."default: " + .weechat::color("bar_delim")."\"" + .weechat::color(weechat::config_color($options_iset{"color_help_default_value"})).$option_default_value + .weechat::color("bar_delim")."\""; + if ($option_range ne "") + { + $description .= weechat::color("bar_fg").", values: ".$option_range; + } + if ($possible_values ne "") + { + $possible_values =~ s/\|/", "/g; # replace '|' to '", "' + $description .= weechat::color("bar_fg").", values: ". "\"" . $possible_values . "\""; + + } + $description .= weechat::color("bar_delim")."]"; + } + return $description; +} + +sub iset_check_condition_isetbar_cb +{ + my ($data, $modifier, $modifier_data, $string) = ($_[0], $_[1], $_[2], $_[3]); + my $buffer = weechat::window_get_pointer($modifier_data, "buffer"); + if ($buffer ne "") + { + if ((weechat::buffer_get_string($buffer, "plugin") eq $LANG) + && (weechat::buffer_get_string($buffer, "name") eq $PRGNAME)) + { + return "1"; + } + } + return "0"; +} + +sub iset_show_bar +{ + my $show = $_[0]; + my $barhidden = weechat::config_get("weechat.bar.isetbar.hidden"); + if ($barhidden) + { + if ($show) + { + if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1) + { + if (weechat::config_boolean($barhidden)) + { + weechat::config_option_set($barhidden, 0, 1); + } + } + } + else + { + if (!weechat::config_boolean($barhidden)) + { + weechat::config_option_set($barhidden, 1, 1); + } + } + } +} + +sub iset_signal_buffer_switch_cb +{ + my $buffer_pointer = $_[2]; + my $show_bar = 0; + $show_bar = 1 if (weechat::buffer_get_integer($iset_buffer, "num_displayed") > 0); + iset_show_bar($show_bar); + iset_check_line_outside_window() if ($buffer_pointer eq $iset_buffer); + return weechat::WEECHAT_RC_OK; +} + +sub iset_item_cb +{ + return iset_get_help(); +} + +sub iset_upgrade_ended +{ + iset_full_refresh(); +} + +sub iset_end +{ + # when script is unloaded, we hide bar + iset_show_bar(0); +} + +# -------------------------------[ mouse support ]------------------------------------- + +sub hook_focus_iset_cb +{ + my %info = %{$_[1]}; + my $bar_item_line = int($info{"_bar_item_line"}); + undef my $hash; + if (($info{"_buffer_name"} eq $PRGNAME) && $info{"_buffer_plugin"} eq $LANG && ($bar_item_line >= 0) && ($bar_item_line <= $#iset_focus)) + { + $hash = $iset_focus[$bar_item_line]; + } + else + { + $hash = {}; + my $hash_focus = $iset_focus[0]; + foreach my $key (keys %$hash_focus) + { + $hash->{$key} = "?"; + } + } + return $hash; +} + +# _chat_line_y contains selected line +sub iset_hsignal_mouse_cb +{ + my ($data, $signal, %hash) = ($_[0], $_[1], %{$_[2]}); + + return weechat::WEECHAT_RC_OK unless (@options_types); + + if ($hash{"_buffer_name"} eq $PRGNAME && ($hash{"_buffer_plugin"} eq $LANG)) + { + if ($hash{"_key"} eq "button1") + { + iset_set_current_line($hash{"_chat_line_y"}); + } + elsif ($hash{"_key"} eq "button2") + { + if ($options_types[$hash{"_chat_line_y"}] eq "boolean") + { + iset_set_option($options_names[$hash{"_chat_line_y"}], "toggle"); + iset_set_current_line($hash{"_chat_line_y"}); + } + elsif ($options_types[$hash{"_chat_line_y"}] eq "string") + { + iset_set_current_line($hash{"_chat_line_y"}); + weechat::command("", "/$PRGNAME **set"); + } + } + elsif ($hash{"_key"} eq "button2-gesture-left" or $hash{"_key"} eq "button2-gesture-left-long") + { + if ($options_types[$hash{"_chat_line_y"}] eq "integer" or ($options_types[$hash{"_chat_line_y"}] eq "color")) + { + iset_set_current_line($hash{"_chat_line_y"}); + my $distance = distance($hash{"_chat_line_x"},$hash{"_chat_line_x2"}); + weechat::command("", "/repeat $distance /$PRGNAME **decr"); + } + } + elsif ($hash{"_key"} eq "button2-gesture-right" or $hash{"_key"} eq "button2-gesture-right-long") + { + if ($options_types[$hash{"_chat_line_y"}] eq "integer" or ($options_types[$hash{"_chat_line_y"}] eq "color")) + { + iset_set_current_line($hash{"_chat_line_y"}); + my $distance = distance($hash{"_chat_line_x"},$hash{"_chat_line_x2"}); + weechat::command("", "/repeat $distance /$PRGNAME **incr"); + } + } + } + window_switch(); +} + +sub window_switch +{ + my $current_window = weechat::current_window(); + my $dest_window = weechat::window_search_with_buffer(weechat::buffer_search("perl","iset")); + return 0 if ($dest_window eq "" or $current_window eq $dest_window); + + my $infolist = weechat::infolist_get("window", $dest_window, ""); + weechat::infolist_next($infolist); + my $number = weechat::infolist_integer($infolist, "number"); + weechat::infolist_free($infolist); + weechat::command("","/window " . $number); +} + +sub distance +{ + my ($x1,$x2) = ($_[0], $_[1]); + my $distance; + $distance = $x1 - $x2; + $distance = abs($distance); + if ($distance > 0) + { + use integer; + $distance = $distance / 3; + $distance = 1 if ($distance == 0); + } + elsif ($distance == 0) + { + $distance = 1; + } + return $distance; +} + +# -----------------------------------[ config ]--------------------------------------- + +sub iset_config_init +{ + $iset_config_file = weechat::config_new($ISET_CONFIG_FILE_NAME,"iset_config_reload_cb",""); + return if ($iset_config_file eq ""); + + # section "color" + my $section_color = weechat::config_new_section($iset_config_file,"color", 0, 0, "", "", "", "", "", "", "", "", "", ""); + if ($section_color eq "") + { + weechat::config_free($iset_config_file); + return; + } + $options_iset{"color_option"} = weechat::config_new_option( + $iset_config_file, $section_color, + "option", "color", "Color for option name in iset buffer", "", 0, 0, + "default", "default", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_option_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "option_selected", "color", "Color for selected option name in iset buffer", "", 0, 0, + "white", "white", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_type"} = weechat::config_new_option( + $iset_config_file, $section_color, + "type", "color", "Color for option type (integer, boolean, string)", "", 0, 0, + "brown", "brown", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_type_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "type_selected", "color", "Color for selected option type (integer, boolean, string)", "", 0, 0, + "yellow", "yellow", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value", "color", "Color for option value", "", 0, 0, + "cyan", "cyan", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value_selected", "color", "Color for selected option value", "", 0, 0, + "lightcyan", "lightcyan", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value_diff"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value_diff", "color", "Color for option value different from default", "", 0, 0, + "magenta", "magenta", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value_diff_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value_diff_selected", "color", "Color for selected option value different from default", "", 0, 0, + "lightmagenta", "lightmagenta", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value_undef"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value_undef", "color", "Color for option value undef", "", 0, 0, + "green", "green", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_value_undef_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "value_undef_selected", "color", "Color for selected option value undef", "", 0, 0, + "lightgreen", "lightgreen", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_bg_selected"} = weechat::config_new_option( + $iset_config_file, $section_color, + "bg_selected", "color", "Background color for current selected option", "", 0, 0, + "red", "red", 0, "", "", "full_refresh_cb", "", "", ""); + $options_iset{"color_help_option_name"} = weechat::config_new_option( + $iset_config_file, $section_color, + "help_option_name", "color", "Color for option name in help-bar", "", 0, 0, + "white", "white", 0, "", "", "bar_refresh", "", "", ""); + $options_iset{"color_help_text"} = weechat::config_new_option( + $iset_config_file, $section_color, + "help_text", "color", "Color for option description in help-bar", "", 0, 0, + "default", "default", 0, "", "", "bar_refresh", "", "", ""); + $options_iset{"color_help_default_value"} = weechat::config_new_option( + $iset_config_file, $section_color, + "help_default_value", "color", "Color for default option value in help-bar", "", 0, 0, + "green", "green", 0, "", "", "bar_refresh", "", "", ""); + + # section "help" + my $section_help = weechat::config_new_section($iset_config_file,"help", 0, 0, "", "", "", "", "", "", "", "", "", ""); + if ($section_help eq "") + { + weechat::config_free($iset_config_file); + return; + } + $options_iset{"show_help_bar"} = weechat::config_new_option( + $iset_config_file, $section_help, + "show_help_bar", "boolean", "Show help bar", "", 0, 0, + "on", "on", 0, "", "", "toggle_help_cb", "", "", ""); + $options_iset{"show_help_extra_info"} = weechat::config_new_option( + $iset_config_file, $section_help, + "show_help_extra_info", "boolean", "Show additional information in help bar (default value, max./min. value) ", "", 0, 0, + "on", "on", 0, "", "", "", "", "", ""); + $options_iset{"show_plugin_description"} = weechat::config_new_option( + $iset_config_file, $section_help, + "show_plugin_description", "boolean", "Show plugin description in iset buffer", "", 0, 0, + "off", "off", 0, "", "", "full_refresh_cb", "", "", ""); + + # section "look" + my $section_look = weechat::config_new_section($iset_config_file, "look", 0, 0, "", "", "", "", "", "", "", "", "", ""); + if ($section_look eq "") + { + weechat::config_free($iset_config_file); + return; + } + $options_iset{"value_search_char"} = weechat::config_new_option( + $iset_config_file, $section_look, + "value_search_char", "string", "Trigger char to tell iset to search for value instead of option (for example: =red)", "", 0, 0, + "=", "=", 0, "", "", "", "", "", ""); + $options_iset{"scroll_horiz"} = weechat::config_new_option( + $iset_config_file, $section_look, + "scroll_horiz", "integer", "scroll content of iset buffer n%", "", 1, 100, + "10", "10", 0, "", "", "", "", "", ""); + $options_iset{"show_current_line"} = weechat::config_new_option( + $iset_config_file, $section_look, + "show_current_line", "boolean", "show current line in title bar.", "", 0, 0, + "on", "on", 0, "", "", "", "", "", ""); + $options_iset{"use_mute"} = weechat::config_new_option( + $iset_config_file, $section_look, + "use_mute", "boolean", "/mute command will be used in input bar", "", 0, 0, + "off", "off", 0, "", "", "", "", "", ""); + $options_iset{"use_color"} = weechat::config_new_option( + $iset_config_file, $section_look, + "use_color", "boolean", "display the color value in the corresponding color", "", 0, 0, + "off", "off", 0, "", "", "full_refresh_cb", "", "", ""); +} + +sub iset_config_reload_cb +{ + my ($data,$config_file) = ($_[0], $_[1]); + return weechat::config_reload($config_file) +} + +sub iset_config_read +{ + return weechat::config_read($iset_config_file) if ($iset_config_file ne ""); +} + +sub iset_config_write +{ + return weechat::config_write($iset_config_file) if ($iset_config_file ne ""); +} + +sub full_refresh_cb +{ + iset_full_refresh(); + return weechat::WEECHAT_RC_OK; +} + +sub bar_refresh +{ + iset_get_help(1); + weechat::bar_item_update("isetbar_help") if (weechat::config_boolean($options_iset{"show_help_bar"}) == 1); + return weechat::WEECHAT_RC_OK; +} + +sub toggle_help_cb +{ + my $value = weechat::config_boolean($options_iset{"show_help_bar"}); + iset_show_bar($value); + return weechat::WEECHAT_RC_OK; +} + +# -----------------------------------[ main ]----------------------------------------- + +weechat::register($PRGNAME, $AUTHOR, $VERSION, $LICENSE, + $DESCR, "iset_end", ""); + +$wee_version_number = weechat::info_get("version_number", "") || 0; + +iset_config_init(); +iset_config_read(); + +weechat::hook_command($PRGNAME, "Interactive set", "d <text> || f <file> || s <section> || [=][=]<text>", + "d <text> : show only changed options\n". + "f file : show options for a file\n". + "s section: show options for a section\n". + "text : show options with 'text' in name\n". + weechat::config_string($options_iset{"value_search_char"})."text : show options with 'text' in value\n". + weechat::config_string($options_iset{"value_search_char"}).weechat::config_string($options_iset{"value_search_char"})."text : show options with exact 'text' in value\n\n". + "Keys for iset buffer:\n". + "f11,f12 : move iset content left/right\n". + "up,down : move one option up/down\n". + "pgup,pdwn : move one page up/down\n". + "home,end : move to first/last option\n". + "ctrl+'L' : refresh options and screen\n". + "alt+space : toggle boolean on/off\n". + "alt+'+' : increase value (for integer or color)\n". + "alt+'-' : decrease value (for integer or color)\n". + "alt+'i',alt+'r': reset value of option\n". + "alt+'i',alt+'u': unset option\n". + "alt+enter : set new value for option (edit it with command line)\n". + "text,enter : set a new filter using command line (use '*' to see all options)\n". + "alt+'v' : toggle help bar on/off\n". + "alt+'p' : toggle option \"show_plugin_description\" on/off\n". + "q : as input in iset buffer to close it\n". + "\n". + "Mouse actions:\n". + "wheel up/down : move cursor up/down\n". + "left button : select an option from list\n". + "right button : toggle boolean (on/off) or set a new value for option (edit it with command line)\n". + "right button + drag left/right: increase/decrease value (for integer or color)\n". + "\n". + "Examples:\n". + " show changed options in 'aspell' plugin\n". + " /iset d aspell\n". + " show options for file 'irc'\n". + " /iset f irc\n". + " show options for section 'look'\n". + " /iset s look\n". + " show all options with text 'nicklist' in name\n". + " /iset nicklist\n". + " show all values which contain 'red'. ('" . weechat::config_string($options_iset{"value_search_char"}) . "' is a trigger char).\n". + " /iset ". weechat::config_string($options_iset{"value_search_char"}) ."red\n". + " show all values which hit 'off'. ('" . weechat::config_string($options_iset{"value_search_char"}) . weechat::config_string($options_iset{"value_search_char"}) . "' is a trigger char).\n". + " /iset ". weechat::config_string($options_iset{"value_search_char"}) . weechat::config_string($options_iset{"value_search_char"}) ."off\n". + " show options for file 'weechat' which contains value 'off'\n". + " /iset f weechat ".weechat::config_string($options_iset{"value_search_char"})."off\n". + "", + "", "iset_cmd_cb", ""); +weechat::hook_signal("upgrade_ended", "iset_upgrade_ended", ""); +weechat::hook_signal("window_scrolled", "iset_signal_window_scrolled_cb", ""); +weechat::hook_signal("buffer_switch", "iset_signal_buffer_switch_cb",""); +weechat::bar_item_new("isetbar_help", "iset_item_cb", ""); +weechat::bar_new("isetbar", "on", "0", "window", "", "top", "horizontal", + "vertical", "3", "3", "default", "cyan", "default", "1", + "isetbar_help"); +weechat::hook_modifier("bar_condition_isetbar", "iset_check_condition_isetbar_cb", ""); +weechat::hook_config("*", "iset_config_cb", ""); +$iset_buffer = weechat::buffer_search($LANG, $PRGNAME); +iset_init() if ($iset_buffer ne ""); + +if ($wee_version_number >= 0x00030600) +{ + weechat::hook_focus("chat", "hook_focus_iset_cb", ""); + weechat::hook_hsignal($PRGNAME."_mouse", "iset_hsignal_mouse_cb", ""); + weechat::key_bind("mouse", \%mouse_keys); +} diff --git a/.weechat-tutorial/plugins.conf b/.weechat-tutorial/plugins.conf new file mode 100755 index 0000000..5e36ed4 --- /dev/null +++ b/.weechat-tutorial/plugins.conf @@ -0,0 +1,12 @@ +# +# weechat -- plugins.conf +# + +[var] +fifo.fifo = "on" +lua.check_license = "off" +perl.check_license = "off" +python.check_license = "off" +ruby.check_license = "off" + +[desc] diff --git a/.weechat-tutorial/relay.conf b/.weechat-tutorial/relay.conf new file mode 100755 index 0000000..2795023 --- /dev/null +++ b/.weechat-tutorial/relay.conf @@ -0,0 +1,40 @@ +# +# weechat -- relay.conf +# + +[look] +auto_open_buffer = on +raw_messages = 256 + +[color] +client = cyan +status_active = lightblue +status_auth_failed = lightred +status_connecting = yellow +status_disconnected = lightred +status_waiting_auth = brown +text = default +text_bg = default +text_selected = white + +[network] +allowed_ips = "" +bind_address = "" +clients_purge_delay = 0 +compression_level = 6 +ipv6 = on +max_clients = 5 +password = "" +ssl_cert_key = "%h/ssl/relay.pem" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +websocket_allowed_origins = "" + +[irc] +backlog_max_minutes = 1440 +backlog_max_number = 256 +backlog_since_last_disconnect = on +backlog_since_last_message = off +backlog_tags = "irc_privmsg" +backlog_time_format = "[%H:%M] " + +[port] diff --git a/.weechat-tutorial/script.conf b/.weechat-tutorial/script.conf new file mode 100755 index 0000000..e1577d4 --- /dev/null +++ b/.weechat-tutorial/script.conf @@ -0,0 +1,50 @@ +# +# weechat -- script.conf +# + +[look] +columns = "%s %n %V %v %u | %d | %t" +diff_color = on +diff_command = "auto" +display_source = on +quiet_actions = on +sort = "p,n" +translate_description = on +use_keys = on + +[color] +status_autoloaded = cyan +status_held = white +status_installed = lightcyan +status_obsolete = lightmagenta +status_popular = yellow +status_running = lightgreen +status_unknown = lightred +text = default +text_bg = default +text_bg_selected = red +text_date = default +text_date_selected = white +text_delimiters = default +text_description = default +text_description_selected = white +text_extension = default +text_extension_selected = white +text_name = cyan +text_name_selected = lightcyan +text_selected = white +text_tags = brown +text_tags_selected = yellow +text_version = magenta +text_version_loaded = default +text_version_loaded_selected = white +text_version_selected = lightmagenta + +[scripts] +autoload = on +cache_expire = 1440 +download_timeout = 30 +hold = "" +path = "%h/script" +url = "http://weechat.org/files/plugins.xml.gz" +url_force_https = on diff --git a/.weechat-tutorial/script/plugins.xml.gz b/.weechat-tutorial/script/plugins.xml.gz Binary files differnew file mode 100755 index 0000000..68aeb7f --- /dev/null +++ b/.weechat-tutorial/script/plugins.xml.gz diff --git a/.weechat-tutorial/sec.conf b/.weechat-tutorial/sec.conf new file mode 100755 index 0000000..3672aa7 --- /dev/null +++ b/.weechat-tutorial/sec.conf @@ -0,0 +1,11 @@ +# +# weechat -- sec.conf +# + +[crypt] +cipher = aes256 +hash_algo = sha256 +passphrase_file = "" +salt = on + +[data] diff --git a/.weechat-tutorial/trigger.conf b/.weechat-tutorial/trigger.conf new file mode 100755 index 0000000..8925a8b --- /dev/null +++ b/.weechat-tutorial/trigger.conf @@ -0,0 +1,47 @@ +# +# weechat -- trigger.conf +# + +[look] +enabled = on +monitor_strip_colors = off + +[color] +flag_command = lightgreen +flag_conditions = yellow +flag_regex = lightcyan +flag_return_code = lightmagenta +regex = white +replace = cyan +trigger = green +trigger_disabled = red + +[trigger] +beep.arguments = "" +beep.command = "/print -beep" +beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})" +beep.enabled = on +beep.hook = print +beep.regex = "" +beep.return_code = ok +cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass.command = "" +cmd_pass.conditions = "" +cmd_pass.enabled = on +cmd_pass.hook = modifier +cmd_pass.regex = "==^((/(msg|m|quote) +nickserv +(id|identify|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +cmd_pass.return_code = ok +msg_auth.arguments = "5000|irc_message_auth" +msg_auth.command = "" +msg_auth.conditions = "" +msg_auth.enabled = on +msg_auth.hook = modifier +msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +msg_auth.return_code = ok +server_pass.arguments = "5000|input_text_display;5000|history_add" +server_pass.command = "" +server_pass.conditions = "" +server_pass.enabled = on +server_pass.hook = modifier +server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}" +server_pass.return_code = ok diff --git a/.weechat-tutorial/weechat.conf b/.weechat-tutorial/weechat.conf new file mode 100755 index 0000000..4d7e3f7 --- /dev/null +++ b/.weechat-tutorial/weechat.conf @@ -0,0 +1,613 @@ +# +# weechat -- weechat.conf +# + +[debug] + +[startup] +command_after_plugins = "" +command_before_plugins = "" +display_logo = on +display_version = on +sys_rlimit = "" + +[look] +align_end_of_lines = message +bar_more_down = "++" +bar_more_left = "<<" +bar_more_right = ">>" +bar_more_up = "--" +bare_display_exit_on_input = on +bare_display_time_format = "%H:%M" +buffer_auto_renumber = on +buffer_notify_default = all +buffer_position = end +buffer_search_case_sensitive = off +buffer_search_force_default = off +buffer_search_regex = off +buffer_search_where = prefix_message +buffer_time_format = "%H:%M:%S" +color_basic_force_bold = off +color_inactive_buffer = on +color_inactive_message = on +color_inactive_prefix = on +color_inactive_prefix_buffer = on +color_inactive_time = off +color_inactive_window = on +color_nick_offline = off +color_pairs_auto_reset = 5 +color_real_white = off +command_chars = "" +command_incomplete = off +confirm_quit = off +confirm_upgrade = off +day_change = on +day_change_message_1date = "-- %a, %d %b %Y --" +day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" +eat_newline_glitch = off +emphasized_attributes = "" +highlight = "" +highlight_regex = "" +highlight_tags = "" +hotlist_add_conditions = "${away} || ${buffer.num_displayed} == 0" +hotlist_buffer_separator = ", " +hotlist_count_max = 2 +hotlist_count_min_msg = 2 +hotlist_names_count = 3 +hotlist_names_length = 0 +hotlist_names_level = 12 +hotlist_names_merged_buffers = off +hotlist_prefix = "H: " +hotlist_remove = merged +hotlist_short_names = on +hotlist_sort = group_time_asc +hotlist_suffix = "" +hotlist_unique_numbers = on +input_cursor_scroll = 20 +input_share = none +input_share_overwrite = off +input_undo_max = 32 +item_away_message = on +item_buffer_filter = "*" +item_buffer_zoom = "!" +item_mouse_status = "M" +item_time_format = "%H:%M" +jump_current_to_previous_buffer = on +jump_previous_buffer_when_closing = on +jump_smart_back_to_buffer = on +key_bind_safe = on +key_grab_delay = 800 +mouse = off +mouse_timer_delay = 100 +nick_color_force = "" +nick_color_hash = djb2 +nick_color_stop_chars = "_|[" +nick_prefix = "" +nick_suffix = "" +paste_auto_add_newline = on +paste_bracketed = on +paste_bracketed_timer_delay = 10 +paste_max_lines = 1 +prefix_action = " *" +prefix_align = right +prefix_align_max = 0 +prefix_align_min = 0 +prefix_align_more = "+" +prefix_align_more_after = on +prefix_buffer_align = right +prefix_buffer_align_max = 0 +prefix_buffer_align_more = "+" +prefix_buffer_align_more_after = on +prefix_error = "=!=" +prefix_join = "-->" +prefix_network = "--" +prefix_quit = "<--" +prefix_same_nick = "" +prefix_suffix = "|" +quote_nick_prefix = "<" +quote_nick_suffix = ">" +quote_time_format = "%H:%M:%S" +read_marker = line +read_marker_always_show = off +read_marker_string = "- " +save_config_on_exit = on +save_layout_on_exit = none +scroll_amount = 3 +scroll_bottom_after_switch = off +scroll_page_percent = 100 +search_text_not_found_alert = on +separator_horizontal = "-" +separator_vertical = "" +tab_width = 1 +time_format = "%a, %d %b %Y %T" +window_auto_zoom = off +window_separator_horizontal = on +window_separator_vertical = on +window_title = "WeeChat ${info:version}" +word_chars_highlight = "!\u00A0,-,_,|,alnum" +word_chars_input = "!\u00A0,-,_,|,alnum" + +[palette] + +[color] +bar_more = lightmagenta +chat = default +chat_bg = default +chat_buffer = white +chat_channel = white +chat_day_change = cyan +chat_delimiters = green +chat_highlight = yellow +chat_highlight_bg = magenta +chat_host = cyan +chat_inactive_buffer = default +chat_inactive_window = default +chat_nick = lightcyan +chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue" +chat_nick_offline = default +chat_nick_offline_highlight = default +chat_nick_offline_highlight_bg = blue +chat_nick_other = cyan +chat_nick_prefix = green +chat_nick_self = white +chat_nick_suffix = green +chat_prefix_action = white +chat_prefix_buffer = brown +chat_prefix_buffer_inactive_buffer = default +chat_prefix_error = yellow +chat_prefix_join = lightgreen +chat_prefix_more = lightmagenta +chat_prefix_network = magenta +chat_prefix_quit = lightred +chat_prefix_suffix = green +chat_read_marker = magenta +chat_read_marker_bg = default +chat_server = brown +chat_tags = red +chat_text_found = yellow +chat_text_found_bg = lightmagenta +chat_time = default +chat_time_delimiters = brown +chat_value = cyan +chat_value_null = blue +emphasized = yellow +emphasized_bg = magenta +input_actions = lightgreen +input_text_not_found = red +item_away = yellow +nicklist_away = cyan +nicklist_group = green +separator = blue +status_count_highlight = magenta +status_count_msg = brown +status_count_other = default +status_count_private = green +status_data_highlight = lightmagenta +status_data_msg = yellow +status_data_other = default +status_data_private = lightgreen +status_filter = green +status_more = yellow +status_mouse = green +status_name = white +status_name_ssl = lightgreen +status_nicklist_count = default +status_number = yellow +status_time = default + +[completion] +base_word_until_cursor = on +command_inline = on +default_template = "%(nicks)|%(irc_channels)" +nick_add_space = on +nick_completer = ":" +nick_first_only = off +nick_ignore_chars = "[]`_-^" +partial_completion_alert = on +partial_completion_command = on +partial_completion_command_arg = on +partial_completion_count = on +partial_completion_other = on + +[history] +display_default = 5 +max_buffer_lines_minutes = 0 +max_buffer_lines_number = 4096 +max_commands = 100 +max_visited_buffers = 50 + +[proxy] + +[network] +connection_timeout = 60 +gnutls_ca_file = "/etc/ssl/ca-bundle.pem" +gnutls_handshake_timeout = 30 +proxy_curl = "" + +[plugin] +autoload = "*" +debug = off +extension = ".so,.dll" +path = "%h/plugins" +save_config_on_unload = on + +[bar] +input.color_bg = default +input.color_delim = cyan +input.color_fg = default +input.conditions = "" +input.filling_left_right = vertical +input.filling_top_bottom = horizontal +input.hidden = off +input.items = "[input_prompt]+(away),[input_search],[input_paste],input_text" +input.position = bottom +input.priority = 1000 +input.separator = off +input.size = 1 +input.size_max = 0 +input.type = window +isetbar.color_bg = default +isetbar.color_delim = cyan +isetbar.color_fg = default +isetbar.conditions = "" +isetbar.filling_left_right = vertical +isetbar.filling_top_bottom = horizontal +isetbar.hidden = on +isetbar.items = "isetbar_help" +isetbar.position = top +isetbar.priority = 0 +isetbar.separator = on +isetbar.size = 3 +isetbar.size_max = 3 +isetbar.type = window +nicklist.color_bg = default +nicklist.color_delim = cyan +nicklist.color_fg = default +nicklist.conditions = "${nicklist}" +nicklist.filling_left_right = vertical +nicklist.filling_top_bottom = columns_vertical +nicklist.hidden = off +nicklist.items = "buffer_nicklist" +nicklist.position = right +nicklist.priority = 200 +nicklist.separator = on +nicklist.size = 0 +nicklist.size_max = 0 +nicklist.type = window +status.color_bg = darkgray +status.color_delim = cyan +status.color_fg = default +status.conditions = "" +status.filling_left_right = vertical +status.filling_top_bottom = horizontal +status.hidden = off +status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion" +status.position = bottom +status.priority = 500 +status.separator = off +status.size = 1 +status.size_max = 0 +status.type = window +title.color_bg = blue +title.color_delim = cyan +title.color_fg = default +title.conditions = "" +title.filling_left_right = vertical +title.filling_top_bottom = horizontal +title.hidden = off +title.items = "buffer_title" +title.position = top +title.priority = 500 +title.separator = off +title.size = 1 +title.size_max = 0 +title.type = window + +[layout] + +[notify] + +[filter] + +[key] +ctrl-? = "/input delete_previous_char" +ctrl-A = "/input move_beginning_of_line" +ctrl-B = "/input move_previous_char" +ctrl-C_ = "/input insert \x1F" +ctrl-Cb = "/input insert \x02" +ctrl-Cc = "/input insert \x03" +ctrl-Ci = "/input insert \x1D" +ctrl-Co = "/input insert \x0F" +ctrl-Cv = "/input insert \x16" +ctrl-D = "/input delete_next_char" +ctrl-E = "/input move_end_of_line" +ctrl-F = "/input move_next_char" +ctrl-H = "/input delete_previous_char" +ctrl-I = "/input complete_next" +ctrl-J = "/input return" +ctrl-K = "/input delete_end_of_line" +ctrl-L = "/window refresh" +ctrl-M = "/input return" +ctrl-N = "/buffer +1" +ctrl-P = "/buffer -1" +ctrl-R = "/input search_text_here" +ctrl-Sctrl-U = "/input set_unread" +ctrl-T = "/input transpose_chars" +ctrl-U = "/input delete_beginning_of_line" +ctrl-W = "/input delete_previous_word" +ctrl-X = "/input switch_active_buffer" +ctrl-Y = "/input clipboard_paste" +meta-meta2-1~ = "/window scroll_top" +meta-meta2-23~ = "/bar scroll nicklist * b" +meta-meta2-24~ = "/bar scroll nicklist * e" +meta-meta2-4~ = "/window scroll_bottom" +meta-meta2-5~ = "/window scroll_up" +meta-meta2-6~ = "/window scroll_down" +meta-meta2-7~ = "/window scroll_top" +meta-meta2-8~ = "/window scroll_bottom" +meta-meta2-A = "/buffer -1" +meta-meta2-B = "/buffer +1" +meta-meta2-C = "/buffer +1" +meta-meta2-D = "/buffer -1" +meta-- = "/filter toggle @" +meta-/ = "/input jump_last_buffer_displayed" +meta-0 = "/buffer *10" +meta-1 = "/buffer *1" +meta-2 = "/buffer *2" +meta-3 = "/buffer *3" +meta-4 = "/buffer *4" +meta-5 = "/buffer *5" +meta-6 = "/buffer *6" +meta-7 = "/buffer *7" +meta-8 = "/buffer *8" +meta-9 = "/buffer *9" +meta-< = "/input jump_previously_visited_buffer" +meta-= = "/filter toggle" +meta-> = "/input jump_next_visited_buffer" +meta-OA = "/input history_global_previous" +meta-OB = "/input history_global_next" +meta-OC = "/input move_next_word" +meta-OD = "/input move_previous_word" +meta-OF = "/input move_end_of_line" +meta-OH = "/input move_beginning_of_line" +meta-Oa = "/input history_global_previous" +meta-Ob = "/input history_global_next" +meta-Oc = "/input move_next_word" +meta-Od = "/input move_previous_word" +meta2-15~ = "/buffer -1" +meta2-17~ = "/buffer +1" +meta2-18~ = "/window -1" +meta2-19~ = "/window +1" +meta2-1;3A = "/buffer -1" +meta2-1;3B = "/buffer +1" +meta2-1;3C = "/buffer +1" +meta2-1;3D = "/buffer -1" +meta2-1;3F = "/window scroll_bottom" +meta2-1;3H = "/window scroll_top" +meta2-1;5A = "/input history_global_previous" +meta2-1;5B = "/input history_global_next" +meta2-1;5C = "/input move_next_word" +meta2-1;5D = "/input move_previous_word" +meta2-1~ = "/input move_beginning_of_line" +meta2-200~ = "/input paste_start" +meta2-201~ = "/input paste_stop" +meta2-20~ = "/bar scroll title * -30%" +meta2-21~ = "/bar scroll title * +30%" +meta2-23;3~ = "/bar scroll nicklist * b" +meta2-23~ = "/bar scroll nicklist * -100%" +meta2-24;3~ = "/bar scroll nicklist * e" +meta2-24~ = "/bar scroll nicklist * +100%" +meta2-3~ = "/input delete_next_char" +meta2-4~ = "/input move_end_of_line" +meta2-5;3~ = "/window scroll_up" +meta2-5~ = "/window page_up" +meta2-6;3~ = "/window scroll_down" +meta2-6~ = "/window page_down" +meta2-7~ = "/input move_beginning_of_line" +meta2-8~ = "/input move_end_of_line" +meta2-A = "/input history_previous" +meta2-B = "/input history_next" +meta2-C = "/input move_next_char" +meta2-D = "/input move_previous_char" +meta2-F = "/input move_end_of_line" +meta2-G = "/window page_down" +meta2-H = "/input move_beginning_of_line" +meta2-I = "/window page_up" +meta2-Z = "/input complete_previous" +meta2-[E = "/buffer -1" +meta-_ = "/input redo" +meta-a = "/input jump_smart" +meta-b = "/input move_previous_word" +meta-d = "/input delete_next_word" +meta-f = "/input move_next_word" +meta-h = "/input hotlist_clear" +meta-jmeta-f = "/buffer -" +meta-jmeta-l = "/buffer +" +meta-jmeta-r = "/server raw" +meta-jmeta-s = "/server jump" +meta-j01 = "/buffer *1" +meta-j02 = "/buffer *2" +meta-j03 = "/buffer *3" +meta-j04 = "/buffer *4" +meta-j05 = "/buffer *5" +meta-j06 = "/buffer *6" +meta-j07 = "/buffer *7" +meta-j08 = "/buffer *8" +meta-j09 = "/buffer *9" +meta-j10 = "/buffer *10" +meta-j11 = "/buffer *11" +meta-j12 = "/buffer *12" +meta-j13 = "/buffer *13" +meta-j14 = "/buffer *14" +meta-j15 = "/buffer *15" +meta-j16 = "/buffer *16" +meta-j17 = "/buffer *17" +meta-j18 = "/buffer *18" +meta-j19 = "/buffer *19" +meta-j20 = "/buffer *20" +meta-j21 = "/buffer *21" +meta-j22 = "/buffer *22" +meta-j23 = "/buffer *23" +meta-j24 = "/buffer *24" +meta-j25 = "/buffer *25" +meta-j26 = "/buffer *26" +meta-j27 = "/buffer *27" +meta-j28 = "/buffer *28" +meta-j29 = "/buffer *29" +meta-j30 = "/buffer *30" +meta-j31 = "/buffer *31" +meta-j32 = "/buffer *32" +meta-j33 = "/buffer *33" +meta-j34 = "/buffer *34" +meta-j35 = "/buffer *35" +meta-j36 = "/buffer *36" +meta-j37 = "/buffer *37" +meta-j38 = "/buffer *38" +meta-j39 = "/buffer *39" +meta-j40 = "/buffer *40" +meta-j41 = "/buffer *41" +meta-j42 = "/buffer *42" +meta-j43 = "/buffer *43" +meta-j44 = "/buffer *44" +meta-j45 = "/buffer *45" +meta-j46 = "/buffer *46" +meta-j47 = "/buffer *47" +meta-j48 = "/buffer *48" +meta-j49 = "/buffer *49" +meta-j50 = "/buffer *50" +meta-j51 = "/buffer *51" +meta-j52 = "/buffer *52" +meta-j53 = "/buffer *53" +meta-j54 = "/buffer *54" +meta-j55 = "/buffer *55" +meta-j56 = "/buffer *56" +meta-j57 = "/buffer *57" +meta-j58 = "/buffer *58" +meta-j59 = "/buffer *59" +meta-j60 = "/buffer *60" +meta-j61 = "/buffer *61" +meta-j62 = "/buffer *62" +meta-j63 = "/buffer *63" +meta-j64 = "/buffer *64" +meta-j65 = "/buffer *65" +meta-j66 = "/buffer *66" +meta-j67 = "/buffer *67" +meta-j68 = "/buffer *68" +meta-j69 = "/buffer *69" +meta-j70 = "/buffer *70" +meta-j71 = "/buffer *71" +meta-j72 = "/buffer *72" +meta-j73 = "/buffer *73" +meta-j74 = "/buffer *74" +meta-j75 = "/buffer *75" +meta-j76 = "/buffer *76" +meta-j77 = "/buffer *77" +meta-j78 = "/buffer *78" +meta-j79 = "/buffer *79" +meta-j80 = "/buffer *80" +meta-j81 = "/buffer *81" +meta-j82 = "/buffer *82" +meta-j83 = "/buffer *83" +meta-j84 = "/buffer *84" +meta-j85 = "/buffer *85" +meta-j86 = "/buffer *86" +meta-j87 = "/buffer *87" +meta-j88 = "/buffer *88" +meta-j89 = "/buffer *89" +meta-j90 = "/buffer *90" +meta-j91 = "/buffer *91" +meta-j92 = "/buffer *92" +meta-j93 = "/buffer *93" +meta-j94 = "/buffer *94" +meta-j95 = "/buffer *95" +meta-j96 = "/buffer *96" +meta-j97 = "/buffer *97" +meta-j98 = "/buffer *98" +meta-j99 = "/buffer *99" +meta-k = "/input grab_key_command" +meta-l = "/window bare" +meta-m = "/mute mouse toggle" +meta-n = "/window scroll_next_highlight" +meta-p = "/window scroll_previous_highlight" +meta-r = "/input delete_line" +meta-s = "/mute aspell toggle" +meta-u = "/window scroll_unread" +meta-wmeta-meta2-A = "/window up" +meta-wmeta-meta2-B = "/window down" +meta-wmeta-meta2-C = "/window right" +meta-wmeta-meta2-D = "/window left" +meta-wmeta2-1;3A = "/window up" +meta-wmeta2-1;3B = "/window down" +meta-wmeta2-1;3C = "/window right" +meta-wmeta2-1;3D = "/window left" +meta-wmeta-b = "/window balance" +meta-wmeta-s = "/window swap" +meta-x = "/input zoom_merged_buffer" +meta-z = "/window zoom" +ctrl-_ = "/input undo" + +[key_search] +ctrl-I = "/input search_switch_where" +ctrl-J = "/input search_stop_here" +ctrl-M = "/input search_stop_here" +ctrl-Q = "/input search_stop" +ctrl-R = "/input search_switch_regex" +meta2-A = "/input search_previous" +meta2-B = "/input search_next" +meta-c = "/input search_switch_case" + +[key_cursor] +ctrl-J = "/cursor stop" +ctrl-M = "/cursor stop" +meta-meta2-A = "/cursor move area_up" +meta-meta2-B = "/cursor move area_down" +meta-meta2-C = "/cursor move area_right" +meta-meta2-D = "/cursor move area_left" +meta2-1;3A = "/cursor move area_up" +meta2-1;3B = "/cursor move area_down" +meta2-1;3C = "/cursor move area_right" +meta2-1;3D = "/cursor move area_left" +meta2-A = "/cursor move up" +meta2-B = "/cursor move down" +meta2-C = "/cursor move right" +meta2-D = "/cursor move left" +@item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}" +@item(buffer_nicklist):k = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):q = "/window ${_window_number};/query ${nick};/cursor stop" +@item(buffer_nicklist):w = "/window ${_window_number};/whois ${nick}" +@chat:Q = "hsignal:chat_quote_time_prefix_message;/cursor stop" +@chat:m = "hsignal:chat_quote_message;/cursor stop" +@chat:q = "hsignal:chat_quote_prefix_message;/cursor stop" + +[key_mouse] +@bar(input):button2 = "/input grab_mouse_area" +@bar(nicklist):button1-gesture-down = "/bar scroll nicklist ${_window_number} +100%" +@bar(nicklist):button1-gesture-down-long = "/bar scroll nicklist ${_window_number} e" +@bar(nicklist):button1-gesture-up = "/bar scroll nicklist ${_window_number} -100%" +@bar(nicklist):button1-gesture-up-long = "/bar scroll nicklist ${_window_number} b" +@chat(perl.iset):button1 = "hsignal:iset_mouse" +@chat(perl.iset):button2* = "hsignal:iset_mouse" +@chat(perl.iset):wheeldown = "/repeat 5 /iset **down" +@chat(perl.iset):wheelup = "/repeat 5 /iset **up" +@chat(script.scripts):button1 = "/window ${_window_number};/script go ${_chat_line_y}" +@chat(script.scripts):button2 = "/window ${_window_number};/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}" +@chat(script.scripts):wheeldown = "/script down 5" +@chat(script.scripts):wheelup = "/script up 5" +@item(buffer_nicklist):button1 = "/window ${_window_number};/query ${nick}" +@item(buffer_nicklist):button1-gesture-left = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}" +@item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}" +@bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%" +@bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%" +@chat:button1 = "/window ${_window_number}" +@chat:button1-gesture-left = "/window ${_window_number};/buffer -1" +@chat:button1-gesture-left-long = "/window ${_window_number};/buffer 1" +@chat:button1-gesture-right = "/window ${_window_number};/buffer +1" +@chat:button1-gesture-right-long = "/window ${_window_number};/input jump_last_buffer" +@chat:ctrl-wheeldown = "/window scroll_horiz -window ${_window_number} +10%" +@chat:ctrl-wheelup = "/window scroll_horiz -window ${_window_number} -10%" +@chat:wheeldown = "/window scroll_down -window ${_window_number}" +@chat:wheelup = "/window scroll_up -window ${_window_number}" +@*:button3 = "/cursor go ${_x},${_y}" diff --git a/.weechat-tutorial/weechat.log b/.weechat-tutorial/weechat.log new file mode 100755 index 0000000..a1606df --- /dev/null +++ b/.weechat-tutorial/weechat.log @@ -0,0 +1,29 @@ +[2018-01-19 19:53:04] WeeChat 1.5 (compiled on Sep 25 2017 08:04) +[2018-01-19 19:53:04] Reading configuration file sec.conf +[2018-01-19 19:53:04] Reading configuration file weechat.conf +[2018-01-19 19:53:04] Reading configuration file plugins.conf +[2018-01-19 19:53:04] Reading configuration file charset.conf +[2018-01-19 19:53:04] Reading configuration file logger.conf +[2018-01-19 19:53:04] Reading configuration file exec.conf +[2018-01-19 19:53:04] Reading configuration file trigger.conf +[2018-01-19 19:53:04] Reading configuration file aspell.conf +[2018-01-19 19:53:04] Reading configuration file alias.conf +[2018-01-19 19:53:04] Reading configuration file xfer.conf +[2018-01-19 19:53:04] Reading configuration file irc.conf +[2018-01-19 19:53:04] Reading configuration file relay.conf +[2018-01-19 19:53:04] Reading configuration file iset.conf +[2018-01-19 19:53:04] Reading configuration file script.conf +[2018-01-19 20:26:40] Writing configuration file plugins.conf +[2018-01-19 20:26:40] Writing configuration file iset.conf +[2018-01-19 20:26:40] Writing configuration file logger.conf +[2018-01-19 20:26:40] Writing configuration file script.conf +[2018-01-19 20:26:40] Writing configuration file exec.conf +[2018-01-19 20:26:40] Writing configuration file irc.conf +[2018-01-19 20:26:40] Writing configuration file trigger.conf +[2018-01-19 20:26:40] Writing configuration file xfer.conf +[2018-01-19 20:26:40] Writing configuration file charset.conf +[2018-01-19 20:26:40] Writing configuration file alias.conf +[2018-01-19 20:26:40] Writing configuration file relay.conf +[2018-01-19 20:26:40] Writing configuration file aspell.conf +[2018-01-19 20:26:40] Writing configuration file weechat.conf +[2018-01-19 20:26:40] Writing configuration file sec.conf diff --git a/.weechat-tutorial/xfer.conf b/.weechat-tutorial/xfer.conf new file mode 100755 index 0000000..39ac5bd --- /dev/null +++ b/.weechat-tutorial/xfer.conf @@ -0,0 +1,39 @@ +# +# weechat -- xfer.conf +# + +[look] +auto_open_buffer = on +progress_bar_size = 20 +pv_tags = "notify_private" + +[color] +status_aborted = lightred +status_active = lightblue +status_connecting = yellow +status_done = lightgreen +status_failed = lightred +status_waiting = lightcyan +text = default +text_bg = default +text_selected = white + +[network] +blocksize = 65536 +fast_send = on +own_ip = "" +port_range = "" +speed_limit = 0 +timeout = 300 + +[file] +auto_accept_chats = off +auto_accept_files = off +auto_accept_nicks = "" +auto_check_crc32 = off +auto_rename = on +auto_resume = on +convert_spaces = on +download_path = "%h/xfer" +upload_path = "~" +use_nick_in_filename = on diff --git a/.weechat/alias.conf b/.weechat/alias.conf new file mode 100644 index 0000000..d993aa0 --- /dev/null +++ b/.weechat/alias.conf @@ -0,0 +1,48 @@ +# +# weechat -- alias.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[cmd] +AAWAY = "allserv /away" +AME = "allchan /me" +AMSG = "allchan /msg *" +ANICK = "allserv /nick" +BEEP = "print -beep" +BYE = "quit" +C = "buffer clear" +CHAT = "dcc chat" +CL = "buffer clear" +CLOSE = "buffer close" +EXIT = "quit" +IG = "ignore" +J = "join" +K = "kick" +KB = "kickban" +LEAVE = "part" +M = "msg" +MSGBUF = "command -buffer $1 * /input send $2-" +MUB = "unban *" +N = "names" +Q = "query" +REDRAW = "window refresh" +SAY = "msg *" +SIGNOFF = "quit" +T = "topic" +UB = "unban" +UMODE = "mode $nick" +V = "command core version" +W = "who" +WC = "window merge" +WI = "whois" +WII = "whois $1 $1" +WW = "whowas" + +[completion] +MSGBUF = "%(buffers_plugins_names)" diff --git a/.weechat/aspell.conf b/.weechat/aspell.conf new file mode 100644 index 0000000..27b16b8 --- /dev/null +++ b/.weechat/aspell.conf @@ -0,0 +1,33 @@ +# +# weechat -- aspell.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[color] +misspelled = lightred +suggestion = default +suggestion_delimiter_dict = cyan +suggestion_delimiter_word = cyan + +[check] +commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" +default_dict = "" +during_search = off +enabled = off +real_time = off +suggestions = -1 +word_min_length = 2 + +[dict] + +[look] +suggestion_delimiter_dict = " / " +suggestion_delimiter_word = "," + +[option] diff --git a/.weechat/buffers.conf b/.weechat/buffers.conf new file mode 100644 index 0000000..1775010 --- /dev/null +++ b/.weechat/buffers.conf @@ -0,0 +1,80 @@ +# +# weechat -- buffers.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[color] +current_bg = red +current_fg = lightcyan +default_bg = default +default_fg = default +hotlist_highlight_bg = default +hotlist_highlight_fg = magenta +hotlist_low_bg = default +hotlist_low_fg = white +hotlist_message_bg = default +hotlist_message_fg = yellow +hotlist_private_bg = default +hotlist_private_fg = lightgreen +none_channel_bg = default +none_channel_fg = default +number = lightgreen +number_char = lightgreen +prefix_bufname = default +queries_default_bg = default +queries_default_fg = default +queries_highlight_bg = default +queries_highlight_fg = default +queries_message_bg = default +queries_message_fg = default +suffix_bufname = default +whitelist_default_bg = default +whitelist_default_fg = default +whitelist_highlight_bg = default +whitelist_highlight_fg = default +whitelist_low_bg = default +whitelist_low_fg = default +whitelist_message_bg = default +whitelist_message_fg = default +whitelist_private_bg = default +whitelist_private_fg = default + +[look] +core_to_front = off +detach = 0 +detach_buffer_immediately = "" +detach_buffer_immediately_level = 2 +detach_display_window_number = off +detach_displayed_buffers = on +detach_free_content = off +detach_query = off +hide_merged_buffers = none +hotlist_counter = off +immune_detach_buffers = "" +indenting = off +indenting_amount = 2 +indenting_number = on +jump_prev_next_visited_buffer = off +mark_inactive = off +mouse_move_buffer = on +mouse_wheel = on +name_crop_suffix = "+" +name_size_max = 0 +number_char = "." +prefix = off +prefix_bufname = "" +prefix_empty = on +prefix_for_query = "" +short_names = on +show_lag = off +show_number = on +sort = number +suffix_bufname = "" +toggle_bar = on +whitelist_buffers = "" diff --git a/.weechat/buflist.conf b/.weechat/buflist.conf new file mode 100644 index 0000000..d285f89 --- /dev/null +++ b/.weechat/buflist.conf @@ -0,0 +1,39 @@ +# +# weechat -- buflist.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +add_newline = on +auto_scroll = 50 +display_conditions = "${buffer.hidden}==0" +enabled = on +mouse_jump_visited_buffer = off +mouse_move_buffer = on +mouse_wheel = on +nick_prefix = off +nick_prefix_empty = on +signals_refresh = "" +sort = "number,-active" + +[format] +buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}" +buffer_current = "${color:,blue}${format_buffer}" +hotlist = " ${color:green}(${hotlist}${color:green})" +hotlist_highlight = "${color:magenta}" +hotlist_low = "${color:white}" +hotlist_message = "${color:brown}" +hotlist_none = "${color:default}" +hotlist_private = "${color:green}" +hotlist_separator = "${color:default}," +indent = " " +lag = " ${color:green}[${color:brown}${lag}${color:green}]" +name = "${name}" +nick_prefix = "${color_nick_prefix}${nick_prefix}" +number = "${color:green}${number}${if:${number_displayed}?.: }" diff --git a/.weechat/charset.conf b/.weechat/charset.conf new file mode 100644 index 0000000..00d304c --- /dev/null +++ b/.weechat/charset.conf @@ -0,0 +1,18 @@ +# +# weechat -- charset.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[default] +decode = "iso-8859-1" +encode = "" + +[decode] + +[encode] diff --git a/.weechat/exec.conf b/.weechat/exec.conf new file mode 100644 index 0000000..db02a5b --- /dev/null +++ b/.weechat/exec.conf @@ -0,0 +1,19 @@ +# +# weechat -- exec.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[command] +default_options = "" +purge_delay = 0 +shell = "sh" + +[color] +flag_finished = lightred +flag_running = lightgreen diff --git a/.weechat/fifo.conf b/.weechat/fifo.conf new file mode 100644 index 0000000..904985d --- /dev/null +++ b/.weechat/fifo.conf @@ -0,0 +1,14 @@ +# +# weechat -- fifo.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[file] +enabled = on +path = "%h/weechat_fifo" diff --git a/.weechat/fset.conf b/.weechat/fset.conf new file mode 100644 index 0000000..668266c --- /dev/null +++ b/.weechat/fset.conf @@ -0,0 +1,95 @@ +# +# weechat -- fset.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_unmark = off +condition_catch_set = "${count} >= 1" +export_help_default = on +format_number = 1 +marked_string = "*" +scroll_horizontal = 10 +show_plugins_desc = off +sort = "~name" +unmarked_string = " " +use_color_value = off +use_keys = on +use_mute = off + +[format] +export_help = "# ${description2}" +export_option = "/set ${name} ${quoted_value}" +export_option_null = "/unset ${name}" +option1 = "" +option2 = "${marked} ${name} ${type} ${value2}${newline} ${empty_name} ${_default_value}${color:darkgray} -- ${min}..${max}${newline} ${empty_name} ${description}" + +[color] +default_value = default +default_value_selected = white +description = default +description_selected = white +file = default +file_changed = brown +file_changed_selected = yellow +file_selected = white +help_default_value = white +help_description = default +help_name = white +help_quotes = darkgray +help_values = default +index = cyan +index_selected = lightcyan +line_marked_bg1 = default +line_marked_bg2 = default +line_selected_bg1 = blue +line_selected_bg2 = red +marked = brown +marked_selected = yellow +max = default +max_selected = white +min = default +min_selected = white +name = default +name_changed = brown +name_changed_selected = yellow +name_selected = white +option = default +option_changed = brown +option_changed_selected = yellow +option_selected = white +parent_name = default +parent_name_selected = white +parent_value = cyan +parent_value_selected = lightcyan +quotes = darkgray +quotes_changed = default +quotes_changed_selected = white +quotes_selected = default +section = default +section_changed = brown +section_changed_selected = yellow +section_selected = white +string_values = default +string_values_selected = white +title_count_options = cyan +title_current_option = lightcyan +title_filter = yellow +title_marked_options = lightgreen +title_sort = white +type = green +type_selected = lightgreen +unmarked = default +unmarked_selected = white +value = cyan +value_changed = brown +value_changed_selected = yellow +value_selected = lightcyan +value_undef = magenta +value_undef_selected = lightmagenta diff --git a/.weechat/guile.conf b/.weechat/guile.conf new file mode 100644 index 0000000..07a4910 --- /dev/null +++ b/.weechat/guile.conf @@ -0,0 +1,14 @@ +# +# weechat -- guile.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/irc.conf b/.weechat/irc.conf new file mode 100644 index 0000000..0fc8fcb --- /dev/null +++ b/.weechat/irc.conf @@ -0,0 +1,195 @@ +# +# weechat -- irc.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +buffer_open_before_autojoin = on +buffer_open_before_join = off +buffer_switch_autojoin = on +buffer_switch_join = on +color_nicks_in_names = off +color_nicks_in_nicklist = off +color_nicks_in_server_messages = on +color_pv_nick_like_channel = on +ctcp_time_format = "%a, %d %b %Y %T %z" +display_away = local +display_ctcp_blocked = on +display_ctcp_reply = on +display_ctcp_unknown = on +display_host_join = on +display_host_join_local = on +display_host_quit = on +display_join_message = "329,332,333,366" +display_old_topic = on +display_pv_away_once = on +display_pv_back = on +highlight_channel = "$nick" +highlight_pv = "$nick" +highlight_server = "$nick" +highlight_tags_restrict = "irc_privmsg,irc_notice" +item_channel_modes_hide_args = "k" +item_display_server = buffer_plugin +item_nick_modes = on +item_nick_prefix = on +join_auto_add_chantype = off +msgbuffer_fallback = current +new_channel_position = none +new_pv_position = none +nick_completion_smart = speakers +nick_mode = prefix +nick_mode_empty = off +nicks_hide_password = "nickserv" +notice_as_pv = auto +notice_welcome_redirect = on +notice_welcome_tags = "" +notify_tags_ison = "notify_message" +notify_tags_whois = "notify_message" +part_closes_buffer = off +pv_buffer = independent +pv_tags = "notify_private" +raw_messages = 256 +server_buffer = merge_with_core +smart_filter = on +smart_filter_chghost = on +smart_filter_delay = 5 +smart_filter_join = on +smart_filter_join_unmask = 30 +smart_filter_mode = "+" +smart_filter_nick = on +smart_filter_quit = on +temporary_servers = off +topic_strip_colors = off + +[color] +input_nick = lightcyan +item_channel_modes = default +item_lag_counting = default +item_lag_finished = yellow +item_nick_modes = default +message_chghost = brown +message_join = green +message_quit = red +mirc_remap = "1,-1:darkgray" +nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue" +notice = green +reason_quit = default +topic_current = default +topic_new = white +topic_old = default + +[network] +autoreconnect_delay_growing = 2 +autoreconnect_delay_max = 600 +ban_mask_default = "*!$ident@$host" +channel_encode = off +colors_receive = on +colors_send = on +lag_check = 60 +lag_max = 1800 +lag_min_show = 500 +lag_reconnect = 300 +lag_refresh_interval = 1 +notify_check_ison = 1 +notify_check_whois = 5 +sasl_fail_unavailable = on +send_unknown_commands = off +whois_double_nick = off + +[msgbuffer] + +[ctcp] + +[ignore] + +[server_default] +addresses = "" +anti_flood_prio_high = 2 +anti_flood_prio_low = 2 +autoconnect = off +autojoin = "" +autoreconnect = on +autoreconnect_delay = 10 +autorejoin = off +autorejoin_delay = 30 +away_check = 0 +away_check_max_nicks = 25 +capabilities = "" +command = "" +command_delay = 0 +connection_timeout = 60 +ipv6 = on +local_hostname = "" +msg_kick = "" +msg_part = "WeeChat ${info:version}" +msg_quit = "WeeChat ${info:version}" +nicks = "vgg,vgg1,vgg2,vgg3,vgg4" +nicks_alternate = on +notify = "" +password = "" +proxy = "" +realname = "" +sasl_fail = continue +sasl_key = "" +sasl_mechanism = plain +sasl_password = "" +sasl_timeout = 15 +sasl_username = "" +split_msg_max_length = 512 +ssl = off +ssl_cert = "" +ssl_dhkey_size = 2048 +ssl_fingerprint = "" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +ssl_verify = on +usermode = "" +username = "vgg" + +[server] +freenode.addresses = "chat.freenode.net/7000" +freenode.proxy +freenode.ipv6 +freenode.ssl = on +freenode.ssl_cert +freenode.ssl_priorities +freenode.ssl_dhkey_size +freenode.ssl_fingerprint +freenode.ssl_verify +freenode.password +freenode.capabilities +freenode.sasl_mechanism +freenode.sasl_username +freenode.sasl_password +freenode.sasl_key +freenode.sasl_timeout +freenode.sasl_fail +freenode.autoconnect = on +freenode.autoreconnect +freenode.autoreconnect_delay +freenode.nicks +freenode.nicks_alternate +freenode.username +freenode.realname +freenode.local_hostname +freenode.usermode +freenode.command +freenode.command_delay +freenode.autojoin +freenode.autorejoin +freenode.autorejoin_delay +freenode.connection_timeout +freenode.anti_flood_prio_high +freenode.anti_flood_prio_low +freenode.away_check +freenode.away_check_max_nicks +freenode.msg_kick +freenode.msg_part +freenode.msg_quit +freenode.notify +freenode.split_msg_max_length diff --git a/.weechat/logger.conf b/.weechat/logger.conf new file mode 100644 index 0000000..b7b5efc --- /dev/null +++ b/.weechat/logger.conf @@ -0,0 +1,35 @@ +# +# weechat -- logger.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +backlog = 20 +backlog_conditions = "" + +[color] +backlog_end = default +backlog_line = default + +[file] +auto_log = on +flush_delay = 120 +fsync = off +info_lines = off +mask = "$plugin.$name.weechatlog" +name_lower_case = on +nick_prefix = "" +nick_suffix = "" +path = "%h/logs/" +replacement_char = "_" +time_format = "%Y-%m-%d %H:%M:%S" + +[level] + +[mask] diff --git a/.weechat/lua.conf b/.weechat/lua.conf new file mode 100644 index 0000000..fa4966b --- /dev/null +++ b/.weechat/lua.conf @@ -0,0 +1,14 @@ +# +# weechat -- lua.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/perl.conf b/.weechat/perl.conf new file mode 100644 index 0000000..31924b9 --- /dev/null +++ b/.weechat/perl.conf @@ -0,0 +1,14 @@ +# +# weechat -- perl.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/perl/autoload/xterm_paste.pl b/.weechat/perl/autoload/xterm_paste.pl new file mode 120000 index 0000000..7350abe --- /dev/null +++ b/.weechat/perl/autoload/xterm_paste.pl @@ -0,0 +1 @@ +../xterm_paste.pl
\ No newline at end of file diff --git a/.weechat/perl/xterm_paste.pl b/.weechat/perl/xterm_paste.pl new file mode 100644 index 0000000..4d51812 --- /dev/null +++ b/.weechat/perl/xterm_paste.pl @@ -0,0 +1,227 @@ +use strict; use warnings; +$INC{'Encode/ConfigLocal.pm'}=1; +require Encode; + +# xterm_paste.pl is written by Nei <anti.teamidiot.de> +# and licensed under the under GNU General Public License v3 +# or any later version + +our $XTERM_COMPATIBLE = 'rxvt-uni'; + +use MIME::Base64; + +use constant SCRIPT_NAME => 'xterm_paste'; +weechat::register(SCRIPT_NAME, 'Nei <anti.teamidiot.de>', '0.1', 'GPL3', 'Bind Xterm paste to command', 'stop_paste', '') || return; +sub SCRIPT_FILE() { + my $infolistptr = weechat::infolist_get('perl_script', '', SCRIPT_NAME); + my $filename = weechat::infolist_string($infolistptr, 'filename') if weechat::infolist_next($infolistptr); + weechat::infolist_free($infolistptr); + return $filename unless @_; +} + +{ +package Nlib; +# this is a weechat perl library +use strict; use warnings; + +## i2h -- copy weechat infolist content into perl hash +## $infolist - name of the infolist in weechat +## $ptr - pointer argument (infolist dependend) +## @args - arguments to the infolist (list dependend) +## $fields - string of ref type "fields" if only certain keys are needed (optional) +## returns perl list with perl hashes for each infolist entry +sub i2h { + my %i2htm = (i => 'integer', s => 'string', p => 'pointer', b => 'buffer', t => 'time'); + local *weechat::infolist_buffer = sub { '(not implemented)' }; + my ($infolist, $ptr, @args) = @_; + $ptr ||= ""; + my $fields = ref $args[-1] eq 'fields' ? ${ pop @args } : undef; + my $infptr = weechat::infolist_get($infolist, $ptr, do { local $" = ','; "@args" }); + my @infolist; + while (weechat::infolist_next($infptr)) { + my @fields = map { + my ($t, $v) = split ':', $_, 2; + bless \$v, $i2htm{$t}; + } + split ',', + ($fields || weechat::infolist_fields($infptr)); + push @infolist, +{ do { + my (%list, %local, @local); + map { + my $fn = 'weechat::infolist_'.ref $_; + my $r = do { no strict 'refs'; &$fn($infptr, $$_) }; + if ($$_ =~ /^localvar_name_(\d+)$/) { + $local[$1] = $r; + () + } + elsif ($$_ =~ /^(localvar)_value_(\d+)$/) { + $local{$local[$2]} = $r; + $1 => \%local + } + elsif ($$_ =~ /(.*?)((?:_\d+)+)$/) { + my ($key, $idx) = ($1, $2); + my @idx = split '_', $idx; shift @idx; + my $target = \$list{$key}; + for my $x (@idx) { + my $o = 1; + if ($key eq 'key' or $key eq 'key_command') { + $o = 0; + } + if ($x-$o < 0) { + local $" = '|'; + weechat::print('',"list error: $target/$$_/$key/$x/$idx/@idx(@_)"); + $o = 0; + } + $target = \$$target->[$x-$o] + } + $$target = $r; + + my $code = qq{ + local \$[=1; + \$list{"\Q$key\E"}$idx = \$r + }; + $key => $list{$key} + } + else { + $$_ => $r + } + } @fields + } }; + } + weechat::infolist_free($infptr); + !wantarray && @infolist ? \@infolist : @infolist +} + +## hook_dynamic -- weechat::hook something and store hook reference +## $hook_call - hook type (e.g. modifier) +## $what - event type to hook (depends on $hook_call) +## $sub - subroutine name to install +## @params - parameters +sub hook_dynamic { + my ($hook_call, $what, $sub, @params) = @_; + my $caller_package = (caller)[0]; + eval qq{ + package $caller_package; + no strict 'vars'; + \$DYNAMIC_HOOKS{\$what}{\$sub} = + weechat::hook_$hook_call(\$what, \$sub, \@params) + unless exists \$DYNAMIC_HOOKS{\$what} && + exists \$DYNAMIC_HOOKS{\$what}{\$sub}; + }; + die $@ if $@; +} + +## unhook_dynamic -- weechat::unhook something where hook reference has been stored with hook_dynamic +## $what - event type that was hooked +## $sub - subroutine name that was installed +sub unhook_dynamic { + my ($what, $sub) = @_; + my $caller_package = (caller)[0]; + eval qq{ + package $caller_package; + no strict 'vars'; + weechat::unhook(\$DYNAMIC_HOOKS{\$what}{\$sub}) + if exists \$DYNAMIC_HOOKS{\$what} && + exists \$DYNAMIC_HOOKS{\$what}{\$sub}; + delete \$DYNAMIC_HOOKS{\$what}{\$sub}; + delete \$DYNAMIC_HOOKS{\$what} unless \%{\$DYNAMIC_HOOKS{\$what}}; + }; + die $@ if $@; +} + +1 +} + +weechat::hook_command(SCRIPT_NAME, 'get xterm clipboard', '', '', '', 'paste_cmd', ''); + +our $PASTE_REPLY = ''; +our $ORIG_KEY_CMD = undef; +our $PASTE_TIMEOUT; + +sub request_clip { + my ($stor) = @_; + $stor = '' unless $stor; + my $xterm_osc = "\e]52;$stor;?\a"; + my $compatible_terms = join '|', map { split /[,;]/ } split ' ', + $XTERM_COMPATIBLE; + print STDERR $xterm_osc if $ENV{'TERM'} =~ /^xterm|$compatible_terms/; + if ($ENV{'TMUX'}) { + chomp(my @tmux_clients = `tmux lsc`); + my $active_term; + my $last_time = 0; + for (@tmux_clients) { + my ($path, $rest) = split ':', $_; + next unless $rest =~ / (?:xterm|$compatible_terms)/; + my $atime = -A $path; + if ($last_time >= $atime) { + $last_time = $atime; + $active_term = $path; + } + } + if ($active_term) { + open my $pty, '>>', $active_term; + print $pty $xterm_osc; + } + } +} + +sub paste_cmd { + my (undef, undef, $args) = @_; + if ($args =~ /accept/) { insert_paste() } + else { get_paste() } +} + +sub get_paste { + $PASTE_TIMEOUT = weechat::hook_timer(1000, 0, 1, 'paste_input_stop', ''); + weechat::hook_signal_send('input_flow_free', weechat::WEECHAT_HOOK_SIGNAL_INT, 1); + Nlib::hook_dynamic('modifier', 'input_text_content', 'paste_evt2', ''); + ($ORIG_KEY_CMD) = map { $_->{command} } grep { $_->{key} eq 'ctrl-G' } + Nlib::i2h('key'); + weechat::command('', "/mute /key bind ctrl-G /@{[SCRIPT_NAME]} accept"); + request_clip(); + weechat::WEECHAT_RC_OK +} + +sub insert_paste { + my $paste; + ($paste, $PASTE_REPLY) = ($PASTE_REPLY, ''); + paste_input_stop(); + $paste =~ s/\]?52;.*;$// || + $paste =~ s/.*;//; + my $decode = decode_base64($paste); $decode =~ s/\n/\\x0a/g; + weechat::command(weechat::current_buffer(), "/input insert $decode"); + weechat::WEECHAT_RC_OK +} + +sub paste_input_stop { + my $leftover; + ($leftover, $PASTE_REPLY) = ($PASTE_REPLY, ''); + if ($PASTE_TIMEOUT) { + weechat::unhook($PASTE_TIMEOUT); + $PASTE_TIMEOUT = undef; + } + if ($ORIG_KEY_CMD) { weechat::command('', "/mute /key bind ctrl-G $ORIG_KEY_CMD"); } + else { weechat::command('', '/mute /key reset ctrl-G'); } + $ORIG_KEY_CMD = undef; + Nlib::unhook_dynamic('input_text_content', 'paste_evt2'); + if (length $leftover) { + $leftover =~ s/\\/\\\\/g; + weechat::command(weechat::current_buffer(), "/input insert $leftover"); + } + weechat::hook_signal_send('input_flow_free', weechat::WEECHAT_HOOK_SIGNAL_INT, 0); + weechat::WEECHAT_RC_OK +} + +sub paste_evt2 { + Encode::_utf8_on($_[3]); + my $buf = weechat::current_buffer(); + my $npos = weechat::buffer_get_integer($buf, 'input_pos')-1; + $PASTE_REPLY .= substr $_[3], $npos, 1, ''; + weechat::buffer_set($buf, 'input_pos', $npos); + $_[3] +} + +sub stop_paste { + paste_input_stop() if $PASTE_TIMEOUT; + weechat::WEECHAT_RC_OK +} diff --git a/.weechat/plugins.conf b/.weechat/plugins.conf new file mode 100644 index 0000000..eb17bb2 --- /dev/null +++ b/.weechat/plugins.conf @@ -0,0 +1,183 @@ +# +# weechat -- plugins.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[var] +python.notify_send.desktop_entry = "weechat" +python.notify_send.ellipsis = "[..]" +python.notify_send.escape_html = "on" +python.notify_send.hide_messages_in_buffers_that_match = "" +python.notify_send.icon = "/usr/share/icons/hicolor/32x32/apps/weechat.png" +python.notify_send.ignore_buffers = "" +python.notify_send.ignore_buffers_starting_with = "" +python.notify_send.ignore_messages_tagged_with = "notify_none,irc_join,irc_quit,irc_part,irc_status,irc_nick_back,irc_401,irc_402" +python.notify_send.ignore_nicks = "" +python.notify_send.ignore_nicks_starting_with = "" +python.notify_send.max_length = "72" +python.notify_send.min_notification_delay = "500" +python.notify_send.nick_separator = ": " +python.notify_send.notify_for_current_buffer = "on" +python.notify_send.notify_on_all_messages_in_buffers = "" +python.notify_send.notify_on_all_messages_in_buffers_that_match = "" +python.notify_send.notify_on_filtered_messages = "off" +python.notify_send.notify_on_highlights = "on" +python.notify_send.notify_on_messages_that_match = "" +python.notify_send.notify_on_privmsgs = "on" +python.notify_send.notify_when_away = "on" +python.notify_send.timeout = "5000" +python.notify_send.transient = "on" +python.notify_send.urgency = "normal" +python.slack.auto_open_threads = "true" +python.slack.background_load_all_history = "false" +python.slack.channel_name_typing_indicator = "true" +python.slack.color_buflist_muted_channels = "darkgray" +python.slack.color_deleted = "red" +python.slack.color_edited_suffix = "095" +python.slack.color_reaction_suffix = "darkgray" +python.slack.color_reaction_suffix_added_by_you = "blue" +python.slack.color_thread_suffix = "lightcyan" +python.slack.color_typing_notice = "yellow" +python.slack.colorize_private_chats = "false" +python.slack.debug_level = "3" +python.slack.debug_mode = "false" +python.slack.distracting_channels = "" +python.slack.external_user_suffix = "*" +python.slack.files_download_location = "" +python.slack.group_name_prefix = "&" +python.slack.map_underline_to = "_" +python.slack.migrated = "true" +python.slack.muted_channels_activity = "personal_highlights" +python.slack.never_away = "false" +python.slack.notify_usergroup_handle_updated = "false" +python.slack.record_events = "false" +python.slack.render_bold_as = "bold" +python.slack.render_emoji_as_string = "false" +python.slack.render_italic_as = "italic" +python.slack.send_typing_notice = "true" +python.slack.server_aliases = "" +python.slack.shared_name_prefix = "%" +python.slack.short_buffer_names = "false" +python.slack.show_buflist_presence = "true" +python.slack.show_reaction_nicks = "false" +python.slack.slack_api_token = "xoxp-464648095525-545395379730-589284192565-16dee0b63af5e422a2d05bec94ebc76e" +python.slack.slack_timeout = "20000" +python.slack.switch_buffer_on_join = "true" +python.slack.thread_messages_in_channel = "false" +python.slack.unfurl_auto_link_display = "both" +python.slack.unfurl_ignore_alt_text = "false" +python.slack.unhide_buffers_with_activity = "false" +python.slack.use_full_names = "false" +python.vimode.copy_clipboard_cmd = "xclip -selection c" +python.vimode.imap_esc = "" +python.vimode.imap_esc_timeout = "1000" +python.vimode.line_number_prefix = "" +python.vimode.line_number_suffix = " " +python.vimode.mode_indicator_cmd_color = "white" +python.vimode.mode_indicator_cmd_color_bg = "cyan" +python.vimode.mode_indicator_insert_color = "white" +python.vimode.mode_indicator_insert_color_bg = "blue" +python.vimode.mode_indicator_normal_color = "white" +python.vimode.mode_indicator_normal_color_bg = "gray" +python.vimode.mode_indicator_prefix = "" +python.vimode.mode_indicator_replace_color = "white" +python.vimode.mode_indicator_replace_color_bg = "red" +python.vimode.mode_indicator_search_color = "white" +python.vimode.mode_indicator_search_color_bg = "magenta" +python.vimode.mode_indicator_suffix = "" +python.vimode.no_warn = "off" +python.vimode.paste_clipboard_cmd = "xclip -selection c -o" +python.vimode.search_vim = "off" +python.vimode.user_mappings = "" + +[desc] +python.notify_send.desktop_entry = "Name of the desktop entry for WeeChat. Default: weechat." +python.notify_send.ellipsis = "Ellipsis to be used for notifications that are too long. Default: [..]." +python.notify_send.escape_html = "Escapes the '<', '>', and '&' characters in notification messages. Default: on." +python.notify_send.hide_messages_in_buffers_that_match = "A comma-separated list of regex patterns for names of buffers from which you want to receive notifications without messages. Default: ""." +python.notify_send.icon = "Path to an icon to be shown in notifications. Default: /usr/share/icons/hicolor/32x32/apps/weechat.png." +python.notify_send.ignore_buffers = "A comma-separated list of buffers from which no notifications should be shown. Default: ""." +python.notify_send.ignore_buffers_starting_with = "A comma-separated list of buffer prefixes from which no notifications should be shown. Default: ""." +python.notify_send.ignore_messages_tagged_with = "A comma-separated list of message tags for which no notifications should be shown. Default: notify_none,irc_join,irc_quit,irc_part,irc_status,irc_nick_back,irc_401,irc_402." +python.notify_send.ignore_nicks = "A comma-separated list of nicks from which no notifications should be shown. Default: ""." +python.notify_send.ignore_nicks_starting_with = "A comma-separated list of nick prefixes from which no notifications should be shown. Default: ""." +python.notify_send.max_length = "Maximal length of a notification (0 means no limit). Default: 72." +python.notify_send.min_notification_delay = "A minimal delay between successive notifications from the same buffer (in milliseconds; set to 0 to show all notifications). Default: 500." +python.notify_send.nick_separator = "A separator between a nick and a message. Default: : ." +python.notify_send.notify_for_current_buffer = "Send also notifications for the currently active buffer. Default: on." +python.notify_send.notify_on_all_messages_in_buffers = "A comma-separated list of buffers for which you want to receive notifications on all messages that appear in them. Default: ""." +python.notify_send.notify_on_all_messages_in_buffers_that_match = "A comma-separated list of regex patterns of buffers for which you want to receive notifications on all messages that appear in them. Default: ""." +python.notify_send.notify_on_filtered_messages = "Send notifications also on filtered (hidden) messages. Default: off." +python.notify_send.notify_on_highlights = "Send notifications on highlights. Default: on." +python.notify_send.notify_on_messages_that_match = "A comma-separated list of regex patterns that you want to receive notifications on when message matches. Default: ""." +python.notify_send.notify_on_privmsgs = "Send notifications on private messages. Default: on." +python.notify_send.notify_when_away = "Send also notifications when away. Default: on." +python.notify_send.timeout = "Time after which the notification disappears (in milliseconds; set to 0 to disable). Default: 5000." +python.notify_send.transient = "When a notification expires or is dismissed, remove it from the notification bar. Default: on." +python.notify_send.urgency = "Urgency (low, normal, critical). Default: normal." +python.slack.auto_open_threads = "Automatically open threads when mentioned or inresponse to own messages." +python.slack.background_load_all_history = "Load history for each channel in the background as soon as it opens, rather than waiting for the user to look at it." +python.slack.channel_name_typing_indicator = "Change the prefix of a channel from # to > when someone is typing in it. Note that this will (temporarily) affect the sort order if you sort buffers by name rather than by number." +python.slack.color_buflist_muted_channels = "Color to use for muted channels in the buflist" +python.slack.color_deleted = "Color to use for deleted messages and files." +python.slack.color_edited_suffix = "Color to use for (edited) suffix on messages that have been edited." +python.slack.color_reaction_suffix = "Color to use for the [:wave:(@user)] suffix on messages that have reactions attached to them." +python.slack.color_reaction_suffix_added_by_you = "Color to use for reactions that you have added." +python.slack.color_thread_suffix = "Color to use for the [thread: XXX] suffix on messages that have threads attached to them. The special value "multiple" can be used to use a different color for each thread." +python.slack.color_typing_notice = "Color to use for the typing notice." +python.slack.colorize_private_chats = "Whether to use nick-colors in DM windows." +python.slack.debug_level = "Show only this level of debug info (or higher) when debug_mode is on. Lower levels -> more messages." +python.slack.debug_mode = "Open a dedicated buffer for debug messages and start logging to it. How verbose the logging is depends on log_level." +python.slack.distracting_channels = "List of channels to hide." +python.slack.external_user_suffix = "The suffix appended to nicks to indicate external users." +python.slack.files_download_location = "If set, file attachments will be automatically downloaded to this location. "%h" will be replaced by WeeChat home, "~/.weechat" by default." +python.slack.group_name_prefix = "The prefix of buffer names for groups (private channels)." +python.slack.map_underline_to = "When sending underlined text to slack, use this formatting character for it. The default ("_") sends it as italics. Use "*" to send bold instead." +python.slack.muted_channels_activity = "Control which activity you see from muted channels, either none, personal_highlights, all_highlights or all. none: Don't show any activity. personal_highlights: Only show personal highlights, i.e. not @channel and @here. all_highlights: Show all highlights, but not other messages. all: Show all activity, like other channels." +python.slack.never_away = "Poke Slack every five minutes so that it never marks you "away"." +python.slack.notify_usergroup_handle_updated = "Control if you want to see notification when a usergroup's handle has changed, either true or false." +python.slack.record_events = "Log all traffic from Slack to disk as JSON." +python.slack.render_bold_as = "When receiving bold text from Slack, render it as this in weechat." +python.slack.render_emoji_as_string = "Render emojis as :emoji_name: instead of emoji characters. Enable this if your terminal doesn't support emojis, or set to 'both' if you want to see both renderings. Note that even though this is disabled by default, you need to place https://github.com/wee-slack/wee-slack/blob/master/weemoji.json in your weechat directory to enable rendering emojis as emoji characters." +python.slack.render_italic_as = "When receiving bold text from Slack, render it as this in weechat. If your terminal lacks italic support, consider using "underline" instead." +python.slack.send_typing_notice = "Alert Slack users when you are typing a message in the input bar (Requires reload)" +python.slack.server_aliases = "A comma separated list of `subdomain:alias` pairs. The alias will be used instead of the actual name of the slack (in buffer names, logging, etc). E.g `work:no_fun_allowed` would make your work slack show up as `no_fun_allowed` rather than `work.slack.com`." +python.slack.shared_name_prefix = "The prefix of buffer names for shared channels." +python.slack.short_buffer_names = "Use `foo.#channel` rather than `foo.slack.com.#channel` as the internal name for Slack buffers." +python.slack.show_buflist_presence = "Display a `+` character in the buffer list for present users." +python.slack.show_reaction_nicks = "Display the name of the reacting user(s) alongside each reactji." +python.slack.slack_api_token = "List of Slack API tokens, one per Slack instance you want to connect to. See the README for details on how to get these." +python.slack.slack_timeout = "How long (ms) to wait when communicating with Slack." +python.slack.switch_buffer_on_join = "When /joining a channel, automatically switch to it as well." +python.slack.thread_messages_in_channel = "When enabled shows thread messages in the parent channel." +python.slack.unfurl_auto_link_display = "When displaying ("unfurling") links to channels/users/etc, determine what is displayed when the text matches the url without the protocol. This happens when Slack automatically creates links, e.g. from words separated by dots or email addresses. Set it to "text" to only display the text written by the user, "url" to only display the url or "both" (the default) to display both." +python.slack.unfurl_ignore_alt_text = "When displaying ("unfurling") links to channels/users/etc, ignore the "alt text" present in the message and instead use the canonical name of the thing being linked to." +python.slack.unhide_buffers_with_activity = "When activity occurs on a buffer, unhide it even if it was previously hidden (whether by the user or by the distracting_channels setting)." +python.slack.use_full_names = "Use full names as the nicks for all users. When this is false (the default), display names will be used if set, with a fallback to the full name if display name is not set." +python.vimode.copy_clipboard_cmd = "command used to copy to clipboard; must read input from stdin (default: "xclip -selection c")" +python.vimode.imap_esc = "use alternate mapping to enter Normal mode while in Insert mode; having it set to 'jk' is similar to `:imap jk <Esc>` in vim (default: "")" +python.vimode.imap_esc_timeout = "time in ms to wait for the imap_esc sequence to complete (default: "1000")" +python.vimode.line_number_prefix = "prefix for line numbers (default: "")" +python.vimode.line_number_suffix = "suffix for line numbers (default: " ")" +python.vimode.mode_indicator_cmd_color = "color for mode indicator in Command mode (default: "white")" +python.vimode.mode_indicator_cmd_color_bg = "background color for mode indicator in Command mode (default: "cyan")" +python.vimode.mode_indicator_insert_color = "color for mode indicator in Insert mode (default: "white")" +python.vimode.mode_indicator_insert_color_bg = "background color for mode indicator in Insert mode (default: "blue")" +python.vimode.mode_indicator_normal_color = "color for mode indicator in Normal mode (default: "white")" +python.vimode.mode_indicator_normal_color_bg = "background color for mode indicator in Normal mode (default: "gray")" +python.vimode.mode_indicator_prefix = "prefix for the bar item mode_indicator (default: "")" +python.vimode.mode_indicator_replace_color = "color for mode indicator in Replace mode (default: "white")" +python.vimode.mode_indicator_replace_color_bg = "background color for mode indicator in Replace mode (default: "red")" +python.vimode.mode_indicator_search_color = "color for mode indicator in Search mode (default: "white")" +python.vimode.mode_indicator_search_color_bg = "background color for mode indicator in Search mode (default: "magenta")" +python.vimode.mode_indicator_suffix = "suffix for the bar item mode_indicator (default: "")" +python.vimode.no_warn = "don't warn about problematic keybindings and tmux/screen (default: "off")" +python.vimode.paste_clipboard_cmd = "command used to paste clipboard; must output content to stdout (default: "xclip -selection c -o")" +python.vimode.search_vim = "allow n/N usage after searching (requires an extra <Enter> to return to normal mode) (default: "off")" +python.vimode.user_mappings = "see the `:nmap` command in the README for more info; please do not modify this field manually unless you know what you're doing (default: "")" diff --git a/.weechat/python.conf b/.weechat/python.conf new file mode 100644 index 0000000..187b778 --- /dev/null +++ b/.weechat/python.conf @@ -0,0 +1,14 @@ +# +# weechat -- python.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/python/autoload/notify_send.py b/.weechat/python/autoload/notify_send.py new file mode 120000 index 0000000..deeb9a7 --- /dev/null +++ b/.weechat/python/autoload/notify_send.py @@ -0,0 +1 @@ +../notify_send.py
\ No newline at end of file diff --git a/.weechat/python/autoload/vimode.py b/.weechat/python/autoload/vimode.py new file mode 120000 index 0000000..c6303a5 --- /dev/null +++ b/.weechat/python/autoload/vimode.py @@ -0,0 +1 @@ +../vimode.py
\ No newline at end of file diff --git a/.weechat/python/autoload/wee_slack.py b/.weechat/python/autoload/wee_slack.py new file mode 120000 index 0000000..a77c3bb --- /dev/null +++ b/.weechat/python/autoload/wee_slack.py @@ -0,0 +1 @@ +../wee_slack.py
\ No newline at end of file diff --git a/.weechat/python/notify_send.py b/.weechat/python/notify_send.py new file mode 100644 index 0000000..30b6c48 --- /dev/null +++ b/.weechat/python/notify_send.py @@ -0,0 +1,755 @@ +# -*- coding: utf-8 -*- +# +# Project: weechat-notify-send +# Homepage: https://github.com/s3rvac/weechat-notify-send +# Description: Sends highlight and message notifications through notify-send. +# Requires libnotify. +# License: MIT (see below) +# +# Copyright (c) 2015 by Petr Zemek <s3rvac@gmail.com> and contributors +# +# 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. +# + +from __future__ import print_function + +import os +import re +import subprocess +import sys +import time + + +# Ensure that we are running under WeeChat. +try: + import weechat +except ImportError: + sys.exit('This script has to run under WeeChat (https://weechat.org/).') + + +# Name of the script. +SCRIPT_NAME = 'notify_send' + +# Author of the script. +SCRIPT_AUTHOR = 's3rvac' + +# Version of the script. +SCRIPT_VERSION = '0.9 (dev)' + +# License under which the script is distributed. +SCRIPT_LICENSE = 'MIT' + +# Description of the script. +SCRIPT_DESC = 'Sends highlight and message notifications through notify-send.' + +# Name of a function to be called when the script is unloaded. +SCRIPT_SHUTDOWN_FUNC = '' + +# Used character set (utf-8 by default). +SCRIPT_CHARSET = '' + +# Script options. +OPTIONS = { + 'notify_on_highlights': ( + 'on', + 'Send notifications on highlights.' + ), + 'notify_on_privmsgs': ( + 'on', + 'Send notifications on private messages.' + ), + 'notify_on_filtered_messages': ( + 'off', + 'Send notifications also on filtered (hidden) messages.' + ), + 'notify_when_away': ( + 'on', + 'Send also notifications when away.' + ), + 'notify_for_current_buffer': ( + 'on', + 'Send also notifications for the currently active buffer.' + ), + 'notify_on_all_messages_in_buffers': ( + '', + 'A comma-separated list of buffers for which you want to receive ' + 'notifications on all messages that appear in them.' + ), + 'notify_on_all_messages_in_buffers_that_match': ( + '', + 'A comma-separated list of regex patterns of buffers for which you ' + 'want to receive notifications on all messages that appear in them.' + ), + 'notify_on_messages_that_match': ( + '', + 'A comma-separated list of regex patterns that you want to receive ' + 'notifications on when message matches.' + ), + 'min_notification_delay': ( + '500', + 'A minimal delay between successive notifications from the same ' + 'buffer (in milliseconds; set to 0 to show all notifications).' + ), + 'ignore_messages_tagged_with': ( + ','.join([ + 'notify_none', # Buffer with line is not added to hotlist + 'irc_join', # Joined IRC + 'irc_quit', # Quit IRC + 'irc_part', # Parted a channel + 'irc_status', # Status messages + 'irc_nick_back', # A nick is back on server + 'irc_401', # No such nick/channel + 'irc_402', # No such server + ]), + 'A comma-separated list of message tags for which no notifications ' + 'should be shown.' + ), + 'ignore_buffers': ( + '', + 'A comma-separated list of buffers from which no notifications should ' + 'be shown.' + ), + 'ignore_buffers_starting_with': ( + '', + 'A comma-separated list of buffer prefixes from which no ' + 'notifications should be shown.' + ), + 'ignore_nicks': ( + '', + 'A comma-separated list of nicks from which no notifications should ' + 'be shown.' + ), + 'ignore_nicks_starting_with': ( + '', + 'A comma-separated list of nick prefixes from which no ' + 'notifications should be shown.' + ), + 'hide_messages_in_buffers_that_match': ( + '', + 'A comma-separated list of regex patterns for names of buffers from ' + 'which you want to receive notifications without messages.' + ), + 'nick_separator': ( + ': ', + 'A separator between a nick and a message.' + ), + 'escape_html': ( + 'on', + "Escapes the '<', '>', and '&' characters in notification messages." + ), + 'max_length': ( + '72', + 'Maximal length of a notification (0 means no limit).' + ), + 'ellipsis': ( + '[..]', + 'Ellipsis to be used for notifications that are too long.' + ), + 'icon': ( + '/usr/share/icons/hicolor/32x32/apps/weechat.png', + 'Path to an icon to be shown in notifications.' + ), + 'desktop_entry': ( + 'weechat', + 'Name of the desktop entry for WeeChat.' + ), + 'timeout': ( + '5000', + 'Time after which the notification disappears (in milliseconds; ' + 'set to 0 to disable).' + ), + 'transient': ( + 'on', + 'When a notification expires or is dismissed, remove it from the ' + 'notification bar.' + ), + 'urgency': ( + 'normal', + 'Urgency (low, normal, critical).' + ) +} + + +class Notification(object): + """A representation of a notification.""" + + def __init__(self, source, message, icon, desktop_entry, timeout, transient, urgency): + self.source = source + self.message = message + self.icon = icon + self.desktop_entry = desktop_entry + self.timeout = timeout + self.transient = transient + self.urgency = urgency + + +def default_value_of(option): + """Returns the default value of the given option.""" + return OPTIONS[option][0] + + +def add_default_value_to(description, default_value): + """Adds the given default value to the given option description.""" + # All descriptions end with a period, so do not add another period. + return '{} Default: {}.'.format( + description, + default_value if default_value else '""' + ) + + +def nick_that_sent_message(tags, prefix): + """Returns a nick that sent the message based on the given data passed to + the callback. + """ + # 'tags' is a comma-separated list of tags that WeeChat passed to the + # callback. It should contain a tag of the following form: nick_XYZ, where + # XYZ is the nick that sent the message. + for tag in tags: + if tag.startswith('nick_'): + return tag[5:] + + # There is no nick in the tags, so check the prefix as a fallback. + # 'prefix' (str) is the prefix of the printed line with the message. + # Usually (but not always), it is a nick with an optional mode (e.g. on + # IRC, @ denotes an operator and + denotes a user with voice). We have to + # remove the mode (if any) before returning the nick. + # Strip also a space as some protocols (e.g. Matrix) may start prefixes + # with a space. It probably means that the nick has no mode set. + if prefix.startswith(('~', '&', '@', '%', '+', '-', ' ')): + return prefix[1:] + + return prefix + + +def parse_tags(tags): + """Parses the given "list" of tags (str) from WeeChat into a list.""" + return tags.split(',') + + +def message_printed_callback(data, buffer, date, tags, is_displayed, + is_highlight, prefix, message): + """A callback when a message is printed.""" + is_displayed = int(is_displayed) + is_highlight = int(is_highlight) + tags = parse_tags(tags) + nick = nick_that_sent_message(tags, prefix) + + if notification_should_be_sent(buffer, tags, nick, is_displayed, is_highlight, message): + notification = prepare_notification(buffer, nick, message) + send_notification(notification) + + return weechat.WEECHAT_RC_OK + + +def notification_should_be_sent(buffer, tags, nick, is_displayed, is_highlight, message): + """Should a notification be sent?""" + if notification_should_be_sent_disregarding_time(buffer, tags, nick, + is_displayed, is_highlight, message): + # The following function should be called only when the notification + # should be sent (it updates the last notification time). + if not is_below_min_notification_delay(buffer): + return True + return False + + +def notification_should_be_sent_disregarding_time(buffer, tags, nick, + is_displayed, is_highlight, message): + """Should a notification be sent when not considering time?""" + if not nick: + # A nick is required to form a correct notification source/message. + return False + + if i_am_author_of_message(buffer, nick): + return False + + if not is_displayed: + if not notify_on_filtered_messages(): + return False + + if buffer == weechat.current_buffer(): + if not notify_for_current_buffer(): + return False + + if is_away(buffer): + if not notify_when_away(): + return False + + if ignore_notifications_from_messages_tagged_with(tags): + return False + + if ignore_notifications_from_nick(nick): + return False + + if ignore_notifications_from_buffer(buffer): + return False + + if is_private_message(buffer): + return notify_on_private_messages() + + if is_highlight: + return notify_on_highlights() + + if notify_on_messages_that_match(message): + return True + + if notify_on_all_messages_in_buffer(buffer): + return True + + return False + + +def is_below_min_notification_delay(buffer): + """Is a notification in the given buffer below the minimal delay between + successive notifications from the same buffer? + + When called, this function updates the time of the last notification. + """ + # We store the time of the last notification in a buffer-local variable to + # make it persistent over the lifetime of this script. + LAST_NOTIFICATION_TIME_VAR = 'notify_send_last_notification_time' + last_notification_time = buffer_get_float( + buffer, + 'localvar_' + LAST_NOTIFICATION_TIME_VAR + ) + + min_notification_delay = weechat.config_get_plugin('min_notification_delay') + # min_notification_delay is in milliseconds (str). To compare it with + # last_notification_time (float in seconds), we have to convert it to + # seconds (float). + min_notification_delay = float(min_notification_delay) / 1000 + + current_time = time.time() + + # We have to update the last notification time before returning the result. + buffer_set_float( + buffer, + 'localvar_set_' + LAST_NOTIFICATION_TIME_VAR, + current_time + ) + + return (min_notification_delay > 0 and + current_time - last_notification_time < min_notification_delay) + + +def buffer_get_float(buffer, property): + """A variant of weechat.buffer_get_x() for floats. + + This variant is needed because WeeChat supports only buffer_get_string() + and buffer_get_int(). + """ + value = weechat.buffer_get_string(buffer, property) + return float(value) if value else 0.0 + + +def buffer_set_float(buffer, property, value): + """A variant of weechat.buffer_set() for floats. + + This variant is needed because WeeChat supports only integers and strings. + """ + weechat.buffer_set(buffer, property, str(value)) + + +def names_for_buffer(buffer): + """Returns a list of all names for the given buffer.""" + # The 'buffer' parameter passed to our callback is actually the buffer's ID + # (e.g. '0x2719cf0'). We have to check its name (e.g. 'freenode.#weechat') + # and short name (e.g. '#weechat') because these are what users specify in + # their configs. + buffer_names = [] + + full_name = weechat.buffer_get_string(buffer, 'name') + if full_name: + buffer_names.append(full_name) + + short_name = weechat.buffer_get_string(buffer, 'short_name') + if short_name: + buffer_names.append(short_name) + # Consider >channel and #channel to be equal buffer names. The reason + # is that the https://github.com/rawdigits/wee-slack script replaces + # '#' with '>' to indicate that someone in the buffer is typing. This + # fixes the behavior of several configuration options (e.g. + # 'notify_on_all_messages_in_buffers') when weechat_notify_send is used + # together with the wee_slack script. + # + # Note that this is only needed to be done for the short name. Indeed, + # the full name always stays unchanged. + if short_name.startswith('>'): + buffer_names.append('#' + short_name[1:]) + + return buffer_names + + +def notify_for_current_buffer(): + """Should we also send notifications for the current buffer?""" + return weechat.config_get_plugin('notify_for_current_buffer') == 'on' + + +def notify_on_highlights(): + """Should we send notifications on highlights?""" + return weechat.config_get_plugin('notify_on_highlights') == 'on' + + +def notify_on_private_messages(): + """Should we send notifications on private messages?""" + return weechat.config_get_plugin('notify_on_privmsgs') == 'on' + + +def notify_on_filtered_messages(): + """Should we also send notifications for filtered (hidden) messages?""" + return weechat.config_get_plugin('notify_on_filtered_messages') == 'on' + + +def notify_when_away(): + """Should we also send notifications when away?""" + return weechat.config_get_plugin('notify_when_away') == 'on' + + +def is_away(buffer): + """Is the user away?""" + return weechat.buffer_get_string(buffer, 'localvar_away') != '' + + +def is_private_message(buffer): + """Has a private message been sent?""" + return weechat.buffer_get_string(buffer, 'localvar_type') == 'private' + + +def i_am_author_of_message(buffer, nick): + """Am I (the current WeeChat user) the author of the message?""" + return weechat.buffer_get_string(buffer, 'localvar_nick') == nick + + +def split_option_value(option, separator=','): + """Splits the value of the given plugin option by the given separator and + returns the result in a list. + """ + values = weechat.config_get_plugin(option) + if not values: + # When there are no values, return the empty list instead of ['']. + return [] + + return [value.strip() for value in values.split(separator)] + + +def ignore_notifications_from_messages_tagged_with(tags): + """Should notifications be ignored for a message tagged with the given + tags? + """ + ignored_tags = split_option_value('ignore_messages_tagged_with') + for ignored_tag in ignored_tags: + for tag in tags: + if tag == ignored_tag: + return True + return False + + +def ignore_notifications_from_buffer(buffer): + """Should notifications from the given buffer be ignored?""" + buffer_names = names_for_buffer(buffer) + + for buffer_name in buffer_names: + if buffer_name and buffer_name in ignored_buffers(): + return True + + for buffer_name in buffer_names: + for prefix in ignored_buffer_prefixes(): + if prefix and buffer_name.startswith(prefix): + return True + + return False + + +def ignored_buffers(): + """A generator of buffers from which notifications should be ignored.""" + for buffer in split_option_value('ignore_buffers'): + yield buffer + + +def ignored_buffer_prefixes(): + """A generator of buffer prefixes from which notifications should be + ignored. + """ + for prefix in split_option_value('ignore_buffers_starting_with'): + yield prefix + + +def ignore_notifications_from_nick(nick): + """Should notifications from the given nick be ignored?""" + if nick in ignored_nicks(): + return True + + for prefix in ignored_nick_prefixes(): + if prefix and nick.startswith(prefix): + return True + + return False + + +def ignored_nicks(): + """A generator of nicks from which notifications should be ignored.""" + for nick in split_option_value('ignore_nicks'): + yield nick + + +def ignored_nick_prefixes(): + """A generator of nick prefixes from which notifications should be + ignored. + """ + for prefix in split_option_value('ignore_nicks_starting_with'): + yield prefix + + +def notify_on_messages_that_match(message): + """Should we send a notification for the given message, provided it matches + any of the requested patterns? + """ + message_patterns = split_option_value('notify_on_messages_that_match') + for pattern in message_patterns: + if re.search(pattern, message): + return True + + return False + + +def buffers_to_notify_on_all_messages(): + """A generator of buffer names in which the user wants to be notified for + all messages. + """ + for buffer in split_option_value('notify_on_all_messages_in_buffers'): + yield buffer + + +def buffer_patterns_to_notify_on_all_messages(): + """A generator of buffer-name patterns in which the user wants to be + notifier for all messages. + """ + for pattern in split_option_value('notify_on_all_messages_in_buffers_that_match'): + yield pattern + + +def notify_on_all_messages_in_buffer(buffer): + """Does the user want to be notified for all messages in the given buffer? + """ + buffer_names = names_for_buffer(buffer) + + # Option notify_on_all_messages_in_buffers: + for buf in buffers_to_notify_on_all_messages(): + if buf in buffer_names: + return True + + # Option notify_on_all_messages_in_buffers_that_match: + for pattern in buffer_patterns_to_notify_on_all_messages(): + for buf in buffer_names: + if re.search(pattern, buf): + return True + + return False + + +def buffer_patterns_to_hide_messages(): + """A generator of buffer-name patterns in which the user wants to hide + messages. + """ + for pattern in split_option_value('hide_messages_in_buffers_that_match'): + yield pattern + + +def hide_message_in_buffer(buffer): + """Should we hide messages in the given buffer?""" + buffer_names = names_for_buffer(buffer) + + for pattern in buffer_patterns_to_hide_messages(): + for buf in buffer_names: + if re.search(pattern, buf): + return True + + return False + + +def prepare_notification(buffer, nick, message): + """Prepares a notification from the given data.""" + if is_private_message(buffer): + source = nick + else: + source = (weechat.buffer_get_string(buffer, 'short_name') or + weechat.buffer_get_string(buffer, 'name')) + message = nick + nick_separator() + message + + if hide_message_in_buffer(buffer): + message = '' + + max_length = int(weechat.config_get_plugin('max_length')) + if max_length > 0: + ellipsis = weechat.config_get_plugin('ellipsis') + message = shorten_message(message, max_length, ellipsis) + + if weechat.config_get_plugin('escape_html') == 'on': + message = escape_html(message) + + message = escape_slashes(message) + + icon = weechat.config_get_plugin('icon') + desktop_entry = weechat.config_get_plugin('desktop_entry') + timeout = weechat.config_get_plugin('timeout') + transient = should_notifications_be_transient() + urgency = weechat.config_get_plugin('urgency') + + return Notification(source, message, icon, desktop_entry, timeout, transient, urgency) + + +def should_notifications_be_transient(): + """Should the sent notifications be transient, i.e. should they be removed + from the notification bar once they expire or are dismissed? + """ + return weechat.config_get_plugin('transient') == 'on' + + +def nick_separator(): + """Returns a nick separator to be used.""" + separator = weechat.config_get_plugin('nick_separator') + return separator if separator else default_value_of('nick_separator') + + +def shorten_message(message, max_length, ellipsis): + """Shortens the message to at most max_length characters by using the given + ellipsis. + """ + # In Python 2, we need to decode the message and ellipsis into Unicode to + # correctly (1) detect their length and (2) shorten the message. Failing to + # do that could make the shortened message invalid and cause notify-send to + # fail. For example, when we have bytes, we cannot guarantee that we do not + # split the message inside of a multibyte character. + if sys.version_info.major == 2: + try: + message = message.decode('utf-8') + ellipsis = ellipsis.decode('utf-8') + except UnicodeDecodeError: + # Either (or both) of the two cannot be decoded. Continue in a + # best-effort manner. + pass + + message = shorten_unicode_message(message, max_length, ellipsis) + + if sys.version_info.major == 2: + if not isinstance(message, str): + message = message.encode('utf-8') + + return message + + +def shorten_unicode_message(message, max_length, ellipsis): + """An internal specialized version of shorten_message() when the both the + message and ellipsis are str (in Python 3) or unicode (in Python 2). + """ + if max_length <= 0 or len(message) <= max_length: + # Nothing to shorten. + return message + + if len(ellipsis) >= max_length: + # We cannot include any part of the message. + return ellipsis[:max_length] + + return message[:max_length - len(ellipsis)] + ellipsis + + +def escape_html(message): + """Escapes HTML characters in the given message.""" + # Only the following characters need to be escaped + # (https://wiki.ubuntu.com/NotificationDevelopmentGuidelines). + message = message.replace('&', '&') + message = message.replace('<', '<') + message = message.replace('>', '>') + return message + + +def escape_slashes(message): + """Escapes slashes in the given message.""" + # We need to escape backslashes to prevent notify-send from interpreting + # them, e.g. we do not want to print a newline when the message contains + # '\n'. + return message.replace('\\', r'\\') + + +def send_notification(notification): + """Sends the given notification to the user.""" + notify_cmd = ['notify-send', '--app-name', 'weechat'] + if notification.icon: + notify_cmd += ['--icon', notification.icon] + if notification.desktop_entry: + notify_cmd += ['--hint', 'string:desktop-entry:{}'.format(notification.desktop_entry)] + if notification.timeout: + notify_cmd += ['--expire-time', str(notification.timeout)] + if notification.transient: + notify_cmd += ['--hint', 'int:transient:1'] + if notification.urgency: + notify_cmd += ['--urgency', notification.urgency] + # We need to add '--' before the source and message to ensure that + # notify-send considers the remaining parameters as the source and the + # message. This prevents errors when a source or message starts with '--'. + notify_cmd += [ + '--', + # notify-send fails with "No summary specified." when no source is + # specified, so ensure that there is always a non-empty source. + notification.source or '-', + notification.message + ] + + # Prevent notify-send from messing up the WeeChat screen when occasionally + # emitting assertion messages by redirecting the output to /dev/null (users + # would need to run /redraw to fix the screen). + # In Python < 3.3, there is no subprocess.DEVNULL, so we have to use a + # workaround. + with open(os.devnull, 'wb') as devnull: + try: + subprocess.check_call( + notify_cmd, + stderr=subprocess.STDOUT, + stdout=devnull, + ) + except Exception as ex: + error_message = '{} (reason: {!r}). {}'.format( + 'Failed to send the notification via notify-send', + '{}: {}'.format(ex.__class__.__name__, ex), + 'Ensure that you have notify-send installed in your system.', + ) + print(error_message, file=sys.stderr) + + +if __name__ == '__main__': + # Registration. + weechat.register( + SCRIPT_NAME, + SCRIPT_AUTHOR, + SCRIPT_VERSION, + SCRIPT_LICENSE, + SCRIPT_DESC, + SCRIPT_SHUTDOWN_FUNC, + SCRIPT_CHARSET + ) + + # Initialization. + for option, (default_value, description) in OPTIONS.items(): + description = add_default_value_to(description, default_value) + weechat.config_set_desc_plugin(option, description) + if not weechat.config_is_set_plugin(option): + weechat.config_set_plugin(option, default_value) + + # Catch all messages on all buffers and strip colors from them before + # passing them into the callback. + weechat.hook_print('', '', '', 1, 'message_printed_callback', '') diff --git a/.weechat/python/vimode.py b/.weechat/python/vimode.py new file mode 100644 index 0000000..b7dc35c --- /dev/null +++ b/.weechat/python/vimode.py @@ -0,0 +1,1877 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2014 Germain Z. <germanosz@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# +# Add vi/vim-like modes to WeeChat. +# + + +import csv +import json +import os +import re +import subprocess +try: + from StringIO import StringIO +except ImportError: + from io import StringIO +import time + +import weechat + + +# Script info. +# ============ + +SCRIPT_NAME = "vimode" +SCRIPT_AUTHOR = "GermainZ <germanosz@gmail.com>" +SCRIPT_VERSION = "0.7" +SCRIPT_LICENSE = "GPL3" +SCRIPT_DESC = ("Add vi/vim-like modes and keybindings to WeeChat.") + + +# Global variables. +# ================= + +# General. +# -------- + +# Halp! Halp! Halp! +GITHUB_BASE = "https://github.com/GermainZ/weechat-vimode/blob/master/" +README_URL = GITHUB_BASE + "README.md" +FAQ_KEYBINDINGS = GITHUB_BASE + "FAQ.md#problematic-key-bindings" +FAQ_ESC = GITHUB_BASE + "FAQ.md#esc-key-not-being-detected-instantly" + +# Holds the text of the tab-completions for the command-line mode. +cmd_compl_text = "" +# Holds the original text of the command-line mode, used for completion. +cmd_text_orig = None +# Index of current suggestion, used for completion. +cmd_compl_pos = 0 +# Used for command-line mode history. +cmd_history = [] +cmd_history_index = 0 +# Used to store the content of the input line when going into COMMAND mode. +input_line_backup = {} +# Mode we're in. One of INSERT, NORMAL, REPLACE, COMMAND or SEARCH. +# SEARCH is only used if search_vim is enabled. +mode = "INSERT" +# Holds normal commands (e.g. "dd"). +vi_buffer = "" +# See `cb_key_combo_default()`. +esc_pressed = 0 +# See `cb_key_pressed()`. +last_signal_time = 0 +# See `start_catching_keys()` for more info. +catching_keys_data = {'amount': 0} +# Used for ; and , to store the last f/F/t/T motion. +last_search_motion = {'motion': None, 'data': None} +# Used for undo history. +undo_history = {} +undo_history_index = {} +# Holds mode colors (loaded from vimode_settings). +mode_colors = {} + +# Script options. +vimode_settings = { + 'no_warn': ("off", ("don't warn about problematic keybindings and " + "tmux/screen")), + 'copy_clipboard_cmd': ("xclip -selection c", + ("command used to copy to clipboard; must read " + "input from stdin")), + 'paste_clipboard_cmd': ("xclip -selection c -o", + ("command used to paste clipboard; must output " + "content to stdout")), + 'imap_esc': ("", ("use alternate mapping to enter Normal mode while in " + "Insert mode; having it set to 'jk' is similar to " + "`:imap jk <Esc>` in vim")), + 'imap_esc_timeout': ("1000", ("time in ms to wait for the imap_esc " + "sequence to complete")), + 'search_vim': ("off", ("allow n/N usage after searching (requires an extra" + " <Enter> to return to normal mode)")), + 'user_mappings': ("", ("see the `:nmap` command in the README for more " + "info; please do not modify this field manually " + "unless you know what you're doing")), + 'mode_indicator_prefix': ("", "prefix for the bar item mode_indicator"), + 'mode_indicator_suffix': ("", "suffix for the bar item mode_indicator"), + 'mode_indicator_normal_color': ("white", + "color for mode indicator in Normal mode"), + 'mode_indicator_normal_color_bg': ("gray", + ("background color for mode indicator " + "in Normal mode")), + 'mode_indicator_insert_color': ("white", + "color for mode indicator in Insert mode"), + 'mode_indicator_insert_color_bg': ("blue", + ("background color for mode indicator " + "in Insert mode")), + 'mode_indicator_replace_color': ("white", + "color for mode indicator in Replace mode"), + 'mode_indicator_replace_color_bg': ("red", + ("background color for mode indicator " + "in Replace mode")), + 'mode_indicator_cmd_color': ("white", + "color for mode indicator in Command mode"), + 'mode_indicator_cmd_color_bg': ("cyan", + ("background color for mode indicator in " + "Command mode")), + 'mode_indicator_search_color': ("white", + "color for mode indicator in Search mode"), + 'mode_indicator_search_color_bg': ("magenta", + ("background color for mode indicator " + "in Search mode")), + 'line_number_prefix': ("", "prefix for line numbers"), + 'line_number_suffix': (" ", "suffix for line numbers") +} + + +# Regex patterns. +# --------------- + +WHITESPACE = re.compile(r"\s") +IS_KEYWORD = re.compile(r"[a-zA-Z0-9_@À-ÿ]") +REGEX_MOTION_LOWERCASE_W = re.compile(r"\b\S|(?<=\s)\S") +REGEX_MOTION_UPPERCASE_W = re.compile(r"(?<=\s)\S") +REGEX_MOTION_UPPERCASE_E = re.compile(r"\S(?!\S)") +REGEX_MOTION_UPPERCASE_B = REGEX_MOTION_UPPERCASE_E +REGEX_MOTION_G_UPPERCASE_E = REGEX_MOTION_UPPERCASE_W +REGEX_MOTION_CARRET = re.compile(r"\S") +REGEX_INT = r"[0-9]" +REGEX_MAP_KEYS_1 = { + re.compile("<([^>]*-)Left>", re.IGNORECASE): '<\\1\x01[[D>', + re.compile("<([^>]*-)Right>", re.IGNORECASE): '<\\1\x01[[C>', + re.compile("<([^>]*-)Up>", re.IGNORECASE): '<\\1\x01[[A>', + re.compile("<([^>]*-)Down>", re.IGNORECASE): '<\\1\x01[[B>', + re.compile("<Left>", re.IGNORECASE): '\x01[[D', + re.compile("<Right>", re.IGNORECASE): '\x01[[C', + re.compile("<Up>", re.IGNORECASE): '\x01[[A', + re.compile("<Down>", re.IGNORECASE): '\x01[[B' +} +REGEX_MAP_KEYS_2 = { + re.compile(r"<C-([^>]*)>", re.IGNORECASE): '\x01\\1', + re.compile(r"<M-([^>]*)>", re.IGNORECASE): '\x01[\\1' +} + +# Regex used to detect problematic keybindings. +# For example: meta-wmeta-s is bound by default to ``/window swap``. +# If the user pressed Esc-w, WeeChat will detect it as meta-w and will not +# send any signal to `cb_key_combo_default()` just yet, since it's the +# beginning of a known key combo. +# Instead, `cb_key_combo_default()` will receive the Esc-ws signal, which +# becomes "ws" after removing the Esc part, and won't know how to handle it. +REGEX_PROBLEMATIC_KEYBINDINGS = re.compile(r"meta-\w(meta|ctrl)") + + +# Vi commands. +# ------------ + +def cmd_nmap(args): + """Add a user-defined key mapping. + + Some (but not all) vim-like key codes are supported to simplify things for + the user: <Up>, <Down>, <Left>, <Right>, <C-...> and <M-...>. + + See Also: + `cmd_unmap()`. + """ + args = args.strip() + if not args: + mappings = vimode_settings['user_mappings'] + if mappings: + weechat.prnt("", "User-defined key mappings:") + for key, mapping in mappings.items(): + weechat.prnt("", "{} -> {}".format(key, mapping)) + else: + weechat.prnt("", "nmap: no mapping found.") + elif not " " in args: + weechat.prnt("", "nmap syntax -> :nmap {lhs} {rhs}") + else: + key, mapping = args.split(" ", 1) + # First pass of replacements. We perform two passes as a simple way to + # avoid incorrect replacements due to dictionaries not being + # insertion-ordered prior to Python 3.7. + for regex, repl in REGEX_MAP_KEYS_1.items(): + key = regex.sub(repl, key) + mapping = regex.sub(repl, mapping) + # Second pass of replacements. + for regex, repl in REGEX_MAP_KEYS_2.items(): + key = regex.sub(repl, key) + mapping = regex.sub(repl, mapping) + mappings = vimode_settings['user_mappings'] + mappings[key] = mapping + weechat.config_set_plugin('user_mappings', json.dumps(mappings)) + vimode_settings['user_mappings'] = mappings + +def cmd_nunmap(args): + """Remove a user-defined key mapping. + + See Also: + `cmd_map()`. + """ + args = args.strip() + if not args: + weechat.prnt("", "nunmap syntax -> :unmap {lhs}") + else: + key = args + for regex, repl in REGEX_MAP_KEYS_1.items(): + key = regex.sub(repl, key) + for regex, repl in REGEX_MAP_KEYS_2.items(): + key = regex.sub(repl, key) + mappings = vimode_settings['user_mappings'] + if key in mappings: + del mappings[key] + weechat.config_set_plugin('user_mappings', json.dumps(mappings)) + vimode_settings['user_mappings'] = mappings + else: + weechat.prnt("", "nunmap: No such mapping") + +# See Also: `cb_exec_cmd()`. +VI_COMMAND_GROUPS = {('h', 'help'): "/help", + ('qa', 'qall', 'quita', 'quitall'): "/exit", + ('q', 'quit'): "/close", + ('w', 'write'): "/save", + ('bN', 'bNext', 'bp', 'bprevious'): "/buffer -1", + ('bn', 'bnext'): "/buffer +1", + ('bd', 'bdel', 'bdelete'): "/close", + ('b#',): "/input jump_last_buffer_displayed", + ('b', 'bu', 'buf', 'buffer'): "/buffer", + ('sp', 'split'): "/window splith", + ('vs', 'vsplit'): "/window splitv", + ('nm', 'nmap'): cmd_nmap, + ('nun', 'nunmap'): cmd_nunmap} + +VI_COMMANDS = dict() +for T, v in VI_COMMAND_GROUPS.items(): + VI_COMMANDS.update(dict.fromkeys(T, v)) + + +# Vi operators. +# ------------- + +# Each operator must have a corresponding function, called "operator_X" where +# X is the operator. For example: `operator_c()`. +VI_OPERATORS = ["c", "d", "y"] + + +# Vi motions. +# ----------- + +# Vi motions. Each motion must have a corresponding function, called +# "motion_X" where X is the motion (e.g. `motion_w()`). +# See Also: `SPECIAL_CHARS`. +VI_MOTIONS = ["w", "e", "b", "^", "$", "h", "l", "W", "E", "B", "f", "F", "t", + "T", "ge", "gE", "0"] + +# Special characters for motions. The corresponding function's name is +# converted before calling. For example, "^" will call `motion_carret` instead +# of `motion_^` (which isn't allowed because of illegal characters). +SPECIAL_CHARS = {'^': "carret", + '$': "dollar"} + + +# Methods for vi operators, motions and key bindings. +# =================================================== + +# Documented base examples: +# ------------------------- + +def operator_base(buf, input_line, pos1, pos2, overwrite): + """Operator method example. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + pos1 (int): the starting position of the motion. + pos2 (int): the ending position of the motion. + overwrite (bool, optional): whether the character at the cursor's new + position should be overwritten or not (for inclusive motions). + Defaults to False. + + Notes: + Should be called "operator_X", where X is the operator, and defined in + `VI_OPERATORS`. + Must perform actions (e.g. modifying the input line) on its own, + using the WeeChat API. + + See Also: + For additional examples, see `operator_d()` and + `operator_y()`. + """ + # Get start and end positions. + start = min(pos1, pos2) + end = max(pos1, pos2) + # Print the text the operator should go over. + weechat.prnt("", "Selection: %s" % input_line[start:end]) + +def motion_base(input_line, cur, count): + """Motion method example. + + Args: + input_line (str): the content of the input line. + cur (int): the position of the cursor. + count (int): the amount of times to multiply or iterate the action. + + Returns: + A tuple containing three values: + int: the new position of the cursor. + bool: True if the motion is inclusive, False otherwise. + bool: True if the motion is catching, False otherwise. + See `start_catching_keys()` for more info on catching motions. + + Notes: + Should be called "motion_X", where X is the motion, and defined in + `VI_MOTIONS`. + Must not modify the input line directly. + + See Also: + For additional examples, see `motion_w()` (normal motion) and + `motion_f()` (catching motion). + """ + # Find (relative to cur) position of next number. + pos = get_pos(input_line, REGEX_INT, cur, True, count) + # Return the new (absolute) cursor position. + # This motion is exclusive, so overwrite is False. + return cur + pos, False + +def key_base(buf, input_line, cur, count): + """Key method example. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + cur (int): the position of the cursor. + count (int): the amount of times to multiply or iterate the action. + + Notes: + Should be called `key_X`, where X represents the key(s), and defined + in `VI_KEYS`. + Must perform actions on its own (using the WeeChat API). + + See Also: + For additional examples, see `key_a()` (normal key) and + `key_r()` (catching key). + """ + # Key was pressed. Go to Insert mode (similar to "i"). + set_mode("INSERT") + + +# Operators: +# ---------- + +def operator_d(buf, input_line, pos1, pos2, overwrite=False): + """Delete text from `pos1` to `pos2` from the input line. + + If `overwrite` is set to True, the character at the cursor's new position + is removed as well (the motion is inclusive). + + See Also: + `operator_base()`. + """ + start = min(pos1, pos2) + end = max(pos1, pos2) + if overwrite: + end += 1 + input_line = list(input_line) + del input_line[start:end] + input_line = "".join(input_line) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, pos1) + +def operator_c(buf, input_line, pos1, pos2, overwrite=False): + """Delete text from `pos1` to `pos2` from the input and enter Insert mode. + + If `overwrite` is set to True, the character at the cursor's new position + is removed as well (the motion is inclusive.) + + See Also: + `operator_base()`. + """ + operator_d(buf, input_line, pos1, pos2, overwrite) + set_mode("INSERT") + +def operator_y(buf, input_line, pos1, pos2, _): + """Yank text from `pos1` to `pos2` from the input line. + + See Also: + `operator_base()`. + """ + start = min(pos1, pos2) + end = max(pos1, pos2) + cmd = vimode_settings['copy_clipboard_cmd'] + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + proc.communicate(input=input_line[start:end].encode()) + + +# Motions: +# -------- + +def motion_0(input_line, cur, count): + """Go to the first character of the line. + + See Also; + `motion_base()`. + """ + return 0, False, False + +def motion_w(input_line, cur, count): + """Go `count` words forward and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_LOWERCASE_W, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, False, False + +def motion_W(input_line, cur, count): + """Go `count` WORDS forward and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_UPPERCASE_W, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, False, False + +def motion_e(input_line, cur, count): + """Go to the end of `count` words and return position. + + See Also: + `motion_base()`. + """ + for _ in range(max(1, count)): + found = False + pos = cur + for pos in range(cur + 1, len(input_line) - 1): + # Whitespace, keep going. + if WHITESPACE.match(input_line[pos]): + pass + # End of sequence made from 'iskeyword' characters only, + # or end of sequence made from non 'iskeyword' characters only. + elif ((IS_KEYWORD.match(input_line[pos]) and + (not IS_KEYWORD.match(input_line[pos + 1]) or + WHITESPACE.match(input_line[pos + 1]))) or + (not IS_KEYWORD.match(input_line[pos]) and + (IS_KEYWORD.match(input_line[pos + 1]) or + WHITESPACE.match(input_line[pos + 1])))): + found = True + cur = pos + break + # We're at the character before the last and we still found nothing. + # Go to the last character. + if not found: + cur = pos + 1 + return cur, True, False + +def motion_E(input_line, cur, count): + """Go to the end of `count` WORDS and return cusor position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_UPPERCASE_E, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, True, False + +def motion_b(input_line, cur, count): + """Go `count` words backwards and return position. + + See Also: + `motion_base()`. + """ + # "b" is just "e" on inverted data (e.g. "olleH" instead of "Hello"). + pos_inv = motion_e(input_line[::-1], len(input_line) - cur - 1, count)[0] + pos = len(input_line) - pos_inv - 1 + return pos, True, False + +def motion_B(input_line, cur, count): + """Go `count` WORDS backwards and return position. + + See Also: + `motion_base()`. + """ + new_cur = len(input_line) - cur + pos = get_pos(input_line[::-1], REGEX_MOTION_UPPERCASE_B, new_cur, + count=count) + if pos == -1: + return 0, False, False + pos = len(input_line) - (pos + new_cur + 1) + return pos, True, False + +def motion_ge(input_line, cur, count): + """Go to end of `count` words backwards and return position. + + See Also: + `motion_base()`. + """ + # "ge is just "w" on inverted data (e.g. "olleH" instead of "Hello"). + pos_inv = motion_w(input_line[::-1], len(input_line) - cur - 1, count)[0] + pos = len(input_line) - pos_inv - 1 + return pos, True, False + +def motion_gE(input_line, cur, count): + """Go to end of `count` WORDS backwards and return position. + + See Also: + `motion_base()`. + """ + new_cur = len(input_line) - cur - 1 + pos = get_pos(input_line[::-1], REGEX_MOTION_G_UPPERCASE_E, new_cur, + True, count) + if pos == -1: + return 0, False, False + pos = len(input_line) - (pos + new_cur + 1) + return pos, True, False + +def motion_h(input_line, cur, count): + """Go `count` characters to the left and return position. + + See Also: + `motion_base()`. + """ + return max(0, cur - max(count, 1)), False, False + +def motion_l(input_line, cur, count): + """Go `count` characters to the right and return position. + + See Also: + `motion_base()`. + """ + return cur + max(count, 1), False, False + +def motion_carret(input_line, cur, count): + """Go to first non-blank character of line and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_CARRET, 0) + return pos, False, False + +def motion_dollar(input_line, cur, count): + """Go to end of line and return position. + + See Also: + `motion_base()`. + """ + pos = len(input_line) + return pos, False, False + +def motion_f(input_line, cur, count): + """Go to `count`'th occurence of character and return position. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_f", input_line, cur, count) + +def cb_motion_f(update_last=True): + """Callback for `motion_f()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'], re.escape(pattern), + catching_keys_data['cur'], True, + catching_keys_data['count']) + catching_keys_data['new_cur'] = max(0, pos) + catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "f", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_F(input_line, cur, count): + """Go to `count`'th occurence of char to the right and return position. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_F", input_line, cur, count) + +def cb_motion_F(update_last=True): + """Callback for `motion_F()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + cur = len(catching_keys_data['input_line']) - catching_keys_data['cur'] + pos = get_pos(catching_keys_data['input_line'][::-1], + re.escape(pattern), + cur, + False, + catching_keys_data['count']) + catching_keys_data['new_cur'] = catching_keys_data['cur'] - max(0, pos + 1) + if update_last: + last_search_motion = {'motion': "F", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_t(input_line, cur, count): + """Go to `count`'th occurence of char and return position. + + The position returned is the position of the character to the left of char. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_t", input_line, cur, count) + +def cb_motion_t(update_last=True): + """Callback for `motion_t()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'], re.escape(pattern), + catching_keys_data['cur'] + 1, + True, catching_keys_data['count']) + pos += 1 + if pos > 0: + catching_keys_data['new_cur'] = pos + catching_keys_data['cur'] - 1 + else: + catching_keys_data['new_cur'] = catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "t", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_T(input_line, cur, count): + """Go to `count`'th occurence of char to the left and return position. + + The position returned is the position of the character to the right of + char. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_T", input_line, cur, count) + +def cb_motion_T(update_last=True): + """Callback for `motion_T()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'][::-1], re.escape(pattern), + (len(catching_keys_data['input_line']) - + (catching_keys_data['cur'] + 1)) + 1, + True, catching_keys_data['count']) + pos += 1 + if pos > 0: + catching_keys_data['new_cur'] = catching_keys_data['cur'] - pos + 1 + else: + catching_keys_data['new_cur'] = catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "T", 'data': pattern} + cb_key_combo_default(None, None, "") + + +# Keys: +# ----- + +def key_cc(buf, input_line, cur, count): + """Delete line and start Insert mode. + + See Also: + `key_base()`. + """ + weechat.command("", "/input delete_line") + set_mode("INSERT") + +def key_C(buf, input_line, cur, count): + """Delete from cursor to end of line and start Insert mode. + + See Also: + `key_base()`. + """ + weechat.command("", "/input delete_end_of_line") + set_mode("INSERT") + +def key_yy(buf, input_line, cur, count): + """Yank line. + + See Also: + `key_base()`. + """ + cmd = vimode_settings['copy_clipboard_cmd'] + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + proc.communicate(input=input_line.encode()) + +def key_p(buf, input_line, cur, count): + """Paste text. + + See Also: + `key_base()`. + """ + cmd = vimode_settings['paste_clipboard_cmd'] + weechat.hook_process(cmd, 10 * 1000, "cb_key_p", weechat.current_buffer()) + +def cb_key_p(data, command, return_code, output, err): + """Callback for fetching clipboard text and pasting it.""" + buf = "" + this_buffer = data + if output != "": + buf += output.strip() + if return_code == 0: + my_input = weechat.buffer_get_string(this_buffer, "input") + pos = weechat.buffer_get_integer(this_buffer, "input_pos") + my_input = my_input[:pos] + buf + my_input[pos:] + pos += len(buf) + weechat.buffer_set(this_buffer, "input", my_input) + weechat.buffer_set(this_buffer, "input_pos", str(pos)) + return weechat.WEECHAT_RC_OK + +def key_i(buf, input_line, cur, count): + """Start Insert mode. + + See Also: + `key_base()`. + """ + set_mode("INSERT") + +def key_a(buf, input_line, cur, count): + """Move cursor one character to the right and start Insert mode. + + See Also: + `key_base()`. + """ + set_cur(buf, input_line, cur + 1, False) + set_mode("INSERT") + +def key_A(buf, input_line, cur, count): + """Move cursor to end of line and start Insert mode. + + See Also: + `key_base()`. + """ + set_cur(buf, input_line, len(input_line), False) + set_mode("INSERT") + +def key_I(buf, input_line, cur, count): + """Move cursor to first non-blank character and start Insert mode. + + See Also: + `key_base()`. + """ + pos, _, _ = motion_carret(input_line, cur, 0) + set_cur(buf, input_line, pos) + set_mode("INSERT") + +def key_G(buf, input_line, cur, count): + """Scroll to specified line or bottom of buffer. + + See Also: + `key_base()`. + """ + if count > 0: + # This is necessary to prevent weird scroll jumps. + weechat.command("", "/window scroll_top") + weechat.command("", "/window scroll %s" % (count - 1)) + else: + weechat.command("", "/window scroll_bottom") + +def key_r(buf, input_line, cur, count): + """Replace `count` characters under the cursor. + + See Also: + `key_base()`. + """ + start_catching_keys(1, "cb_key_r", input_line, cur, count, buf) + +def cb_key_r(): + """Callback for `key_r()`. + + See Also: + `start_catching_keys()`. + """ + global catching_keys_data + input_line = list(catching_keys_data['input_line']) + count = max(catching_keys_data['count'], 1) + cur = catching_keys_data['cur'] + if cur + count <= len(input_line): + for _ in range(count): + input_line[cur] = catching_keys_data['keys'] + cur += 1 + input_line = "".join(input_line) + weechat.buffer_set(catching_keys_data['buf'], "input", input_line) + set_cur(catching_keys_data['buf'], input_line, cur - 1) + catching_keys_data = {'amount': 0} + +def key_R(buf, input_line, cur, count): + """Start Replace mode. + + See Also: + `key_base()`. + """ + set_mode("REPLACE") + +def key_tilda(buf, input_line, cur, count): + """Switch the case of `count` characters under the cursor. + + See Also: + `key_base()`. + """ + input_line = list(input_line) + count = max(1, count) + while count and cur < len(input_line): + input_line[cur] = input_line[cur].swapcase() + count -= 1 + cur += 1 + input_line = "".join(input_line) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, cur) + +def key_alt_j(buf, input_line, cur, count): + """Go to WeeChat buffer. + + Called to preserve WeeChat's alt-j buffer switching. + + This is only called when alt-j<num> is pressed after pressing Esc, because + \x01\x01j is received in key_combo_default which becomes \x01j after + removing the detected Esc key. + If Esc isn't the last pressed key, \x01j<num> is directly received in + key_combo_default. + """ + start_catching_keys(2, "cb_key_alt_j", input_line, cur, count) + +def cb_key_alt_j(): + """Callback for `key_alt_j()`. + + See Also: + `start_catching_keys()`. + """ + global catching_keys_data + weechat.command("", "/buffer " + catching_keys_data['keys']) + catching_keys_data = {'amount': 0} + +def key_semicolon(buf, input_line, cur, count, swap=False): + """Repeat last f, t, F, T `count` times. + + Args: + swap (bool, optional): if True, the last motion will be repeated in the + opposite direction (e.g. "f" instead of "F"). Defaults to False. + + See Also: + `key_base()`. + """ + global catching_keys_data, vi_buffer + catching_keys_data = ({'amount': 0, + 'input_line': input_line, + 'cur': cur, + 'keys': last_search_motion['data'], + 'count': count, + 'new_cur': 0, + 'buf': buf}) + # Swap the motion's case if called from key_comma. + if swap: + motion = last_search_motion['motion'].swapcase() + else: + motion = last_search_motion['motion'] + func = "cb_motion_%s" % motion + vi_buffer = motion + globals()[func](False) + +def key_comma(buf, input_line, cur, count): + """Repeat last f, t, F, T in opposite direction `count` times. + + See Also: + `key_base()`. + """ + key_semicolon(buf, input_line, cur, count, True) + +def key_u(buf, input_line, cur, count): + """Undo change `count` times. + + See Also: + `key_base()`. + """ + buf = weechat.current_buffer() + if buf not in undo_history: + return + for _ in range(max(count, 1)): + if undo_history_index[buf] > -len(undo_history[buf]): + undo_history_index[buf] -= 1 + input_line = undo_history[buf][undo_history_index[buf]] + weechat.buffer_set(buf, "input", input_line) + else: + break + +def key_ctrl_r(buf, input_line, cur, count): + """Redo change `count` times. + + See Also: + `key_base()`. + """ + if buf not in undo_history: + return + for _ in range(max(count, 1)): + if undo_history_index[buf] < -1: + undo_history_index[buf] += 1 + input_line = undo_history[buf][undo_history_index[buf]] + weechat.buffer_set(buf, "input", input_line) + else: + break + + +# Vi key bindings. +# ================ + +# String values will be executed as normal WeeChat commands. +# For functions, see `key_base()` for reference. +VI_KEYS = {'j': "/window scroll_down", + 'k': "/window scroll_up", + 'G': key_G, + 'gg': "/window scroll_top", + 'x': "/input delete_next_char", + 'X': "/input delete_previous_char", + 'dd': "/input delete_line", + 'D': "/input delete_end_of_line", + 'cc': key_cc, + 'C': key_C, + 'i': key_i, + 'a': key_a, + 'A': key_A, + 'I': key_I, + 'yy': key_yy, + 'p': key_p, + 'gt': "/buffer -1", + 'K': "/buffer -1", + 'gT': "/buffer +1", + 'J': "/buffer +1", + 'r': key_r, + 'R': key_R, + '~': key_tilda, + 'nt': "/bar scroll nicklist * -100%", + 'nT': "/bar scroll nicklist * +100%", + '\x01[[A': "/input history_previous", + '\x01[[B': "/input history_next", + '\x01[[C': "/input move_next_char", + '\x01[[D': "/input move_previous_char", + '\x01[[H': "/input move_beginning_of_line", + '\x01[[F': "/input move_end_of_line", + '\x01[[5~': "/window page_up", + '\x01[[6~': "/window page_down", + '\x01[[3~': "/input delete_next_char", + '\x01[[2~': key_i, + '\x01M': "/input return", + '\x01?': "/input move_previous_char", + ' ': "/input move_next_char", + '\x01[j': key_alt_j, + '\x01[1': "/buffer *1", + '\x01[2': "/buffer *2", + '\x01[3': "/buffer *3", + '\x01[4': "/buffer *4", + '\x01[5': "/buffer *5", + '\x01[6': "/buffer *6", + '\x01[7': "/buffer *7", + '\x01[8': "/buffer *8", + '\x01[9': "/buffer *9", + '\x01[0': "/buffer *10", + '\x01^': "/input jump_last_buffer_displayed", + '\x01D': "/window page_down", + '\x01U': "/window page_up", + '\x01Wh': "/window left", + '\x01Wj': "/window down", + '\x01Wk': "/window up", + '\x01Wl': "/window right", + '\x01W=': "/window balance", + '\x01Wx': "/window swap", + '\x01Ws': "/window splith", + '\x01Wv': "/window splitv", + '\x01Wq': "/window merge", + ';': key_semicolon, + ',': key_comma, + 'u': key_u, + '\x01R': key_ctrl_r} + +# Add alt-j<number> bindings. +for i in range(10, 99): + VI_KEYS['\x01[j%s' % i] = "/buffer %s" % i + + +# Key handling. +# ============= + +def cb_key_pressed(data, signal, signal_data): + """Detect potential Esc presses. + + Alt and Esc are detected as the same key in most terminals. The difference + is that Alt signal is sent just before the other pressed key's signal. + We therefore use a timeout (50ms) to detect whether Alt or Esc was pressed. + """ + global last_signal_time + last_signal_time = time.time() + if signal_data == "\x01[": + # In 50ms, check if any other keys were pressed. If not, it's Esc! + weechat.hook_timer(50, 0, 1, "cb_check_esc", + "{:f}".format(last_signal_time)) + return weechat.WEECHAT_RC_OK + +def cb_check_esc(data, remaining_calls): + """Check if the Esc key was pressed and change the mode accordingly.""" + global esc_pressed, vi_buffer, catching_keys_data + # Not perfect, would be better to use direct comparison (==) but that only + # works for py2 and not for py3. + if abs(last_signal_time - float(data)) <= 0.000001: + esc_pressed += 1 + if mode == "SEARCH": + weechat.command("", "/input search_stop_here") + set_mode("NORMAL") + # Cancel any current partial commands. + vi_buffer = "" + catching_keys_data = {'amount': 0} + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK + +def cb_key_combo_default(data, signal, signal_data): + """Eat and handle key events when in Normal mode, if needed. + + The key_combo_default signal is sent when a key combo is pressed. For + example, alt-k will send the "\x01[k" signal. + + Esc is handled a bit differently to avoid delays, see `cb_key_pressed()`. + """ + global esc_pressed, vi_buffer, cmd_compl_text, cmd_text_orig, \ + cmd_compl_pos, cmd_history_index + + # If Esc was pressed, strip the Esc part from the pressed keys. + # Example: user presses Esc followed by i. This is detected as "\x01[i", + # but we only want to handle "i". + keys = signal_data + if esc_pressed or esc_pressed == -2: + if keys.startswith("\x01[" * esc_pressed): + # Multiples of 3 seem to "cancel" themselves, + # e.g. Esc-Esc-Esc-Alt-j-11 is detected as "\x01[\x01[\x01" + # followed by "\x01[j11" (two different signals). + if signal_data == "\x01[" * 3: + esc_pressed = -1 # `cb_check_esc()` will increment it to 0. + else: + esc_pressed = 0 + # This can happen if a valid combination is started but interrupted + # with Esc, such as Ctrl-W→Esc→w which would send two signals: + # "\x01W\x01[" then "\x01W\x01[w". + # In that case, we still need to handle the next signal ("\x01W\x01[w") + # so we use the special value "-2". + else: + esc_pressed = -2 + keys = keys.split("\x01[")[-1] # Remove the "Esc" part(s). + # Ctrl-Space. + elif keys == "\x01@": + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK_EAT + + # Clear the undo history for this buffer on <Return>. + if keys == "\x01M": + buf = weechat.current_buffer() + clear_undo_history(buf) + + # Detect imap_esc presses if any. + if mode == "INSERT": + imap_esc = vimode_settings['imap_esc'] + if not imap_esc: + return weechat.WEECHAT_RC_OK + if (imap_esc.startswith(vi_buffer) and + imap_esc[len(vi_buffer):len(vi_buffer)+1] == keys): + vi_buffer += keys + weechat.bar_item_update("vi_buffer") + weechat.hook_timer(int(vimode_settings['imap_esc_timeout']), 0, 1, + "cb_check_imap_esc", vi_buffer) + elif (vi_buffer and imap_esc.startswith(vi_buffer) and + imap_esc[len(vi_buffer):len(vi_buffer)+1] != keys): + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + # imap_esc sequence detected -- remove the sequence keys from the + # Weechat input bar and enter Normal mode. + if imap_esc == vi_buffer: + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + cur = weechat.buffer_get_integer(buf, "input_pos") + input_line = (input_line[:cur-len(imap_esc)+1] + + input_line[cur:]) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, cur-len(imap_esc)+1, False) + set_mode("NORMAL") + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + + # We're in Replace mode — allow "normal" key presses (e.g. "a") and + # overwrite the next character with them, but let the other key presses + # pass normally (e.g. backspace, arrow keys, etc). + if mode == "REPLACE": + if len(keys) == 1: + weechat.command("", "/input delete_next_char") + elif keys == "\x01?": + weechat.command("", "/input move_previous_char") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + + # We're catching keys! Only "normal" key presses interest us (e.g. "a"), + # not complex ones (e.g. backspace). + if len(keys) == 1 and catching_keys_data['amount']: + catching_keys_data['keys'] += keys + catching_keys_data['amount'] -= 1 + # Done catching keys, execute the callback. + if catching_keys_data['amount'] == 0: + globals()[catching_keys_data['callback']]() + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + + # We're in command-line mode. + if mode == "COMMAND": + buf = weechat.current_buffer() + cmd_text = weechat.buffer_get_string(buf, "input") + weechat.hook_timer(1, 0, 1, "cb_check_cmd_mode", "") + # Return key. + if keys == "\x01M": + weechat.hook_timer(1, 0, 1, "cb_exec_cmd", cmd_text) + if len(cmd_text) > 1 and (not cmd_history or + cmd_history[-1] != cmd_text): + cmd_history.append(cmd_text) + cmd_history_index = 0 + set_mode("NORMAL") + buf = weechat.current_buffer() + input_line = input_line_backup[buf]['input_line'] + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, input_line_backup[buf]['cur'], False) + # Up arrow. + elif keys == "\x01[[A": + if cmd_history_index > -len(cmd_history): + cmd_history_index -= 1 + cmd_text = cmd_history[cmd_history_index] + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Down arrow. + elif keys == "\x01[[B": + if cmd_history_index < -1: + cmd_history_index += 1 + cmd_text = cmd_history[cmd_history_index] + else: + cmd_history_index = 0 + cmd_text = ":" + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Tab key. No completion when searching ("/"). + elif keys == "\x01I" and cmd_text[0] == ":": + if cmd_text_orig is None: + input_ = list(cmd_text) + del input_[0] + cmd_text_orig = "".join(input_) + cmd_compl_list = [] + for cmd in VI_COMMANDS.keys(): + if cmd.startswith(cmd_text_orig): + cmd_compl_list.append(cmd) + if cmd_compl_list: + curr_suggestion = cmd_compl_list[cmd_compl_pos] + cmd_text = ":%s" % curr_suggestion + cmd_compl_list[cmd_compl_pos] = weechat.string_eval_expression( + "${color:bold}%s${color:-bold}" % curr_suggestion, + {}, {}, {}) + cmd_compl_text = ", ".join(cmd_compl_list) + cmd_compl_pos = (cmd_compl_pos + 1) % len(cmd_compl_list) + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Input. + else: + cmd_compl_text = "" + cmd_text_orig = None + cmd_compl_pos = 0 + weechat.bar_item_update("cmd_completion") + if keys in ["\x01M", "\x01[[A", "\x01[[B"]: + cmd_compl_text = "" + return weechat.WEECHAT_RC_OK_EAT + else: + return weechat.WEECHAT_RC_OK + # Enter command mode. + elif keys in [":", "/"]: + if keys == "/": + weechat.command("", "/input search_text_here") + if not weechat.config_string_to_boolean( + vimode_settings['search_vim']): + return weechat.WEECHAT_RC_OK + else: + buf = weechat.current_buffer() + cur = weechat.buffer_get_integer(buf, "input_pos") + input_line = weechat.buffer_get_string(buf, "input") + input_line_backup[buf] = {'input_line': input_line, 'cur': cur} + input_line = ":" + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, 1, False) + set_mode("COMMAND") + cmd_compl_text = "" + cmd_text_orig = None + cmd_compl_pos = 0 + return weechat.WEECHAT_RC_OK_EAT + + # Add key to the buffer. + vi_buffer += keys + weechat.bar_item_update("vi_buffer") + if not vi_buffer: + return weechat.WEECHAT_RC_OK + + # Check if the keys have a (partial or full) match. If so, also get the + # keys without the count. (These are the actual keys we should handle.) + # After that, `vi_buffer` is only used for display purposes — only + # `vi_keys` is checked for all the handling. + # If no matches are found, the keys buffer is cleared. + matched, vi_keys, count = get_keys_and_count(vi_buffer) + if not matched: + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + # Check if it's a command (user defined key mapped to a :cmd). + if vi_keys.startswith(":"): + weechat.hook_timer(1, 0, 1, "cb_exec_cmd", "{} {}".format(vi_keys, + count)) + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + # It's a WeeChat command (user defined key mapped to a /cmd). + if vi_keys.startswith("/"): + weechat.command("", vi_keys) + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + cur = weechat.buffer_get_integer(buf, "input_pos") + + # It's a default mapping. If the corresponding value is a string, we assume + # it's a WeeChat command. Otherwise, it's a method we'll call. + if vi_keys in VI_KEYS: + if vi_keys not in ['u', '\x01R']: + add_undo_history(buf, input_line) + if isinstance(VI_KEYS[vi_keys], str): + for _ in range(max(count, 1)): + # This is to avoid crashing WeeChat on script reloads/unloads, + # because no hooks must still be running when a script is + # reloaded or unloaded. + if (VI_KEYS[vi_keys] == "/input return" and + input_line.startswith("/script ")): + return weechat.WEECHAT_RC_OK + weechat.command("", VI_KEYS[vi_keys]) + current_cur = weechat.buffer_get_integer(buf, "input_pos") + set_cur(buf, input_line, current_cur) + else: + VI_KEYS[vi_keys](buf, input_line, cur, count) + # It's a motion (e.g. "w") — call `motion_X()` where X is the motion, then + # set the cursor's position to what that function returned. + elif vi_keys in VI_MOTIONS: + if vi_keys in SPECIAL_CHARS: + func = "motion_%s" % SPECIAL_CHARS[vi_keys] + else: + func = "motion_%s" % vi_keys + end, _, _ = globals()[func](input_line, cur, count) + set_cur(buf, input_line, end) + # It's an operator + motion (e.g. "dw") — call `motion_X()` (where X is + # the motion), then we call `operator_Y()` (where Y is the operator) + # with the position `motion_X()` returned. `operator_Y()` should then + # handle changing the input line. + elif (len(vi_keys) > 1 and + vi_keys[0] in VI_OPERATORS and + vi_keys[1:] in VI_MOTIONS): + add_undo_history(buf, input_line) + if vi_keys[1:] in SPECIAL_CHARS: + func = "motion_%s" % SPECIAL_CHARS[vi_keys[1:]] + else: + func = "motion_%s" % vi_keys[1:] + pos, overwrite, catching = globals()[func](input_line, cur, count) + # If it's a catching motion, we don't want to call the operator just + # yet -- this code will run again when the motion is complete, at which + # point we will. + if not catching: + oper = "operator_%s" % vi_keys[0] + globals()[oper](buf, input_line, cur, pos, overwrite) + # The combo isn't completed yet (e.g. just "d"). + else: + return weechat.WEECHAT_RC_OK_EAT + + # We've already handled the key combo, so clear the keys buffer. + if not catching_keys_data['amount']: + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + +def cb_check_imap_esc(data, remaining_calls): + """Clear the imap_esc sequence after some time if nothing was pressed.""" + global vi_buffer + if vi_buffer == data: + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK + +def cb_key_combo_search(data, signal, signal_data): + """Handle keys while search mode is active (if search_vim is enabled).""" + if not weechat.config_string_to_boolean(vimode_settings['search_vim']): + return weechat.WEECHAT_RC_OK + if mode == "COMMAND": + if signal_data == "\x01M": + set_mode("SEARCH") + return weechat.WEECHAT_RC_OK_EAT + elif mode == "SEARCH": + if signal_data == "\x01M": + set_mode("NORMAL") + else: + if signal_data == "n": + weechat.command("", "/input search_next") + elif signal_data == "N": + weechat.command("", "/input search_previous") + # Start a new search. + elif signal_data == "/": + weechat.command("", "/input search_stop_here") + set_mode("NORMAL") + weechat.command("", "/input search_text_here") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + +# Callbacks. +# ========== + +# Bar items. +# ---------- + +def cb_vi_buffer(data, item, window): + """Return the content of the vi buffer (pressed keys on hold).""" + return vi_buffer + +def cb_cmd_completion(data, item, window): + """Return the text of the command line.""" + return cmd_compl_text + +def cb_mode_indicator(data, item, window): + """Return the current mode (INSERT/NORMAL/REPLACE/...).""" + return "{}{}{}{}{}".format( + weechat.color(mode_colors[mode]), + vimode_settings['mode_indicator_prefix'], mode, + vimode_settings['mode_indicator_suffix'], weechat.color("reset")) + +def cb_line_numbers(data, item, window): + """Fill the line numbers bar item.""" + bar_height = weechat.window_get_integer(window, "win_chat_height") + content = "" + for i in range(1, bar_height + 1): + content += "{}{}{}\n".format(vimode_settings['line_number_prefix'], i, + vimode_settings['line_number_suffix']) + return content + +# Callbacks for the line numbers bar. +# ................................... + +def cb_update_line_numbers(data, signal, signal_data): + """Call `cb_timer_update_line_numbers()` when switching buffers. + + A timer is required because the bar item is refreshed before the new buffer + is actually displayed, so ``win_chat_height`` would refer to the old + buffer. Using a timer refreshes the item after the new buffer is displayed. + """ + weechat.hook_timer(10, 0, 1, "cb_timer_update_line_numbers", "") + return weechat.WEECHAT_RC_OK + +def cb_timer_update_line_numbers(data, remaining_calls): + """Update the line numbers bar item.""" + weechat.bar_item_update("line_numbers") + return weechat.WEECHAT_RC_OK + + +# Config. +# ------- + +def cb_config(data, option, value): + """Script option changed, update our copy.""" + option_name = option.split(".")[-1] + if option_name in vimode_settings: + vimode_settings[option_name] = value + if option_name == 'user_mappings': + load_user_mappings() + if "_color" in option_name: + load_mode_colors() + return weechat.WEECHAT_RC_OK + +def load_mode_colors(): + mode_colors.update({ + 'NORMAL': "{},{}".format( + vimode_settings['mode_indicator_normal_color'], + vimode_settings['mode_indicator_normal_color_bg']), + 'INSERT': "{},{}".format( + vimode_settings['mode_indicator_insert_color'], + vimode_settings['mode_indicator_insert_color_bg']), + 'REPLACE': "{},{}".format( + vimode_settings['mode_indicator_replace_color'], + vimode_settings['mode_indicator_replace_color_bg']), + 'COMMAND': "{},{}".format( + vimode_settings['mode_indicator_cmd_color'], + vimode_settings['mode_indicator_cmd_color_bg']), + 'SEARCH': "{},{}".format( + vimode_settings['mode_indicator_search_color'], + vimode_settings['mode_indicator_search_color_bg']) + }) + +def load_user_mappings(): + """Load user-defined mappings.""" + mappings = {} + if vimode_settings['user_mappings']: + mappings.update(json.loads(vimode_settings['user_mappings'])) + vimode_settings['user_mappings'] = mappings + + +# Command-line execution. +# ----------------------- + +def cb_exec_cmd(data, remaining_calls): + """Translate and execute our custom commands to WeeChat command.""" + # Process the entered command. + data = list(data) + del data[0] + data = "".join(data) + # s/foo/bar command. + if data.startswith("s/"): + cmd = data + parsed_cmd = next(csv.reader(StringIO(cmd), delimiter="/", + escapechar="\\")) + pattern = re.escape(parsed_cmd[1]) + repl = parsed_cmd[2] + repl = re.sub(r"([^\\])&", r"\1" + pattern, repl) + flag = None + if len(parsed_cmd) == 4: + flag = parsed_cmd[3] + count = 1 + if flag == "g": + count = 0 + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + input_line = re.sub(pattern, repl, input_line, count) + weechat.buffer_set(buf, "input", input_line) + # Shell command. + elif data.startswith("!"): + weechat.command("", "/exec -buffer shell %s" % data[1:]) + # Commands like `:22`. This should start cursor mode (``/cursor``) and take + # us to the relevant line. + elif data.isdigit(): + line_number = int(data) + hdata_window = weechat.hdata_get("window") + window = weechat.current_window() + x = weechat.hdata_integer(hdata_window, window, "win_chat_x") + y = (weechat.hdata_integer(hdata_window, window, "win_chat_y") + + (line_number - 1)) + weechat.command("", "/cursor go {},{}".format(x, y)) + # Check againt defined commands. + elif data: + raw_data = data + data = data.split(" ", 1) + cmd = data[0] + args = "" + if len(data) == 2: + args = data[1] + if cmd in VI_COMMANDS: + if isinstance(VI_COMMANDS[cmd], str): + weechat.command("", "%s %s" % (VI_COMMANDS[cmd], args)) + else: + VI_COMMANDS[cmd](args) + else: + # Check for commands not sepearated by space (e.g. "b2") + for i in range(1, len(raw_data)): + tmp_cmd = raw_data[:i] + tmp_args = raw_data[i:] + if tmp_cmd in VI_COMMANDS and tmp_args.isdigit(): + weechat.command("", "%s %s" % (VI_COMMANDS[tmp_cmd], + tmp_args)) + return weechat.WEECHAT_RC_OK + # No vi commands found, run the command as WeeChat command + weechat.command("", "/{} {}".format(cmd, args)) + return weechat.WEECHAT_RC_OK + +def cb_vimode_go_to_normal(data, buf, args): + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK + +# Script commands. +# ---------------- + +def cb_vimode_cmd(data, buf, args): + """Handle script commands (``/vimode <command>``).""" + # ``/vimode`` or ``/vimode help`` + if not args or args == "help": + weechat.prnt("", "[vimode.py] %s" % README_URL) + # ``/vimode bind_keys`` or ``/vimode bind_keys --list`` + elif args.startswith("bind_keys"): + infolist = weechat.infolist_get("key", "", "default") + weechat.infolist_reset_item_cursor(infolist) + commands = ["/key unbind ctrl-W", + "/key bind ctrl-W /input delete_previous_word", + "/key bind ctrl-^ /input jump_last_buffer_displayed", + "/key bind ctrl-Wh /window left", + "/key bind ctrl-Wj /window down", + "/key bind ctrl-Wk /window up", + "/key bind ctrl-Wl /window right", + "/key bind ctrl-W= /window balance", + "/key bind ctrl-Wx /window swap", + "/key bind ctrl-Ws /window splith", + "/key bind ctrl-Wv /window splitv", + "/key bind ctrl-Wq /window merge"] + while weechat.infolist_next(infolist): + key = weechat.infolist_string(infolist, "key") + if re.match(REGEX_PROBLEMATIC_KEYBINDINGS, key): + commands.append("/key unbind %s" % key) + if args == "bind_keys": + weechat.prnt("", "Running commands:") + for command in commands: + weechat.command("", command) + weechat.prnt("", "Done.") + elif args == "bind_keys --list": + weechat.prnt("", "Listing commands we'll run:") + for command in commands: + weechat.prnt("", " %s" % command) + weechat.prnt("", "Done.") + return weechat.WEECHAT_RC_OK + + +# Helpers. +# ======== + +# Motions/keys helpers. +# --------------------- + +def get_pos(data, regex, cur, ignore_cur=False, count=0): + """Return the position of `regex` match in `data`, starting at `cur`. + + Args: + data (str): the data to search in. + regex (pattern): regex pattern to search for. + cur (int): where to start the search. + ignore_cur (bool, optional): should the first match be ignored if it's + also the character at `cur`? + Defaults to False. + count (int, optional): the index of the match to return. Defaults to 0. + + Returns: + int: position of the match. -1 if no matches are found. + """ + # List of the *positions* of the found patterns. + matches = [m.start() for m in re.finditer(regex, data[cur:])] + pos = -1 + if count: + if len(matches) > count - 1: + if ignore_cur and matches[0] == 0: + if len(matches) > count: + pos = matches[count] + else: + pos = matches[count - 1] + elif matches: + if ignore_cur and matches[0] == 0: + if len(matches) > 1: + pos = matches[1] + else: + pos = matches[0] + return pos + +def set_cur(buf, input_line, pos, cap=True): + """Set the cursor's position. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + pos (int): the position to set the cursor to. + cap (bool, optional): if True, the `pos` will shortened to the length + of `input_line` if it's too long. Defaults to True. + """ + if cap: + pos = min(pos, len(input_line) - 1) + weechat.buffer_set(buf, "input_pos", str(pos)) + +def start_catching_keys(amount, callback, input_line, cur, count, buf=None): + """Start catching keys. Used for special commands (e.g. "f", "r"). + + amount (int): amount of keys to catch. + callback (str): name of method to call once all keys are caught. + input_line (str): input line's content. + cur (int): cursor's position. + count (int): count, e.g. "2" for "2fs". + buf (str, optional): pointer to the current WeeChat buffer. + Defaults to None. + + `catching_keys_data` is a dict with the above arguments, as well as: + keys (str): pressed keys will be added under this key. + new_cur (int): the new cursor's position, set in the callback. + + When catching keys is active, normal pressed keys (e.g. "a" but not arrows) + will get added to `catching_keys_data` under the key "keys", and will not + be handled any further. + Once all keys are caught, the method defined in the "callback" key is + called, and can use the data in `catching_keys_data` to perform its action. + """ + global catching_keys_data + if "new_cur" in catching_keys_data: + new_cur = catching_keys_data['new_cur'] + catching_keys_data = {'amount': 0} + return new_cur, True, False + catching_keys_data = ({'amount': amount, + 'callback': callback, + 'input_line': input_line, + 'cur': cur, + 'keys': "", + 'count': count, + 'new_cur': 0, + 'buf': buf}) + return cur, False, True + +def get_keys_and_count(combo): + """Check if `combo` is a valid combo and extract keys/counts if so. + + Args: + combo (str): pressed keys combo. + + Returns: + matched (bool): True if the combo has a (partial or full) match, False + otherwise. + combo (str): `combo` with the count removed. These are the actual keys + we should handle. User mappings are also expanded. + count (int): count for `combo`. + """ + # Look for a potential match (e.g. "d" might become "dw" or "dd" so we + # accept it, but "d9" is invalid). + matched = False + # Digits are allowed at the beginning (counts or "0"). + count = 0 + if combo.isdigit(): + matched = True + elif combo and combo[0].isdigit(): + count = "" + for char in combo: + if char.isdigit(): + count += char + else: + break + combo = combo.replace(count, "", 1) + count = int(count) + # It's a user defined key. Expand it. + if combo in vimode_settings['user_mappings']: + combo = vimode_settings['user_mappings'][combo] + # It's a WeeChat command. + if not matched and combo.startswith("/"): + matched = True + # Check against defined keys. + if not matched: + for key in VI_KEYS: + if key.startswith(combo): + matched = True + break + # Check against defined motions. + if not matched: + for motion in VI_MOTIONS: + if motion.startswith(combo): + matched = True + break + # Check against defined operators + motions. + if not matched: + for operator in VI_OPERATORS: + if combo.startswith(operator): + # Check for counts before the motion (but after the operator). + vi_keys_no_op = combo[len(operator):] + # There's no motion yet. + if vi_keys_no_op.isdigit(): + matched = True + break + # Get the motion count, then multiply the operator count by + # it, similar to vim's behavior. + elif vi_keys_no_op and vi_keys_no_op[0].isdigit(): + motion_count = "" + for char in vi_keys_no_op: + if char.isdigit(): + motion_count += char + else: + break + # Remove counts from `vi_keys_no_op`. + combo = combo.replace(motion_count, "", 1) + motion_count = int(motion_count) + count = max(count, 1) * motion_count + # Check against defined motions. + for motion in VI_MOTIONS: + if motion.startswith(combo[1:]): + matched = True + break + return matched, combo, count + + +# Other helpers. +# -------------- + +def set_mode(arg): + """Set the current mode and update the bar mode indicator.""" + global mode + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + if mode == "INSERT" and arg == "NORMAL": + add_undo_history(buf, input_line) + mode = arg + # If we're going to Normal mode, the cursor must move one character to the + # left. + if mode == "NORMAL": + cur = weechat.buffer_get_integer(buf, "input_pos") + set_cur(buf, input_line, cur - 1, False) + weechat.bar_item_update("mode_indicator") + +def cb_check_cmd_mode(data, remaining_calls): + """Exit command mode if user erases the leading ':' character.""" + buf = weechat.current_buffer() + cmd_text = weechat.buffer_get_string(buf, "input") + if not cmd_text: + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK + +def add_undo_history(buf, input_line): + """Add an item to the per-buffer undo history.""" + if buf in undo_history: + if not undo_history[buf] or undo_history[buf][-1] != input_line: + undo_history[buf].append(input_line) + undo_history_index[buf] = -1 + else: + undo_history[buf] = ['', input_line] + undo_history_index[buf] = -1 + +def clear_undo_history(buf): + """Clear the undo history for a given buffer.""" + undo_history[buf] = [''] + undo_history_index[buf] = -1 + +def print_warning(text): + """Print warning, in red, to the current buffer.""" + weechat.prnt("", ("%s[vimode.py] %s" % (weechat.color("red"), text))) + +def check_warnings(): + """Warn the user about problematic key bindings and tmux/screen.""" + user_warned = False + # Warn the user about problematic key bindings that may conflict with + # vimode. + # The solution is to remove these key bindings, but that's up to the user. + infolist = weechat.infolist_get("key", "", "default") + problematic_keybindings = [] + while weechat.infolist_next(infolist): + key = weechat.infolist_string(infolist, "key") + command = weechat.infolist_string(infolist, "command") + if re.match(REGEX_PROBLEMATIC_KEYBINDINGS, key): + problematic_keybindings.append("%s -> %s" % (key, command)) + if problematic_keybindings: + user_warned = True + print_warning("Problematic keybindings detected:") + for keybinding in problematic_keybindings: + print_warning(" %s" % keybinding) + print_warning("These keybindings may conflict with vimode.") + print_warning("You can remove problematic key bindings and add" + " recommended ones by using /vimode bind_keys, or only" + " list them with /vimode bind_keys --list") + print_warning("For help, see: %s" % FAQ_KEYBINDINGS) + del problematic_keybindings + # Warn tmux/screen users about possible Esc detection delays. + if "STY" in os.environ or "TMUX" in os.environ: + if user_warned: + weechat.prnt("", "") + user_warned = True + print_warning("tmux/screen users, see: %s" % FAQ_ESC) + if (user_warned and not + weechat.config_string_to_boolean(vimode_settings['no_warn'])): + if user_warned: + weechat.prnt("", "") + print_warning("To force disable warnings, you can set" + " plugins.var.python.vimode.no_warn to 'on'") + + +# Main script. +# ============ + +if __name__ == "__main__": + weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, + SCRIPT_LICENSE, SCRIPT_DESC, "", "") + # Warn the user if he's using an unsupported WeeChat version. + VERSION = weechat.info_get("version_number", "") + if int(VERSION) < 0x01000000: + print_warning("Please upgrade to WeeChat ≥ 1.0.0. Previous versions" + " are not supported.") + # Set up script options. + for option, value in list(vimode_settings.items()): + if weechat.config_is_set_plugin(option): + vimode_settings[option] = weechat.config_get_plugin(option) + else: + weechat.config_set_plugin(option, value[0]) + vimode_settings[option] = value[0] + weechat.config_set_desc_plugin(option, + "%s (default: \"%s\")" % (value[1], + value[0])) + load_user_mappings() + load_mode_colors() + # Warn the user about possible problems if necessary. + if not weechat.config_string_to_boolean(vimode_settings['no_warn']): + check_warnings() + # Create bar items and setup hooks. + weechat.bar_item_new("mode_indicator", "cb_mode_indicator", "") + weechat.bar_item_new("cmd_completion", "cb_cmd_completion", "") + weechat.bar_item_new("vi_buffer", "cb_vi_buffer", "") + weechat.bar_item_new("line_numbers", "cb_line_numbers", "") + weechat.bar_new("vi_line_numbers", "on", "0", "window", "", "left", + "vertical", "vertical", "0", "0", "default", "default", + "default", "0", "line_numbers") + weechat.hook_config("plugins.var.python.%s.*" % SCRIPT_NAME, "cb_config", + "") + weechat.hook_signal("key_pressed", "cb_key_pressed", "") + weechat.hook_signal("key_combo_default", "cb_key_combo_default", "") + weechat.hook_signal("key_combo_search", "cb_key_combo_search", "") + weechat.hook_signal("buffer_switch", "cb_update_line_numbers", "") + weechat.hook_command("vimode", SCRIPT_DESC, "[help | bind_keys [--list]]", + " help: show help\n" + "bind_keys: unbind problematic keys, and bind" + " recommended keys to use in WeeChat\n" + " --list: only list changes", + "help || bind_keys |--list", + "cb_vimode_cmd", "") + weechat.hook_command("vimode_go_to_normal", + ("This command can be used for key bindings to go to " + "normal mode."), + "", "", "", "cb_vimode_go_to_normal", "") + # Remove obsolete bar. + vi_cmd_bar = weechat.bar_search("vi_cmd") + weechat.bar_remove(vi_cmd_bar) diff --git a/.weechat/python/wee_slack.py b/.weechat/python/wee_slack.py new file mode 100644 index 0000000..3dd10cc --- /dev/null +++ b/.weechat/python/wee_slack.py @@ -0,0 +1,5013 @@ +# Copyright (c) 2014-2016 Ryan Huber <rhuber@gmail.com> +# Copyright (c) 2015-2018 Tollef Fog Heen <tfheen@err.no> +# Copyright (c) 2015-2020 Trygve Aaberge <trygveaa@gmail.com> +# Released under the MIT license. + +from __future__ import print_function, unicode_literals + +from collections import OrderedDict +from datetime import date, datetime, timedelta +from functools import partial, wraps +from io import StringIO +from itertools import chain, count, islice + +import errno +import textwrap +import time +import json +import hashlib +import os +import re +import sys +import traceback +import collections +import ssl +import random +import socket +import string + +# Prevent websocket from using numpy (it's an optional dependency). We do this +# because numpy causes python (and thus weechat) to crash when it's reloaded. +# See https://github.com/numpy/numpy/issues/11925 +sys.modules["numpy"] = None + +from websocket import ABNF, create_connection, WebSocketConnectionClosedException + +try: + basestring # Python 2 + unicode +except NameError: # Python 3 + basestring = unicode = str + +try: + from urllib.parse import urlencode +except ImportError: + from urllib import urlencode + +try: + from json import JSONDecodeError +except: + JSONDecodeError = ValueError + +# hack to make tests possible.. better way? +try: + import weechat +except ImportError: + pass + +SCRIPT_NAME = "slack" +SCRIPT_AUTHOR = "Ryan Huber <rhuber@gmail.com>" +SCRIPT_VERSION = "2.4.0" +SCRIPT_LICENSE = "MIT" +SCRIPT_DESC = "Extends weechat for typing notification/search/etc on slack.com" +REPO_URL = "https://github.com/wee-slack/wee-slack" + +BACKLOG_SIZE = 200 +SCROLLBACK_SIZE = 500 + +RECORD_DIR = "/tmp/weeslack-debug" + +SLACK_API_TRANSLATOR = { + "channel": { + "history": "channels.history", + "join": "conversations.join", + "leave": "conversations.leave", + "mark": "channels.mark", + "info": "channels.info", + }, + "im": { + "history": "im.history", + "join": "conversations.open", + "leave": "conversations.close", + "mark": "im.mark", + }, + "mpim": { + "history": "mpim.history", + "join": "mpim.open", # conversations.open lacks unread_count_display + "leave": "conversations.close", + "mark": "mpim.mark", + "info": "groups.info", + }, + "group": { + "history": "groups.history", + "join": "conversations.join", + "leave": "conversations.leave", + "mark": "groups.mark", + "info": "groups.info" + }, + "private": { + "history": "conversations.history", + "join": "conversations.join", + "leave": "conversations.leave", + "mark": "conversations.mark", + "info": "conversations.info", + }, + "shared": { + "history": "conversations.history", + "join": "conversations.join", + "leave": "conversations.leave", + "mark": "channels.mark", + "info": "conversations.info", + }, + "thread": { + "history": None, + "join": None, + "leave": None, + "mark": None, + } + + +} + +###### Decorators have to be up here + + +def slack_buffer_or_ignore(f): + """ + Only run this function if we're in a slack buffer, else ignore + """ + @wraps(f) + def wrapper(data, current_buffer, *args, **kwargs): + if current_buffer not in EVENTROUTER.weechat_controller.buffers: + return w.WEECHAT_RC_OK + return f(data, current_buffer, *args, **kwargs) + return wrapper + + +def slack_buffer_required(f): + """ + Only run this function if we're in a slack buffer, else print error + """ + @wraps(f) + def wrapper(data, current_buffer, *args, **kwargs): + if current_buffer not in EVENTROUTER.weechat_controller.buffers: + command_name = f.__name__.replace('command_', '', 1) + w.prnt('', 'slack: command "{}" must be executed on slack buffer'.format(command_name)) + return w.WEECHAT_RC_ERROR + return f(data, current_buffer, *args, **kwargs) + return wrapper + + +def utf8_decode(f): + """ + Decode all arguments from byte strings to unicode strings. Use this for + functions called from outside of this script, e.g. callbacks from weechat. + """ + @wraps(f) + def wrapper(*args, **kwargs): + return f(*decode_from_utf8(args), **decode_from_utf8(kwargs)) + return wrapper + + +NICK_GROUP_HERE = "0|Here" +NICK_GROUP_AWAY = "1|Away" +NICK_GROUP_EXTERNAL = "2|External" + +sslopt_ca_certs = {} +if hasattr(ssl, "get_default_verify_paths") and callable(ssl.get_default_verify_paths): + ssl_defaults = ssl.get_default_verify_paths() + if ssl_defaults.cafile is not None: + sslopt_ca_certs = {'ca_certs': ssl_defaults.cafile} + +EMOJI = {} +EMOJI_WITH_SKIN_TONES_REVERSE = {} + +###### Unicode handling + + +def encode_to_utf8(data): + if sys.version_info.major > 2: + return data + elif isinstance(data, unicode): + return data.encode('utf-8') + if isinstance(data, bytes): + return data + elif isinstance(data, collections.Mapping): + return type(data)(map(encode_to_utf8, data.items())) + elif isinstance(data, collections.Iterable): + return type(data)(map(encode_to_utf8, data)) + else: + return data + + +def decode_from_utf8(data): + if sys.version_info.major > 2: + return data + elif isinstance(data, bytes): + return data.decode('utf-8') + if isinstance(data, unicode): + return data + elif isinstance(data, collections.Mapping): + return type(data)(map(decode_from_utf8, data.items())) + elif isinstance(data, collections.Iterable): + return type(data)(map(decode_from_utf8, data)) + else: + return data + + +class WeechatWrapper(object): + def __init__(self, wrapped_class): + self.wrapped_class = wrapped_class + + # Helper method used to encode/decode method calls. + def wrap_for_utf8(self, method): + def hooked(*args, **kwargs): + result = method(*encode_to_utf8(args), **encode_to_utf8(kwargs)) + # Prevent wrapped_class from becoming unwrapped + if result == self.wrapped_class: + return self + return decode_from_utf8(result) + return hooked + + # Encode and decode everything sent to/received from weechat. We use the + # unicode type internally in wee-slack, but has to send utf8 to weechat. + def __getattr__(self, attr): + orig_attr = self.wrapped_class.__getattribute__(attr) + if callable(orig_attr): + return self.wrap_for_utf8(orig_attr) + else: + return decode_from_utf8(orig_attr) + + # Ensure all lines sent to weechat specifies a prefix. For lines after the + # first, we want to disable the prefix, which is done by specifying a space. + def prnt_date_tags(self, buffer, date, tags, message): + message = message.replace("\n", "\n \t") + return self.wrap_for_utf8(self.wrapped_class.prnt_date_tags)(buffer, date, tags, message) + + +class ProxyWrapper(object): + def __init__(self): + self.proxy_name = w.config_string(w.config_get('weechat.network.proxy_curl')) + self.proxy_string = "" + self.proxy_type = "" + self.proxy_address = "" + self.proxy_port = "" + self.proxy_user = "" + self.proxy_password = "" + self.has_proxy = False + + if self.proxy_name: + self.proxy_string = "weechat.proxy.{}".format(self.proxy_name) + self.proxy_type = w.config_string(w.config_get("{}.type".format(self.proxy_string))) + if self.proxy_type == "http": + self.proxy_address = w.config_string(w.config_get("{}.address".format(self.proxy_string))) + self.proxy_port = w.config_integer(w.config_get("{}.port".format(self.proxy_string))) + self.proxy_user = w.config_string(w.config_get("{}.username".format(self.proxy_string))) + self.proxy_password = w.config_string(w.config_get("{}.password".format(self.proxy_string))) + self.has_proxy = True + else: + w.prnt("", "\nWarning: weechat.network.proxy_curl is set to {} type (name : {}, conf string : {}). Only HTTP proxy is supported.\n\n".format(self.proxy_type, self.proxy_name, self.proxy_string)) + + def curl(self): + if not self.has_proxy: + return "" + + if self.proxy_user and self.proxy_password: + user = "{}:{}@".format(self.proxy_user, self.proxy_password) + else: + user = "" + + if self.proxy_port: + port = ":{}".format(self.proxy_port) + else: + port = "" + + return "-x{}{}{}".format(user, self.proxy_address, port) + + +##### Helpers + + +def colorize_string(color, string, reset_color='reset'): + if color: + return w.color(color) + string + w.color(reset_color) + else: + return string + + +def print_error(message, buffer=''): + w.prnt(buffer, '{}Error: {}'.format(w.prefix('error'), message)) + + +def format_exc_tb(): + return decode_from_utf8(traceback.format_exc()) + + +def format_exc_only(): + etype, value, _ = sys.exc_info() + return ''.join(decode_from_utf8(traceback.format_exception_only(etype, value))) + + +def get_nick_color(nick): + info_name_prefix = "irc_" if int(weechat_version) < 0x1050000 else "" + return w.info_get(info_name_prefix + "nick_color_name", nick) + + +def get_thread_color(thread_id): + if config.color_thread_suffix == 'multiple': + return get_nick_color(thread_id) + else: + return config.color_thread_suffix + + +def sha1_hex(s): + return hashlib.sha1(s.encode('utf-8')).hexdigest() + + +def get_functions_with_prefix(prefix): + return {name[len(prefix):]: ref for name, ref in globals().items() + if name.startswith(prefix)} + + +def handle_socket_error(exception, team, caller_name): + if not (isinstance(exception, WebSocketConnectionClosedException) or + exception.errno in (errno.EPIPE, errno.ECONNRESET, errno.ETIMEDOUT)): + raise + + w.prnt(team.channel_buffer, + 'Lost connection to slack team {} (on {}), reconnecting.'.format( + team.domain, caller_name)) + dbg('Socket failed on {} with exception:\n{}'.format( + caller_name, format_exc_tb()), level=5) + team.set_disconnected() + + +EMOJI_NAME_REGEX = re.compile(':([^: ]+):') +EMOJI_REGEX_STRING = '[\U00000080-\U0010ffff]+' + + +def regex_match_to_emoji(match, include_name=False): + emoji = match.group(1) + full_match = match.group() + char = EMOJI.get(emoji, full_match) + if include_name and char != full_match: + return '{} ({})'.format(char, full_match) + return char + + +def replace_string_with_emoji(text): + if config.render_emoji_as_string == 'both': + return EMOJI_NAME_REGEX.sub( + partial(regex_match_to_emoji, include_name=True), + text, + ) + elif config.render_emoji_as_string: + return text + return EMOJI_NAME_REGEX.sub(regex_match_to_emoji, text) + + +def replace_emoji_with_string(text): + return EMOJI_WITH_SKIN_TONES_REVERSE.get(text, text) + + +###### New central Event router + +class EventRouter(object): + + def __init__(self): + """ + complete + Eventrouter is the central hub we use to route: + 1) incoming websocket data + 2) outgoing http requests and incoming replies + 3) local requests + It has a recorder that, when enabled, logs most events + to the location specified in RECORD_DIR. + """ + self.queue = [] + self.slow_queue = [] + self.slow_queue_timer = 0 + self.teams = {} + self.subteams = {} + self.context = {} + self.weechat_controller = WeechatController(self) + self.previous_buffer = "" + self.reply_buffer = {} + self.cmds = get_functions_with_prefix("command_") + self.proc = get_functions_with_prefix("process_") + self.handlers = get_functions_with_prefix("handle_") + self.local_proc = get_functions_with_prefix("local_process_") + self.shutting_down = False + self.recording = False + self.recording_path = "/tmp" + self.handle_next_hook = None + self.handle_next_hook_interval = -1 + + def record(self): + """ + complete + Toggles the event recorder and creates a directory for data if enabled. + """ + self.recording = not self.recording + if self.recording: + if not os.path.exists(RECORD_DIR): + os.makedirs(RECORD_DIR) + + def record_event(self, message_json, file_name_field, subdir=None): + """ + complete + Called each time you want to record an event. + message_json is a json in dict form + file_name_field is the json key whose value you want to be part of the file name + """ + now = time.time() + if subdir: + directory = "{}/{}".format(RECORD_DIR, subdir) + else: + directory = RECORD_DIR + if not os.path.exists(directory): + os.makedirs(directory) + mtype = message_json.get(file_name_field, 'unknown') + f = open('{}/{}-{}.json'.format(directory, now, mtype), 'w') + f.write("{}".format(json.dumps(message_json))) + f.close() + + def store_context(self, data): + """ + A place to store data and vars needed by callback returns. We need this because + weechat's "callback_data" has a limited size and weechat will crash if you exceed + this size. + """ + identifier = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(40)) + self.context[identifier] = data + dbg("stored context {} {} ".format(identifier, data.url)) + return identifier + + def retrieve_context(self, identifier): + """ + A place to retrieve data and vars needed by callback returns. We need this because + weechat's "callback_data" has a limited size and weechat will crash if you exceed + this size. + """ + return self.context.get(identifier) + + def delete_context(self, identifier): + """ + Requests can span multiple requests, so we may need to delete this as a last step + """ + if identifier in self.context: + del self.context[identifier] + + def shutdown(self): + """ + complete + This toggles shutdown mode. Shutdown mode tells us not to + talk to Slack anymore. Without this, typing /quit will trigger + a race with the buffer close callback and may result in you + leaving every slack channel. + """ + self.shutting_down = not self.shutting_down + + def register_team(self, team): + """ + complete + Adds a team to the list of known teams for this EventRouter. + """ + if isinstance(team, SlackTeam): + self.teams[team.get_team_hash()] = team + else: + raise InvalidType(type(team)) + + def reconnect_if_disconnected(self): + for team in self.teams.values(): + time_since_last_ping = time.time() - team.last_ping_time + time_since_last_pong = time.time() - team.last_pong_time + if team.connected and time_since_last_ping < 5 and time_since_last_pong > 30: + w.prnt(team.channel_buffer, + 'Lost connection to slack team {} (no pong), reconnecting.'.format( + team.domain)) + team.set_disconnected() + if not team.connected: + team.connect() + dbg("reconnecting {}".format(team)) + + @utf8_decode + def receive_ws_callback(self, team_hash, fd): + """ + This is called by the global method of the same name. + It is triggered when we have incoming data on a websocket, + which needs to be read. Once it is read, we will ensure + the data is valid JSON, add metadata, and place it back + on the queue for processing as JSON. + """ + team = self.teams[team_hash] + while True: + try: + # Read the data from the websocket associated with this team. + opcode, data = team.ws.recv_data(control_frame=True) + except ssl.SSLWantReadError: + # No more data to read at this time. + return w.WEECHAT_RC_OK + except (WebSocketConnectionClosedException, socket.error) as e: + handle_socket_error(e, team, 'receive') + return w.WEECHAT_RC_OK + + if opcode == ABNF.OPCODE_PONG: + team.last_pong_time = time.time() + return w.WEECHAT_RC_OK + elif opcode != ABNF.OPCODE_TEXT: + return w.WEECHAT_RC_OK + + message_json = json.loads(data.decode('utf-8')) + message_json["wee_slack_metadata_team"] = team + if self.recording: + self.record_event(message_json, 'type', 'websocket') + self.receive(message_json) + return w.WEECHAT_RC_OK + + @utf8_decode + def receive_httprequest_callback(self, data, command, return_code, out, err): + """ + complete + Receives the result of an http request we previously handed + off to weechat (weechat bundles libcurl). Weechat can fragment + replies, so it buffers them until the reply is complete. + It is then populated with metadata here so we can identify + where the request originated and route properly. + """ + request_metadata = self.retrieve_context(data) + dbg("RECEIVED CALLBACK with request of {} id of {} and code {} of length {}".format(request_metadata.request, request_metadata.response_id, return_code, len(out))) + if return_code == 0: + if len(out) > 0: + if request_metadata.response_id not in self.reply_buffer: + self.reply_buffer[request_metadata.response_id] = StringIO() + self.reply_buffer[request_metadata.response_id].write(out) + try: + j = json.loads(self.reply_buffer[request_metadata.response_id].getvalue()) + except: + pass + # dbg("Incomplete json, awaiting more", True) + try: + j["wee_slack_process_method"] = request_metadata.request_normalized + if self.recording: + self.record_event(j, 'wee_slack_process_method', 'http') + j["wee_slack_request_metadata"] = request_metadata + self.reply_buffer.pop(request_metadata.response_id) + self.receive(j) + self.delete_context(data) + except: + dbg("HTTP REQUEST CALLBACK FAILED", True) + pass + # We got an empty reply and this is weird so just ditch it and retry + else: + dbg("length was zero, probably a bug..") + self.delete_context(data) + self.receive(request_metadata) + elif return_code == -1: + if request_metadata.response_id not in self.reply_buffer: + self.reply_buffer[request_metadata.response_id] = StringIO() + self.reply_buffer[request_metadata.response_id].write(out) + else: + self.reply_buffer.pop(request_metadata.response_id, None) + self.delete_context(data) + if request_metadata.request.startswith('rtm.'): + retry_text = ('retrying' if request_metadata.should_try() else + 'will not retry after too many failed attempts') + w.prnt('', ('Failed connecting to slack team with token starting with {}, {}. ' + + 'If this persists, try increasing slack_timeout. Error: {}') + .format(request_metadata.token[:15], retry_text, err)) + dbg('rtm.start failed with return_code {}. stack:\n{}' + .format(return_code, ''.join(traceback.format_stack())), level=5) + self.receive(request_metadata) + return w.WEECHAT_RC_OK + + def receive(self, dataobj): + """ + complete + Receives a raw object and places it on the queue for + processing. Object must be known to handle_next or + be JSON. + """ + dbg("RECEIVED FROM QUEUE") + self.queue.append(dataobj) + + def receive_slow(self, dataobj): + """ + complete + Receives a raw object and places it on the slow queue for + processing. Object must be known to handle_next or + be JSON. + """ + dbg("RECEIVED FROM QUEUE") + self.slow_queue.append(dataobj) + + def handle_next(self): + """ + complete + Main handler of the EventRouter. This is called repeatedly + via callback to drain events from the queue. It also attaches + useful metadata and context to events as they are processed. + """ + wanted_interval = 100 + if len(self.slow_queue) > 0 or len(self.queue) > 0: + wanted_interval = 10 + if self.handle_next_hook is None or wanted_interval != self.handle_next_hook_interval: + if self.handle_next_hook: + w.unhook(self.handle_next_hook) + self.handle_next_hook = w.hook_timer(wanted_interval, 0, 0, "handle_next", "") + self.handle_next_hook_interval = wanted_interval + + + if len(self.slow_queue) > 0 and ((self.slow_queue_timer + 1) < time.time()): + dbg("from slow queue", 0) + self.queue.append(self.slow_queue.pop()) + self.slow_queue_timer = time.time() + if len(self.queue) > 0: + j = self.queue.pop(0) + # Reply is a special case of a json reply from websocket. + kwargs = {} + if isinstance(j, SlackRequest): + if j.should_try(): + if j.retry_ready(): + local_process_async_slack_api_request(j, self) + else: + self.slow_queue.append(j) + else: + dbg("Max retries for Slackrequest") + + else: + + if "reply_to" in j: + dbg("SET FROM REPLY") + function_name = "reply" + elif "type" in j: + dbg("SET FROM type") + function_name = j["type"] + elif "wee_slack_process_method" in j: + dbg("SET FROM META") + function_name = j["wee_slack_process_method"] + else: + dbg("SET FROM NADA") + function_name = "unknown" + + request = j.get("wee_slack_request_metadata") + if request: + team = request.team + channel = request.channel + metadata = request.metadata + else: + team = j.get("wee_slack_metadata_team") + channel = None + metadata = {} + + if team: + if "channel" in j: + channel_id = j["channel"]["id"] if type(j["channel"]) == dict else j["channel"] + channel = team.channels.get(channel_id, channel) + if "user" in j: + user_id = j["user"]["id"] if type(j["user"]) == dict else j["user"] + metadata['user'] = team.users.get(user_id) + + dbg("running {}".format(function_name)) + if function_name.startswith("local_") and function_name in self.local_proc: + self.local_proc[function_name](j, self, team, channel, metadata) + elif function_name in self.proc: + self.proc[function_name](j, self, team, channel, metadata) + elif function_name in self.handlers: + self.handlers[function_name](j, self, team, channel, metadata) + else: + dbg("Callback not implemented for event: {}".format(function_name)) + + +def handle_next(data, remaining_calls): + try: + EVENTROUTER.handle_next() + except: + if config.debug_mode: + traceback.print_exc() + else: + pass + return w.WEECHAT_RC_OK + + +class WeechatController(object): + """ + Encapsulates our interaction with weechat + """ + + def __init__(self, eventrouter): + self.eventrouter = eventrouter + self.buffers = {} + self.previous_buffer = None + self.buffer_list_stale = False + + def iter_buffers(self): + for b in self.buffers: + yield (b, self.buffers[b]) + + def register_buffer(self, buffer_ptr, channel): + """ + complete + Adds a weechat buffer to the list of handled buffers for this EventRouter + """ + if isinstance(buffer_ptr, basestring): + self.buffers[buffer_ptr] = channel + else: + raise InvalidType(type(buffer_ptr)) + + def unregister_buffer(self, buffer_ptr, update_remote=False, close_buffer=False): + """ + complete + Adds a weechat buffer to the list of handled buffers for this EventRouter + """ + channel = self.buffers.get(buffer_ptr) + if channel: + channel.destroy_buffer(update_remote) + del self.buffers[buffer_ptr] + if close_buffer: + w.buffer_close(buffer_ptr) + + def get_channel_from_buffer_ptr(self, buffer_ptr): + return self.buffers.get(buffer_ptr) + + def get_all(self, buffer_ptr): + return self.buffers + + def get_previous_buffer_ptr(self): + return self.previous_buffer + + def set_previous_buffer(self, data): + self.previous_buffer = data + + def check_refresh_buffer_list(self): + return self.buffer_list_stale and self.last_buffer_list_update + 1 < time.time() + + def set_refresh_buffer_list(self, setting): + self.buffer_list_stale = setting + +###### New Local Processors + + +def local_process_async_slack_api_request(request, event_router): + """ + complete + Sends an API request to Slack. You'll need to give this a well formed SlackRequest object. + DEBUGGING!!! The context here cannot be very large. Weechat will crash. + """ + if not event_router.shutting_down: + weechat_request = 'url:{}'.format(request.request_string()) + weechat_request += '&nonce={}'.format(''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(4))) + params = {'useragent': 'wee_slack {}'.format(SCRIPT_VERSION)} + request.tried() + context = event_router.store_context(request) + # TODO: let flashcode know about this bug - i have to 'clear' the hashtable or retry requests fail + w.hook_process_hashtable('url:', params, config.slack_timeout, "", context) + w.hook_process_hashtable(weechat_request, params, config.slack_timeout, "receive_httprequest_callback", context) + +###### New Callbacks + + +@utf8_decode +def ws_ping_cb(data, remaining_calls): + for team in EVENTROUTER.teams.values(): + if team.ws and team.connected: + try: + team.ws.ping() + team.last_ping_time = time.time() + except (WebSocketConnectionClosedException, socket.error) as e: + handle_socket_error(e, team, 'ping') + return w.WEECHAT_RC_OK + + +@utf8_decode +def reconnect_callback(*args): + EVENTROUTER.reconnect_if_disconnected() + return w.WEECHAT_RC_OK + + +@utf8_decode +def buffer_closing_callback(signal, sig_type, data): + """ + Receives a callback from weechat when a buffer is being closed. + """ + EVENTROUTER.weechat_controller.unregister_buffer(data, True, False) + return w.WEECHAT_RC_OK + + +@utf8_decode +def buffer_input_callback(signal, buffer_ptr, data): + """ + incomplete + Handles everything a user types in the input bar. In our case + this includes add/remove reactions, modifying messages, and + sending messages. + """ + eventrouter = eval(signal) + channel = eventrouter.weechat_controller.get_channel_from_buffer_ptr(buffer_ptr) + if not channel: + return w.WEECHAT_RC_ERROR + + def get_id(message_id): + if not message_id: + return 1 + elif message_id[0] == "$": + return message_id[1:] + else: + return int(message_id) + + message_id_regex = r"(\d*|\$[0-9a-fA-F]{3,})" + reaction = re.match(r"^{}(\+|-)(:(.+):|{})\s*$".format(message_id_regex, EMOJI_REGEX_STRING), data) + substitute = re.match("^{}s/".format(message_id_regex), data) + if reaction: + emoji_match = reaction.group(4) or reaction.group(3) + emoji = replace_emoji_with_string(emoji_match) + if reaction.group(2) == "+": + channel.send_add_reaction(get_id(reaction.group(1)), emoji) + elif reaction.group(2) == "-": + channel.send_remove_reaction(get_id(reaction.group(1)), emoji) + elif substitute: + msg_id = get_id(substitute.group(1)) + try: + old, new, flags = re.split(r'(?<!\\)/', data)[1:] + except ValueError: + pass + else: + # Replacement string in re.sub() is a string, not a regex, so get + # rid of escapes. + new = new.replace(r'\/', '/') + old = old.replace(r'\/', '/') + channel.edit_nth_previous_message(msg_id, old, new, flags) + else: + if data.startswith(('//', ' ')): + data = data[1:] + channel.send_message(data) + # this is probably wrong channel.mark_read(update_remote=True, force=True) + return w.WEECHAT_RC_OK + + +# Workaround for supporting multiline messages. It intercepts before the input +# callback is called, as this is called with the whole message, while it is +# normally split on newline before being sent to buffer_input_callback +def input_text_for_buffer_cb(data, modifier, current_buffer, string): + if current_buffer not in EVENTROUTER.weechat_controller.buffers: + return string + message = decode_from_utf8(string) + if not message.startswith("/") and "\n" in message: + buffer_input_callback("EVENTROUTER", current_buffer, message) + return "" + return string + + +@utf8_decode +def buffer_switch_callback(signal, sig_type, data): + """ + Every time we change channels in weechat, we call this to: + 1) set read marker 2) determine if we have already populated + channel history data 3) set presence to active + """ + eventrouter = eval(signal) + + prev_buffer_ptr = eventrouter.weechat_controller.get_previous_buffer_ptr() + # this is to see if we need to gray out things in the buffer list + prev = eventrouter.weechat_controller.get_channel_from_buffer_ptr(prev_buffer_ptr) + if prev: + prev.mark_read() + + new_channel = eventrouter.weechat_controller.get_channel_from_buffer_ptr(data) + if new_channel: + if not new_channel.got_history: + new_channel.get_history() + set_own_presence_active(new_channel.team) + + eventrouter.weechat_controller.set_previous_buffer(data) + return w.WEECHAT_RC_OK + + +@utf8_decode +def buffer_list_update_callback(data, somecount): + """ + incomplete + A simple timer-based callback that will update the buffer list + if needed. We only do this max 1x per second, as otherwise it + uses a lot of cpu for minimal changes. We use buffer short names + to indicate typing via "#channel" <-> ">channel" and + user presence via " name" <-> "+name". + """ + eventrouter = eval(data) + + for b in eventrouter.weechat_controller.iter_buffers(): + b[1].refresh() +# buffer_list_update = True +# if eventrouter.weechat_controller.check_refresh_buffer_list(): +# # gray_check = False +# # if len(servers) > 1: +# # gray_check = True +# eventrouter.weechat_controller.set_refresh_buffer_list(False) + return w.WEECHAT_RC_OK + + +def quit_notification_callback(signal, sig_type, data): + stop_talking_to_slack() + return w.WEECHAT_RC_OK + + +@utf8_decode +def typing_notification_cb(data, signal, current_buffer): + msg = w.buffer_get_string(current_buffer, "input") + if len(msg) > 8 and msg[0] != "/": + global typing_timer + now = time.time() + if typing_timer + 4 < now: + channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if channel and channel.type != "thread": + identifier = channel.identifier + request = {"type": "typing", "channel": identifier} + channel.team.send_to_websocket(request, expect_reply=False) + typing_timer = now + return w.WEECHAT_RC_OK + + +@utf8_decode +def typing_update_cb(data, remaining_calls): + w.bar_item_update("slack_typing_notice") + return w.WEECHAT_RC_OK + + +@utf8_decode +def slack_never_away_cb(data, remaining_calls): + if config.never_away: + for team in EVENTROUTER.teams.values(): + set_own_presence_active(team) + return w.WEECHAT_RC_OK + + +@utf8_decode +def typing_bar_item_cb(data, item, current_window, current_buffer, extra_info): + """ + Privides a bar item indicating who is typing in the current channel AND + why is typing a DM to you globally. + """ + typers = [] + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + + # first look for people typing in this channel + if current_channel: + # this try is mostly becuase server buffers don't implement is_someone_typing + try: + if current_channel.type != 'im' and current_channel.is_someone_typing(): + typers += current_channel.get_typing_list() + except: + pass + + # here is where we notify you that someone is typing in DM + # regardless of which buffer you are in currently + for team in EVENTROUTER.teams.values(): + for channel in team.channels.values(): + if channel.type == "im": + if channel.is_someone_typing(): + typers.append("D/" + channel.slack_name) + pass + + typing = ", ".join(typers) + if typing != "": + typing = colorize_string(config.color_typing_notice, "typing: " + typing) + + return typing + + +@utf8_decode +def away_bar_item_cb(data, item, current_window, current_buffer, extra_info): + channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if not channel: + return '' + + if channel.team.is_user_present(channel.team.myidentifier): + return '' + else: + away_color = w.config_string(w.config_get('weechat.color.item_away')) + if channel.team.my_manual_presence == 'away': + return colorize_string(away_color, 'manual away') + else: + return colorize_string(away_color, 'auto away') + + +@utf8_decode +def channel_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all channels on all teams to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + should_include_channel = lambda channel: channel.active and channel.type in ['channel', 'group', 'private', 'shared'] + + other_teams = [team for team in EVENTROUTER.teams.values() if not current_channel or team != current_channel.team] + for team in other_teams: + for channel in team.channels.values(): + if should_include_channel(channel): + w.hook_completion_list_add(completion, channel.name, 0, w.WEECHAT_LIST_POS_SORT) + + if current_channel: + for channel in sorted(current_channel.team.channels.values(), key=lambda channel: channel.name, reverse=True): + if should_include_channel(channel): + w.hook_completion_list_add(completion, channel.name, 0, w.WEECHAT_LIST_POS_BEGINNING) + + if should_include_channel(current_channel): + w.hook_completion_list_add(completion, current_channel.name, 0, w.WEECHAT_LIST_POS_BEGINNING) + return w.WEECHAT_RC_OK + + +@utf8_decode +def dm_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all dms/mpdms on all teams to completion list + """ + for team in EVENTROUTER.teams.values(): + for channel in team.channels.values(): + if channel.active and channel.type in ['im', 'mpim']: + w.hook_completion_list_add(completion, channel.name, 0, w.WEECHAT_LIST_POS_SORT) + return w.WEECHAT_RC_OK + + +@utf8_decode +def nick_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all @-prefixed nicks to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if current_channel is None or current_channel.members is None: + return w.WEECHAT_RC_OK + + base_command = w.hook_completion_get_string(completion, "base_command") + if base_command in ['invite', 'msg', 'query', 'whois']: + members = current_channel.team.members + else: + members = current_channel.members + + for member in members: + user = current_channel.team.users.get(member) + if user and not user.deleted: + w.hook_completion_list_add(completion, user.name, 1, w.WEECHAT_LIST_POS_SORT) + w.hook_completion_list_add(completion, "@" + user.name, 1, w.WEECHAT_LIST_POS_SORT) + return w.WEECHAT_RC_OK + + +@utf8_decode +def emoji_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all :-prefixed emoji to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if current_channel is None: + return w.WEECHAT_RC_OK + + base_word = w.hook_completion_get_string(completion, "base_word") + if ":" not in base_word: + return w.WEECHAT_RC_OK + prefix = base_word.split(":")[0] + ":" + + for emoji in current_channel.team.emoji_completions: + w.hook_completion_list_add(completion, prefix + emoji + ":", 0, w.WEECHAT_LIST_POS_SORT) + return w.WEECHAT_RC_OK + + +@utf8_decode +def thread_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all $-prefixed thread ids to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if current_channel is None or not hasattr(current_channel, 'hashed_messages'): + return w.WEECHAT_RC_OK + + threads = current_channel.hashed_messages.items() + for thread_id, message in sorted(threads, key=lambda item: item[1].ts): + if message.number_of_replies(): + w.hook_completion_list_add(completion, "$" + thread_id, 0, w.WEECHAT_LIST_POS_BEGINNING) + return w.WEECHAT_RC_OK + + +@utf8_decode +def topic_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds topic for current channel to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if current_channel is None: + return w.WEECHAT_RC_OK + + topic = current_channel.render_topic() + channel_names = [channel.name for channel in current_channel.team.channels.values()] + if topic.split(' ', 1)[0] in channel_names: + topic = '{} {}'.format(current_channel.name, topic) + + w.hook_completion_list_add(completion, topic, 0, w.WEECHAT_LIST_POS_SORT) + return w.WEECHAT_RC_OK + + +@utf8_decode +def usergroups_completion_cb(data, completion_item, current_buffer, completion): + """ + Adds all @-prefixed usergroups to completion list + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if current_channel is None: + return w.WEECHAT_RC_OK + + subteam_handles = [subteam.handle for subteam in current_channel.team.subteams.values()] + for group in subteam_handles + ["@channel", "@everyone", "@here"]: + w.hook_completion_list_add(completion, group, 1, w.WEECHAT_LIST_POS_SORT) + return w.WEECHAT_RC_OK + + +@utf8_decode +def complete_next_cb(data, current_buffer, command): + """Extract current word, if it is equal to a nick, prefix it with @ and + rely on nick_completion_cb adding the @-prefixed versions to the + completion lists, then let Weechat's internal completion do its + thing + """ + current_channel = EVENTROUTER.weechat_controller.buffers.get(current_buffer) + if not hasattr(current_channel, 'members') or current_channel is None or current_channel.members is None: + return w.WEECHAT_RC_OK + + line_input = w.buffer_get_string(current_buffer, "input") + current_pos = w.buffer_get_integer(current_buffer, "input_pos") - 1 + input_length = w.buffer_get_integer(current_buffer, "input_length") + + word_start = 0 + word_end = input_length + # If we're on a non-word, look left for something to complete + while current_pos >= 0 and line_input[current_pos] != '@' and not line_input[current_pos].isalnum(): + current_pos = current_pos - 1 + if current_pos < 0: + current_pos = 0 + for l in range(current_pos, 0, -1): + if line_input[l] != '@' and not line_input[l].isalnum(): + word_start = l + 1 + break + for l in range(current_pos, input_length): + if not line_input[l].isalnum(): + word_end = l + break + word = line_input[word_start:word_end] + + for member in current_channel.members: + user = current_channel.team.users.get(member) + if user and user.name == word: + # Here, we cheat. Insert a @ in front and rely in the @ + # nicks being in the completion list + w.buffer_set(current_buffer, "input", line_input[:word_start] + "@" + line_input[word_start:]) + w.buffer_set(current_buffer, "input_pos", str(w.buffer_get_integer(current_buffer, "input_pos") + 1)) + return w.WEECHAT_RC_OK_EAT + return w.WEECHAT_RC_OK + + +def script_unloaded(): + stop_talking_to_slack() + return w.WEECHAT_RC_OK + + +def stop_talking_to_slack(): + """ + complete + Prevents a race condition where quitting closes buffers + which triggers leaving the channel because of how close + buffer is handled + """ + EVENTROUTER.shutdown() + for team in EVENTROUTER.teams.values(): + team.ws.shutdown() + return w.WEECHAT_RC_OK + +##### New Classes + + +class SlackRequest(object): + """ + Encapsulates a Slack api request. Valuable as an object that we can add to the queue and/or retry. + makes a SHA of the requst url and current time so we can re-tag this on the way back through. + """ + + def __init__(self, team, request, post_data=None, channel=None, metadata=None, retries=3, token=None): + if team is None and token is None: + raise ValueError("Both team and token can't be None") + self.team = team + self.request = request + self.post_data = post_data if post_data else {} + self.channel = channel + self.metadata = metadata if metadata else {} + self.retries = retries + self.token = token if token else team.token + self.tries = 0 + self.start_time = time.time() + self.request_normalized = re.sub(r'\W+', '', request) + self.domain = 'api.slack.com' + self.post_data['token'] = self.token + self.url = 'https://{}/api/{}?{}'.format(self.domain, self.request, urlencode(encode_to_utf8(self.post_data))) + self.params = {'useragent': 'wee_slack {}'.format(SCRIPT_VERSION)} + self.response_id = sha1_hex('{}{}'.format(self.url, self.start_time)) + + def __repr__(self): + return ("SlackRequest(team={}, request='{}', post_data={}, retries={}, token='{}...', " + "tries={}, start_time={})").format(self.team, self.request, self.post_data, + self.retries, self.token[:15], self.tries, self.start_time) + + def request_string(self): + return "{}".format(self.url) + + def tried(self): + self.tries += 1 + self.response_id = sha1_hex("{}{}".format(self.url, time.time())) + + def should_try(self): + return self.tries < self.retries + + def retry_ready(self): + return (self.start_time + (self.tries**2)) < time.time() + + +class SlackSubteam(object): + """ + Represents a slack group or subteam + """ + + def __init__(self, originating_team_id, is_member, **kwargs): + self.handle = '@{}'.format(kwargs['handle']) + self.identifier = kwargs['id'] + self.name = kwargs['name'] + self.description = kwargs.get('description') + self.team_id = originating_team_id + self.is_member = is_member + + def __repr__(self): + return "Name:{} Identifier:{}".format(self.name, self.identifier) + + def __eq__(self, compare_str): + return compare_str == self.identifier + + +class SlackTeam(object): + """ + incomplete + Team object under which users and channels live.. Does lots. + """ + + def __init__(self, eventrouter, token, websocket_url, team_info, subteams, nick, myidentifier, my_manual_presence, users, bots, channels, **kwargs): + self.identifier = team_info["id"] + self.active = True + self.ws_url = websocket_url + self.connected = False + self.connecting_rtm = False + self.connecting_ws = False + self.ws = None + self.ws_counter = 0 + self.ws_replies = {} + self.last_ping_time = 0 + self.last_pong_time = time.time() + self.eventrouter = eventrouter + self.token = token + self.team = self + self.subteams = subteams + self.team_info = team_info + self.subdomain = team_info["domain"] + self.domain = self.subdomain + ".slack.com" + self.preferred_name = self.domain + self.nick = nick + self.myidentifier = myidentifier + self.my_manual_presence = my_manual_presence + try: + if self.channels: + for c in channels.keys(): + if not self.channels.get(c): + self.channels[c] = channels[c] + except: + self.channels = channels + self.users = users + self.bots = bots + self.team_hash = SlackTeam.generate_team_hash(self.nick, self.subdomain) + self.name = self.domain + self.channel_buffer = None + self.got_history = True + self.create_buffer() + self.set_muted_channels(kwargs.get('muted_channels', "")) + for c in self.channels.keys(): + channels[c].set_related_server(self) + channels[c].check_should_open() + # Last step is to make sure my nickname is the set color + self.users[self.myidentifier].force_color(w.config_string(w.config_get('weechat.color.chat_nick_self'))) + # This highlight step must happen after we have set related server + self.set_highlight_words(kwargs.get('highlight_words', "")) + self.load_emoji_completions() + self.type = "team" + + def __repr__(self): + return "domain={} nick={}".format(self.subdomain, self.nick) + + def __eq__(self, compare_str): + return compare_str == self.token or compare_str == self.domain or compare_str == self.subdomain + + @property + def members(self): + return self.users.keys() + + def load_emoji_completions(self): + self.emoji_completions = list(EMOJI.keys()) + if self.emoji_completions: + s = SlackRequest(self, "emoji.list") + self.eventrouter.receive(s) + + def add_channel(self, channel): + self.channels[channel["id"]] = channel + channel.set_related_server(self) + + def generate_usergroup_map(self): + return {s.handle: s.identifier for s in self.subteams.values()} + + def create_buffer(self): + if not self.channel_buffer: + alias = config.server_aliases.get(self.subdomain) + if alias: + self.preferred_name = alias + elif config.short_buffer_names: + self.preferred_name = self.subdomain + else: + self.preferred_name = self.domain + self.channel_buffer = w.buffer_new(self.preferred_name, "buffer_input_callback", "EVENTROUTER", "", "") + self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) + w.buffer_set(self.channel_buffer, "localvar_set_type", 'server') + w.buffer_set(self.channel_buffer, "localvar_set_nick", self.nick) + w.buffer_set(self.channel_buffer, "localvar_set_server", self.preferred_name) + self.buffer_merge() + + def buffer_merge(self, config_value=None): + if not config_value: + config_value = w.config_string(w.config_get('irc.look.server_buffer')) + if config_value == 'merge_with_core': + w.buffer_merge(self.channel_buffer, w.buffer_search_main()) + else: + w.buffer_unmerge(self.channel_buffer, 0) + + def destroy_buffer(self, update_remote): + pass + + def set_muted_channels(self, muted_str): + self.muted_channels = {x for x in muted_str.split(',') if x} + for channel in self.channels.values(): + channel.set_highlights() + + def set_highlight_words(self, highlight_str): + self.highlight_words = {x for x in highlight_str.split(',') if x} + for channel in self.channels.values(): + channel.set_highlights() + + def formatted_name(self, **kwargs): + return self.domain + + def buffer_prnt(self, data, message=False): + tag_name = "team_message" if message else "team_info" + w.prnt_date_tags(self.channel_buffer, SlackTS().major, tag(tag_name), data) + + def send_message(self, message, subtype=None, request_dict_ext={}): + w.prnt("", "ERROR: Sending a message in the team buffer is not supported") + + def find_channel_by_members(self, members, channel_type=None): + for channel in self.channels.values(): + if channel.get_members() == members and ( + channel_type is None or channel.type == channel_type): + return channel + + def get_channel_map(self): + return {v.name: k for k, v in self.channels.items()} + + def get_username_map(self): + return {v.name: k for k, v in self.users.items()} + + def get_team_hash(self): + return self.team_hash + + @staticmethod + def generate_team_hash(nick, subdomain): + return str(sha1_hex("{}{}".format(nick, subdomain))) + + def refresh(self): + self.rename() + + def rename(self): + pass + + def is_user_present(self, user_id): + user = self.users.get(user_id) + if user and user.presence == 'active': + return True + else: + return False + + def mark_read(self, ts=None, update_remote=True, force=False): + pass + + def connect(self): + if not self.connected and not self.connecting_ws: + if self.ws_url: + self.connecting_ws = True + try: + # only http proxy is currently supported + proxy = ProxyWrapper() + if proxy.has_proxy == True: + ws = create_connection(self.ws_url, sslopt=sslopt_ca_certs, http_proxy_host=proxy.proxy_address, http_proxy_port=proxy.proxy_port, http_proxy_auth=(proxy.proxy_user, proxy.proxy_password)) + else: + ws = create_connection(self.ws_url, sslopt=sslopt_ca_certs) + + self.hook = w.hook_fd(ws.sock.fileno(), 1, 0, 0, "receive_ws_callback", self.get_team_hash()) + ws.sock.setblocking(0) + self.ws = ws + self.set_reconnect_url(None) + self.set_connected() + self.connecting_ws = False + except: + w.prnt(self.channel_buffer, + 'Failed connecting to slack team {}, retrying.'.format(self.domain)) + dbg('connect failed with exception:\n{}'.format(format_exc_tb()), level=5) + self.connecting_ws = False + return False + elif not self.connecting_rtm: + # The fast reconnect failed, so start over-ish + for chan in self.channels: + self.channels[chan].got_history = False + s = initiate_connection(self.token, retries=999, team=self) + self.eventrouter.receive(s) + self.connecting_rtm = True + + def set_connected(self): + self.connected = True + self.last_pong_time = time.time() + self.buffer_prnt('Connected to Slack team {} ({}) with username {}'.format( + self.team_info["name"], self.domain, self.nick)) + dbg("connected to {}".format(self.domain)) + + def set_disconnected(self): + w.unhook(self.hook) + self.connected = False + + def set_reconnect_url(self, url): + self.ws_url = url + + def next_ws_transaction_id(self): + self.ws_counter += 1 + return self.ws_counter + + def send_to_websocket(self, data, expect_reply=True): + data["id"] = self.next_ws_transaction_id() + message = json.dumps(data) + try: + if expect_reply: + self.ws_replies[data["id"]] = data + self.ws.send(encode_to_utf8(message)) + dbg("Sent {}...".format(message[:100])) + except (WebSocketConnectionClosedException, socket.error) as e: + handle_socket_error(e, self, 'send') + + def update_member_presence(self, user, presence): + user.presence = presence + + for c in self.channels: + c = self.channels[c] + if user.id in c.members: + c.update_nicklist(user.id) + + def subscribe_users_presence(self): + # FIXME: There is a limitation in the API to the size of the + # json we can send. + # We should try to be smarter to fetch the users whom we want to + # subscribe to. + users = list(self.users.keys())[:750] + if self.myidentifier not in users: + users.append(self.myidentifier) + self.send_to_websocket({ + "type": "presence_sub", + "ids": users, + }, expect_reply=False) + + +class SlackChannelCommon(object): + def send_add_reaction(self, msg_id, reaction): + self.send_change_reaction("reactions.add", msg_id, reaction) + + def send_remove_reaction(self, msg_id, reaction): + self.send_change_reaction("reactions.remove", msg_id, reaction) + + def send_change_reaction(self, method, msg_id, reaction): + if type(msg_id) is not int: + if msg_id in self.hashed_messages: + timestamp = str(self.hashed_messages[msg_id].ts) + else: + return + elif 0 < msg_id <= len(self.messages): + keys = self.main_message_keys_reversed() + timestamp = next(islice(keys, msg_id - 1, None)) + else: + return + data = {"channel": self.identifier, "timestamp": timestamp, "name": reaction} + s = SlackRequest(self.team, method, data, channel=self, metadata={'reaction': reaction}) + self.eventrouter.receive(s) + + def edit_nth_previous_message(self, msg_id, old, new, flags): + message = self.my_last_message(msg_id) + if message is None: + return + if new == "" and old == "": + s = SlackRequest(self.team, "chat.delete", {"channel": self.identifier, "ts": message['ts']}, channel=self) + self.eventrouter.receive(s) + else: + num_replace = 0 if 'g' in flags else 1 + f = re.UNICODE + f |= re.IGNORECASE if 'i' in flags else 0 + f |= re.MULTILINE if 'm' in flags else 0 + f |= re.DOTALL if 's' in flags else 0 + new_message = re.sub(old, new, message["text"], num_replace, f) + if new_message != message["text"]: + s = SlackRequest(self.team, "chat.update", + {"channel": self.identifier, "ts": message['ts'], "text": new_message}, channel=self) + self.eventrouter.receive(s) + + def my_last_message(self, msg_id): + if type(msg_id) is not int: + m = self.hashed_messages.get(msg_id) + if m is not None and m.message_json.get("user") == self.team.myidentifier: + return m.message_json + else: + for key in self.main_message_keys_reversed(): + m = self.messages[key] + if m.message_json.get("user") == self.team.myidentifier: + msg_id -= 1 + if msg_id == 0: + return m.message_json + + def change_message(self, ts, message_json=None, text=None): + ts = SlackTS(ts) + m = self.messages.get(ts) + if not m: + return + if message_json: + m.message_json.update(message_json) + if text: + m.change_text(text) + + if type(m) == SlackMessage or config.thread_messages_in_channel: + new_text = self.render(m, force=True) + modify_buffer_line(self.channel_buffer, ts, new_text) + if type(m) == SlackThreadMessage: + thread_channel = m.parent_message.thread_channel + if thread_channel and thread_channel.active: + new_text = thread_channel.render(m, force=True) + modify_buffer_line(thread_channel.channel_buffer, ts, new_text) + + def hash_message(self, ts): + ts = SlackTS(ts) + + def calc_hash(msg): + return sha1_hex(str(msg.ts)) + + if ts in self.messages and not self.messages[ts].hash: + message = self.messages[ts] + tshash = calc_hash(message) + hl = 3 + shorthash = tshash[:hl] + while any(x.startswith(shorthash) for x in self.hashed_messages): + hl += 1 + shorthash = tshash[:hl] + + if shorthash[:-1] in self.hashed_messages: + col_msg = self.hashed_messages.pop(shorthash[:-1]) + col_new_hash = calc_hash(col_msg)[:hl] + col_msg.hash = col_new_hash + self.hashed_messages[col_new_hash] = col_msg + self.change_message(str(col_msg.ts)) + if col_msg.thread_channel: + col_msg.thread_channel.rename() + + self.hashed_messages[shorthash] = message + message.hash = shorthash + return shorthash + elif ts in self.messages: + return self.messages[ts].hash + + + +class SlackChannel(SlackChannelCommon): + """ + Represents an individual slack channel. + """ + + def __init__(self, eventrouter, **kwargs): + # We require these two things for a valid object, + # the rest we can just learn from slack + self.active = False + for key, value in kwargs.items(): + setattr(self, key, value) + self.eventrouter = eventrouter + self.slack_name = kwargs["name"] + self.slack_purpose = kwargs.get("purpose", {"value": ""}) + self.topic = kwargs.get("topic", {"value": ""}) + self.identifier = kwargs["id"] + self.last_read = SlackTS(kwargs.get("last_read", SlackTS())) + self.channel_buffer = None + self.team = kwargs.get('team') + self.got_history = False + self.messages = OrderedDict() + self.hashed_messages = {} + self.new_messages = False + self.typing = {} + self.type = 'channel' + self.set_name(self.slack_name) + # short name relates to the localvar we change for typing indication + self.current_short_name = self.name + self.set_members(kwargs.get('members', [])) + self.unread_count_display = 0 + self.last_line_from = None + + def __eq__(self, compare_str): + if compare_str == self.slack_name or compare_str == self.formatted_name() or compare_str == self.formatted_name(style="long_default"): + return True + else: + return False + + def __repr__(self): + return "Name:{} Identifier:{}".format(self.name, self.identifier) + + @property + def muted(self): + return self.identifier in self.team.muted_channels + + def set_name(self, slack_name): + self.name = "#" + slack_name + + def refresh(self): + return self.rename() + + def rename(self): + if self.channel_buffer: + new_name = self.formatted_name(typing=self.is_someone_typing(), style="sidebar") + if self.current_short_name != new_name: + self.current_short_name = new_name + w.buffer_set(self.channel_buffer, "short_name", new_name) + return True + return False + + def set_members(self, members): + self.members = set(members) + self.update_nicklist() + + def get_members(self): + return self.members + + def set_unread_count_display(self, count): + self.unread_count_display = count + self.new_messages = bool(self.unread_count_display) + if self.muted and config.muted_channels_activity != "all": + return + for c in range(self.unread_count_display): + if self.type in ["im", "mpim"]: + w.buffer_set(self.channel_buffer, "hotlist", "2") + else: + w.buffer_set(self.channel_buffer, "hotlist", "1") + + def formatted_name(self, style="default", typing=False, **kwargs): + if typing and config.channel_name_typing_indicator: + prepend = ">" + elif self.type == "group" or self.type == "private": + prepend = config.group_name_prefix + elif self.type == "shared": + prepend = config.shared_name_prefix + else: + prepend = "#" + sidebar_color = config.color_buflist_muted_channels if self.muted else "" + select = { + "default": prepend + self.slack_name, + "sidebar": colorize_string(sidebar_color, prepend + self.slack_name), + "base": self.slack_name, + "long_default": "{}.{}{}".format(self.team.preferred_name, prepend, self.slack_name), + "long_base": "{}.{}".format(self.team.preferred_name, self.slack_name), + } + return select[style] + + def render_topic(self, fallback_to_purpose=False): + topic = self.topic['value'] + if not topic and fallback_to_purpose: + topic = self.slack_purpose['value'] + return unhtmlescape(unfurl_refs(topic)) + + def set_topic(self, value=None): + if value is not None: + self.topic = {"value": value} + if self.channel_buffer: + topic = self.render_topic(fallback_to_purpose=True) + w.buffer_set(self.channel_buffer, "title", topic) + + def update_from_message_json(self, message_json): + for key, value in message_json.items(): + setattr(self, key, value) + + def open(self, update_remote=True): + if update_remote: + if "join" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["join"], + {"channel": self.identifier}, channel=self) + self.eventrouter.receive(s) + self.create_buffer() + self.active = True + self.get_history() + + def check_should_open(self, force=False): + if hasattr(self, "is_archived") and self.is_archived: + return + + if force: + self.create_buffer() + return + + # Only check is_member if is_open is not set, because in some cases + # (e.g. group DMs), is_member should be ignored in favor of is_open. + is_open = self.is_open if hasattr(self, "is_open") else self.is_member + if is_open or self.unread_count_display: + self.create_buffer() + if config.background_load_all_history: + self.get_history(slow_queue=True) + + def set_related_server(self, team): + self.team = team + + def highlights(self): + nick_highlights = {'@' + self.team.nick, self.team.myidentifier} + subteam_highlights = {subteam.handle for subteam in self.team.subteams.values() + if subteam.is_member} + highlights = nick_highlights | subteam_highlights | self.team.highlight_words + if self.muted and config.muted_channels_activity == "personal_highlights": + return highlights + else: + return highlights | {"@channel", "@everyone", "@group", "@here"} + + def set_highlights(self): + # highlight my own name and any set highlights + if self.channel_buffer: + h_str = ",".join(self.highlights()) + w.buffer_set(self.channel_buffer, "highlight_words", h_str) + + if self.muted and config.muted_channels_activity != "all": + notify_level = "0" if config.muted_channels_activity == "none" else "1" + w.buffer_set(self.channel_buffer, "notify", notify_level) + else: + w.buffer_set(self.channel_buffer, "notify", "3") + + if self.muted and config.muted_channels_activity == "none": + w.buffer_set(self.channel_buffer, "highlight_tags_restrict", "highlight_force") + else: + w.buffer_set(self.channel_buffer, "highlight_tags_restrict", "") + + def create_buffer(self): + """ + Creates the weechat buffer where the channel magic happens. + """ + if not self.channel_buffer: + self.active = True + self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "") + self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) + if self.type == "im": + w.buffer_set(self.channel_buffer, "localvar_set_type", 'private') + else: + w.buffer_set(self.channel_buffer, "localvar_set_type", 'channel') + w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name()) + w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick) + w.buffer_set(self.channel_buffer, "short_name", self.formatted_name(style="sidebar", enable_color=True)) + self.set_topic() + self.eventrouter.weechat_controller.set_refresh_buffer_list(True) + if self.channel_buffer: + w.buffer_set(self.channel_buffer, "localvar_set_server", self.team.preferred_name) + self.update_nicklist() + + if "info" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["info"], + {"channel": self.identifier}, channel=self) + self.eventrouter.receive(s) + + if self.type == "im": + if "join" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["join"], + {"users": self.user, "return_im": True}, channel=self) + self.eventrouter.receive(s) + + def clear_messages(self): + w.buffer_clear(self.channel_buffer) + self.messages = OrderedDict() + self.hashed_messages = {} + self.got_history = False + + def destroy_buffer(self, update_remote): + self.clear_messages() + self.channel_buffer = None + self.active = False + if update_remote and not self.eventrouter.shutting_down: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["leave"], + {"channel": self.identifier}, channel=self) + self.eventrouter.receive(s) + + def buffer_prnt(self, nick, text, timestamp=str(time.time()), tagset=None, tag_nick=None, history_message=False, extra_tags=None): + data = "{}\t{}".format(format_nick(nick, self.last_line_from), text) + self.last_line_from = nick + ts = SlackTS(timestamp) + last_read = SlackTS(self.last_read) + # without this, DMs won't open automatically + if not self.channel_buffer and ts > last_read: + self.open(update_remote=False) + if self.channel_buffer: + # backlog messages - we will update the read marker as we print these + backlog = ts <= last_read + if not backlog: + self.new_messages = True + + if not tagset: + if self.type in ["im", "mpim"]: + tagset = "dm" + else: + tagset = "channel" + + no_log = history_message and backlog + self_msg = tag_nick == self.team.nick + tags = tag(tagset, user=tag_nick, self_msg=self_msg, backlog=backlog, no_log=no_log, extra_tags=extra_tags) + + try: + if (config.unhide_buffers_with_activity + and not self.is_visible() and not self.muted): + w.buffer_set(self.channel_buffer, "hidden", "0") + + w.prnt_date_tags(self.channel_buffer, ts.major, tags, data) + modify_last_print_time(self.channel_buffer, ts.minor) + if backlog or self_msg: + self.mark_read(ts, update_remote=False, force=True) + except: + dbg("Problem processing buffer_prnt") + + def send_message(self, message, subtype=None, request_dict_ext={}): + message = linkify_text(message, self.team) + dbg(message) + if subtype == 'me_message': + s = SlackRequest(self.team, "chat.meMessage", {"channel": self.identifier, "text": message}, channel=self) + self.eventrouter.receive(s) + else: + request = {"type": "message", "channel": self.identifier, + "text": message, "user": self.team.myidentifier} + request.update(request_dict_ext) + self.team.send_to_websocket(request) + + def store_message(self, message, team, from_me=False): + if not self.active: + return + if from_me: + message.message_json["user"] = team.myidentifier + self.messages[SlackTS(message.ts)] = message + + sorted_messages = sorted(self.messages.items()) + messages_to_delete = sorted_messages[:-SCROLLBACK_SIZE] + messages_to_keep = sorted_messages[-SCROLLBACK_SIZE:] + for message_hash in [m[1].hash for m in messages_to_delete]: + if message_hash in self.hashed_messages: + del self.hashed_messages[message_hash] + self.messages = OrderedDict(messages_to_keep) + + def is_visible(self): + return w.buffer_get_integer(self.channel_buffer, "hidden") == 0 + + def get_history(self, slow_queue=False): + if not self.got_history: + # we have probably reconnected. flush the buffer + if self.team.connected: + self.clear_messages() + w.prnt_date_tags(self.channel_buffer, SlackTS().major, + tag(backlog=True, no_log=True), '\tgetting channel history...') + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["history"], + {"channel": self.identifier, "count": BACKLOG_SIZE}, channel=self, metadata={'clear': True}) + if not slow_queue: + self.eventrouter.receive(s) + else: + self.eventrouter.receive_slow(s) + self.got_history = True + + def main_message_keys_reversed(self): + return (key for key in reversed(self.messages) + if type(self.messages[key]) == SlackMessage) + + # Typing related + def set_typing(self, user): + if self.channel_buffer and self.is_visible(): + self.typing[user] = time.time() + self.eventrouter.weechat_controller.set_refresh_buffer_list(True) + + def unset_typing(self, user): + if self.channel_buffer and self.is_visible(): + u = self.typing.get(user) + if u: + self.eventrouter.weechat_controller.set_refresh_buffer_list(True) + + def is_someone_typing(self): + """ + Walks through dict of typing folks in a channel and fast + returns if any of them is actively typing. If none are, + nulls the dict and returns false. + """ + for user, timestamp in self.typing.items(): + if timestamp + 4 > time.time(): + return True + if len(self.typing) > 0: + self.typing = {} + self.eventrouter.weechat_controller.set_refresh_buffer_list(True) + return False + + def get_typing_list(self): + """ + Returns the names of everyone in the channel who is currently typing. + """ + typing = [] + for user, timestamp in self.typing.items(): + if timestamp + 4 > time.time(): + typing.append(user) + else: + del self.typing[user] + return typing + + def mark_read(self, ts=None, update_remote=True, force=False): + if self.new_messages or force: + if self.channel_buffer: + w.buffer_set(self.channel_buffer, "unread", "") + w.buffer_set(self.channel_buffer, "hotlist", "-1") + if not ts: + ts = next(reversed(self.messages), SlackTS()) + if ts > self.last_read: + self.last_read = ts + if update_remote: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["mark"], + {"channel": self.identifier, "ts": ts}, channel=self) + self.eventrouter.receive(s) + self.new_messages = False + + def user_joined(self, user_id): + # ugly hack - for some reason this gets turned into a list + self.members = set(self.members) + self.members.add(user_id) + self.update_nicklist(user_id) + + def user_left(self, user_id): + self.members.discard(user_id) + self.update_nicklist(user_id) + + def update_nicklist(self, user=None): + if not self.channel_buffer: + return + if self.type not in ["channel", "group", "mpim", "private", "shared"]: + return + w.buffer_set(self.channel_buffer, "nicklist", "1") + # create nicklists for the current channel if they don't exist + # if they do, use the existing pointer + here = w.nicklist_search_group(self.channel_buffer, '', NICK_GROUP_HERE) + if not here: + here = w.nicklist_add_group(self.channel_buffer, '', NICK_GROUP_HERE, "weechat.color.nicklist_group", 1) + afk = w.nicklist_search_group(self.channel_buffer, '', NICK_GROUP_AWAY) + if not afk: + afk = w.nicklist_add_group(self.channel_buffer, '', NICK_GROUP_AWAY, "weechat.color.nicklist_group", 1) + + # Add External nicklist group only for shared channels + if self.type == 'shared': + external = w.nicklist_search_group(self.channel_buffer, '', NICK_GROUP_EXTERNAL) + if not external: + external = w.nicklist_add_group(self.channel_buffer, '', NICK_GROUP_EXTERNAL, 'weechat.color.nicklist_group', 2) + + if user and len(self.members) < 1000: + user = self.team.users.get(user) + # External users that have left shared channels won't exist + if not user or user.deleted: + return + nick = w.nicklist_search_nick(self.channel_buffer, "", user.name) + # since this is a change just remove it regardless of where it is + w.nicklist_remove_nick(self.channel_buffer, nick) + # now add it back in to whichever.. + nick_group = afk + if user.is_external: + nick_group = external + elif self.team.is_user_present(user.identifier): + nick_group = here + if user.identifier in self.members: + w.nicklist_add_nick(self.channel_buffer, nick_group, user.name, user.color_name, "", "", 1) + + # if we didn't get a user, build a complete list. this is expensive. + else: + if len(self.members) < 1000: + try: + for user in self.members: + user = self.team.users.get(user) + if user.deleted: + continue + nick_group = afk + if user.is_external: + nick_group = external + elif self.team.is_user_present(user.identifier): + nick_group = here + w.nicklist_add_nick(self.channel_buffer, nick_group, user.name, user.color_name, "", "", 1) + except: + dbg("DEBUG: {} {} {}".format(self.identifier, self.name, format_exc_only())) + else: + w.nicklist_remove_all(self.channel_buffer) + for fn in ["1| too", "2| many", "3| users", "4| to", "5| show"]: + w.nicklist_add_group(self.channel_buffer, '', fn, w.color('white'), 1) + + def render(self, message, force=False): + text = message.render(force) + if isinstance(message, SlackThreadMessage): + thread_id = message.parent_message.hash or message.parent_message.ts + return colorize_string(get_thread_color(thread_id), '[{}]'.format(thread_id)) + ' {}'.format(text) + + return text + + +class SlackDMChannel(SlackChannel): + """ + Subclass of a normal channel for person-to-person communication, which + has some important differences. + """ + + def __init__(self, eventrouter, users, **kwargs): + dmuser = kwargs["user"] + kwargs["name"] = users[dmuser].name if dmuser in users else dmuser + super(SlackDMChannel, self).__init__(eventrouter, **kwargs) + self.type = 'im' + self.update_color() + self.set_name(self.slack_name) + if dmuser in users: + self.set_topic(create_user_status_string(users[dmuser].profile)) + + def set_related_server(self, team): + super(SlackDMChannel, self).set_related_server(team) + if self.user not in self.team.users: + s = SlackRequest(self.team, 'users.info', {'user': self.slack_name}, channel=self) + self.eventrouter.receive(s) + + def set_name(self, slack_name): + self.name = slack_name + + def get_members(self): + return {self.user} + + def create_buffer(self): + if not self.channel_buffer: + super(SlackDMChannel, self).create_buffer() + w.buffer_set(self.channel_buffer, "localvar_set_type", 'private') + + def update_color(self): + if config.colorize_private_chats: + self.color_name = get_nick_color(self.name) + else: + self.color_name = "" + + def formatted_name(self, style="default", typing=False, present=True, enable_color=False, **kwargs): + prepend = "" + if config.show_buflist_presence: + prepend = "+" if present else " " + select = { + "default": self.slack_name, + "sidebar": prepend + self.slack_name, + "base": self.slack_name, + "long_default": "{}.{}".format(self.team.preferred_name, self.slack_name), + "long_base": "{}.{}".format(self.team.preferred_name, self.slack_name), + } + if config.colorize_private_chats and enable_color: + return colorize_string(self.color_name, select[style]) + else: + return select[style] + + def open(self, update_remote=True): + self.create_buffer() + self.get_history() + if "info" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["info"], + {"name": self.identifier}, channel=self) + self.eventrouter.receive(s) + if update_remote: + if "join" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["join"], + {"users": self.user, "return_im": True}, channel=self) + self.eventrouter.receive(s) + + def rename(self): + if self.channel_buffer: + new_name = self.formatted_name(style="sidebar", present=self.team.is_user_present(self.user), enable_color=config.colorize_private_chats) + if self.current_short_name != new_name: + self.current_short_name = new_name + w.buffer_set(self.channel_buffer, "short_name", new_name) + return True + return False + + def refresh(self): + return self.rename() + + +class SlackGroupChannel(SlackChannel): + """ + A group channel is a private discussion group. + """ + + def __init__(self, eventrouter, **kwargs): + super(SlackGroupChannel, self).__init__(eventrouter, **kwargs) + self.type = "group" + self.set_name(self.slack_name) + + def set_name(self, slack_name): + self.name = config.group_name_prefix + slack_name + + +class SlackPrivateChannel(SlackGroupChannel): + """ + A private channel is a private discussion group. At the time of writing, it + differs from group channels in that group channels are channels initially + created as private, while private channels are public channels which are + later converted to private. + """ + + def __init__(self, eventrouter, **kwargs): + super(SlackPrivateChannel, self).__init__(eventrouter, **kwargs) + self.type = "private" + + def set_related_server(self, team): + super(SlackPrivateChannel, self).set_related_server(team) + # Fetch members here (after the team is known) since they aren't + # included in rtm.start + s = SlackRequest(team, 'conversations.members', {'channel': self.identifier}, channel=self) + self.eventrouter.receive(s) + + +class SlackMPDMChannel(SlackChannel): + """ + An MPDM channel is a special instance of a 'group' channel. + We change the name to look less terrible in weechat. + """ + + def __init__(self, eventrouter, team_users, myidentifier, **kwargs): + kwargs["name"] = ','.join(sorted( + getattr(team_users.get(user_id), 'name', user_id) + for user_id in kwargs["members"] + if user_id != myidentifier + )) + super(SlackMPDMChannel, self).__init__(eventrouter, **kwargs) + self.type = "mpim" + + def open(self, update_remote=True): + self.create_buffer() + self.active = True + self.get_history() + if "info" in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]["info"], + {"channel": self.identifier}, channel=self) + self.eventrouter.receive(s) + if update_remote and 'join' in SLACK_API_TRANSLATOR[self.type]: + s = SlackRequest(self.team, SLACK_API_TRANSLATOR[self.type]['join'], + {'users': ','.join(self.members)}, channel=self) + self.eventrouter.receive(s) + + def set_name(self, slack_name): + self.name = slack_name + + def formatted_name(self, style="default", typing=False, **kwargs): + if typing and config.channel_name_typing_indicator: + prepend = ">" + else: + prepend = "@" + select = { + "default": self.name, + "sidebar": prepend + self.name, + "base": self.name, + "long_default": "{}.{}".format(self.team.preferred_name, self.name), + "long_base": "{}.{}".format(self.team.preferred_name, self.name), + } + return select[style] + + def rename(self): + pass + + +class SlackSharedChannel(SlackChannel): + def __init__(self, eventrouter, **kwargs): + super(SlackSharedChannel, self).__init__(eventrouter, **kwargs) + self.type = 'shared' + + def set_related_server(self, team): + super(SlackSharedChannel, self).set_related_server(team) + # Fetch members here (after the team is known) since they aren't + # included in rtm.start + s = SlackRequest(team, 'conversations.members', {'channel': self.identifier}, channel=self) + self.eventrouter.receive(s) + + def get_history(self, slow_queue=False): + # Get info for external users in the channel + for user in self.members - set(self.team.users.keys()): + s = SlackRequest(self.team, 'users.info', {'user': user}, channel=self) + self.eventrouter.receive(s) + super(SlackSharedChannel, self).get_history(slow_queue) + + def set_name(self, slack_name): + self.name = config.shared_name_prefix + slack_name + + +class SlackThreadChannel(SlackChannelCommon): + """ + A thread channel is a virtual channel. We don't inherit from + SlackChannel, because most of how it operates will be different. + """ + + def __init__(self, eventrouter, parent_message): + self.eventrouter = eventrouter + self.parent_message = parent_message + self.hashed_messages = {} + self.channel_buffer = None + self.type = "thread" + self.got_history = False + self.label = None + self.members = self.parent_message.channel.members + self.team = self.parent_message.team + self.last_line_from = None + + @property + def identifier(self): + return self.parent_message.channel.identifier + + @property + def messages(self): + return self.parent_message.channel.messages + + @property + def muted(self): + return self.parent_message.channel.muted + + def formatted_name(self, style="default", **kwargs): + hash_or_ts = self.parent_message.hash or self.parent_message.ts + styles = { + "default": " +{}".format(hash_or_ts), + "long_default": "{}.{}".format(self.parent_message.channel.formatted_name(style="long_default"), hash_or_ts), + "sidebar": " +{}".format(hash_or_ts), + } + return styles[style] + + def refresh(self): + self.rename() + + def mark_read(self, ts=None, update_remote=True, force=False): + if self.channel_buffer: + w.buffer_set(self.channel_buffer, "unread", "") + w.buffer_set(self.channel_buffer, "hotlist", "-1") + + def buffer_prnt(self, nick, text, timestamp, tag_nick=None): + data = "{}\t{}".format(format_nick(nick, self.last_line_from), text) + self.last_line_from = nick + ts = SlackTS(timestamp) + if self.channel_buffer: + if self.parent_message.channel.type in ["im", "mpim"]: + tagset = "dm" + else: + tagset = "channel" + self_msg = tag_nick == self.team.nick + tags = tag(tagset, user=tag_nick, self_msg=self_msg) + + w.prnt_date_tags(self.channel_buffer, ts.major, tags, data) + modify_last_print_time(self.channel_buffer, ts.minor) + if self_msg: + self.mark_read(ts, update_remote=False, force=True) + + def get_history(self): + self.got_history = True + for message in self.parent_message.submessages: + text = self.render(message) + self.buffer_prnt(message.sender, text, message.ts, tag_nick=message.sender_plain) + if len(self.parent_message.submessages) < self.parent_message.number_of_replies(): + s = SlackRequest(self.team, "conversations.replies", + {"channel": self.identifier, "ts": self.parent_message.ts}, + channel=self.parent_message.channel) + self.eventrouter.receive(s) + + def main_message_keys_reversed(self): + return (message.ts for message in reversed(self.parent_message.submessages)) + + def send_message(self, message, subtype=None, request_dict_ext={}): + if subtype == 'me_message': + w.prnt("", "ERROR: /me is not supported in threads") + return w.WEECHAT_RC_ERROR + message = linkify_text(message, self.team) + dbg(message) + request = {"type": "message", "text": message, + "channel": self.parent_message.channel.identifier, + "thread_ts": str(self.parent_message.ts), + "user": self.team.myidentifier} + request.update(request_dict_ext) + self.team.send_to_websocket(request) + + def open(self, update_remote=True): + self.create_buffer() + self.active = True + self.get_history() + + def rename(self): + if self.channel_buffer and not self.label: + w.buffer_set(self.channel_buffer, "short_name", self.formatted_name(style="sidebar", enable_color=True)) + + def create_buffer(self): + """ + Creates the weechat buffer where the thread magic happens. + """ + if not self.channel_buffer: + self.channel_buffer = w.buffer_new(self.formatted_name(style="long_default"), "buffer_input_callback", "EVENTROUTER", "", "") + self.eventrouter.weechat_controller.register_buffer(self.channel_buffer, self) + w.buffer_set(self.channel_buffer, "localvar_set_type", 'channel') + w.buffer_set(self.channel_buffer, "localvar_set_nick", self.team.nick) + w.buffer_set(self.channel_buffer, "localvar_set_channel", self.formatted_name()) + w.buffer_set(self.channel_buffer, "localvar_set_server", self.team.preferred_name) + w.buffer_set(self.channel_buffer, "short_name", self.formatted_name(style="sidebar", enable_color=True)) + time_format = w.config_string(w.config_get("weechat.look.buffer_time_format")) + parent_time = time.localtime(SlackTS(self.parent_message.ts).major) + topic = '{} {} | {}'.format(time.strftime(time_format, parent_time), self.parent_message.sender, self.render(self.parent_message) ) + w.buffer_set(self.channel_buffer, "title", topic) + + # self.eventrouter.weechat_controller.set_refresh_buffer_list(True) + + def destroy_buffer(self, update_remote): + self.channel_buffer = None + self.got_history = False + self.active = False + + def render(self, message, force=False): + return message.render(force) + + +class SlackUser(object): + """ + Represends an individual slack user. Also where you set their name formatting. + """ + + def __init__(self, originating_team_id, **kwargs): + self.identifier = kwargs["id"] + # These attributes may be missing in the response, so we have to make + # sure they're set + self.profile = {} + self.presence = kwargs.get("presence", "unknown") + self.deleted = kwargs.get("deleted", False) + self.is_external = (not kwargs.get("is_bot") and + kwargs.get("team_id") != originating_team_id) + for key, value in kwargs.items(): + setattr(self, key, value) + + self.name = nick_from_profile(self.profile, kwargs["name"]) + self.username = kwargs["name"] + self.update_color() + + def __repr__(self): + return "Name:{} Identifier:{}".format(self.name, self.identifier) + + def force_color(self, color_name): + self.color_name = color_name + + def update_color(self): + # This will automatically be none/"" if the user has disabled nick + # colourization. + self.color_name = get_nick_color(self.name) + + def update_status(self, status_emoji, status_text): + self.profile["status_emoji"] = status_emoji + self.profile["status_text"] = status_text + + def formatted_name(self, prepend="", enable_color=True): + name = prepend + self.name + if enable_color: + return colorize_string(self.color_name, name) + else: + return name + + +class SlackBot(SlackUser): + """ + Basically the same as a user, but split out to identify and for future + needs + """ + def __init__(self, originating_team_id, **kwargs): + super(SlackBot, self).__init__(originating_team_id, is_bot=True, **kwargs) + + +class SlackMessage(object): + """ + Represents a single slack message and associated context/metadata. + These are modifiable and can be rerendered to change a message, + delete a message, add a reaction, add a thread. + Note: these can't be tied to a SlackUser object because users + can be deleted, so we have to store sender in each one. + """ + def __init__(self, message_json, team, channel, override_sender=None): + self.team = team + self.channel = channel + self.message_json = message_json + self.submessages = [] + self.thread_channel = None + self.hash = None + if override_sender: + self.sender = override_sender + self.sender_plain = override_sender + else: + senders = self.get_sender() + self.sender, self.sender_plain = senders[0], senders[1] + self.ts = SlackTS(message_json['ts']) + + def __hash__(self): + return hash(self.ts) + + def open_thread(self, switch=False): + if not self.thread_channel or not self.thread_channel.active: + self.thread_channel = SlackThreadChannel(EVENTROUTER, self) + self.thread_channel.open() + if switch: + w.buffer_set(self.thread_channel.channel_buffer, "display", "1") + + def render(self, force=False): + # If we already have a rendered version in the object, just return that. + if not force and self.message_json.get("_rendered_text"): + return self.message_json["_rendered_text"] + + if "fallback" in self.message_json: + text = self.message_json["fallback"] + elif self.message_json.get("text"): + text = self.message_json["text"] + else: + text = "" + + if self.message_json.get('mrkdwn', True): + text = render_formatting(text) + + if (self.message_json.get('subtype') in ('channel_join', 'group_join') and + self.message_json.get('inviter')): + inviter_id = self.message_json.get('inviter') + text += " by invitation from <@{}>".format(inviter_id) + + if "blocks" in self.message_json: + text += unfurl_blocks(self.message_json) + + text = unfurl_refs(text) + + if (self.message_json.get('subtype') == 'me_message' and + not self.message_json['text'].startswith(self.sender)): + text = "{} {}".format(self.sender, text) + + if "edited" in self.message_json: + text += " " + colorize_string(config.color_edited_suffix, '(edited)') + + text += unfurl_refs(unwrap_attachments(self.message_json, text)) + text += unfurl_refs(unwrap_files(self.message_json, text)) + text = unhtmlescape(text.lstrip().replace("\t", " ")) + + text += create_reactions_string( + self.message_json.get("reactions", ""), self.team.myidentifier) + + if self.number_of_replies(): + self.channel.hash_message(self.ts) + text += " " + colorize_string(get_thread_color(self.hash), "[ Thread: {} Replies: {} ]".format( + self.hash, self.number_of_replies())) + + text = replace_string_with_emoji(text) + + self.message_json["_rendered_text"] = text + return text + + def change_text(self, new_text): + self.message_json["text"] = new_text + dbg(self.message_json) + + def get_sender(self): + name = "" + name_plain = "" + user = self.team.users.get(self.message_json.get('user')) + if user: + name = "{}".format(user.formatted_name()) + name_plain = "{}".format(user.formatted_name(enable_color=False)) + if user.is_external: + name += config.external_user_suffix + name_plain += config.external_user_suffix + elif 'username' in self.message_json: + username = self.message_json["username"] + if self.message_json.get("subtype") == "bot_message": + name = "{} :]".format(username) + name_plain = "{}".format(username) + else: + name = "-{}-".format(username) + name_plain = "{}".format(username) + elif 'service_name' in self.message_json: + name = "-{}-".format(self.message_json["service_name"]) + name_plain = "{}".format(self.message_json["service_name"]) + elif self.message_json.get('bot_id') in self.team.bots: + name = "{} :]".format(self.team.bots[self.message_json["bot_id"]].formatted_name()) + name_plain = "{}".format(self.team.bots[self.message_json["bot_id"]].formatted_name(enable_color=False)) + return (name, name_plain) + + def add_reaction(self, reaction, user): + m = self.message_json.get('reactions') + if m: + found = False + for r in m: + if r["name"] == reaction and user not in r["users"]: + r["users"].append(user) + found = True + if not found: + self.message_json["reactions"].append({"name": reaction, "users": [user]}) + else: + self.message_json["reactions"] = [{"name": reaction, "users": [user]}] + + def remove_reaction(self, reaction, user): + m = self.message_json.get('reactions') + if m: + for r in m: + if r["name"] == reaction and user in r["users"]: + r["users"].remove(user) + + def has_mention(self): + return w.string_has_highlight(unfurl_refs(self.message_json.get('text')), + ",".join(self.channel.highlights())) + + def number_of_replies(self): + return max(len(self.submessages), len(self.message_json.get("replies", []))) + + def notify_thread(self, action=None, sender_id=None): + if config.auto_open_threads: + self.open_thread() + elif sender_id != self.team.myidentifier: + if action == "mention": + template = "You were mentioned in thread {hash}, channel {channel}" + elif action == "participant": + template = "New message in thread {hash}, channel {channel} in which you participated" + elif action == "response": + template = "New message in thread {hash} in response to own message in {channel}" + else: + template = "Notification for message in thread {hash}, channel {channel}" + message = template.format(hash=self.hash, channel=self.channel.formatted_name()) + + self.team.buffer_prnt(message, message=True) + +class SlackThreadMessage(SlackMessage): + + def __init__(self, parent_message, *args): + super(SlackThreadMessage, self).__init__(*args) + self.parent_message = parent_message + + +class Hdata(object): + def __init__(self, w): + self.buffer = w.hdata_get('buffer') + self.line = w.hdata_get('line') + self.line_data = w.hdata_get('line_data') + self.lines = w.hdata_get('lines') + + +class SlackTS(object): + + def __init__(self, ts=None): + if ts: + self.major, self.minor = [int(x) for x in ts.split('.', 1)] + else: + self.major = int(time.time()) + self.minor = 0 + + def __cmp__(self, other): + if isinstance(other, SlackTS): + if self.major < other.major: + return -1 + elif self.major > other.major: + return 1 + elif self.major == other.major: + if self.minor < other.minor: + return -1 + elif self.minor > other.minor: + return 1 + else: + return 0 + else: + s = self.__str__() + if s < other: + return -1 + elif s > other: + return 1 + elif s == other: + return 0 + + def __lt__(self, other): + return self.__cmp__(other) < 0 + + def __le__(self, other): + return self.__cmp__(other) <= 0 + + def __eq__(self, other): + return self.__cmp__(other) == 0 + + def __ge__(self, other): + return self.__cmp__(other) >= 0 + + def __gt__(self, other): + return self.__cmp__(other) > 0 + + def __hash__(self): + return hash("{}.{}".format(self.major, self.minor)) + + def __repr__(self): + return str("{0}.{1:06d}".format(self.major, self.minor)) + + def split(self, *args, **kwargs): + return [self.major, self.minor] + + def majorstr(self): + return str(self.major) + + def minorstr(self): + return str(self.minor) + +###### New handlers + + +def handle_rtmstart(login_data, eventrouter, team, channel, metadata): + """ + This handles the main entry call to slack, rtm.start + """ + metadata = login_data["wee_slack_request_metadata"] + + if not login_data["ok"]: + w.prnt("", "ERROR: Failed connecting to Slack with token starting with {}: {}" + .format(metadata.token[:15], login_data["error"])) + if not re.match(r"^xo\w\w(-\d+){3}-[0-9a-f]+$", metadata.token): + w.prnt("", "ERROR: Token does not look like a valid Slack token. " + "Ensure it is a valid token and not just a OAuth code.") + + return + + # Let's reuse a team if we have it already. + th = SlackTeam.generate_team_hash(login_data['self']['name'], login_data['team']['domain']) + if not eventrouter.teams.get(th): + + users = {} + for item in login_data["users"]: + users[item["id"]] = SlackUser(login_data['team']['id'], **item) + + bots = {} + for item in login_data["bots"]: + bots[item["id"]] = SlackBot(login_data['team']['id'], **item) + + subteams = {} + for item in login_data["subteams"]["all"]: + is_member = item['id'] in login_data["subteams"]["self"] + subteams[item['id']] = SlackSubteam( + login_data['team']['id'], is_member=is_member, **item) + + channels = {} + for item in login_data["channels"]: + if item["is_shared"]: + channels[item["id"]] = SlackSharedChannel(eventrouter, **item) + elif item["is_private"]: + channels[item["id"]] = SlackPrivateChannel(eventrouter, **item) + else: + channels[item["id"]] = SlackChannel(eventrouter, **item) + + for item in login_data["ims"]: + channels[item["id"]] = SlackDMChannel(eventrouter, users, **item) + + for item in login_data["groups"]: + if item["is_mpim"]: + channels[item["id"]] = SlackMPDMChannel(eventrouter, users, login_data["self"]["id"], **item) + else: + channels[item["id"]] = SlackGroupChannel(eventrouter, **item) + + self_profile = next( + user["profile"] + for user in login_data["users"] + if user["id"] == login_data["self"]["id"] + ) + self_nick = nick_from_profile(self_profile, login_data["self"]["name"]) + + t = SlackTeam( + eventrouter, + metadata.token, + login_data['url'], + login_data["team"], + subteams, + self_nick, + login_data["self"]["id"], + login_data["self"]["manual_presence"], + users, + bots, + channels, + muted_channels=login_data["self"]["prefs"]["muted_channels"], + highlight_words=login_data["self"]["prefs"]["highlight_words"], + ) + eventrouter.register_team(t) + + else: + t = eventrouter.teams.get(th) + t.set_reconnect_url(login_data['url']) + t.connecting_rtm = False + + t.connect() + +def handle_rtmconnect(login_data, eventrouter, team, channel, metadata): + metadata = login_data["wee_slack_request_metadata"] + team = metadata.team + team.connecting_rtm = False + + if not login_data["ok"]: + w.prnt("", "ERROR: Failed reconnecting to Slack with token starting with {}: {}" + .format(metadata.token[:15], login_data["error"])) + return + + team.set_reconnect_url(login_data['url']) + team.connect() + + +def handle_emojilist(emoji_json, eventrouter, team, channel, metadata): + if emoji_json["ok"]: + team.emoji_completions.extend(emoji_json["emoji"].keys()) + + +def handle_channelsinfo(channel_json, eventrouter, team, channel, metadata): + channel.set_unread_count_display(channel_json['channel'].get('unread_count_display', 0)) + channel.set_members(channel_json['channel']['members']) + + +def handle_groupsinfo(group_json, eventrouter, team, channel, metadatas): + channel.set_unread_count_display(group_json['group'].get('unread_count_display', 0)) + + +def handle_conversationsopen(conversation_json, eventrouter, team, channel, metadata, object_name='channel'): + # Set unread count if the channel isn't new + if channel: + unread_count_display = conversation_json[object_name].get('unread_count_display', 0) + channel.set_unread_count_display(unread_count_display) + + +def handle_mpimopen(mpim_json, eventrouter, team, channel, metadata, object_name='group'): + handle_conversationsopen(mpim_json, eventrouter, team, channel, metadata, object_name) + + +def handle_history(message_json, eventrouter, team, channel, metadata): + if metadata['clear']: + channel.clear_messages() + channel.got_history = True + for message in reversed(message_json["messages"]): + process_message(message, eventrouter, team, channel, metadata, history_message=True) + + +handle_channelshistory = handle_history +handle_conversationshistory = handle_history +handle_groupshistory = handle_history +handle_imhistory = handle_history +handle_mpimhistory = handle_history + + +def handle_conversationsreplies(message_json, eventrouter, team, channel, metadata): + for message in message_json['messages']: + process_message(message, eventrouter, team, channel, metadata) + + +def handle_conversationsmembers(members_json, eventrouter, team, channel, metadata): + if members_json['ok']: + channel.set_members(members_json['members']) + else: + w.prnt(team.channel_buffer, '{}Couldn\'t load members for channel {}. Error: {}' + .format(w.prefix('error'), channel.name, members_json['error'])) + + +def handle_usersinfo(user_json, eventrouter, team, channel, metadata): + user_info = user_json['user'] + if not metadata.get('user'): + user = SlackUser(team.identifier, **user_info) + team.users[user_info['id']] = user + + if channel.type == 'shared': + channel.update_nicklist(user_info['id']) + elif channel.type == 'im': + channel.slack_name = user.name + channel.set_topic(create_user_status_string(user.profile)) + + +def handle_usergroupsuserslist(users_json, eventrouter, team, channel, metadata): + header = 'Users in {}'.format(metadata['usergroup_handle']) + users = [team.users[key] for key in users_json['users']] + return print_users_info(team, header, users) + + +def handle_usersprofileset(json, eventrouter, team, channel, metadata): + if not json['ok']: + w.prnt('', 'ERROR: Failed to set profile: {}'.format(json['error'])) + + +def handle_conversationsinvite(json, eventrouter, team, channel, metadata): + nicks = ', '.join(metadata['nicks']) + if json['ok']: + w.prnt(team.channel_buffer, 'Invited {} to {}'.format(nicks, channel.name)) + else: + w.prnt(team.channel_buffer, 'ERROR: Couldn\'t invite {} to {}. Error: {}' + .format(nicks, channel.name, json['error'])) + + +def handle_chatcommand(json, eventrouter, team, channel, metadata): + command = '{} {}'.format(metadata['command'], metadata['command_args']).rstrip() + response = unfurl_refs(json['response']) if 'response' in json else '' + if json['ok']: + response_text = 'Response: {}'.format(response) if response else 'No response' + w.prnt(team.channel_buffer, 'Ran command "{}". {}' .format(command, response_text)) + else: + response_text = '. Response: {}'.format(response) if response else '' + w.prnt(team.channel_buffer, 'ERROR: Couldn\'t run command "{}". Error: {}{}' + .format(command, json['error'], response_text)) + + +def handle_reactionsadd(json, eventrouter, team, channel, metadata): + if not json['ok']: + print_error("Couldn't add reaction {}: {}".format(metadata['reaction'], json['error'])) + + +def handle_reactionsremove(json, eventrouter, team, channel, metadata): + if not json['ok']: + print_error("Couldn't remove reaction {}: {}".format(metadata['reaction'], json['error'])) + + +###### New/converted process_ and subprocess_ methods +def process_hello(message_json, eventrouter, team, channel, metadata): + team.subscribe_users_presence() + + +def process_reconnect_url(message_json, eventrouter, team, channel, metadata): + team.set_reconnect_url(message_json['url']) + + +def process_presence_change(message_json, eventrouter, team, channel, metadata): + users = [team.users[user_id] for user_id in message_json.get("users", [])] + if "user" in metadata: + users.append(metadata["user"]) + for user in users: + team.update_member_presence(user, message_json["presence"]) + if team.myidentifier in users: + w.bar_item_update("away") + w.bar_item_update("slack_away") + + +def process_manual_presence_change(message_json, eventrouter, team, channel, metadata): + team.my_manual_presence = message_json["presence"] + w.bar_item_update("away") + w.bar_item_update("slack_away") + + +def process_pref_change(message_json, eventrouter, team, channel, metadata): + if message_json['name'] == 'muted_channels': + team.set_muted_channels(message_json['value']) + elif message_json['name'] == 'highlight_words': + team.set_highlight_words(message_json['value']) + else: + dbg("Preference change not implemented: {}\n".format(message_json['name'])) + + +def process_user_change(message_json, eventrouter, team, channel, metadata): + """ + Currently only used to update status, but lots here we could do. + """ + user = metadata['user'] + profile = message_json['user']['profile'] + if user: + user.update_status(profile.get('status_emoji'), profile.get('status_text')) + dmchannel = team.find_channel_by_members({user.identifier}, channel_type='im') + if dmchannel: + dmchannel.set_topic(create_user_status_string(profile)) + + +def process_user_typing(message_json, eventrouter, team, channel, metadata): + if channel: + channel.set_typing(metadata["user"].name) + w.bar_item_update("slack_typing_notice") + + +def process_team_join(message_json, eventrouter, team, channel, metadata): + user = message_json['user'] + team.users[user["id"]] = SlackUser(team.identifier, **user) + + +def process_pong(message_json, eventrouter, team, channel, metadata): + team.last_pong_time = time.time() + + +def process_message(message_json, eventrouter, team, channel, metadata, history_message=False): + if SlackTS(message_json["ts"]) in channel.messages: + return + + if "thread_ts" in message_json and "reply_count" not in message_json and "subtype" not in message_json: + if message_json.get("reply_broadcast"): + message_json["subtype"] = "thread_broadcast" + else: + message_json["subtype"] = "thread_message" + + subtype = message_json.get("subtype") + subtype_functions = get_functions_with_prefix("subprocess_") + + if subtype in subtype_functions: + subtype_functions[subtype](message_json, eventrouter, team, channel, history_message) + else: + message = SlackMessage(message_json, team, channel) + channel.store_message(message, team) + + text = channel.render(message) + dbg("Rendered message: %s" % text) + dbg("Sender: %s (%s)" % (message.sender, message.sender_plain)) + + if subtype == 'me_message': + prefix = w.prefix("action").rstrip() + else: + prefix = message.sender + + channel.buffer_prnt(prefix, text, message.ts, tag_nick=message.sender_plain, history_message=history_message) + channel.unread_count_display += 1 + dbg("NORMAL REPLY {}".format(message_json)) + + if not history_message: + download_files(message_json, team) + + +def download_files(message_json, team): + download_location = config.files_download_location + if not download_location: + return + download_location = w.string_eval_path_home(download_location, {}, {}, {}) + + if not os.path.exists(download_location): + try: + os.makedirs(download_location) + except: + w.prnt('', 'ERROR: Failed to create directory at files_download_location: {}' + .format(format_exc_only())) + + def fileout_iter(path): + yield path + main, ext = os.path.splitext(path) + for i in count(start=1): + yield main + "-{}".format(i) + ext + + for f in message_json.get('files', []): + if f.get('mode') == 'tombstone': + continue + + filetype = '' if f['title'].endswith(f['filetype']) else '.' + f['filetype'] + filename = '{}_{}{}'.format(team.preferred_name, f['title'], filetype) + for fileout in fileout_iter(os.path.join(download_location, filename)): + if os.path.isfile(fileout): + continue + w.hook_process_hashtable( + "url:" + f['url_private'], + { + 'file_out': fileout, + 'httpheader': 'Authorization: Bearer ' + team.token + }, + config.slack_timeout, "", "") + break + + +def subprocess_thread_message(message_json, eventrouter, team, channel, history_message): + parent_ts = message_json.get('thread_ts') + if parent_ts: + parent_message = channel.messages.get(SlackTS(parent_ts)) + if parent_message: + message = SlackThreadMessage( + parent_message, message_json, team, channel) + parent_message.submessages.append(message) + channel.hash_message(parent_ts) + channel.store_message(message, team) + channel.change_message(parent_ts) + + if parent_message.thread_channel and parent_message.thread_channel.active: + parent_message.thread_channel.buffer_prnt(message.sender, parent_message.thread_channel.render(message), message.ts, tag_nick=message.sender_plain) + elif message.ts > channel.last_read and message.has_mention(): + parent_message.notify_thread(action="mention", sender_id=message_json["user"]) + + if config.thread_messages_in_channel or message_json["subtype"] == "thread_broadcast": + thread_tag = "thread_broadcast" if message_json["subtype"] == "thread_broadcast" else "thread_message" + channel.buffer_prnt( + message.sender, + channel.render(message), + message.ts, + tag_nick=message.sender_plain, + history_message=history_message, + extra_tags=[thread_tag], + ) + + +subprocess_thread_broadcast = subprocess_thread_message + + +def subprocess_channel_join(message_json, eventrouter, team, channel, history_message): + prefix_join = w.prefix("join").strip() + message = SlackMessage(message_json, team, channel, override_sender=prefix_join) + channel.buffer_prnt(prefix_join, channel.render(message), message_json["ts"], tagset='join', tag_nick=message.get_sender()[1], history_message=history_message) + channel.user_joined(message_json['user']) + channel.store_message(message, team) + + +def subprocess_channel_leave(message_json, eventrouter, team, channel, history_message): + prefix_leave = w.prefix("quit").strip() + message = SlackMessage(message_json, team, channel, override_sender=prefix_leave) + channel.buffer_prnt(prefix_leave, channel.render(message), message_json["ts"], tagset='leave', tag_nick=message.get_sender()[1], history_message=history_message) + channel.user_left(message_json['user']) + channel.store_message(message, team) + + +def subprocess_channel_topic(message_json, eventrouter, team, channel, history_message): + prefix_topic = w.prefix("network").strip() + message = SlackMessage(message_json, team, channel, override_sender=prefix_topic) + channel.buffer_prnt(prefix_topic, channel.render(message), message_json["ts"], tagset="topic", tag_nick=message.get_sender()[1], history_message=history_message) + channel.set_topic(message_json["topic"]) + channel.store_message(message, team) + + +subprocess_group_join = subprocess_channel_join +subprocess_group_leave = subprocess_channel_leave +subprocess_group_topic = subprocess_channel_topic + + +def subprocess_message_replied(message_json, eventrouter, team, channel, history_message): + parent_ts = message_json["message"].get("thread_ts") + parent_message = channel.messages.get(SlackTS(parent_ts)) + # Thread exists but is not open yet + if parent_message is not None \ + and not (parent_message.thread_channel and parent_message.thread_channel.active): + channel.hash_message(parent_ts) + last_message = max(message_json["message"]["replies"], key=lambda x: x["ts"]) + if message_json["message"].get("user") == team.myidentifier: + parent_message.notify_thread(action="response", sender_id=last_message["user"]) + elif any(team.myidentifier == r["user"] for r in message_json["message"]["replies"]): + parent_message.notify_thread(action="participant", sender_id=last_message["user"]) + + +def subprocess_message_changed(message_json, eventrouter, team, channel, history_message): + new_message = message_json.get("message") + channel.change_message(new_message["ts"], message_json=new_message) + + +def subprocess_message_deleted(message_json, eventrouter, team, channel, history_message): + message = colorize_string(config.color_deleted, '(deleted)') + channel.change_message(message_json["deleted_ts"], text=message) + + +def process_reply(message_json, eventrouter, team, channel, metadata): + reply_to = int(message_json["reply_to"]) + original_message_json = team.ws_replies.pop(reply_to, None) + if original_message_json: + original_message_json.update(message_json) + channel = team.channels[original_message_json.get('channel')] + process_message(original_message_json, eventrouter, team=team, channel=channel, metadata={}) + dbg("REPLY {}".format(message_json)) + else: + dbg("Unexpected reply {}".format(message_json)) + + +def process_channel_marked(message_json, eventrouter, team, channel, metadata): + ts = message_json.get("ts") + if ts: + channel.mark_read(ts=ts, force=True, update_remote=False) + else: + dbg("tried to mark something weird {}".format(message_json)) + + +process_group_marked = process_channel_marked +process_im_marked = process_channel_marked +process_mpim_marked = process_channel_marked + + +def process_channel_joined(message_json, eventrouter, team, channel, metadata): + channel.update_from_message_json(message_json["channel"]) + channel.open() + + +def process_channel_created(message_json, eventrouter, team, channel, metadata): + item = message_json["channel"] + item['is_member'] = False + channel = SlackChannel(eventrouter, team=team, **item) + team.channels[item["id"]] = channel + team.buffer_prnt('Channel created: {}'.format(channel.slack_name)) + + +def process_channel_rename(message_json, eventrouter, team, channel, metadata): + channel.slack_name = message_json['channel']['name'] + + +def process_im_created(message_json, eventrouter, team, channel, metadata): + item = message_json["channel"] + channel = SlackDMChannel(eventrouter, team=team, users=team.users, **item) + team.channels[item["id"]] = channel + team.buffer_prnt('IM channel created: {}'.format(channel.name)) + + +def process_im_open(message_json, eventrouter, team, channel, metadata): + channel.check_should_open(True) + w.buffer_set(channel.channel_buffer, "hotlist", "2") + + +def process_im_close(message_json, eventrouter, team, channel, metadata): + if channel.channel_buffer: + w.prnt(team.channel_buffer, + 'IM {} closed by another client or the server'.format(channel.name)) + eventrouter.weechat_controller.unregister_buffer(channel.channel_buffer, False, True) + + +def process_group_joined(message_json, eventrouter, team, channel, metadata): + item = message_json["channel"] + if item["name"].startswith("mpdm-"): + channel = SlackMPDMChannel(eventrouter, team.users, team.myidentifier, team=team, **item) + else: + channel = SlackGroupChannel(eventrouter, team=team, **item) + team.channels[item["id"]] = channel + channel.open() + + +def process_reaction_added(message_json, eventrouter, team, channel, metadata): + channel = team.channels.get(message_json["item"].get("channel")) + if message_json["item"].get("type") == "message": + ts = SlackTS(message_json['item']["ts"]) + + message = channel.messages.get(ts) + if message: + message.add_reaction(message_json["reaction"], message_json["user"]) + channel.change_message(ts) + else: + dbg("reaction to item type not supported: " + str(message_json)) + + +def process_reaction_removed(message_json, eventrouter, team, channel, metadata): + channel = team.channels.get(message_json["item"].get("channel")) + if message_json["item"].get("type") == "message": + ts = SlackTS(message_json['item']["ts"]) + + message = channel.messages.get(ts) + if message: + message.remove_reaction(message_json["reaction"], message_json["user"]) + channel.change_message(ts) + else: + dbg("Reaction to item type not supported: " + str(message_json)) + + +def process_subteam_created(subteam_json, eventrouter, team, channel, metadata): + subteam_json_info = subteam_json['subteam'] + is_member = team.myidentifier in subteam_json_info.get('users', []) + subteam = SlackSubteam(team.identifier, is_member=is_member, **subteam_json_info) + team.subteams[subteam_json_info['id']] = subteam + + +def process_subteam_updated(subteam_json, eventrouter, team, channel, metadata): + current_subteam_info = team.subteams[subteam_json['subteam']['id']] + is_member = team.myidentifier in subteam_json['subteam'].get('users', []) + new_subteam_info = SlackSubteam(team.identifier, is_member=is_member, **subteam_json['subteam']) + team.subteams[subteam_json['subteam']['id']] = new_subteam_info + + if current_subteam_info.is_member != new_subteam_info.is_member: + for channel in team.channels.values(): + channel.set_highlights() + + if config.notify_usergroup_handle_updated and current_subteam_info.handle != new_subteam_info.handle: + message = 'User group {old_handle} has updated its handle to {new_handle} in team {team}.'.format( + name=current_subteam_info.handle, handle=new_subteam_info.handle, team=team.preferred_name) + team.buffer_prnt(message, message=True) + + +def process_emoji_changed(message_json, eventrouter, team, channel, metadata): + team.load_emoji_completions() + + +###### New module/global methods +def render_formatting(text): + text = re.sub(r'(^| )\*([^*\n`]+)\*(?=[^\w]|$)', + r'\1{}*\2*{}'.format(w.color(config.render_bold_as), + w.color('-' + config.render_bold_as)), + text, + flags=re.UNICODE) + text = re.sub(r'(^| )_([^_\n`]+)_(?=[^\w]|$)', + r'\1{}_\2_{}'.format(w.color(config.render_italic_as), + w.color('-' + config.render_italic_as)), + text, + flags=re.UNICODE) + return text + + +def linkify_text(message, team, only_users=False): + # The get_username_map function is a bit heavy, but this whole + # function is only called on message send.. + usernames = team.get_username_map() + channels = team.get_channel_map() + usergroups = team.generate_usergroup_map() + message_escaped = (message + # Replace IRC formatting chars with Slack formatting chars. + .replace('\x02', '*') + .replace('\x1D', '_') + .replace('\x1F', config.map_underline_to) + # Escape chars that have special meaning to Slack. Note that we do not + # (and should not) perform full HTML entity-encoding here. + # See https://api.slack.com/docs/message-formatting for details. + .replace('&', '&') + .replace('<', '<') + .replace('>', '>')) + + def linkify_word(match): + word = match.group(0) + prefix, name = match.groups() + if prefix == "@": + if name in ["channel", "everyone", "group", "here"]: + return "<!{}>".format(name) + elif name in usernames: + return "<@{}>".format(usernames[name]) + elif word in usergroups.keys(): + return "<!subteam^{}|{}>".format(usergroups[word], word) + elif prefix == "#" and not only_users: + if word in channels: + return "<#{}|{}>".format(channels[word], name) + return word + + linkify_regex = r'(?:^|(?<=\s))([@#])([\w\(\)\'.-]+)' + return re.sub(linkify_regex, linkify_word, message_escaped, flags=re.UNICODE) + + +def unfurl_blocks(message_json): + block_text = [""] + for block in message_json["blocks"]: + try: + if block["type"] == "section": + fields = block.get("fields", []) + if "text" in block: + fields.insert(0, block["text"]) + block_text.extend(unfurl_block_element(field) for field in fields) + elif block["type"] == "actions": + elements = [] + for element in block["elements"]: + if element["type"] == "button": + elements.append(unfurl_block_element(element["text"])) + else: + elements.append(colorize_string(config.color_deleted, + '<<Unsupported block action type "{}">>'.format(element["type"]))) + block_text.append(" | ".join(elements)) + elif block["type"] == "call": + block_text.append("Join via " + block["call"]["v1"]["join_url"]) + elif block["type"] == "divider": + block_text.append("---") + elif block["type"] == "context": + block_text.append(" | ".join(unfurl_block_element(el) for el in block["elements"])) + elif block["type"] == "image": + if "title" in block: + block_text.append(unfurl_block_element(block["title"])) + block_text.append(unfurl_block_element(block)) + elif block["type"] == "rich_text": + continue + else: + block_text.append(colorize_string(config.color_deleted, + '<<Unsupported block type "{}">>'.format(block["type"]))) + dbg('Unsupported block: "{}"'.format(json.dumps(block)), level=4) + except Exception as e: + dbg("Failed to unfurl block ({}): {}".format(repr(e), json.dumps(block)), level=4) + return "\n".join(block_text) + + +def unfurl_block_element(text): + if text["type"] == "mrkdwn": + return render_formatting(text["text"]) + elif text["type"] == "plain_text": + return text["text"] + elif text["type"] == "image": + return "{} ({})".format(text["image_url"], text["alt_text"]) + + +def unfurl_refs(text): + """ + input : <@U096Q7CQM|someuser> has joined the channel + ouput : someuser has joined the channel + """ + # Find all strings enclosed by <> + # - <https://example.com|example with spaces> + # - <#C2147483705|#otherchannel> + # - <@U2147483697|@othernick> + # - <!subteam^U2147483697|@group> + # Test patterns lives in ./_pytest/test_unfurl.py + + def unfurl_ref(match): + ref, fallback = match.groups() + + resolved_ref = resolve_ref(ref) + if resolved_ref != ref: + return resolved_ref + + if fallback and not config.unfurl_ignore_alt_text: + if ref.startswith("#"): + return "#{}".format(fallback) + elif ref.startswith("@"): + return fallback + elif ref.startswith("!subteam"): + prefix = "@" if not fallback.startswith("@") else "" + return prefix + fallback + elif ref.startswith("!date"): + return fallback + else: + match_url = r"^\w+:(//)?{}$".format(re.escape(fallback)) + url_matches_desc = re.match(match_url, ref) + if url_matches_desc and config.unfurl_auto_link_display == "text": + return fallback + elif url_matches_desc and config.unfurl_auto_link_display == "url": + return ref + else: + return "{} ({})".format(ref, fallback) + return ref + + return re.sub(r"<([^|>]*)(?:\|([^>]*))?>", unfurl_ref, text) + + +def unhtmlescape(text): + return text.replace("<", "<") \ + .replace(">", ">") \ + .replace("&", "&") + + +def unwrap_attachments(message_json, text_before): + text_before_unescaped = unhtmlescape(text_before) + attachment_texts = [] + a = message_json.get("attachments") + if a: + if text_before: + attachment_texts.append('') + for attachment in a: + # Attachments should be rendered roughly like: + # + # $pretext + # $author: (if rest of line is non-empty) $title ($title_link) OR $from_url + # $author: (if no $author on previous line) $text + # $fields + t = [] + prepend_title_text = '' + if 'author_name' in attachment: + prepend_title_text = attachment['author_name'] + ": " + if 'pretext' in attachment: + t.append(attachment['pretext']) + title = attachment.get('title') + title_link = attachment.get('title_link', '') + if title_link in text_before_unescaped: + title_link = '' + if title and title_link: + t.append('%s%s (%s)' % (prepend_title_text, title, title_link,)) + prepend_title_text = '' + elif title and not title_link: + t.append('%s%s' % (prepend_title_text, title,)) + prepend_title_text = '' + from_url = attachment.get('from_url', '') + if from_url not in text_before_unescaped and from_url != title_link: + t.append(from_url) + + atext = attachment.get("text") + if atext: + tx = re.sub(r' *\n[\n ]+', '\n', atext) + t.append(prepend_title_text + tx) + prepend_title_text = '' + + image_url = attachment.get('image_url', '') + if image_url not in text_before_unescaped and image_url != title_link: + t.append(image_url) + + fields = attachment.get("fields") + if fields: + for f in fields: + if f.get('title'): + t.append('%s %s' % (f['title'], f['value'],)) + else: + t.append(f['value']) + fallback = attachment.get("fallback") + if t == [] and fallback: + t.append(fallback) + attachment_texts.append("\n".join([x.strip() for x in t if x])) + return "\n".join(attachment_texts) + + +def unwrap_files(message_json, text_before): + files_texts = [] + for f in message_json.get('files', []): + if f.get('mode', '') != 'tombstone': + text = '{} ({})'.format(f['url_private'], f['title']) + else: + text = colorize_string(config.color_deleted, '(This file was deleted.)') + files_texts.append(text) + + if text_before: + files_texts.insert(0, '') + return "\n".join(files_texts) + + +def resolve_ref(ref): + if ref in ['!channel', '!everyone', '!group', '!here']: + return ref.replace('!', '@') + for team in EVENTROUTER.teams.values(): + if ref.startswith('@'): + user = team.users.get(ref[1:]) + if user: + suffix = config.external_user_suffix if user.is_external else '' + return '@{}{}'.format(user.name, suffix) + elif ref.startswith('#'): + channel = team.channels.get(ref[1:]) + if channel: + return channel.name + elif ref.startswith('!subteam'): + _, subteam_id = ref.split('^') + subteam = team.subteams.get(subteam_id) + if subteam: + return subteam.handle + elif ref.startswith("!date"): + parts = ref.split('^') + ref_datetime = datetime.fromtimestamp(int(parts[1])) + link_suffix = ' ({})'.format(parts[3]) if len(parts) > 3 else '' + token_to_format = { + 'date_num': '%Y-%m-%d', + 'date': '%B %d, %Y', + 'date_short': '%b %d, %Y', + 'date_long': '%A, %B %d, %Y', + 'time': '%H:%M', + 'time_secs': '%H:%M:%S' + } + + def replace_token(match): + token = match.group(1) + if token.startswith('date_') and token.endswith('_pretty'): + if ref_datetime.date() == date.today(): + return 'today' + elif ref_datetime.date() == date.today() - timedelta(days=1): + return 'yesterday' + elif ref_datetime.date() == date.today() + timedelta(days=1): + return 'tomorrow' + else: + token = token.replace('_pretty', '') + if token in token_to_format: + return ref_datetime.strftime(token_to_format[token]) + else: + return match.group(0) + + return re.sub(r"{([^}]+)}", replace_token, parts[2]) + link_suffix + + # Something else, just return as-is + return ref + + +def create_user_status_string(profile): + real_name = profile.get("real_name") + status_emoji = replace_string_with_emoji(profile.get("status_emoji", "")) + status_text = profile.get("status_text") + if status_emoji or status_text: + return "{} | {} {}".format(real_name, status_emoji, status_text) + else: + return real_name + + +def create_reaction_string(reaction, myidentifier): + if config.show_reaction_nicks: + nicks = [resolve_ref('@{}'.format(user)) for user in reaction['users']] + users = '({})'.format(','.join(nicks)) + else: + users = len(reaction['users']) + reaction_string = ':{}:{}'.format(reaction['name'], users) + if myidentifier in reaction['users']: + return colorize_string(config.color_reaction_suffix_added_by_you, reaction_string, + reset_color=config.color_reaction_suffix) + else: + return reaction_string + + +def create_reactions_string(reactions, myidentifier): + reactions_with_users = [r for r in reactions if len(r['users']) > 0] + reactions_string = ' '.join(create_reaction_string(r, myidentifier) for r in reactions_with_users) + if reactions_string: + return ' ' + colorize_string(config.color_reaction_suffix, '[{}]'.format(reactions_string)) + else: + return '' + + +def hdata_line_ts(line_pointer): + data = w.hdata_pointer(hdata.line, line_pointer, 'data') + ts_major = w.hdata_time(hdata.line_data, data, 'date') + ts_minor = w.hdata_time(hdata.line_data, data, 'date_printed') + return (ts_major, ts_minor) + + +def modify_buffer_line(buffer_pointer, ts, new_text): + own_lines = w.hdata_pointer(hdata.buffer, buffer_pointer, 'own_lines') + line_pointer = w.hdata_pointer(hdata.lines, own_lines, 'last_line') + + # Find the last line with this ts + while line_pointer and hdata_line_ts(line_pointer) != (ts.major, ts.minor): + line_pointer = w.hdata_move(hdata.line, line_pointer, -1) + + # Find all lines for the message + pointers = [] + while line_pointer and hdata_line_ts(line_pointer) == (ts.major, ts.minor): + pointers.append(line_pointer) + line_pointer = w.hdata_move(hdata.line, line_pointer, -1) + pointers.reverse() + + # Split the message into at most the number of existing lines as we can't insert new lines + lines = new_text.split('\n', len(pointers) - 1) + # Replace newlines to prevent garbled lines in bare display mode + lines = [line.replace('\n', ' | ') for line in lines] + # Extend lines in case the new message is shorter than the old as we can't delete lines + lines += [''] * (len(pointers) - len(lines)) + + for pointer, line in zip(pointers, lines): + data = w.hdata_pointer(hdata.line, pointer, 'data') + w.hdata_update(hdata.line_data, data, {"message": line}) + + return w.WEECHAT_RC_OK + + +def modify_last_print_time(buffer_pointer, ts_minor): + """ + This overloads the time printed field to let us store the slack + per message unique id that comes after the "." in a slack ts + """ + own_lines = w.hdata_pointer(hdata.buffer, buffer_pointer, 'own_lines') + line_pointer = w.hdata_pointer(hdata.lines, own_lines, 'last_line') + + while line_pointer: + data = w.hdata_pointer(hdata.line, line_pointer, 'data') + w.hdata_update(hdata.line_data, data, {"date_printed": str(ts_minor)}) + + if w.hdata_string(hdata.line_data, data, 'prefix'): + # Reached the first line of the message, so stop here + break + + # Move one line backwards so all lines of the message are set + line_pointer = w.hdata_move(hdata.line, line_pointer, -1) + + return w.WEECHAT_RC_OK + + +def nick_from_profile(profile, username): + full_name = profile.get('real_name') or username + if config.use_full_names: + nick = full_name + else: + nick = profile.get('display_name') or full_name + return nick.replace(' ', '') + + +def format_nick(nick, previous_nick=None): + if nick == previous_nick: + nick = w.config_string(w.config_get('weechat.look.prefix_same_nick')) or nick + nick_prefix = w.config_string(w.config_get('weechat.look.nick_prefix')) + nick_prefix_color_name = w.config_string(w.config_get('weechat.color.chat_nick_prefix')) + + nick_suffix = w.config_string(w.config_get('weechat.look.nick_suffix')) + nick_suffix_color_name = w.config_string(w.config_get('weechat.color.chat_nick_prefix')) + return colorize_string(nick_prefix_color_name, nick_prefix) + nick + colorize_string(nick_suffix_color_name, nick_suffix) + + +def tag(tagset=None, user=None, self_msg=False, backlog=False, no_log=False, extra_tags=None): + tagsets = { + "team_info": {"no_highlight", "log3"}, + "team_message": {"irc_privmsg", "notify_message", "log1"}, + "dm": {"irc_privmsg", "notify_private", "log1"}, + "join": {"irc_join", "no_highlight", "log4"}, + "leave": {"irc_part", "no_highlight", "log4"}, + "topic": {"irc_topic", "no_highlight", "log3"}, + "channel": {"irc_privmsg", "notify_message", "log1"}, + } + nick_tag = {"nick_{}".format(user).replace(" ", "_")} if user else set() + slack_tag = {"slack_{}".format(tagset or "default")} + tags = nick_tag | slack_tag | tagsets.get(tagset, set()) + if self_msg or backlog: + tags -= {"notify_highlight", "notify_message", "notify_private"} + tags |= {"notify_none", "no_highlight"} + if self_msg: + tags |= {"self_msg"} + if backlog: + tags |= {"logger_backlog"} + if no_log: + tags |= {"no_log"} + tags = {tag for tag in tags if not tag.startswith("log")} + if extra_tags: + tags |= set(extra_tags) + return ",".join(tags) + + +def set_own_presence_active(team): + slackbot = team.get_channel_map()['Slackbot'] + channel = team.channels[slackbot] + request = {"type": "typing", "channel": channel.identifier} + channel.team.send_to_websocket(request, expect_reply=False) + + +###### New/converted command_ commands + + +@slack_buffer_or_ignore +@utf8_decode +def invite_command_cb(data, current_buffer, args): + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + split_args = args.split()[1:] + if not split_args: + w.prnt('', 'Too few arguments for command "/invite" (help on command: /help invite)') + return w.WEECHAT_RC_OK_EAT + + if split_args[-1].startswith("#") or split_args[-1].startswith(config.group_name_prefix): + nicks = split_args[:-1] + channel = team.channels.get(team.get_channel_map().get(split_args[-1])) + if not nicks or not channel: + w.prnt('', '{}: No such nick/channel'.format(split_args[-1])) + return w.WEECHAT_RC_OK_EAT + else: + nicks = split_args + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + + all_users = team.get_username_map() + users = set() + for nick in nicks: + user = all_users.get(nick.lstrip('@')) + if not user: + w.prnt('', 'ERROR: Unknown user: {}'.format(nick)) + return w.WEECHAT_RC_OK_EAT + users.add(user) + + s = SlackRequest(team, "conversations.invite", {"channel": channel.identifier, "users": ",".join(users)}, + channel=channel, metadata={"nicks": nicks}) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_or_ignore +@utf8_decode +def part_command_cb(data, current_buffer, args): + e = EVENTROUTER + args = args.split() + if len(args) > 1: + team = e.weechat_controller.buffers[current_buffer].team + cmap = team.get_channel_map() + channel = "".join(args[1:]) + if channel in cmap: + buffer_ptr = team.channels[cmap[channel]].channel_buffer + e.weechat_controller.unregister_buffer(buffer_ptr, update_remote=True, close_buffer=True) + else: + w.prnt(team.channel_buffer, "{}: No such channel".format(channel)) + else: + e.weechat_controller.unregister_buffer(current_buffer, update_remote=True, close_buffer=True) + return w.WEECHAT_RC_OK_EAT + + +def parse_topic_command(command): + args = command.split()[1:] + channel_name = None + topic = None + + if args: + if args[0].startswith('#'): + channel_name = args[0] + topic = args[1:] + else: + topic = args + + if topic == []: + topic = None + if topic: + topic = ' '.join(topic) + if topic == '-delete': + topic = '' + + return channel_name, topic + + +@slack_buffer_or_ignore +@utf8_decode +def topic_command_cb(data, current_buffer, command): + """ + Change the topic of a channel + /topic [<channel>] [<topic>|-delete] + """ + channel_name, topic = parse_topic_command(command) + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + + if channel_name: + channel = team.channels.get(team.get_channel_map().get(channel_name)) + else: + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + + if not channel: + w.prnt(team.channel_buffer, "{}: No such channel".format(channel_name)) + return w.WEECHAT_RC_OK_EAT + + if topic is None: + w.prnt(channel.channel_buffer, + 'Topic for {} is "{}"'.format(channel.name, channel.render_topic())) + else: + s = SlackRequest(team, "conversations.setTopic", + {"channel": channel.identifier, "topic": linkify_text(topic, team)}, channel=channel) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_or_ignore +@utf8_decode +def whois_command_cb(data, current_buffer, command): + """ + Get real name of user + /whois <nick> + """ + args = command.split() + if len(args) < 2: + w.prnt(current_buffer, "Not enough arguments") + return w.WEECHAT_RC_OK_EAT + user = args[1] + if (user.startswith('@')): + user = user[1:] + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + u = team.users.get(team.get_username_map().get(user)) + if u: + def print_profile(field): + value = u.profile.get(field) + if value: + team.buffer_prnt("[{}]: {}: {}".format(user, field, value)) + + team.buffer_prnt("[{}]: {}".format(user, u.real_name)) + status_emoji = replace_string_with_emoji(u.profile.get("status_emoji", "")) + status_text = u.profile.get("status_text", "") + if status_emoji or status_text: + team.buffer_prnt("[{}]: {} {}".format(user, status_emoji, status_text)) + + team.buffer_prnt("[{}]: username: {}".format(user, u.username)) + team.buffer_prnt("[{}]: id: {}".format(user, u.identifier)) + + print_profile('title') + print_profile('email') + print_profile('phone') + print_profile('skype') + else: + team.buffer_prnt("[{}]: No such user".format(user)) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_or_ignore +@utf8_decode +def me_command_cb(data, current_buffer, args): + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + message = args.split(' ', 1)[1] + channel.send_message(message, subtype='me_message') + return w.WEECHAT_RC_OK_EAT + + +@utf8_decode +def command_register(data, current_buffer, args): + """ + /slack register [code] + Register a Slack team in wee-slack. + """ + CLIENT_ID = "2468770254.51917335286" + CLIENT_SECRET = "dcb7fe380a000cba0cca3169a5fe8d70" # Not really a secret. + REDIRECT_URI = "https%3A%2F%2Fwee-slack.github.io%2Fwee-slack%2Foauth%23" + if not args: + message = textwrap.dedent(""" + ### Connecting to a Slack team with OAuth ### + 1) Paste this link into a browser: https://slack.com/oauth/authorize?client_id={}&scope=client&redirect_uri={} + 2) Select the team you wish to access from wee-slack in your browser. If you want to add multiple teams, you will have to repeat this whole process for each team. + 3) Click "Authorize" in the browser. + If you get a message saying you are not authorized to install wee-slack, the team has restricted Slack app installation and you will have to request it from an admin. To do that, go to https://my.slack.com/apps/A1HSZ9V8E-wee-slack and click "Request to Install". + 4) The web page will show a command in the form `/slack register <code>`. Run this command in weechat. + """).strip().format(CLIENT_ID, REDIRECT_URI) + w.prnt("", message) + return w.WEECHAT_RC_OK_EAT + + uri = ( + "https://slack.com/api/oauth.access?" + "client_id={}&client_secret={}&redirect_uri={}&code={}" + ).format(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI, args) + params = {'useragent': 'wee_slack {}'.format(SCRIPT_VERSION)} + w.hook_process_hashtable('url:', params, config.slack_timeout, "", "") + w.hook_process_hashtable("url:{}".format(uri), params, config.slack_timeout, "register_callback", "") + return w.WEECHAT_RC_OK_EAT + + +@utf8_decode +def register_callback(data, command, return_code, out, err): + if return_code != 0: + w.prnt("", "ERROR: problem when trying to get Slack OAuth token. Got return code {}. Err: {}".format(return_code, err)) + w.prnt("", "Check the network or proxy settings") + return w.WEECHAT_RC_OK_EAT + + if len(out) <= 0: + w.prnt("", "ERROR: problem when trying to get Slack OAuth token. Got 0 length answer. Err: {}".format(err)) + w.prnt("", "Check the network or proxy settings") + return w.WEECHAT_RC_OK_EAT + + d = json.loads(out) + if not d["ok"]: + w.prnt("", + "ERROR: Couldn't get Slack OAuth token: {}".format(d['error'])) + return w.WEECHAT_RC_OK_EAT + + if config.is_default('slack_api_token'): + w.config_set_plugin('slack_api_token', d['access_token']) + else: + # Add new token to existing set, joined by comma. + tok = config.get_string('slack_api_token') + w.config_set_plugin('slack_api_token', + ','.join([tok, d['access_token']])) + + w.prnt("", "Success! Added team \"%s\"" % (d['team_name'],)) + w.prnt("", "Please reload wee-slack with: /python reload slack") + w.prnt("", "If you want to add another team you can repeat this process from step 1 before reloading wee-slack.") + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_or_ignore +@utf8_decode +def msg_command_cb(data, current_buffer, args): + aargs = args.split(None, 2) + who = aargs[1].lstrip('@') + if who == "*": + who = EVENTROUTER.weechat_controller.buffers[current_buffer].name + else: + join_query_command_cb(data, current_buffer, '/query ' + who) + + if len(aargs) > 2: + message = aargs[2] + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + cmap = team.get_channel_map() + if who in cmap: + channel = team.channels[cmap[who]] + channel.send_message(message) + return w.WEECHAT_RC_OK_EAT + + +def print_team_items_info(team, header, items, extra_info_function): + team.buffer_prnt("{}:".format(header)) + if items: + max_name_length = max(len(item.name) for item in items) + for item in sorted(items, key=lambda item: item.name.lower()): + extra_info = extra_info_function(item) + team.buffer_prnt(" {:<{}}({})".format(item.name, max_name_length + 2, extra_info)) + return w.WEECHAT_RC_OK_EAT + + +def print_users_info(team, header, users): + def extra_info_function(user): + external_text = ", external" if user.is_external else "" + return user.presence + external_text + return print_team_items_info(team, header, users, extra_info_function) + + +@slack_buffer_required +@utf8_decode +def command_teams(data, current_buffer, args): + """ + /slack teams + List the connected Slack teams. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + teams = EVENTROUTER.teams.values() + extra_info_function = lambda team: "token: {}...".format(team.token[:15]) + return print_team_items_info(team, "Slack teams", teams, extra_info_function) + + +@slack_buffer_required +@utf8_decode +def command_channels(data, current_buffer, args): + """ + /slack channels + List the channels in the current team. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + channels = [channel for channel in team.channels.values() if channel.type not in ['im', 'mpim']] + def extra_info_function(channel): + if channel.active: + return "member" + elif getattr(channel, "is_archived", None): + return "archived" + else: + return "not a member" + return print_team_items_info(team, "Channels", channels, extra_info_function) + + +@slack_buffer_required +@utf8_decode +def command_users(data, current_buffer, args): + """ + /slack users + List the users in the current team. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + return print_users_info(team, "Users", team.users.values()) + + +@slack_buffer_required +@utf8_decode +def command_usergroups(data, current_buffer, args): + """ + /slack usergroups [handle] + List the usergroups in the current team + If handle is given show the members in the usergroup + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + usergroups = team.generate_usergroup_map() + usergroup_key = usergroups.get(args) + + if usergroup_key: + s = SlackRequest(team, "usergroups.users.list", {"usergroup": usergroup_key}, + metadata={'usergroup_handle': args}) + EVENTROUTER.receive(s) + elif args: + w.prnt('', 'ERROR: Unknown usergroup handle: {}'.format(args)) + return w.WEECHAT_RC_ERROR + else: + def extra_info_function(subteam): + is_member = 'member' if subteam.is_member else 'not a member' + return '{}, {}'.format(subteam.handle, is_member) + return print_team_items_info(team, "Usergroups", team.subteams.values(), extra_info_function) + return w.WEECHAT_RC_OK_EAT + +command_usergroups.completion = '%(usergroups)' + + +@slack_buffer_required +@utf8_decode +def command_talk(data, current_buffer, args): + """ + /slack talk <user>[,<user2>[,<user3>...]] + Open a chat with the specified user(s). + """ + if not args: + w.prnt('', 'Usage: /slack talk <user>[,<user2>[,<user3>...]]') + return w.WEECHAT_RC_ERROR + return join_query_command_cb(data, current_buffer, '/query ' + args) + +command_talk.completion = '%(nicks)' + + +@slack_buffer_or_ignore +@utf8_decode +def join_query_command_cb(data, current_buffer, args): + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + split_args = args.split(' ', 1) + if len(split_args) < 2 or not split_args[1]: + w.prnt('', 'Too few arguments for command "{}" (help on command: /help {})' + .format(split_args[0], split_args[0].lstrip('/'))) + return w.WEECHAT_RC_OK_EAT + query = split_args[1] + + # Try finding the channel by name + channel = team.channels.get(team.get_channel_map().get(query)) + + # If the channel doesn't exist, try finding a DM or MPDM instead + if not channel: + if query.startswith('#'): + w.prnt('', 'ERROR: Unknown channel: {}'.format(query)) + return w.WEECHAT_RC_OK_EAT + + # Get the IDs of the users + all_users = team.get_username_map() + users = set() + for username in query.split(','): + user = all_users.get(username.lstrip('@')) + if not user: + w.prnt('', 'ERROR: Unknown user: {}'.format(username)) + return w.WEECHAT_RC_OK_EAT + users.add(user) + + if users: + if len(users) > 1: + channel_type = 'mpim' + # Add the current user since MPDMs include them as a member + users.add(team.myidentifier) + else: + channel_type = 'im' + + channel = team.find_channel_by_members(users, channel_type=channel_type) + + # If the DM or MPDM doesn't exist, create it + if not channel: + s = SlackRequest(team, SLACK_API_TRANSLATOR[channel_type]['join'], + {'users': ','.join(users)}) + EVENTROUTER.receive(s) + + if channel: + channel.open() + if config.switch_buffer_on_join: + w.buffer_set(channel.channel_buffer, "display", "1") + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_showmuted(data, current_buffer, args): + """ + /slack showmuted + List the muted channels in the current team. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + muted_channels = [team.channels[key].name + for key in team.muted_channels if key in team.channels] + team.buffer_prnt("Muted channels: {}".format(', '.join(muted_channels))) + return w.WEECHAT_RC_OK_EAT + + +def get_msg_from_id(channel, msg_id): + if msg_id[0] == '$': + msg_id = msg_id[1:] + return channel.hashed_messages.get(msg_id) + + +@slack_buffer_required +@utf8_decode +def command_thread(data, current_buffer, args): + """ + /thread [message_id] + Open the thread for the message. + If no message id is specified the last thread in channel will be opened. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + + if not isinstance(channel, SlackChannelCommon): + print_error('/thread can not be used in the team buffer, only in a channel') + return w.WEECHAT_RC_ERROR + + if args: + msg = get_msg_from_id(channel, args) + if not msg: + w.prnt('', 'ERROR: Invalid id given, must be an existing id') + return w.WEECHAT_RC_OK_EAT + else: + for message in reversed(channel.messages.values()): + if type(message) == SlackMessage and message.number_of_replies(): + msg = message + break + else: + w.prnt('', 'ERROR: No threads found in channel') + return w.WEECHAT_RC_OK_EAT + + msg.open_thread(switch=config.switch_buffer_on_join) + return w.WEECHAT_RC_OK_EAT + +command_thread.completion = '%(threads)' + + +@slack_buffer_required +@utf8_decode +def command_reply(data, current_buffer, args): + """ + /reply [-alsochannel] [<count/message_id>] <message> + + When in a channel buffer: + /reply [-alsochannel] <count/message_id> <message> + Reply in a thread on the message. Specify either the message id or a count + upwards to the message from the last message. + + When in a thread buffer: + /reply [-alsochannel] <message> + Reply to the current thread. This can be used to send the reply to the + rest of the channel. + + In either case, -alsochannel also sends the reply to the parent channel. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + parts = args.split(None, 1) + if parts[0] == "-alsochannel": + args = parts[1] + broadcast = True + else: + broadcast = False + + if isinstance(channel, SlackThreadChannel): + text = args + msg = channel.parent_message + else: + try: + msg_id, text = args.split(None, 1) + except ValueError: + w.prnt('', 'Usage (when in a channel buffer): /reply [-alsochannel] <count/message_id> <message>') + return w.WEECHAT_RC_OK_EAT + msg = get_msg_from_id(channel, msg_id) + + if msg: + if isinstance(msg, SlackThreadMessage): + parent_id = str(msg.parent_message.ts) + else: + parent_id = str(msg.ts) + elif msg_id.isdigit() and int(msg_id) >= 1: + mkeys = channel.main_message_keys_reversed() + parent_id = str(next(islice(mkeys, int(msg_id) - 1, None))) + else: + w.prnt('', 'ERROR: Invalid id given, must be a number greater than 0 or an existing id') + return w.WEECHAT_RC_OK_EAT + + channel.send_message(text, request_dict_ext={'thread_ts': parent_id, 'reply_broadcast': broadcast}) + return w.WEECHAT_RC_OK_EAT + +command_reply.completion = '-alsochannel %(threads)||%(threads)' + + +@slack_buffer_required +@utf8_decode +def command_rehistory(data, current_buffer, args): + """ + /rehistory + Reload the history in the current channel. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + channel.clear_messages() + channel.get_history() + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_hide(data, current_buffer, args): + """ + /hide + Hide the current channel if it is marked as distracting. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + name = channel.formatted_name(style='long_default') + if name in config.distracting_channels: + w.buffer_set(channel.channel_buffer, "hidden", "1") + return w.WEECHAT_RC_OK_EAT + + +@utf8_decode +def slack_command_cb(data, current_buffer, args): + split_args = args.split(' ', 1) + cmd_name = split_args[0] + cmd_args = split_args[1] if len(split_args) > 1 else '' + cmd = EVENTROUTER.cmds.get(cmd_name or 'help') + if not cmd: + w.prnt('', 'Command not found: ' + cmd_name) + return w.WEECHAT_RC_OK + return cmd(data, current_buffer, cmd_args) + + +@utf8_decode +def command_help(data, current_buffer, args): + """ + /slack help [command] + Print help for /slack commands. + """ + if args: + cmd = EVENTROUTER.cmds.get(args) + if cmd: + cmds = {args: cmd} + else: + w.prnt('', 'Command not found: ' + args) + return w.WEECHAT_RC_OK + else: + cmds = EVENTROUTER.cmds + w.prnt('', '\n{}'.format(colorize_string('bold', 'Slack commands:'))) + + script_prefix = '{0}[{1}python{0}/{1}slack{0}]{1}'.format(w.color('green'), w.color('reset')) + + for _, cmd in sorted(cmds.items()): + name, cmd_args, description = parse_help_docstring(cmd) + w.prnt('', '\n{} {} {}\n\n{}'.format( + script_prefix, colorize_string('white', name), cmd_args, description)) + return w.WEECHAT_RC_OK + + +@slack_buffer_required +@utf8_decode +def command_distracting(data, current_buffer, args): + """ + /slack distracting + Add or remove the current channel from distracting channels. You can hide + or unhide these channels with /slack nodistractions. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + fullname = channel.formatted_name(style="long_default") + if fullname in config.distracting_channels: + config.distracting_channels.remove(fullname) + else: + config.distracting_channels.append(fullname) + w.config_set_plugin('distracting_channels', ','.join(config.distracting_channels)) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_slash(data, current_buffer, args): + """ + /slack slash /customcommand arg1 arg2 arg3 + Run a custom slack command. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + team = channel.team + + split_args = args.split(' ', 1) + command = split_args[0] + text = split_args[1] if len(split_args) > 1 else "" + text_linkified = linkify_text(text, team, only_users=True) + + s = SlackRequest(team, "chat.command", + {"command": command, "text": text_linkified, 'channel': channel.identifier}, + channel=channel, metadata={'command': command, 'command_args': text}) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_mute(data, current_buffer, args): + """ + /slack mute + Toggle mute on the current channel. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + team = channel.team + team.muted_channels ^= {channel.identifier} + muted_str = "Muted" if channel.identifier in team.muted_channels else "Unmuted" + team.buffer_prnt("{} channel {}".format(muted_str, channel.name)) + s = SlackRequest(team, "users.prefs.set", + {"name": "muted_channels", "value": ",".join(team.muted_channels)}, channel=channel) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_linkarchive(data, current_buffer, args): + """ + /slack linkarchive [message_id] + Place a link to the channel or message in the input bar. + Use cursor or mouse mode to get the id. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + url = 'https://{}/'.format(channel.team.domain) + + if isinstance(channel, SlackChannelCommon): + url += 'archives/{}/'.format(channel.identifier) + if args: + if args[0] == '$': + message_id = args[1:] + else: + message_id = args + message = channel.hashed_messages.get(message_id) + if message: + url += 'p{}{:0>6}'.format(message.ts.majorstr(), message.ts.minorstr()) + if isinstance(message, SlackThreadMessage): + url += "?thread_ts={}&cid={}".format(message.parent_message.ts, channel.identifier) + else: + w.prnt('', 'ERROR: Invalid id given, must be an existing id') + return w.WEECHAT_RC_OK_EAT + + w.command(current_buffer, "/input insert {}".format(url)) + return w.WEECHAT_RC_OK_EAT + +command_linkarchive.completion = '%(threads)' + + +@utf8_decode +def command_nodistractions(data, current_buffer, args): + """ + /slack nodistractions + Hide or unhide all channels marked as distracting. + """ + global hide_distractions + hide_distractions = not hide_distractions + channels = [channel for channel in EVENTROUTER.weechat_controller.buffers.values() + if channel in config.distracting_channels] + for channel in channels: + w.buffer_set(channel.channel_buffer, "hidden", str(int(hide_distractions))) + return w.WEECHAT_RC_OK_EAT + + +@slack_buffer_required +@utf8_decode +def command_upload(data, current_buffer, args): + """ + /slack upload <filename> + Uploads a file to the current buffer. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + weechat_dir = w.info_get("weechat_dir", "") + file_path = os.path.join(weechat_dir, os.path.expanduser(args)) + + if channel.type == 'team': + w.prnt('', "ERROR: Can't upload a file to the team buffer") + return w.WEECHAT_RC_ERROR + + if not os.path.isfile(file_path): + unescaped_file_path = file_path.replace(r'\ ', ' ') + if os.path.isfile(unescaped_file_path): + file_path = unescaped_file_path + else: + w.prnt('', 'ERROR: Could not find file: {}'.format(file_path)) + return w.WEECHAT_RC_ERROR + + post_data = { + 'channels': channel.identifier, + } + if isinstance(channel, SlackThreadChannel): + post_data['thread_ts'] = channel.parent_message.ts + + url = SlackRequest(channel.team, 'files.upload', post_data, channel=channel).request_string() + options = [ + '-s', + '-Ffile=@{}'.format(file_path), + url + ] + + proxy_string = ProxyWrapper().curl() + if proxy_string: + options.append(proxy_string) + + options_hashtable = {'arg{}'.format(i + 1): arg for i, arg in enumerate(options)} + w.hook_process_hashtable('curl', options_hashtable, config.slack_timeout, 'upload_callback', '') + return w.WEECHAT_RC_OK_EAT + +command_upload.completion = '%(filename)' + + +@utf8_decode +def upload_callback(data, command, return_code, out, err): + if return_code != 0: + w.prnt("", "ERROR: Couldn't upload file. Got return code {}. Error: {}".format(return_code, err)) + return w.WEECHAT_RC_OK_EAT + + try: + response = json.loads(out) + except JSONDecodeError: + w.prnt("", "ERROR: Couldn't process response from file upload. Got: {}".format(out)) + return w.WEECHAT_RC_OK_EAT + + if not response["ok"]: + w.prnt("", "ERROR: Couldn't upload file. Error: {}".format(response["error"])) + return w.WEECHAT_RC_OK_EAT + + +@utf8_decode +def away_command_cb(data, current_buffer, args): + all_servers, message = re.match('^/away( -all)? ?(.*)', args).groups() + if all_servers: + team_buffers = [team.channel_buffer for team in EVENTROUTER.teams.values()] + elif current_buffer in EVENTROUTER.weechat_controller.buffers: + team_buffers = [current_buffer] + else: + return w.WEECHAT_RC_OK + + for team_buffer in team_buffers: + if message: + command_away(data, team_buffer, args) + else: + command_back(data, team_buffer, args) + return w.WEECHAT_RC_OK + + +@slack_buffer_required +@utf8_decode +def command_away(data, current_buffer, args): + """ + /slack away + Sets your status as 'away'. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + s = SlackRequest(team, "users.setPresence", {"presence": "away"}) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK + + +@slack_buffer_required +@utf8_decode +def command_status(data, current_buffer, args): + """ + /slack status [<emoji> [<status_message>]|-delete] + Lets you set your Slack Status (not to be confused with away/here). + Prints current status if no arguments are given, unsets the status if -delete is given. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + + split_args = args.split(" ", 1) + if not split_args[0]: + profile = team.users[team.myidentifier].profile + team.buffer_prnt("Status: {} {}".format( + replace_string_with_emoji(profile.get("status_emoji", "")), + profile.get("status_text", ""))) + return w.WEECHAT_RC_OK + + emoji = "" if split_args[0] == "-delete" else split_args[0] + text = split_args[1] if len(split_args) > 1 else "" + new_profile = {"status_text": text, "status_emoji": emoji} + + s = SlackRequest(team, "users.profile.set", {"profile": new_profile}) + EVENTROUTER.receive(s) + return w.WEECHAT_RC_OK + +command_status.completion = "-delete|%(emoji)" + + +@utf8_decode +def line_event_cb(data, signal, hashtable): + buffer_pointer = hashtable["_buffer"] + line_timestamp = hashtable["_chat_line_date"] + line_time_id = hashtable["_chat_line_date_printed"] + channel = EVENTROUTER.weechat_controller.buffers.get(buffer_pointer) + + if line_timestamp and line_time_id and isinstance(channel, SlackChannelCommon): + ts = SlackTS("{}.{}".format(line_timestamp, line_time_id)) + + message_hash = channel.hash_message(ts) + if message_hash is None: + return w.WEECHAT_RC_OK + message_hash = "$" + message_hash + + if data == "message": + w.command(buffer_pointer, "/cursor stop") + w.command(buffer_pointer, "/input insert {}".format(message_hash)) + elif data == "delete": + w.command(buffer_pointer, "/input send {}s///".format(message_hash)) + elif data == "linkarchive": + w.command(buffer_pointer, "/cursor stop") + w.command(buffer_pointer, "/slack linkarchive {}".format(message_hash[1:])) + elif data == "reply": + w.command(buffer_pointer, "/cursor stop") + w.command(buffer_pointer, "/input insert /reply {}\\x20".format(message_hash)) + elif data == "thread": + w.command(buffer_pointer, "/cursor stop") + w.command(buffer_pointer, "/thread {}".format(message_hash)) + return w.WEECHAT_RC_OK + + +@slack_buffer_required +@utf8_decode +def command_back(data, current_buffer, args): + """ + /slack back + Sets your status as 'back'. + """ + team = EVENTROUTER.weechat_controller.buffers[current_buffer].team + s = SlackRequest(team, "users.setPresence", {"presence": "auto"}) + EVENTROUTER.receive(s) + set_own_presence_active(team) + return w.WEECHAT_RC_OK + + +@slack_buffer_required +@utf8_decode +def command_label(data, current_buffer, args): + """ + /label <name> + Rename a thread buffer. Note that this is not permanent. It will only last + as long as you keep the buffer and wee-slack open. + """ + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + if channel.type == 'thread': + new_name = " +" + args + channel.label = new_name + w.buffer_set(channel.channel_buffer, "short_name", new_name) + return w.WEECHAT_RC_OK + + +@utf8_decode +def set_unread_cb(data, current_buffer, command): + for channel in EVENTROUTER.weechat_controller.buffers.values(): + channel.mark_read() + return w.WEECHAT_RC_OK + + +@slack_buffer_or_ignore +@utf8_decode +def set_unread_current_buffer_cb(data, current_buffer, command): + channel = EVENTROUTER.weechat_controller.buffers[current_buffer] + channel.mark_read() + return w.WEECHAT_RC_OK + + +###### NEW EXCEPTIONS + + +class InvalidType(Exception): + """ + Raised when we do type checking to ensure objects of the wrong + type are not used improperly. + """ + def __init__(self, type_str): + super(InvalidType, self).__init__(type_str) + +###### New but probably old and need to migrate + + +def closed_slack_debug_buffer_cb(data, buffer): + global slack_debug + slack_debug = None + return w.WEECHAT_RC_OK + + +def create_slack_debug_buffer(): + global slack_debug, debug_string + if slack_debug is None: + debug_string = None + slack_debug = w.buffer_new("slack-debug", "", "", "closed_slack_debug_buffer_cb", "") + w.buffer_set(slack_debug, "notify", "0") + w.buffer_set(slack_debug, "highlight_tags_restrict", "highlight_force") + + +def load_emoji(): + try: + DIR = w.info_get('weechat_dir', '') + with open('{}/weemoji.json'.format(DIR), 'r') as ef: + emojis = json.loads(ef.read()) + if 'emoji' in emojis: + print_error('The weemoji.json file is in an old format. Please update it.') + else: + emoji_unicode = {key: value['unicode'] for key, value in emojis.items()} + + emoji_skin_tones = {skin_tone['name']: skin_tone['unicode'] + for emoji in emojis.values() + for skin_tone in emoji.get('skinVariations', {}).values()} + + emoji_with_skin_tones = chain(emoji_unicode.items(), emoji_skin_tones.items()) + emoji_with_skin_tones_reverse = {v: k for k, v in emoji_with_skin_tones} + return emoji_unicode, emoji_with_skin_tones_reverse + except: + dbg("Couldn't load emoji list: {}".format(format_exc_only()), 5) + return {}, {} + + +def parse_help_docstring(cmd): + doc = textwrap.dedent(cmd.__doc__).strip().split('\n', 1) + cmd_line = doc[0].split(None, 1) + args = ''.join(cmd_line[1:]) + return cmd_line[0], args, doc[1].strip() + + +def setup_hooks(): + w.bar_item_new('slack_typing_notice', '(extra)typing_bar_item_cb', '') + w.bar_item_new('away', '(extra)away_bar_item_cb', '') + w.bar_item_new('slack_away', '(extra)away_bar_item_cb', '') + + w.hook_timer(5000, 0, 0, "ws_ping_cb", "") + w.hook_timer(1000, 0, 0, "typing_update_cb", "") + w.hook_timer(1000, 0, 0, "buffer_list_update_callback", "EVENTROUTER") + w.hook_timer(3000, 0, 0, "reconnect_callback", "EVENTROUTER") + w.hook_timer(1000 * 60 * 5, 0, 0, "slack_never_away_cb", "") + + w.hook_signal('buffer_closing', "buffer_closing_callback", "") + w.hook_signal('buffer_switch', "buffer_switch_callback", "EVENTROUTER") + w.hook_signal('window_switch', "buffer_switch_callback", "EVENTROUTER") + w.hook_signal('quit', "quit_notification_callback", "") + if config.send_typing_notice: + w.hook_signal('input_text_changed', "typing_notification_cb", "") + + command_help.completion = '|'.join(EVENTROUTER.cmds.keys()) + completions = '||'.join( + '{} {}'.format(name, getattr(cmd, 'completion', '')) + for name, cmd in EVENTROUTER.cmds.items()) + + w.hook_command( + # Command name and description + 'slack', 'Plugin to allow typing notification and sync of read markers for slack.com', + # Usage + '<command> [<command options>]', + # Description of arguments + 'Commands:\n' + + '\n'.join(sorted(EVENTROUTER.cmds.keys())) + + '\nUse /slack help <command> to find out more\n', + # Completions + completions, + # Function name + 'slack_command_cb', '') + + w.hook_command_run('/me', 'me_command_cb', '') + w.hook_command_run('/query', 'join_query_command_cb', '') + w.hook_command_run('/join', 'join_query_command_cb', '') + w.hook_command_run('/part', 'part_command_cb', '') + w.hook_command_run('/topic', 'topic_command_cb', '') + w.hook_command_run('/msg', 'msg_command_cb', '') + w.hook_command_run('/invite', 'invite_command_cb', '') + w.hook_command_run("/input complete_next", "complete_next_cb", "") + w.hook_command_run("/input set_unread", "set_unread_cb", "") + w.hook_command_run("/input set_unread_current_buffer", "set_unread_current_buffer_cb", "") + w.hook_command_run('/away', 'away_command_cb', '') + w.hook_command_run('/whois', 'whois_command_cb', '') + + for cmd_name in ['hide', 'label', 'rehistory', 'reply', 'thread']: + cmd = EVENTROUTER.cmds[cmd_name] + _, args, description = parse_help_docstring(cmd) + completion = getattr(cmd, 'completion', '') + w.hook_command(cmd_name, description, args, '', completion, 'command_' + cmd_name, '') + + w.hook_completion("irc_channel_topic", "complete topic for slack", "topic_completion_cb", "") + w.hook_completion("irc_channels", "complete channels for slack", "channel_completion_cb", "") + w.hook_completion("irc_privates", "complete dms/mpdms for slack", "dm_completion_cb", "") + w.hook_completion("nicks", "complete @-nicks for slack", "nick_completion_cb", "") + w.hook_completion("threads", "complete thread ids for slack", "thread_completion_cb", "") + w.hook_completion("usergroups", "complete @-usergroups for slack", "usergroups_completion_cb", "") + w.hook_completion("emoji", "complete :emoji: for slack", "emoji_completion_cb", "") + + w.key_bind("mouse", { + "@chat(python.*):button2": "hsignal:slack_mouse", + }) + w.key_bind("cursor", { + "@chat(python.*):D": "hsignal:slack_cursor_delete", + "@chat(python.*):L": "hsignal:slack_cursor_linkarchive", + "@chat(python.*):M": "hsignal:slack_cursor_message", + "@chat(python.*):R": "hsignal:slack_cursor_reply", + "@chat(python.*):T": "hsignal:slack_cursor_thread", + }) + + w.hook_hsignal("slack_mouse", "line_event_cb", "message") + w.hook_hsignal("slack_cursor_delete", "line_event_cb", "delete") + w.hook_hsignal("slack_cursor_linkarchive", "line_event_cb", "linkarchive") + w.hook_hsignal("slack_cursor_message", "line_event_cb", "message") + w.hook_hsignal("slack_cursor_reply", "line_event_cb", "reply") + w.hook_hsignal("slack_cursor_thread", "line_event_cb", "thread") + + # Hooks to fix/implement + # w.hook_signal('buffer_opened', "buffer_opened_cb", "") + # w.hook_signal('window_scrolled', "scrolled_cb", "") + # w.hook_timer(3000, 0, 0, "slack_connection_persistence_cb", "") + +##### END NEW + + +def dbg(message, level=0, main_buffer=False, fout=False): + """ + send debug output to the slack-debug buffer and optionally write to a file. + """ + # TODO: do this smarter + if level >= config.debug_level: + global debug_string + message = "DEBUG: {}".format(message) + if fout: + with open('/tmp/debug.log', 'a+') as log_file: + log_file.writelines(message + '\n') + if main_buffer: + w.prnt("", "slack: " + message) + else: + if slack_debug and (not debug_string or debug_string in message): + w.prnt(slack_debug, message) + + +###### Config code +class PluginConfig(object): + Setting = collections.namedtuple('Setting', ['default', 'desc']) + # Default settings. + # These are, initially, each a (default, desc) tuple; the former is the + # default value of the setting, in the (string) format that weechat + # expects, and the latter is the user-friendly description of the setting. + # At __init__ time these values are extracted, the description is used to + # set or update the setting description for use with /help, and the default + # value is used to set the default for any settings not already defined. + # Following this procedure, the keys remain the same, but the values are + # the real (python) values of the settings. + default_settings = { + 'auto_open_threads': Setting( + default='false', + desc='Automatically open threads when mentioned or in' + 'response to own messages.'), + 'background_load_all_history': Setting( + default='false', + desc='Load history for each channel in the background as soon as it' + ' opens, rather than waiting for the user to look at it.'), + 'channel_name_typing_indicator': Setting( + default='true', + desc='Change the prefix of a channel from # to > when someone is' + ' typing in it. Note that this will (temporarily) affect the sort' + ' order if you sort buffers by name rather than by number.'), + 'color_buflist_muted_channels': Setting( + default='darkgray', + desc='Color to use for muted channels in the buflist'), + 'color_deleted': Setting( + default='red', + desc='Color to use for deleted messages and files.'), + 'color_edited_suffix': Setting( + default='095', + desc='Color to use for (edited) suffix on messages that have been edited.'), + 'color_reaction_suffix': Setting( + default='darkgray', + desc='Color to use for the [:wave:(@user)] suffix on messages that' + ' have reactions attached to them.'), + 'color_reaction_suffix_added_by_you': Setting( + default='blue', + desc='Color to use for reactions that you have added.'), + 'color_thread_suffix': Setting( + default='lightcyan', + desc='Color to use for the [thread: XXX] suffix on messages that' + ' have threads attached to them. The special value "multiple" can' + ' be used to use a different color for each thread.'), + 'color_typing_notice': Setting( + default='yellow', + desc='Color to use for the typing notice.'), + 'colorize_private_chats': Setting( + default='false', + desc='Whether to use nick-colors in DM windows.'), + 'debug_mode': Setting( + default='false', + desc='Open a dedicated buffer for debug messages and start logging' + ' to it. How verbose the logging is depends on log_level.'), + 'debug_level': Setting( + default='3', + desc='Show only this level of debug info (or higher) when' + ' debug_mode is on. Lower levels -> more messages.'), + 'distracting_channels': Setting( + default='', + desc='List of channels to hide.'), + 'external_user_suffix': Setting( + default='*', + desc='The suffix appended to nicks to indicate external users.'), + 'files_download_location': Setting( + default='', + desc='If set, file attachments will be automatically downloaded' + ' to this location. "%h" will be replaced by WeeChat home,' + ' "~/.weechat" by default.'), + 'group_name_prefix': Setting( + default='&', + desc='The prefix of buffer names for groups (private channels).'), + 'map_underline_to': Setting( + default='_', + desc='When sending underlined text to slack, use this formatting' + ' character for it. The default ("_") sends it as italics. Use' + ' "*" to send bold instead.'), + 'muted_channels_activity': Setting( + default='personal_highlights', + desc="Control which activity you see from muted channels, either" + " none, personal_highlights, all_highlights or all. none: Don't" + " show any activity. personal_highlights: Only show personal" + " highlights, i.e. not @channel and @here. all_highlights: Show" + " all highlights, but not other messages. all: Show all activity," + " like other channels."), + 'notify_usergroup_handle_updated': Setting( + default='false', + desc="Control if you want to see notification when a usergroup's" + " handle has changed, either true or false."), + 'never_away': Setting( + default='false', + desc='Poke Slack every five minutes so that it never marks you "away".'), + 'record_events': Setting( + default='false', + desc='Log all traffic from Slack to disk as JSON.'), + 'render_bold_as': Setting( + default='bold', + desc='When receiving bold text from Slack, render it as this in weechat.'), + 'render_emoji_as_string': Setting( + default='false', + desc="Render emojis as :emoji_name: instead of emoji characters. Enable this" + " if your terminal doesn't support emojis, or set to 'both' if you want to" + " see both renderings. Note that even though this is" + " disabled by default, you need to place {}/blob/master/weemoji.json in your" + " weechat directory to enable rendering emojis as emoji characters." + .format(REPO_URL)), + 'render_italic_as': Setting( + default='italic', + desc='When receiving bold text from Slack, render it as this in weechat.' + ' If your terminal lacks italic support, consider using "underline" instead.'), + 'send_typing_notice': Setting( + default='true', + desc='Alert Slack users when you are typing a message in the input bar ' + '(Requires reload)'), + 'server_aliases': Setting( + default='', + desc='A comma separated list of `subdomain:alias` pairs. The alias' + ' will be used instead of the actual name of the slack (in buffer' + ' names, logging, etc). E.g `work:no_fun_allowed` would make your' + ' work slack show up as `no_fun_allowed` rather than `work.slack.com`.'), + 'shared_name_prefix': Setting( + default='%', + desc='The prefix of buffer names for shared channels.'), + 'short_buffer_names': Setting( + default='false', + desc='Use `foo.#channel` rather than `foo.slack.com.#channel` as the' + ' internal name for Slack buffers.'), + 'show_buflist_presence': Setting( + default='true', + desc='Display a `+` character in the buffer list for present users.'), + 'show_reaction_nicks': Setting( + default='false', + desc='Display the name of the reacting user(s) alongside each reactji.'), + 'slack_api_token': Setting( + default='INSERT VALID KEY HERE!', + desc='List of Slack API tokens, one per Slack instance you want to' + ' connect to. See the README for details on how to get these.'), + 'slack_timeout': Setting( + default='20000', + desc='How long (ms) to wait when communicating with Slack.'), + 'switch_buffer_on_join': Setting( + default='true', + desc='When /joining a channel, automatically switch to it as well.'), + 'thread_messages_in_channel': Setting( + default='false', + desc='When enabled shows thread messages in the parent channel.'), + 'unfurl_ignore_alt_text': Setting( + default='false', + desc='When displaying ("unfurling") links to channels/users/etc,' + ' ignore the "alt text" present in the message and instead use the' + ' canonical name of the thing being linked to.'), + 'unfurl_auto_link_display': Setting( + default='both', + desc='When displaying ("unfurling") links to channels/users/etc,' + ' determine what is displayed when the text matches the url' + ' without the protocol. This happens when Slack automatically' + ' creates links, e.g. from words separated by dots or email' + ' addresses. Set it to "text" to only display the text written by' + ' the user, "url" to only display the url or "both" (the default)' + ' to display both.'), + 'unhide_buffers_with_activity': Setting( + default='false', + desc='When activity occurs on a buffer, unhide it even if it was' + ' previously hidden (whether by the user or by the' + ' distracting_channels setting).'), + 'use_full_names': Setting( + default='false', + desc='Use full names as the nicks for all users. When this is' + ' false (the default), display names will be used if set, with a' + ' fallback to the full name if display name is not set.'), + } + + # Set missing settings to their defaults. Load non-missing settings from + # weechat configs. + def __init__(self): + self.settings = {} + # Set all descriptions, replace the values in the dict with the + # default setting value rather than the (setting,desc) tuple. + for key, (default, desc) in self.default_settings.items(): + w.config_set_desc_plugin(key, desc) + self.settings[key] = default + + # Migrate settings from old versions of Weeslack... + self.migrate() + # ...and then set anything left over from the defaults. + for key, default in self.settings.items(): + if not w.config_get_plugin(key): + w.config_set_plugin(key, default) + self.config_changed(None, None, None) + + def __str__(self): + return "".join([x + "\t" + str(self.settings[x]) + "\n" for x in self.settings.keys()]) + + def config_changed(self, data, key, value): + for key in self.settings: + self.settings[key] = self.fetch_setting(key) + if self.debug_mode: + create_slack_debug_buffer() + return w.WEECHAT_RC_OK + + def fetch_setting(self, key): + try: + return getattr(self, 'get_' + key)(key) + except AttributeError: + # Most settings are on/off, so make get_boolean the default + return self.get_boolean(key) + except: + # There was setting-specific getter, but it failed. + return self.settings[key] + + def __getattr__(self, key): + try: + return self.settings[key] + except KeyError: + raise AttributeError(key) + + def get_boolean(self, key): + return w.config_string_to_boolean(w.config_get_plugin(key)) + + def get_string(self, key): + return w.config_get_plugin(key) + + def get_int(self, key): + return int(w.config_get_plugin(key)) + + def is_default(self, key): + default = self.default_settings.get(key).default + return w.config_get_plugin(key) == default + + get_color_buflist_muted_channels = get_string + get_color_deleted = get_string + get_color_edited_suffix = get_string + get_color_reaction_suffix = get_string + get_color_reaction_suffix_added_by_you = get_string + get_color_thread_suffix = get_string + get_color_typing_notice = get_string + get_debug_level = get_int + get_external_user_suffix = get_string + get_files_download_location = get_string + get_group_name_prefix = get_string + get_map_underline_to = get_string + get_muted_channels_activity = get_string + get_render_bold_as = get_string + get_render_italic_as = get_string + get_shared_name_prefix = get_string + get_slack_timeout = get_int + get_unfurl_auto_link_display = get_string + + def get_distracting_channels(self, key): + return [x.strip() for x in w.config_get_plugin(key).split(',') if x] + + def get_server_aliases(self, key): + alias_list = w.config_get_plugin(key) + return dict(item.split(":") for item in alias_list.split(",") if ':' in item) + + def get_slack_api_token(self, key): + token = w.config_get_plugin("slack_api_token") + if token.startswith('${sec.data'): + return w.string_eval_expression(token, {}, {}, {}) + else: + return token + + def get_render_emoji_as_string(self, key): + s = w.config_get_plugin(key) + if s == 'both': + return s + return w.config_string_to_boolean(s) + + def migrate(self): + """ + This is to migrate the extension name from slack_extension to slack + """ + if not w.config_get_plugin("migrated"): + for k in self.settings.keys(): + if not w.config_is_set_plugin(k): + p = w.config_get("plugins.var.python.slack_extension.{}".format(k)) + data = w.config_string(p) + if data != "": + w.config_set_plugin(k, data) + w.config_set_plugin("migrated", "true") + + old_thread_color_config = w.config_get_plugin("thread_suffix_color") + new_thread_color_config = w.config_get_plugin("color_thread_suffix") + if old_thread_color_config and not new_thread_color_config: + w.config_set_plugin("color_thread_suffix", old_thread_color_config) + + +def config_server_buffer_cb(data, key, value): + for team in EVENTROUTER.teams.values(): + team.buffer_merge(value) + return w.WEECHAT_RC_OK + + +# to Trace execution, add `setup_trace()` to startup +# and to a function and sys.settrace(trace_calls) to a function +def setup_trace(): + global f + now = time.time() + f = open('{}/{}-trace.json'.format(RECORD_DIR, now), 'w') + + +def trace_calls(frame, event, arg): + global f + if event != 'call': + return + co = frame.f_code + func_name = co.co_name + if func_name == 'write': + # Ignore write() calls from print statements + return + func_line_no = frame.f_lineno + func_filename = co.co_filename + caller = frame.f_back + caller_line_no = caller.f_lineno + caller_filename = caller.f_code.co_filename + print('Call to %s on line %s of %s from line %s of %s' % \ + (func_name, func_line_no, func_filename, + caller_line_no, caller_filename), file=f) + f.flush() + return + + +def initiate_connection(token, retries=3, team=None): + return SlackRequest(team, + 'rtm.{}'.format('connect' if team else 'start'), + {"batch_presence_aware": 1}, + retries=retries, + token=token) + + +if __name__ == "__main__": + + w = WeechatWrapper(weechat) + + if w.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, + SCRIPT_DESC, "script_unloaded", ""): + + weechat_version = w.info_get("version_number", "") or 0 + if int(weechat_version) < 0x1030000: + w.prnt("", "\nERROR: Weechat version 1.3+ is required to use {}.\n\n".format(SCRIPT_NAME)) + else: + + global EVENTROUTER + EVENTROUTER = EventRouter() + + receive_httprequest_callback = EVENTROUTER.receive_httprequest_callback + receive_ws_callback = EVENTROUTER.receive_ws_callback + + # Global var section + slack_debug = None + config = PluginConfig() + config_changed_cb = config.config_changed + + typing_timer = time.time() + + hide_distractions = False + + w.hook_config("plugins.var.python." + SCRIPT_NAME + ".*", "config_changed_cb", "") + w.hook_config("irc.look.server_buffer", "config_server_buffer_cb", "") + w.hook_modifier("input_text_for_buffer", "input_text_for_buffer_cb", "") + + EMOJI, EMOJI_WITH_SKIN_TONES_REVERSE = load_emoji() + setup_hooks() + + # attach to the weechat hooks we need + + tokens = [token.strip() for token in config.slack_api_token.split(',')] + w.prnt('', 'Connecting to {} slack team{}.' + .format(len(tokens), '' if len(tokens) == 1 else 's')) + for t in tokens: + s = initiate_connection(t) + EVENTROUTER.receive(s) + if config.record_events: + EVENTROUTER.record() + EVENTROUTER.handle_next() + # END attach to the weechat hooks we need + + hdata = Hdata(w) diff --git a/.weechat/relay.conf b/.weechat/relay.conf new file mode 100644 index 0000000..f9ab68b --- /dev/null +++ b/.weechat/relay.conf @@ -0,0 +1,55 @@ +# +# weechat -- relay.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_open_buffer = on +raw_messages = 256 + +[color] +client = cyan +status_active = lightblue +status_auth_failed = lightred +status_connecting = yellow +status_disconnected = lightred +status_waiting_auth = brown +text = default +text_bg = default +text_selected = white + +[network] +allow_empty_password = off +allowed_ips = "" +bind_address = "" +clients_purge_delay = 0 +compression_level = 6 +ipv6 = on +max_clients = 5 +password = "" +ssl_cert_key = "%h/ssl/relay.pem" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +totp_secret = "" +totp_window = 0 +websocket_allowed_origins = "" + +[irc] +backlog_max_minutes = 1440 +backlog_max_number = 256 +backlog_since_last_disconnect = on +backlog_since_last_message = off +backlog_tags = "irc_privmsg" +backlog_time_format = "[%H:%M] " + +[weechat] +commands = "" + +[port] + +[path] diff --git a/.weechat/ruby.conf b/.weechat/ruby.conf new file mode 100644 index 0000000..f6de7fb --- /dev/null +++ b/.weechat/ruby.conf @@ -0,0 +1,14 @@ +# +# weechat -- ruby.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/script.conf b/.weechat/script.conf new file mode 100644 index 0000000..121f189 --- /dev/null +++ b/.weechat/script.conf @@ -0,0 +1,56 @@ +# +# weechat -- script.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +columns = "%s %n %V %v %u | %d | %t" +diff_color = on +diff_command = "auto" +display_source = on +quiet_actions = on +sort = "i,p,n" +translate_description = on +use_keys = on + +[color] +status_autoloaded = cyan +status_held = white +status_installed = lightcyan +status_obsolete = lightmagenta +status_popular = yellow +status_running = lightgreen +status_unknown = lightred +text = default +text_bg = default +text_bg_selected = red +text_date = default +text_date_selected = white +text_delimiters = default +text_description = default +text_description_selected = white +text_extension = default +text_extension_selected = white +text_name = cyan +text_name_selected = lightcyan +text_selected = white +text_tags = brown +text_tags_selected = yellow +text_version = magenta +text_version_loaded = default +text_version_loaded_selected = white +text_version_selected = lightmagenta + +[scripts] +autoload = on +cache_expire = 1440 +download_timeout = 30 +hold = "" +path = "%h/script" +url = "https://weechat.org/files/plugins.xml.gz" diff --git a/.weechat/script/plugins.xml.gz b/.weechat/script/plugins.xml.gz new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.weechat/script/plugins.xml.gz diff --git a/.weechat/script/url_hint.py b/.weechat/script/url_hint.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.weechat/script/url_hint.py diff --git a/.weechat/sec.conf b/.weechat/sec.conf new file mode 100644 index 0000000..8c60d03 --- /dev/null +++ b/.weechat/sec.conf @@ -0,0 +1,18 @@ +# +# weechat -- sec.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[crypt] +cipher = aes256 +hash_algo = sha256 +passphrase_file = "" +salt = on + +[data] diff --git a/.weechat/spell.conf b/.weechat/spell.conf new file mode 100644 index 0000000..f65348d --- /dev/null +++ b/.weechat/spell.conf @@ -0,0 +1,33 @@ +# +# weechat -- spell.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[color] +misspelled = lightred +suggestion = default +suggestion_delimiter_dict = cyan +suggestion_delimiter_word = cyan + +[check] +commands = "away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" +default_dict = "" +during_search = off +enabled = off +real_time = off +suggestions = -1 +word_min_length = 2 + +[dict] + +[look] +suggestion_delimiter_dict = " / " +suggestion_delimiter_word = "," + +[option] diff --git a/.weechat/tcl.conf b/.weechat/tcl.conf new file mode 100644 index 0000000..4c0e389 --- /dev/null +++ b/.weechat/tcl.conf @@ -0,0 +1,14 @@ +# +# weechat -- tcl.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/tox.conf b/.weechat/tox.conf new file mode 100644 index 0000000..440b06b --- /dev/null +++ b/.weechat/tox.conf @@ -0,0 +1,31 @@ +# +# weechat -- tox.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[profile] + +[profile_default] +autojoin = off +autojoin_delay = 5000 +autoload = off +downloading_path = "%h/tfer/%p/" +ipv6 = on +logging = off +max_friend_requests = 100 +passphrase +proxy_address +proxy_port +proxy_type = none +save_file = "%h/tox/%p" +udp = on + +[look] +friend_request_message = "Hi! Please add me on Tox!" +short_id_size = 8 diff --git a/.weechat/trigger.conf b/.weechat/trigger.conf new file mode 100644 index 0000000..2424666 --- /dev/null +++ b/.weechat/trigger.conf @@ -0,0 +1,67 @@ +# +# weechat -- trigger.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +enabled = on +monitor_strip_colors = off + +[color] +flag_command = lightgreen +flag_conditions = yellow +flag_post_action = lightblue +flag_regex = lightcyan +flag_return_code = lightmagenta +regex = white +replace = cyan +trigger = green +trigger_disabled = red + +[trigger] +beep.arguments = "" +beep.command = "/print -beep" +beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})" +beep.enabled = on +beep.hook = print +beep.post_action = none +beep.regex = "" +beep.return_code = ok +cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass.command = "" +cmd_pass.conditions = "" +cmd_pass.enabled = on +cmd_pass.hook = modifier +cmd_pass.post_action = none +cmd_pass.regex = "==^((/(msg|m|quote) +(-server +[^ ]+ +)?nickserv +(id|identify|set +password|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +cmd_pass.return_code = ok +cmd_pass_register.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass_register.command = "" +cmd_pass_register.conditions = "" +cmd_pass_register.enabled = on +cmd_pass_register.hook = modifier +cmd_pass_register.post_action = none +cmd_pass_register.regex = "==^(/(msg|m|quote) +nickserv +register +)([^ ]+)(.*)==${re:1}${hide:*,${re:3}}${re:4}" +cmd_pass_register.return_code = ok +msg_auth.arguments = "5000|irc_message_auth" +msg_auth.command = "" +msg_auth.conditions = "" +msg_auth.enabled = on +msg_auth.hook = modifier +msg_auth.post_action = none +msg_auth.regex = "==^(.*(id|identify|set +password|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +msg_auth.return_code = ok +server_pass.arguments = "5000|input_text_display;5000|history_add" +server_pass.command = "" +server_pass.conditions = "" +server_pass.enabled = on +server_pass.hook = modifier +server_pass.post_action = none +server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}" +server_pass.return_code = ok diff --git a/.weechat/urlgrab.conf b/.weechat/urlgrab.conf new file mode 100644 index 0000000..9649415 --- /dev/null +++ b/.weechat/urlgrab.conf @@ -0,0 +1,29 @@ +# +# weechat -- urlgrab.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[color] +color_bg_selected = green +color_buffer = red +color_buffer_selected = red +color_time = cyan +color_time_selected = cyan +color_url = blue +color_url_selected = blue + +[default] +copycmd = "xsel -i" +historysize = 10 +localcmd = "firefox '%s'" +method = "local" +output_main_buffer = on +remotecmd = "ssh -x localhost -i ~/.ssh/id_rsa -C "export DISPLAY=":0.0" && firefox '%s'"" +time_format = "%H:%M:%S" +url_log = "~/.weechat/urls.log" diff --git a/.weechat/weechat.conf b/.weechat/weechat.conf new file mode 100644 index 0000000..731e0a8 --- /dev/null +++ b/.weechat/weechat.conf @@ -0,0 +1,711 @@ +# +# weechat -- weechat.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[debug] + +[startup] +command_after_plugins = "" +command_before_plugins = "" +display_logo = on +display_version = on +sys_rlimit = "" + +[look] +align_end_of_lines = message +align_multiline_words = on +bar_more_down = "++" +bar_more_left = "<<" +bar_more_right = ">>" +bar_more_up = "--" +bare_display_exit_on_input = on +bare_display_time_format = "%H:%M" +buffer_auto_renumber = on +buffer_notify_default = all +buffer_position = end +buffer_search_case_sensitive = off +buffer_search_force_default = off +buffer_search_regex = off +buffer_search_where = prefix_message +buffer_time_format = "%H:%M:%S" +buffer_time_same = "" +color_basic_force_bold = off +color_inactive_buffer = on +color_inactive_message = on +color_inactive_prefix = on +color_inactive_prefix_buffer = on +color_inactive_time = off +color_inactive_window = on +color_nick_offline = off +color_pairs_auto_reset = 5 +color_real_white = off +command_chars = "" +command_incomplete = off +confirm_quit = off +confirm_upgrade = off +day_change = on +day_change_message_1date = "-- %a, %d %b %Y --" +day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" +eat_newline_glitch = off +emphasized_attributes = "" +highlight = "" +highlight_regex = "" +highlight_tags = "" +hotlist_add_conditions = "${away} || ${buffer.num_displayed} == 0 || ${info:relay_client_count,weechat,connected} > 0" +hotlist_buffer_separator = ", " +hotlist_count_max = 2 +hotlist_count_min_msg = 2 +hotlist_names_count = 3 +hotlist_names_length = 0 +hotlist_names_level = 12 +hotlist_names_merged_buffers = off +hotlist_prefix = "H: " +hotlist_remove = merged +hotlist_short_names = on +hotlist_sort = group_time_asc +hotlist_suffix = "" +hotlist_unique_numbers = on +input_cursor_scroll = 20 +input_share = none +input_share_overwrite = off +input_undo_max = 32 +item_away_message = on +item_buffer_filter = "*" +item_buffer_zoom = "!" +item_mouse_status = "M" +item_time_format = "%H:%M" +jump_current_to_previous_buffer = on +jump_previous_buffer_when_closing = on +jump_smart_back_to_buffer = on +key_bind_safe = on +key_grab_delay = 800 +mouse = off +mouse_timer_delay = 100 +nick_color_force = "" +nick_color_hash = djb2 +nick_color_stop_chars = "_|[" +nick_prefix = "" +nick_suffix = "" +paste_auto_add_newline = on +paste_bracketed = on +paste_bracketed_timer_delay = 10 +paste_max_lines = 1 +prefix_action = " *" +prefix_align = right +prefix_align_max = 0 +prefix_align_min = 0 +prefix_align_more = "+" +prefix_align_more_after = on +prefix_buffer_align = right +prefix_buffer_align_max = 0 +prefix_buffer_align_more = "+" +prefix_buffer_align_more_after = on +prefix_error = "=!=" +prefix_join = "-->" +prefix_network = "--" +prefix_quit = "<--" +prefix_same_nick = "" +prefix_same_nick_middle = "" +prefix_suffix = "|" +quote_nick_prefix = "<" +quote_nick_suffix = ">" +quote_time_format = "%H:%M:%S" +read_marker = line +read_marker_always_show = off +read_marker_string = "- " +save_config_on_exit = on +save_config_with_fsync = off +save_layout_on_exit = none +scroll_amount = 3 +scroll_bottom_after_switch = off +scroll_page_percent = 100 +search_text_not_found_alert = on +separator_horizontal = "-" +separator_vertical = "" +tab_width = 1 +time_format = "%a, %d %b %Y %T" +window_auto_zoom = off +window_separator_horizontal = on +window_separator_vertical = on +window_title = "" +word_chars_highlight = "!\u00A0,-,_,|,alnum" +word_chars_input = "!\u00A0,-,_,|,alnum" + +[palette] + +[color] +bar_more = lightmagenta +chat = default +chat_bg = default +chat_buffer = white +chat_channel = white +chat_day_change = cyan +chat_delimiters = green +chat_highlight = yellow +chat_highlight_bg = magenta +chat_host = cyan +chat_inactive_buffer = default +chat_inactive_window = default +chat_nick = lightcyan +chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue" +chat_nick_offline = default +chat_nick_offline_highlight = default +chat_nick_offline_highlight_bg = blue +chat_nick_other = cyan +chat_nick_prefix = green +chat_nick_self = white +chat_nick_suffix = green +chat_prefix_action = white +chat_prefix_buffer = brown +chat_prefix_buffer_inactive_buffer = default +chat_prefix_error = yellow +chat_prefix_join = lightgreen +chat_prefix_more = lightmagenta +chat_prefix_network = magenta +chat_prefix_quit = lightred +chat_prefix_suffix = green +chat_read_marker = magenta +chat_read_marker_bg = default +chat_server = brown +chat_tags = red +chat_text_found = yellow +chat_text_found_bg = lightmagenta +chat_time = default +chat_time_delimiters = brown +chat_value = cyan +chat_value_null = blue +emphasized = yellow +emphasized_bg = magenta +input_actions = lightgreen +input_text_not_found = red +item_away = yellow +nicklist_away = cyan +nicklist_group = green +separator = blue +status_count_highlight = magenta +status_count_msg = brown +status_count_other = default +status_count_private = green +status_data_highlight = lightmagenta +status_data_msg = yellow +status_data_other = default +status_data_private = lightgreen +status_filter = green +status_more = yellow +status_mouse = green +status_name = white +status_name_ssl = lightgreen +status_nicklist_count = default +status_number = yellow +status_time = default + +[completion] +base_word_until_cursor = on +command_inline = on +default_template = "%(nicks)|%(irc_channels)" +nick_add_space = on +nick_case_sensitive = off +nick_completer = ":" +nick_first_only = off +nick_ignore_chars = "[]`_-^" +partial_completion_alert = on +partial_completion_command = off +partial_completion_command_arg = off +partial_completion_count = on +partial_completion_other = off +partial_completion_templates = "config_options" + +[history] +display_default = 5 +max_buffer_lines_minutes = 0 +max_buffer_lines_number = 4096 +max_commands = 100 +max_visited_buffers = 50 + +[proxy] + +[network] +connection_timeout = 60 +gnutls_ca_file = "/etc/ssl/certs/ca-certificates.crt" +gnutls_handshake_timeout = 30 +proxy_curl = "" + +[plugin] +autoload = "*" +debug = off +extension = ".so,.dll" +path = "%h/plugins" +save_config_on_unload = on + +[bar] +buffers.color_bg = default +buffers.color_delim = default +buffers.color_fg = default +buffers.conditions = "" +buffers.filling_left_right = vertical +buffers.filling_top_bottom = columns_vertical +buffers.hidden = on +buffers.items = "buffers" +buffers.position = bottom +buffers.priority = 0 +buffers.separator = on +buffers.size = 0 +buffers.size_max = 0 +buffers.type = root +buflist.color_bg = default +buflist.color_delim = default +buflist.color_fg = default +buflist.conditions = "" +buflist.filling_left_right = vertical +buflist.filling_top_bottom = columns_vertical +buflist.hidden = off +buflist.items = "buflist" +buflist.position = left +buflist.priority = 0 +buflist.separator = on +buflist.size = 0 +buflist.size_max = 0 +buflist.type = root +fset.color_bg = default +fset.color_delim = cyan +fset.color_fg = default +fset.conditions = "${buffer.full_name} == fset.fset" +fset.filling_left_right = vertical +fset.filling_top_bottom = horizontal +fset.hidden = off +fset.items = "fset" +fset.position = top +fset.priority = 0 +fset.separator = on +fset.size = 3 +fset.size_max = 3 +fset.type = window +input.color_bg = default +input.color_delim = cyan +input.color_fg = default +input.conditions = "" +input.filling_left_right = vertical +input.filling_top_bottom = horizontal +input.hidden = off +input.items = "[mode_indicator]+[input_prompt]+(away),[input_search], [input_paste],input_text,[vi_buffer]" +input.position = bottom +input.priority = 1000 +input.separator = off +input.size = 1 +input.size_max = 0 +input.type = window +nicklist.color_bg = default +nicklist.color_delim = cyan +nicklist.color_fg = default +nicklist.conditions = "${nicklist}" +nicklist.filling_left_right = vertical +nicklist.filling_top_bottom = columns_vertical +nicklist.hidden = off +nicklist.items = "buffer_nicklist" +nicklist.position = right +nicklist.priority = 200 +nicklist.separator = on +nicklist.size = 0 +nicklist.size_max = 0 +nicklist.type = window +status.color_bg = blue +status.color_delim = cyan +status.color_fg = default +status.conditions = "" +status.filling_left_right = vertical +status.filling_top_bottom = horizontal +status.hidden = off +status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion,cmd_completion" +status.position = bottom +status.priority = 500 +status.separator = off +status.size = 1 +status.size_max = 0 +status.type = window +title.color_bg = blue +title.color_delim = cyan +title.color_fg = default +title.conditions = "" +title.filling_left_right = vertical +title.filling_top_bottom = horizontal +title.hidden = off +title.items = "buffer_title" +title.position = top +title.priority = 500 +title.separator = off +title.size = 1 +title.size_max = 0 +title.type = window +vi_line_numbers.color_bg = default +vi_line_numbers.color_delim = default +vi_line_numbers.color_fg = default +vi_line_numbers.conditions = "" +vi_line_numbers.filling_left_right = vertical +vi_line_numbers.filling_top_bottom = vertical +vi_line_numbers.hidden = off +vi_line_numbers.items = "line_numbers" +vi_line_numbers.position = left +vi_line_numbers.priority = 0 +vi_line_numbers.separator = off +vi_line_numbers.size = 0 +vi_line_numbers.size_max = 0 +vi_line_numbers.type = window + +[layout] + +[notify] +python.uh-car.slack.com.#astro-ph = all +python.uh-car.slack.com.#bayf_python_project = all +python.uh-car.slack.com.#codereview = all +python.uh-car.slack.com.#general = all +python.uh-car.slack.com.#journalclub = all +python.uh-car.slack.com.#lowmass = all +python.uh-car.slack.com.#random = all +python.uh-car.slack.com.#starformation = all +python.uh-car.slack.com.ChrisLovell,Vijay = all +python.uh-car.slack.com.JanForbrich = all +python.uh-car.slack.com.jansky = all +python.uh-car.slack.com.MaxL = all +python.uh-car.slack.com.Mubela = all +python.uh-car.slack.com.Slackbot = all +python.uh-car.slack.com.VitoGraffagnino = all + +[filter] + +[key] +ctrl-? = "/input delete_previous_char" +ctrl-A = "/input move_beginning_of_line" +ctrl-B = "/input move_previous_char" +ctrl-C_ = "/input insert \x1F" +ctrl-Cb = "/input insert \x02" +ctrl-Cc = "/input insert \x03" +ctrl-Ci = "/input insert \x1D" +ctrl-Co = "/input insert \x0F" +ctrl-Cv = "/input insert \x16" +ctrl-D = "/input delete_next_char" +ctrl-E = "/input move_end_of_line" +ctrl-F = "/input move_next_char" +ctrl-H = "/input delete_previous_char" +ctrl-I = "/input complete_next" +ctrl-J = "/input return" +ctrl-K = "/input delete_end_of_line" +ctrl-L = "/window refresh" +ctrl-M = "/input return" +ctrl-N = "/buffer +1" +ctrl-P = "/buffer -1" +ctrl-R = "/input search_text_here" +ctrl-Sctrl-U = "/input set_unread" +ctrl-T = "/input transpose_chars" +ctrl-U = "/input delete_beginning_of_line" +ctrl-W = "/input delete_previous_word" +ctrl-W= = "/window balance" +ctrl-Wh = "/window left" +ctrl-Wj = "/window down" +ctrl-Wk = "/window up" +ctrl-Wl = "/window right" +ctrl-Wq = "/window merge" +ctrl-Ws = "/window splith" +ctrl-Wv = "/window splitv" +ctrl-Wx = "/window swap" +ctrl-X = "/input switch_active_buffer" +ctrl-Y = "/input clipboard_paste" +meta-meta-OP = "/bar scroll buflist * b" +meta-meta-OQ = "/bar scroll buflist * e" +meta-meta2-11~ = "/bar scroll buflist * b" +meta-meta2-12~ = "/bar scroll buflist * e" +meta-meta2-1~ = "/window scroll_top" +meta-meta2-23~ = "/bar scroll nicklist * b" +meta-meta2-24~ = "/bar scroll nicklist * e" +meta-meta2-4~ = "/window scroll_bottom" +meta-meta2-5~ = "/window scroll_up" +meta-meta2-6~ = "/window scroll_down" +meta-meta2-7~ = "/window scroll_top" +meta-meta2-8~ = "/window scroll_bottom" +meta-meta2-A = "/buffer -1" +meta-meta2-B = "/buffer +1" +meta-meta2-C = "/buffer +1" +meta-meta2-D = "/buffer -1" +meta-- = "/filter toggle @" +meta-/ = "/input jump_last_buffer_displayed" +meta-0 = "/buffer *10" +meta-1 = "/buffer *1" +meta-2 = "/buffer *2" +meta-3 = "/buffer *3" +meta-4 = "/buffer *4" +meta-5 = "/buffer *5" +meta-6 = "/buffer *6" +meta-7 = "/buffer *7" +meta-8 = "/buffer *8" +meta-9 = "/buffer *9" +meta-< = "/input jump_previously_visited_buffer" +meta-= = "/filter toggle" +meta-> = "/input jump_next_visited_buffer" +meta-OA = "/input history_global_previous" +meta-OB = "/input history_global_next" +meta-OC = "/input move_next_word" +meta-OD = "/input move_previous_word" +meta-OF = "/input move_end_of_line" +meta-OH = "/input move_beginning_of_line" +meta-OP = "/bar scroll buflist * -100%" +meta-OQ = "/bar scroll buflist * +100%" +meta-Oa = "/input history_global_previous" +meta-Ob = "/input history_global_next" +meta-Oc = "/input move_next_word" +meta-Od = "/input move_previous_word" +meta2-11^ = "/bar scroll buflist * -100%" +meta2-11~ = "/bar scroll buflist * -100%" +meta2-12^ = "/bar scroll buflist * +100%" +meta2-12~ = "/bar scroll buflist * +100%" +meta2-15~ = "/buffer -1" +meta2-17~ = "/buffer +1" +meta2-18~ = "/window -1" +meta2-19~ = "/window +1" +meta2-1;3A = "/buffer -1" +meta2-1;3B = "/buffer +1" +meta2-1;3C = "/buffer +1" +meta2-1;3D = "/buffer -1" +meta2-1;3F = "/window scroll_bottom" +meta2-1;3H = "/window scroll_top" +meta2-1;3P = "/bar scroll buflist * b" +meta2-1;3Q = "/bar scroll buflist * e" +meta2-1;5A = "/input history_global_previous" +meta2-1;5B = "/input history_global_next" +meta2-1;5C = "/input move_next_word" +meta2-1;5D = "/input move_previous_word" +meta2-1;5P = "/bar scroll buflist * -100%" +meta2-1;5Q = "/bar scroll buflist * +100%" +meta2-1~ = "/input move_beginning_of_line" +meta2-200~ = "/input paste_start" +meta2-201~ = "/input paste_stop" +meta2-20~ = "/bar scroll title * -30%" +meta2-21~ = "/bar scroll title * +30%" +meta2-23;3~ = "/bar scroll nicklist * b" +meta2-23~ = "/bar scroll nicklist * -100%" +meta2-24;3~ = "/bar scroll nicklist * e" +meta2-24~ = "/bar scroll nicklist * +100%" +meta2-3~ = "/input delete_next_char" +meta2-4~ = "/input move_end_of_line" +meta2-5;3~ = "/window scroll_up" +meta2-5~ = "/window page_up" +meta2-6;3~ = "/window scroll_down" +meta2-6~ = "/window page_down" +meta2-7~ = "/input move_beginning_of_line" +meta2-8~ = "/input move_end_of_line" +meta2-A = "/input history_previous" +meta2-B = "/input history_next" +meta2-C = "/input move_next_char" +meta2-D = "/input move_previous_char" +meta2-F = "/input move_end_of_line" +meta2-G = "/window page_down" +meta2-H = "/input move_beginning_of_line" +meta2-I = "/window page_up" +meta2-Z = "/input complete_previous" +meta2-[E = "/buffer -1" +meta-_ = "/input redo" +meta-a = "/input jump_smart" +meta-b = "/input move_previous_word" +meta-d = "/input delete_next_word" +meta-f = "/input move_next_word" +meta-h = "/input hotlist_clear" +meta-j01 = "/buffer *1" +meta-j02 = "/buffer *2" +meta-j03 = "/buffer *3" +meta-j04 = "/buffer *4" +meta-j05 = "/buffer *5" +meta-j06 = "/buffer *6" +meta-j07 = "/buffer *7" +meta-j08 = "/buffer *8" +meta-j09 = "/buffer *9" +meta-j10 = "/buffer *10" +meta-j11 = "/buffer *11" +meta-j12 = "/buffer *12" +meta-j13 = "/buffer *13" +meta-j14 = "/buffer *14" +meta-j15 = "/buffer *15" +meta-j16 = "/buffer *16" +meta-j17 = "/buffer *17" +meta-j18 = "/buffer *18" +meta-j19 = "/buffer *19" +meta-j20 = "/buffer *20" +meta-j21 = "/buffer *21" +meta-j22 = "/buffer *22" +meta-j23 = "/buffer *23" +meta-j24 = "/buffer *24" +meta-j25 = "/buffer *25" +meta-j26 = "/buffer *26" +meta-j27 = "/buffer *27" +meta-j28 = "/buffer *28" +meta-j29 = "/buffer *29" +meta-j30 = "/buffer *30" +meta-j31 = "/buffer *31" +meta-j32 = "/buffer *32" +meta-j33 = "/buffer *33" +meta-j34 = "/buffer *34" +meta-j35 = "/buffer *35" +meta-j36 = "/buffer *36" +meta-j37 = "/buffer *37" +meta-j38 = "/buffer *38" +meta-j39 = "/buffer *39" +meta-j40 = "/buffer *40" +meta-j41 = "/buffer *41" +meta-j42 = "/buffer *42" +meta-j43 = "/buffer *43" +meta-j44 = "/buffer *44" +meta-j45 = "/buffer *45" +meta-j46 = "/buffer *46" +meta-j47 = "/buffer *47" +meta-j48 = "/buffer *48" +meta-j49 = "/buffer *49" +meta-j50 = "/buffer *50" +meta-j51 = "/buffer *51" +meta-j52 = "/buffer *52" +meta-j53 = "/buffer *53" +meta-j54 = "/buffer *54" +meta-j55 = "/buffer *55" +meta-j56 = "/buffer *56" +meta-j57 = "/buffer *57" +meta-j58 = "/buffer *58" +meta-j59 = "/buffer *59" +meta-j60 = "/buffer *60" +meta-j61 = "/buffer *61" +meta-j62 = "/buffer *62" +meta-j63 = "/buffer *63" +meta-j64 = "/buffer *64" +meta-j65 = "/buffer *65" +meta-j66 = "/buffer *66" +meta-j67 = "/buffer *67" +meta-j68 = "/buffer *68" +meta-j69 = "/buffer *69" +meta-j70 = "/buffer *70" +meta-j71 = "/buffer *71" +meta-j72 = "/buffer *72" +meta-j73 = "/buffer *73" +meta-j74 = "/buffer *74" +meta-j75 = "/buffer *75" +meta-j76 = "/buffer *76" +meta-j77 = "/buffer *77" +meta-j78 = "/buffer *78" +meta-j79 = "/buffer *79" +meta-j80 = "/buffer *80" +meta-j81 = "/buffer *81" +meta-j82 = "/buffer *82" +meta-j83 = "/buffer *83" +meta-j84 = "/buffer *84" +meta-j85 = "/buffer *85" +meta-j86 = "/buffer *86" +meta-j87 = "/buffer *87" +meta-j88 = "/buffer *88" +meta-j89 = "/buffer *89" +meta-j90 = "/buffer *90" +meta-j91 = "/buffer *91" +meta-j92 = "/buffer *92" +meta-j93 = "/buffer *93" +meta-j94 = "/buffer *94" +meta-j95 = "/buffer *95" +meta-j96 = "/buffer *96" +meta-j97 = "/buffer *97" +meta-j98 = "/buffer *98" +meta-j99 = "/buffer *99" +meta-k = "/input grab_key_command" +meta-l = "/window bare" +meta-m = "/mute mouse toggle" +meta-n = "/window scroll_next_highlight" +meta-p = "/window scroll_previous_highlight" +meta-r = "/input delete_line" +meta-s = "/mute aspell toggle" +meta-u = "/window scroll_unread" +meta-x = "/input zoom_merged_buffer" +meta-z = "/window zoom" +ctrl-^ = "/input jump_last_buffer_displayed" +ctrl-_ = "/input undo" + +[key_search] +ctrl-I = "/input search_switch_where" +ctrl-J = "/input search_stop_here" +ctrl-M = "/input search_stop_here" +ctrl-Q = "/input search_stop" +ctrl-R = "/input search_switch_regex" +meta2-A = "/input search_previous" +meta2-B = "/input search_next" +meta-c = "/input search_switch_case" + +[key_cursor] +ctrl-J = "/cursor stop" +ctrl-M = "/cursor stop" +meta-meta2-A = "/cursor move area_up" +meta-meta2-B = "/cursor move area_down" +meta-meta2-C = "/cursor move area_right" +meta-meta2-D = "/cursor move area_left" +meta2-1;3A = "/cursor move area_up" +meta2-1;3B = "/cursor move area_down" +meta2-1;3C = "/cursor move area_right" +meta2-1;3D = "/cursor move area_left" +meta2-A = "/cursor move up" +meta2-B = "/cursor move down" +meta2-C = "/cursor move right" +meta2-D = "/cursor move left" +@chat(python.*):D = "hsignal:slack_cursor_delete" +@chat(python.*):L = "hsignal:slack_cursor_linkarchive" +@chat(python.*):M = "hsignal:slack_cursor_message" +@chat(python.*):R = "hsignal:slack_cursor_reply" +@chat(python.*):T = "hsignal:slack_cursor_thread" +@item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}" +@item(buffer_nicklist):k = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):q = "/window ${_window_number};/query ${nick};/cursor stop" +@item(buffer_nicklist):w = "/window ${_window_number};/whois ${nick}" +@chat:Q = "hsignal:chat_quote_time_prefix_message;/cursor stop" +@chat:m = "hsignal:chat_quote_message;/cursor stop" +@chat:q = "hsignal:chat_quote_prefix_message;/cursor stop" + +[key_mouse] +@bar(buffers):ctrl-wheeldown = "hsignal:buffers_mouse" +@bar(buffers):ctrl-wheelup = "hsignal:buffers_mouse" +@bar(buflist):ctrl-wheeldown = "hsignal:buflist_mouse" +@bar(buflist):ctrl-wheelup = "hsignal:buflist_mouse" +@bar(input):button2 = "/input grab_mouse_area" +@bar(nicklist):button1-gesture-down = "/bar scroll nicklist ${_window_number} +100%" +@bar(nicklist):button1-gesture-down-long = "/bar scroll nicklist ${_window_number} e" +@bar(nicklist):button1-gesture-up = "/bar scroll nicklist ${_window_number} -100%" +@bar(nicklist):button1-gesture-up-long = "/bar scroll nicklist ${_window_number} b" +@chat(fset.fset):button1 = "/window ${_window_number};/fset -go ${_chat_line_y}" +@chat(fset.fset):button2* = "hsignal:fset_mouse" +@chat(fset.fset):wheeldown = "/fset -down 5" +@chat(fset.fset):wheelup = "/fset -up 5" +@chat(python.*):button2 = "hsignal:slack_mouse" +@chat(script.scripts):button1 = "/window ${_window_number};/script go ${_chat_line_y}" +@chat(script.scripts):button2 = "/window ${_window_number};/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}" +@chat(script.scripts):wheeldown = "/script down 5" +@chat(script.scripts):wheelup = "/script up 5" +@item(buffer_nicklist):button1 = "/window ${_window_number};/query ${nick}" +@item(buffer_nicklist):button1-gesture-left = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}" +@item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}" +@item(buffers):button1* = "hsignal:buffers_mouse" +@item(buffers):button2* = "hsignal:buffers_mouse" +@item(buflist):button1* = "hsignal:buflist_mouse" +@item(buflist):button2* = "hsignal:buflist_mouse" +@item(buflist2):button1* = "hsignal:buflist_mouse" +@item(buflist2):button2* = "hsignal:buflist_mouse" +@item(buflist3):button1* = "hsignal:buflist_mouse" +@item(buflist3):button2* = "hsignal:buflist_mouse" +@bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%" +@bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%" +@chat:button1 = "/window ${_window_number}" +@chat:button1-gesture-left = "/window ${_window_number};/buffer -1" +@chat:button1-gesture-left-long = "/window ${_window_number};/buffer 1" +@chat:button1-gesture-right = "/window ${_window_number};/buffer +1" +@chat:button1-gesture-right-long = "/window ${_window_number};/input jump_last_buffer" +@chat:ctrl-wheeldown = "/window scroll_horiz -window ${_window_number} +10%" +@chat:ctrl-wheelup = "/window scroll_horiz -window ${_window_number} -10%" +@chat:wheeldown = "/window scroll_down -window ${_window_number}" +@chat:wheelup = "/window scroll_up -window ${_window_number}" +@*:button3 = "/cursor go ${_x},${_y}" diff --git a/.weechat/weecord.conf b/.weechat/weecord.conf new file mode 100644 index 0000000..d41f7f2 --- /dev/null +++ b/.weechat/weecord.conf @@ -0,0 +1,23 @@ +# +# weechat -- weecord.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[main] +autojoin_channels = "" +autostart = off +irc_mode = off +message_load_count = 25 +send_typing_events = off +token = "" +typing_messages = off +use_presence = off +user_typing_list_expanded = off +user_typing_list_max = 3 +watched_channels = "" diff --git a/.weechat/xfer.conf b/.weechat/xfer.conf new file mode 100644 index 0000000..d1dea52 --- /dev/null +++ b/.weechat/xfer.conf @@ -0,0 +1,48 @@ +# +# weechat -- xfer.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_open_buffer = on +progress_bar_size = 20 +pv_tags = "notify_private" + +[color] +status_aborted = lightred +status_active = lightblue +status_connecting = yellow +status_done = lightgreen +status_failed = lightred +status_waiting = lightcyan +text = default +text_bg = default +text_selected = white + +[network] +blocksize = 65536 +fast_send = on +own_ip = "" +port_range = "" +send_ack = on +speed_limit_recv = 0 +speed_limit_send = 0 +timeout = 300 + +[file] +auto_accept_chats = off +auto_accept_files = off +auto_accept_nicks = "" +auto_check_crc32 = off +auto_rename = on +auto_resume = on +convert_spaces = on +download_path = "%h/xfer" +upload_path = "~" +use_nick_in_filename = on diff --git a/vimwiki/3D-RPG.md b/vimwiki/3D-RPG.md new file mode 100644 index 0000000..36a7a8e --- /dev/null +++ b/vimwiki/3D-RPG.md @@ -0,0 +1,11 @@ +## 3D / RPG ## + + |---------------|--------------------------------------------| + | App Name | ipk | + |---------------|--------------------------------------------| + | No Gravity | com.realtechvr.app.nogravity_1.4.4_all.ipk | + | Assassinsa | com.gameloft.app.assassins_1.0.6_all.ipk | + | N.O.V.A. | com.gameloft.app.nova_1.0.9_all.ipk | + | Skater Nation | com.gameloft.app.skater_1.0.7_all.ipk | + |---------------|--------------------------------------------| + diff --git a/vimwiki/API.md b/vimwiki/API.md new file mode 100644 index 0000000..e5938d7 --- /dev/null +++ b/vimwiki/API.md @@ -0,0 +1,2 @@ + +##YTS## diff --git a/vimwiki/Ansys.md b/vimwiki/Ansys.md new file mode 100644 index 0000000..89f50ed --- /dev/null +++ b/vimwiki/Ansys.md @@ -0,0 +1,22 @@ +ANSYS needs frequent licence updates. To do this: + + Copy the licence file to */soft/ansys_inc/shared_files/licenses/* + + Ssh –X to headnode2 and become root + + Run `/soft/ansys_inc/shared_files/licensing/lic_admin/anslic_admin` + + Select `‘Launch the ANSYS licence manager’` + + In the web browser window select `‘Add a licence file’` + + Select the file you copied + + Select `‘reread’`. + + Check that the licence manager is still running (green tick). + + + + + diff --git a/vimwiki/Applications.md b/vimwiki/Applications.md new file mode 100644 index 0000000..df93ab4 --- /dev/null +++ b/vimwiki/Applications.md @@ -0,0 +1,61 @@ +## Applications ## + + |--------------------------|-----------------------------------------------|---| + | App Name | ipk | | + |--------------------------|-----------------------------------------------|---| + | Phone | - | | + | Web | - | | + | Email | - | | + | Messaging | - | | + | Camera | - | | + | Tasks | - | | + | Calendar | - | | + | Photos | - | | + | Memos | - | | + | Videos | - | | + | Music (Remix) | com.hedami.musicplayerremix_2.5.11_all.ipk | | + | Evernote | com.evernote.palm.app.evernote_1.4.15_all.ipk | | + | Tapnote | com.onecrayon.tapnote_1.7.0_all.ipk | | + | FeedSpider | com.othelloventures.feedspider2_2.0.2_all.ipk | | + | GuttenPodder | | | + | Voice Memos | | | + | Voice Dial | | | + | AccuWeather | | | + | FlashCards | | | + | Picsel Smart Office | | | + | Notes | | | + | Clock | | | + | Timepiece | | | + | Reciva | | | + | TuneIn by RadioTime | | | + | Google Maps | | | + | Clipboard | | | + | AuctionMate Pro for eBay | | | + | foursquare | | | + | London Tube Service Free | | | + | Amazon book search | | | + | My3 | | | + | YouTube | | | + | Bluetooth Presenter | | | + | Quick Compass | | | + | E Notes (free) | | | + | Front camera | | | + | pReader | | | + | AgendaZ | | | + | Navit | | | + | London Tube Status | | | + | SchedMyPhone | | | + | pivotCE | | | + | Movie DB | | | + | LuneTube | | | + | Forums | | | + | ReadOnTouch Pro | | | + | Shopping Manager | | | + | Voice Recorder | | | + | Love Voucher | | | + | Navit Maps | | | + | Zap Photoshare | | | + |--------------------------|-----------------------------------------------|---| + + + diff --git a/vimwiki/Apt.md b/vimwiki/Apt.md new file mode 100644 index 0000000..4992fcd --- /dev/null +++ b/vimwiki/Apt.md @@ -0,0 +1,5 @@ + + +[Troubleshooting - Apt](Troubleshooting - Apt) + + diff --git a/vimwiki/Backup.md b/vimwiki/Backup.md new file mode 100644 index 0000000..a1e74af --- /dev/null +++ b/vimwiki/Backup.md @@ -0,0 +1,6 @@ +An rsync snapshot of */home* is taken nightly to */beegfs/backup/home*, +readable only to root. If someone deletes vital files from */home*, +we can recover them, but only before the end of the day. + +__Please respond quickly to any requests of this sort!__ + diff --git a/vimwiki/Basic operations.md b/vimwiki/Basic operations.md new file mode 100644 index 0000000..1a99ad7 --- /dev/null +++ b/vimwiki/Basic operations.md @@ -0,0 +1,57 @@ +_BASIC OPERATIONS_ + + +# Action Arch Debian/Ubuntu + +1. Install a package(s) by name `pacman -S` `apt install` + +2. Remove a package(s) by name `pacman -Rs` `apt remove` + +3. Search for package(s) `pacman -Ss` `apt search` + +4. Upgrade Packages `pacman -Syu` `apt update && apt upgrade` +- Install packages which have an older version +- already installed + +5. Upgrade Packages `pacman -Syu` `apt update && apt dist-upgrade` +- Another form of the update command, which can +- perform more complex updates -- like +- distribution upgrades. When the usual update +- command will omit package updates, which +- include changes in dependencies, this command +- can perform those updates. + +6. Clean up all local caches. `pacman -Sc` `apt autoclean` +- Options might limit what is actually cleaned. `pacman -Scc` `apt clean` +- Autoclean removes only unneeded, obsolete +- information. + +7. Remove dependencies that are no longer needed, `pacman -Qdtq | pacman -Rs -` `apt autoremove` +- because e.g. the package which needed the +- dependencies was removed. + +8. Remove packages no longer included in any `pacman -Qmq | pacman -Rs -` `aptitude purge '~o'` +- repositories. + +9. Mark a package previously installed as a `pacman -D --asexplicit` `apt-mark manual` +- dependency as explicitly required. + +10. Install package(s) as dependency / without `pacman -S --asdeps` `apt-mark auto` +- marking as explicitly required. + +11. Only downloads the given package(s) +- without unpacking or installing them `pacman -Sw` `apt install --download-only` (into package cache) + `apt download` (bypass the package cache) +12. Start a shell to enter multiple commands in `apt-config shell` +- one session + +13. Show a log of actions taken by the software `cat /var/log/pacman.log` `cat /var/log/dpkg.log` +- management. + +14. Get a dump of the whole system information `(see /var/lib/pacman/local)` `apt-cache stats` +- Prints, Saves or similar the current state +- of the package management system. +- Preferred output is text or XML. + +15. e-mail delivery of package changes. `apt install apt-listchanges` + diff --git a/vimwiki/Blocked IP Addresses.md b/vimwiki/Blocked IP Addresses.md new file mode 100644 index 0000000..6705f49 --- /dev/null +++ b/vimwiki/Blocked IP Addresses.md @@ -0,0 +1,19 @@ +An application called `fail2ban` blocks IP addresses with repeated failed login attempts. +If a user is locked out of ssh connections, this is usually why. + +If you suspect this has happened to someone, you need to know which cluster address they are trying to +log in to and ideally what IP address they are coming in from. Each machine that runs an ssh server +has its own fail2ban list. + +As root on the machine that the user is trying to log in to, do + +`fail2ban-client set sshd unbanip IPADDRESS` + +Note that normal users log in to both headnode1 and headnode2, so the problem may show up on one or +both of these machines. It can’t hurt to unban an IP that is not banned, so you can just do e.g. + +`sudo pdsh –w ‘headnode[1-2]’ fail2ban-client set sshd unbanip IPADDRESS` + +which will unban the IP on both head nodes2. If you have a problem working out the IP that’s banned, +try looking at `/var/log/secure.log` on the login machine. + diff --git a/vimwiki/Blocked IP addess.md b/vimwiki/Blocked IP addess.md new file mode 100644 index 0000000..5d752e8 --- /dev/null +++ b/vimwiki/Blocked IP addess.md @@ -0,0 +1,25 @@ +Unlike the cluster which uses fail2ban to block ip addresses, if a user is prevented from connecting to star server +the process is a little different. + +`star-server` uses the `denyhosts` service which adds the ip address to the file: `/etc/hosts.deny` + +However simply removing the ip address from this file is not sufficient. Firstly the denyhosts service has to be stopped by the following command: + +`$ systemctl stop denyhosts.sevice` + +Then the ip address has to be removed from the following files: + +`/etc/hosts.deny` +`/var/lib/denyhosts/hosts` +`/var/lib/denyhosts/hosts-restricted` +`/var/lib/denyhosts/hosts-root` +`/var/lib/denyhosts/hosts-valid` +`/var/lib/denyhosts/users-hosts` + +The denyhosts service can then be restarted with: + +`$ systemctl start denyhosts.sevice` + + + + diff --git a/vimwiki/Bluetooth.md b/vimwiki/Bluetooth.md new file mode 100644 index 0000000..1bef6a4 --- /dev/null +++ b/vimwiki/Bluetooth.md @@ -0,0 +1,46 @@ +# Bluetooth # + +if the following fails to connect/pair successfully, then issue the following command: + +`sudo rfkill unblock bluetooth` + +So to start we issue the following commands to make sure that bluetooth is running and enabled. + +`sudo systemctl restart bluetooth` + + `sudo systemctl enable bluetooth ` (this is only if you wish bluetooth to start at boot-up) + +we can then check that this is so with: + +`systemctl status -l bluetooth` + +You can then enter the bluetooth shell with: + +`bluetoothctl` + +Turn the power on and find out the device MAC address: + +`power on` + +`devices` + +if not paired you can enter `pair MAC_ADDRESS`. if already pair you can enter `trust MAC_ADDRESS` + +then enter `connect MAC_ADDRESS` + + +you can now exit and use pavucontrol or the scripts pa-global or pa-solo to redirect sound to the headset. + +Ref: Archlinux Wiki [bluetooth](https://wiki.archlinux.org/index.php/bluetooth) + + +To prevent audio autoskipping with the A2DP profile try the following: + +`echo "options iwlwifi bt_coex_active=0" | sudo tee -a /etc/modprobe.d/iwlwifi.conf` + +This disables the bluetooth coexistance parameter of the iwlwifi module (sometimes wifi intereferes with the bluetooth) +In this setups case the file may actually be 50-iwl3945.conf so modify the above as follows. + +`echo "options iwl3945 bt_coex_active=0" | sudo tee -a /etc/modprobe.d/50-iwl3945.conf` + + diff --git a/vimwiki/Board Games.md b/vimwiki/Board Games.md new file mode 100644 index 0000000..faf3e4f --- /dev/null +++ b/vimwiki/Board Games.md @@ -0,0 +1,9 @@ +## Board Games ## + + |----------|---------------------------------------| + | App Name | ipk | + |----------|---------------------------------------| + | Reversi | com.boatrights.reversi_1.0.23_all.ipk | + |----------|---------------------------------------| + + diff --git a/vimwiki/Browsers.md b/vimwiki/Browsers.md new file mode 100644 index 0000000..863a92c --- /dev/null +++ b/vimwiki/Browsers.md @@ -0,0 +1,4 @@ +[Firefox](Firefox) + +qutebrowser + diff --git a/vimwiki/Cards.md b/vimwiki/Cards.md new file mode 100644 index 0000000..b0950be --- /dev/null +++ b/vimwiki/Cards.md @@ -0,0 +1,18 @@ +## Cards / Puzzles ## + + |---------------------|--------------------------------------------| + | App Name | ipk | + |---------------------|--------------------------------------------| + | TileStorm | com.jakyl.tilestorm_1.0.1_all.ipk | + | Woodenigma | com.jasotec.app.woodenigma_1.1.5_all.ipk | + | Mazer | com.chofter.mazer_1.3.5_all.ipk | + | Wobble Words | com.grrok.wobblewords_2.0.2_all.ipk | + | Crosswords | com.standalone.crosswords_2.0.3_all.ipk | + | Yatze for WebOS | com.magicapps.yatzeeforwebos_2.8.5_all.ipk | + | 2048 | com.dta3team.2048_1.0.1_all.ipk | + | Lines Classic | com.ximad.linesclassic_1.0.0_all.ipk | + | Orbland Demo | com.naggel.orbland_1.0.1_all.ipk | + | Wild 'n Video Poker | com.fxspec.wildnpoker_1.5.0_all.ipk | + |---------------------|--------------------------------------------| + + diff --git a/vimwiki/Catholic.md b/vimwiki/Catholic.md new file mode 100644 index 0000000..75432bc --- /dev/null +++ b/vimwiki/Catholic.md @@ -0,0 +1,12 @@ +## Catholic ## + + |---------------------------|---------------------------------------------| + | App Name | ipk | + |---------------------------|---------------------------------------------| + | BibleZ Pro | de.zefanjas.biblezpro_1.1.4_all.ipk | + | Daily Audio Mass Readings | com.beep2bleep.dailyaudiomass_1.0.1_all.ipk | + | Christian Calender | cc.christ_1.0.1_all.ipk | + | Good Jew | com.firebrandforges.goodjew_1.5.4_all.ipk | + | Zman2Go | com.rocketouch.zman2go_0.6.5_all.ipk | + |---------------------------|---------------------------------------------| + diff --git a/vimwiki/Changing a User's shell.md b/vimwiki/Changing a User's shell.md new file mode 100644 index 0000000..f6fc23c --- /dev/null +++ b/vimwiki/Changing a User's shell.md @@ -0,0 +1,3 @@ +Many users prefer to use bash rather than tcsh, which is the default. +To change the shell to bash, run `sudo /root/ldifs/switch_to_bash.py username` + diff --git a/vimwiki/Characterising Exoplanets: Theory and Data Driven perspectives.md b/vimwiki/Characterising Exoplanets: Theory and Data Driven perspectives.md new file mode 100644 index 0000000..6fb03c5 --- /dev/null +++ b/vimwiki/Characterising Exoplanets: Theory and Data Driven perspectives.md @@ -0,0 +1,43 @@ + +###Characterising Exoplanets: Theory and Data Driven perspectives### + +1. Intro + +Science Drivers - Planetary System formation and Life + +Habitability - theory driven "habitable zone" - must understand composition/geology/atmoph. heat transport & dynamics/ hist & evol of atmos. + +[Kepler Orrery:](https://www.youtube.com/watch?v=et7QmD32tjs) + +__Jason Wang animation of exoplanets__ + + +####Should be skeptical of data-poor theory driven expectations#### + +Exoplanet obs. are approachind data volume/quality of pre-space solar system obsns. + +### Interface % theory & observn #### + +Depends on question - parameter estimaion +-model selection + +also whos asking question: Planetry Scietist / stellar astronomers + +obsn(masses/raddii/orbits)->theory(bulk comp/dynam hist)->'obs'/ther(planet formation models) + +Observations: + +transiting planets (spectr-> radius & atmos) +eclipse spec (atmos) + +High Res Spec -> atmos + +Radial vel -> mass & dynamics + +Direct imaged -> astrometric orbits-> mass & dynam +specetroo + + + + + diff --git a/vimwiki/Check User Login.md b/vimwiki/Check User Login.md new file mode 100644 index 0000000..30b8a68 --- /dev/null +++ b/vimwiki/Check User Login.md @@ -0,0 +1,138 @@ + +# How to check last login time for user # + +There are a number of ways to check last logged in users with time details. + +1. `last` This command searches back through the file `/var/log/wtmp (or the file designated by the -f flag)` + and displays a list of all users logged in/out since the file was created. + + *Example*__To view last login of all users:__ + + `$ last` + `bob pts/7 server1.example Mon May 5 14:36 still logged in` + `bob pts/5 server1.example Mon May 5 14:34 still logged in` + `root pts/5 main.test Sun Apr 27 04:18 - 04:20 (00:02)` + `john pts/11 server1.example Sat Apr 26 06:25 - 17:16 (10:51)` + `john pts/10 server1.example Sat Apr 26 06:20 - 17:16 (10:56)` + +2. + *Example*__To view last login of specific user:__ + + `$ last bob` + `bob pts/7 server1.example Mon May 5 14:36 still logged in` + `bob pts/5 server1.example Mon May 5 14:34 still logged in` + +3. + *Example*__To view ip address details of the source machine:__ + + `$ last bob -i` + `bob pts/7 192.168.0.100 Mon May 5 14:36 still logged in` + `bob pts/5 192.168.0.100 Mon May 5 14:34 still logged in` + +3. `lastlog` This formats and prints the contents of the last login log `/var/log/lastlog` file. + + *Example*__To view last login time of user bob:__ + + `$ lastlog -u bob` + `Username Port From Latest` + `dave pts/7 server1.example Mon May 5 14:36:52 -0400 2014` + +# Track successful/failed login attempts # + +1. Login attempts are stored in `/var/log/secure` and this file can be checked. + +`# less /var/log/secure | grep bob` + +`May 18 14:56:17 lab1 unix_chkpwd[17490]: password check failed for user (bob)` +`May 18 14:56:17 lab1 sshd[17489]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=server1.example.com user=bob` +`May 18 14:56:18 lab1 sshd[17481]: Accepted keyboard-interactive/pam for bob from 192.168.0.25 port 60735 ssh2` +`May 18 14:56:18 lab1 sshd[17481]: pam_unix(sshd:session): session opened for user bob by (uid=0)` +`May 18 16:50:04 lab1 unix_chkpwd[19626]: password check failed for user (bob)` +`May 18 16:50:04 lab1 sudo: pam_unix(sudo:auth): authentication failure; logname=bob uid=0 euid=0 tty=/dev/pts/12 ruser= rhost= user=bob` +`May 18 16:50:04 lab1 sudo: bob : TTY=pts/12 ; PWD=/home/bob ; USER=root ; COMMAND=/bin/su -` +`May 18 16:50:04 lab1 su: pam_unix(su-l:session): session opened for user root by bob(uid=0)` + +2. Collect authentication reports for all recent attempts made on the system. + + *Example*__Reports for all attempts:__ + +`# aureport -au -i` + +`Authentication Report` +`============================================` +`# date time acct host term exe success event` +`============================================` +`1. 05/16/14 10:12:54 bob ? /dev/pts/116 /usr/bin/sudo yes 6946469` +`2. 05/16/14 12:09:19 jeff ? /dev/pts/117 /usr/bin/sudo yes 6947443` +`3. 05/16/14 12:16:11 jeff ? /dev/pts/102 /usr/bin/sudo yes 6947512` +`4. 05/16/14 13:00:10 bob ? /dev/pts/116 /usr/bin/sudo yes 6947866` + + *Example*__Reports for successful attempts:__ + +`# aureport -au -i --success` + +`Authentication Report` +`============================================` +`# date time acct host term exe success event` +`============================================` +`1. 05/16/14 10:12:54 bob ? /dev/pts/116 /usr/bin/sudo yes 6946469` +`2. 05/16/14 12:09:19 jeff ? /dev/pts/117 /usr/bin/sudo yes 6947443` +`3. 05/16/14 12:16:11 jeff ? /dev/pts/102 /usr/bin/sudo yes 6947512` +`4. 05/16/14 13:00:10 bob ? /dev/pts/116 /usr/bin/sudo yes 6947866` + + *Example*__Reports for failed attempts:__ + +`# aureport -au -i --failed` + +`Authentication Report` +`============================================` +`# date time acct host term exe success event` +`============================================` +`1. 05/16/14 15:42:11 dave ? /dev/pts/124 /usr/bin/sudo no 6949322` +`2. 05/17/14 12:02:53 andy 10.10.10.26 ssh /usr/sbin/sshd no 6959885` +`3. 05/18/14 01:21:06 abhay ? /dev/pts/12 /usr/bin/sudo no 6967954` + + *Example*__Login Failures:__ + +`# aureport -l --failed` + +`Login Report` +`============================================` +`# date time auid host term exe success event` +`============================================` +`1. 05/16/14 21:50:22 pete 10.191.29.164 sshd /usr/sbin/sshd no 6952386` +`2. 05/17/14 12:02:09 andy 10.10.10.26 sshd /usr/sbin/sshd no 6959875` +`3. 05/17/14 12:02:48 andy 10.10.10.26 sshd /usr/sbin/sshd no 6959884` + + *Example*__Successful Logins:__ + +`# aureport -l --success` + +`Login Report` +`============================================` +`# date time auid host term exe success event` +`============================================` +`1. 05/16/14 21:50:22 42771 10.191.29.164 sshd /usr/sbin/sshd yes 6952386` +`2. 05/17/14 12:02:09 34566 10.10.10.26 sshd /usr/sbin/sshd yes 6959875` +`3. 05/17/14 12:02:48 34566 10.10.10.26 sshd /usr/sbin/sshd yes 6959884` + + *Example*__Login Summary Report:__ + +`# aureport -l --success --summary -i` + +`Success Login Summary Report` +`============================================` +`total auid` +`============================================` +`4 alison` +`4 alex` +`3 andy` +`2 suzanne` +`1 paul` +`1 dave` +`1 pete` +`1 rashmi` + +##Refs:## +1. https://www.golinuxhub.com/2014/05/how-to-check-last-login-time-for-users.html +2. https://www.golinuxhub.com/2014/05/how-to-track-all-successful-and-failed.html diff --git a/vimwiki/Cluster SysAdmin Notes.md b/vimwiki/Cluster SysAdmin Notes.md new file mode 100644 index 0000000..1a40361 --- /dev/null +++ b/vimwiki/Cluster SysAdmin Notes.md @@ -0,0 +1,29 @@ +__Cluster sysadmin notes__ + +These notes are intended to be a living document which records common sysadmin activities on the cluster. At some point we may add some structure rather than just a big brain dump... + +[Login For Administration](Login For Administration) + +[User Creation ](User Creation ) + +[Password Changing](Password Changing) + +[User Deletion](User Deletion) + +[Changing a User's shell](Changing a User's shell) + +[Jobs](Jobs) + +[Blocked IP Addresses](Blocked IP Addresses) + +[Quota Problems](Quota Problems) + +[Backup](Backup) + +[Nodes](Nodes) + +[Servers](Servers) + +[Ansys](Ansys) + + diff --git a/vimwiki/Email Settings.md b/vimwiki/Email Settings.md new file mode 100644 index 0000000..b4dda3a --- /dev/null +++ b/vimwiki/Email Settings.md @@ -0,0 +1,34 @@ + +##Sending via SMTP## + +To send emails using Office365 server enter these details:__ + + __SMTP Host:__ smtp.office365.com + __SMTP Port:__ 587 + __SSL Protocol:__ OFF + __TLS Protocol:__ ON + __SMTP Username:__ (UH username) + __SMTP Password:__ (UH password) + + +##POP3 Fetching## + +To receive emails from Office365 using POP3 + + __POP3 Host:__ outlook.office365.com + __POP3 Port:__ 995 + __TLS Protocol:__ ON + __POP3 Username:__ (UH username) + __POP3 Password:__ (UH password) + + +##IMAP Fetching## + +To receive emails from Office365 using IMAP + + __IMAP Host:__ outlook.office365.com + __IMAP Port:__ 993 + __Encryption:__ SSL + __IMAP Username:__ (UH username) + __IMAP Password:__ (UH password) + diff --git a/vimwiki/Examples.md b/vimwiki/Examples.md new file mode 100644 index 0000000..fa3b5a2 --- /dev/null +++ b/vimwiki/Examples.md @@ -0,0 +1,282 @@ + +##1. Copy SSH public key on a remote machine for passwordless login:## + + `ssh-copy-id user@host` + + To generate the keys use the command ssh-keygen + + +##2. Start a tunnel from some machine’s port 80 to your local post 2001:## + + `ssh -N -L2001:localhost:80 somemachine` + + Now you can acces the website by going to http://localhost:2001/ + +##3. Output your microphone to a remote computer’s speaker## + + `dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp` + This will output the sound from your microphone port to the ssh target computer’s + speaker port. The sound quality is very bad, so you will hear a lot of hissing. + +##4. Compare a remote file with a local file## + + `ssh user@host cat /path/to/remotefile | diff /path/to/localfile –` + + Useful for checking if there are differences between local and remote files. + +##5. Mount folder/filesystem through SSH## + + `sshfs name@server:/path/to/folder /path/to/mount/point` + + Install SSHFS from http://fuse.sourceforge.net/sshfs.html + Will allow you to mount a folder security over a network. + +##6. SSH connection through host in the middle## + + `ssh -t reachable_host ssh unreachable_host` + + Unreachable_host is unavailable from local network, but it’s available + from reachable_host’s network. This command creates a connection to + unreachable_host through “hidden” connection to reachable_host. Of + course you need to be able to access reachable_host for this. + +##7. Copy from host1 to host2, through your host## + + `ssh root@host1 “cd /somedir/tocopy/ && tar -cf – .” | ssh root@host2 “cd /samedir/tocopyto/ && tar -xf -“` + + Good if only you have access to host1 and host2, but they have no + access to your host (so ncat won’t work) and they have no direct + access to each other. + +##8. Run any GUI program remotely## + + `ssh -fX <user>@<host> <program>` + + The SSH server configuration requires: + + `X11Forwarding yes # this is default in Debian` + + And it’s convenient too: + + `Compression delayed` + +##9. Attach screen over ssh## + + `ssh -t remote_host screen -r` + + Directly attach a remote screen session (saves a useless parent bash process) + +##10. Create a persistent connection to a machine## + + `ssh -MNf <user>@<host>` + + Create a persistent SSH connection to the host in the background. Combine + this with settings in your ~/.ssh/config: + + `Host host` + `ControlPath ~/.ssh/master-%r@%h:%p` + `ControlMaster no` + + All the SSH connections to the machine will then go through the persisten SSH + socket. This is very useful if you are using SSH to synchronize files (using + rsync/sftp/cvs/svn) on a regular basis because it won’t create a new socket + each time to open an ssh connection. + +##11. Port Knocking!## + + `knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000` + + Knock on ports to open a port to a service (ssh for example) and knock again to close + the port. You have to install knockd. + + See example config file below. + + `[options]` + `logfile = /var/log/knockd.log` + `[openSSH]` + `sequence = 3000,4000,5000` + `seq_timeout = 5` + `command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT` + `tcpflags = syn` + `[closeSSH]` + `sequence = 5000,4000,3000` + `seq_timeout = 5` + `command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT` + `tcpflags = syn` + +##12. Remove a line in a text file. Useful to fix “ssh host key change” warnings## + + `ssh-keygen -R <the_offending_host>` + + In this case it’s better do to use the dedicated tool + +##13. Remove a line in a text file. Useful to fix “ssh host key change” warnings## + + `sed -i 8d ~/.ssh/known_hosts` + +##14. Run complex remote shell cmds over ssh, without escaping quotes## + + `ssh host -l user $(<cmd.txt)` + + Much simpler method. More portable version: ssh host -l user “`cat cmd.txt`” + +##15. Copy a MySQL Database to a new Server via SSH with one command## + + `mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME”` + + Dumps a MySQL database over a compressed SSH tunnel aand uses it as input to mysql + – i think that is the fastest and best way to migrate a DB to a new server! + +##16. Copy your ssh public key to a server from a machine that doesn’t have ssh-copy-id## + + `cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”` + + If you use Mac OS X or some other *nix variant that doesn’t come with ssh-copy-id, + this one-liner will allow you to add your public key to a remote machine so you can + subsequently ssh to that machine without a password. + + +##17. Live ssh network throughput test## + + ` yes | pv | ssh $host “cat > /dev/null”` + + connects to host via ssh and displays the live transfer speed, directing all transferred data to /dev/null + needs pv installed + + Debian: `‘apt-get install pv’` + Fedora: `‘yum install pv’` (may need the ‘extras’ repository enabled) + Opensuse: `zypper install pv` + +##18. How to establish a remote Gnu screen session that you can re-connect to## + + `ssh -t user@some.domain.com /usr/bin/screen -xRR` + + Long before tabbed terminals existed, people have been using Gnu screen to open many shells in a single text + terminal. Combined with ssh, it gives you the ability to have many open shells with a single remote + connection using the above options. If you detach with “Ctrl-a d” or if the ssh session is accidentally + terminated, all processes running in your remote shells remain undisturbed, ready for you to reconnect. + Other useful screen commands are “Ctrl-a c” (open new shell) and “Ctrl-a a” (alternate between shells). + Read this quick reference for more screen commands: http://aperiodic.net/screen/quick_reference + +##19. Resume scp of a big file## + + `rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file` + + It can resume a failed secure copy ( usefull when you transfer big files like db dumps through vpn ) using rsync. + It requires rsync installed in both hosts. + + `rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local` -> remote + or + `rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote` -> local + +##20. Analyze traffic remotely over ssh w/ wireshark## + + `ssh root@server.com ‘tshark -f “port !22” -w -‘ | wireshark -k -i –` + + This captures traffic on a remote machine with tshark, sends the raw pcap data over the ssh link, + and displays it in wireshark. Hitting ctrl+C will stop the capture and unfortunately close your + wireshark window. This can be worked-around by passing -c # to tshark to only capture a certain # + of packets, or redirecting the data through a named pipe rather than piping directly from ssh to + wireshark. I recommend filtering as much as you can in the tshark command to conserve bandwidth. + tshark can be replaced with tcpdump thusly: + + `ssh root@example.com tcpdump -w – ‘port !22’ | wireshark -k -i –` + +##21. Have an ssh session open forever## + + `autossh -M50000 -t server.example.com ‘screen -raAd mysession’` + + Open a ssh session opened forever, great on laptops losing Internet connectivity when switching WIFI spots. + +##22. Harder, Faster, Stronger SSH clients## + + `ssh -4 -C -c blowfish-cbc` + + We force IPv4, compress the stream, specify the cypher stream to be Blowfish. I suppose you could use + aes256-ctr as well for cypher spec. I’m of course leaving out things like master control sessions and + such as that may not be available on your shell although that would speed things up as well. + +##23. Throttle bandwidth with cstream## + + `tar -cj /backup | cstream -t 777k | ssh host ‘tar -xj -C /backup’` + + this bzips a folder and transfers it over the network to “host” at 777k bit/s. + cstream can do a lot more, have a look http://www.cons.org/cracauer/cstream.html#usage + for example: + + `echo w00t, i’m 733+ | cstream -b1 -t2` + +##24. Transfer SSH public key to another machine in one step## + + `ssh-keygen; ssh-copy-id user@host; ssh user@host` + + This command sequence allows simple setup of (gasp!) password-less SSH logins. Be careful, as if you + already have an SSH keypair in your ~/.ssh directory on the local machine, there is a possibility + ssh-keygen may overwrite them. ssh-copy-id copies the public key to the remote host and appends it to + the remote account’s ~/.ssh/authorized_keys file. When trying ssh, if you used no passphrase for your key, + the remote shell appears soon after invoking ssh user@host. + +##25. Copy stdin to your X11 buffer## + + `ssh user@host cat /path/to/some/file | xclip` + + Have you ever had to scp a file to your work machine in order to copy its contents to a mail? xclip can help + you with that. It copies its stdin to the X11 buffer, so all you have to do is middle-click to paste the + content of that looong file :) + +##26. Synchronize date and time with server over ssh## + + `date --set="$(ssh user@server date)"` + + NTP is better, but there are situations where it can’t be used. In those cases, you can do this to + sync the local time to a server. + +##27. Duplicate installed packages from one machine to the other## + + `ssh root@remote.host "rpm -qa" | xargs yum -y install` + + This will duplicate installed packages from one machine to the other – works for rpm/yum based systems. + + The next one works for Ubuntu/Debian based systems. + + Tell local Debian machine to install packages used by remote Debian machine + + `ssh remotehost 'dpkg --get-selections' | dpkg --set-selections && dselect install` + + (also works on Ubuntu) Copies the ‘install,’ ‘hold,’ ‘deinstall’ and ‘purge’ states of packages on the + remote machine to be matched on the local machine. Note: if packages were installed on the local + machine that were never installed on the remote machine, they will not be deinstalled by this operation. + + `apt-get install ssh root@host_you_want_to_clone "dpkg -l | grep ii" | awk '{print $2}'` + + “Clone” a list of installed packages from one Debian/Ubuntu Server to another + +##28. Backup a remote database to your local filesystem## + + `ssh user@host 'mysqldump dbname | gzip' > /path/to/backups/db-backup-`date +%Y-%m-%d`.sql.gz` + + I have this on a daily cronjob to backup the commandlinefu.com database from NearlyFreeSpeech.net + (awesome hosts by the way) to my local drive. Note that (on my Ubuntu system at least) you need to + escape the % signs on the crontab. + +##29. run command on a group of nodes in parallel## + + `echo "uptime" | pee "ssh host1" "ssh host2" "ssh host3"` + + `echo "uptime" | tee >(ssh host1) >(ssh host2) >(ssh host3)` + + The pee command is in the moreutils package. + +##30. ssh to machine behind shared NAT## + + `ssh -NR 0.0.0.0:2222:127.0.0.1:22 user@jump.host.com` + + Useful to get network access to a machine behind shared IP NAT. Assumes you have an accessible jump + host and physical console or drac/ilo/lom etc access to run the command. + + Run the command on the host behind NAT then ssh connect to your jump host on port 2222. That + connection to the jump host will be forwarded to the hidden machine. + + Note: Some older versions of ssh do not acknowledge the bind address (0.0.0.0 in the example) + and will only listen on the loopback address. + diff --git a/vimwiki/Extras.md b/vimwiki/Extras.md new file mode 100644 index 0000000..df7776a --- /dev/null +++ b/vimwiki/Extras.md @@ -0,0 +1,12 @@ +## Extras ## + + | ------------------------------------------------------------------------------- | + | App Name | ipk | + | ------------------------------------------------------------------------------- | + | Sim Toolkit | - | + | Maps | - | + | Dictionary | com.hamptoncatlin.dictionary.free_1.1.1_all.ipk | + | 10 knots | com.clearwater.knots_1.0.0_all.ipk | + | Bills Vs Income Free | com.machiapps.billsvsincomefree_2.0.1_all.ipk | + | Buzzer | com.digitalpowers.buzzer_1.0.0_all.ipk | + | ------------------------------------------------------------------------------- | diff --git a/vimwiki/Firefox.md b/vimwiki/Firefox.md new file mode 100644 index 0000000..3c5f198 --- /dev/null +++ b/vimwiki/Firefox.md @@ -0,0 +1,27 @@ +# Privacy Security Settings # + +A lot of these settings can be found in the excellent ArchWiki +article at [[https://wiki.archlinux.org/index.php/Firefox/Privacy#Configuration_tweaks|Firefox Privacy settings link]] + + +## Change user agent and platform ## + +To change the user agent in firefox, add the following string key in *about:config:* + +_general.useragent.override_ + +The value for the key is your browser's user agent. Select a known common one. + +*Tip:* _The value Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0_ is used as the user agent for the Tor browser, thus being very common. + +_*Warning: Changing the user agent without changing to a corresponding platform will make your browser nearly unique.*_ + +To change the platform for firefox, add the following string key in *about:config:* + +_general.platform.override_ + +Select a known common platform that corresponds with your user agent. + +*Tip:* _The value Win32 is used as the platform for the Tor browser, corresponding with the user agent provided above._ + + diff --git a/vimwiki/Forwarding a message with attachments.md b/vimwiki/Forwarding a message with attachments.md new file mode 100644 index 0000000..b0df7ee --- /dev/null +++ b/vimwiki/Forwarding a message with attachments.md @@ -0,0 +1,23 @@ + +To forward a message in mutt including all it's attachments, you can set the +variable `mime_forward` as follows: + +`set mime_forward` +`set mime_forward_rest=yes` + +This however forwards all headers, attachments etc as +a single attachment. + +A similar approach happens if you type `b`. This bounces the message completely +unmodified to a new address. +However, using the above two methods there is no way to trim the message. + +Instead you can try: + +1. type `v` to get to the attachments screen, and then type `t` repeatedly + to tag the required attachments and then type `;f` to forward the tagged + attachments. +2. Use the template method - type `Esc e` to resend the message using the + current message as a template. + + diff --git a/vimwiki/GRADNet.md b/vimwiki/GRADNet.md new file mode 100644 index 0000000..cb8ca07 --- /dev/null +++ b/vimwiki/GRADNet.md @@ -0,0 +1,4 @@ + +[Characterising Exoplanets: Theory and Data Driven perspectives](Characterising Exoplanets: Theory and Data Driven perspectives) + + diff --git a/vimwiki/Games.md b/vimwiki/Games.md new file mode 100644 index 0000000..5669aaf --- /dev/null +++ b/vimwiki/Games.md @@ -0,0 +1,13 @@ +## Games ## + + |----------------|----------------------------------------| + | App Name | ipk | + |----------------|----------------------------------------| + | Sparkle | com.10tons.app.sparkle_1.0.0_all.ipk | + | Sparkle2 | com.10tons.sparkle2_1.0.1.ipk | + | ZOPP | com.btg.zopp_0.0.6_all.ipk | + | Azkend | com.10tons.app.azkend_1.2.1_all.ipk | + | Azkend2 | com.10tons.azkend2_1.1.0_all.ipk | + | Dungeon Scroll | com.rtsoft.app.rtdscroll_1.0.4_all.ipk | + |----------------|----------------------------------------| + diff --git a/vimwiki/HardDrives.md b/vimwiki/HardDrives.md new file mode 100644 index 0000000..1ee104f --- /dev/null +++ b/vimwiki/HardDrives.md @@ -0,0 +1,6 @@ +[Replacing A Failed Disk in a mdadm RAID](Replacing A Failed Disk in a mdadm RAID) + +[SMARTCTL](SMARTCTL) + + + diff --git a/vimwiki/IC and STRI Displays .md b/vimwiki/IC and STRI Displays .md new file mode 100644 index 0000000..611a8de --- /dev/null +++ b/vimwiki/IC and STRI Displays .md @@ -0,0 +1,47 @@ +#The IC and STRI displays# + +These run a slideshow based on web pages that are +stored in: + +`/www/display` on `star` -- namely, + +`/www/display/ic-display.herts.ac.uk` and `/www/display/stri-display.herts.ac.uk` + +##To add or remove content.## + +Create a web page under these directories and then edit `opentabs.html` +which tells the web browser running on the PIs which tabs to open. + +Examples of pages which just display an image are `seminar.html` or +`swipe.html` -- they just display the corresponding large pngs. + +e.g. if asked to advertise a seminar, copy the png file provided by +the seminar organizer to this location, include `seminar.html` in the +list of files to open in `opentabs.html`, and reboot the pi. + +If someone sends something in another format, convert +it to a PNG and then include it in a blank webpage. + +The research images are generated from a flickr image set originated +by Hugh Jones. Username `stristri@yahoo.com`, password `al109abal109ab`. +Upload new photos to the albums there and they will be picked up +by the displays. + +##Raspberry Pis## + +###SSH Access### + +The raspberry pis are on the internet as `ic-display.herts.ac.uk` and +`stri-display.herts.ac.uk`. The username is `pi` and the password is the +standard admin password beginning with r. The only reason to log into +them is to reboot them, e.g. if there are new pages to display. +Log in with ssh and type `reboot`. This will prompt you for the +password again. + +###Powering On and Off### + +Switch the IC display off when leaving on a Friday night and +back on again on a Monday morning. +The control button is on the bottom right of the TV. For more +complex control requirements there's a remote control in Martins's office. + diff --git a/vimwiki/IDL.md b/vimwiki/IDL.md new file mode 100644 index 0000000..6c29df4 --- /dev/null +++ b/vimwiki/IDL.md @@ -0,0 +1,5 @@ +[Install On Linux-MacOSX From A Shell Script](Install On Linux-MacOSX From A Shell Script) + +[Install On MacOSX From A .pkg File](Install On MacOSX From A .pkg File) + +[Manage Licenses From The License Administrator Tool](Manage Licenses From The License Administrator Tool) diff --git a/vimwiki/Install On Linux-MacOSX From A Shell Script.md b/vimwiki/Install On Linux-MacOSX From A Shell Script.md new file mode 100644 index 0000000..4ad90a0 --- /dev/null +++ b/vimwiki/Install On Linux-MacOSX From A Shell Script.md @@ -0,0 +1,24 @@ +1. Unpack and uncompress the files: + + Uncompress the `filename.tar.gz` archive file that was downloaded to your computer, then unpack the file: + + `$ tar -xvf filename.tar.gz` + +2. Start the installer: + `$ ./install.sh` + +3. Follow the prompts to install the software. + +4. When installation is complete, license the software. + To activate node-locked licenses to a specific user and computer, + see [[Manage Licenses From The License Administrator Tool]] for steps. + +5. From a terminal window, change directories to `$INSTALL_DIR/idlxx/bin`. + Enter a command at the shell prompt to start an application: + + `idl` - Start command-line IDL. + + `idlde` - Start the IDL Development Environment. + + `idlhelp` - Start IDL Help. + diff --git a/vimwiki/Install On MacOSX From A .pkg File.md b/vimwiki/Install On MacOSX From A .pkg File.md new file mode 100644 index 0000000..08b2651 --- /dev/null +++ b/vimwiki/Install On MacOSX From A .pkg File.md @@ -0,0 +1,12 @@ +1. Start the installer: + Navigate to the `idlxx-mac.pkg` file that was downloaded to your computer and run it. + +2. Follow the prompts to install the software. + +3. When installation is complete, license the software. + To activate node-locked licenses to a specific user and computer, + see [[Manage Licenses From The License Administrator Tool]] for steps. + +4. From the Mac Finder, go to `$INSTALL_DIR/idlxx` and double-click `IDLx.x` to launch IDL. + + diff --git a/vimwiki/Internet.md b/vimwiki/Internet.md new file mode 100644 index 0000000..da68daa --- /dev/null +++ b/vimwiki/Internet.md @@ -0,0 +1,18 @@ +## Internet ## + + |----------------------|------------------------------------------| + | App Name | ipk | + |----------------------|------------------------------------------| + | Plogger | gworley3.plogger_1.0.1_all.ipk | + | Explorer for Dropbox | de.pcworldsoftware.dropbox_1.0.3_all.ipk | + | Hi SkyDrive | com.talign.skydrive_1.0.5.ipk | + | Relego | com.webosroundup.relego_0.3.1_all.ipk | + | Wapedia | com.taptu.wapedia.webos_1.0.2_all.ipk | + | wikiHow | com.wikihow.wikihowapp_0.9.6_all.ipk | + | FTPit! | de.pcworldsoftware.ftpit_1.1.1_all.ipk | + | Tor Browser | | + | bit.ly | de.echooff.mojo.bitly_1.0.2_all.ipk | + | GPS Fix | com.jamesharris.gpsfix_2.0.01_all.ipk | + |----------------------|------------------------------------------| + + diff --git a/vimwiki/Jobs.md b/vimwiki/Jobs.md new file mode 100644 index 0000000..de7fdbe --- /dev/null +++ b/vimwiki/Jobs.md @@ -0,0 +1,16 @@ +You can use the standard `qstat` command as described in the wiki to see what jobs are running. However, +more information is given by looking at the scheduler’s status. On the main head node, you can run +`showq` which gives the scheduler’s view of the queue. `sudo showstate` will give you a view of node usage. + +If you need to view an individual job belonging to another user you can do + +`sudo checkjob 123456` (where 123456 is the number of the job). + +This should tell you what nodes it is running on or why it is not +running. + +You can change the requirements of a job (e.g. walltime) with + +`sudo qalter –l …. 123456` + + diff --git a/vimwiki/Jokes.md b/vimwiki/Jokes.md new file mode 100644 index 0000000..ba6bfe4 --- /dev/null +++ b/vimwiki/Jokes.md @@ -0,0 +1,203 @@ + +*Where does the General keep his armies?* `In his sleevies.` + +*How does a squid go into battle?* `Well-armed.` + +*What's the best thing about Switzerland?* `I don't know, but their flag is a` +`huge plus.` + +*Where do you find a cow with no legs?* ` Right where you left it. ` + +*Why aren't koalas actual bears?* ` They don't meet the koalafications. ` + +`A bear walks into a restaurant. He tells his waiter, "I want a grilled …. cheese."` +`The waiter says, "What's with the pause?" "Whaddya mean?" the bear replies. "I'm a bear!" ` + +*What's E.T. short for?* `Because he's only got little legs.` + +*What do you call a Frenchman wearing sandals?* `Phillipe Phillope.` + +`Never criticize someone until you have walked a mile in their shoes. That` +`way, when you criticize them, you'll be a mile away, and you'll have their` +`shoes.` + +`Two men meet on opposite sides of a river. One shouts to the other, "I` +`need you to help me get to the other side!" The other guy replies, "You're` +`on the other side!"` + +*What's the difference between a hippo and a zippo?* `One is really heavy,` +`and the other is a little lighter.` + +*What do Alexander the Great and Winnie the Pooh have in common?* +`Same middle name.` + +*What did the mayonnaise say when the refrigerator door was opened?* +`Close the door, I'm dressing.` + +`"I stand corrected!" Said the man in the orthopedic shoes.` + +`I used to be addicted to soap. But I'm clean now.` + +*What did the left eye say to the right eye?* +`Between you and me, something smells.` + +*Why is England the wettest country?* +`Because the queen has reigned there for years.` + +`It's hard to explain puns to kleptomaniacs. They always take things so literally.` + +*What do you call it when Batman skips church?* +`Christian Bale.` + +`A guy goes to a pet store to buy a goldfish. The salesman asks him, "Do` +`you want an aquarium?" The guy responds, "I don't care what star sign it` +`is!"` + +*What do you call bears with no ears?* +`B–` + +*What's a foot long and slippery?* +`A slipper.` + +`Exaggerations have become an epidemic. They went up by a million percent` +`last year.` + +`And God said to John, "Come forth and you shall be granted eternal life."` +`But John came fifth and won a toaster.` + +`I want to die peacefully in my sleep like my grandfather did. Not` +`screaming in terror like the passengers in his car.` + +*What's the difference between a golfer and a skydiver?* +`A golfer goes *whack* "darn" and a skydiver goes "darn" *whack*.` + +`They all laughed when I said I wanted to be a comedian. Well, they're not` +`laughing now!` + +`Two cows are grazing in a field. One cow says to the other, "You ever` +`worry about that mad cow disease?" The other cow says, "Why would I care?` +`I'm a helicopter!"` + +`I told my physical therapist that I broke my arm in two places. He told me` +`to stop going to those places.` + +*What did the swordfish say to the marlin?* +`You're looking sharp.` + +*How do you make holy water?* +`You boil the hell out of it.` + +*Will glass coffins be a success?* +`Remains to be seen.` + +`I was wondering why the ball was getting bigger. Then it hit me.` + +`Two windmills are standing in a wind farm. One asks, "What's your favorite` +`kind of music?" The other says, "I'm a big metal fan."` + +*What's the difference between a hippo and a zippo?* +`One is really heavy and the other is a little lighter.` + +*Did you hear about the guy whose whole left side was cut off?* +`He's all right now.` + +*What do you call a bee that can't make up its mind?* +`A maybe.` + +*Hear about the new restaurant called Karma?* +`There's no menu—you get what you deserve.` + +*What did the janitor say when he jumped out of the closet?* +`SUPPLIES!` + +*Is it ignorance or apathy that's destroying the world today?* +`I don't know and don't really care.` + +*What do you call the wife of a hippie?* +`A Mississippi.` + +------ + +I bought some shoes from a drug dealer. I don't know what he laced them with, but I've been tripping all day. + +I told my girlfriend she drew her eyebrows too high. She seemed surprised. + +My dog used to chase people on a bike a lot. It got so bad, finally I had to take his bike away. + +My boss told me to have a good day.. so I went home. + +Why is Peter Pan always flying? He neverlands. + +A woman walks into a library and asked if they had any books about paranoia. The librarian says "They're right behind you!" + +The other day, my wife asked me to pass her lipstick but I accidentally passed her a glue stick. She still isn't talking to me. + +My friend says to me: "What rhymes with orange" I said: "No it doesn't" + +What do you call a guy with a rubber toe? Roberto. + +My wife told me I had to stop acting like a flamingo. So I had to put my foot down. + +I couldn't figure out why the baseball kept getting larger. Then it hit me. + +Why did the old man fall in the well? Because he couldn't see that well. + +I ate a clock yesterday, it was very time consuming. + +Whatdya call a frenchman wearing sandals? Phillipe Phillope. + +I know a lot of jokes about unemployed people but none of them work. + +What's orange and sounds like a parrot? A carrot. + +Did you hear about the italian chef that died? He pasta way. + +Why couldn't the bicycle stand up? Because it was two tired! + +Parallel lines have so much in common. It’s a shame they’ll never meet. + +Where do you find a cow with no legs? Right where you left it. + +When a deaf person sees someone yawn do they think it’s a scream? + +As I suspected, someone has been adding soil to my garden. The plot thickens. + +And the lord said unto John, "Come forth and you will receive eternal life". John came fifth and won a toaster. + +Why wouldn’t the shrimp share his treasure? Because he was a little shellfish. + +What did the left eye say to the right eye? Between you and me, something smells. + +Did you hear about the kidnapping in the park? They woke him up. + +I think i would like a job cleaning mirrors, it's just something I could really see myself doing. + +I took the shell off my racing snail thinking it would make him go faster, if anything it made him more sluggish. + +Just remember - you never really completely useless, you can always serve as a bad example. + +--------------------------------------------- + +Q: What goes up and down but does not move? +A: Stairs + +Q: What do you call a boy named Lee that no one talks to? +A: Lonely + +Q: What gets wetter the more it dries? +A: A towel. + +Q: Why do bicycles fall over? +A: Because they are two-tired! + +Q: What did Cinderella say when her photos did not show up? +A: Someday my prints will come! + +Q: Why was the broom late? +A: It over swept! + +Q: Why can't your nose be 12 inches long? +A: Because then it would be a foot! + +Q: Why do eskimos do their laundry in Tide? +A: Because it's too cold out-tide! diff --git a/vimwiki/Just For Fun.md b/vimwiki/Just For Fun.md new file mode 100644 index 0000000..ba381c7 --- /dev/null +++ b/vimwiki/Just For Fun.md @@ -0,0 +1,13 @@ +## Just For Fun ## + + |------------------------------------|-------------------------------------------------------| + | App Name | ipk | + |------------------------------------|-------------------------------------------------------| + | AudioScape | com.thing10.audioscape_1.0.11_all.ipk | + | ESFx | com.zakzo.app.esfx_0.9.6_all.ipk | + | RimShot | com.kissaham.rimshot_0.2.4_all.ipk | + | Star Trek Communicator | com.worldofnatecom.startrekcommunicator_1.5.1_all.ipk | + | Chuck | com.pdm.chuck_1.0.0_all.ipk | + | Custom Soundboard | com.blogspot.bodhisoft.csb_1.0.6_all.ipk | + |------------------------------------|-------------------------------------------------------| + diff --git a/vimwiki/Kali.md b/vimwiki/Kali.md new file mode 100644 index 0000000..ce77dd8 --- /dev/null +++ b/vimwiki/Kali.md @@ -0,0 +1,16 @@ + + ## Kali Linux 2.0 ## + +Notes: + +If you enter a login loop, then press ** ctrl-alt f1,2,3,4,5, ** or ** 6 ** to get a console login. +Login as root and enter __dpkg --configure -a__. +Select any defaults offered and then reboot. + +### Network ### + +** Network Adapter ** This VM has a number of network adapters so that it can communicate with the + other VM's on host only private networks. However by default the first network adapter is automatically + started and set to Bridged mode so that this VM can communicate wth the outside world, for updates etc. + This can be changed prior to launching this vm in the network editor and assigned to one of the other + host only network adaptors. diff --git a/vimwiki/Kids.md b/vimwiki/Kids.md new file mode 100644 index 0000000..2ad0e9b --- /dev/null +++ b/vimwiki/Kids.md @@ -0,0 +1,25 @@ +## Kids ## + + |----------------------|-----------------------------------------------| + | App Name | ipk | + |----------------------|-----------------------------------------------| + | Angry Birds | com.rovio.angrybirds_1.5.1.ipk | + | Angry Birds Seasons | com.rovio.angrybirdsseasons_1.6.0_all.ipk | + | Angry Birds Rio | com.rovio.angrybirdsrio_1.3.2_all.ipk | + | Pow Fish | com.livingmidnight.powfish_1.3.0_all.ipk | + | Ancient Frog | com.ancient-workshop.frogle_1.19.7_all.ipk | + | Cloud Hopper | com.asc.rc.cloudhopper_1.5.2_all.ipk | + | Ninja Camp | caffeina.games.ninjacamp_1.0.2_all.ipk | + | Lilly Tube Ultimate | com.pixilabs.lillytubeultimate_1.0.1.ipk | + | Spinballs Lite | com.christiangross.spinballs_1.1.0_all.ipk | + | Snake Slider | com.bdrgames.snakeslider_1.5.3_all.ipk | + | Glow Hockey Free | com.natenai.app.glowhockey_2.2.10_all.ipk | + | Caveman | com.mobile1up.caveman-lite_1.2.3_all.ipk | + | BeamOut Free | com.underclouds.app.beamoutfree_1.0.8_all.ipk | + | Quell HD | com.underclouds.app.beamoutfree_1.0.8_all.ipk | + | Bubbles | com.thomasschoeps.app.bubbbles_1.5.2_all.ipk | + | Ground Effect Pro HD | com.jakyl.gepro_1.6.2_all.ipk | + | Radiant Lite | net.hexage.radiant.lite_2.12.34_all.ipk | + |----------------------|-----------------------------------------------| + + diff --git a/vimwiki/Lectures.md b/vimwiki/Lectures.md new file mode 100644 index 0000000..881700f --- /dev/null +++ b/vimwiki/Lectures.md @@ -0,0 +1,2 @@ +[GRADNet](GRADNet) + diff --git a/vimwiki/Libcrypto segfault automount.md b/vimwiki/Libcrypto segfault automount.md new file mode 100644 index 0000000..3f65fbc --- /dev/null +++ b/vimwiki/Libcrypto segfault automount.md @@ -0,0 +1,10 @@ +On new builds if there are problems with libcrypto segfault, +do the following: + +1. Cat /etc/selinux/config --- make sure selinux is disabled. +2. yum downgrade krb5_workstation, krb5-libs, libkadm5, krb5-devel + + + + + diff --git a/vimwiki/Linking.md b/vimwiki/Linking.md new file mode 100644 index 0000000..1146457 --- /dev/null +++ b/vimwiki/Linking.md @@ -0,0 +1,10 @@ + +## Symbolic Linker ## + +If you create a symbolic link to a file/directory and then change it's location, +instead of deleting and then creating a new link, the link can be updated as follows: + +**Creation:** `ln -s /path/to/file-name link-name` + +**Update:** `ln -sfn /path/to/file-name link-name` + diff --git a/vimwiki/LinuxAdmin.md b/vimwiki/LinuxAdmin.md new file mode 100644 index 0000000..79f7937 --- /dev/null +++ b/vimwiki/LinuxAdmin.md @@ -0,0 +1,39 @@ + +[Bluetooth](Bluetooth) + +[Browsers](Browsers) + +[conky](conky) + +[HardDrives](HardDrives) + +[IDL](IDL) + +[Linking](Linking) + +[Login](Login) + +[Mutt](Mutt) + +[Networking](Networking) + +[NvidiaDrivers](NvidiaDrivers) + +[PackageManagement](PackageManagement) + +[pefile](pefile) + +[SSH](SSH) + +[Tmux](Tmux) + +[UoH](UoH) + +[xdg mime](xdg-mime) + + + + + + + diff --git a/vimwiki/Login For Administration.md b/vimwiki/Login For Administration.md new file mode 100644 index 0000000..61f9261 --- /dev/null +++ b/vimwiki/Login For Administration.md @@ -0,0 +1,13 @@ +All cluster admin starts with the main head node, which normal users do not have access to. +To log in directly from outside the cluster ssh to `stri-cluster.herts.ac.uk`. +If already logged in to another cluster machine, you can ssh to `head.data`. + +Once logged in to this machine (which calls itself `‘uhhpc’`) you may use `sudo` to carry out sysadmin tasks. +This has the advantage that it doesn’t leave you sitting at a root prompt. + +Sudo will prompt you for your own password. You do not need to know the root password to use sudo. + +You may of course use this to get a root prompt on another machine by doing e.g. `sudo ssh node001`. +Sudo is not set up on other machines. However, please use sudo if possible on `uhhpc` rather than a root prompt. + + diff --git a/vimwiki/Login.md b/vimwiki/Login.md new file mode 100644 index 0000000..3ae4e13 --- /dev/null +++ b/vimwiki/Login.md @@ -0,0 +1,4 @@ + +[Check User Login](Check User Login) + + diff --git a/vimwiki/Manage Licenses From The License Administrator Tool.md b/vimwiki/Manage Licenses From The License Administrator Tool.md new file mode 100644 index 0000000..d018551 --- /dev/null +++ b/vimwiki/Manage Licenses From The License Administrator Tool.md @@ -0,0 +1,33 @@ +Activating a license transfers the license rights from the Harris Download and Licensing Center +to a node-locked (local) computer or license server. It also creates the features and quantities +of licenses that enable the software to run. When you purchase Harris Geospatial products, you +will receive an email with an activation code to use to activate your software license. The license +is a concurrent process license for each product that was purchased. + +These instructions describe how to activate on a local computer (node-locked licenses). +Licenses are activated over the Internet. + +To open the License Administrator Tool described in this section, use one of the following: + + Linux: From a terminal window, launch the harrislicense command from the `$INSTALL_DIR/idlxx/bin` + directory. Sudo or root permissions are required. + + Mac: From a Finder window, double-click the LicenseAdminstrator.app icon located under + the `$INSTALL_DIR/idlxx` directory. Administrator privileges are required. + +##Activate Licenses## + + 1. In the License Administrator Tool, click `Activate Local License`. + 2. Enter the activation codes. + 3. Enter the Quantity of licenses you are entitled to. + 4. Click Activate. A message appears when the codes are successfully activated. + To view details on the activated licenses for the computer, click View Licenses. + +##To Activate From Command Line## + +Run the following: + `$ activate -a activation-code [-q quantity]` + + + +See [Harris Geospatial Ref:](https://download.flexnetoperations.com/439214/xlsv/937/14099937/idl872-install.html?ftpRequestID=7211280057&server=download.flexnetoperations.com&dtm=DTM20190807154617MzgwNDcxMDMz&authparam=1565217977_36e0337a683f7d3ea8fee050302ebfd9&ext=.html) diff --git a/vimwiki/Media.md b/vimwiki/Media.md new file mode 100644 index 0000000..8447e36 --- /dev/null +++ b/vimwiki/Media.md @@ -0,0 +1,17 @@ +## Media ## + + |--------------|-------------------------------------------| + | App Name | ipk | + |--------------|-------------------------------------------| + | Music | - | + | AccuRadio | com.accuradio.player_1.1.1_all.ipk | + | Drum Machine | de.metaviewsoft.drummachine_1.0.0_all.ipk | + | Beat Box | de.concentrix.beatbox_1.1.0_all.ipk | + | Beeb News | net.palmdoc.beeb_2.3.0_all.ipk | + | My Local Vue | com.mobileteck.mylocalvue_2.0.2.ipk | + | ComicShelf | ca.canuckcoding.comicshelf_1.1.0_all.ipk | + | FilePlayer | com.realmayo.ffplayer_0.6.0_all.ipk | + | SongID | eu.ssglabs.songid_0.1.03_all.ipk | + |--------------|-------------------------------------------| + + diff --git a/vimwiki/Metasploitable.md b/vimwiki/Metasploitable.md new file mode 100644 index 0000000..70a5ea6 --- /dev/null +++ b/vimwiki/Metasploitable.md @@ -0,0 +1,22 @@ +## Metasploitable2 ## + +### Notes ### + +This is Metasploitable2 (Linux) + +Metasploitable is an intentionally vulnerable Linux virtual machine. +This VM can be used to conductecurity training, testecurity tools, and practice common penetration testing techniques. + +The default login and password is **__ msfadmin:msfadmin. __** + +Never expose this VM to an untrusted network (use NAT or Host-only mode if you have any questions what that means). + +To contact the developers, please send email to __ msfdev@metasploit.com __ + + +### Network ### + +** Network Adapter: ** Custom virtual network - vmnet4 + + + diff --git a/vimwiki/MountMacOSXDrive.md b/vimwiki/MountMacOSXDrive.md new file mode 100644 index 0000000..add9025 --- /dev/null +++ b/vimwiki/MountMacOSXDrive.md @@ -0,0 +1,53 @@ +Sometimes you may not be able to mount a HFS partition on linux +and you get the following error: + +`mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error.` + +This is because the the partition is wrapped in a CoreStorage Volume. This can be verfied from the output of fdisk -l. +In the case of this Macbook we get: + +`Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors` +__Disk model: ST2000LX001-1RG1__ +`Units: sectors of 1 * 512 = 512 bytes` +`Sector size (logical/physical): 512 bytes / 4096 bytes` +`I/O size (minimum/optimal): 4096 bytes / 4096 bytes` +`Disklabel type: gpt` +`Disk identifier: 26B36326-E491-4674-9795-D970A4935EAF` +`` +__Device Start End Sectors Size Type__ +`/dev/sda1 40 409639 409600 200M EFI System` +__/dev/sda2 409640 391021447 390611808 186.3G Apple Core storage__ +`/dev/sda3 391021448 392290991 1269544 619.9M Apple boot` +`/dev/sda4 392290992 802347007 410056016 195.5G Apple HFS/HFS+` +`/dev/sda5 802347008 803586047 1239040 605M Linux filesystem` +`/dev/sda6 803586048 979429375 175843328 83.9G Linux filesystem` +`` +` --- ` + +Normally HFS+ uses 2 volume headers each 1024 bytes in from the beginning and end of the volume. With +CoreStorage wrapping however this is no longer the case, so you have to manually specify the HFS volume +size to fix this. To do this use the `testdisk` utility: + +1. `$testdisk /dev/sda ` and select ok for the drive. +2. Select `EFI GPT` for the drive. +3. Press `Analyse` and then `Quick Search`. The output produced will be smaller than the volume given by fdisk + +`TestDisk 7.0, Data Recovery Utility, April 2015` +`Christophe GRENIER <grenier@cgsecurity.org>` +`http://www.cgsecurity.org` +`` +`Disk /dev/sda - 2000 GB / 1863 GiB - CHS 243201 255 63` +` Partition Start End Size in sectors` +`>P EFI System 40 409639 409600 [EFI]` +__ P Mac HFS 409640 390296359 389886720__ +` P Mac HFS 391021448 392290991 1269544` +` P Mac HFS 392290992 802347007 410056016` +`` + +So now multiply the size by the sector size (389886720*512) =199622000640. This is the offset needed. + +4. So can now press q several times to quit the program. +5. The disk can now be mounted as follows: + `$ sudo mount /dev/sda2 -t hfsplus -o ro,sizelimit=199622000640 /mnt` + + diff --git a/vimwiki/Mutt.md b/vimwiki/Mutt.md new file mode 100644 index 0000000..dd9e3ca --- /dev/null +++ b/vimwiki/Mutt.md @@ -0,0 +1,2 @@ + +[Forwarding a message with attachments](Forwarding a message with attachments) diff --git a/vimwiki/Network Manager from CLI.md b/vimwiki/Network Manager from CLI.md new file mode 100644 index 0000000..902cfdf --- /dev/null +++ b/vimwiki/Network Manager from CLI.md @@ -0,0 +1,39 @@ +[Full](Full) article go [here:](https://arstechnica.com/civis/viewtopic.php?t=1163023) + +* To see the status of a connection: + + `# nmcli con status id 'Wired connection 1'` + +* To bring down the interface and disconnect: + + `# nmcli con down id 'Wired connection 1'` + `# nmcli dev disconnect iface eth0` + +* to bring it back up: + + `# nmcli con up id 'Wired connection 1'`` + + +* To get syntax reminders: + + `# nmcli help` + `# nmcli con help` + `# nmcli dev help` + +* Import OpenVPN config from CLI + + `# sudo nmcli connection import type openvpn file OpenVPNFile-config.ovpn` + +* To see a list of wireless APs + + `# sudo nmcli device wifi rescan` + `# sudo nmcli device wifi list` + +* To conncect to wireless AP + + `# sudo nmcli device wifi connect {SSID-Name} password {password}` + +* If Network manager is running but having problems connecting to wireless AP, + stop the nm-watcher service. This script is taken from the nm-examples man + page and checks to make sure that the ethernet connection goes down when a + wifi connection is sought. diff --git a/vimwiki/Networking.md b/vimwiki/Networking.md new file mode 100644 index 0000000..3718a82 --- /dev/null +++ b/vimwiki/Networking.md @@ -0,0 +1,8 @@ + +[Wifi Networking CLI](Wifi Networking CLI) + +[Set up DHCP or static IP Address from CLI](Set up DHCP or static IP Address from CLI) + +[Network Manager from CLI](Network Manager from CLI) + + diff --git a/vimwiki/Nodes.md b/vimwiki/Nodes.md new file mode 100644 index 0000000..4555781 --- /dev/null +++ b/vimwiki/Nodes.md @@ -0,0 +1,24 @@ +__Ganglia__ (https://uhhpc.herts.ac.uk/ganglia/) can be useful to see the state of nodes. + +If a node goes down while a user’s job is running on it, the job will not terminate properly +and may flood the user’s inbox with notifications. If `Ganglia` or `showstate` report a node +is down, consider rebooting it with + +`sudo rebootnode.pl nodexxx` + +This will prompt you for the IDRAC password, which is `rianhs4b`. Once a node has been rebooted, +wait a few minutes, then check that you can ssh into it as a normal user and view your home +directory and /beegfs. If so, bring it back on line with + +`sudo pbsnodes –c nodexxx` + +If a node is misbehaving and you don’t want to/can’t reboot it, you can temporarily remove it +from the pool used the job control system with + +`pbsnodes –o nodexxx` + +– also reversed by + +`pbsnodes –c` + + diff --git a/vimwiki/NvidiaDrivers.md b/vimwiki/NvidiaDrivers.md new file mode 100644 index 0000000..71328ca --- /dev/null +++ b/vimwiki/NvidiaDrivers.md @@ -0,0 +1,44 @@ +***Installation of Nvidia Drivers*** + +1. First need to ensure that the kernel development and header packages are installed. + For Scientific Linux/RHEL/Centos or Fedora type the following yum commands: + `yum groupinstall "Development Tools"` + `yum install kernel-devel kernel-headers dkms` + +2. Before installing the drivers, need the driver product type: + + `lspci -nn | grep VGA` + + which will produce output such as the following: + `01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF108GL [Quadro 600] [10de:0df8] (rev a1)` + + then go to the [NVIDIA](https://www.nvidia.com/Download/index.aspx) official + website and download the appropriate linux driver, + in this case for the Quadro 600 driver. + +3. Disable the Nouveau Driver. This can be done by editing +4. `/etc/modprobe.d/blacklist.conf` and adding the line `blacklist nouveau`. + +5. In addition the following line can be added to the boot options by +6. editing `/etc/default/grub` and adding `nouveau.blacklist` + option to the line: + + `GRUB_CMDLINE_LINUX_DEFAULT="nouveau.blacklist=1"` + + Then run `grub2-mkconfig -o /boot/grub2/grub.cfg` + +7. Create a new initramfs file after taking a backup of the existing one, as follows: + `mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak` + `dracut -v /boot/initramfs-$(uname -r).img $(uname -r)` + `init 3` + `X -configure` + `reboot` + +8. To install the driver make sure that the X-server is stopped (e.g. systemctl stop X ; + or /etc/init.d/gdm stop ; or killall X ; etc.). The can run the Nvidia driver install script: + + `sh NVIDIA-Linux-x86_64-390.10.run` + +9. Then can reboot into Xwindow by typing `init 5` + + diff --git a/vimwiki/PAM Intranet Access and ADFS Certificate Expiry.md b/vimwiki/PAM Intranet Access and ADFS Certificate Expiry.md new file mode 100644 index 0000000..b41a06e --- /dev/null +++ b/vimwiki/PAM Intranet Access and ADFS Certificate Expiry.md @@ -0,0 +1,10 @@ +When the ADFS certificates expire we need to do the following: + +1. download the metadata xml from https://adfs.herts.ac.uk/FederationMetadata/2007-06/FederationMetadata.xml +2. go to https://pam.herts.ac.uk/simplesaml/admin/metadata-converter.php +3. log in (admin, normal server root password) +4. upload metadata xml +5. cut and paste the new metadata info into /var/simplesamlphp/metadata/saml20-idp-remote.php + (we don't seem to use the sp-remote file). + + diff --git a/vimwiki/PackageManagement.md b/vimwiki/PackageManagement.md new file mode 100644 index 0000000..396a261 --- /dev/null +++ b/vimwiki/PackageManagement.md @@ -0,0 +1,12 @@ + + +[Zypper](Zypper) + + +[Pacman](Pacman) + + +[Apt](Apt) + +[Pacman/Apt/Rosetta](Pacman-Apt-Rosetta) + diff --git a/vimwiki/Pacman-Apt-Rosetta.md b/vimwiki/Pacman-Apt-Rosetta.md new file mode 100644 index 0000000..dbefcc8 --- /dev/null +++ b/vimwiki/Pacman-Apt-Rosetta.md @@ -0,0 +1,92 @@ + +[Basic operations](Basic operations) + +[Querying specific packages](Querying specific packages) + +[Querying package lists](Querying package lists) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Search for package(s) by searching the expression in name, description, short description. What exact fields are being searched by default varies in each tool. Mostly options bring tools on par. pacman -Ss dnf search apt search zypper search zypper se [-s] emerge -S; eix +Lists packages which have an update available. Note: Some provide special commands to limit the output to certain installation sources, others use options. pacman -Qu dnf list updates, dnf check-update apt-get upgrade -> n zypper list-updates zypper patch-check (just for patches) emerge -uDNp @world +Display a list of all packages in all installation sources that are handled by the packages management. Some tools provide options or additional commands to limit the output to a specific installation source. pacman -Sl dnf list available apt-cache dumpavail apt-cache dump (Cache only) apt-cache pkgnames zypper packages portageq all_best_visible / +Generates a list of installed packages pacman -Q dnf list installed dpkg --list | grep ^i zypper search --installed-only qlist -IC +List packages that are installed but are not available in any installation source (anymore). pacman -Qm dnf list extras deborphan zypper se -si | grep 'System Packages' eix-test-obsolete +List packages that were recently added to one of the installation sources, i.e. which are new to it. (none) dnf list recent aptitude search '~N' / aptitude forget-new n/a eix-diff +List installed local packages along with version pacman -Q rpm -qa dpkg -l zypper search -s; rpm -qa qlist -ICv +Search locally installed package for names or descriptions pacman -Qs rpm -qa '*<str>*' aptitude search '~i(~n $name|~d $description)' eix -S -I +List packages not required by any other package pacman -Qt dnf leaves deborphan -anp1 emerge -pc +List packages installed explicitly (not as dependencies) pacman -Qe dnf history userinstalled apt-mark showmanual emerge -pvO @selected; eix --selected +List packages installed automatically (as dependencies) pacman -Qd apt-mark showauto +Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo + +[Querying package dependencies](Querying package dependencies) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Display packages which require X to be installed, aka show reverse dependencies. pacman -Sii dnf repoquery --alldeps --whatrequires or repoquery --whatr[equires] apt-cache rdepends / aptitude search ~D$pattern zypper search --requires emerge -pvc +Display packages which conflict with given expression (often package). Search can be used as well to mimic this function. dnf repoquery --conflicts aptitude search '~C$pattern' +List all packages which are required for the given package, aka show dependencies. pacman -[S|Q]i dnf repoquery --requires or repoquery -R apt-cache depends / apt-cache show zypper info --requires emerge -ep +List what the current package provides dnf provides dpkg -s / aptitude show zypper info --provides equery files; qlist +List all packages that require a particular package dnf repoquery --alldeps --whatrequires aptitude search ~D{depends,recommends,suggests}:$pattern / aptitude why zypper search --requires equery depends -a +Display all packages that the specified packages obsoletes. dnf list obsoletes apt-cache show +Generates an output suitable for processing with dotty for the given package(s). apt-cache dotty n/a +Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo + +[Installation sources management](Installation sources management) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Installation sources management ${EDITOR} /etc/pacman.conf ${EDITOR} /etc/yum.repos.d/${REPO}.repo ${EDITOR} /etc/apt/sources.list ${EDITOR} /etc/zypp/repos.d/${REPO}.repo layman; eselect repository +Add an installation source to the system. Some tools provide additional commands for certain sources, others allow all types of source URI for the add command. Again others, like apt and dnf force editing a sources list. apt-cdrom is a special command, which offers special options design for CDs/DVDs as source. /etc/pacman.conf /etc/yum.repos.d/*.repo apt-cdrom add zypper service-add layman, overlays +Refresh the information about the specified installation source(s) or all installation sources. pacman -Sy (always upgrade the whole system afterwards) dnf clean expire-cache && dnf check-update apt-get update zypper refresh zypper ref emerge --sync;layman -S +Prints a list of all installation sources including important information like URI, alias etc. cat /etc/pacman.d/mirrorlist cat /etc/yum.repos.d/* apt-cache policy zypper service-list layman -l; eselect repository list +List all packages from a certain repo paclist <repo> eix --in-overlay +Disable an installation source for an operation dnf --disablerepo= emerge package::repo-to-use +Download packages from a different version of the distribution than the one installed. dnf --releasever= apt-get install -t release package/ apt-get install package/release (deps not covered) echo "category/package ~amd64" >> /etc/portage/package.keywords && emerge package +Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo + +[Overrides](Overrides) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Add a package lock rule to keep its current state from being changed /etc/pacman.conf +modify IgnorePkg array dnf.conf <--”exclude” option (add/amend) apt-mark hold pkg Put package name in /etc/zypp/locks, or zypper al /etc/portage/package.mask +Delete a package lock rule remove package from IgnorePkg line in /etc/pacman.conf apt-mark unhold pkg Remove package name from /etc/zypp/locks or zypper rl /etc/portage/package.mask (or package.unmask) +Show a listing of all lock rules cat /etc/pacman.conf /etc/apt/preferences View /etc/zypp/locks or zypper ll cat /etc/portage/package.mask +Set the priority of the given package to avoid upgrade, force downgrade or to overwrite any default behavior. Can also be used to prefer a package version from a certain installation source. ${EDITOR} /etc/pacman.conf +Modify HoldPkg and/or IgnorePkg arrays /etc/apt/preferences, apt-cache policy zypper mr -p ${EDITOR} /etc/portage/package.accept_keywords +Add a line with =category/package-version +Remove a previously set priority /etc/apt/preferences zypper mr -p ${EDITOR} /etc/portage/package.accept_keywords +remove offending line +Show a list of set priorities. apt-cache policy /etc/apt/preferences zypper lr -p grep -r . /etc/portage/package.accept_keywords +Ignores problems that priorities may trigger. n/a +Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo + +[Verification and repair](Verification and repair) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Verify single package pacman -Qk[k] rpm -V debsums rpm -V equery check +Verify all packages pacman -Qk[k] rpm -Va debsums rpm -Va equery check +Reinstall given Package - Will reinstall the given package without dependency hassle. pacman -S dnf reinstall apt install --reinstall zypper install --force emerge -1O +Verify dependencies of the complete system. Used if installation process was forcefully killed. pacman -Dk dnf repoquery --requires apt-get check zypper verify emerge -uDN @world +Use some magic to fix broken dependencies in a system pacman dep level - pacman -Dk, shared lib level - findbrokenpkgs or lddd dnf repoquery --unsatisfied apt-get --fix-broken +aptitude install zypper verify revdep-rebuild +Add a checkpoint to the package system for later rollback (unnecessary, done on every transaction) n/a +Remove a checkpoint from the system N/A N/A n/a +Provide a list of all system checkpoints N/A dnf history list n/a +Rolls entire packages back to a certain date or checkpoint. N/A dnf history rollback n/a +Undo a single specified transaction. N/A dnf history undo n/a +Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo + +[Using package files and building packages](Using package files and building packages) + +Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo +Query a package supplied on the command line rather than an entry in the package management database pacman -Qp rpm -qp dpkg -I +List the contents of a package file pacman -Qpl rpmls rpm -qpl dpkg -c rpm -qpl +Installs local package file, e.g. app.rpm and uses the installation sources to resolve dependencies pacman -U dnf install apt install zypper in emerge +Updates package(s) with local packages and uses the installation sources to resolve dependencies pacman -U dnf upgrade debi emerge +Add a local package to the local package cache mostly for debugging purposes. cp $filename /var/cache/pacman/pkg/ apt-cache add n/a cp $filename /usr/portage/distfiles +Extract a package tar -Jxvf rpm2cpio | cpio -vid dpkg-deb -x rpm2cpio | cpio -vid tar -jxvf +Install/Remove packages to satisfy build-dependencies. Uses information in the source package. Use ABS && makepkg -seoc dnf builddep apt-get build-dep zypper si -d emerge -o +Display the source package to the given package name(s) dnf repoquery -s apt-cache showsrc n/a +Downloads the corresponding source package(s) to the given package name(s) Use ABS && makepkg -o dnf download --source apt-get source / debcheckout zypper source-install emerge --fetchonly +Build a package makepkg -s rpmbuild -ba (normal) +mock (in chroot) debuild rpmbuild -ba; build; osc build ebuild; quickpkg +Check for possible packaging issues namcap rpmlint lintian rpmlint repoman diff --git a/vimwiki/Password Changing.md b/vimwiki/Password Changing.md new file mode 100644 index 0000000..59b60de --- /dev/null +++ b/vimwiki/Password Changing.md @@ -0,0 +1,11 @@ +Users can change their own passwords with the passwd command, but if you need to change a user’s password +without their involvement, do + +`sudo /root/ldifs/star-passwd username` + +which will just prompt for the new password and the LDAP password. + +__Note:__ + +If you need to lock a user out of their account without deleting it, just change the password to +something unguessable. diff --git a/vimwiki/Pre3Install.md b/vimwiki/Pre3Install.md new file mode 100644 index 0000000..3c61a5f --- /dev/null +++ b/vimwiki/Pre3Install.md @@ -0,0 +1,26 @@ + +# List of Programs/Apps to install on Pre3 # + +ipk backup Archive directory is at /home/opensuse/vgg/macosxd1/Computing/Palm/webos/BACKUPS/ipk-backups + +## Home Screens ## + +Here are the Pre3 Homescreens from which you can link to the list of applications they each contain. + + [[Applications]] + [[System]] + [[Internet]] + [[WebOS]] + [[Kids]] + [[Training]] + [[Science]] + [[Media]] + [[Games]] + [[Board Games]] + [[Cards]] + [[3D-RPG]] + [[Catholic]] + [[Just For Fun]] + [[Productivity]] + [[Extras]] + diff --git a/vimwiki/Problems.md b/vimwiki/Problems.md new file mode 100644 index 0000000..b5e6451 --- /dev/null +++ b/vimwiki/Problems.md @@ -0,0 +1,42 @@ + +##1. Problems connecting via ssh.## + +If an attempt at ssh to a host has been denied, (although previously successful), +you may get the following error: + +`ssh_exchange_identification: read: Connection reset by peer` + +This can be caused by an number of reasons. You can first try to delete the line containg the +host from your ~/.ssh/known_host file. If this doesn't work then your ip address may be blocked +and could be listed in the /etc/hosts.deny file. + +To better diagnose the situation try connecting via ssh with the verbose option (-v or -vv) +as this may provide some clues. A message that the connection has been reset by the peer could be +further indication that the ip address is in the host.deny file. +Therefore check the file /etc/hosts.deny for the ip address. If the ip address is listed, +the following steps should then be followed: + + 1. Stop the DenyHosts service: + + `$ systemctl stop denyhosts` + + 2. Remove the ip address from the following files: + + 1. `/etc/hosts.deny` + 2. `/var/lib/denyhosts/hosts` + 3. `/var/lib/denyhosts/hosts-restricted` + 4. `/var/lib/denyhosts/hosts-root` + 5. `/var/lib/denyhosts/hosts-valid` + 6. `/var/lib/denyhosts/users-hosts` + + 3. Start the DenyHosts service: + + `$ systemctl start denyhosts` + + + +###Refs:### + +https://stackoverflow.com/questions/9225300/denyhosts-keeps-adding-back-my-ip + + diff --git a/vimwiki/Procurement.md b/vimwiki/Procurement.md new file mode 100644 index 0000000..8944a21 --- /dev/null +++ b/vimwiki/Procurement.md @@ -0,0 +1,33 @@ + +A few notes about delivery slips and requisition forms from Janis Chevalier. + + +##Delivery Notes:## + +All delivery notes should be scanned in separately and e-mailed to + +`pa-team@herts.ac.uk` & `procurement-cln@herts.ac.uk` + +The paper copies can be either retained or sent in the post to Procurement, MacLaurin Building + +##Requisitions:## + +- Forms to be completed in full detail. +- Information given in the yellow box will not appear on the printed order. +- Only details in the Quotation Ref, Quantity, Description and Price (ex VAT) will. + +- Always attach the quote if the order references one. + +- If you are aware of a Delivery Due date for your order please add in the ‘Comments’ box + +##Delivery Information:## + +Please make sure you enter the room number/location and your name in the _Delivery Instructions_. + +##Budget Codes:## + +Budget codes must be entered in full and with the correct format, examples below: + + `11.100222.3505` _not_ `GL11100222` + `C00123666.01.3636` _not_ `PJC00123663636` + diff --git a/vimwiki/Productivity.md b/vimwiki/Productivity.md new file mode 100644 index 0000000..d3004c8 --- /dev/null +++ b/vimwiki/Productivity.md @@ -0,0 +1,16 @@ +## Productivity ## + + | ------------------------------------------------------------------------------ | + | App Name | ipk | + | ------------------------------------------------------------------------------ | + | PDF View | - | + | QuickOffice | com.quickoffice.webos_2.2.247.ipk | + | Timesheet | com.mystuff.timesheet_0.2.10_all.ipk | + | Sorting Thoughts | com.sortingthoughts.palmpre_1.3.0_all.ipk | + | Google Calender Search | de.vivalv.software.googlecalendarsearch_1.6.2_all.ipk | + | iCallimporter | de.metaviewsoft.icalimporter_2.6.0_all.ipk | + | Expenses | de.smp.expenses_1.0.6_all.ipk | + | Wanderlife Budget | com.wanderlife.app.budget_1.1.0_all.ipk | + | Expensify | com.expensify.expensify_1.0.6_all.ipk | + | ------------------------------------------------------------------------------ | + diff --git a/vimwiki/Python.md b/vimwiki/Python.md new file mode 100644 index 0000000..4043f36 --- /dev/null +++ b/vimwiki/Python.md @@ -0,0 +1,5 @@ + + +[Uninstall via setup.py](Uninstall via setup.py) + +[mps youtube](mps-youtube) diff --git a/vimwiki/Querying specific packages.md b/vimwiki/Querying specific packages.md new file mode 100644 index 0000000..a262bdc --- /dev/null +++ b/vimwiki/Querying specific packages.md @@ -0,0 +1,38 @@ +_QUERYING SPECIFIC PACKAGES_ + + +# Action Arch Debian/Ubuntu + +1. Show all or most information about a package: `pacman -[S|Q]i` `apt show / apt-cache policy` +The tools' verbosity for the default command vary. +But with options, the tools are on par with each +other. + +2. Display local package information: `pacman -Qi` `dpkg -s / aptitude show` + Name, version, description, etc. + +3. Display remote package information: `pacman -Si` `apt-cache show / aptitude show` + Name, version, description, etc. + +4. Display files provided by local package: `pacman -Ql` `dpkg -L` + +5. Display files provided by a remote package: `pacman -Fl` `apt-file list $pattern` + +6. Query the package which provides FILE: `pacman -Qo` `dpkg -S / dlocate` + +7. List the files that the package holds: `pacman -Ql / pacman -Fl` `dpkg-query -L` +Again, this functionality can be mimicked +by other more complex commands. + +8. Displays packages which provide the given `pacman -Fo` `apt-file search` +expression, a.k.a. reverse provides: +Mainly a shortcut to search a specific field. +Other tools might offer this functionality +through the search command. + +9. Search all packages to find the one which holds `pacman -Fs` `apt-file search` +the specified file: +auto-apt is using this functionality. + +10. Show the changelog of a package: `pacman -Qc` `apt-get changelog` + diff --git a/vimwiki/Quickly Quote/.unquote words.md.swp b/vimwiki/Quickly Quote/.unquote words.md.swp Binary files differnew file mode 100644 index 0000000..f14e420 --- /dev/null +++ b/vimwiki/Quickly Quote/.unquote words.md.swp diff --git a/vimwiki/Quickly Quote/unquote words.md b/vimwiki/Quickly Quote/unquote words.md new file mode 100644 index 0000000..6e7a75a --- /dev/null +++ b/vimwiki/Quickly Quote/unquote words.md @@ -0,0 +1,37 @@ + + +###Easy Method### + +Use surround.vim plugin + +###Native Vim methods### + + __Quote a word using single quotes__ + + `ciw'Ctrl+r"'` + + * `ciw` - Delete the word the cursor is on, and end up in insert mode + * `'` - Add the first quote + * `Ctrl+r"` - Insert the contents of the `"` register, aka the last yank/delete. + * `'` - Add the closing quote + + + _Unquote a word that's enclosed in single quotes_ + + `di'hPl2x` + + * `di'` - Delete the word enclosed by single quotes. + * `hP` - Move the cursor left one place (on top of the opening quote) and put the just deleted text before the quote. + * `l` - Move the cursor right one place (on top of the opening quote). + * `2x` - Delete the two quotes. + + _Change single quotes to double quotes_ + + `va':s/\%V'\%V/"/g` + + * `va'` - Visually select the quoted word and the quotes. + * ``:s/`` - Start a replacement. + * ``\%V'\%V` - Only match single quotes that are within the visually selected region. + * ``/"/g` - Replace them all with double quotes. + +See [Stack Overflow Ref:](https://stackoverflow.com/questions/2147875/what-vim-commands-can-be-used-to-quote-unquote-words) diff --git a/vimwiki/Quota Problems.md b/vimwiki/Quota Problems.md new file mode 100644 index 0000000..2094f42 --- /dev/null +++ b/vimwiki/Quota Problems.md @@ -0,0 +1,15 @@ +Users have an enforcing quota on */home* only – 50 GB. +If this fills up they may have problems logging in. + +View a user’s quota with `quota –v –u <username>`. + +On headnode1, you can view all usage with `xfs_quota -x -c report /home` + +If you need to change a quota (and normally you should not do this, +but rather push users towards the use of other storage, such as /beegfs) +then use e.g. + +`xfs_quota –x –c 'limit –u bsoft=60g bhard=61g username' /home` + +Otherwise, encourage users over quota to remove files. + diff --git a/vimwiki/Replacing A Failed Disk in a mdadm RAID.md b/vimwiki/Replacing A Failed Disk in a mdadm RAID.md new file mode 100644 index 0000000..8f80365 --- /dev/null +++ b/vimwiki/Replacing A Failed Disk in a mdadm RAID.md @@ -0,0 +1,63 @@ + +If disk errors are reported there may be H/W problems with the disk. Check dmesg for the following type of errors: + +`[737961.360080] raid5_end_read_request: 64 callbacks suppressed` +`[737961.360087] md/raid:md125: read error corrected (8 sectors at 2722701256 on sdc1)` +`[737961.360093] md/raid:md125: read error corrected (8 sectors at 2722701264 on sdc1)` +`[737961.360095] md/raid:md125: read error corrected (8 sectors at 2722701272 on sdc1)` +`[737961.360098] md/raid:md125: read error corrected (8 sectors at 2722701280 on sdc1)` +`[737961.360100] md/raid:md125: read error corrected (8 sectors at 2722701288 on sdc1)` +`[737961.360102] md/raid:md125: read error corrected (8 sectors at 2722701296 on sdc1)` +`[737961.360105] md/raid:md125: read error corrected (8 sectors at 2722701304 on sdc1)` +`[737961.360107] md/raid:md125: read error corrected (8 sectors at 2722701312 on sdc1)` +`[737961.360109] md/raid:md125: read error corrected (8 sectors at 2722701320 on sdc1)` +`[737961.360112] md/raid:md125: read error corrected (8 sectors at 2722701328 on sdc1)` +`[742462.760119] md: md125: data-check done.` + +Use SMART to investigate the hard drive. + +`$ smartctl -i /dev/sdc` + +The drive can be tested via the following command + +`$ smartctl -t long /dev/sdc` + +The long test will take a while, there is also a short test which can be performed. +The results can be viewed using: + +`$ smartctl -l selftest /dev/sdc` +` ` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.10.0-327.36.3.el7.x86_64] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF READ SMART DATA SECTION ===` +`SMART Self-test log structure revision number 1` +`Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error` +`# 1 Extended offline Completed: read failure 40% 21930 2722703304` + +Thus this needs to be replaced. To find it can use hdparm to get the serial number. + +`$ hdparm -i /dev/sdc | grep SerialNo` +`Model=ST2000DM001-1ER164, FwRev=CC27, SerialNo=Z4Z5QAY5` + +so before shutting down and replacing the drive mdadm is used to mark the drive as failed and it can +be removed from the raid. + +`$ mdadm --manage /dev/md0 --fail /dev/sdc1` +`$ mdadm --manage /dev/md0 --remove /dev/sdc1` + +Before the old drive is removed the partition table can be dumped using: + +`$ sfdisk -d /dev/sdc > sdc.out` + +Once the new drive has been swapped in, the old partition table can then be used on the new drive: + +`$ sfdisk -d /dev/sdc < sdc.out` + +The new disk is now ready to be included in the raid: + +`$ mdadm --manage /dev/md125 --add /dev/sdc1` + +Finally can monitor the progress of the rebuild using: + +`$ cat /proc/mdstat` diff --git a/vimwiki/SMARTCTL.md b/vimwiki/SMARTCTL.md new file mode 100644 index 0000000..d0ba1a0 --- /dev/null +++ b/vimwiki/SMARTCTL.md @@ -0,0 +1,195 @@ + + +Smartctl (Self-Monitoring, Analysis and Reporting Technology) is a command line +utility where smart disks can be checked for errors and info extracted. + + +##Example:1 Check Whether Smart Capability is enabled or not for the disk## + +`$ smartctl -i /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF INFORMATION SECTION ===` +`Model Family: Seagate Momentus 5400.6` +`Device Model: ST9320325AS` +`Serial Number: 5VD2V59T` +`LU WWN Device Id: 5 000c50 020a37ec4` +`Firmware Version: 0002BSM1` +`User Capacity: 320,072,933,376 bytes [320 GB]` +`Sector Size: 512 bytes logical/physical` +`Rotation Rate: 5400 rpm` +`Device is: In smartctl database [for details use: -P show]` +`ATA Version is: ATA8-ACS T13/1699-D revision 4` +`SATA Version is: SATA 2.6, 1.5 Gb/s` +`Local Time is: Sun Nov 16 12:32:09 2014 IST` +`SMART support is: Available - device has SMART capability.` +`SMART support is: Enabled`` + +Where `/dev/sdb` is your hard disk. + +##Example:2 Enable Smart Capability for the disk## + +`$ smartctl -s on /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF ENABLE/DISABLE COMMANDS SECTION ===` +`SMART Enabled.` + +##Example:3 Disable Smart Capability for the disk## + +`$ smartctl -s off /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF ENABLE/DISABLE COMMANDS SECTION ===` +`SMART Disabled. Use option -s with argument 'on' to enable it.` + +##Example:4 Display Detailed Smart info for the disk## + +`$ smartctl -a /dev/sdb // For IDE drive` +`$ smartctl -a -d ata /dev/sdb // For SATA drive` + +##Example:5 Display Overall health of the Disk## + +`$ smartctl -H /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF READ SMART DATA SECTION ===` +`SMART overall-health self-assessment test result: PASSED` +`Warning: This result is based on an Attribute check.` +`Please note the following marginal Attributes:` +`ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE` +`190 Airflow_Temperature_Cel 0x0022 067 045 045 Old_age Always In_the_past 33 (Min/Max 25/33)` +`` +##Example:6 Test Hard drive using long & short option.## + +__Long Test__ + +`$ smartctl --test=long /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===` +`Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".` +`Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.` +`Testing has begun.` +`Please wait 102 minutes for test to complete.` +`Test will complete after Sun Nov 16 14:29:43 2014` +`` +`Use smartctl -X to abort test.` + +OR We can redirect test output to a log file , as shown below + +`$ smartctl --test=long /dev/sdb > /var/log/long.text` + +__Short Test__ + +`$ smartctl --test=short /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===` +`Sending command: "Execute SMART Short self-test routine immediately in off-line mode".` +`Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.` +`Testing has begun.` +`Please wait 1 minutes for test to complete.` +`Test will complete after Sun Nov 16 12:51:45 2014` +`` +`Use smartctl -X to abort test.` + +OR + +`$ smartctl --test=short /dev/sdb > /var/log/short.text` + +Note : Short test will take maximum 2 minutes whereas in long test there is no time restriction because it read & verify every segment of the entire disk. + +##Example:7 To View Drive’s Self Test result## + +`$ smartctl -l selftest /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF READ SMART DATA SECTION ===` +`SMART Self-test log structure revision number 1` +`Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error` +`# 1 Short offline Completed: read failure 90% 492 210841222` +`# 2 Extended offline Completed: read failure 90% 492 210841222` + +##Example:8 Calculate Estimate time to perform test## + +`$ smartctl -c /dev/sdb` +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF READ SMART DATA SECTION ===` +`General SMART Values:` +`Offline data collection status: (0x00) Offline data collection activity` +` was never started.` +` Auto Offline Data Collection: Disabled.` +`Self-test execution status: ( 121) The previous self-test completed having` +` the read element of the test failed.` +`Total time to complete Offline ` +`data collection: ( 0) seconds.` +`Offline data collection` +`capabilities: (0x73) SMART execute Offline immediate.` +` Auto Offline data collection on/off support.` +` Suspend Offline collection upon new` +` command.` +` No Offline surface scan supported.` +` Self-test supported.` +` Conveyance Self-test supported.` +` Selective Self-test supported.` +`SMART capabilities: (0x0003) Saves SMART data before entering` +` power-saving mode.` +` Supports SMART auto save timer.` +`Error logging capability: (0x01) Error logging supported.` +` General Purpose Logging supported.` +`Short self-test routine ` +`recommended polling time: ( 1) minutes.` +`Extended self-test routine` +`recommended polling time: ( 102) minutes.` +`Conveyance self-test routine` +`recommended polling time: ( 2) minutes.` +`SCT capabilities: (0x103b) SCT Status supported.` +` SCT Error Recovery Control supported.` +` SCT Feature Control supported.` +` SCT Data Table supported.` + +##Example:9 Display Error logs of the disk## + +`$ smartctl -l error /dev/sdb` + +Sample Output + +`smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.13.0-32-generic] (local build)` +`Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org` +`` +`=== START OF READ SMART DATA SECTION ===` +`SMART Error Log Version: 1` +`ATA Error Count: 5` +` CR = Command Register [HEX]` +` FR = Features Register [HEX]` +` SC = Sector Count Register [HEX]` +` SN = Sector Number Register [HEX]` +` CL = Cylinder Low Register [HEX]` +` CH = Cylinder High Register [HEX]` +` DH = Device/Head Register [HEX]` +` DC = Device Command Register [HEX]` +` ER = Error register [HEX]` +` ST = Status register [HEX]` +`Powered_Up_Time is measured from power on, and printed as` +`DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,` +`SS=sec, and sss=millisec. It "wraps" after 49.710 days.` +`` +`Commands leading to the command that caused the error were:` +` CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name` +` -- -- -- -- -- -- -- -- ---------------- --------------------` +` 25 da 08 e7 e5 a5 4c 00 00:30:44.515 READ DMA EXT` +` 25 da 08 df e5 a5 4c 00 00:30:44.514 READ DMA EXT` +` 25 da 80 5f e5 a5 4c 00 00:30:44.502 READ DMA EXT` +` 25 da f0 5f e6 a5 4c 00 00:30:44.496 READ DMA EXT` +` 25 da 10 4f e6 a5 4c 00 00:30:44.383 READ DMA EXT` + diff --git a/vimwiki/SSH.md b/vimwiki/SSH.md new file mode 100644 index 0000000..2482ec1 --- /dev/null +++ b/vimwiki/SSH.md @@ -0,0 +1,16 @@ +SSH provides a secure channel over an unsecured network in a client-server +architecture, connecting an SSH client application with an SSH server. Common +applications include remote command-line login and remote command execution, +but any network service can be secured with SSH. The protocol specification +distinguishes between two major versions, referred to as SSH-1 and SSH-2. + +[Set up passwordless SSH](Set up passwordless SSH) + +[Examples](Examples) + +[Problems](Problems) + + + + + diff --git a/vimwiki/Science.md b/vimwiki/Science.md new file mode 100644 index 0000000..adf0489 --- /dev/null +++ b/vimwiki/Science.md @@ -0,0 +1,20 @@ +## Science ## + + |----------------------|---------------------------------------------------| + | App Name | ipk | + |----------------------|---------------------------------------------------| + | Physics Encyclopedia | com.scienceapps.physicsencyclopedia_1.0.0_all.ipk | + | SkyORB | com.realtechvr.app.skyorb_1.7.3_all.ipk | + | Moon Info | de.roboter-teile.moon_1.0.6_all.ipk | + | Lunar Pal | com.andytevans.lunarpal_1.2.1_all.ipk | + | Simple PSE Full | de.diplphy.simplpse_1.6.0_all.ipk | + | Eponyms | net.palmdoc.eponyms_2.3.0_all.ipk | + | RPN Scientific | com.spapp.rpnscientific_0.10.21_all.ipk | + | RPN Calculator | com.chrismondok.rpncalc_1.6.6_all.ipk | + | Calculator | de.arkandos.calculator_1.2.2_all.ipk | + | Graphing Calculator | com.willculus.ct8450_1.7.0_all.ipk | + | What's Shaking | com.kliktrayllc.whatsshaking_1.10.2014.ipk | + |----------------------|---------------------------------------------------| + + + diff --git a/vimwiki/Servers.md b/vimwiki/Servers.md new file mode 100644 index 0000000..79f5717 --- /dev/null +++ b/vimwiki/Servers.md @@ -0,0 +1,22 @@ +The cluster depends on a number of servers. + +`uhhpc` -- our administrative login machine. This runs +the job control systems, the system that forwards ssh +connections to headnode1 or headnode2, the web server, +a MariaDB server, and the LDAP server which controls +user accounts. If it goes down the system is probably unusable. + +`headnode1` -- normal user login machine 1, serves /home. +If it goes down the cluster is not usable for normal users. + +`headnode2` -- normal user login machine 2, serves /soft +and runs some licence servers. Software won`t be available if this goes down. + +`stri-server` -- legacy main NFS server. If it goes down +some NFS volumes won`t be available. + +`lofar-server` aka lofar.herts.ac.uk. Login machine for +LOFAR-UK users. Serves /data/lofar. If it goes down LOFAR users will complain. + +`cair-cluster` aka cair-cluster.herts.ac.uk. Login machine and +server for CACP (formerly CAIR) users. If it goes down those users will complain. diff --git a/vimwiki/Set up DHCP or static IP Address from CLI.md b/vimwiki/Set up DHCP or static IP Address from CLI.md new file mode 100644 index 0000000..96a88d8 --- /dev/null +++ b/vimwiki/Set up DHCP or static IP Address from CLI.md @@ -0,0 +1,52 @@ +This guide will show how to setup DHCP or static IP address from command line. +For full details see [the blackmoreops site:](https://www.blackmoreops.com/2015/03/26/setup-dhcp-or-static-ip-address-from-command-line-in-linux/) + +1. STOP and START Networking service + + `# /etc/init.d/networking stop` + + `# /etc/init.d/networking start` + + In systems using systemd, then use the following instead: + `# systemctl stop network.service` + + `# systemctl start network.service` + +2. STOP and START Network-Manager + `# systemctl stop NetworkManager.serviced` + + `# systemctl start NetworkManager.serviced` + +3. Bring up network interface + `# ifconfig eth0 up` + + or + + `ifup eth0` + + At this point the interface doesn't have an IP address + assigned as can be checked by the following command: + + `# ifconfig eth0` + +4. Setting up IP Address via DHCP + `# echo "iface eth0 inet dhcp >> /etc/network/interfaces"` + + and then bring up the interface as in previous step. + +5. Setting up Static IP + `# ifconfig eth0 192.168.43.226` + `# ifconfig eth0 netmask 255.255.255.0` + `# ifconfig eth0 broadcast 192.168.43.255` + ` route add default gw 192.168.43.1 eth0` + +6. Alternative way of setting up Static IP + `# echo -e “iface eth0 inet dhcp\n address 10.1.1.2\n netmask 255.255.255.0\n gateway 10.1.1.1″>>/etc/network/interfaces` + +7. Fix missing Default Gateway + `# ping 8.8.8.8` + +8. Setting up Nameserver/DNS + `# echo “nameserver 8.8.8.8\n nameserver 8.8.4.4″ >>/etc/resolv.conf` + + diff --git a/vimwiki/Set up passwordless SSH.md b/vimwiki/Set up passwordless SSH.md new file mode 100644 index 0000000..d3dc53c --- /dev/null +++ b/vimwiki/Set up passwordless SSH.md @@ -0,0 +1,25 @@ + +##SSH Passwordless Login using Keygen## + +1. _Create authentication ssh-keygen keys on local machine_ + + `$ ssh-keygen -t rsa` + + This creates two key files in your .ssh directory, + one private and one public, id_rsa and id_rsa.pub respectively. + +2. _Create .ssh directory on remote machine_ + + `$ ssh user@remote mkdir -p ~/.ssh` + +3. _Upload the generated public key to remote machine_ + + `$ cat ~/.ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'` + +4. _Set permissions on remote machine_ + + `$ ssh user@remote "chmod 700 ~/ssh ; chmod 640 ~/.ssh/authorized_keys"` + +5. _Login to remote machine without password_ + + `ssh user@remote` diff --git a/vimwiki/System.md b/vimwiki/System.md new file mode 100644 index 0000000..38a6459 --- /dev/null +++ b/vimwiki/System.md @@ -0,0 +1,64 @@ +## System ## + + |-----------------------------------------------|--------------------------------------------------------------| + | App Name | ipk | + |-----------------------------------------------|--------------------------------------------------------------| + | Sounds & Ringtones | - | + | Screen & Lock | - | + | Accounts | - | + | Preferences | - | + | Date & Time | - | + | Text Assist | - | + | Location Services | - | + | Regional Settings | - | + | Wifi | - | + | Bluetooth | - | + | FileMgr | ca.canucksoftware.filemgr_2.0.9_all.ipk | + | Clock Sync | de.content754.clocksync_1.3.0_all.ipk | + | File Explorer | de.pcworldsoftware.fileexpl_1.1.1_all.ipk | + | Wifi TP File Browser | com.prenewbie.wifitpbrowser_0.1.5_all.ipk | + | wIRC | org.webosinternals.catalog.wirc_0.4.6_all.ipk | + | ScanCode | de.omoco.scancode_1.0.0_all.ipk | + | PreVPNc | cz.karry.vpnc_0.1.4_all.ipk | + | FreeTether Cleaner | com.mobileteck.freetether.cleaner_1.0.0_all.ipk | + | Archive Manager | de.pcworldsoftware.archivemgr_1.1.2_all.ipk | + | Show Properties | com.palm.org.webosinternals.showprops_0.3.0_all.ipk | + | Certificate Grabber | com.grabber.basiccertgrabber_0.5.8_all.ipk | + | Dr. Battery | de.somline.drbattery_0.1.5_arm.ipk | + | freeTether | org.webosinternals.freetether_1.2.0_arm.ipk | + | OpenSSL Updater | mobi.optware.openssl_0.9.8.12-4_armv7.ipk | + | Lumberjack | org.webosinternals.lumberjack_0.5.0_arm.ipk | + | Internalz Pro | ca.canuckcoding.internalz_1.1.2_all.ipk | + | Export Messages | info.mobo_.exportmessages_1.0.6_all_0.ipk | + | Export Notes | info.mobo_.exportnotes_1.0.0_all.ipk | + | Mode Switcher | com.palm.org.e-lnx.wee.apps.modeswitcher_1.1.1_all.ipk | + | Netstat | org.daemon.de.netstat_1.0.11_all.ipk | + | P2Snippets | com.p2labs.p2snippets_1.0.4_all.ipk | + | Save/Restore | org.webosinternals.saverestore_1.6.0_arm.ipk | + | Tweaks | org.webosinternals.tweaks_3.0.1_all.ipk | + | webOS Quick Actions | eu.medesimo.quickactions_1.1.1_all.ipk | + | Net Speed | com.futurepr0n.netspeedhd_0.0.4_all.ipk | + | Govnah | org.webosinternals.govnah_1.3.9_arm.ipk | + | What Is My IP? | org.netwhiz.whatismyip_0.1.0_all_1.ipk | + | JStop | com.palm.biz.sketchyplace.jstop_0.2.9_all.ipk | + | Impostah | org.webosinternals.impostah_0.9.20_arm.ipk | + | Tailor | org.webosinternals.tailor_0.3.0_all.ipk | + | GAuth | com.gregstoll.gauth_1.1.1_all.ipk | + | Nodoze | com.palm_.app_.com_.pfountz.nodoze_0.6.3_all_0.ipk | + | Wifi File Sharing | com.shiftyaxel.wifisharing_1.4.0_all.ipk | + | Easy Samba | com.shiftyaxel.easysamba_1.1.2_all_0.ipk | + | Homebrew JS service Framework | ca.canucksoftware.js-service-framework_1.0.2_all_1.ipk | + | Optware Advanced Linux Command Line Installer | mobi.optware.ipkg-opt_0.99.163-16_armv7.ipk | + | Optware Bootstrap | org.webosinternals.optware_1.6.1_all.ipk | + | Media Indexer Refresh | de.metaviewsoft.mptagger_0.1.0_all.ipk | + | TouchVol | com.wordpress.touchcontrol.touchvol_0.1.5_all.ipk | + | Audio Switch | com.palm.nl.itura.audioswitch_1.0.0_all.ipk | + | MsgTmpl | info.lebelt.msgtmpl_1.0.1_all.ipk | + | UberKernel (Pre3) | org.webosinternals.kernels.uber-kernel-pre3_2.2.4-38_arm.ipk | + | wTermt | us.ryanhope.wterm_0.4.0-2_arm.ipk | + | Speech Dispatcher | org.webosinternals.speechd_0.7.1-11_armv7.ipk | + | xwTweak | com.xwteam.app.xwtweak_0.2.0_all.ipk | + | WHOIS Mobile | com.ludexmarketing.whois_0.5.2_all.ipk | + | Brightness Unlinked | com.palm_.app_.brightnessunlinked_0.3.3_all.ipk | + |-----------------------------------------------|--------------------------------------------------------------| + diff --git a/vimwiki/TempNotes.md b/vimwiki/TempNotes.md new file mode 100644 index 0000000..5281798 --- /dev/null +++ b/vimwiki/TempNotes.md @@ -0,0 +1,17 @@ +this is a test + +20171118-232249 here are more words +20171118-232421 here are even more words +20171118-232427 cat - +20171118-235323 cat - +20171118-235500 last one +kkkkkkkkk + +20171119-001427 +$(cat -) + + +20171119-005319 cat - + +20171119-010003 + diff --git a/vimwiki/Tmux.md b/vimwiki/Tmux.md new file mode 100644 index 0000000..f65e633 --- /dev/null +++ b/vimwiki/Tmux.md @@ -0,0 +1,21 @@ +# Using shell scripting to setup your tmux environment # + +Can use a simple bootstrap script to setup tmux environment and log into it. +example script + +`#!/bin/sh` +`tmux new-session -d -s hawkhost` + +`tmux new-window -t hawkhost:1 -n 'Server1' 'ssh root@10.x.x.x'` +`tmux new-window -t hawkhost:2 -n 'Server2' 'ssh root@10.x.x.x'` +`tmux new-window -t hawkhost:3 -n 'Server3' 'ssh root@10.x.x.x'` +`tmux new-window -t hawkhost:4 -n 'Server4' 'ssh root@10.x.x.x'` +`tmux new-window -t hawkhost:5 -n 'Server5' 'ssh root@10.x.x.x'` + +`tmux select-window -t hawkhost:1` +`tmux -2 attach-session -t hawkhost` + + +`new-session -d -s hawkhost` creates new session, names it and detaches it. +The new-window commands create 5 new windows and executes the commands. +The last two commands sets the active window and then attaches to the session diff --git a/vimwiki/Training.md b/vimwiki/Training.md new file mode 100644 index 0000000..032c440 --- /dev/null +++ b/vimwiki/Training.md @@ -0,0 +1,16 @@ +## Training/Sports ## + + |-------------------|------------------------------------------------| + | App Name | ipk | + |-------------------|------------------------------------------------| + | ESPN Score Center | com.espn.app.scorecenter_1.0.5_all.ipk | + | Sports Live | com.moresol.live.sports_2.1.8_all.ipk | + | MMA Edition | com.mmaedition_1.0.3_all.ipk | + | IntervalGym | com.lieblsoftware.pregym_1.5.0_all.ipk | + | Titan Stopwatch | com.lieblsoftware.titanstopwatch_1.3.5_all.ipk | + | Recipes Madness | com.mobile.recipesmadness_2.1.0_all.ipk | + | LFPre | com.emsoft.lfpre_1.0.5.ipk | + | Learn to Run | org.ulti.dev.mobile.learn2run_2.2.0_all.ipk | + |-------------------|------------------------------------------------| + + diff --git a/vimwiki/Troubleshooting - Apt.md b/vimwiki/Troubleshooting - Apt.md new file mode 100644 index 0000000..4b3513a --- /dev/null +++ b/vimwiki/Troubleshooting - Apt.md @@ -0,0 +1,9 @@ + +After running +> apt-get update: +> ... +> Reading package lists... Done +> W: Problem unlinking the file q - Clean (21: Is a directory) + + +Now and then something gets corrupted with apt. To fix this delete the directory /var/lib/apt/lists. diff --git a/vimwiki/UPS in Server Room.md b/vimwiki/UPS in Server Room.md new file mode 100644 index 0000000..7e54a43 --- /dev/null +++ b/vimwiki/UPS in Server Room.md @@ -0,0 +1,4 @@ +If an alarm is triggered from the UPS in the server room (beeping), +check the console on the front. If it claims that the battery has +failed a test, reschedule another test and this will cancel the alarm. +The test can be scheduled by going through the menu items on the console. diff --git a/vimwiki/Uninstall via setup.py b/vimwiki/Uninstall via setup.py new file mode 100644 index 0000000..2257200 --- /dev/null +++ b/vimwiki/Uninstall via setup.py @@ -0,0 +1,12 @@ + +To uninstall a python package which has been installed via `python setup.py install` +you have to remove all files manually. If you don't know which files were installed, +you can reinstall the package with the `--record` option to see what was included. +e.g. + +`python setup.py install --record list.txt` + +You can examine the list and then use xargs for the removal: + +`cat list.txt | xargs rm -rf` + diff --git a/vimwiki/Uninstall via setup.py.md b/vimwiki/Uninstall via setup.py.md new file mode 100644 index 0000000..1951c78 --- /dev/null +++ b/vimwiki/Uninstall via setup.py.md @@ -0,0 +1,11 @@ + +To uninstall a python package which has been installed via `python setup.py install` +you have to remove all files manually. If you don't know which files were installed, +you can reinstall the package with the `--record` option to see what was included. +e.g. + +`python setup.py install --record list.txt` + +You can examine the list and then use xargs for the removal: + +`cat list.txt | xargs rm -rf` diff --git a/vimwiki/UoH.md b/vimwiki/UoH.md new file mode 100644 index 0000000..3a08f14 --- /dev/null +++ b/vimwiki/UoH.md @@ -0,0 +1,22 @@ +[UPS in Server Room](UPS in Server Room) + +[Procurement](Procurement) + +[IC and STRI Displays](IC and STRI Displays ) + +[Exchange Email Settings](Email Settings) + +[Libcrypto segfault automount](Libcrypto segfault automount) + +[PAM Intranet Access and ADFS Certificate Expiry](PAM Intranet Access and ADFS Certificate Expiry) + +[Cluster SysAdmin Notes](Cluster SysAdmin Notes) + +[Blocked IP addess](Blocked IP addess) + +[XMA](XMA) + + + + + diff --git a/vimwiki/Usage.md b/vimwiki/Usage.md new file mode 100644 index 0000000..4e5a319 --- /dev/null +++ b/vimwiki/Usage.md @@ -0,0 +1,205 @@ + +# Introduction # + +Simple code snippets to get you started + +## Loading a PE file ## + +Import the module and parse a file. +``` +import pefile +pe = pefile.PE(‘/path/to/pefile.exe’) +``` + +Optionally, setting the _fast\_load_ argument to _True_ will prevent parsing the directories. In large PE files this can make loading significantly faster and it might be a good idea to use it none of the information from the data directories is needed. + +``` +import pefile +pe = pefile.PE(‘/path/to/pefile.exe’, fast_load=True) +``` + +A later call to the _full\_load()_ method would parse the missing information. + + +It's also possible to just parse raw PE data: + +``` +pe = pefile.PE(data=str_object_with_pe_file_data) +``` + + + +## Reading and writing standard header members ## + +Once the PE file is successfully parsed, the data is readily available as attributes of the PE instance. + +``` +pe.OPTIONAL_HEADER.AddressOfEntryPoint +pe.OPTIONAL_HEADER.ImageBase +pe.FILE_HEADER.NumberOfSections +``` + +All of these values support assignment + +``` +pe.OPTIONAL_HEADER.AddressOfEntryPoint = 0xdeadbeef +``` + +and a subsequent call to + +``` +pe.write(filename='file_to_write.exe') +``` + +will write the modified file to disk. + +All the structures and members defined in the PE format should be available with the same names. Some convenient shortcuts exist, for instance the _sections_ list. Usually, all the structures containing a member _Characteristics_ (or similar fields of flags) will contain attributes set to _True_ or _False_ according to the value of the corresponding flag. + +**Notes about the write support** + +_Starting from pefile 1.2 it's possible to write back any changes done to the PE file. One has to be careful with this functionality as it will not be very intelligent reconstructing the PE file. That is, it will not handle displacing structures if that would be needed because a new section/structure has been added._ +_The rule of thumb is, if there's room for an additional header/structure to fit then there'll be no problem and pefile will write it._ +_All other modifications, i.e. changing individual values in header/structure members should work well._ +_One possible useful application of this could be to correct malformed headers used by some malware in order to cause certain analysis tools to malfunction._ + + +## Iterating through the sections ## + +Sections are added to a list accesible as the attribute _sections_ in the PE instance. +The common structure members of the section header are reachable as attributes. + +``` +for section in pe.sections: + print (section.Name, hex(section.VirtualAddress), + hex(section.Misc_VirtualSize), section.SizeOfRawData ) +``` + + +#### Output #### + +``` +('.text', '0x1000L', '0x6D72L', 28160L) +('.data', '0x8000L', '0x1BA8L', 1536L) +('.rsrc', '0xA000L', '0x8948L', 35328L) +``` + + +## Listing the imported symbols ## + +Each directory, if it exists in the PE file being processed, has an entry as _DIRECTORY\_ENTRY\_directoryname_ in the PE instance. The imported symbols can be listed as follows: + +``` +# If the PE file was loaded using the fast_load=True argument, we will need to parse the data directories: +pe.parse_data_directories() + +for entry in pe.DIRECTORY_ENTRY_IMPORT: + print entry.dll + for imp in entry.imports: + print '\t', hex(imp.address), imp.name +``` + + +#### Output #### + +``` +comdlg32.dll + 0x10012A0L PageSetupDlgW + 0x10012A4L FindTextW + 0x10012A8L PrintDlgExW +[snip] +SHELL32.dll + 0x1001154L DragFinish + 0x1001158L DragQueryFileW +``` + + +## Listing the exported symbols ## + +Similarly, the exported symbols can be listed as follows: + +``` +for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols: + print hex(pe.OPTIONAL_HEADER.ImageBase + exp.address), exp.name, exp.ordinal +``` + + +#### Output #### + +``` +0x7ca0ab4f SHUpdateRecycleBinIcon 336 +0x7cab44c0 SHValidateUNC 173 +0x7ca7b0aa SheChangeDirA 337 +0x7ca7b665 SheChangeDirExA 338 +0x7ca7b3e1 SheChangeDirExW 339 +0x7ca7aec6 SheChangeDirW 340 +0x7ca8baae SheConvertPathW 341 +``` + + +## Dumping all the information ## + +``` +print pe.dump_info() +``` + +Will produce a full textial dump of all the parsed information. Check FullDump0x90, [FullDumpTinyPE](FullDumpTinyPE.md) or FullDumpKernel32 for examples. + + +## Retrieving the bytes at the entry point ## + +We can use _pefile_ together with tools like [pydasm](http://dkbza.org/pydasm.html) to build a small disassembler. A toy example might look like the following. + +We first fetch the entry point address, the retrieve 100 bytes starting at the entry point and we loop through the data disassembling as we go: + +``` +ep = pe.OPTIONAL_HEADER.AddressOfEntryPoint +ep_ava = ep+pe.OPTIONAL_HEADER.ImageBase +data = pe.get_memory_mapped_image()[ep:ep+100] +offset = 0 +while offset < len(data): + i = pydasm.get_instruction(data[offset:], pydasm.MODE_32) + print pydasm.get_instruction_string(i, pydasm.FORMAT_INTEL, ep_ava+offset) + offset += i.length +``` + + +#### Output #### + +``` +push byte 0x70 +push dword 0x1001888 +call 0x1006ca8 +xor ebx,ebx +push ebx +mov edi,[0x100114c] +call edi +cmp word [eax],0x5a4d +jnz 0x1006b1d +mov ecx,[eax+0x3c] +add ecx,eax +cmp dword [ecx],0x4550 +jnz 0x1006b1d +movzx eax,[ecx+0x18 +``` + + +## Dumping all the information ## + +Sometimes we might not want to process an entire file if it's very large. Parsing can be time consuming in some cases an we might only be interested in a subset of the information provided by the headers and directories. + +It is possible to indicate _pefile_ to only load a minimal set of the headers (up to the NT Headers) with the **fast\_load** keyword argument and leave the directories unprocessed. The directories can be parsed later on, on demand. + +The following example loads the basic headers and then goes on to parse most of the directories avoiding the relocation information ( the line could have been left out altogether ). + +``` +pe = pefile.PE(os.sys.argv[1], fast_load=True) +pe.parse_data_directories( directories=[ + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_EXPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_RESOURCE'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_DEBUG'], +# pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_BASERELOC'], # Do not parse relocations + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_TLS'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT'] ] ) +``` diff --git a/vimwiki/UsageExamples.md b/vimwiki/UsageExamples.md new file mode 100644 index 0000000..98afcd1 --- /dev/null +++ b/vimwiki/UsageExamples.md @@ -0,0 +1,204 @@ +# Introduction # + +Simple code snippets to get you started + +## Loading a PE file ## + +Import the module and parse a file. +``` +import pefile +pe = pefile.PE(‘/path/to/pefile.exe’) +``` + +Optionally, setting the _fast\_load_ argument to _True_ will prevent parsing the directories. In large PE files this can make loading significantly faster and it might be a good idea to use it none of the information from the data directories is needed. + +``` +import pefile +pe = pefile.PE(‘/path/to/pefile.exe’, fast_load=True) +``` + +A later call to the _full\_load()_ method would parse the missing information. + + +It's also possible to just parse raw PE data: + +``` +pe = pefile.PE(data=str_object_with_pe_file_data) +``` + + + +## Reading and writing standard header members ## + +Once the PE file is successfully parsed, the data is readily available as attributes of the PE instance. + +``` +pe.OPTIONAL_HEADER.AddressOfEntryPoint +pe.OPTIONAL_HEADER.ImageBase +pe.FILE_HEADER.NumberOfSections +``` + +All of these values support assignment + +``` +pe.OPTIONAL_HEADER.AddressOfEntryPoint = 0xdeadbeef +``` + +and a subsequent call to + +``` +pe.write(filename='file_to_write.exe') +``` + +will write the modified file to disk. + +All the structures and members defined in the PE format should be available with the same names. Some convenient shortcuts exist, for instance the _sections_ list. Usually, all the structures containing a member _Characteristics_ (or similar fields of flags) will contain attributes set to _True_ or _False_ according to the value of the corresponding flag. + +**Notes about the write support** + +_Starting from pefile 1.2 it's possible to write back any changes done to the PE file. One has to be careful with this functionality as it will not be very intelligent reconstructing the PE file. That is, it will not handle displacing structures if that would be needed because a new section/structure has been added._ +_The rule of thumb is, if there's room for an additional header/structure to fit then there'll be no problem and pefile will write it._ +_All other modifications, i.e. changing individual values in header/structure members should work well._ +_One possible useful application of this could be to correct malformed headers used by some malware in order to cause certain analysis tools to malfunction._ + + +## Iterating through the sections ## + +Sections are added to a list accesible as the attribute _sections_ in the PE instance. +The common structure members of the section header are reachable as attributes. + +``` +for section in pe.sections: + print (section.Name, hex(section.VirtualAddress), + hex(section.Misc_VirtualSize), section.SizeOfRawData ) +``` + + +#### Output #### + +``` +('.text', '0x1000L', '0x6D72L', 28160L) +('.data', '0x8000L', '0x1BA8L', 1536L) +('.rsrc', '0xA000L', '0x8948L', 35328L) +``` + + +## Listing the imported symbols ## + +Each directory, if it exists in the PE file being processed, has an entry as _DIRECTORY\_ENTRY\_directoryname_ in the PE instance. The imported symbols can be listed as follows: + +``` +# If the PE file was loaded using the fast_load=True argument, we will need to parse the data directories: +pe.parse_data_directories() + +for entry in pe.DIRECTORY_ENTRY_IMPORT: + print entry.dll + for imp in entry.imports: + print '\t', hex(imp.address), imp.name +``` + + +#### Output #### + +``` +comdlg32.dll + 0x10012A0L PageSetupDlgW + 0x10012A4L FindTextW + 0x10012A8L PrintDlgExW +[snip] +SHELL32.dll + 0x1001154L DragFinish + 0x1001158L DragQueryFileW +``` + + +## Listing the exported symbols ## + +Similarly, the exported symbols can be listed as follows: + +``` +for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols: + print hex(pe.OPTIONAL_HEADER.ImageBase + exp.address), exp.name, exp.ordinal +``` + + +#### Output #### + +``` +0x7ca0ab4f SHUpdateRecycleBinIcon 336 +0x7cab44c0 SHValidateUNC 173 +0x7ca7b0aa SheChangeDirA 337 +0x7ca7b665 SheChangeDirExA 338 +0x7ca7b3e1 SheChangeDirExW 339 +0x7ca7aec6 SheChangeDirW 340 +0x7ca8baae SheConvertPathW 341 +``` + + +## Dumping all the information ## + +``` +print pe.dump_info() +``` + +Will produce a full textial dump of all the parsed information. Check FullDump0x90, [FullDumpTinyPE](FullDumpTinyPE.md) or FullDumpKernel32 for examples. + + +## Retrieving the bytes at the entry point ## + +We can use _pefile_ together with tools like [pydasm](http://dkbza.org/pydasm.html) to build a small disassembler. A toy example might look like the following. + +We first fetch the entry point address, the retrieve 100 bytes starting at the entry point and we loop through the data disassembling as we go: + +``` +ep = pe.OPTIONAL_HEADER.AddressOfEntryPoint +ep_ava = ep+pe.OPTIONAL_HEADER.ImageBase +data = pe.get_memory_mapped_image()[ep:ep+100] +offset = 0 +while offset < len(data): + i = pydasm.get_instruction(data[offset:], pydasm.MODE_32) + print pydasm.get_instruction_string(i, pydasm.FORMAT_INTEL, ep_ava+offset) + offset += i.length +``` + + +#### Output #### + +``` +push byte 0x70 +push dword 0x1001888 +call 0x1006ca8 +xor ebx,ebx +push ebx +mov edi,[0x100114c] +call edi +cmp word [eax],0x5a4d +jnz 0x1006b1d +mov ecx,[eax+0x3c] +add ecx,eax +cmp dword [ecx],0x4550 +jnz 0x1006b1d +movzx eax,[ecx+0x18 +``` + + +## Dumping all the information ## + +Sometimes we might not want to process an entire file if it's very large. Parsing can be time consuming in some cases an we might only be interested in a subset of the information provided by the headers and directories. + +It is possible to indicate _pefile_ to only load a minimal set of the headers (up to the NT Headers) with the **fast\_load** keyword argument and leave the directories unprocessed. The directories can be parsed later on, on demand. + +The following example loads the basic headers and then goes on to parse most of the directories avoiding the relocation information ( the line could have been left out altogether ). + +``` +pe = pefile.PE(os.sys.argv[1], fast_load=True) +pe.parse_data_directories( directories=[ + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_EXPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_RESOURCE'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_DEBUG'], +# pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_BASERELOC'], # Do not parse relocations + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_TLS'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT'], + pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT'] ] ) +```
\ No newline at end of file diff --git a/vimwiki/User Creation .md b/vimwiki/User Creation .md new file mode 100644 index 0000000..9bc39ae --- /dev/null +++ b/vimwiki/User Creation .md @@ -0,0 +1,29 @@ +To create a user on the cluster do `sudo /root/ldifs/addldapuser.py` +This will end by prompting you for the LDAP password, which is the same as the normal root password. + +__When creating a user:__ + + Make sure you have a record of the user’s having accepted the terms of use – this is a GDPR requirement + + Check that you know the username that the user wants. By default this should be the LCS username, + but we allow others; obviously external users have to choose one. Please try to avoid mixed case, + non-alphanumeric characters, or names longer than about 10 characters. + + Check that you know what group the user should be in. + addldapuser.py gives a list of possible groups; we need to get this right to make sure people have + access to restricted resources. Currently useful primary groups for Herts users are: + + `1003` (CAR), + `1004` (CACP, formerly CAIR), 1005 (Computer Science), + `1006` (old Health and Human area, covering Life Sciences), + `1007` (PAM not otherwise covered), + `1008` (Engineering). + + Please never use the default group (`1000`). + + *EITHER* meet the user in person to set the password, + + *OR* set the initial user password to a random, secure string, not a word or the user’s name + (I normally use `XX99xxXX` where `X`, `x` and `9` are different upper case, lower case and numeric characters) + and send the password by a separate e-mail (we don’t want a record of It in the helpdesk system). + diff --git a/vimwiki/User Deletion.md b/vimwiki/User Deletion.md new file mode 100644 index 0000000..3c5f57b --- /dev/null +++ b/vimwiki/User Deletion.md @@ -0,0 +1,5 @@ +Use + +`sudo /root/ldifs/delldapuser username` + + diff --git a/vimwiki/VMWare.md b/vimwiki/VMWare.md new file mode 100644 index 0000000..4f9d9f1 --- /dev/null +++ b/vimwiki/VMWare.md @@ -0,0 +1,13 @@ +# Pentesting Lab Setup # + +## Guest OSes ## + +These are notes for the individual VM's used in the virtual networks for the pen-testing lab. + +[[Kali]] (Kali Linux 2.0) +[[Metasploitable]] (Metasploitable) +[[WindowsXP]] (Windows XP) +[[Windows7]] (Windows 7) +[[Windows-Server]](Windows Server) + + diff --git a/vimwiki/Vim.md b/vimwiki/Vim.md new file mode 100644 index 0000000..c442767 --- /dev/null +++ b/vimwiki/Vim.md @@ -0,0 +1,3 @@ + + +[Quickly Quote/unquote words](Quickly Quote/unquote words) diff --git a/vimwiki/Virtual Machines.md b/vimwiki/Virtual Machines.md new file mode 100644 index 0000000..1d88aa9 --- /dev/null +++ b/vimwiki/Virtual Machines.md @@ -0,0 +1,5 @@ + +[[VMWare]] - Pentest Virtual Network Setup + +[VirtualBox](VirtualBox) + diff --git a/vimwiki/VirtualBox.md b/vimwiki/VirtualBox.md new file mode 100644 index 0000000..4bd9ee0 --- /dev/null +++ b/vimwiki/VirtualBox.md @@ -0,0 +1,52 @@ + +## Remote Login into virtual guest ## + +In order to login remotely into the virtual machine: + + 1. Go into the network settings of the virtual machine. + 2. select a network adaptor and choose NAT + 3. Go into the advanced options and select port forwarding + 4. create a rule to allow ssh as follows: + + 1. Select TCP protocol + 2. Choose a port for the host (3022) + 3. Choose a port for the guest (22) + 4. Give the rule a name (SSH) + + 7. These are automatically created if the vm scripts + (in /home/vgg/bin/VirtualBoxScripts) are used. These + are accessed from the BASH vbx functions which I've created. + + 8. If you are able to log out of the vm guest but can't log in + to it remotely, then make sure that openssh-server has been + installed into the guest vm, and also that it is running. + + Use: + + `sudo systemctl status -l sshd` + + and/or: + + `sudo systemctl start sshd` + + and possibly: + + `sudo systemctl enable sshd` + + 9. You should then be able to log in via: + + `ssh -p 3022 username@127.0.0.1` + + + +## Windows10 ## + +Order Number: 100606546175 + +### Visual Studio Enterprise 2017 32/64-bit (Multilanguage) - Microsoft Imagine - Download + * Product Key: NT399-8Y76G-3DMMX-HXRTC-V8R3F + + +### Windows 10 Education, Version 1709 (Updated November 2017) 32/64-bit (English) - Microsoft Imagine - Download + * Product Key: PNDTF-3BX2F-JRRQ9-M6H7R-QGPJB + diff --git a/vimwiki/WebOS.md b/vimwiki/WebOS.md new file mode 100644 index 0000000..7737bf8 --- /dev/null +++ b/vimwiki/WebOS.md @@ -0,0 +1,10 @@ +## WebOS ## + + |--------------|---------------------------------------------| + | App Name | ipk | + |--------------|---------------------------------------------| + | App Catalog | - | + | WebOSdev2010 | com.domianofblah.webosdev2010_1.0.1_all.ipk | + | Preware | org.webosinternals.preware_1.9.14_arm.ipk | + |--------------|---------------------------------------------| + diff --git a/vimwiki/Wifi Networking CLI.md b/vimwiki/Wifi Networking CLI.md new file mode 100644 index 0000000..b117dad --- /dev/null +++ b/vimwiki/Wifi Networking CLI.md @@ -0,0 +1,71 @@ +[#](#) Connect to wifi network from command line in linux # + +For full article see [the blackmoreops site:](https://www.blackmoreops.com/2014/09/18/connect-to-wifi-network-from-command-line-in-linux/) + +1. Find Available Wifi adapters. + + `# iw dev` + +2. Check Device Status. + + Check to see if the adapter is up/down. + + `# ip link show DEVICE_NAME` + + (where DEVICE_NAME is wlan0, eth0 etc). + Look for the word UP inside the brackets in the first line of output + +3. Bring up the Wifi interface. + + `# ip link set wlan0 up` + + You can check the device status again as in step 2. + +4. Check the connection status. + + `# iw wlan0 link` + +5. Scan to Find the Wifi network. + + `# iw wlan0 scan` + +6. Generate a wpa/wpa2 config file. + + `# wpa_passphrase WIFI-SSID >> /etc/wpa_supplicant.conf` + `# networkpassword` + +7. Connect to wifi network. + + Once there is a configuration file it can be used to connect to the network. + + `# wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf` + + where -B means run in background + -D specifies the the wireless driver (wext is generic wireless driver). + + You can then check connection status as in step 4. + +8. Get an IP using dhclient. + + `# dhclient wlan0` + + IP address can then be vewrified with: + + `ip addr show wlan0` or `ifconfig wlan0` + + Then we check that we have the proper routing rules. + + `ip route show` + + If we need to add routing manually: + + `ip route add default via 10.0.0.138 dev wlan0` + +9. Test connectivity. + + Ping google to check connectivity. + + `# ping 8.8.8.8` + + + diff --git a/vimwiki/Windows-Server.md b/vimwiki/Windows-Server.md new file mode 100644 index 0000000..d8a9240 --- /dev/null +++ b/vimwiki/Windows-Server.md @@ -0,0 +1,5 @@ +## Windows Server 2003 ## + +### Network ### + +** Network Adapter: ** Custom virtual network - vmnet4 diff --git a/vimwiki/Windows7.md b/vimwiki/Windows7.md new file mode 100644 index 0000000..a2b2ee7 --- /dev/null +++ b/vimwiki/Windows7.md @@ -0,0 +1,6 @@ +## Windows 7 ## + +### Network ### + +** Network Adapter: ** Custom virtual network - vmnet3 + Custom virtual network - vmnet4 diff --git a/vimwiki/WindowsXP.md b/vimwiki/WindowsXP.md new file mode 100644 index 0000000..a41af40 --- /dev/null +++ b/vimwiki/WindowsXP.md @@ -0,0 +1,12 @@ +## Windows XP ## + +### Notes ### + +** System: ** Windows XP Home Edition SP1 + +** CD Key: ** VWPC9-HBGPC-TT92X-66QGH-M7JJG + + +### Network ### + +** Network Adapter: ** Custom virtual network - vmnet4 diff --git a/vimwiki/XMA.md b/vimwiki/XMA.md new file mode 100644 index 0000000..ca287cc --- /dev/null +++ b/vimwiki/XMA.md @@ -0,0 +1,8 @@ +##XMA User Account## + +URL: https://he.xma.co.uk/log-in + +Username: v.graffagnino@herts.ac.uk + +Password: asi2iv + diff --git a/vimwiki/conky.md b/vimwiki/conky.md new file mode 100644 index 0000000..eec9407 --- /dev/null +++ b/vimwiki/conky.md @@ -0,0 +1,20 @@ +On new installs sometimes conky script doesnt work correctly with regards to the network info to be displayed. +For instance the current network portion of the conky script is: + + { "full_text" : "${if_up wlan0}${wireless_link_qual_perc wlan0 }% @ ${wireless_essid wlan0} ${addr wlan0}${else} down${endif}" , "color" : ${if_up wlan0} "\#00ff00"${else}"\#ff0000"${endif} }, + + However the wireless_link_qual_perc variable is not displayed. + +This is because conky needs to have root priviledges to access network libraries and functionalities. If you don't want to run conky with root priviledges, +there is a way to give programs the priviledges they need without running them under root priviledges. +In this case , we need to delegate (to Conky's binary file) the appropriate root priviledges to +perform network-related tasks and to capture raw packets from wire/wireless adapter. +Two of these access categories (which conky needs) are cap_net_admin and cap_net_raw. +We need to give conky these classes of permission. This is done by the following command: + + +`sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/conky` + +The conky output is then displayed correctly. + + diff --git a/vimwiki/index.md b/vimwiki/index.md new file mode 100644 index 0000000..0eb6972 --- /dev/null +++ b/vimwiki/index.md @@ -0,0 +1,18 @@ +[[Pre3Install]] - List of apps to install on Pre3 + +[Virtual Machines](Virtual Machines) + +[LinuxAdmin](LinuxAdmin) - Configuration/tips/tweaks/installation requirements etc + +[Python](Python) + +[Vim](Vim) + +[TempNotes](TempNotes) + +[Lectures](Lectures) + +[Jokes](Jokes) + +[API](API) + diff --git a/vimwiki/mps-youtube.md b/vimwiki/mps-youtube.md new file mode 100644 index 0000000..212e053 --- /dev/null +++ b/vimwiki/mps-youtube.md @@ -0,0 +1,30 @@ + +##Core Dump - invalid pointer error## + +If you run mps-youtube and you enter an option from a menu or a query and this causes a core dump with the following error message: + +`*** Error in '$BASEDIR/anaconda3/bin/python': free(): invalid pointer: 0x00007f8fe7372bf8 ***` +`====== Backtrace ======` +`/lib64/libc.so.6(+0x721af)[0x7f8fef3891af]` +`/lib64/libc.so.6(+0x7706)[0x7f8fef38e706]` +`/lib64/libc.so.6(+0x78453)[0x7f8fef38f453]` +`$BASEDIR/anaconda3/bin/../lib/libpython3.6m.so.1.0(PyOS_Readline+0xex)[0x7f8ff024956c]` +`...` +`...` +`...` +`====== Memory map ======` +`...` +`...` +`...` +`6361 abort (core dumped) mpsyt user gotbletu` + +use the linux package manager to install the appropriate readline package. e.g. + +`sudo zypper install libreadline6` + +or + +`yum install readline readline-devel` + + +Make sure also that there is no pip or conda installed readline as this may have caused the problem due to conflict. diff --git a/vimwiki/pefile.md b/vimwiki/pefile.md new file mode 100644 index 0000000..c4cbc8c --- /dev/null +++ b/vimwiki/pefile.md @@ -0,0 +1,2 @@ + +[Usage](Usage) diff --git a/vimwiki/xdg-mime.md b/vimwiki/xdg-mime.md new file mode 100644 index 0000000..973cc52 --- /dev/null +++ b/vimwiki/xdg-mime.md @@ -0,0 +1,57 @@ +## How To Change Default Application From The Command Line ## + +xdg-open basically just looks to see which desktop environment you have and then runs gnome-open, gvfs-open, xfce-open, to open the default application for a particular +filetype. However, xdg-open works perfectly without desktop environment and therefore can be used with the i3 window manager. + +#### Example: Set Transmission as default application to open magnet file. #### + + +* Find out the MIME type string. For file MIME types, you can find it out with file command: + + ` $ file -i Broken_Blossoms.webm ` + + This provides the output as: + + `Broken_Blossoms.webm: video/webm; charset=binary` + + For the above file, MIME type is **video/webm**. + + For URI handlers, the type is x-scheme-handler/<scheme>, where <scheme> is the part of URI before colon, e.g. "http", "mailto" "irc" or "magnet". Following are examples of valid MIME types: + + `x-scheme-handler/http` + `x-scheme-handler/irc` + `x-scheme-handler/magnet` + `x-scheme-handler/mailto` + +* Find out the name of the application .desktop file. + + Installed .desktop files live under **/usr/share/applications**. + + `$ grep "Transmission" -l -r /usr/share/applications` + `/usr/share/applications/transmission-gtk.desktop` + `$` + + In case you have "strange" application that may not have the file at all, you can always create one. Easy way would be to copy an existing one, + rewrite fields you understand and remove those you don't. Refer to the specification for details. + +* Make the assignment using **xdg-mime** command: + + `$ xdg-mime default transmission-gtk.desktop x-scheme-handler/magnet` + + Note that no matter where the file actually is (/usr/share/applications, ~/.local/share/applications...), you always use only the name, not the full path. + +* Normally the command will not output anything. If you want to verify what you just did or see what is currently assigned to any MIME type without opening it: + + `$ xdg-mime query default x-scheme-handler/magnet` + `transmission-gtk.desktop` + `$` + +##### Note 1: ##### + +If you want to check out other MIME types, you can look at /etc/mime.types. It does not contain all types in the world; for example the URI handlers,i +but it could be used for "aggressive" form of handling the associations. For example: + +`grep ^video/ | cut -d\t -f1 | xargs xdg-mime default vlc.desktop` + +would associate all known video formats to VLC. + |
