mirror of
https://github.com/dustinkirkland/byobu
synced 2025-08-22 06:23:19 -07:00
screen-profiles-export: new script, for exporting a profile to systems
where screen-profiles are not installed
This commit is contained in:
parent
1900b099a4
commit
7966c0746a
2 changed files with 248 additions and 1 deletions
4
debian/changelog
vendored
4
debian/changelog
vendored
|
@ -10,11 +10,13 @@ screen-profiles (1.41) unreleased; urgency=low
|
||||||
don't use fully qualified path for lsb_release as it seems this has moved
|
don't use fully qualified path for lsb_release as it seems this has moved
|
||||||
around (see Dapper)
|
around (see Dapper)
|
||||||
* licenses updated to GPLv3 (dropped "or later" clause)
|
* licenses updated to GPLv3 (dropped "or later" clause)
|
||||||
|
* screen-profiles-export: new script, for exporting a profile to systems
|
||||||
|
where screen-profiles are not installed
|
||||||
|
|
||||||
[ James Wilcox ]
|
[ James Wilcox ]
|
||||||
* bin/updates-available: support SUSE's zypper
|
* bin/updates-available: support SUSE's zypper
|
||||||
|
|
||||||
-- Dustin Kirkland <kirkland@ubuntu.com> Sat, 28 Mar 2009 09:55:36 -0500
|
-- Dustin Kirkland <kirkland@ubuntu.com> Sat, 28 Mar 2009 11:30:38 -0500
|
||||||
|
|
||||||
screen-profiles (1.40-0ubuntu1) jaunty; urgency=low
|
screen-profiles (1.40-0ubuntu1) jaunty; urgency=low
|
||||||
|
|
||||||
|
|
245
screen-profiles-export
Executable file
245
screen-profiles-export
Executable file
|
@ -0,0 +1,245 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
#
|
||||||
|
# screen-profile-export
|
||||||
|
# Copyright (C) 2008 Canonical Ltd.
|
||||||
|
#
|
||||||
|
# Authors: Dustin Kirkland <kirkland@canonical.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, version 3 of the License.
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
|
||||||
|
# Inputs needed:
|
||||||
|
# target tarball (-f)
|
||||||
|
# .tar
|
||||||
|
# .tar.bz2
|
||||||
|
# .tar.gz
|
||||||
|
# selected profile
|
||||||
|
# choose distro (-d)
|
||||||
|
# choose light/dark (-i)
|
||||||
|
# choose color (-c)
|
||||||
|
|
||||||
|
PROG="screen-profiles"
|
||||||
|
SHARE="/usr/share/$PROG"
|
||||||
|
TMPDIR=`mktemp -d screen-profiles.XXXXXXXX` || error "Could not create a temporary directory"
|
||||||
|
|
||||||
|
# Make sure we clean up $TMPDIR if we exit for any reason
|
||||||
|
trap "rm -rf "$TMPDIR" 2>/dev/null || true" EXIT HUP INT QUIT TERM
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo
|
||||||
|
echo "Usage:"
|
||||||
|
echo " $0 [-d DISTRO] [-c COLOR] -f TARGET.tar.gz"
|
||||||
|
echo
|
||||||
|
echo "DISTRO and COLOR are obtained interactively if unspecified."
|
||||||
|
echo "TARGET.tar.gz is required"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo "ERROR: $1" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
choose() {
|
||||||
|
i=0
|
||||||
|
x=
|
||||||
|
selected=
|
||||||
|
for x in $@; do
|
||||||
|
i=$(expr $i + 1)
|
||||||
|
[ $i -lt 10 ] && i=" $i"
|
||||||
|
echo " $i. $x" 1>&2
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
count=1
|
||||||
|
while /bin/true; do
|
||||||
|
if [ $count -gt 5 ]; then
|
||||||
|
echo `gettext "ERROR: Invalid selection"`
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
count=`expr $count + 1`
|
||||||
|
if ! test $selected -gt 0 2>/dev/null; then
|
||||||
|
read -p "`gettext 'Choose'` [1 -$i]: " -r selected
|
||||||
|
elif ! test $selected -le $i 2>/dev/null; then
|
||||||
|
read -p "`gettext 'Choose'` [1 -$i]: " -r selected
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
i=0
|
||||||
|
for x in $@; do
|
||||||
|
i=$(expr $i + 1)
|
||||||
|
if [ "$i" = "$selected" ]; then
|
||||||
|
SELECTED="$x"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
status_config() {
|
||||||
|
# Generate the status configuration
|
||||||
|
# Disable the menu, since screen-profiles configurator is not available
|
||||||
|
echo "
|
||||||
|
arch=0
|
||||||
|
cpu-count=1
|
||||||
|
cpu-freq=1
|
||||||
|
ec2-cost=0
|
||||||
|
hostname=1
|
||||||
|
load-average=1
|
||||||
|
mem-available=1
|
||||||
|
mem-used=1
|
||||||
|
menu=0
|
||||||
|
reboot-required=1
|
||||||
|
release=1
|
||||||
|
updates-available=1
|
||||||
|
whoami=1"
|
||||||
|
}
|
||||||
|
|
||||||
|
hr() {
|
||||||
|
echo "###############################################################################"
|
||||||
|
}
|
||||||
|
|
||||||
|
header() {
|
||||||
|
hr
|
||||||
|
echo "# This GNU Screen profile was generated by the screen-profile-export"
|
||||||
|
echo "# program, which is part of the screen-profiles package, and contains a"
|
||||||
|
echo "# subset of the functionality available from the full package."
|
||||||
|
echo "#"
|
||||||
|
echo "# For more information, source code, questions, and bugs, see:"
|
||||||
|
echo "# * https://launchpad.net/screen-profiles"
|
||||||
|
echo "#"
|
||||||
|
echo "# Copyright (C) 2008 Canonical Ltd."
|
||||||
|
echo "#"
|
||||||
|
echo "# Author: Dustin Kirkland <kirkland@canonical.com>"
|
||||||
|
echo "#"
|
||||||
|
echo "# This program is free software: you can redistribute it and/or modify"
|
||||||
|
echo "# it under the terms of the GNU General Public License as published by"
|
||||||
|
echo "# the Free Software Foundation, version 3 of the License."
|
||||||
|
echo "#"
|
||||||
|
echo "# This program is distributed in the hope that it will be useful,"
|
||||||
|
echo "# but WITHOUT ANY WARRANTY; without even the implied warranty of"
|
||||||
|
echo "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
|
||||||
|
echo "# GNU General Public License for more details."
|
||||||
|
echo "#"
|
||||||
|
echo "# You should have received a copy of the GNU General Public License"
|
||||||
|
echo "# along with this program. If not, see <http://www.gnu.org/licenses/>."
|
||||||
|
hr
|
||||||
|
}
|
||||||
|
|
||||||
|
sources() {
|
||||||
|
# insert the common profile, replace the /var/lib exe path
|
||||||
|
echo
|
||||||
|
cat $SHARE/profiles/common | sed "s:/var/lib/$PROG/:\$HOME/.$PROG/bin/:"
|
||||||
|
hr
|
||||||
|
echo
|
||||||
|
cat $SHARE/keybindings/common
|
||||||
|
hr
|
||||||
|
echo
|
||||||
|
hr
|
||||||
|
cat "$SOURCE"
|
||||||
|
hr
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Handle command line parameters
|
||||||
|
distro=
|
||||||
|
color=
|
||||||
|
file=
|
||||||
|
while [ $# -gt 1 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-d)
|
||||||
|
distro="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
color="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
file="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -z "$file" ] && usage
|
||||||
|
[ -e "$file" -o -e "$file.tar.gz" ] && error "File exists, please remove before running [$file]"
|
||||||
|
file=`echo "$file" | sed "s:\.tar.*$::"`
|
||||||
|
file="$file".tar.gz
|
||||||
|
|
||||||
|
# Grab list of available distros and colors
|
||||||
|
distros=`find $SHARE/profiles/ -type f | xargs -i basename {} | sed "s/-.*$//" | sort -u | grep -v "common" | grep -v "plain"`
|
||||||
|
colors=`find $SHARE/profiles/ -type f | sed "s/^.*\///" | sed "s/^.*-//" | sort -u | egrep -v "common|plain"`
|
||||||
|
|
||||||
|
# Obtain selections
|
||||||
|
count=1
|
||||||
|
while /bin/true; do
|
||||||
|
if [ $count -gt 5 ]; then
|
||||||
|
echo `gettext "ERROR: Invalid selection"`
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
SOURCE="$SHARE"/profiles/"$distro"-"$color"
|
||||||
|
if [ -f "$SOURCE" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
# Try in the misc directory too
|
||||||
|
SOURCE="$SHARE"/profiles/misc/"$distro"-"$color"
|
||||||
|
if [ -f "$SOURCE" ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
echo `gettext "Select a distro: "`
|
||||||
|
choose $distros
|
||||||
|
distro=$SELECTED
|
||||||
|
echo
|
||||||
|
echo `gettext "Select a color: "`
|
||||||
|
choose $colors
|
||||||
|
color=$SELECTED
|
||||||
|
count=`expr $count + 1`
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create workspace
|
||||||
|
PROFILE="$TMPDIR/.screenrc"
|
||||||
|
STATUS="$TMPDIR/.$PROG/status"
|
||||||
|
mkdir -p "$TMPDIR/.$PROG/bin"
|
||||||
|
|
||||||
|
# Copy status scripts
|
||||||
|
cp -a /var/lib/$PROG/* "$TMPDIR/.$PROG/bin"
|
||||||
|
|
||||||
|
# Generate the monolithic profile
|
||||||
|
header > "$PROFILE"
|
||||||
|
sources >> "$PROFILE"
|
||||||
|
|
||||||
|
# Some gardening
|
||||||
|
# Drop additional "source" calls
|
||||||
|
sed -i "s:^source .*::" "$PROFILE"
|
||||||
|
# Use .screenrc instead
|
||||||
|
sed -i "s:.$PROG/profile\":\.screenrc\":" "$PROFILE"
|
||||||
|
# Drop the F9->Menu key
|
||||||
|
sed -i "s:^bindkey -k k9 screen -t help:#bindkey -k k9 screen -t help:" "$PROFILE"
|
||||||
|
|
||||||
|
# tar up the results
|
||||||
|
tar -zcf "$file" -C "$TMPDIR" . || error "Could not create archive"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Success!"
|
||||||
|
echo
|
||||||
|
echo `gettext "Profile"` ": [$distro-$color]"
|
||||||
|
echo `gettext "Archive"` ": [$file]"
|
||||||
|
echo `gettext "Extract this archive in your home directory on the target system."`
|
||||||
|
echo
|
Loading…
Add table
Add a link
Reference in a new issue