aboutsummaryrefslogtreecommitdiffstats
path: root/transmission-remote-cli
diff options
context:
space:
mode:
Diffstat (limited to 'transmission-remote-cli')
-rwxr-xr-xtransmission-remote-cli34
1 files changed, 21 insertions, 13 deletions
diff --git a/transmission-remote-cli b/transmission-remote-cli
index bbb3ea9..1dcce92 100755
--- a/transmission-remote-cli
+++ b/transmission-remote-cli
@@ -16,10 +16,10 @@
# http://www.gnu.org/licenses/gpl-3.0.txt #
########################################################################
-VERSION = '1.6.0'
+VERSION = '1.6.1'
TRNSM_VERSION_MIN = '1.90'
-TRNSM_VERSION_MAX = '2.80'
+TRNSM_VERSION_MAX = '2.81'
RPC_VERSION_MIN = 8
RPC_VERSION_MAX = 15
@@ -61,10 +61,11 @@ import curses.ascii
from textwrap import wrap
from subprocess import call, Popen
import netrc
-import glob
import operator
import urlparse
+locale.setlocale(locale.LC_ALL, '')
+ENCODING = locale.getpreferredencoding() or 'UTF-8'
# optional features provided by non-standard modules
features = {'dns':False, 'geoip':False, 'ipy':False}
@@ -865,9 +866,6 @@ class Interface:
self.compact_torrentlist = False # draw only one line for each torrent in compact mode
self.exit_now = False
- locale.setlocale(locale.LC_ALL, '')
- self.encoding = locale.getpreferredencoding() or 'UTF-8'
-
self.keybindings = {
ord('?'): self.call_list_key_bindings,
curses.KEY_F1: self.call_list_key_bindings,
@@ -990,7 +988,7 @@ class Interface:
curses.endwin()
def enc(self, text):
- return text.encode(self.encoding, 'replace')
+ return text.encode(ENCODING, 'replace')
def get_screen_size(self):
time.sleep(0.1) # prevents curses.error on rapid resizing
@@ -2788,6 +2786,8 @@ class Interface:
win = self.window(height, width, message=message)
win.keypad(True)
show_cursor()
+ if not isinstance(input, unicode):
+ input = unicode(input, ENCODING)
index = len(input)
while True:
# Cut the text into pages, each as long as the text field
@@ -2798,7 +2798,7 @@ class Interface:
color = (curses.color_pair(self.colors.id('dialog_important')) if self.highlight_dialog
else curses.color_pair(self.colors.id('dialog')))
- win.addstr(height - 2, 2, displaytext.ljust(textwidth), color)
+ win.addstr(height - 2, 2, self.enc(displaytext.ljust(textwidth)), color)
win.move(height - 2, displayindex + 2)
c = win.getch()
if c == 27 or c == curses.KEY_BREAK:
@@ -2834,15 +2834,23 @@ class Interface:
hide_cursor()
return input
elif c >= 32 and c < 127:
- input = input[:index] + chr(c) + (index < len(input) and input[index:] or '')
+ input = input[:index] + unicode(chr(c), ENCODING) + (index < len(input) and input[index:] or '')
index += 1
if on_change: on_change(input)
elif c == ord('\t') and tab_complete:
- possible_choices = glob.glob(tilde2homedir(input)+'*')
+ (dirname, filename) = os.path.split(tilde2homedir(input))
+ if not dirname:
+ dirname = unicode(os.getcwd())
+ try:
+ possible_choices = [ choice for choice in os.listdir(dirname)
+ if choice.startswith(filename) ]
+ except OSError:
+ continue;
if tab_complete == 'dirs':
- possible_choices = [ d for d in possible_choices if os.path.isdir(d) ]
+ possible_choices = [ d for d in possible_choices
+ if os.path.isdir(os.path.join(dirname, d)) ]
if(possible_choices):
- input = os.path.commonprefix(possible_choices)
+ input = os.path.join(dirname, os.path.commonprefix(possible_choices))
if len(possible_choices) == 1 and os.path.isdir(input) and input.endswith(os.sep) == False:
input += os.sep
input = homedir2tilde(input)
@@ -3308,7 +3316,7 @@ def ljust_columns(text, max_width, padchar=' '):
def len_columns(text):
""" Returns the amount of columns that <text> would occupy. """
if type(text) == type(str()):
- text = unicode(text)
+ text = unicode(text, ENCODING)
columns = 0
for character in text:
columns += 2 if unicodedata.east_asian_width(character) in ('W', 'F') else 1