September 7, 2013

റിമൈന്ററുകൾ

ചില കമാന്റുകൾ കൃത്യസമയത്ത് എക്സിക്യൂട്ട് ചെയ്തില്ലെങ്കിൽ നമ്മുടെ ജീവിതം കട്ടപ്പൊകയായേക്കും. ഉദാ:
"അടുപ്പത്തിരിക്കുന്ന കൂക്കർ ഏഴെട്ടു മിനിട്ടു കഴിഞ്ഞ് ഓഫ് ചെയ്തേക്കണേ, ഞാൻ കടയിൽ പോയിട്ടു വരാം" അല്ലെങ്കിൽ "പാൽ തണുക്കാൻ വച്ചിട്ടുണ്ട്, പത്തുമിനിട്ട് കഴിഞ്ഞിട്ട് കൊച്ചിനു കൊടുക്കണം കേട്ടോ?"

എന്തെങ്കിലും കാര്യമായി ചെയ്തുകൊണ്ടിക്കുന്ന സമയത്ത് ഇങ്ങനയുള്ളവയ്ക്ക് റിമൈന്റെർ വച്ചില്ലെങ്കിൽ മറന്നുപോവുകയാണ് പതിവ്. ആദ്യമൊക്കെ ഒരു ഷെല്ലിൽ sleep 5m, sleep 10m എന്നൊക്കെ കൊടുത്തിരുന്നെങ്കിലും ടൈമൗട്ട് ആയോന്നറിയാൻ ടെർമിനൽ വിൻഡോയിൽ ഇടയ്ക്ക് പോകണമായിരുന്നു. (ഹാർഡ്വെയർ പ്രശ്നം കാരണം എക്കോ ഉപയോഗിച്ച് ബീപ് ചെയ്യാൻ എന്റെ മെഷീനിൽ പറ്റില്ല). പിന്നെ ഉള്ള ഒരു മാർഗ്ഗം ഏതെങ്കിലും കലണ്ടർ/റ്റു ഡു ആപ്ലിക്കേഷനിൽ റിമൈന്റർ സെറ്റു ചെയ്യുക എന്നതായിരുന്നു. ആപ്ലിക്കേഷനൊക്കെ ഓപ്പൺ ചെയ്തിട്ട്, റിമൈന്റർ സെറ്റ് ചെയ്യാൻ 5:55 നോട് എഴല്ലെങ്കിൽ എട്ട് മിനിട്ട് കൂട്ടിയാൽ അഞ്ച് അറുത്തിരണ്ട് അല്ലെങ്കിൽ അഞ്ച് അറുപത്തി മൂന്നിന് എന്നൊക്കെ കണക്കുകൂട്ടി ഒരു തീരുമാനമാകുമ്പോഴേയ്ക്കും കൊച്ചിനെ അടുപ്പത്തു നിന്നിറക്കിവയ്ക്കാനാണോ അതോ കുക്കറിനു പാലുകൊടുക്കാനാണോ റിമൈന്റർ സെറ്റ് ചെയ്യേണ്ടതെന്നു കൺഫ്യൂഷനാകും. അപ്പോൾ പിന്നെ പെട്ടെന്നു ചെയ്യാൻ പറ്റൂന്നത് ഒരു മെസ്സേജ് പോപ്അപ് ചെയ്യിക്കുക എന്നതാണ്. xmessage ആണ് ഇതിനായി ആദ്യം ഉപയോഗിച്ചു നോക്കിയത്.
sleep 7m; xmessage "Some text"
ഇതിലെ പ്രശ്നം എന്തെന്നാൽ xmessage ന്റെ വിൻഡോ വളരെ ചെറുതായതിനാൽ അത് വരുന്നത് ശ്രദ്ധയിൽപെടില്ല എന്നതാണ്. പകരം ഉപയോഗിക്കാൻ പറ്റുമെന്നു തോന്നിയ dialog കമാന്റിന്റെ മാൻ പേജ് കണ്ടു പേടിച്ചു, kdialog നു മാൻ പേജുണ്ടായിരുന്നുമില്ല. അവസാനം zenityയാണ് നമുക്ക് പറ്റിയതെന്ന തീരുമാനത്തിലെത്തി.
zenity --info --text "Some message" അത്യാവശ്യം നല്ല ഒരു മെസ്സേജ് കാണിക്കുന്നുണ്ടായിരുന്നു. പിന്നെ താമസിച്ചില്ല താഴെ കാണുന്ന ഷെൽ സ്ക്രിപ്റ്റ് remind.sh എന്ന പേരിൽ എഴുതി വച്ചു:
#! /usr/bin/bash
# Script to pop up a message after predefined time

if [[ $# -lt 2 ]]
then
        echo "Usage : `basename $0` time message"
        exit 1
fi
sleepTime=$1
shift

(sleep ${sleepTime}; zenity --info --text "$*") &
ഈ സ്ക്രിപ്റ്റ് ഹോം ഫോൾഡറിലെ bin എന്ന ഫോൾഡറിലാണുള്ളതെങ്കിൽ krunner ഇൽ (alt+f2 in KDE) ~/bin/remind.sh 5m "how are you?" എന്നു കൊടുത്താൽ അഞ്ചുമിനിട്ടു കഴിഞ്ഞ് മെസ്സേജ് വരും.

കുറിപ്പ് 1: ഇത് ടെർമിനലിൽ നിന്നും റൺ ചെയ്താൽ റൺ ചെയ്ത ശേഷം ടെർമിനൽ ക്ലോസ് ചെയ്തില്ലെങ്കിൽ മെസ്സേജ് കാണാൻ വേണ്ടി ആ ടെർമിനലിലേക്ക് തന്നെ പോകേണ്ടി വരുന്നുണ്ട്. അതുകൊണ്ട് ടെർമിനലിൽ നിന്നും റൺ ചെയ്യുകയാണെങ്കിൽ ആ ടെർമിനൽ ക്ലോസ് ചെയ്യുക.

കുറിപ്പ് 2 : ഇതിനേക്കാൾ എളുപ്പമുള്ള വഴികൾ ഉണ്ടെങ്കിൽ ദയവായി പറയുക.

No comments:

Post a Comment