Giter Site home page Giter Site logo

twittering-mode's Introduction

Twittering-mode: a Twitter client for Emacs

Twittering-mode enables you to twit on Emacsen.

Features

  • Activities on Twitter
    • Viewing various timelines
      • Home timeline
      • Replies
      • User's timeline
      • Public timeline
      • Favorites timeline
      • Retweets timeline
      • Merged timeline
      • Timeline without tweets satisfying a condition
    • Posting tweets
      • Direct message
      • ReTweet
      • Hash tag
      • Signature
    • Following and removing users
    • Marking tweets as favorites
  • HTTP Proxy support
  • Secure connection via HTTPS (cURL, GNU Wget, OpenSSL or GnuTLS is required)

Supported Emacsen

  • GNU Emacs 21 (some restrictions)
  • GNU Emacs 22, 23, 24

Prerequisites

Quick start

  1. Put twittering-mode.el in a directory specified by the variable load-path. Note that the directories emacs21 and url-emacs21 must be placed at the same directory on Emacs 21. On Windows without curl or wget, the directory win-curl must be placed there. You can add a directory to the variable load-path by (add-to-list 'load-path "ADDITIONAL-DIRECTORY").

  2. Execute M-x twit to run twittering-mode.

  3. Open OAuth authorization page with an external browser, click Allow, and enter the PIN code in the prompt of Emacs.

    If you have introduced the configuration (setq twittering-use-master-password t), twittering-mode will ask you a master password and it will write the authorized OAuth token into ~/.twittering-mode.gpg (in default) with encryption. Once the authorized OAuth token is encrypted, you do not have to retrieve a PIN code with an external browser. The master password is only required to establish authorized connection to Twitter.

    The private information is encrypted by EasyPG or alpaca.el, which utilize GnuPG or GnuPG2. If you use GnuPG2 with Emacs 25.1 or a later version, you can input a passphrase in the Emacs minibuffer instead of external dialog by the following configuration; (setq epa-pinentry-mode 'loopback).

  4. Your home timeline will appear. Basic key bindings are as follows.

    • V: Open or switch to another timeline by timeline-spec.
    • u or C-cC-s: Post a tweet.
    • RET: Post a reply to the pointed tweet or open the pointed URL with browse-url.
    • C-c RET: Post an organic retweet. This is only a tweet citing the pointed tweet and not an official/native retweet.
    • C-uC-c RET: Post an official/native retweet.
    • d: Send a direct message.
    • C-cC-w: Delete the pointed tweet.
  5. Add some of the following major configurations to your init file if you like.

    • To display icons, add (setq twittering-icon-mode t). This may require ImageMagick or its compatible alternative.
    • To resize icons, add (setq twittering-convert-fix-size SIZE). The default size is 48 pixels. This requires ImageMagick or its compatible alternative.
    • To keep retrieved icons in a local storage, add (setq twittering-use-icon-storage t). This requires gzip. The icons are saved on ~/.twittering-mode-icons.gz, which can be changed by the variable twittering-icon-storage-file.
    • To display tweets in the reverse order, add (setq twittering-reverse-mode t). With it, the latest tweet is rendered the bottom of the buffer.
    • To use a HTTP proxy, add the following configuration.
      
        (setq twittering-proxy-use t)
        (setq twittering-proxy-server "PROXY-HOSTNAME")
        (setq twittering-proxy-port PROXY-PORT-NUMBER)
      
    • To change the number of tweets retrieved at once, add (setq twittering-number-of-tweets-on-retrieval NUMBER).
    • To change the interval of retrieving tweets, add (setq twittering-timer-interval SECOND). You should be careful not to exceed the limitation of number of API calls.
    • To display the number of unread tweets on the mode-line, add (twittering-enable-unread-status-notifier).
    • To display the remaining number of API calls, add (setq twittering-display-remaining t).
    • To change the format of an organic retweet, configure the variable twittering-retweet-format. For example, add (setq twittering-retweet-format '(nil _ " %u RT @%s: %t")). For details, see the docstring of the variable by M-x describe-variable.
    • To change the timelines automatically opened on starting twittering-mode, configure the variable twittering-initial-timeline-spec-string. For example, add the below configuration.
      
        (setq twittering-initial-timeline-spec-string
              '("(:home+@)"
                "(:search/twittering mode/+:search/twmode/)"))
      
      For details, see the docstring of the variable by M-x describe-variable.
    • To customize the format of tweets, configure the variable twittering-status-format. For example, add the below configuration.
      
        (setq twittering-status-format
              "%FOLD{%RT{%FACE[bold]{RT}}%i%s>>%r @%C{%Y-%m-%d %H:%M:%S} %@{}\n%FOLD[ ]{%T%RT{\nretweeted by %s @%C{%Y-%m-%d %H:%M:%S}}}}")
      
      For details, see the docstring of the variable by M-x describe-variable.
    • To inherit mentions and hashtags on editing a reply, add (setq twittering-edit-skeleton 'inherit-any). For details, see the docstring of the variable by M-x describe-variable.

    Enjoy!

Usage

  • Move the cursor.
    • 0: Go to the beginning of the line.
    • ^: Go to the beginning of the text on the line.
    • $: Go to the end of the line.
    • G: Go to the bottom tweet.
    • H: Go to the top tweet.
    • h: Move the cursor left.
    • j: Go to the next tweet.
    • k: Go to the previous tweet.
    • l: Move the cursor right.
    • n: Go to the next tweet by the author of the pointed tweet.
    • p: Go to the previous tweet by the author of the pointed tweet.
    • TAB: Go to the next thing (link, user name, URL, etc.).
    • M-TAB or <backtab>: Go to the previous thing (link, user name, URL, etc.).
    • C-v or SPC: Scroll the buffer upward.
    • M-v or <backspace>: Scroll the buffer downward.
  • Switch a timeline.
    • L: Open a list timeline interactively.
    • V: Open a timeline by timeline-spec.
    • b: Switch to the previous timeline.
    • f: Switch to the next timeline.
    • C-cC-d: Open the direct messages timeline. This is equivalent to V with :direct_messages.
    • v: Open the home timeline of the pointed user.
    • C-cC-f: Open the friend timeline. This is equivalent to V with :friends.
    • C-cC-q: Open a search timeline. This is equivalent to V with :search/QUERY/.
    • C-cC-r: Open the replies timeline. This is equivalent to V with :replies.
    • C-cC-u: Open the current user timeline. This is equivalent to V with USERNAME, where USERNAME is your screen-name.
    • q: Close the current buffer.
  • Update/clear the timeline.
    • g: Update the current timeline.
    • C-cC-e: Erase tweets of the current buffer from memory.
  • Display replied tweets.
    • r: Display replied tweets or hide them.
    • R: Display replied tweets, retrieve the replied tweet or hide them.
  • Post a tweet.
    • u or C-cC-s: Post a tweet.
    • RET: Post a reply to the pointed tweet or open the pointed URL with browse-url.
    • C-c RET: Post an organic retweet. This is only a tweet citing the pointed tweet and not an official/native retweet.
    • C-uC-c RET: Post an official/native retweet.
    • d: Send a direct message.
    • C-cC-l: Post a joke message.
  • Delete a tweet.
    • C-cC-w: Delete the pointed tweet.
  • View more info.
    • U: Push the URL of the pointed link or tweet onto the kill ring.
    • C-cC-v: Open the profile of the pointed user with browse-url.
    • <mouse-1>: Open the pointed URL with browse-url.
  • Change the mode of twittering-mode.
    • a: Toggle the state of the buffer between active/inactive. Twittering-mode does not update an inactive buffer.
    • i: Toggle the state of the buffer between with or without icon images.
    • t or C-cC-p: Toggle between with or without a proxy server.
    • C-cC-t: Set the current hashtag.

By pressing V (twittering-visit-timeline) on twittering-mode, you can specify a timeline to be opened by timeline spec. A timeline spec can be used anywhere you have to specify a timeline.

The valid timeline specs follows:

  • Basic timeline

    • :home : The home timeline.
    • :mentions : Tweets mentioning you.
    • :public : The public timeline.
    • USER : Tweets posted by USER.
    • USER/LISTNAME : The list timeline owned by USER and named LISTNAME.
  • Direct message

    • :direct_message_events : Direct message events.
    • :direct_messages : Direct messages sent to you.
    • :direct_messages_sent : Direct messages that you sent.
  • Favorite

    • :favorites : Tweets that you marked as a favorite.
    • :favorites/USER : Tweets that USER marked as a favorite.
  • Hashtag

    • #HASHTAG : Tweets including #HASHTAG.
  • Retweet

    • :retweeted_by_me : Retweets that you posted.
    • :retweeted_by_user/USER : Retweets posted by USER.
    • :retweeted_to_me : Retweets sent to your home timeline.
    • :retweeted_to_user/USER : Retweets sent to USER's home timeline.
    • :retweets_of_me : Your tweets that have been retweeted by others.
  • Single

    • :single/ID : A tweet specified by ID.
  • Search

    • :search/QUERY-STRING/ : Tweets matching QUERY-STRING. In QUERY-STRING, / (slash) and \ (backslash) must be escaped as \/ or \\, respectively.
  • Alias
    You can define aliases for timeline specs. By defining a short alias as a long timeline spec, you can refer it more easily. There are two types of alias, simple and functional as below. Both types are defined in the association list bound to the variable twittering-timeline-spec-alias.

    • $ALIAS-NAME The timeline spec bound to ALIAS-NAME in twittering-timeline-spec-alias.
    • $ALIAS-NAME(ARGUMENT) The timeline spec generated by calling the function, which is bound to ALIAS-NAME in twittering-timeline-spec-alias, with the argument ARGUMENT. The function can be specified as a symbol or a lambda expression. Functions must receive one string argument.

    As an example, consider the following definition of twittering-timeline-spec-alias.

    
      (setq twittering-timeline-spec-alias
            '(("FRIENDS" . "my-account/friends-list")
              ("related-to" .
               (lambda (username)
                 (if username
                     (format ":search/to:%s OR from:%s OR @%s/"
                             username username username)
                   ":home")))
              ("related-to-twitter" . "$related-to(twitter)")))
    

    With this configuration, you can use the below aliases.

    • $FRIENDS is equivalent to my-account/friends-list.
    • $related-to is equivalent to :home.
    • $related-to(twitterapi) is equivalent to :search/to:twitterapi OR from:twitterapi OR @twitterapi/.
    • $related-to-twitter is equivalent to :search/to:twitter OR from:twitter OR @twitter/.

    You can use an alias on definition of other aliases, but an alias including a circular-reference is forbidden.

  • Composite timeline spec

    • (SPEC1+SPEC2) : The timeline generated by merging two timelines, specified by SPEC1 and SPEC2.
    • :exclude-if/FUNC/SPEC : The timeline equals SPEC, except that it does not include tweets that the function FUNC returns non-nil for. FUNC must be a function that receives an alist corresponding to a tweet as an argument. A lambda expression and a symbol bound to a function are valid as FUNC. But a symbol name must not include two special characters, "(" or "/". You can specify any timeline spec for SPEC. For example, you can ignore tweets including "WORD" from the home timeline by the following timeline spec; :exclude-if/(lambda (tweet) (string-match "WORD" (cdr (assq 'text tweet))))/:home.
    • :exclude-re/REGEXP/SPEC : The timeline equals SPEC, except that it does not include tweets that match the regular expression REGEXP. In REGEXP, a slash must be escaped with a backslash. For example, tweets including a slash are excluded from the timeline corresponding to the Emacs string literal ":exclude-re/\\//:home".

Authors & Contributors

  • Y. Hayamizu
  • naoya_t
  • Tsuyoshi CHO
  • Alberto Garcia
  • Satoshi Yatagawa
  • 高山智也
  • Tadashi MATSUO (cvmat)
  • 青田(naota)
  • Jaemok Jeong(jmjeong)
  • Thomas Danckaert
  • IMAI Toshiyuki

See also

twittering-mode's People

Contributors

ayman avatar bertogg avatar cvmat avatar daijik avatar fabiocosta0305 avatar hayamiz avatar imnaseer avatar itorres avatar ivey avatar jcrossley3 avatar jmjeong avatar kawabata avatar kou avatar masutaka avatar nabeo avatar naota avatar thebb avatar tomykaira avatar toshiharu avatar xmaillard avatar yata avatar zakki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

twittering-mode's Issues

名前に日本語をふくむアイコンファイル

名前に日本語をふくむアイコンファイルのURLのURLエンコードがデコードされてしまっていて、画像をうまく取得できていないようです。
また、画像が取得できていない時にも convert が走っているように思います。

unmatched version number

% grep -i version twittering-mode.el | grep "0."

;; Version: 0.4

(defconst twittering-mode-version "0.8")

タイムライン取得時400 Bad Requestエラーが起きている

プロキシ環境でtwittering-modeを利用していますが、うまくいかないので聞かせてください。

■環境
OS: Windows XP SP3
Emacs: GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) of 2011-03-10 on 3249CTO
Cygwin:CYGWIN_NT-5.1 XXXXXX 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 Cygwin
Curl:

curl 7.20.1 (i686-pc-cygwin) libcurl/7.20.1 OpenSSL/0.9.8r zlib/1.2.5 libidn/1.18 libssh2/1.2.5
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM SSL libz

■twittering-modeの設定

(require 'twittering-mode)
(setq twittering-use-master-password t)

;; icon表示
(setq-default twittering-icon-mode t)

;; ssl通信無効
(setq twittering-allow-insecure-server-cert t)
(setq twittering-oauth-use-ssl nil)
(setq twittering-use-ssl nil)

;; プロキシ設定
(setq twittering-proxy-use t)
(setq twittering-https-proxy-server "127.0.0.1")
(setq twittering-https-proxy-port "8000")
(setq twittering-proxy-server "127.0.0.1")
(setq twittering-proxy-port "8000")

■現象
OAuthは通っている、タイムライン表示が出来ない。

■_Message_バッファーの内容

Authorization for the account "luozengbin" succeeded.
Response: HTTP/1.0 400 Bad Request for GET https://api.twitter.com/1/help/configuration.xml
error in process sentinel: split-string: Wrong type argument: stringp, nil
error in process sentinel: Wrong type argument: stringp, nil

アドバイスして頂けると幸いです。
よろしく、お願いいたします。

Unable to get PIN

Twittering-mode is unable to get PIN. Steps to reproduce:

  • manandbytes/twittering-mode@6c66d9a6bcfe installed (has two commits on top of e454907b9111)

  • M-x twit

  • temp buffer shows:

    Authorization via OAuth
    1.Allow access by twittering-mode on the below site.
    https://api.twitter.com/oauth/authorize?oauth_token=
    2.After allowing access, the site will display the PIN code.
    Input the PIN code at the below minibuffer.

  • in the minibuffer, reply 'y' to 'Open authorization URL in browser?' question

  • Firefox shows this message instead of PIN:
    Whoa there!
    There is no request token for this page. That's the special key we need from applications asking to use your Twitter account. Please go back to the site or application that sent you here and try again; it was probably just a mistake.

  • minibuffer waits for 'Input PIN code:'

Handling images without making temporary files

Currently, twmode uses many temporary files for rendering icons, but rendering images can be realized without temporary files.

sample code

(setq img-data (with-temp-buffer
         (let ((coding-system-for-read 'binary)
               (require-final-newline nil))
           (insert-file-contents "/path/to/image.png")
           (string-to-unibyte (buffer-string)))))
(setq ov (make-overlay 1 3))
(overlay-put ov 'display `(image :type png :data ,img-data))

convert command

Specifying input and output files as - means standard input/output.

twittering-mode conflicts with default Emacs keybindings

C-x d on twittering-mode :home buffer shows this message in minibuffer: "Who would you like to receive the DM?" instead of Dired.

Splitting windows is disabled too.

C-x 1 or C-x 2 on twittering-mode :home buffer shows this message in minibuffer: "Buffer is read only"

My Emacs version is 24.2.90.1, twittering-mode latest version from git repo.

popup 書きこみでの region 選択範囲

twittering-mode を popup で書きこむようにする -> C-c C-s -> なん
か書く -> 行頭から適当に選択 (transient-mark-mode にしとく) で強
調される region に keymap の説明のとこが含まれてしまう。 //

OAuth fails on ArchLinux.

I use Archlinux and Emacs24. And the twittering-mode.el from the master branch.

When I try M-x twit, I get this error messages:

Failure: /usr/bin/curl exited abnormally (exit-status=60).
Authorization via OAuth failed. Type M-x twit to retry.

What can I do about it?

自動取得中の取得要求による結果の混在

んー… twittering-mode で GET中に C-c C-r とかすると、今動いてる
のがキャンセルされずに取得URL?だけ更新されるから reply とステー
タスバーには書いてるのに実際には home が表示されてることがある?

create issueしておいてください。埋もれてしまうので… RT @cvmat:
@naota344 あります。Aを自動取得中にBの取得要求があってBが先に取
得されるとステータスがBに変更され、その後Aを取得できたときにはそ
の結果もBと思って混ぜてしまいます。

Add function to open first found URL in tweet

Many tweets will have a link in them, and tabbing through "things" until I reach the URL to open it with Enter, can get tedious after a while. You already have "twittering-next-thing" or similar, bound to TAB, maybe a modified version could automatically "tab" until it finds a url and open it?

Upload twittering-mode to Marmalade

Using package.el provides a nice automated install/update experience for users. Marmalade is a community package source.

With a few cosmetic changes to twittering-mode.el to use package.el's header convention we could support automated installation.

extend tw-minor-mode to toggle between unread tweets and current buffer like in rcirc

In the Emacs IRC mode rcirc, one can toggle back and forth between new irc messages and the current buffer. This allows to quickly read new message and go back to work. At the moment this does not seem to be implemented in twittering-mode.
Extending the newly introduce tw-minor-mode should allow to introduce this toggling functionality, right?

Search fails on start

af4e066

init-file:

(setq debug-on-error t)

(load "~/lab/git/twittering-mode/twittering-mode.el")

(require 'twittering-mode)
(setq twittering-username "nogoth")

Running:
M-x twit

Backtrace:

Debugger entered--Lisp error: (search-failed "
?

?
")
search-forward-regexp("
?\n
?\n")
(if (search-forward-regexp "
?\n
?\n") (match-end 0) current)
(let* ((start ...) (end ...)) (buffer-substring start end))
(save-excursion (set-buffer buffer) (goto-char (point-min)) (when (search-forward-regexp "HTTP/1.[01] 200 Connection established
\n
\n" nil t) (delete-region ... ...)) (let* (... ...) (buffer-substring start end)))
twittering-get-response-header(#<buffer twmode-http-buffer>)
(let ((header ...) (body ...) (status nil)) (if (string-match "HTTP/1.[01] ([a-zA-Z0-9 ]+)
?\n" header) (progn ... ...) (message "Failure: Bad http response.")))
(unwind-protect (debug-printf "get-default-sentinel: proc=%s stat=%s" proc stat) (let (... ... ...) (if ... ... ...)) (when (and ... ...) (kill-buffer temp-buffer)))
twittering-http-get-default-sentinel(#<buffer twmode-http-buffer> nil #<process twmode-curl> "exited abnormally with code 1\n")
apply(twittering-http-get-default-sentinel #<buffer twmode-http-buffer> nil (#<process twmode-curl> "exited abnormally with code 1\n"))
(lambda (G82502 G82503 &rest args) (apply (symbol-value G82502) (symbol-value G82503) noninteractive args))(--sentinel-- --temp-buffer-- #<process twmode-curl> "exited abnormally with code 1\n")
apply((lambda (G82502 G82503 &rest args) (apply (symbol-value G82502) (symbol-value G82503) noninteractive args)) --sentinel-- --temp-buffer-- (#<process twmode-curl> "exited abnormally with code 1\n"))
(lambda (&rest --cl-rest--) (apply (lambda ... ...) (quote --sentinel--) (quote --temp-buffer--) --cl-rest--))(#<process twmode-curl> "exited abnormally with code 1\n")

401 Unauthorized

Oddly enough, it works on other computers I have access to. I tried copying ~/.twittering-mode.gpg from those machines and it still doesn't work.

(require 'twittering-mode)

(setq twittering-use-master-password t)
(setq twittering-tinyurl-service 'goo.gl)

(add-hook 'twittering-edit-mode-hook 
          (lambda () 
            (ispell-minor-mode) 
            (flyspell-mode)
            (auto-fill-mode -1)))

Emacs version: GNU Emacs 24.0.50.1 (x86_64-pc-linux-gnu, GTK+ Version 2.20.1) of 2011-09-03 on cw-bkp0, modified by Debian (the unofficial emacs-snapshot on Debian), twittering-mode-v0.6 (git HEAD.) This is what I have on twittering-http-buffer:

HTTP/1.1 401 Unauthorized
Date: Wed, 08 Feb 2012 14:08:35 GMT
Status: 401 Unauthorized
WWW-Authenticate: OAuth realm="http://twitter.com"
X-Runtime: 0.00773
Content-Type: application/xml; charset=utf-8
Content-Length: 112
Cache-Control: no-cache, max-age=1800
Set-Cookie: k=10.34.126.124.1328710115909770; path=/; expires=Wed, 15-Feb-12 14:08:35 GMT; domain=.twitter.com
Set-Cookie: guest_id=v1%3A132871011591718708; domain=.twitter.com; path=/; expires=Sat, 08-Feb-2014 02:08:35 GMT
Set-Cookie: _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCFNiS101AToHaWQiJTIzMjhmMTgwZDcxZWQ0%250AMTY1OWVhMzk1YmVjNzQ0ZWQwIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--c381cedd361ff58f7f4275b6f90fea0271060767; domain=.twitter.com; path=/; HttpOnly
Expires: Wed, 08 Feb 2012 14:38:35 GMT
Vary: Accept-Encoding
X-XSS-Protection: 1; mode=block
Server: tfe

<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error code="32">Could not authenticate you</error>
</errors>

help-overlay should use after-string rather than before-string

I use a minor mode which puts an overlay as after-string at the end of buffer.
However, twittering-edit-mode uses before-string to show the help at the beginning of the buffer, so the minor mode's overlay incorrectly will displayed above the help ovelay.

If overlay's start and end point the same position, before-string will displayed after after-string!

For example,

(setq help-ol (make-overlay 1 1))
(setq my-ol (make-overlay 1 1))
(overlay-put help-ol 'before-string "Help\n")
(overlay-put my-ol 'after-string "END-OF-BUFFER")

This code will produce the following result:

END-OF-BUFFERHelp

It's obviously not intended result.

I think the help-overlay should use after-string rather than before-string and set appropriate non-zero priority like below:

(overlay-put help-overlay 'after-string help-str)
(overlay-put help-overlay 'priority 1000)

Bookmark timeline position

Hi!

Featurewish:

A keyboard shortcut binding stores the position in (each?) timeline. This means either "cursor position" and/or "cursor position and current timeline view".

Another key binding restores the bookmarked position/view: after invoking, the view (or cursor position) is restored where it was when the command above invoked.

This feature should store its state in a file so that it survives restarts of Emacs or can be synchronized with Emacs settings on other computers as well.

With this feature I can jump to the last "defined" view. I personally would use it to mark "to what tweet I already read the timeline tweets".

I am waiting for such a feature for years ;-)

Twitter API 1.1

This Twitter blog post https://dev.twitter.com/blog/changes-coming-to-twitter-api describes the changes coming to the Twitter API 1.1:

  • required authentication on every API endpoint
  • a new per-endpoint rate-limiting methodology
  • changes to our Developer Rules of the Road, especially around applications that are traditional Twitter clients.

I think the first two points aren't a (big) problem.

The last point includes the Display Guidelines https://dev.twitter.com/terms/display-guidelines :
... at point 5 (Branding), they want this blue bird in the top right corner (incl. a follow link)
... and (point 1 a): "The Tweet author’s avatar must always be displayed."

Menubar disappears, for all emacs modes

I am using

GNU Emacs 23.1.50.1 (i486-pc-linux-gnu, GTK+ Version 2.18.0)
of 2009-09-27 on palmer, modified by Debian

in X11. When I do M-x twittering-mode, the emacs menubar disappears - not just for twittering-mode, but for all modes.

Throw "No such file or directory" on posting if the parent directory is deleted

This might be a bug of emacs, not twittering-mode.
I am not sure there is a workaround on the twittering-mode side.

How to reproduce

Emacs: 23.2.1 (I cannot easily check with HEAD emacs with OS issue, sorry)
Create a directory, exec twittering-update-status-interactive, delete the directory, and post.

$ mkdir -p ~/tmp/foo/bar/hoge
$ touch /tmp/foo/bar/hoge/piyo
(find-file "
/tmp/foo/bar/hoge/piyo")
(twittering-update-status-interactive)
$ rm -rf ~/tmp/foo
C-cC-c in the twittering-edit buffer

Backtrace

My name, post content, OAuth information, and some bytecodes are replaced.

Debugger entered--Lisp error: (file-error "Setting current directory" "そのようなファイルやディレクトリはありません" "/home/myname/tmp/hoge/huga/piyo/")
call-process-region(1 1000 "sha1sum" "/tmp/emacsyZkW2P" t nil)
apply(call-process-region 1 1000 "sha1sum" "/tmp/emacsyZkW2P" t nil nil)
sha1-string-external("...566666666666666666666666666666666666666666666POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml..." t)
sha1-string("...566666666666666666666666666666666666666666666POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml..." t)
sha1("...566666666666666666666666666666666666666666666POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml..." nil nil t)
apply(sha1 ("...566666666666666666666666666666666666666666666POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml..." nil nil t))
twittering-sha1("...566666666666666666666666666666666666666666666POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml..." nil nil t)
twittering-hmac-sha1("dJUG2hW2mWYuy4YwElpwbB0icBBosp9vv51fvftsOE&c6Qc0SgPEvljPPTtYVlKRxVqyb5IjmPbWONtd0JXo0" "POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml...")
twittering-oauth-auth-str("POST" "https://api.twitter.com/1/statuses/update.xml" (("status" . "...")) (("oauth_consumer_key" . "...") ("oauth_nonce" . "...") ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . "1317857208") ("oauth_version" . "1.0") ("oauth_token" . "...")) "...")
twittering-oauth-auth-str-access("POST" "https://api.twitter.com/1/statuses/update.xml" (("status" . "...")) "..." "..." "..." "...")
twittering-add-application-header-to-http-request(((method . "POST") (scheme . "https") (host . "api.twitter.com") (port . 443) (path . "/1/statuses/update.xml") (query-string . "status=...") (encoded-query-alist ("status" . "...")) (uri . "https://api.twitter.com/1/statuses/update.xml?status=...") (uri-without-query . "https://api.twitter.com/1/statuses/update.xml") (header-list ("Content-Length" . "0") ("Host" . "api.twitter.com") ("User-Agent" . "Emacs/23.2 Twittering-mode/HEAD")) (post-body . "")))
twittering-http-post("api.twitter.com" "1/statuses/update" (("status" . "...")) nil nil)
twittering-call-api(update-status ((status . "...")))
twittering-edit-post-status()
call-interactively(twittering-edit-post-status nil nil)

Enhancement

Hi,

It would be nice to mark tweets as "read" or "unread". (like in TweetDeck )

Thanks for mode... I really like it!

Suggestions

Not sure if you want this here or somewhere else...
It would be nice (and maybe you can already do this and I just don't know how) to set a new tweet hook based on what timeline they come in from, and then be able to show all the tweets that came in if you want or, like the example shows, just show the number for that timeline.

I'd also like to be able to zebra stripe the list of tweets. I've tried to dig into the code to find where they are written out to the buffer so i can try to set that up, but I can't seem to find it...

Error getting tweet images

Here's the stack trace:

Debugger entered--Lisp error: (wrong-type-argument stringp 80)
string-match("`(.*)?" 80)
twittering-make-http-request-from-uri("GET" nil "http://a1.twimg.com/profile_images/1137794587/PICT0007_normal.JPG")
twittering-resolve-url-request()
twittering-url-retrieve-async("http://a1.twimg.com/profile_images/1137794587/PICT0007_normal.JPG" twittering-register-image-data)
twittering-make-icon-string(nil nil "http://a1.twimg.com/profile_images/1137794587/PICT0007_normal.JPG")
#[(status prefix) "��\306\307\310\311�!D\312\313\314"#)�\n\205d

Reset OAuth

Is there a way to reset up OAuth? Something got screwed up when I upgraded and now I can't connect to twitter and it won't prompt me to re-authenticate.

Tab-completion for @usernames and #hashtags

Since the tab character is seldom used inside tweets, rebinding the tab key to something more useful, like tab completion, would be very welcome. Tab completion for @usernames or #hashtags would be good.

There is no need to implement a full tab completing function. All one needs is a function that provides a completion table to be used by other completion libraries, such as hippie expand. Tables that come to mind include followed users, hashtags used in the past, followers, and previously mentioned users.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.