(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")
(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."
(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)