When terminal is opened can I get current calendar and time displayed?
Improved Version
You can see the improved version here: https://askubuntu.com/a/1020693/307523
It looks like this:
Original Version
You can print an introduction banner when the terminal is opened using the ~/.bashrc
script. If you have figlet (sudo apt install figlet
) you can take advantage of large letters to display the time:
In the first instance figlet
is used to display the time and in the second a regular font is used.
Additional screen examples using toilet
This screen uses fonts from the toilet
package. The last example uses future
font and is used in the code below. Additionally, the calendar is set to cyan color in the code below.
The toilet
package allows additional font types and formatting styles over the figlet
package which it is forked from. To install the package use sudo apt install toilet
after installing figlet
as described above.
The code
Here is the code you need to make it all work. It's recommended to place this script in your /home/user/bin
directory as it is automatically added to your path. This script is named now
but you can use any unique name you like.
#!/bin/bash
# NAME: now
# PATH: $HOME/bin
# DESC: Display current calendar and time
# CALL: Called from terminal or ~/.bashrc
# DATE: Apr 6, 2017. Modified: Apr 10, 2017.
# NOTE: To display all available toilet fonts use this one-liner:
# for i in ${TOILET_FONT_PATH:=/usr/share/figlet}/*.{t,f}lf; do j=${i##*/}; toilet -d "${i%/*}" -f "$j" "${j%.*}"; done
# calendar current month with today higlighted.
# colors 00=bright white, 31=red, 32=green, 33=yellow, 34=blue, 35=purple,
# 36=cyan, 37=white
printf "\033[36m" # color 36=cyan
echo ""; cal;
printf "\033[00m" # color bright white (default)
echo ""
tput sc # Save cursor position.
# Move up 9 lines
while [ $((++i)) -lt 10 ]; do tput cuu1; done
tput cuf 25 # Move 25 columns right
# Do we have the toilet package?
if hash toilet 2>/dev/null; then
echo " "$(date +"%I:%M %P")" " | \
toilet -f future --filter border > /tmp/terminal
# Do we have the figlet package?
elif hash figlet 2>/dev/null; then
echo $(date +"%I:%M %P") | figlet > /tmp/terminal
# else use standard font
else
echo $(date +"%I:%M %P") > /tmp/terminal
fi
while IFS= read -r Time; do
printf "\033[01;32m" # color green
printf "$Time"
tput cud1 # Up one line
tput cuf 25 # Move 25 columns right
done < /tmp/terminal
tput rc # Restore saved cursor position.
exit 0
Mark script as executable
Copy this code into your editor and save it to the file now
. Next mark it as executable using:
sudo chmod +x now
Add script to ~./bashrc
Once this is completed you can type now
in the terminal and you will see the calendar and time. To wrap it all up and have it automatically displayed each time you open the terminal:
- Edit the file
~/.bashrc
- Go to the end and insert a new line containing
now
- Save the file
Now when opening the terminal you will be greeted with the current day highlighted on current month's calendar followed by the current time.
Dissecting the code
Here we'll briefly look at how the code works without discussing every line.
figlet
and toilet
packages
The script first checks if toilet
is installed with the hash
command. If so that is used to display time. If not figlet
is used if installed. If neither are installed a regular font is used.
In the code above a comment can be copied to your command line and executed to show available figlet
and toilet
fonts on your terminal:
for i in ${TOILET_FONT_PATH:=/usr/share/figlet}/*.{t,f}lf; do j=${i##*/}; toilet -d "${i%/*}" -f "$j" "${j%.*}"; done
To change the font used for time display search the code for this line:
toilet -f future --filter border > /tmp/terminal
and change the font name future
to the font name you choose. Keep in mind some fonts are too large to fit on the display.
Selecting colors
Set the color you want for the calendar and the time separately. In the above code, notice the command:
printf "\033[36m" # color 36=cyan
Change the last two digits to the color code you want to use. From tinkering with the code I found these values:
00=bright white, 31=red, 32=green, 33=yellow, 34=blue, 35=purple, 36=cyan, 37=white
If you find additional color codes please post a comment below or update this answer.