Selaa lähdekoodia

Better formatting

oz123 10 vuotta sitten
vanhempi
commit
4c4d266895
3 muutettua tiedostoa jossa 90 lisäystä ja 5 poistoa
  1. 1 0
      docs/source/index.rst
  2. 5 5
      pwman/ui/baseui.py
  3. 84 0
      pwman/ui/tools.py

+ 1 - 0
docs/source/index.rst

@@ -11,6 +11,7 @@ Contents:
 .. toctree::
    :maxdepth: 2
     
+   installing
    tutorial
 
 

+ 5 - 5
pwman/ui/baseui.py

@@ -321,20 +321,20 @@ class BaseCommands(HelpUIMixin, AliasesMixin):
         else:  # pragma: no cover
             rows, cols = 18, 80  # fix this !
 
-        cols -= 8
         return rows, cols
 
     def _format_line(self, tag_pad, nid="ID", user="USER", url="URL",
                      tags="TAGS"):
         return ("{ID:<3} {USER:<{us}}{URL:<{ur}}{Tags:<{tg}}"
                 "".format(ID=nid, USER=user,
-                          URL=url, Tags=tags, us=12,
-                          ur=20, tg=tag_pad - 32))
+                          URL=url, Tags=tags, us=25,
+                          ur=25, tg=32))
 
     def _print_node_line(self, node, rows, cols):
         tagstring = ','.join([t for t in node.tags])
-        fmt = self._format_line(cols - 32, node._id, node.username,
-                                node.url,
+        fmt = self._format_line(cols, node._id, node.username,
+                                node.url[:20]+'...' if (len(node.url) > 22)
+                                else node.url,
                                 tagstring)
         formatted_entry = tools.typeset(fmt, Fore.YELLOW, False)
         print(formatted_entry)

+ 84 - 0
pwman/ui/tools.py

@@ -24,10 +24,14 @@ import subprocess as sp
 import getpass
 import sys
 import struct
+import shlex
+import platform
 import colorama
+import os
 #from pwman.util.config import get_pass_conf
 from pwman.util.callback import Callback
 
+
 if sys.version_info.major > 2:  # pragma: no cover
     raw_input = input
 
@@ -173,6 +177,86 @@ def getpassword(question, argsgiven=None,
             print ("Passwords don't match. Try again.")
 
 
+def get_terminal_size():
+    """ getTerminalSize()
+     - get width and height of console
+     - works on linux,os x,windows,cygwin(windows)
+     originally retrieved from:
+     http://stackoverflow.com/questions/566746/how-to-get-\
+         console-window-width-in-python
+    """
+    current_os = platform.system()
+    tuple_xy = None
+    if current_os == 'Windows':
+        tuple_xy = _get_terminal_size_windows()
+        if tuple_xy is None:
+            tuple_xy = _get_terminal_size_tput()
+            # needed for window's python in cygwin's xterm!
+    if current_os in ['Linux', 'Darwin'] or current_os.startswith('CYGWIN'):
+        tuple_xy = _get_terminal_size_linux()
+    if tuple_xy is None:
+        tuple_xy = (80, 25)      # default value
+    return tuple_xy
+
+
+def _get_terminal_size_windows():  # pragma: no cover
+    try:
+        from ctypes import windll, create_string_buffer
+        # stdin handle is -10
+        # stdout handle is -11
+        # stderr handle is -12
+        h = windll.kernel32.GetStdHandle(-12)
+        csbi = create_string_buffer(22)
+        res = windll.kernel32.GetConsoleScreenBufferInfo(h, csbi)
+        if res:
+            (bufx, bufy, curx, cury, wattr,
+             left, top, right, bottom,
+             maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
+            sizex = right - left + 1
+            sizey = bottom - top + 1
+            return sizex, sizey
+    except:
+        pass
+
+
+def _get_terminal_size_tput():  # pragma: no cover
+    # get terminal width
+    # src: http://stackoverflow.com/questions/263890/how-do-i-\
+    #    find-the-width-height-of-a-terminal-window
+    try:
+        cols = int(sp.check_call(shlex.split('tput cols')))
+        rows = int(sp.check_call(shlex.split('tput lines')))
+        return (cols, rows)
+    except:
+        pass
+
+
+def _get_terminal_size_linux():  # pragma: no cover
+    def ioctl_GWINSZ(fd):
+        try:
+            import fcntl
+            import termios
+            cr = struct.unpack('hh',
+                               fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))
+            return cr
+        except:
+            pass
+    cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
+    if not cr:
+        try:
+            fd = os.open(os.ctermid(), os.O_RDONLY)
+            cr = ioctl_GWINSZ(fd)
+            os.close(fd)
+        except:
+            pass
+    if not cr:
+        try:
+            cr = (os.environ['LINES'], os.environ['COLUMNS'])
+        except:
+            return None
+    return int(cr[1]), int(cr[0])
+
+
 def gettermsize():  # pragma: no cover
     if sys.stdout.isatty():
         s = struct.pack("HHHH", 0, 0, 0, 0)