twitter-modeへのパッチ

twitter-modeつかっててとっても便利!なんだけど、自分の使い方でひとつ足りないものが。それは「送信したダイレクトメッセージ」が見れないこと。
そんなに使わないんだけど、「あれ?どういう内容送ったっけ?」ってなった時にいちいちWebで確認するのもあほらしい。ので既存のコードを切り貼りしていじくって、送信したダイレクトメッセージを表示できるようにした。
ただし、自分がjson指定でしか使ってないので、api-xml.lには手を入れていない。あしからず。

--- api-json.l.org	Mon Mar 23 13:46:26 2009
+++ api-json.l	Fri Jun 05 14:58:48 2009
@@ -301,6 +301,11 @@
   (concat *api-url-root*
 	  "direct_messages.json"))
 
+(defun url-direct_messages_sent ()
+  (concat *api-url-root*
+	  "direct_messages/"
+	  "sent.json"))
+
 (defun url-friends (&optional target)
   (concat *api-url-root*
 	  "statuses/"

--- api.l.org	Mon Mar 23 14:00:55 2009
+++ api.l	Fri Jun 05 15:03:00 2009
@@ -272,6 +272,22 @@
 	      (t
 	       (values nil status (read-error))))))))
 
+(defun statuses-direct_messages_sent (username password &optional force)
+  (let* ((url (url-direct_messages_sent))
+	 (tmpfile (local-file url username))
+	 (headers (create-request-headers username password)))
+    (multiple-value-bind (status response-headers)
+	(http-download-file url tmpfile force :headers headers)
+      (progn
+	(twdebug "~S~%~S~%~S~%~{~S~%~}" url tmpfile status response-headers)
+	(when (file-exist-p tmpfile)
+	  (setq data
+		(parse-file tmpfile)))
+	(cond ((equal status "200")
+	       (values t status (parse-direct_messages data)))
+	      (t
+	       (values nil status (read-error))))))))
+
 (defun statuses-friends (username password &optional force target)
   (let* ((url (url-friends target))
 	 (tmpfile (local-file url username))

--- summary.l.org	Mon Mar 23 22:23:25 2009
+++ summary.l	Fri Jun 05 15:07:01 2009
@@ -67,6 +67,7 @@
   (define-key *summary-map* #\f      'summary-load-statuses-friends)
   (define-key *summary-map* #\r      'summary-load-statuses-replies)
   (define-key *summary-map* #\d      'summary-load-statuses-direct)
+  (define-key *summary-map* #\D      'summary-load-statuses-direct-sent)
   (define-key *summary-map* #\s      'summary-load-statuses-user)
   (define-key *summary-map* #\p      'summary-load-statuses-public)
   (define-key *summary-map* #\i      'summary-load-friends)
@@ -125,6 +126,12 @@
 		   #'(lambda ()
 		       (if *summary-target-user* :disable)))
     (add-menu-item menu
+		   'summary-load-statuses-direct-sent
+		   "Direct Messages Sent(&D)"
+		   'summary-load-statuses-direct-sent
+		   #'(lambda ()
+		       (if *summary-target-user* :disable)))
+    (add-menu-item menu
 		   'summary-load-friends
 		   "Followings(&i)"
 		   'summary-load-friends)
@@ -326,6 +333,7 @@
     ('summary-load-statuses-friends "Recent")
     ('summary-load-statuses-replies "Replies")
     ('summary-load-statuses-direct  "Direct Messages")
+    ('summary-load-statuses-direct-sent "Direct Messages Sent")
     ('summary-load-friends          "Followings")
     ('summary-load-followers        "Followeres")
     (t nil)
@@ -512,6 +520,20 @@
 	    (summary-buffer-prepare)
 	    (summary-print statuses)
 	    (summary-history-add 'summary-load-statuses-direct clear-forward))
+	(summary-error status statuses)))))
+
+(defun summary-load-statuses-direct-sent (&optional force (clear-forward t))
+  (interactive "p")
+  (when *summary-target-user*
+    (error "ユーザーを指定して実行することはできません"))
+  (long-operation
+    (multiple-value-bind (result status statuses)
+	(statuses-direct_messages_sent *username* *password* force)
+      (if result
+	  (progn
+	    (summary-buffer-prepare)
+	    (summary-print statuses)
+	    (summary-history-add 'summary-load-statuses-direct-sent clear-forward))
 	(summary-error status statuses)))))
 
 (defun summary-load-friends (&optional force (clear-forward t))