"""
Init
"""
- self.options = sorted(options)
+ self.options = options
+ self.current_candidates = []
return
def complete(self, text, state):
"""
response = None
if state == 0:
- if text:
- self.matches = [s
- for s in self.options
- if s and s.startswith(text)]
+ origline = readline.get_line_buffer()
+ begin = readline.get_begidx()
+ end = readline.get_endidx()
+ being_completed = origline[begin:end]
+ words = origline.split()
+
+ if not words:
+ self.current_candidates = sorted(self.options.keys())
else:
- self.matches = self.options
+ try:
+ if begin == 0:
+ candidates = self.options.keys()
+ else:
+ first = words[0]
+ candidates = self.options[first]
+
+ if being_completed:
+ self.current_candidates = [ w for w in candidates
+ if w.startswith(being_completed) ]
+ else:
+ self.current_candidates = candidates
+
+ except (KeyError, IndexError), err:
+ self.current_candidates = []
try:
- response = self.matches[state]
+ response = self.current_candidates[state]
except IndexError:
response = None
return response
-def init_interactive_shell(set):
+def init_interactive_shell(d):
"""
Init the rainbow shell
"""
- readline.set_completer(RainbowCompleter(set).complete)
+ readline.set_completer(RainbowCompleter(d).complete)
readline.parse_and_bind('set editing-mode vi')
readline.parse_and_bind("set input-meta on")
readline.parse_and_bind("set convert-meta off")
]
-def draw(t, keyword=None):
+def draw(t, keyword=None, fil=[], ig=[]):
"""
Draw the rainbow
"""
+
# Retrieve tweet
tid = t['id']
text = t['text']
date = date - datetime.timedelta(seconds=time.timezone)
clock = date.strftime('%Y/%m/%d %H:%M:%S')
+ # Filter and ignore
+ screen_name = '@' + screen_name
+ if fil and screen_name not in fil:
+ return
+ if ig and screen_name in ig:
+ return
+
res = db.tweet_query(tid)
if not res:
db.store(tid)
rid = res[0].rainbow_id
# Format info
- user = cycle_color(name) + grey(' ' + '@' + screen_name + ' ')
+ user = cycle_color(name) + grey(' ' + screen_name + ' ')
meta = grey('[' + clock + '] [id=' + str(rid) + ']')
tweet = text.split()
# Highlight RT
'-tt',
'--track-keywords',
help='Search the stream for specific text.')
+ parser.add_argument(
+ '-fil',
+ '--filter',
+ help='Filter specific screen_name.')
+ parser.add_argument(
+ '-ig',
+ '--ignore',
+ help='Ignore specific screen_name.')
return parser.parse_args()
try:
target = g['stuff'].split()[0]
+ # Filter and ignore
+ args = parse_arguments()
+ try :
+ if g['stuff'].split()[-1] == '-f':
+ only = raw_input('Only nicks: ')
+ ignore = raw_input('Ignore nicks: ')
+ args.filter = only.split(',')
+ args.ignore = ignore.split(',')
+ elif g['stuff'].split()[-1] == '-d':
+ args.filter = ONLY_LIST
+ args.ignore = IGNORE_LIST
+ except:
+ printNicely(red('Sorry, wrong format.'))
+ return
+
# Public stream
if target == 'public':
keyword = g['stuff'].split()[1]
keyword = keyword[1:]
# Kill old process
os.kill(g['stream_pid'], signal.SIGKILL)
- args = parse_arguments()
args.track_keywords = keyword
# Start new process
p = Process(
- target=stream,
+ target=stream,
args=(
- PUBLIC_DOMAIN,
+ PUBLIC_DOMAIN,
args))
p.start()
g['stream_pid'] = p.pid
elif target == 'mine':
# Kill old process
os.kill(g['stream_pid'], signal.SIGKILL)
- args = parse_arguments()
# Start new process
p = Process(
target=stream,
g['original_name']))
p.start()
g['stream_pid'] = p.pid
+ printNicely('')
printNicely(green('Stream switched.'))
+ if args.filter:
+ printNicely(cyan('Only: ' + str(args.filter)))
+ if args.ignore:
+ printNicely(red('Ignore: ' + str(args.ignore)))
+ printNicely('')
except:
printNicely(red('Sorry I can\'t understand.'))
g['prefix'] = False
You are already on your personal stream:
"switch public #AKB" will switch to public stream and follow "AKB" keyword.
"switch mine" will switch back to your personal stream.
+ "switch mine -f" will prompt to enter the filter.
+ "Only nicks" filter will decide nicks will be INCLUDE ONLY.
+ "Ignore nicks" filter will decide nicks will be EXCLUDE.
+ "switch mine -d" will use the config's ONLY_LIST and IGNORE_LIST(see config.py).
For more action:
"home" will show your timeline. "home 7" will show 7 tweet.
"view @bob" will show your friend @bob's home.
"""
Listen to user's input
"""
- init_interactive_shell(cmdset)
+ d = dict(zip(
+ cmdset,
+ [
+ ['public #','mine'], # switch
+ [], # home
+ ['@'], # view
+ [], # tweet
+ [], # retweet
+ [], # reply
+ [], # delete
+ ['#'], # search
+ [], # friend
+ [], # follower
+ [], # help
+ [], # clear
+ [], # quit
+ ]
+ ))
+ init_interactive_shell(d)
first = True
while True:
if g['prefix'] and not first:
"""
Track the stream
"""
+
# The Logo
art_dict = {
USER_DOMAIN: name,
SITE_DOMAIN: 'Site Stream',
}
ascii_art(art_dict[domain])
+
# These arguments are optional:
stream_args = dict(
timeout=args.timeout,
elif tweet is Hangup:
printNicely("-- Hangup --")
elif tweet.get('text'):
- draw(t=tweet, keyword=args.track_keywords)
+ draw(t=tweet, keyword=args.track_keywords, fil=args.filter, ig=args.ignore)
def fly():