]> git.donarmstrong.com Git - lib.git/blobdiff - emacs_el/org-google-weather.el
update more stuff; ditch old cperl mode and vc-bzr
[lib.git] / emacs_el / org-google-weather.el
index 9961601b5ef09c52597c66654b249aa2bcfb32f6..63f601bf786e6ac9ff3b9abc4dc6d9a2e212dadc 100644 (file)
 
 (require 'google-weather)
 (require 'image)
+(require 'format-spec)
 
 (defgroup org-google-weather nil
   "Google Weather for Org mode."
   :group 'comm)
 
-;; Org mode support
-(defcustom org-google-weather-location
-  "Paris"
+(defcustom org-google-weather-location "Paris"
   "Default location for org-google-weather."
   :group 'org-google-weather)
 
+(defcustom org-google-weather-format "%i %c, %l-%h %s"
+  "String to return to describe the weather.
+Valid %-sequences are:
+  - %i the icon
+  - %c means the weather condition
+  - %L the supplied location
+  - %C the city the weather is for
+  - %l the lower temperature
+  - %h the higher temperature
+  - %s the temperature unit symbol")
+
 (defcustom org-google-weather-cache-time 43200
   "Define for how many seconds we should cache the weather."
   :group 'org-google-weather)
 (defcustom org-google-weather-icon-alist
   '((chance_of_rain . "weather-showers-scattered.png")
     (chance_of_snow . "weather-snow.png")
-    (chance_of_storm "weather-storm.png")
+    (chance_of_storm . "weather-storm.png")
+    (cn_cloudy . "weather-overcast.png")
+    (cn_heavyrun . "weather-showers.png")
+    (cn_sunny . "weather-clear.png")
     (cloudy . "weather-overcast.png")
     (dust . "weather-fog.png")
     (flurries . "weather-storm.png")
     (fog . "weather-fog.png")
     (haze . "weather-fog.png")
     (icy . "weather-snow.png")
+    (jp_sunny . "weather-clear.png")
+    (jp_cloudy . "weather-overcast.png")
     (mist . "weather-storm.png")
     (mostly_cloudy . "weather-overcast.png")
     (mostly_sunny . "weather-clear.png")
@@ -80,8 +95,9 @@
     (storm . "weather-storm.png")
     (thunderstorm . "weather-storm.png")
     (sunny . "weather-clear.png"))
-  "Icons to used to illustrate the weather.")
+  "Icons to use to illustrate the weather.")
 
+;;;###autoload
 (defun org-google-weather (&optional location language)
   "Return Org entry with the weather for LOCATION in LANGUAGE.
 If LOCATION is not set, use org-google-weather-location."
@@ -94,24 +110,33 @@ If LOCATION is not set, use org-google-weather-location."
       (let ((condition (cadr (assoc 'condition forecast)))
             (low (cadr (assoc 'low forecast)))
             (high (cadr (assoc 'high forecast)))
+            (city (google-weather-data->city data))
             ;; But *they* told me it's just about calling functions!
-            (icon (cdr
-                   (assoc
-                    (intern
-                     (file-name-sans-extension
-                      (file-name-nondirectory
-                       (cadr (assoc 'icon forecast)))))
-                    org-google-weather-icon-alist)))
+            (icon (when (window-system)
+                    (cdr
+                     (assoc
+                      (intern
+                       (file-name-sans-extension
+                        (file-name-nondirectory
+                         (cadr (assoc 'icon forecast)))))
+                      org-google-weather-icon-alist))))
             (temp-symbol (google-weather-data->temperature-symbol data)))
-        (concat
-         (if org-google-weather-display-icon-p
-             (concat (propertize "icon"
-                                 'display
-                                 (create-image
-                                  (concat org-google-weather-icon-directory "/" icon))
-                                 'rear-nonsticky '(display))
-                     " ")
-           "")
-         condition ", " low "-" high " " temp-symbol)))))
+        (format-spec org-google-weather-format
+                     `((?i . ,(if (and icon org-google-weather-display-icon-p)
+                                  (propertize "icon"
+                                              'display
+                                              (create-image
+                                               (concat
+                                                org-google-weather-icon-directory
+                                                "/"
+                                                icon))
+                                              'rear-nonsticky '(display))
+                                ""))
+                       (?c . ,condition)
+                       (?L . ,location)
+                       (?C . ,city)
+                       (?l . ,low)
+                       (?h . ,high)
+                       (?s . ,temp-symbol)))))))
 
 (provide 'org-google-weather)