262 lines
5.4 KiB
HTML
262 lines
5.4 KiB
HTML
|
<HTML
|
|||
|
><HEAD
|
|||
|
><TITLE
|
|||
|
>The Elegant Useless Clock Prompt</TITLE
|
|||
|
><META
|
|||
|
NAME="GENERATOR"
|
|||
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
|||
|
REL="HOME"
|
|||
|
TITLE="Bash Prompt HOWTO"
|
|||
|
HREF="index.html"><LINK
|
|||
|
REL="UP"
|
|||
|
TITLE="Example Prompts"
|
|||
|
HREF="c816.html"><LINK
|
|||
|
REL="PREVIOUS"
|
|||
|
TITLE="The Floating Clock Prompt"
|
|||
|
HREF="clockt.html"><LINK
|
|||
|
REL="NEXT"
|
|||
|
TITLE="GNU Free Documentation License"
|
|||
|
HREF="gfdl.html"></HEAD
|
|||
|
><BODY
|
|||
|
CLASS="SECT1"
|
|||
|
BGCOLOR="#FFFFFF"
|
|||
|
TEXT="#000000"
|
|||
|
LINK="#0000FF"
|
|||
|
VLINK="#840084"
|
|||
|
ALINK="#0000FF"
|
|||
|
><DIV
|
|||
|
CLASS="NAVHEADER"
|
|||
|
><TABLE
|
|||
|
SUMMARY="Header navigation table"
|
|||
|
WIDTH="100%"
|
|||
|
BORDER="0"
|
|||
|
CELLPADDING="0"
|
|||
|
CELLSPACING="0"
|
|||
|
><TR
|
|||
|
><TH
|
|||
|
COLSPAN="3"
|
|||
|
ALIGN="center"
|
|||
|
>Bash Prompt HOWTO: </TH
|
|||
|
></TR
|
|||
|
><TR
|
|||
|
><TD
|
|||
|
WIDTH="10%"
|
|||
|
ALIGN="left"
|
|||
|
VALIGN="bottom"
|
|||
|
><A
|
|||
|
HREF="clockt.html"
|
|||
|
ACCESSKEY="P"
|
|||
|
>Prev</A
|
|||
|
></TD
|
|||
|
><TD
|
|||
|
WIDTH="80%"
|
|||
|
ALIGN="center"
|
|||
|
VALIGN="bottom"
|
|||
|
>Chapter 12. Example Prompts</TD
|
|||
|
><TD
|
|||
|
WIDTH="10%"
|
|||
|
ALIGN="right"
|
|||
|
VALIGN="bottom"
|
|||
|
><A
|
|||
|
HREF="gfdl.html"
|
|||
|
ACCESSKEY="N"
|
|||
|
>Next</A
|
|||
|
></TD
|
|||
|
></TR
|
|||
|
></TABLE
|
|||
|
><HR
|
|||
|
ALIGN="LEFT"
|
|||
|
WIDTH="100%"></DIV
|
|||
|
><DIV
|
|||
|
CLASS="SECT1"
|
|||
|
><H1
|
|||
|
CLASS="SECT1"
|
|||
|
><A
|
|||
|
NAME="THE-ELEGANT-USELESS-CLOCK-PROMPT"
|
|||
|
></A
|
|||
|
>12.9. The Elegant Useless Clock Prompt</H1
|
|||
|
><P
|
|||
|
>This is one of the more attractive (and useless) prompts I've made.
|
|||
|
Because many X terminal emulators don't implement cursor position save and
|
|||
|
restore, the alternative when putting a clock in the upper right corner is
|
|||
|
to anchor the cursor at the bottom of the terminal. This builds on the
|
|||
|
idea of the "termwide" prompt above, drawing a line up the right side of
|
|||
|
the screen from the prompt to the clock. A VGA font is required.</P
|
|||
|
><P
|
|||
|
>Note: There is an odd substitution in here, that may not print properly
|
|||
|
being translated from SGML to other formats: I had to substitute the screen
|
|||
|
character for \304 - I would normally have just included the sequence
|
|||
|
"\304", but it was necessary to make this substitution in this case.</P
|
|||
|
><TABLE
|
|||
|
BORDER="0"
|
|||
|
BGCOLOR="#E0E0E0"
|
|||
|
WIDTH="100%"
|
|||
|
><TR
|
|||
|
><TD
|
|||
|
><FONT
|
|||
|
COLOR="#000000"
|
|||
|
><PRE
|
|||
|
CLASS="PROGRAMLISTING"
|
|||
|
> #!/bin/bash
|
|||
|
|
|||
|
# This prompt requires a VGA font. The prompt is anchored at the bottom
|
|||
|
# of the terminal, fills the width of the terminal, and draws a line up
|
|||
|
# the right side of the terminal to attach itself to a clock in the upper
|
|||
|
# right corner of the terminal.
|
|||
|
|
|||
|
function prompt_command {
|
|||
|
# Calculate the width of the prompt:
|
|||
|
hostnam=$(echo -n $HOSTNAME | sed -e "s/[\.].*//")
|
|||
|
# "whoami" and "pwd" include a trailing newline
|
|||
|
usernam=$(whoami)
|
|||
|
newPWD="${PWD}"
|
|||
|
# Add all the accessories below ...
|
|||
|
let promptsize=$(echo -n "--(${usernam}@${hostnam})---(${PWD})-----" \
|
|||
|
| wc -c | tr -d " ")
|
|||
|
# Figure out how much to add between user@host and PWD (or how much to
|
|||
|
# remove from PWD)
|
|||
|
let fillsize=${COLUMNS}-${promptsize}
|
|||
|
fill=""
|
|||
|
# Make the filler if prompt isn't as wide as the terminal:
|
|||
|
while [ "$fillsize" -gt "0" ]
|
|||
|
do
|
|||
|
fill="${fill}<7D>"
|
|||
|
# The A with the umlaut over it (it will appear as a long dash if
|
|||
|
# you're using a VGA font) is \304, but I cut and pasted it in
|
|||
|
# because Bash will only do one substitution - which in this case is
|
|||
|
# putting $fill in the prompt.
|
|||
|
let fillsize=${fillsize}-1
|
|||
|
done
|
|||
|
# Right-truncate PWD if the prompt is going to be wider than the terminal:
|
|||
|
if [ "$fillsize" -lt "0" ]
|
|||
|
then
|
|||
|
let cutt=3-${fillsize}
|
|||
|
newPWD="...$(echo -n $PWD | sed -e "s/\(^.\{$cutt\}\)\(.*\)/\2/")"
|
|||
|
fi
|
|||
|
#
|
|||
|
# Create the clock and the bar that runs up the right side of the term
|
|||
|
#
|
|||
|
local LIGHT_BLUE="\033[1;34m"
|
|||
|
local YELLOW="\033[1;33m"
|
|||
|
# Position the cursor to print the clock:
|
|||
|
echo -en "\033[2;$((${COLUMNS}-9))H"
|
|||
|
echo -en "$LIGHT_BLUE($YELLOW$(date +%H%M)$LIGHT_BLUE)\304$YELLOW\304\304\277"
|
|||
|
local i=${LINES}
|
|||
|
echo -en "\033[2;${COLUMNS}H"
|
|||
|
# Print vertical dashes down the side of the terminal:
|
|||
|
while [ $i -ge 4 ]
|
|||
|
do
|
|||
|
echo -en "\033[$(($i-1));${COLUMNS}H\263"
|
|||
|
let i=$i-1
|
|||
|
done
|
|||
|
|
|||
|
let prompt_line=${LINES}-1
|
|||
|
# This is needed because doing \${LINES} inside a Bash mathematical
|
|||
|
# expression (ie. $(())) doesn't seem to work.
|
|||
|
}
|
|||
|
|
|||
|
PROMPT_COMMAND=prompt_command
|
|||
|
|
|||
|
function clock3 {
|
|||
|
local LIGHT_BLUE="\[\033[1;34m\]"
|
|||
|
local YELLOW="\[\033[1;33m\]"
|
|||
|
local WHITE="\[\033[1;37m\]"
|
|||
|
local LIGHT_GRAY="\[\033[0;37m\]"
|
|||
|
local NO_COLOUR="\[\033[0m\]"
|
|||
|
|
|||
|
case $TERM in
|
|||
|
xterm*)
|
|||
|
TITLEBAR='\[\033]0;\u@\h:\w\007\]'
|
|||
|
;;
|
|||
|
*)
|
|||
|
TITLEBAR=""
|
|||
|
;;
|
|||
|
esac
|
|||
|
|
|||
|
PS1="$TITLEBAR\
|
|||
|
\[\033[\${prompt_line};0H\]
|
|||
|
$YELLOW\332$LIGHT_BLUE\304(\
|
|||
|
$YELLOW\${usernam}$LIGHT_BLUE@$YELLOW\${hostnam}\
|
|||
|
${LIGHT_BLUE})\304${YELLOW}\304\${fill}${LIGHT_BLUE}\304(\
|
|||
|
$YELLOW\${newPWD}\
|
|||
|
$LIGHT_BLUE)\304$YELLOW\304\304\304\331\
|
|||
|
\n\
|
|||
|
$YELLOW\300$LIGHT_BLUE\304(\
|
|||
|
$YELLOW\$(date \"+%a,%d %b %y\")\
|
|||
|
$LIGHT_BLUE:$WHITE\$$LIGHT_BLUE)\304\
|
|||
|
$YELLOW\304\
|
|||
|
$LIGHT_GRAY "
|
|||
|
|
|||
|
PS2="$LIGHT_BLUE\304$YELLOW\304$YELLOW\304$NO_COLOUR "
|
|||
|
|
|||
|
} </PRE
|
|||
|
></FONT
|
|||
|
></TD
|
|||
|
></TR
|
|||
|
></TABLE
|
|||
|
></DIV
|
|||
|
><DIV
|
|||
|
CLASS="NAVFOOTER"
|
|||
|
><HR
|
|||
|
ALIGN="LEFT"
|
|||
|
WIDTH="100%"><TABLE
|
|||
|
SUMMARY="Footer navigation table"
|
|||
|
WIDTH="100%"
|
|||
|
BORDER="0"
|
|||
|
CELLPADDING="0"
|
|||
|
CELLSPACING="0"
|
|||
|
><TR
|
|||
|
><TD
|
|||
|
WIDTH="33%"
|
|||
|
ALIGN="left"
|
|||
|
VALIGN="top"
|
|||
|
><A
|
|||
|
HREF="clockt.html"
|
|||
|
ACCESSKEY="P"
|
|||
|
>Prev</A
|
|||
|
></TD
|
|||
|
><TD
|
|||
|
WIDTH="34%"
|
|||
|
ALIGN="center"
|
|||
|
VALIGN="top"
|
|||
|
><A
|
|||
|
HREF="index.html"
|
|||
|
ACCESSKEY="H"
|
|||
|
>Home</A
|
|||
|
></TD
|
|||
|
><TD
|
|||
|
WIDTH="33%"
|
|||
|
ALIGN="right"
|
|||
|
VALIGN="top"
|
|||
|
><A
|
|||
|
HREF="gfdl.html"
|
|||
|
ACCESSKEY="N"
|
|||
|
>Next</A
|
|||
|
></TD
|
|||
|
></TR
|
|||
|
><TR
|
|||
|
><TD
|
|||
|
WIDTH="33%"
|
|||
|
ALIGN="left"
|
|||
|
VALIGN="top"
|
|||
|
>The Floating Clock Prompt</TD
|
|||
|
><TD
|
|||
|
WIDTH="34%"
|
|||
|
ALIGN="center"
|
|||
|
VALIGN="top"
|
|||
|
><A
|
|||
|
HREF="c816.html"
|
|||
|
ACCESSKEY="U"
|
|||
|
>Up</A
|
|||
|
></TD
|
|||
|
><TD
|
|||
|
WIDTH="33%"
|
|||
|
ALIGN="right"
|
|||
|
VALIGN="top"
|
|||
|
>GNU Free Documentation License</TD
|
|||
|
></TR
|
|||
|
></TABLE
|
|||
|
></DIV
|
|||
|
></BODY
|
|||
|
></HTML
|
|||
|
>
|