pymud 0.20.2a1__py3-none-any.whl → 0.20.2a3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pymud/extras.py +30 -27
- pymud/session.py +55 -124
- pymud/settings.py +2 -2
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/METADATA +4 -3
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/RECORD +9 -9
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/LICENSE.txt +0 -0
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/WHEEL +0 -0
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/entry_points.txt +0 -0
- {pymud-0.20.2a1.dist-info → pymud-0.20.2a3.dist-info}/top_level.txt +0 -0
pymud/extras.py
CHANGED
@@ -40,6 +40,8 @@ from prompt_toolkit.layout.controls import (
|
|
40
40
|
)
|
41
41
|
from prompt_toolkit.layout.processors import (
|
42
42
|
Processor,
|
43
|
+
TransformationInput,
|
44
|
+
Transformation
|
43
45
|
)
|
44
46
|
from prompt_toolkit.lexers import Lexer
|
45
47
|
from prompt_toolkit.mouse_events import MouseEvent, MouseEventType
|
@@ -64,10 +66,11 @@ class MudFormatProcessor(Processor):
|
|
64
66
|
self.FULL_BLOCKS = set("▂▃▅▆▇▄█")
|
65
67
|
self.SINGLE_LINES = set("┌└├┬┼┴╭╰─")
|
66
68
|
self.DOUBLE_LINES = set("╔╚╠╦╪╩═")
|
67
|
-
self.START_COLOR_REGX = re.compile(r"^\[[\d;]+m")
|
69
|
+
#self.START_COLOR_REGX = re.compile(r"^\[[\d;]+m")
|
68
70
|
self.COLOR_REGX = re.compile(r"\[[\d;]+m")
|
69
71
|
self._color_start = ""
|
70
72
|
self._color_correction = False
|
73
|
+
self._color_line_index = 0
|
71
74
|
|
72
75
|
def width_correction(self, line: str) -> str:
|
73
76
|
new_str = []
|
@@ -91,48 +94,48 @@ class MudFormatProcessor(Processor):
|
|
91
94
|
def tab_correction(self, line: str):
|
92
95
|
return line.replace("\t", " " * Settings.client["tabstop"])
|
93
96
|
|
94
|
-
def color_correction(self, line: str):
|
95
|
-
# 注:发现processer处理并非自上而下逐行处理的,因此不能使用这种颜色校正方式。
|
96
|
-
if self._color_correction:
|
97
|
-
other = self.COLOR_REGX.findall(line)
|
98
|
-
|
99
|
-
line = f"{self._color_start}{line}"
|
100
|
-
logging.debug(f"已校正增加颜色标志 {self._color_start}: {line}")
|
101
|
-
|
102
|
-
if other:
|
103
|
-
self._color_correction = False
|
104
|
-
self._color_start = ""
|
105
|
-
logging.debug(f"颜色校正结束: {line}")
|
106
|
-
else:
|
107
|
-
color = self.START_COLOR_REGX.findall(line)
|
108
|
-
if color:
|
109
|
-
other = self.COLOR_REGX.findall(line)
|
110
|
-
if len(other) == 1:
|
111
|
-
self._color_correction = True
|
112
|
-
self._color_start = color[0]
|
113
|
-
logging.debug(f"获取到一个颜色开头 {color[0]}: {line}")
|
114
|
-
|
115
|
-
return line
|
116
|
-
|
117
97
|
def line_correction(self, line: str):
|
118
98
|
# 处理\r符号(^M)
|
119
99
|
line = self.return_correction(line)
|
120
100
|
# 处理Tab(\r)符号(^I)
|
121
101
|
line = self.tab_correction(line)
|
122
|
-
|
123
|
-
# line = self.color_correction(line)
|
102
|
+
|
124
103
|
# 美化(解决中文英文在Console中不对齐的问题)
|
125
104
|
if Settings.client["beautify"]:
|
126
105
|
line = self.width_correction(line)
|
127
106
|
|
128
107
|
return line
|
129
108
|
|
130
|
-
def apply_transformation(self, transformation_input):
|
109
|
+
def apply_transformation(self, transformation_input: TransformationInput):
|
131
110
|
# 准备(先还原为str)
|
132
111
|
line = fragment_list_to_text(transformation_input.fragments)
|
112
|
+
|
113
|
+
# 颜色校正
|
114
|
+
thislinecolors = len(self.COLOR_REGX.findall(line))
|
115
|
+
if thislinecolors == 0:
|
116
|
+
lineno = transformation_input.lineno - 1
|
117
|
+
while lineno > 0:
|
118
|
+
lastline = transformation_input.document.lines[lineno]
|
119
|
+
# color = self.START_COLOR_REGX.findall(lastline)
|
120
|
+
# if color:
|
121
|
+
colors = self.COLOR_REGX.findall(lastline)
|
122
|
+
|
123
|
+
if len(colors) == 0:
|
124
|
+
lineno = lineno -1
|
125
|
+
|
126
|
+
elif len(colors) == 1:
|
127
|
+
line = f"{colors[0]}{line}"
|
128
|
+
break
|
129
|
+
|
130
|
+
else:
|
131
|
+
break
|
132
|
+
|
133
|
+
# 其他校正
|
133
134
|
line = self.line_correction(line)
|
135
|
+
|
134
136
|
# 处理ANSI标记(生成FormmatedText)
|
135
137
|
fragments = to_formatted_text(ANSI(line))
|
138
|
+
|
136
139
|
return Transformation(fragments)
|
137
140
|
|
138
141
|
class SessionBuffer(Buffer):
|
pymud/session.py
CHANGED
@@ -1949,7 +1949,6 @@ class Session:
|
|
1949
1949
|
if remain:
|
1950
1950
|
strlist.append(str[startindex:])
|
1951
1951
|
|
1952
|
-
#self.info(f"原: {str}, 分隔为 {printable_length}, 结果为 {strlist}")
|
1953
1952
|
return strlist
|
1954
1953
|
|
1955
1954
|
def buildDisplayLines(self, vars: DotDict, title: str):
|
@@ -1962,7 +1961,7 @@ class Session:
|
|
1962
1961
|
vars_complex = {}
|
1963
1962
|
|
1964
1963
|
for k, v in vars.items():
|
1965
|
-
if k in ("%line", "%raw"):
|
1964
|
+
if k in ("%line", "%raw", "%copy"):
|
1966
1965
|
continue
|
1967
1966
|
|
1968
1967
|
if dataclasses.is_dataclass(v) or (isinstance(v, Iterable) and not isinstance(v, str)):
|
@@ -1997,7 +1996,7 @@ class Session:
|
|
1997
1996
|
name = key.rjust(KEY_WIDTH + VAR_WIDTH)
|
1998
1997
|
|
1999
1998
|
value_dis = vars_simple[key].__repr__()
|
2000
|
-
var_display = "{} = {}".format(name, value_dis)
|
1999
|
+
var_display = "{0} = {1}".format(name, value_dis)
|
2001
2000
|
|
2002
2001
|
if (cursor + wcswidth(var_display) > totalWidth) or (var_count >= vars_per_line):
|
2003
2002
|
display_lines.append(line)
|
@@ -2035,17 +2034,31 @@ class Session:
|
|
2035
2034
|
if isinstance(value, dict):
|
2036
2035
|
max_len = self.getMaxLength(value.keys())
|
2037
2036
|
line += '{'
|
2037
|
+
display_lines.append(line)
|
2038
|
+
line = " " * (left_margin + KEY_WIDTH + 4)
|
2038
2039
|
for k, v in value.items():
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2040
|
+
subvalue_dis = "{},".format(v.__repr__())
|
2041
|
+
allow_len_subvalue = allow_len - max_len - 4
|
2042
|
+
if wcswidth(subvalue_dis) > allow_len_subvalue:
|
2043
|
+
subvalue_lines = self.splitByPrintableWidth(subvalue_dis, allow_len_subvalue)
|
2044
|
+
line += "{0}: ".format(k.ljust(max_len))
|
2045
|
+
for subline in subvalue_lines:
|
2046
|
+
line += subline
|
2047
|
+
display_lines.append(line)
|
2048
|
+
line = " " * (left_margin + KEY_WIDTH + 4 + max_len + 2)
|
2049
|
+
|
2050
|
+
line = " " * (left_margin + KEY_WIDTH + 4)
|
2051
|
+
else:
|
2052
|
+
val_line = "{0}: {1}".format(k.ljust(max_len), subvalue_dis)
|
2053
|
+
line += val_line
|
2054
|
+
display_lines.append(line)
|
2055
|
+
line = " " * (left_margin + KEY_WIDTH + 4)
|
2043
2056
|
line = line[:-1] + '}'
|
2044
2057
|
display_lines.append(line)
|
2045
2058
|
elif isinstance(value, list):
|
2046
2059
|
line += '['
|
2047
2060
|
for v in value:
|
2048
|
-
val_line = "{0},".format(v)
|
2061
|
+
val_line = "{0},".format(v.__repr__())
|
2049
2062
|
line += val_line
|
2050
2063
|
display_lines.append(line)
|
2051
2064
|
line = " " * (left_margin + KEY_WIDTH + 4)
|
@@ -2090,61 +2103,6 @@ class Session:
|
|
2090
2103
|
#args = code.code[2:]
|
2091
2104
|
|
2092
2105
|
if len(args) == 0:
|
2093
|
-
# vars = self._variables
|
2094
|
-
# vars_simple = {}
|
2095
|
-
# vars_complex = {}
|
2096
|
-
# for k, v in vars.items():
|
2097
|
-
# # 不显示line, raw两个系统变量
|
2098
|
-
# if k in ("%line", "%raw"):
|
2099
|
-
# continue
|
2100
|
-
|
2101
|
-
# if isinstance(v, Iterable) and not isinstance(v, str):
|
2102
|
-
# vars_complex[k] = v
|
2103
|
-
# else:
|
2104
|
-
# vars_simple[k] = v
|
2105
|
-
|
2106
|
-
# width = self.application.get_width() - 2 # 保留2个字符,防止 > 导致换行
|
2107
|
-
|
2108
|
-
# title = f" VARIABLE LIST IN SESSION {self.name} "
|
2109
|
-
# left = (width - len(title)) // 2
|
2110
|
-
# right = width - len(title) - left
|
2111
|
-
# self.writetobuffer("="*left + title + "="*right, newline = True)
|
2112
|
-
|
2113
|
-
# # print vars in simple, 每个变量占40格,一行可以多个变量
|
2114
|
-
# # 这里可以考虑调整一下,默认40, 但如果一个变量值太长,则选择占两个位置
|
2115
|
-
# var_count = len(vars_simple)
|
2116
|
-
# var_per_line = (width - 2) // 40
|
2117
|
-
# lines = math.ceil(var_count / var_per_line)
|
2118
|
-
# left_space = (width - var_per_line * 40) // 2
|
2119
|
-
# if left_space > 4: left_space = 4
|
2120
|
-
|
2121
|
-
# var_keys = sorted(vars_simple.keys())
|
2122
|
-
|
2123
|
-
# for idx in range(0, lines):
|
2124
|
-
# start = idx * var_per_line
|
2125
|
-
# end = (idx + 1) * var_per_line
|
2126
|
-
# if end > var_count: end = var_count
|
2127
|
-
# self.writetobuffer(" " * left_space)
|
2128
|
-
# line_vars = var_keys[start:end]
|
2129
|
-
# for var in line_vars:
|
2130
|
-
# repr = vars_simple[var].__repr__()
|
2131
|
-
# vwidth = 22 - (wcswidth(repr) - len(repr))
|
2132
|
-
# self.writetobuffer("{0} = {1}".format(var.rjust(20), repr.ljust(vwidth)))
|
2133
|
-
# #self.writetobuffer("{0:>18} = {1:<19}".format(var, vars_simple[var].__repr__()))
|
2134
|
-
|
2135
|
-
# self.writetobuffer("", newline = True)
|
2136
|
-
|
2137
|
-
# # print vars in complex, 每个变量占1行
|
2138
|
-
# var_keys = sorted(vars_complex.keys())
|
2139
|
-
# for key in var_keys:
|
2140
|
-
# self.writetobuffer(" " * left_space)
|
2141
|
-
# self.writetobuffer("{0:>20} = {1}".format(key, vars_complex[key].__repr__()), newline = True)
|
2142
|
-
|
2143
|
-
# self.writetobuffer("="*width, newline = True)
|
2144
|
-
# row, col = self.buffer.document.translate_index_to_position(len(self.buffer.text))
|
2145
|
-
# if col:
|
2146
|
-
# self.writetobuffer("", newline = True)
|
2147
|
-
|
2148
2106
|
lines = self.buildDisplayLines(self._variables, f" VARIABLE LIST IN SESSION {self.name} ")
|
2149
2107
|
|
2150
2108
|
for line in lines:
|
@@ -2153,7 +2111,12 @@ class Session:
|
|
2153
2111
|
elif len(args) == 1:
|
2154
2112
|
if args[0] in self._variables.keys():
|
2155
2113
|
obj = self.getVariable(args[0])
|
2156
|
-
|
2114
|
+
var_dict = {args[0] : obj}
|
2115
|
+
lines = self.buildDisplayLines(var_dict, f" VARIABLE [{args[0]}] IN SESSION {self.name} ")
|
2116
|
+
|
2117
|
+
for line in lines:
|
2118
|
+
self.writetobuffer(line, newline = True)
|
2119
|
+
|
2157
2120
|
else:
|
2158
2121
|
self.warning(f"当前session中不存在名称为 {args[0]} 的变量")
|
2159
2122
|
|
@@ -2165,6 +2128,7 @@ class Session:
|
|
2165
2128
|
val = args[1]
|
2166
2129
|
|
2167
2130
|
self.setVariable(args[0], val)
|
2131
|
+
self.info(f"成功设置变量 {args[0]} 值为 {val}")
|
2168
2132
|
|
2169
2133
|
def handle_global(self, code: CodeLine = None, *args, **kwargs):
|
2170
2134
|
'''
|
@@ -2190,51 +2154,6 @@ class Session:
|
|
2190
2154
|
#args = code.code[2:]
|
2191
2155
|
|
2192
2156
|
if len(args) == 0:
|
2193
|
-
# vars = self.application.globals
|
2194
|
-
# vars_simple = {}
|
2195
|
-
# vars_complex = {}
|
2196
|
-
# for k, v in vars.items():
|
2197
|
-
# if isinstance(v, Iterable) and not isinstance(v, str):
|
2198
|
-
# vars_complex[k] = v
|
2199
|
-
# else:
|
2200
|
-
# vars_simple[k] = v
|
2201
|
-
|
2202
|
-
# width = self.application.get_width() - 2 # 保留2个字符,防止 > 导致换行
|
2203
|
-
|
2204
|
-
# title = f" GLOBAL VARIABLES LIST "
|
2205
|
-
# left = (width - len(title)) // 2
|
2206
|
-
# right = width - len(title) - left
|
2207
|
-
# self.writetobuffer("="*left + title + "="*right, newline = True)
|
2208
|
-
|
2209
|
-
# # print vars in simple, 每个变量占40格,一行可以多个变量
|
2210
|
-
# var_count = len(vars_simple)
|
2211
|
-
# var_per_line = (width - 2) // 40
|
2212
|
-
# lines = math.ceil(var_count / var_per_line)
|
2213
|
-
# left_space = (width - var_per_line * 40) // 2
|
2214
|
-
# if left_space > 4: left_space = 4
|
2215
|
-
|
2216
|
-
# var_keys = sorted(vars_simple.keys())
|
2217
|
-
|
2218
|
-
# for idx in range(0, lines):
|
2219
|
-
# start = idx * var_per_line
|
2220
|
-
# end = (idx + 1) * var_per_line
|
2221
|
-
# if end > var_count: end = var_count
|
2222
|
-
# self.writetobuffer(" " * left_space)
|
2223
|
-
# line_vars = var_keys[start:end]
|
2224
|
-
# for var in line_vars:
|
2225
|
-
# repr = vars_simple[var].__repr__()
|
2226
|
-
# vwidth = 22 - (wcswidth(repr) - len(repr))
|
2227
|
-
# self.writetobuffer("{0} = {1}".format(var.rjust(20), repr.ljust(vwidth)))
|
2228
|
-
|
2229
|
-
# self.writetobuffer("", newline = True)
|
2230
|
-
|
2231
|
-
# # print vars in complex, 每个变量占1行
|
2232
|
-
# for k, v in vars_complex.items():
|
2233
|
-
# self.writetobuffer(" " * left_space)
|
2234
|
-
# self.writetobuffer("{0:>20} = {1}".format(k, v.__repr__()), newline = True)
|
2235
|
-
|
2236
|
-
# self.writetobuffer("="*width, newline = True)
|
2237
|
-
|
2238
2157
|
lines = self.buildDisplayLines(self.application.globals, f" GLOBAL VARIABLES LIST ")
|
2239
2158
|
|
2240
2159
|
for line in lines:
|
@@ -2243,7 +2162,13 @@ class Session:
|
|
2243
2162
|
elif len(args) == 1:
|
2244
2163
|
var = args[0]
|
2245
2164
|
if var in self.application.globals.keys():
|
2246
|
-
self.info("{0:>20} = {1:<22}".format(var, self.application.get_globals(var).__repr__()), "全局变量")
|
2165
|
+
# self.info("{0:>20} = {1:<22}".format(var, self.application.get_globals(var).__repr__()), "全局变量")
|
2166
|
+
|
2167
|
+
var_dict = {var : self.application.get_globals(var)}
|
2168
|
+
lines = self.buildDisplayLines(var_dict, f" GLOBAL VARIABLE [{var}] ")
|
2169
|
+
|
2170
|
+
for line in lines:
|
2171
|
+
self.writetobuffer(line, newline = True)
|
2247
2172
|
else:
|
2248
2173
|
self.info("全局空间不存在名称为 {} 的变量".format(var), "全局变量")
|
2249
2174
|
|
@@ -2254,6 +2179,7 @@ class Session:
|
|
2254
2179
|
except:
|
2255
2180
|
val = args[1]
|
2256
2181
|
self.application.set_globals(args[0], val)
|
2182
|
+
self.info(f"成功设置全局变量 {args[0]} 值为 {val}")
|
2257
2183
|
|
2258
2184
|
def _handle_objs(self, name: str, objs: dict, *args):
|
2259
2185
|
if len(args) == 0:
|
@@ -3084,14 +3010,18 @@ class Session:
|
|
3084
3010
|
triggered_enabled += 1
|
3085
3011
|
if not block:
|
3086
3012
|
triggered += 1
|
3087
|
-
info_enabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 正常触发。{Settings.CLR_STYLE}")
|
3088
|
-
info_enabled.append(f" {Settings.INFO_STYLE}捕获:{state.wildcards}{Settings.CLR_STYLE}")
|
3013
|
+
# info_enabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 正常触发。{Settings.CLR_STYLE}")
|
3014
|
+
# info_enabled.append(f" {Settings.INFO_STYLE}捕获:{state.wildcards}{Settings.CLR_STYLE}")
|
3015
|
+
info_enabled.append(f" {tri.__detailed__()} 正常触发。")
|
3016
|
+
info_enabled.append(f" 捕获:{state.wildcards}")
|
3089
3017
|
|
3090
3018
|
if not tri.keepEval: # 非持续匹配的trigger,匹配成功后停止检测后续Trigger
|
3091
3019
|
info_enabled.append(f" {Settings.WARN_STYLE}该触发器未开启keepEval, 会阻止后续触发器。{Settings.CLR_STYLE}")
|
3020
|
+
#info_enabled.append(f" 该触发器未开启keepEval, 会阻止后续触发器。")
|
3092
3021
|
block = True
|
3093
3022
|
else:
|
3094
3023
|
info_enabled.append(f" {Settings.WARN_STYLE}{tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。{Settings.CLR_STYLE}")
|
3024
|
+
#info_enabled.append(f" {tri.__detailed__()} 可以触发,但由于优先级与keepEval设定,触发器不会触发。")
|
3095
3025
|
|
3096
3026
|
|
3097
3027
|
for tri in tris_disabled:
|
@@ -3102,22 +3032,23 @@ class Session:
|
|
3102
3032
|
|
3103
3033
|
if state.result == Trigger.SUCCESS:
|
3104
3034
|
triggered_disabled += 1
|
3105
|
-
info_disabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 可以匹配触发。{Settings.CLR_STYLE}")
|
3035
|
+
# info_disabled.append(f" {Settings.INFO_STYLE}{tri.__detailed__()} 可以匹配触发。{Settings.CLR_STYLE}")
|
3036
|
+
info_disabled.append(f" {tri.__detailed__()} 可以匹配触发。")
|
3106
3037
|
|
3107
3038
|
if triggered_enabled + triggered_disabled == 0:
|
3108
3039
|
info_all.append("")
|
3109
3040
|
|
3110
3041
|
if triggered_enabled == 0:
|
3111
|
-
info_enabled.insert(0, f"使能的触发器中,没有可以触发的。")
|
3042
|
+
info_enabled.insert(0, f"{Settings.INFO_STYLE}使能的触发器中,没有可以触发的。")
|
3112
3043
|
elif triggered < triggered_enabled:
|
3113
|
-
info_enabled.insert(0, f"使能的触发器中,共有 {triggered_enabled} 个可以触发,实际触发 {triggered} 个,另有 {triggered_enabled - triggered} 个由于 keepEval 原因实际不会触发。")
|
3044
|
+
info_enabled.insert(0, f"{Settings.INFO_STYLE}使能的触发器中,共有 {triggered_enabled} 个可以触发,实际触发 {triggered} 个,另有 {triggered_enabled - triggered} 个由于 keepEval 原因实际不会触发。")
|
3114
3045
|
else:
|
3115
|
-
info_enabled.insert(0, f"使能的触发器中,共有 {triggered_enabled} 个全部可以被正常触发。")
|
3046
|
+
info_enabled.insert(0, f"{Settings.INFO_STYLE}使能的触发器中,共有 {triggered_enabled} 个全部可以被正常触发。")
|
3116
3047
|
|
3117
3048
|
if triggered_disabled > 0:
|
3118
|
-
info_disabled.insert(0, f"未使能的触发器中,共有 {triggered_disabled} 个可以匹配。")
|
3049
|
+
info_disabled.insert(0, f"{Settings.INFO_STYLE}未使能的触发器中,共有 {triggered_disabled} 个可以匹配。")
|
3119
3050
|
else:
|
3120
|
-
info_disabled.insert(0, f"未使能触发器,没有可以匹配的。")
|
3051
|
+
info_disabled.insert(0, f"{Settings.INFO_STYLE}未使能触发器,没有可以匹配的。")
|
3121
3052
|
|
3122
3053
|
if triggered_enabled + triggered_disabled == 0:
|
3123
3054
|
info_all.append(f"PYMUD 触发器测试: {'响应模式' if docallback else '测试模式'}")
|
@@ -3275,13 +3206,13 @@ class Session:
|
|
3275
3206
|
def info2(self, msg, title = "PYMUD INFO", style = Settings.INFO_STYLE):
|
3276
3207
|
msg = f"{msg}"
|
3277
3208
|
|
3278
|
-
if Settings.client["newline"] in msg:
|
3279
|
-
|
3280
|
-
|
3281
|
-
|
3282
|
-
|
3209
|
+
# if Settings.client["newline"] in msg:
|
3210
|
+
# new_lines = list()
|
3211
|
+
# msg_lines = msg.split(Settings.client["newline"])
|
3212
|
+
# for line in msg_lines:
|
3213
|
+
# new_lines.append("{}{}".format(style, line))
|
3283
3214
|
|
3284
|
-
|
3215
|
+
# msg = Settings.client["newline"].join(new_lines)
|
3285
3216
|
|
3286
3217
|
# 将颜色跨行显示移动到了MudFormatProcessor中,此处无需再处理(不行,还得恢复)
|
3287
3218
|
self.writetobuffer("{}[{}] {}{}".format(style, title, msg, Settings.CLR_STYLE), newline = True)
|
pymud/settings.py
CHANGED
@@ -11,9 +11,9 @@ class Settings:
|
|
11
11
|
"APP 名称, 默认PYMUD"
|
12
12
|
__appdesc__ = "a MUD client written in Python"
|
13
13
|
"APP 简要描述"
|
14
|
-
__version__ = "0.20.
|
14
|
+
__version__ = "0.20.2"
|
15
15
|
"APP 当前版本"
|
16
|
-
__release__ = "2024-11-
|
16
|
+
__release__ = "2024-11-18"
|
17
17
|
"APP 当前版本发布日期"
|
18
18
|
__author__ = "本牛(newstart)@北侠"
|
19
19
|
"APP 作者"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pymud
|
3
|
-
Version: 0.20.
|
3
|
+
Version: 0.20.2a3
|
4
4
|
Summary: a MUD Client written in Python
|
5
5
|
Author-email: "newstart@pkuxkx" <crapex@hotmail.com>
|
6
6
|
Maintainer-email: "newstart@pkuxkx" <crapex@hotmail.com>
|
@@ -737,10 +737,11 @@ Requires-Dist: prompt-toolkit
|
|
737
737
|
|
738
738
|
## 版本更新信息
|
739
739
|
|
740
|
-
## 0.20.2 (2024-11-
|
741
|
-
+ 功能调整: MTTS协商中,将256 Color明确写入协商回复。原先仅包含ANSI 和 TrueColor
|
740
|
+
## 0.20.2 (2024-11-20)
|
741
|
+
+ 功能调整: MTTS协商中,将256 Color明确写入协商回复。原先仅包含ANSI 和 TrueColor。推测武庙特殊颜色偶尔不正常与此有关。
|
742
742
|
+ 功能调整: 修复了纯文本正则处理,目前理论上支持所有ANSI控制代码的处置,以正确响应纯文本触发器。
|
743
743
|
+ 功能调整: 修改了#var和#global的显示实现,提高了变量打印排列的整齐度和辨识度,以适应长值变量和复杂变量。
|
744
|
+
+ 问题修复: 修复了单行颜色代码跨行无法显示问题。现在星宿毒草可以正常辨认颜色了。
|
744
745
|
|
745
746
|
## 0.20.1 (2024-11-16)
|
746
747
|
+ 功能调整: 会话中触发器匹配实现进行部分调整,减少循环次数以提高响应速度
|
@@ -1,7 +1,7 @@
|
|
1
1
|
pymud/__init__.py,sha256=AP4Edhx90gMKrNfD1O_KVciA3SOnyX5Qt9fZY_JhsTY,574
|
2
2
|
pymud/__main__.py,sha256=hFzZjadLlcOuoLM7D8wFiFVO8mqF7vMuo9y-9xfIhRc,64
|
3
3
|
pymud/dialogs.py,sha256=p-LidObSuDyOeMif5CsqhF5qq3rizZ1lmThWHrxDyRg,6726
|
4
|
-
pymud/extras.py,sha256=
|
4
|
+
pymud/extras.py,sha256=Lr4_B1-KFM47cEMqfLZy7R3Kw8eF3b5MucqaHYQwKOE,40817
|
5
5
|
pymud/logger.py,sha256=sq9HhZ6-prY34NnDUO1NjaCRy-e5-fr2j0na8FKp9ks,5789
|
6
6
|
pymud/main.py,sha256=b_Ui_cN4W8IfhYNyc1duwr3Bp7pYYZQusKTSafCWZIA,6534
|
7
7
|
pymud/modules.py,sha256=XoqTeYfZCgqDsV3SYxeehzsbkTzs0swelAUIxyWuL9g,7423
|
@@ -9,11 +9,11 @@ pymud/objects.py,sha256=qSOFuVZvMh3lxjg6x5JUzcr_sTSgakWWySh801x7TNQ,39457
|
|
9
9
|
pymud/pkuxkx.py,sha256=jRQRUs2xtw7GzYHtLYZXOASnqMumKh0iCoOeKZs8NnU,11467
|
10
10
|
pymud/protocol.py,sha256=nlsyXMBAHEf_067mPNGDHzN_zIm9808D8YDIZTNrygg,49118
|
11
11
|
pymud/pymud.py,sha256=4v-pdSheWfWCK7O-3bAipK7WE6zPe8mRLil7E1Zbnas,51663
|
12
|
-
pymud/session.py,sha256=
|
13
|
-
pymud/settings.py,sha256=
|
14
|
-
pymud-0.20.
|
15
|
-
pymud-0.20.
|
16
|
-
pymud-0.20.
|
17
|
-
pymud-0.20.
|
18
|
-
pymud-0.20.
|
19
|
-
pymud-0.20.
|
12
|
+
pymud/session.py,sha256=b98nAkM5IcBHiE2gG7v9W7oZ8YL8s5PlvCpHNEzboKg,138880
|
13
|
+
pymud/settings.py,sha256=c9345jdR0APj1xebymyLzAATqhIFqGwToSCBXRtGuHo,7145
|
14
|
+
pymud-0.20.2a3.dist-info/LICENSE.txt,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
15
|
+
pymud-0.20.2a3.dist-info/METADATA,sha256=GmnvkxqaUVxgPET6HkUXbeo4AK7NOZQAAd8766XrZ_w,74948
|
16
|
+
pymud-0.20.2a3.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
17
|
+
pymud-0.20.2a3.dist-info/entry_points.txt,sha256=diPUOtTkhgC1hVny7Cdg4aRhaHSynMQoraE7ZhJxUcw,37
|
18
|
+
pymud-0.20.2a3.dist-info/top_level.txt,sha256=8Gp1eXjxixXjqhhti6tLCspV_8s9sNV3z5Em2_KRhD4,6
|
19
|
+
pymud-0.20.2a3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|