Resolves player confusion with the EvMore display, making it more clear that 'n/next' is used for continuing, makes 'look' repeat the display, and notifies them when they exit.
This commit is contained in:
parent
d407de4dc3
commit
c5c3a9ef0a
1 changed files with 62 additions and 18 deletions
|
|
@ -74,7 +74,7 @@ class CmdMore(Command):
|
||||||
more.page_quit()
|
more.page_quit()
|
||||||
elif cmd in ("back", "b"):
|
elif cmd in ("back", "b"):
|
||||||
more.page_back()
|
more.page_back()
|
||||||
elif cmd in ("top", "t"):
|
elif cmd in ("top", "t", "look", "l"):
|
||||||
more.page_top()
|
more.page_top()
|
||||||
elif cmd in ("end", "e"):
|
elif cmd in ("end", "e"):
|
||||||
more.page_end()
|
more.page_end()
|
||||||
|
|
@ -82,6 +82,25 @@ class CmdMore(Command):
|
||||||
# return or n, next
|
# return or n, next
|
||||||
more.page_next()
|
more.page_next()
|
||||||
|
|
||||||
|
class CmdMoreLook(Command):
|
||||||
|
"""
|
||||||
|
Override look to display window and prevent OOCLook from firing
|
||||||
|
"""
|
||||||
|
key = "look"
|
||||||
|
aliases = ["l"]
|
||||||
|
auto_help = False
|
||||||
|
def func(self):
|
||||||
|
"""
|
||||||
|
Implement the command
|
||||||
|
"""
|
||||||
|
more = self.caller.ndb._more
|
||||||
|
if not more and hasattr(self.caller, "player"):
|
||||||
|
more = self.caller.player.ndb._more
|
||||||
|
if not more:
|
||||||
|
self.caller.msg("Error in loading the pager. Contact an admin.")
|
||||||
|
return
|
||||||
|
more.display()
|
||||||
|
|
||||||
|
|
||||||
class CmdSetMore(CmdSet):
|
class CmdSetMore(CmdSet):
|
||||||
"""
|
"""
|
||||||
|
|
@ -91,7 +110,8 @@ class CmdSetMore(CmdSet):
|
||||||
priority = 110
|
priority = 110
|
||||||
|
|
||||||
def at_cmdset_creation(self):
|
def at_cmdset_creation(self):
|
||||||
self.add(CmdMore)
|
self.add(CmdMore())
|
||||||
|
self.add(CmdMoreLook())
|
||||||
|
|
||||||
|
|
||||||
class EvMore(object):
|
class EvMore(object):
|
||||||
|
|
@ -108,6 +128,11 @@ class EvMore(object):
|
||||||
always_page (bool, optional): If `False`, the
|
always_page (bool, optional): If `False`, the
|
||||||
pager will only kick in if `text` is too big
|
pager will only kick in if `text` is too big
|
||||||
to fit the screen.
|
to fit the screen.
|
||||||
|
session (Session, optional): If given, this session will be used
|
||||||
|
to determine the screen width and will receive all output.
|
||||||
|
justify_kwargs (dict, bool or None, optional): If given, this should
|
||||||
|
be valid keyword arguments to the utils.justify() function. If False,
|
||||||
|
no justification will be done.
|
||||||
kwargs (any, optional): These will be passed on
|
kwargs (any, optional): These will be passed on
|
||||||
to the `caller.msg` method.
|
to the `caller.msg` method.
|
||||||
|
|
||||||
|
|
@ -117,6 +142,7 @@ class EvMore(object):
|
||||||
self._pages = []
|
self._pages = []
|
||||||
self._npages = []
|
self._npages = []
|
||||||
self._npos = []
|
self._npos = []
|
||||||
|
self._exit_msg = "Exited |wmore|n pager."
|
||||||
if not session:
|
if not session:
|
||||||
# if not supplied, use the first session to
|
# if not supplied, use the first session to
|
||||||
# determine screen size
|
# determine screen size
|
||||||
|
|
@ -127,17 +153,21 @@ class EvMore(object):
|
||||||
self._session = session
|
self._session = session
|
||||||
|
|
||||||
# set up individual pages for different sessions
|
# set up individual pages for different sessions
|
||||||
height = session.protocol_flags.get("SCREENHEIGHT", {0:_SCREEN_HEIGHT})[0] - 2
|
height = max(4, session.protocol_flags.get("SCREENHEIGHT", {0:_SCREEN_HEIGHT})[0] - 4)
|
||||||
width = session.protocol_flags.get("SCREENWIDTH", {0:_SCREEN_WIDTH})[0]
|
width = session.protocol_flags.get("SCREENWIDTH", {0:_SCREEN_WIDTH})[0]
|
||||||
|
|
||||||
# we must break very long lines into multiple ones
|
if justify_kwargs is False:
|
||||||
justify_kwargs = justify_kwargs or {}
|
# no justification. Simple division by line
|
||||||
width = justify_kwargs.get("width", width)
|
lines = text.split("\n")
|
||||||
justify_kwargs["width"] = width
|
else:
|
||||||
justify_kwargs["align"] = justify_kwargs.get("align", 'l')
|
# we must break very long lines into multiple ones
|
||||||
justify_kwargs["indent"] = justify_kwargs.get("indent", 0)
|
justify_kwargs = justify_kwargs or {}
|
||||||
|
width = justify_kwargs.get("width", width)
|
||||||
|
justify_kwargs["width"] = width
|
||||||
|
justify_kwargs["align"] = justify_kwargs.get("align", 'l')
|
||||||
|
justify_kwargs["indent"] = justify_kwargs.get("indent", 0)
|
||||||
|
|
||||||
lines = justify(text, **justify_kwargs).split("\n")
|
lines = justify(text, **justify_kwargs).split("\n")
|
||||||
|
|
||||||
# always limit number of chars to 10 000 per page
|
# always limit number of chars to 10 000 per page
|
||||||
height = min(10000 // width, height)
|
height = min(10000 // width, height)
|
||||||
|
|
@ -158,7 +188,7 @@ class EvMore(object):
|
||||||
# goto top of the text
|
# goto top of the text
|
||||||
self.page_top()
|
self.page_top()
|
||||||
|
|
||||||
def _display(self):
|
def display(self):
|
||||||
"""
|
"""
|
||||||
Pretty-print the page.
|
Pretty-print the page.
|
||||||
"""
|
"""
|
||||||
|
|
@ -174,14 +204,14 @@ class EvMore(object):
|
||||||
Display the top page
|
Display the top page
|
||||||
"""
|
"""
|
||||||
self._pos = 0
|
self._pos = 0
|
||||||
self._display()
|
self.display()
|
||||||
|
|
||||||
def page_end(self):
|
def page_end(self):
|
||||||
"""
|
"""
|
||||||
Display the bottom page.
|
Display the bottom page.
|
||||||
"""
|
"""
|
||||||
self._pos = self._npages - 1
|
self._pos = self._npages - 1
|
||||||
self._display()
|
self.display()
|
||||||
|
|
||||||
def page_next(self):
|
def page_next(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -193,28 +223,42 @@ class EvMore(object):
|
||||||
self.page_quit()
|
self.page_quit()
|
||||||
else:
|
else:
|
||||||
self._pos += 1
|
self._pos += 1
|
||||||
self._display()
|
self.display()
|
||||||
|
|
||||||
def page_back(self):
|
def page_back(self):
|
||||||
"""
|
"""
|
||||||
Scroll the text back up, at the most to the top.
|
Scroll the text back up, at the most to the top.
|
||||||
"""
|
"""
|
||||||
self._pos = max(0, self._pos - 1)
|
self._pos = max(0, self._pos - 1)
|
||||||
self._display()
|
self.display()
|
||||||
|
|
||||||
def page_quit(self):
|
def page_quit(self):
|
||||||
"""
|
"""
|
||||||
Quit the pager
|
Quit the pager
|
||||||
"""
|
"""
|
||||||
del self._caller.ndb._more
|
del self._caller.ndb._more
|
||||||
|
self._caller.msg(text=self._exit_msg, **self._kwargs)
|
||||||
self._caller.cmdset.remove(CmdSetMore)
|
self._caller.cmdset.remove(CmdSetMore)
|
||||||
self._caller.msg("Exited |wmore|n pager.")
|
|
||||||
|
|
||||||
|
|
||||||
def msg(caller, text="", always_page=False, session=None, justify_kwargs=None, **kwargs):
|
def msg(caller, text="", always_page=False, session=None, justify_kwargs=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
More-supported version of msg, mimicking the
|
More-supported version of msg, mimicking the normal msg method.
|
||||||
normal msg method.
|
|
||||||
|
Args:
|
||||||
|
caller (Object or Player): Entity reading the text.
|
||||||
|
text (str): The text to put under paging.
|
||||||
|
always_page (bool, optional): If `False`, the
|
||||||
|
pager will only kick in if `text` is too big
|
||||||
|
to fit the screen.
|
||||||
|
session (Session, optional): If given, this session will be used
|
||||||
|
to determine the screen width and will receive all output.
|
||||||
|
justify_kwargs (dict, bool or None, optional): If given, this should
|
||||||
|
be valid keyword arguments to the utils.justify() function. If False,
|
||||||
|
no justification will be done.
|
||||||
|
kwargs (any, optional): These will be passed on
|
||||||
|
to the `caller.msg` method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
EvMore(caller, text, always_page=always_page, session=session,
|
EvMore(caller, text, always_page=always_page, session=session,
|
||||||
justify_kwargs=justify_kwargs, **kwargs)
|
justify_kwargs=justify_kwargs, **kwargs)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue