Browse Source
Minimal working example with customisation variables and a way to post a region or a buffer to twister. It's a start.master
Marcel van der Boom
11 years ago
1 changed files with 119 additions and 0 deletions
@ -0,0 +1,119 @@
@@ -0,0 +1,119 @@
|
||||
;;; twister.el --- A client for the twister distribute microblogging system |
||||
|
||||
;; Copyright (C) 2014 Marcel van der Boom <marcel@hsdev.com> |
||||
|
||||
;;; Commentary: |
||||
;; The original idea for this client was to minimally implement: |
||||
;; - make it possible to post to twister directly from Emacs; |
||||
;; - have autocompletion for 'known users' when posting a message |
||||
;; (this probably means defining a 'mode' |
||||
|
||||
;; During the implementation of the above the following nice-to-have |
||||
;; came to mind: |
||||
;; - get a timeline in a buffer in emacs |
||||
;; - allow for replies |
||||
;; - allow for direct messages |
||||
;; - manage follow lists |
||||
;; - have avatars obviously. (including the checkmark, which is brilliant) |
||||
;; |
||||
|
||||
;; Requirements |
||||
;; - json-rpc : https://github.com/mrvdb/elisp-json-rpc |
||||
;; This repository is included as submodule |
||||
|
||||
;; Installation |
||||
;; (add-to-list 'load-path "/path/to/twister.el") |
||||
;; (require 'twister) |
||||
;; (setq twister-user "yournick") |
||||
;; |
||||
;;; Credits |
||||
;; - The elisp-json-rpc library of Christopher Wellons <wellons@nullprogrma.com> |
||||
;; does the real work |
||||
|
||||
;;; Code: |
||||
(add-to-list 'load-path "elisp-json-rpc") |
||||
(require 'json-rpc) |
||||
|
||||
;; Configuration variables |
||||
(defgroup twister nil |
||||
"Using the twister microblogging system" |
||||
:tag "Microblogging" |
||||
:group 'applications |
||||
) |
||||
|
||||
(defcustom twister-user "twister_user" |
||||
"The nickname you use on your twister instance. When posting messages, this will be the name used" |
||||
:type 'string |
||||
:group 'twister) |
||||
|
||||
(defcustom twister-rpcuser "user" |
||||
"The RPC username configured in the twister.conf file" |
||||
:type 'string |
||||
:group 'twister) |
||||
|
||||
(defcustom twister-rpcpassword "pwd" |
||||
"The RPC password for the `twister-rpcuser configured in the twister.conf file" |
||||
:type 'string |
||||
:group 'twitter) |
||||
|
||||
(defcustom twister-host "localhost" |
||||
"Host where the twister daemon runs" |
||||
:type 'string |
||||
:group 'twister) |
||||
|
||||
(defcustom twister-port 28332 |
||||
"Port on which twister daemon runs and serves RPC commands" |
||||
:type 'integer |
||||
:group 'twister) |
||||
|
||||
|
||||
;; Get a connection to the twister daemon |
||||
(setf twisterd (json-rpc-connect |
||||
twister-host twister-port |
||||
twister-rpcuser twister-rpcpassword)) |
||||
|
||||
;; Preliminary convention |
||||
;; tw-* methods -> sorta private for now, don't use directly |
||||
;; twister-* methods -> public API |
||||
|
||||
(defun tw-get-last-post(user) |
||||
"Get the last post of a user" |
||||
(let (obj (json-new-object)) |
||||
(json-rpc twisterd "getposts" 1 |
||||
(vector (json-add-to-object obj "username" user))))) |
||||
|
||||
(defun tw-get-next-k(user) |
||||
"Get the next 'k' for a user; this is a post sequence" |
||||
;; Data structure visible here: http://twister.net.co/?page_id=21 |
||||
(+ 1 (plist-get |
||||
(plist-get |
||||
(elt (tw-get-last-post user) 0) |
||||
:userpost) :k))) |
||||
|
||||
(defun twister-post(msg) |
||||
"Post msg to the configured twister daemon" |
||||
(interactive) |
||||
|
||||
(json-rpc |
||||
twisterd "newpostmsg" |
||||
twister-user |
||||
(tw-get-next-k twister-user) msg)) |
||||
|
||||
|
||||
(defun twister-post-region (begin end) |
||||
"Post the current region to twister" |
||||
(interactive "r") |
||||
|
||||
(twister-post |
||||
(buffer-substring-no-properties begin end))) |
||||
|
||||
(defun twister-post-buffer() |
||||
"Post the current buffer to twister" |
||||
(interactive) |
||||
|
||||
(twister-post-region |
||||
(point-min point-max))) |
||||
|
||||
|
||||
(provide 'twister) |
||||
;;; twister.el ends here |
Loading…
Reference in new issue