develop
mhiretskiy 16 years ago
parent 65ea39fcfa
commit 9bd65f35a7

@ -25,11 +25,48 @@ import fcntl
import cl_utils
pcs = cl_utils.prettyColumnStr
CONWIDTH = 78
class cl_params:
class cl_help:
"""Объект для работы со справкой, и обработкой параметров.
Конструктор __init__ должен определить следующие переменные:
self.chapter список разделов справки, каждый элементы состоит из
имени раздела, флаг видимый/скрытый, кол-во переводов строк
после названия раздела, количество строк после раздела,
тип раздела
Пример: [("Copyright",False,0,2),"options"]
self.relService словарь связей сервисов и действующих опций
ключ - название сервиса, значение - список отображаемых
разделов отмеченных как "options"
Пример: {"samba":[_("Common options"),
_("Service Samba options")]}
self.relOptions словарь связей длинных опций помощи и выводимых разделов
помощи с опциями
ключ - параметр справки, значение список отображаемых
разделов справки
Пример: {"help-ldap":[_("Common options"),
_("Service LDAP options)]}
self.progName словарь имена используемых программ и их номера для
доступа к переменным
Пример: {'cl-groupadd':0, 'cl-groupdel':1}
self.data список данных для словаря, каждый эленмент словарь:
progAccess: список номеров программ отображающих
Пример: {'progAccess':(0,),
'shortOption':"g",
'longOption':"gid",
'optVal':"GID",
'helpChapter':_("Options"),
'help':_("use GID for the new group")
},
после заполнения параметров необходимо выполнить
self._cl_help__setParamHelp() для заполнения справки
"""
def __init__(self, cmdName):
# ширина консоли взята 80
# -1 чтобы компенсировать расстрояние между колонками
self.consolewidth = 79
self.column_width = 32
self.cmdName = cmdName
#короткие опции командной строки
@ -41,7 +78,7 @@ class cl_params:
#optEnd = _("user")
#elif "group" in self.cmdName and not "mod" in self.cmdName:
#optEnd = _("group")
self.__setParamHelp()
#self.__setParamHelp()
def getChapterNumber(self,NameChapter):
# Показать номер раздела по его имени
@ -53,6 +90,8 @@ class cl_params:
return False
def __setParamHelp(self):
# сформировать нужное количество блоков раздела
self.chapterBloc = [""]*len(self.chapter)
# записать параметры в справку
sp = []
for par in self.data:
@ -78,12 +117,12 @@ class cl_params:
helpTxt = pcs(
" -%s, --%s "%(par["shortOption"],longOption),
self.column_width, par['help'],
CONWIDTH-self.column_width)
self.consolewidth-self.column_width)
else:
helpTxt = pcs(
" -%s "%(par["shortOption"]),
self.column_width, par['help'],
CONWIDTH-self.column_width)
self.consolewidth-self.column_width)
self.addChapterHelp(numChapter,helpTxt)
break
elif par.has_key("longOption") and self.access(par):
@ -212,49 +251,29 @@ class cl_params:
break
return ""
BG_BLACK = "40"
BG_RED = "41"
BG_GREEN = "42"
BG_YELLOW = "43"
BG_BLUE = "44"
BG_PURPLE = "45"
BG_CYAN = "46"
BG_WHITE = "47"
FG_BLACK = "30"
FG_RED = "31"
FG_GREEN = "32"
FG_YELLOW = "33"
FG_BLUE = "34"
FG_PURPLE = "35"
FG_CYAN = "36"
FG_WHITE = "37"
ATTR_RESET = "0"
ATTR_BRIGHTOFF = "1"
ATTR_BRIGHTON = "2"
ATTR_UNDERLINE = "3"
ATTR_FLASH = "5"
ATTR_REVERSE = "7"
ATTR_INVISIBLE = "8"
def colorstr(s, *attrs):
return "\033[%sm" % ";".join(attrs) + s
def colorwrite(s, *attrs):
print colorstr(s, *attrs)
class cl_smartconsole:
def printRight(self, offsetLeft, offsetRight):
"""Добавляет необходимое количество пробелов:
class cl_smartcon(object):
selfobj = None
количество пробелов = (ширина консоли - offsetLeft - offsetRight)
"""
def __new__(cls, *args,**kw):
"""Механизм синглтона"""
if cls.selfobj is None:
cls.selfobj = object.__new__(cls,*args,**kw)
return cls.selfobj
def getconsolewidth(self):
"""Получить ширину текущей консоли"""
s = struct.pack("HHHH", 0, 0, 0, 0)
fd_stdout = sys.stdout.fileno()
x = fcntl.ioctl(fd_stdout, termios.TIOCGWINSZ, s)
#(rows, cols, x pixels, y pixels)
cols = struct.unpack("HHHH", x)[1]
return struct.unpack("HHHH", x)[1]
def printRight(self, offsetLeft, offsetRight):
"""Добавляет необходимое количество пробелов:
количество пробелов = (ширина консоли - offsetLeft - offsetRight)
"""
cols = self.getconsolewidth()
for i in range(cols - offsetLeft - offsetRight):
sys.stdout.write(" ")

Loading…
Cancel
Save