Merge pull request #71 from polarkac/better_errors
[rainbowstream.git] / docs / index.rst
1 Rainbow Stream
2 --------------
3
4 .. image:: http://img.shields.io/pypi/dm/rainbowstream.svg?style=flat
5 :target: https://pypi.python.org/pypi/rainbowstream
6
7 .. image:: http://img.shields.io/pypi/v/rainbowstream.svg?style=flat
8 :target: https://pypi.python.org/pypi/rainbowstream
9
10 Terminal-based Twitter Client. Realtime tweetstream, compose, search ,
11 favorite … and much more fun directly from terminal.
12
13 This package is built on the top of `Python Twitter Tool`_ and `Twitter API`_,
14 can run on Python 2.7.x and 3.x .
15
16 Install
17 -------
18
19 The quick way
20 ^^^^^^^^^^^^^
21
22 You will need Python and pip (2.7.x or 3.x).
23
24 .. code:: bash
25
26 sudo pip install rainbowstream
27 # Python 3 users: sudo pip3 install rainbowstream
28
29 The recommended way
30 ^^^^^^^^^^^^^^^^^^^
31
32 Use `virtualenv`_
33
34 .. code:: bash
35
36 virtualenv venv
37 # Python 3 users : use -p to specify your Python 3 localtion as below
38 # virtualenv -p /usr/bin/python3 venv
39 source venv/bin/activate
40 pip install rainbowstream
41
42 Troubleshooting
43 ^^^^^^^^^^^^^^^
44
45 If you use Linux, you might need to install some packages if you haven't already.
46 For debian-based distros, these can be installed with
47
48 .. code:: bash
49
50 sudo apt-get install python-dev libjpeg libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev
51
52 Besides, Mac OSX Maverick with Xcode 5.1 has a well-known `clang unknown argument`_ problem with
53 the ``Pillow`` package installation - a dependency of this app.
54 If you are in this case, I recommend taking a look at `Issue #10`_ and let me know if this workaround doesn't work for you.
55
56 .. code:: bash
57
58 export ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future
59
60 If installation in *the quick way* doesn't work:
61
62 - ``sudo pip uninstall rainbowstream``
63 - use the *virtualenv way* above
64 - `create an issue`_ and provide:
65
66 + Your OS
67 + Your Python version
68
69 Usage
70 -----
71
72 The stream
73 ^^^^^^^^^^
74
75 Just type
76
77 .. code:: bash
78
79 rainbowstream
80
81 and see your stream.
82
83 I shipped a feature which can display **tweet's images directly on terminal**.
84 You can try it with:
85
86 .. code:: bash
87
88 rainbowstream -iot # Or rainbowstream --image-on-term
89
90 You also can change the config key ``IMAGE_ON_TERM`` to ``True`` inside the app
91 to enable above feature,
92 change ``IMAGE_SHIFT`` to set image's margin (relative to your terminal's width)
93 or ``IMAGE_MAX_HEIGHT`` to control max height of every image.
94 (see `config management`_ section).
95
96 In the first time you will be asked for authorization of Rainbow Stream
97 app at Twitter. Just click the “Authorize access” button and paste PIN
98 number to the terminal, the rainbow will start.
99
100 You might want to use rainbowstream via an **HTTP/SOCKS proxy**. Proxy settings are
101 provided as follows:
102
103 .. code:: bash
104
105 rainbowstream --proxy-host localhost --proxy-port 1337 --proxy-type HTTP
106 # or using the short form:
107 rainbowstream -ph localhost -pp 1337 -pt HTTP
108
109 Both ``--proxy-port`` and ``--proxy-type`` can be omitted. In this case default
110 proxy port ``8080`` and default proxy type ``SOCKS5`` are used.
111
112 The interactive mode
113 ^^^^^^^^^^^^^^^^^^^^
114
115 While your personal stream is continued, you are also ready to tweet,
116 search, reply, retweet… directly from console. Simply type “h” and hit
117 the Enter key to see the help.
118
119 Input is in interactive mode. It means that you can use arrow key to
120 move up and down history, tab-autocomplete or 2 tab to view available
121 suggestion. Input history from previous run is available as well.
122
123 Here is full list of supported command:
124
125 **Explore Commands**
126
127 - ``trend`` will show global trending topics. ``trend US`` will show trends in United States while ``trend JP Tokyo`` will show trends in Tokyo/Japan.
128
129 - ``home`` will show your timeline. ``home 10`` will print exactly 10 tweets.
130
131 - ``notification`` will show your notification from the time you started RainbowStream.
132
133 - ``mentions`` will show mentions timeline. ``mentions 7`` will show 7 mention tweets.
134
135 - ``whois @dtvd88`` will show profile of @dtvd88.
136
137 - ``view @mdo`` will show @mdo ’s timeline. ``view @dmo 9`` will print exactly 9 tweets.
138
139 - ``s noah`` will search the word *‘noah’*. Result will come back with highlight. Search can be performed with or without hashtag.
140
141 **Tweet Commands**
142
143 - ``t the rainbow is god's promise to noah`` will tweet exactly *‘the rainbow is god’s promise to noah’*.
144
145 - ``rt 12`` will retweet the tweet with *[id=12]*. You can see id of each tweet beside the time.
146
147 - ``quote 12`` will quote the tweet with *[id=12]*. If no extra text is added, the quote will be cancelled.
148
149 - ``allrt 12 20`` will list 20 newest retweets of the tweet with *[id=12]*. If the number of retweets is not specified, 5 newest retweets will be listed instead.
150
151 - ``conversation 12`` will show the chain of replies prior to the tweet with *[id=12]*.
152
153 - ``rep 12 Really`` will reply *‘Really’* to the tweet with *[id=12]*.
154
155 - ``fav 12`` will favorite the tweet with *[id=12]*.
156
157 - ``ufav 12`` will unfavorite tweet with *[id=12]*.
158
159 - ``share 12`` will copy link to tweet with *[id=12]* to your clipboard if you are on a Mac, or display it directly if you are on Linux.
160
161 - ``del 12`` will delete tweet with *[id=12]*.
162
163 - ``show image 12`` will show the image in tweet with *[id=12]* in your OS’s image viewer.
164
165 - ``open 12`` will open url in tweet with *[id=12]* in your OS’s default browser.
166
167 **Direct Messages Commands**
168
169 - ``inbox`` will show inbox messages. ``inbox 7`` will show newest 7 messages.
170
171 - ``thread 2`` will show full thread with [id=2].
172
173 - ``mes @dtvd88 hi`` will send a ``hi`` message to @dtvd88.
174
175 - ``trash 5`` will remove message with *[message\_id=5]*
176
177 **Friends and followers Commands**
178
179 - ``ls fl`` will list all your followers (people who are following you).
180
181 - ``ls fr`` will list all your friends (people who you are following).
182
183 - ``fl @dtvd88`` will follow @dtvd88.
184
185 - ``ufl @dtvd88`` will unfollow @dtvd88.
186
187 - ``mute @dtvd88`` will mute @dtvd88.
188
189 - ``unmute @dtvd88`` will unmute @dtvd88.
190
191 - ``muting`` will list muting users.
192
193 - ``block @dtvd88`` will block @dtvd88.
194
195 - ``unblock @dtvd88`` will unblock @dtvd88.
196
197 - ``report @dtvd88`` will report @dtvd88 as a spam account.
198
199 **Twitter list**
200
201 - ``list`` will show all lists you are belong to.
202
203 - ``list home`` will show timeline of list. You will be asked for list's name.
204
205 - ``list all_mem`` will show list's all members.
206
207 - ``list all_sub`` will show list's all subscribers.
208
209 - ``list add`` will add specific person to a list owned by you.
210
211 - ``list rm`` will remove specific person from a list owned by you.
212
213 - ``list sub`` will subscribe you to a specific list.
214
215 - ``list unsub`` will unsubscribe you from a specific list.
216
217 - ``list own`` will show all list owned by you.
218
219 - ``list new`` will create a new list.
220
221 - ``list update`` will update a list owned by you.
222
223 - ``list del`` will delete a list owned by you.
224
225 **Switching Stream Commands**
226
227 - ``switch public #AKB48`` will switch current stream to public stream and track keyword ``AKB48``
228
229 - ``switch public #AKB48 -f`` will do exactly as above but will ask you to provide 2 list:
230
231 ``Only nicks`` decide what nicks will be include only.
232
233 ``Ignore nicks``\ decide what nicks will be exclude.
234
235 - ``switch mine`` will switch current stream to personal stream. ``-f`` will work as well.
236
237 - ``switch list`` will switch to a Twitter list's stream. You will be asked for list name.
238
239 **Smart shell**
240
241 - Put anything to terminal, the app will try to eval and display result as a python interactive shell.
242
243 + ``142857*2`` or ``101**3`` like a calculator.
244 + Even ``cal`` will show the calendar for current month.
245 + Put ``order_rainbow('anything')`` or ``random_rainbow('wahahaha')`` will make more fun :)
246
247 **Config Management**
248
249 - ``theme`` will list available themes.
250
251 + ``theme monokai`` will apply *monokai* theme immediately.
252 + Changed theme will be remember as the next time's default theme.
253
254 - ``config`` will list all config key.
255
256 + ``config ASCII_ART`` will output current value of *ASCII_ART* config key.
257 + ``config TREND_MAX default`` will output default value of *TREND_MAX* config key.
258 + ``config CUSTOM_CONFIG drop`` will drop *CUSTOM_CONFIG* config key.
259 + ``config IMAGE_ON_TERM = true`` will set value of *IMAGE_ON_TERM* config key to *True*.
260
261 **Screening Commands**
262
263 - ``h`` will show the help.
264
265 - ``p`` will pause the stream.
266
267 - ``r`` will unpause the stream.
268
269 - ``c`` will clear the screen.
270
271 - ``v`` will show version info.
272
273 - ``q`` will quit.
274
275 Theme customization
276 ^^^^^^^^^^^^^^^^^^^
277
278 Rainbow Stream is shipped with some default themes.
279 You can either change theme by ``theme`` command or create your favorite one.
280
281 Theme’s screenshot:
282
283 - Monokai
284
285 .. figure:: https://raw.githubusercontent.com/DTVD/rainbowstream/master/screenshot/themes/Monokai.png
286 :alt: monokai
287
288 - Solarized
289
290 .. figure:: https://raw.githubusercontent.com/DTVD/rainbowstream/master/screenshot/themes/Solarized.png
291 :alt: solarized
292
293 - Tomorrow Night
294
295 .. figure:: https://raw.githubusercontent.com/DTVD/rainbowstream/master/screenshot/themes/TomorrowNight.png
296 :alt: tomorrownight
297
298 - Larapaste
299
300 .. figure:: https://raw.githubusercontent.com/DTVD/rainbowstream/master/screenshot/themes/larapaste.png
301 :alt: larapaste
302
303 For detaile information, see `theme usage and customization`_.
304
305 Config explanation
306 ^^^^^^^^^^^^^^^^^^
307
308 Rainbow Stream has a custom config file located at ``~/.rainbow_config.json`` which will be loaded **after** its `default config`_. You are free to change anything on your custom config, but if you messed up with JSON format, the app would still works fine. Simply overwrite your custom config withe the `default config`_ to solve format problems.
309
310 You also can view or set a new value of every config key by ``config`` command (See **Interactive mode** section above).
311
312 - ``HEARTBEAT_TIMEOUT``: after this timeout (count by minutes), the stream will automatically hangup.
313
314 - ``IMAGE_ON_TERM``: display tweet's image directly on terminal.
315
316 - ``THEME``: current theme.
317
318 - ``ASCII_ART``: diplay your twitter name by ascii art at stream begin or not.
319
320 - ``HIDE_PROMPT``: hide prompt after receiving a tweet or not.
321
322 - ``PREFIX``: display string of prompt.
323
324 - ``SEARCH_TYPE``: search type in 'search' command ('mixed','recent','popular').
325
326 - ``SEARCH_MAX_RECORD``: max tweets can display on 'search' command.
327
328 - ``HOME_TWEET_NUM``: default tweets to display on 'home' command.
329
330 - ``RETWEETS_SHOW_NUM``: default tweets to display on 'allrt' command.
331
332 - ``CONVERSATION_MAX``: max tweet in a 'conversation' thread.
333
334 - ``QUOTE_FORMAT``: format when quote a tweet
335
336 + ``#comment``: Your own comment about the tweet
337 + ``#owner``: owner's username with '@'
338 + ``#tweet``: original tweet
339
340 - ``THREAD_META_LEFT``: format for meta information of messages from partner which is display in the left of screen.
341
342 - ``THREAD_META_RIGHT``: format for meta information of messages from you which is display in the right of screen.
343
344 - ``THREAD_MIN_WIDTH``: minimum width of a message frame.
345
346 - ``NOTIFY_FORMAT``: format of a notification.
347
348 - ``MESSAGES_DISPLAY``: default messages to display on 'inbox' or 'sent' command.
349
350 - ``TREND_MAX``: default trends to display on 'trend' command.
351
352 - ``LIST_MAX``: default tweets to display on 'list home' command.
353
354 - ``ONLY_LIST``: filter list on 'switch' command. Eg: ["@fat","mdo"]
355
356 - ``IGNORE_LIST``: ignore list on 'switch' command. Eg: ["@fat"]
357
358 - ``HISTORY_FILENAME``: name of file which stores input history.
359
360 - ``IMAGE_SHIFT``: left and right margin of image in '-iot'/'--image-on-term' mode.
361
362 - ``IMAGE_MAX_HEIGHT``: max height of image in '-iot'/'--image-on-term' mode.
363
364 - ``STREAM_DELAY``: seconds to wait before displaying another tweet, will drop all tweets while waiting. This value can be used to slow down the stream.
365
366 - ``USER_DOMAIN``: user URL of Twitter Streaming API.
367
368 - ``PUBLIC_DOMAIN``: public URL of Twitter Streaming API.
369
370 - ``SITE_DOMAIN``: site URL of Twitter Streaming API.
371
372 - ``FORMAT``: display format for tweet and message.
373
374 + ``CLOCK_FORMAT``: time format, see `Python's strftime format`_.
375 + ``DISPLAY``: decide how tweet will be printed.
376
377 + ``#name``: Twitter's name
378 + ``#nick``: Twitter's screen name
379 + ``#clock``: Datetime
380 + ``#rt_count``: retweets count
381 + ``#fa_count``: favorites count
382 + ``#id``: ID
383 + ``#fav``: favorited symbol
384 + ``#fav``: favorited symbol
385 + ``#tweet``: Tweet's content
386 + ``#sender_name``: Message's sender name
387 + ``#sender_nick``: Message's sender screen name
388 + ``#to``: '>>>' symbol
389 + ``#recipient_name``: Message's recipient name
390 + ``#recipient_nick``: Message's recipient screen name
391
392 In every format, you can use unicode characters like ``\u2665``.
393 Mac users also can use emoji characters as well (Ex: ``::zap::``).
394 See `Emoji cheatsheet`_ for details.
395
396 Development
397 -----------
398
399 If you want to build a runnable version yourself, follow these simple
400 steps
401
402 - `Create your own Twitter Application`_
403 - Get your Twitter application’s API key and secret
404 - Fork github's repo and clone in your system.
405 - Create a file ``consumer.py`` in ```rainbowstream```_ folder with
406 following content
407
408 .. code:: python
409
410 # Consumer information
411 CONSUMER_KEY = 'APIKey' # Your Twitter application's API key
412 CONSUMER_SECRET = 'APISecret' # Your Twitter application's API secret
413
414 - Use pip to install in local
415
416 .. code:: bash
417
418 # cd to directory which contains setup.py (cloned directory)
419 virtualenv venv # Python3 users: use -p to specify python3
420 source venv/bin/activate
421 pip install -e .
422 which rainbowstream # /this-directory/venv/bin/rainbowstream
423 # Remove ~/.rainbow_oauth if exists
424 rainbowstream # local version of rainbowstream
425
426 .. _Create your own Twitter Application: https://apps.twitter.com/app/new
427 .. _``rainbowstream``: https://github.com/DTVD/rainbowstream/tree/master/rainbowstream
428 .. _Python Twitter Tool: http://mike.verdone.ca/twitter/
429 .. _Twitter API: https://dev.twitter.com/docs/api/1.1
430 .. _theme usage and customization: https://github.com/DTVD/rainbowstream/blob/master/theme.md
431 .. _virtualenv: http://docs.python-guide.org/en/latest/dev/virtualenvs/
432 .. _config management: http://rainbowstream.readthedocs.org/en/latest/#config-explanation
433 .. _Python's strftime format: https://docs.python.org/2/library/time.html#time.strftime
434 .. _clang unknown argument: http://kaspermunck.github.io/2014/03/fixing-clang-error/
435 .. _Issue #10: https://github.com/DTVD/rainbowstream/issues/10
436 .. _default config: https://github.com/DTVD/rainbowstream/blob/master/rainbowstream/colorset/config
437 .. _Emoji cheatsheet: http://www.emoji-cheat-sheet.com/