mirror of
https://github.com/erkin/ponysay.git
synced 2024-11-25 13:57:59 +01:00
xdg-data-dir and /etc
This commit is contained in:
parent
e3fdf8e6d2
commit
2ddd5859b3
3 changed files with 74 additions and 18 deletions
|
@ -10,7 +10,8 @@ Version 3.0
|
||||||
|
|
||||||
Environment variable 'PONYSAY_WRAP_EXCEED' has been added.
|
Environment variable 'PONYSAY_WRAP_EXCEED' has been added.
|
||||||
|
|
||||||
Added support for ~/.ponysayrc.
|
Added support for ~/.ponysayrc with the alternatives: ${XDG_CONFIG_HOME}/ponysay/ponysayrc
|
||||||
|
and ~/.config/ponysay/ponysayrc as well as the global fallback /etc/ponysayrc.
|
||||||
|
|
||||||
-f, +f and -q may be unargumented if that are at the end of the command line.
|
-f, +f and -q may be unargumented if that are at the end of the command line.
|
||||||
|
|
||||||
|
@ -21,6 +22,8 @@ Version 3.0
|
||||||
Pony metadata tags BALLOON TOP and BALLOON BOTTOM can be used to specify how
|
Pony metadata tags BALLOON TOP and BALLOON BOTTOM can be used to specify how
|
||||||
much extra height the balloon causes at the top and at the bottom of the pony.
|
much extra height the balloon causes at the top and at the bottom of the pony.
|
||||||
|
|
||||||
|
${XDG_DATA_HOME}/ponysay/* is allowed in favour of ${HOME}/.local/share/ponysay/*
|
||||||
|
|
||||||
|
|
||||||
Version 2.9.1
|
Version 2.9.1
|
||||||
|
|
||||||
|
|
|
@ -2627,7 +2627,8 @@ Environment variable @env{PONYSAY_WRAP_LIMIT} has been added.
|
||||||
@item
|
@item
|
||||||
Environment variable @env{PONYSAY_WRAP_EXCEED} has been added.
|
Environment variable @env{PONYSAY_WRAP_EXCEED} has been added.
|
||||||
@item
|
@item
|
||||||
Added support for @file{~/.ponysay.rc}.
|
Added support for @file{~/.ponysayrc} with the alternatives: @file{${XDG_CONFIG_HOME}/ponysay/ponysayrc}
|
||||||
|
and @file{~/.config/ponysay/ponysayrc} as well as the global fallback @file{/etc/ponysayrc}
|
||||||
@item
|
@item
|
||||||
@option{-f}, @option{+f} and @option{-q} may be unargumented if that are at the end of the command line.
|
@option{-f}, @option{+f} and @option{-q} may be unargumented if that are at the end of the command line.
|
||||||
@item
|
@item
|
||||||
|
@ -2637,6 +2638,8 @@ Added support for @file{~/.ponysay.rc}.
|
||||||
@item
|
@item
|
||||||
Pony metadata tags @var{BALLOON TOP} and @var{BALLOON BOTTOM} can be used to specify how much extra
|
Pony metadata tags @var{BALLOON TOP} and @var{BALLOON BOTTOM} can be used to specify how much extra
|
||||||
height the balloon causes at the top and at the bottom of the pony.
|
height the balloon causes at the top and at the bottom of the pony.
|
||||||
|
@item
|
||||||
|
@file{${XDG_DATA_HOME}/ponysay/*} is allowed in favour of @file{${HOME}/.local/share/ponysay/*}
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
|
||||||
|
|
82
ponysay.py
82
ponysay.py
|
@ -94,17 +94,59 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
The user's home directory
|
The user's home directory
|
||||||
'''
|
'''
|
||||||
self.HOME = os.environ['HOME'] if 'HOME' in os.environ else os.path.expanduser('~')
|
self.HOME = os.environ['HOME'] if 'HOME' in os.environ else ''
|
||||||
|
if len(self.HOME) == 0:
|
||||||
|
os.environ['HOME'] = self.HOME = os.path.expanduser('~')
|
||||||
|
|
||||||
## Change system enviroments with ~/.ponysayrc
|
|
||||||
if os.path.exists(self.HOME + '/.ponysayrc'):
|
|
||||||
with open(self.HOME + '/.ponysayrc', 'rb') as ponysayrc:
|
|
||||||
code = ponysayrc.read().decode('utf8', 'replace') + '\n'
|
|
||||||
env = os.environ
|
|
||||||
code = compile(code, self.HOME + '/.ponysayrc', 'exec')
|
|
||||||
exec(code)
|
|
||||||
|
|
||||||
self.HOME = os.environ['HOME'] if 'HOME' in os.environ else os.path.expanduser('~') # in case ~/.ponysayrc changes it
|
'''
|
||||||
|
Parse a file name encoded with environment variables
|
||||||
|
|
||||||
|
@param file The encoded file name
|
||||||
|
@return The target file name, None if the environment variables are not declared
|
||||||
|
'''
|
||||||
|
def parsefile(file):
|
||||||
|
if '$' in file:
|
||||||
|
buf = ''
|
||||||
|
esc = False
|
||||||
|
var = None
|
||||||
|
for c in file:
|
||||||
|
if esc:
|
||||||
|
buf += c
|
||||||
|
esc = False
|
||||||
|
elif var is not None:
|
||||||
|
if c == '/':
|
||||||
|
var = os.environ[var] if var in os.environ else ''
|
||||||
|
if len(var) == 0:
|
||||||
|
return None
|
||||||
|
buf += var + c
|
||||||
|
var = None
|
||||||
|
else:
|
||||||
|
var += c
|
||||||
|
elif c == '$':
|
||||||
|
var = ''
|
||||||
|
elif c == '\\':
|
||||||
|
esc = True
|
||||||
|
else:
|
||||||
|
buf += c
|
||||||
|
return buf
|
||||||
|
return file
|
||||||
|
|
||||||
|
|
||||||
|
## Change system enviroment variables with ponysayrc
|
||||||
|
for file in ('$XDG_CONFIG_HOME/ponysay/ponysayrc', '$HOME/.config/ponysay/ponysayrc', '$HOME/.ponysayrc', '/etc/ponysayrc'):
|
||||||
|
file = parsefile(file)
|
||||||
|
if os.path.exists(file):
|
||||||
|
with open(file, 'rb') as ponysayrc:
|
||||||
|
code = ponysayrc.read().decode('utf8', 'replace') + '\n'
|
||||||
|
env = os.environ
|
||||||
|
code = compile(code, file, 'exec')
|
||||||
|
exec(code)
|
||||||
|
break
|
||||||
|
|
||||||
|
self.HOME = os.environ['HOME'] if 'HOME' in os.environ else '' # in case ~/.ponysayrc changes it
|
||||||
|
if len(self.HOME) == 0:
|
||||||
|
os.environ['HOME'] = self.HOME = os.path.expanduser('~')
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -154,19 +196,27 @@ class Ponysay():
|
||||||
self.mode = ''
|
self.mode = ''
|
||||||
|
|
||||||
|
|
||||||
|
def share(file):
|
||||||
|
return [parsefile(item) + file for item in [
|
||||||
|
'$XDG_DATA_HOME/ponysay/',
|
||||||
|
'$HOME/.local/share/ponysay/',
|
||||||
|
'/usr/share/ponysay/',
|
||||||
|
]]
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
The directories where pony files are stored, ttyponies/ are used if the terminal is Linux VT (also known as TTY) and not with KMS
|
The directories where pony files are stored, ttyponies/ are used if the terminal is Linux VT (also known as TTY) and not with KMS
|
||||||
'''
|
'''
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.xponydirs = []
|
self.xponydirs = []
|
||||||
_ponydirs = [self.HOME + '/.local/share/ponysay/ponies/', '/usr/share/ponysay/ponies/']
|
_ponydirs = share('ponies/')
|
||||||
for ponydir in _ponydirs:
|
for ponydir in _ponydirs:
|
||||||
if os.path.isdir(ponydir) and (ponydir not in appendset):
|
if os.path.isdir(ponydir) and (ponydir not in appendset):
|
||||||
self.xponydirs.append(ponydir)
|
self.xponydirs.append(ponydir)
|
||||||
appendset.add(ponydir)
|
appendset.add(ponydir)
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.vtponydirs = []
|
self.vtponydirs = []
|
||||||
_ponydirs = [self.HOME + '/.local/share/ponysay/ttyponies/', '/usr/share/ponysay/ttyponies/']
|
_ponydirs = share('ttyponies/')
|
||||||
for ponydir in _ponydirs:
|
for ponydir in _ponydirs:
|
||||||
if os.path.isdir(ponydir) and (ponydir not in appendset):
|
if os.path.isdir(ponydir) and (ponydir not in appendset):
|
||||||
self.vtponydirs.append(ponydir)
|
self.vtponydirs.append(ponydir)
|
||||||
|
@ -178,14 +228,14 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.extraxponydirs = []
|
self.extraxponydirs = []
|
||||||
_extraponydirs = [self.HOME + '/.local/share/ponysay/extraponies/', '/usr/share/ponysay/extraponies/']
|
_extraponydirs = share('extraponies/')
|
||||||
for extraponydir in _extraponydirs:
|
for extraponydir in _extraponydirs:
|
||||||
if os.path.isdir(extraponydir) and (extraponydir not in appendset):
|
if os.path.isdir(extraponydir) and (extraponydir not in appendset):
|
||||||
self.extraxponydirs.append(extraponydir)
|
self.extraxponydirs.append(extraponydir)
|
||||||
appendset.add(extraponydir)
|
appendset.add(extraponydir)
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.extravtponydirs = []
|
self.extravtponydirs = []
|
||||||
_extraponydirs = [self.HOME + '/.local/share/ponysay/extrattyponies/', '/usr/share/ponysay/extrattyponies/']
|
_extraponydirs = share('extrattyponies/')
|
||||||
for extraponydir in _extraponydirs:
|
for extraponydir in _extraponydirs:
|
||||||
if os.path.isdir(extraponydir) and (extraponydir not in appendset):
|
if os.path.isdir(extraponydir) and (extraponydir not in appendset):
|
||||||
self.extravtponydirs.append(extraponydir)
|
self.extravtponydirs.append(extraponydir)
|
||||||
|
@ -197,7 +247,7 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.quotedirs = []
|
self.quotedirs = []
|
||||||
_quotedirs = [self.HOME + '/.local/share/ponysay/quotes/', '/usr/share/ponysay/quotes/']
|
_quotedirs = share('quotes/')
|
||||||
for quotedir in _quotedirs:
|
for quotedir in _quotedirs:
|
||||||
if os.path.isdir(quotedir) and (quotedir not in appendset):
|
if os.path.isdir(quotedir) and (quotedir not in appendset):
|
||||||
self.quotedirs.append(quotedir)
|
self.quotedirs.append(quotedir)
|
||||||
|
@ -209,7 +259,7 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.balloondirs = []
|
self.balloondirs = []
|
||||||
_balloondirs = [self.HOME + '/.local/share/ponysay/balloons/', '/usr/share/ponysay/balloons/']
|
_balloondirs = share('balloons/')
|
||||||
for balloondir in _balloondirs:
|
for balloondir in _balloondirs:
|
||||||
if os.path.isdir(balloondir) and (balloondir not in appendset):
|
if os.path.isdir(balloondir) and (balloondir not in appendset):
|
||||||
self.balloondirs.append(balloondir)
|
self.balloondirs.append(balloondir)
|
||||||
|
@ -221,7 +271,7 @@ class Ponysay():
|
||||||
'''
|
'''
|
||||||
appendset = set()
|
appendset = set()
|
||||||
self.ucsmaps = []
|
self.ucsmaps = []
|
||||||
_ucsmaps = [self.HOME + '/.local/share/ponysay/ucsmap', '/usr/share/ponysay/ucsmap']
|
_ucsmaps = share('ucsmap/')
|
||||||
for ucsmap in _ucsmaps:
|
for ucsmap in _ucsmaps:
|
||||||
if os.path.isdir(ucsmap) and (ucsmap not in appendset):
|
if os.path.isdir(ucsmap) and (ucsmap not in appendset):
|
||||||
self.ucsmaps.append(ucsmap)
|
self.ucsmaps.append(ucsmap)
|
||||||
|
|
Loading…
Reference in a new issue