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 itertools
import inspect import inspect
import discord.utils
from .core import GroupMixin, Command from .core import GroupMixin, Command
from .errors import CommandError from .errors import CommandError
@ -172,7 +173,7 @@ class HelpFormatter:
try: try:
commands = self.command.all_commands if not self.is_cog() else self.context.bot.all_commands commands = self.command.all_commands if not self.is_cog() else self.context.bot.all_commands
if 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 return 0
except AttributeError: except AttributeError:
return len(self.command.name) return len(self.command.name)
@ -250,8 +251,8 @@ class HelpFormatter:
if name in command.aliases: if name in command.aliases:
# skip aliases # skip aliases
continue continue
width_gap = discord.utils._string_width(name) - len(name)
entry = ' {0:<{width}} {1}'.format(name, command.short_doc, width=max_width) entry = ' {0:<{width}} {1}'.format(name, command.short_doc, width=max_width-width_gap)
shortened = self.shorten(entry) shortened = self.shorten(entry)
self._paginator.add_line(shortened) self._paginator.add_line(shortened)

9
discord/utils.py

@ -26,6 +26,7 @@ DEALINGS IN THE SOFTWARE.
import array import array
import asyncio import asyncio
import unicodedata
from base64 import b64encode from base64 import b64encode
from bisect import bisect_left from bisect import bisect_left
import datetime import datetime
@ -39,6 +40,7 @@ import warnings
from .errors import InvalidArgument from .errors import InvalidArgument
DISCORD_EPOCH = 1420070400000 DISCORD_EPOCH = 1420070400000
UNICODE_WIDE_CHAR_TYPE = u"WFA"
class cached_property: class cached_property:
def __init__(self, function): def __init__(self, function):
@ -324,3 +326,10 @@ class SnowflakeList(array.array):
def has(self, element): def has(self, element):
i = bisect_left(self, element) i = bisect_left(self, element)
return i != len(self) and self[i] == 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