From 919ed5554e995d4a97e5870d53ec4387bd4e188e Mon Sep 17 00:00:00 2001 From: napcok Date: Fri, 25 Mar 2016 19:02:03 +0100 Subject: [PATCH] import --- README.md | 8 ++ usr/bin/mabox-compositor | 70 +++++++++++ usr/bin/mabox-dropbox-pipemenu | 125 +++++++++++++++++++ usr/bin/mabox-help-pipemenu | 23 ++++ usr/bin/mabox-include.cfg | 151 +++++++++++++++++++++++ usr/bin/mabox-libreoffice-pipemenu | 41 ++++++ usr/bin/mabox-places-pipemenu | 178 +++++++++++++++++++++++++++ usr/bin/mabox-printing-pipemenu | 33 +++++ usr/bin/mabox-recent-files-pipemenu | 108 ++++++++++++++++ usr/bin/mabox-sshconfig-pipemenu | 71 +++++++++++ usr/bin/mabox-x-www-browser-pipemenu | 139 +++++++++++++++++++++ 11 files changed, 947 insertions(+) create mode 100644 README.md create mode 100755 usr/bin/mabox-compositor create mode 100755 usr/bin/mabox-dropbox-pipemenu create mode 100755 usr/bin/mabox-help-pipemenu create mode 100755 usr/bin/mabox-include.cfg create mode 100755 usr/bin/mabox-libreoffice-pipemenu create mode 100755 usr/bin/mabox-places-pipemenu create mode 100755 usr/bin/mabox-printing-pipemenu create mode 100755 usr/bin/mabox-recent-files-pipemenu create mode 100755 usr/bin/mabox-sshconfig-pipemenu create mode 100755 usr/bin/mabox-x-www-browser-pipemenu diff --git a/README.md b/README.md new file mode 100644 index 0000000..813e398 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# manjaro-pipemenus +An Openbox pipemenus for use with Manjaro Linux (port of CrunchBang pipemenus) + +Work in progress + +TO DO + +x-www-browser-pipemenus \ No newline at end of file diff --git a/usr/bin/mabox-compositor b/usr/bin/mabox-compositor new file mode 100755 index 0000000..2cb2f58 --- /dev/null +++ b/usr/bin/mabox-compositor @@ -0,0 +1,70 @@ +#!/bin/bash +# mabox-compton +# Openbox Pipe Menu for use with compton compositor +# Written for CrunchBang Linux +# by Philip Newborough +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora + +RESTART_ATTEMPTS=20 + +if ! . mabox-include.cfg 2> /dev/null; then + echo ' Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +# ------------- Set xcompmgr command options ----------------------------------- +EXECXCOMP='compton' +if glxinfo | egrep -iq 'direct rendering: yes'; then + EXECXCOMP+=' --vsync opengl' +fi + +# Edit xcompmgr settings +if [[ $1 = '--edit' ]]; then + [[ ! -f $HOME/.config/compton.conf ]] && + cp '/etc/xdg/compton.conf' "$HOME/.config/compton.conf" + + if [[ -x /usr/bin/geany ]]; then + geany "$HOME/.config/compton.conf" & + else + terminator --command='nano "$HOME/.config/compton.conf"' + fi +elif [[ $1 = '--toggle' || $1 = '--start' ]]; then # Toggle compositing with compton. + # TODO why --toggle and --start act exactly the same? + if ! pidof compton > /dev/null; then + $EXECXCOMP & + else + killall compton + fi +elif [[ $1 = '--restart' ]]; then + killall -q compton + for (( i=0; i < RESTART_ATTEMPTS; i++ )); do + pidof compton > /dev/null || # no process found! Safe to start again + break + + (( i == RESTART_ATTEMPTS - 1 )) && # still didn't die? Probably hangs. Force it to die! + killall -q -S KILL compton + + sleep 0.25 + done + mabox-compositor --start +elif [[ $1 = '--watch' ]]; then + while inotifywait -e modify "$HOME/.config/compton.conf"; do + mabox-compositor --restart # TODO move this to function? + done +else + # Output Openbox menu + menuStart + if ! pidof compton > /dev/null; then + menuItem 'Enable Compositing' 'mabox-compositor --start' + else + menuItem 'Restart Compositing' 'mabox-compositor --restart' + menuItem 'Disable Compositing' 'mabox-compositor --toggle' + menuSeparator + fi + menuItem 'Edit Compositing Settings' 'mabox-compositor --edit' + menuEnd +fi +exit 0 diff --git a/usr/bin/mabox-dropbox-pipemenu b/usr/bin/mabox-dropbox-pipemenu new file mode 100755 index 0000000..223efd0 --- /dev/null +++ b/usr/bin/mabox-dropbox-pipemenu @@ -0,0 +1,125 @@ +#!/bin/bash +# -------------------------------------------------------------------- +# An Openbox pipemenu for use with Dropbox and CrunchBang Linux. +# Written for CrunchBang Linux +# by Philip Newborough (aka corenominal) +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora +# -------------------------------------------------------------------- + +PROMPT_DELAY_TEXT='It is a good idea to add a delay before autostarting Dropbox +so that your system can establish a working network connection. + +Select the number of seconds to delay Dropbox autostarting. +Click "Cancel" if you do not want to add a delay.' +PROMPT_DELAY_VARIANTS=(FALSE 10 FALSE 20 FALSE 30 FALSE 40 FALSE 50 TRUE 60) + +USERDBDIR="$HOME/.dropbox-dist/" + + +if ! . mabox-include.cfg 2> /dev/null; then + echo ' Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +# -------------------------------------------------------------------- +# manipulation +# -------------------------------------------------------------------- + +if [[ $1 = '--start-dropbox' ]]; then + "$USERDBDIR/dropboxd" & + +elif [[ $1 = '--stop-dropbox' ]]; then + killall dropbox + +elif [[ $1 = '--install-dropbox' ]]; then + zenity --question --title='Dropbox Installation' --text 'This script will install Dropbox.\nDo you want to proceed?' || exit 0 + + if ! cd "$HOME"; then # TODO Change directory? What for? Better use absolute paths + echo "Unable to change directory to $HOME" + exit 1 + fi + + platform=$(uname -m) + platform=${platform,,} + + case $platform in + 'x86_64') + #DROPBOXURL='http://packages.crunchbang.org/waldorf-files/dropbox/64/dropbox.tar.gz' + DROPBOXURL='http://www.dropbox.com/download?plat=lnx.x86_64' + ;; + *) + #DROPBOXURL='http://packages.crunchbang.org/waldorf-files/dropbox/32/dropbox.tar.gz' + DROPBOXURL='http://www.dropbox.com/download?plat=lnx.x86' + ;; + esac + + shitTemp=$(mktemp -u) + curl -s -I "$DROPBOXURL" > "$shitTemp" + if [[ $? = 0 ]]; then # TODO this check is just wrong. It doesn't even make sure if it is possible to download a file or not. + read _ RESPONSE _ <<< $(head -n 1 "$shitTemp") + + #if [ $RESPONSE -ne "200" ]; then + if [[ RESPONSE != 302 ]]; then + zenity --warning --title='Dropbox Installation' --text 'Error, failed to contact server. Please try again later.' + exit 1 + else + dropboxFile=$(mktemp -u) + wget "$DROPBOXURL" -O "$dropboxFile" 2>&1 | \ + sed -u 's/^.* \+\([0-9]\+%\) \+\([0-9.]\+[GMKB]\) \+\([0-9hms.]\+\).*$/\1\n# Downloading... \2 (\3)/' | \ + zenity --progress --title='Installing Dropbox' --auto-kill --auto-close + fi + else + zenity --warning --title='Dropbox Installation' --text 'Error, failed to contact server. Please try again later.' + exit 1 + fi + + #extract binary + tar -xf "$dropboxFile" + #delete binary archive + rm "$dropboxFile" + + #quick sanity check + if [[ ! -x $USERDBDIR/dropboxd ]]; then + zenity --warning --title='Dropbox Installation' --text 'Oops! There was an error, Dropbox could not be installed. Sorry.' + exit 1 + fi + zenity --info --title='Dropbox Installation' --text "Dropbox has been installed to:\n$USERDBDIR" + zenity --question --title='Dropbox Installation' --text 'Dropbox can be started automatically when you start your session. Would you like to autostart Dropbox when you login?' + if [[ $? = 0 ]]; then # add to autostart! + ans=$(zenity --title='Dropbox Installation' --list --text "$PROMPT_DELAY_TEXT" --radiolist --column 'Pick' --column 'Seconds:' "${PROMPT_DELAY_VARIANTS[@]}") + if [[ $? = 0 ]]; then + echo >> "$HOME/.config/openbox/autostart" + echo '# Autostart the Dropbox deamon' >> "$HOME/.config/openbox/autostart" + echo "(sleep ${ans}s && \"\$HOME/.dropbox-dist/dropboxd\") &" >> "$HOME/.config/openbox/autostart" + echo >> "$HOME/.config/openbox/autostart" + fi + fi + zenity --question --title='Dropbox Installation' --text 'Do you wish to start the Dropbox client now?' || exit 0 + + "$USERDBDIR/dropboxd" & +else + # pipemenu stuff + menuStart + if [[ ! -d $USERDBDIR ]]; then + menuItem 'Install Dropbox' 'mabox-dropbox-pipemenu --install-dropbox' + menuSeparator + menuItem 'Find out more about Dropbox' 'x-www-browser http://db.tt/5mJg9lb' + else + [[ -d $HOME/Dropbox ]] && + menuItem 'Open Dropbox Folder' 'thunar $HOME/Dropbox' + + if ! pidof dropbox > /dev/null; then + menuItem 'Start Dropbox' 'mabox-dropbox-pipemenu --start-dropbox' + else + menuItem 'Stop Dropbox' 'mabox-dropbox-pipemenu --stop-dropbox' + fi + menuSeparator + menuItem 'Launch Dropbox Website' 'x-www-browser https://www.dropbox.com/home' + fi + menuItem 'Dropbox Terms' 'x-www-browser https://www.dropbox.com/terms' + menuEnd +fi +exit 0 diff --git a/usr/bin/mabox-help-pipemenu b/usr/bin/mabox-help-pipemenu new file mode 100755 index 0000000..7399a15 --- /dev/null +++ b/usr/bin/mabox-help-pipemenu @@ -0,0 +1,23 @@ +#!/bin/bash +if ! . mabox-include.cfg 2> /dev/null; then + echo ' Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +menuStart +menuSeparator 'Online Help' + +menuSubmenu 'ManjaroWWW' 'Manjaro Linux' +menuItem 'Manjaro Linux Homepage' 'x-www-browser https://manjaro.github.io/' +menuItem 'Manjaro Linux Wiki Pages' 'x-www-browser https://wiki.manjaro.org/' +menuItem 'Manjaro Linux Forums' 'x-www-browser https://forum.manjaro.org/' +menuSubmenuEnd + +menuSubmenu 'OpenboxWWW' 'Openbox' +menuItem 'Openbox Homepage' 'x-www-browser "http://openbox.org/wiki/Main_Page"' +menuItem 'Openbox Documentation' 'x-www-browser "http://openbox.org/wiki/Help:Contents"' +menuItem 'Openbox FAQ' 'x-www-browser "http://openbox.org/wiki/Help:FAQ"' +menuItem 'Openbox Getting Started' 'x-www-browser "http://openbox.org/wiki/Help:Getting_started"' +menuItem 'Openbox Community Portal' 'x-www-browser "http://openbox.org/wiki/Openbox:Community_portal"' +menuSubmenuEnd +menuEnd diff --git a/usr/bin/mabox-include.cfg b/usr/bin/mabox-include.cfg new file mode 100755 index 0000000..faaa6e8 --- /dev/null +++ b/usr/bin/mabox-include.cfg @@ -0,0 +1,151 @@ +# cbpp-include.cfg - Variables and functions commonly used in custom scripts for +# CrunchBang GNU/Linux . +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora + +# Usage: say text [delayAfterText] +say() { + fold -s -w 76 <<< "$1" | sed 's/^/ /' # wraps text nicely and adds two leading spaces + sleep "${2-0}" +} + +# Usage: prompt text [Y | N | Q] +prompt() { + local answer prompt default + if [[ ${2^} = Q* ]]; then + #say "$1" + read -srn1 -p "$1" answer + echo + [[ ${answer,} = 'q' ]] && return 0 || return 1 + fi + + if [[ ! $2 || ${2^} = Y* ]]; then + prompt='Y/n' + default='Y' + elif [[ ${2^} = N* ]]; then + prompt='y/N' + default='N' + fi + + while true; do + read -r -p "$1 [$prompt] " answer + + [[ ! $answer ]] && + answer=$default + + if [[ ${answer^} = Y* ]]; then + say + return 0 + elif [[ ${answer^} = N* ]]; then + say + return 1 + fi + done +} + +# Check the connection by downloading a file from ftp.debian.org. No disk space used. +# Usage: connectiontest [attempts] +# If attempt count is not specified or 0, then it will loop forever and exit(!) your main program with 1 exit status. +connectiontest() { + local TEXT_CHECKING='Checking internet connection...' + local TEXT_FAILED='Internet connection test failed!' + local TEXT_ASK_RETRY=$'\n\nThis script requires a working internet connection. Please configure your internet connection, then hit any key to continue, else hit "q" to quit.' + local TEXT_ABORT='Script aborted.' + local TEXT_OK='Internet connection test passed!' + + local -i i attempts=${1-0} + for (( i=0; i < attempts || attempts == 0; i++ )); do + say "$TEXT_CHECKING" + if wget -O - 'http://ftp.debian.org/debian/README' &> /dev/null; then + say "$TEXT_OK" 1 + return 0 + fi + say "$TEXT_FAILED" + if (( i == attempts - 1 )); then # if last attempt + return 1 + elif prompt "$TEXT_ASK_RETRY" Q; then # if user wants to quit + say "$TEXT_ABORT" 2 + (( attempts == 0 )) && exit 1 || return 1 + fi + clear + done +} + +menuStart() { + echo ' ' +} + +# Usage: menuItem label command +menuItem() { + echo " " + echo ' ' + echo ' ' + echo " $2" + echo ' ' + echo ' ' + echo ' ' +} + +# Usage: menuSeparator [label] +menuSeparator() { + if [[ $1 ]]; then + echo " " + else + echo ' ' + fi +} + +# Usage menuSubmenu id label # http://openbox.org/wiki/Help:Menus +menuSubmenu() { + echo " " +} + +menuSubmenuEnd() { + echo ' ' +} + +menuEnd() { + echo ' ' +} + +# Usage: promptInstall title description package... +promptInstall() { + while true; do # Repeat until there are no errors + if [[ $TRYAGAIN ]]; then # previous try failed + say + say "There was a problem installing ${2,,}." + say + prompt ' Hit any key to try again, or "q" to quit...' Q && return 1 + fi + local TRYAGAIN=true + + clear + say + say "INSTALL ${1^^}" + say '------------------------' + say "This script will install ${2,,}." + say + prompt ' Run the installer now?' || return 0 + + clear + connectiontest || continue + + clear + say 'Updating sources...' 1 + sudo pacman -Syu + + clear + say 'Installing package...' 1 + sudo pacman -S "${@:3}" || continue + + clear + say + say "${2^} has been installed successfully." + say + say 'Hit any key to exit...' + read -srn1 + return 0 + done +} diff --git a/usr/bin/mabox-libreoffice-pipemenu b/usr/bin/mabox-libreoffice-pipemenu new file mode 100755 index 0000000..b53641a --- /dev/null +++ b/usr/bin/mabox-libreoffice-pipemenu @@ -0,0 +1,41 @@ +#!/bin/bash +# --------------------------------------------------------------------- +# An Openbox pipemenu for use with LibreOffice and CrunchBang Linux. +# Written for CrunchBang Linux +# by Philip Newborough (aka corenominal) +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora +# --------------------------------------------------------------------- + +if ! . mabox-include.cfg 2> /dev/null; then + echo ' Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +if [[ $1 = '--install' ]]; then + terminator --title='Install LibreOffice' --command='mabox-libreoffice-pipemenu --install-lo' + +elif [[ $1 = '--install-lo' ]]; then + promptInstall 'LIBREOFFICE' 'LibreOffice' 'libreoffice-still' + +else + # Pipemenu + menuStart + + tools=('writer' 'calc' 'impress' 'draw' 'base') + + for curTool in "${tools[@]}"; do + if type "lo$curTool" &> /dev/null; then + INSTALLED=true + menuItem "${curTool^}" "lo$curTool" + fi + done + + [[ ! $INSTALLED ]] && + menuItem 'Install LibreOffice' 'mabox-libreoffice-pipemenu --install' + + menuEnd +fi +exit 0 diff --git a/usr/bin/mabox-places-pipemenu b/usr/bin/mabox-places-pipemenu new file mode 100755 index 0000000..599377a --- /dev/null +++ b/usr/bin/mabox-places-pipemenu @@ -0,0 +1,178 @@ +#!/bin/sh +# cb-places-pipemenu - a places openbox pipe menu +# Copyright (C) 2010 John Crawley +# +# 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. +# Version 2012/09/27-cb + + +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora + +# NB The shell, not bash, is invoked in the hope that +# dash will be used, as it is much faster. + +# Usage: add +# +# to your .config/openbox/menu.xml + +# or, if you want the "recent files" menu incorporated at the top, use: +# +# make sure you have mabox-recent-files-pipemenu somewhere, and enter its path below. + +# path to your "recent files" script, if you want to incorporate it: +recent_script=/usr/bin/mabox-recent-files-pipemenu + +# Command to open folders at "Browse here..." - any file manager +open_folder_cmd=pcmanfm +# Default command to open files with - others might be xdg-open, gnome-open, pcmanfm... +default_open_cmd=exo-open # exo-open comes with thunar +# Text editor of choice +text_editor=geany + +# function to open files with default open command, or alternative command for certain files +# - add other conditions to choice +open_file() { + [ -x "$1" ] && exec "$text_editor" "$1" # comment out this line if you don't want to edit executables instead of executing + #[ -x "$1" ] && exec "terminator -e" "$1" # uncomment this and comment out previous line to run executables in terminal instead of editing + [ "${1##*.}" = desktop ] && exec "$text_editor" "$1" # comment out this line if you don't want to edit .desktop files instead of executing + exec "$default_open_cmd" "$1" # use default open command if above conditions not satisfied +} + +# extra dotfiles to display in HOME folder (dotfiles are hidden by default) +# edit the list (space separated, surrounded by single quotes) or comment this line out, to taste: +shown_dotfiles='.config .local .Xdefaults .bash_aliases .bashrc .fonts.conf .gtkrc-2.0.mine .profile .xsession-errors' + +# By default, this script will display directories separately, before files. +# To change this behaviour, see NOTE1, NOTE2 and NOTE3 below, near end of page. + +####################################################################### + +case $1 in +# if "--open" option is sent as $1, open file ($2) instead of generating menu +--open) + open_file "$2" + echo "$0 : failed to open $2" >&2 + exit;; # in case exec command fails +# if "--recent" option is sent, incorporate "recent files" menu +--recent) + shift + output=' +' + if [ -x "$recent_script" ] + then + output="$output"' + +' + else + echo "$0 : cannot find executable script $recent_script" >&2 + fi;; +*) + output=' +';; +esac + +path="${1:-$HOME}" # default starting place is ~, otherwise $1 +path="$( echo "${path}"/ | tr -s '/' )" # ensure one final slash +[ -d "$path" ] || { echo "$0 : $path is not a directory" >&2; exit 1; } + +case "$path" in # only escape if string needs it +*\&*|*\<*|*\>*|*\"*|*\'*) pathe=$(sed "s/\&/\&/g;s//\>/g;s/\"/\"/g;s/'/\'/g;" < + + + + ''"$open_folder_cmd"'' ''"$pathe_apos"'' + + + + +' + +unset extra_entries directories_menu files_menu +[ "$path" = "$HOME"/ ] && extra_entries="$shown_dotfiles" +for i in "$path"* $extra_entries +do + [ -e "$i" ] || continue # only output code if file exists + shortname="${i##*/}" + case $shortname in + *\&*|*\<*|*\>*|*\"*|*\'*) shortnamee=$(sed "s/\&/\&/g;s//\>/g;s/\"/\"/g;s/'/\'/g;" <'; continue; } + files_menu="$files_menu"' + + + + ''"$0"'' --open ''"${pathe_apos}${shortnamee_apos}"'' + + +' +done + +[ -n "$directories_menu" ] && { +# NOTE2 comment out next 2 lines if you don't want "Directories" label +output="${output}"' +' +output="${output}${directories_menu}"' +'; } +[ -n "$files_menu" ] && { +# NOTE3 comment out next 2 lines if you don't want "Files" label +output="${output}"' +' +output="${output}${files_menu}"' +'; } +output="${output}"' +' +printf '%s' "$output" +exit diff --git a/usr/bin/mabox-printing-pipemenu b/usr/bin/mabox-printing-pipemenu new file mode 100755 index 0000000..f5643b5 --- /dev/null +++ b/usr/bin/mabox-printing-pipemenu @@ -0,0 +1,33 @@ +#!/bin/bash +# --------------------------------------------------------------------- +# An Openbox pipemenu for configuring printing under CrunchBang Linux. +# Written for CrunchBang Linux +# by Philip Newborough (aka corenominal) +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora +# --------------------------------------------------------------------- + +if ! . mabox-include.cfg 2> /dev/null; then + echo ' Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +if [[ $1 = '--install' ]]; then + terminator --title='Install Printer Support' --command='mabox-printing-pipemenu --install-printing' + +elif [[ $1 = '--install-printing' ]]; then + promptInstall 'PRINTING SUPPORT' 'printing support' 'manjaro-printer' + +else + # Pipemenu + menuStart + if type 'system-config-printer' &> /dev/null; then + menuItem 'Configure Printers' 'gksudo system-config-printer' + else + menuItem 'Install Printing Support' 'mabox-printing-pipemenu --install' + fi + menuEnd +fi +exit 0 diff --git a/usr/bin/mabox-recent-files-pipemenu b/usr/bin/mabox-recent-files-pipemenu new file mode 100755 index 0000000..1b685c0 --- /dev/null +++ b/usr/bin/mabox-recent-files-pipemenu @@ -0,0 +1,108 @@ +#!/bin/sh +# cb-recent-files-pipemenu - a script to parse .recently-used.xbel +# and generate openbox pipe menu +# Copyright (C) 2010 John Crawley +# +# 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. +# version 2012/07/01-cb + +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora + +# Usage: add +# +# to your .config/openbox/menu.xml, or use with mabox-places-pipemenu (see comments there) + +maximum_entries=15 # max. number of entries in menu + +####################################################################### + +# look for recently-used.xbel +if [ $XDG_DATA_HOME ] && [ -r "${XDG_DATA_HOME}/recently-used.xbel" ] +then + file_path="${XDG_DATA_HOME}/recently-used.xbel" +elif [ -r "${HOME}/.local/share/recently-used.xbel" ] +then + file_path="${HOME}/.local/share/recently-used.xbel" +elif [ -r "${HOME}/.recently-used.xbel" ] +then + file_path="${HOME}/.recently-used.xbel" +else + echo "$0: cannot find a readable recently-used.xbel file" >&2 + echo ' + +' + exit 1 +fi + +# if argument is --clear, empty .recently-used.xbel +[ "$1" = '--clear' ] && { + cat <<':EOF' > "${file_path}" + + + +:EOF + exit +} + +maximum_entries=$((maximum_entries+2)) + +pre=' + ' +post=' + ' + +files=$( tac "${file_path}" | awk -v MAX="$maximum_entries" -v PR="$pre" -v MI="$mid" -v PO="$post" 'BEGIN { + RS=""; + FS=""; +} +(NR == MAX) {exit} +!/ + + + + ''"$0"'' --clear + + + + +' +printf '%s' "$output" # printf because echo sometimes eats backslashes diff --git a/usr/bin/mabox-sshconfig-pipemenu b/usr/bin/mabox-sshconfig-pipemenu new file mode 100755 index 0000000..ac7507f --- /dev/null +++ b/usr/bin/mabox-sshconfig-pipemenu @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +import os, warnings +with warnings.catch_warnings(): + warnings.simplefilter("ignore") + from paramiko.config import SSHConfig + +cfgdir = os.getenv("HOME")+"/.ssh" +cfgfile = cfgdir+"/config" + +try: + config_file = file(cfgfile) +except IOError: + if not os.path.exists(cfgdir): + os.makedirs(cfgdir,0700) + f = open(cfgfile,'w') + o = '# SSH config file, \'man ssh_config\' for more details.\n\n' + o += '#Host example\n' + o += '# hostname example.com\n' + o += '# user joebloggs\n' + f.write(o) + f.close() + os.chmod(cfgfile, 0600) + config_file = file(cfgfile) + config = SSHConfig() + config.parse(config_file) + hosts = config._config +else: + config = SSHConfig() + config.parse(config_file) + hosts = config._config + +print '\n' + +if len(hosts) >= 2: + for h in hosts[1:]: + if h.has_key('host') and h.has_key('hostname'): + user = '' + if h.has_key('user'): + user = '-l '+h['user']+ ' ' + port = ['',''] + if h.has_key('port'): + port[0] = '-p '+h['port']+ ' ' + port[1] = ':'+h['port'] + print '' + print ' ' + print ' ' + print ' ' + print ' lxterminal -e "ssh '+user+port[0]+h['hostname']+'"' + print ' ' + print ' ' + print ' \n' + print ' ' + print ' ' + print ' ' + print ' pcmanfm ssh://'+h['hostname']+port[1] + print ' ' + print ' ' + print ' \n' + print '\n' + print '\n' + +print '' +print ' ' +print ' ' +print ' geany ~/.ssh/config' +print ' ' +print ' ' +print '\n' + +print '' diff --git a/usr/bin/mabox-x-www-browser-pipemenu b/usr/bin/mabox-x-www-browser-pipemenu new file mode 100755 index 0000000..674e0ab --- /dev/null +++ b/usr/bin/mabox-x-www-browser-pipemenu @@ -0,0 +1,139 @@ +#!/bin/bash +# --------------------------------------------------------------------- +# Written for CrunchBang Linux +# by Philip Newborough (aka corenominal) +# Ported to #!++ +# by Ben Young +# Ported to Manjaro +# by Daniel Napora +# --------------------------------------------------------------------- + + +# In order to add another browser, simply add it to this array: +TOOLS=('chromium' 'google-chrome-stable' 'opera') +# If the package needs additional configuration before installation simply create a function called setupBrowserName, it will be called automatically. + +KEY_URLS_GOOGLE=('https://dl-ssl.google.com/linux/linux_signing_key.pub' 'http://packages.crunchbangplusplus.org/chrome.pub') +KEY_URLS_OPERA=('http://deb.opera.com/archive.key' 'http://packages.crunchbangplusplus.org/opera.key') + +if ! . mabox-include.cfg 2> /dev/null; then + say 'Failed to locate mabox-include.cfg in PATH' >&2 + exit 1 +fi + +browserExists() { + for curTool in "${TOOLS[@]}"; do # if $packageName exists in tools array + [[ $curTool = "$1" ]] && + return 0 + done + say "Unable to install $1. There is no such browser that I know of." >&2 + say "You can try one of these: ${TOOLS[@]}" >&2 + return 1 +} + +addAptKey() { + clear + say 'Adding APT key...' + keyFile=$(mktemp -u) + for curKey; do + wget -O "$keyFile" "$curKey" 2> /dev/null && break; # success. No need to try other keys + say "Failed to retrieve key from $curKey . Trying another source..." + done + if [[ $? != 0 ]]; then + say 'Failed to retrieve APT key!' >&2 + return 1 + fi + sudo apt-key add "$keyFile" + rm -f "$keyFile" + return 0 +} + +setupGoogleChromeStable() { + addAptKey "${KEY_URLS_GOOGLE[@]}" || return 1 + say 'Creating APT sources file...' 1 + echo 'deb http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee '/etc/apt/sources.list.d/google-chrome.list' +} + +setupOpera() { + addAptKey "${KEY_URLS_OPERA[@]}" || return 1 + say 'Creating APT sources file...' 1 + echo 'deb http://deb.opera.com/opera/ stable non-free' | sudo tee '/etc/apt/sources.list.d/opera.list' +} + +if [[ $1 && ! $1 =~ --install-* ]]; then + browserName=${1#--} + browserExists "$browserName" || exit 1 + read -ra words <<< "${browserName//-/ }" + terminator --title="Install ${words[*]^}" --command="mabox-x-www-browser-pipemenu --install-$browserName" + +elif [[ $1 = --install-* ]]; then + packageName=${1#--install-} + browserExists "$packageName" || exit 1 + browserName=${packageName//-/ } + read -ra words <<< "$browserName" + browserName=${words[*]^} + browserNameUpper=${browserName^^} + + while true; do # do it until the package is successfully installed or user wants to exit + if [[ $TRYAGAIN ]]; then # previous try failed + say + say "There was a problem installing $browserName." + say + prompt ' Hit any key to try again, or "q" to quit...' Q && break + fi + TRYAGAIN=true + + clear + say + say "INSTALL ${browserNameUpper% BROWSER} BROWSER" + say '------------------------' + say "This script will install $browserName." + say + prompt ' Run the installer now?' || break + + clear + connectiontest 1 || continue + + setupFunctionName="setup${browserName//[^a-zA-Z]/}" # setupFunctionName should now be in format like 'setupChromiumBrowser' + if [[ $(type -t "$setupFunctionName") == 'function' ]]; then + "$setupFunctionName" || continue # run setup function if it exists + fi + + clear + say 'Updating sources...' 1 + sudo apt-get update + + clear + say 'Installing package...' 1 + sudo apt-get install -y "$packageName" || continue + + clear + say + say "$browserName has been installed successfully." + say + say 'Hit any key to exit...' + read -srn1 + break + done +else # pipemenu + menuStart + for curTool in "${TOOLS[@]}"; do + read -ra words <<< "${curTool//-/ }" + curToolName=${words[*]^} + if type "$curTool" &> /dev/null; then + INSTALLED=true + menuItem "$curToolName" "$curTool" + [[ $curToolName =~ 'Chrom' ]] && + menuItem "$curToolName (Private Mode)" "$curTool --incognito" # Incognito mode for chrome and chromium + else + menuItem "Install $curToolName" "mabox-x-www-browser-pipemenu --$curTool" + fi + done + + if [[ $INSTALLED ]]; then + menuSeparator + menuItem 'Select default browser' 'terminator --command="sudo update-alternatives --config x-www-browser"' + fi + menuEnd +fi +exit 0