Browse Source

[commands] Fix ext.commands help page full-width indentation

add _string_width function to util. Changed string width calculate
function from len() to util function _string_width().
pull/1887/head
cod 6 years ago
committed by Rapptz
parent
commit
d107f485a5
  1. 7
      discord/ext/commands/formatter.py
  2. 9
      discord/utils.py

7
discord/ext/commands/formatter.py

@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE.
import itertools
import inspect
import discord.utils
from .core import GroupMixin, Command
from .errors import CommandError
@ -172,7 +173,7 @@ class HelpFormatter:
try:
commands = self.command.all_commands if not self.is_cog() else self.context.bot.all_commands
if commands:
return max(map(lambda c: len(c.name) if self.show_hidden or not c.hidden else 0, commands.values()))
return max(map(lambda c: discord.utils._string_width(c.name) if self.show_hidden or not c.hidden else 0, commands.values()))
return 0
except AttributeError:
return len(self.command.name)
@ -250,8 +251,8 @@ class HelpFormatter:
if name in command.aliases:
# skip aliases
continue
entry = ' {0:<{width}} {1}'.format(name, command.short_doc, width=max_width)
width_gap = discord.utils._string_width(name) - len(name)
entry = ' {0:<{width}} {1}'.format(name, command.short_doc, width=max_width-width_gap)
shortened = self.shorten(entry)
self._paginator.add_line(shortened)

9
discord/utils.py

@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE.
import array
import asyncio
import unicodedata
from base64 import b64encode
from bisect import bisect_left
import datetime
@ -39,6 +40,7 @@ import warnings
from .errors import InvalidArgument
DISCORD_EPOCH = 1420070400000
UNICODE_WIDE_CHAR_TYPE = u"WFA"
class cached_property:
def __init__(self, function):
@ -324,3 +326,10 @@ class SnowflakeList(array.array):
def has(self, element):
i = bisect_left(self, element)
return i != len(self) and self[i] == element
def _string_width(string):
"""Returns string's width."""
width = 0
for char in string:
width += 2 if unicodedata.east_asian_width(char) in UNICODE_WIDE_CHAR_TYPE else 1
return width

Loading…
Cancel
Save