Calm Hill My Random Thoughts

Google Calendar with Org-Mode

ပရောဂျက်တွေက အပြိုင်တွေများတော့ လုပ်စရာရှိတာတွေ အစည်းအဝေးမှတ်တမ်းတွေ ခိုင်းထားတာတွေ အခြေအနေလိုက်ပြီးတော့ မေးဖို့အတွက်တွေက စနစ်တကျ မှတ်မထားရင် ခေါင်းကမမှတ်မိဘူး။ Calendar တွေ Organizer တွေ Todo တွေ Mobile ကနေ Desktop App တွေအထိ အစုံဝယ်ဖူးသုံးဖူးတယ် အဆင်မပြေတာများပါတယ် အမျိုးစုံစမ်းသပ်ပြီးတဲ့ နောက်ဆုံးတော့ Workflows ကို ကိုယ်လိုချင်သလို ပြင်လို့ရတဲ့ Org-Mode ကို Emacs ထဲမှာပဲ သုံးဖြစ်နေတာကြာပြီ။ Org-Mode ကျတော့ နေ့စဉ်နဲ့အမျှသုံးနေတဲ့ Text Editor ထဲမှာဖြစ်နေတော့ တကူးတကလည်း ဖွင့်သုံးနေစရာ မလိုဘူးဆိုတော့ ပျင်းပြီးတော့ မဖွင့်ဖြစ်မှာလည်း ပူစရာမလိုတော့ မသုံးမဖြစ်သုံးဖြစ်တယ်။ တယောက်ထဲဆိုရင် Org-Mode က အဆင်ပြေပေမယ့် Email နဲ့လာတဲ့ Meeting Invites တွေက ကိုယ့်ရဲ့ Workflows ကနေ လွတ်နေတော့ အစည်းအဝေးရှိတယ်ဆို Accept လုပ်ပြီးရင် Org-Mode ထဲ မမေ့မလျော့ လာထည့်ရတော့ မေ့သွားတယ်ဆိုရင် အခက်အခဲဖြစ်ရလို့ Calendar ထဲကနေ Org-Mode ထဲကိုထည့်ဖို့ Automate လုပ်ဖို့ နည်းလမ်းရှာရတယ်။

ရုံးမှာက Google Calendar သုံးတော့ Google Calendar ကို Org-Mode ထဲကို Sync လုပ်ပေးမယ့် နည်းလမ်းလိုက်ရှာတော့ Calfw ဆိုတဲ့ Emacs အတွက် Calendar Framework တခုကိုတွေ့တယ် သူအထဲက Document မှာပဲ Google Calendar နဲ့ Sync လုပ်ဖို့အတွက် Org-Gcal ဆိုတဲ့ Package နောက်တခုကို ထပ်ညွှန်းတာတွေ့တော့ စမ်းပြီးတော့သုံးကြည့်တာ အတော်လေးအဆင်ပြေတယ်။ ခက်ခက်ခဲခဲ Setup လုပ်ရတာ သိပ်ပြီးမပါပါဘူး ဒါပေမယ့် အချိန်ကြာလာရင် မေ့သွားမှာစိုးတော့ ရေးမှတ်ထားလိုက်တယ်။

ပထမဆုံးအဆင့်အနေနဲ့ Calfw ကို Install လုပ်ဖို့လိုတယ် Calfw ဟာ Package Repo တွေထဲမှာမရှိပါဘူး အဲဒီအတွက်ကြောင့် Manual ပဲ Install လုပ်ဖို့လိုတယ် Calfw ကို အောက်မှာပြထားတဲ့ Github Repo ကနေ Clone လုပ်ပြီးဖြစ်ဖြစ် Download လုပ်ပြီးဖြစ်ဖြစ် Install လုပ်ချင်တဲ့နေရာမှာ ကူးထည့်ထားဖို့လိုလိမ့်မယ်။ ကိုယ်ကတော့ ~/.emacs.d/lisp/ အောက်မှာ ~/.emacs.d/lisp/emacs-calfw ဆိုပြီးကူးထည့်ထားတယ်။ ပြီးရင်တော့ init.el ထဲမှာ Configure လုပ်ပေးဖို့လိုလိမ့်မယ် အောက်မှာပြထားတဲ့ Config ကိုကြည့်ပါ။ init.el ကို Reload လုပ်ပြီးရင် M-x cfw:open-org-calendar ဆိုရင် org-agenda ထဲက Tasks တွေကို Calendar ကိုမြင်ရပါပြီ မကြာခဏသုံးမှာဖြစ်တော့ C-cv ဆိုပြီးတော့ Key တခုနဲ့ Map လုပ်ထားလိုက်တယ်။

Emacs−Calfw

https://github.com/kiwanami/emacs-calfw

Config

;; Calfw
(add-to-list 'load-path "~/.emacs.d/lisp/emacs-calfw")
(require 'calfw)
(require 'calfw-org)
(define-key global-map "\C-cv" 'cfw:open-org-calendar)

Calfw ရသွားပြီးရင် နောက်တဆင့်အနေနဲ့ ကိုယ့်ရဲ့ Google Calendar ထဲက Events တွေကို org-agenda ထဲကို ထည့်ပေးဖို့အတွက် Org-Gcal ကို Install & Configure လုပ်ဖို့လိုသေးတယ်။ Org-Gcal ကို Install လုပ်ရတာက လွယ်ပါတယ် MELPA ထဲမှာရှိတော့ M-x package-install နဲ့ org-gcal ဆိုရင် Install လုပ်လို့ရပါတယ်။ Manually Install လုပ်ချင်ရင်တော့ Org-Gcal ရဲ့ Github Repo ကနေပဲ Download လုပ်ပြီး Install လုပ်ပေါ့။ Configure လုပ်ရတာက နည်းနည်းလေး အဆင့်ပိုလိမ့်မယ် ပထမဆုံးအနေနဲ့ Google Developers Console ကိုသွားပြီးတော့ Project တခု Create လုပ်ဖို့လိုတယ် ရှိပြီးသားကို သုံးမယ်ဆိုလည်း သုံးလို့ရပါတယ်။ ပြီးရင်တော့သုံးမယ့် Project ရဲ့ API Dashboard ကနေ Google Calendar API ကို Enable လုပ်ပေးရမယ်။ နောက်တဆင့်ကတော့ Credentials ထဲကနေ OAuth client ID တခု Create လုပ်ပြီးပြီဆိုရင် ရလာမယ့် Client ID နဲ့ Client secret ကို အောက်မှာပြထားတဲ့ Config ထဲမှာထည့်ရမယ်။

Org-Gcal

https://github.com/myuhe/org-gcal.el

Config

;; Org Gcal
(require 'org-gcal)
(setq org-gcal-client-id "your-secret-url.apps.googleusercontent.com"
    org-gcal-client-secret "your-secret-key"
    org-gcal-file-alist '(("your-calendar-id" .  "~/some/where/filename.org")))
(define-key global-map "\C-cf" 'org-gcal-fetch)

Events တွေကို Download လုပ်ဖို့အတွက် M-x org-gcal-fetch ဆိုရင် Configure လုပ်ထားတဲ့ Google Calendar ထဲက Events တွေကို သက်ဆိုင်ရာ org file ထဲကို ထည့်ပေးလိမ့်မယ်။ Sync လုပ်ချင်တယ်ဆိုရင်တော့ org-gcal-sync ဆိုတာကိုခေါ်ရမယ် အဲဒါဆိုရင်တော့ Configure လုပ်ထားတဲ့ org file ထဲမှာ Event တွေသွားထည့်ရင် လိုအပ်သလို Download/Upload လုပ်ပြီးတော့ Sync လုပ်ပေးလိမ့်မယ်။ Sync ကတော့ မလိုအပ်တော့ စမ်းမကြည့်မိဘူး ကိုယ့်အတွက်လည်း သူများဆီကလာတဲ့ Accept Invite တွေကို ကိုယ့်ရဲ့စာရင်းထဲ ဝင်လာရင်ရပြီဆိုတော့ Download တခုနဲ့ဆို အဆင်ပြေပြီ။ Fetch အတွက် C-cf ဆိုပြီးတော့ Key တခုနဲ့ Map လုပ်ထားလိုက်တော့ အလုပ်ရှုပ်လည်း ပိုပြီးသက်သာသွားတယ်။