Terminal pogryzł człowieka: gcalcli

W zabieganych czasach zabiegani ludzie potrzebują coraz to lepszych wspomagaczy witaminowych (aby pamiętać) lub coraz doskonalszych organizerów. Tutaj od wieków prym wiedzie skrawek serwetki z restauracji, ale i nasze komputery mogą być do tego przydatne. Wystarczy odpowiednie oprogramowanie, które będzie na tyle wygodne i czytelne w obsłudze, że organizowanie za jego pomocą naszych spotkań i kontrolowanie tych już zaplanowanych to będzie czysta przyjemność. Dlatego warto sięgać po rozwiązania używane przez tysiące zadowolonych – czyli Kalendarz Google. Za sprawą gcalcli dostępnego również w tekstowej, czytelniejszej formie.

Kalendarz na cały miesiąc, a jakże
Program gcalcli znajdziemy w repozytoriach niemal wszystkich dystrybucji i jego instalacja nie powinna nastręczać żadnych trudności. Sam gcalcli został popełniony w Pythonie i umożliwia dostęp do naszego Kalendarza Google wprost z linii komend. Będziemy mogli przeszukiwać i dodawać nasze zaplanowane zajęcia, terminy spotkań, a dodatkowo program może posłużyć również za „przypominacza” o zbliżającym się wydarzeniu. Pierwsze uruchomienie programu przeniesie nas do przeglądarki internetowej, gdzie Kalendarz Google poprosi nas o autoryzację dla gcalcli (w celu dostępu do naszego terminarza, o ile ktoś posiada takowy).

Gcalcli obsługuje się podając mu jedną z komend:

Commands:

  list                     list all calendars

  search <text>            search for events
                           - case insensitive search terms to find events that
                             match these terms in any field, like traditional
                             Google search with quotes, exclusion, etc.
                           - for example to get just games: "soccer -practice"

  agenda [start] [end]     get an agenda for a time period
                           - start time default is 12am today
                           - end time default is 5 days from start
                           - example time strings:
                              '9/24/2007'
                              '24/09/2007'
                              '24/9/07'
                              'Sep 24 2007 3:30pm'
                              '2007-09-24T15:30'
                              '2007-09-24T15:30-8:00'
                              '20070924T15'
                              '8am'

  calw <weeks> [start]     get a week based agenda in a nice calendar format
                           - weeks is the number of weeks to display
                           - start time default is beginning of this week
                           - note that all events for the week(s) are displayed

  calm [start]             get a month agenda in a nice calendar format
                           - start time default is the beginning of this month
                           - note that all events for the month are displayed
                             and only one month will be displayed

  quick <text>             quick add an event to a calendar
                           - a single --calendar must specified
                           - the "--details url" option will show the event link
                           - example text:
                              'Dinner with Eric 7pm tomorrow'
                              '5pm 10/31 Trick or Treat'

  add                      add a detailed event to a calendar
                           - a single --calendar must specified
                           - the "--details url" option will show the event link
                           - example:
                              gcalcli --calendar 'Eric Davis'
                                      --title 'Analysis of Algorithms Final'
                                      --where UCI
                                      --when '12/14/2012 10:00'
                                      --duration 60
                                      --description 'It is going to be hard!'
                                      --reminder 30
                                      add

  delete <text> [start] [end]
                           delete event(s) within the optional time period
                           - case insensitive search terms to find and delete
                             events, just like the 'search' command
                           - deleting is interactive
                             use the --iamaexpert option to auto delete
                             THINK YOU'RE AN EXPERT? USE AT YOUR OWN RISK!!!
                           - use the --details options to show event details
                           - [start] and [end] use the same formats as agenda

  edit <text>              edit event(s)
                           - case insensitive search terms to find and edit
                             events, just like the 'search' command
                           - editing is interactive

  import [file]            import an ics/vcal file to a calendar
                           - a single --calendar must specified
                           - if a file is not specified then the data is read
                             from standard input
                           - if -v is given then each event in the file is
                             displayed and you're given the option to import
                             or skip it, by default everything is imported
                             quietly without any interaction
                           - if -d is given then each event in the file is
                             displayed and is not imported, a --calendar does
                             not need to be specified for this option

  remind <mins> <command>  execute command if event occurs within <mins>
                           minutes time ('%s' in <command> is replaced with
                           event start time and title text)
                           - <mins> default is 10
                           - default command:
                              'notify-send -u critical -a gcalcli %s'

Całość sprowadza się zatem do wyświetlania kalendarza na cały miesiąc (calm), tydzień (calw), dodawania wydarzeń (add lub quick), kasowania ich (delete) lub wyszukiwania (search). Dodatkowo gcalcli posiada cały tabun dodatkowych parametrów pozwalających na doprecyzowanie stylu wyświetlania, kolorów i tak dalej. To wszystko znajdzie zastosowanie szczególnie, gdy zechcemy wyświetlić kalendarz na naszym pulpicie (conky).

Dodawanie spotkań w linii komend? Kto to wymyślił… A jednak to proste i przyjemne zajęcie. Wystarczy:

dhor@xpees:~$ gcalcli quick "dzisaj o 20 film"
dhor@xpees:~$ gcalcli calw -w 12

┌────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
│niedziela   │poniedziałek│wtorek      │środa       │czwartek    │piątek      │sobota      │
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│22 maj **   │23 maj      │24 maj      │25 maj      │26 maj      │27 maj      │28 maj      │
│            │            │            │            │            │            │            │
│------------│            │            │            │Boże Ciało  │            │            │
│            │            │            │            │            │            │            │
│8:00        │            │            │            │Dzień Matki │            │            │
│Wyjazd.     │            │            │            │            │            │            │
│            │            │            │            │            │            │            │
│8:00 dzisaj │            │            │            │            │            │            │
│film        │            │            │            │            │            │            │
└────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘

dhor@xpees:~$ gcalcli delete "dzisaj film"

2016-05-22   8:00    dzisaj film
Delete? [N]o [y]es [q]uit: y
Deleted!

dhor@xpees:~$ gcalcli quick "Dzisiaj o 20 fajny film"
dhor@xpees:~$ gcalcli calw -w 12

┌────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
│niedziela   │poniedziałek│wtorek      │środa       │czwartek    │piątek      │sobota      │
├────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│22 maj **   │23 maj      │24 maj      │25 maj      │26 maj      │27 maj      │28 maj      │
│            │            │            │            │            │            │            │
│------------│            │            │            │Boże Ciało  │            │            │
│            │            │            │            │            │            │            │
│8:00        │            │            │            │Dzień Matki │            │            │
│Wyjazd.     │            │            │            │            │            │            │
│            │            │            │            │            │            │            │
│8:00        │            │            │            │            │            │            │
│Dzisiaj     │            │            │            │            │            │            │
│fajny film  │            │            │            │            │            │            │
└────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘

Proste dodanie wydarzenia, usunięcie go z powodu literówek i ponowne dodanie jak należy. Oczywiście można też było użyć opcji edit.

Ważna uwaga – co najmniej w przypadku Ubuntu 16.04 wymagane przez program komponenty Pythona google-api-python-client i oauth2client są w różnych wersjach. Może to powodować informację o błędzie podczas importu modułu LockedFiles. Aby się go pozbyć instalujemy python-pip i:

pip install google-api-python-client==1.4.2
pip install oauth2client==1.4.12