Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/prompt_toolkit/output/base.py: 75%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

151 statements  

1""" 

2Interface for an output. 

3""" 

4 

5from __future__ import annotations 

6 

7from abc import ABCMeta, abstractmethod 

8from typing import TextIO 

9 

10from prompt_toolkit.cursor_shapes import CursorShape 

11from prompt_toolkit.data_structures import Size 

12from prompt_toolkit.styles import Attrs 

13 

14from .color_depth import ColorDepth 

15 

16__all__ = [ 

17 "Output", 

18 "DummyOutput", 

19] 

20 

21 

22class Output(metaclass=ABCMeta): 

23 """ 

24 Base class defining the output interface for a 

25 :class:`~prompt_toolkit.renderer.Renderer`. 

26 

27 Actual implementations are 

28 :class:`~prompt_toolkit.output.vt100.Vt100_Output` and 

29 :class:`~prompt_toolkit.output.win32.Win32Output`. 

30 """ 

31 

32 stdout: TextIO | None = None 

33 

34 @abstractmethod 

35 def fileno(self) -> int: 

36 "Return the file descriptor to which we can write for the output." 

37 

38 @abstractmethod 

39 def encoding(self) -> str: 

40 """ 

41 Return the encoding for this output, e.g. 'utf-8'. 

42 (This is used mainly to know which characters are supported by the 

43 output the data, so that the UI can provide alternatives, when 

44 required.) 

45 """ 

46 

47 @abstractmethod 

48 def write(self, data: str) -> None: 

49 "Write text (Terminal escape sequences will be removed/escaped.)" 

50 

51 @abstractmethod 

52 def write_raw(self, data: str) -> None: 

53 "Write text." 

54 

55 @abstractmethod 

56 def set_title(self, title: str) -> None: 

57 "Set terminal title." 

58 

59 @abstractmethod 

60 def clear_title(self) -> None: 

61 "Clear title again. (or restore previous title.)" 

62 

63 @abstractmethod 

64 def flush(self) -> None: 

65 "Write to output stream and flush." 

66 

67 @abstractmethod 

68 def erase_screen(self) -> None: 

69 """ 

70 Erases the screen with the background color and moves the cursor to 

71 home. 

72 """ 

73 

74 @abstractmethod 

75 def enter_alternate_screen(self) -> None: 

76 "Go to the alternate screen buffer. (For full screen applications)." 

77 

78 @abstractmethod 

79 def quit_alternate_screen(self) -> None: 

80 "Leave the alternate screen buffer." 

81 

82 @abstractmethod 

83 def enable_mouse_support(self) -> None: 

84 "Enable mouse." 

85 

86 @abstractmethod 

87 def disable_mouse_support(self) -> None: 

88 "Disable mouse." 

89 

90 @abstractmethod 

91 def erase_end_of_line(self) -> None: 

92 """ 

93 Erases from the current cursor position to the end of the current line. 

94 """ 

95 

96 @abstractmethod 

97 def erase_down(self) -> None: 

98 """ 

99 Erases the screen from the current line down to the bottom of the 

100 screen. 

101 """ 

102 

103 @abstractmethod 

104 def reset_attributes(self) -> None: 

105 "Reset color and styling attributes." 

106 

107 @abstractmethod 

108 def set_attributes(self, attrs: Attrs, color_depth: ColorDepth) -> None: 

109 "Set new color and styling attributes." 

110 

111 @abstractmethod 

112 def disable_autowrap(self) -> None: 

113 "Disable auto line wrapping." 

114 

115 @abstractmethod 

116 def enable_autowrap(self) -> None: 

117 "Enable auto line wrapping." 

118 

119 @abstractmethod 

120 def cursor_goto(self, row: int = 0, column: int = 0) -> None: 

121 "Move cursor position." 

122 

123 @abstractmethod 

124 def cursor_up(self, amount: int) -> None: 

125 "Move cursor `amount` place up." 

126 

127 @abstractmethod 

128 def cursor_down(self, amount: int) -> None: 

129 "Move cursor `amount` place down." 

130 

131 @abstractmethod 

132 def cursor_forward(self, amount: int) -> None: 

133 "Move cursor `amount` place forward." 

134 

135 @abstractmethod 

136 def cursor_backward(self, amount: int) -> None: 

137 "Move cursor `amount` place backward." 

138 

139 @abstractmethod 

140 def hide_cursor(self) -> None: 

141 "Hide cursor." 

142 

143 @abstractmethod 

144 def show_cursor(self) -> None: 

145 "Show cursor." 

146 

147 @abstractmethod 

148 def set_cursor_shape(self, cursor_shape: CursorShape) -> None: 

149 "Set cursor shape to block, beam or underline." 

150 

151 @abstractmethod 

152 def reset_cursor_shape(self) -> None: 

153 "Reset cursor shape." 

154 

155 def ask_for_cpr(self) -> None: 

156 """ 

157 Asks for a cursor position report (CPR). 

158 (VT100 only.) 

159 """ 

160 

161 @property 

162 def responds_to_cpr(self) -> bool: 

163 """ 

164 `True` if the `Application` can expect to receive a CPR response after 

165 calling `ask_for_cpr` (this will come back through the corresponding 

166 `Input`). 

167 

168 This is used to determine the amount of available rows we have below 

169 the cursor position. In the first place, we have this so that the drop 

170 down autocompletion menus are sized according to the available space. 

171 

172 On Windows, we don't need this, there we have 

173 `get_rows_below_cursor_position`. 

174 """ 

175 return False 

176 

177 @abstractmethod 

178 def get_size(self) -> Size: 

179 "Return the size of the output window." 

180 

181 def bell(self) -> None: 

182 "Sound bell." 

183 

184 def enable_bracketed_paste(self) -> None: 

185 "For vt100 only." 

186 

187 def disable_bracketed_paste(self) -> None: 

188 "For vt100 only." 

189 

190 def reset_cursor_key_mode(self) -> None: 

191 """ 

192 For vt100 only. 

193 Put the terminal in normal cursor mode (instead of application mode). 

194 

195 See: https://vt100.net/docs/vt100-ug/chapter3.html 

196 """ 

197 

198 def scroll_buffer_to_prompt(self) -> None: 

199 "For Win32 only." 

200 

201 def get_rows_below_cursor_position(self) -> int: 

202 "For Windows only." 

203 raise NotImplementedError 

204 

205 @abstractmethod 

206 def get_default_color_depth(self) -> ColorDepth: 

207 """ 

208 Get default color depth for this output. 

209 

210 This value will be used if no color depth was explicitly passed to the 

211 `Application`. 

212 

213 .. note:: 

214 

215 If the `$PROMPT_TOOLKIT_COLOR_DEPTH` environment variable has been 

216 set, then `outputs.defaults.create_output` will pass this value to 

217 the implementation as the default_color_depth, which is returned 

218 here. (This is not used when the output corresponds to a 

219 prompt_toolkit SSH/Telnet session.) 

220 """ 

221 

222 

223class DummyOutput(Output): 

224 """ 

225 For testing. An output class that doesn't render anything. 

226 """ 

227 

228 def fileno(self) -> int: 

229 "There is no sensible default for fileno()." 

230 raise NotImplementedError 

231 

232 def encoding(self) -> str: 

233 return "utf-8" 

234 

235 def write(self, data: str) -> None: 

236 pass 

237 

238 def write_raw(self, data: str) -> None: 

239 pass 

240 

241 def set_title(self, title: str) -> None: 

242 pass 

243 

244 def clear_title(self) -> None: 

245 pass 

246 

247 def flush(self) -> None: 

248 pass 

249 

250 def erase_screen(self) -> None: 

251 pass 

252 

253 def enter_alternate_screen(self) -> None: 

254 pass 

255 

256 def quit_alternate_screen(self) -> None: 

257 pass 

258 

259 def enable_mouse_support(self) -> None: 

260 pass 

261 

262 def disable_mouse_support(self) -> None: 

263 pass 

264 

265 def erase_end_of_line(self) -> None: 

266 pass 

267 

268 def erase_down(self) -> None: 

269 pass 

270 

271 def reset_attributes(self) -> None: 

272 pass 

273 

274 def set_attributes(self, attrs: Attrs, color_depth: ColorDepth) -> None: 

275 pass 

276 

277 def disable_autowrap(self) -> None: 

278 pass 

279 

280 def enable_autowrap(self) -> None: 

281 pass 

282 

283 def cursor_goto(self, row: int = 0, column: int = 0) -> None: 

284 pass 

285 

286 def cursor_up(self, amount: int) -> None: 

287 pass 

288 

289 def cursor_down(self, amount: int) -> None: 

290 pass 

291 

292 def cursor_forward(self, amount: int) -> None: 

293 pass 

294 

295 def cursor_backward(self, amount: int) -> None: 

296 pass 

297 

298 def hide_cursor(self) -> None: 

299 pass 

300 

301 def show_cursor(self) -> None: 

302 pass 

303 

304 def set_cursor_shape(self, cursor_shape: CursorShape) -> None: 

305 pass 

306 

307 def reset_cursor_shape(self) -> None: 

308 pass 

309 

310 def ask_for_cpr(self) -> None: 

311 pass 

312 

313 def bell(self) -> None: 

314 pass 

315 

316 def enable_bracketed_paste(self) -> None: 

317 pass 

318 

319 def disable_bracketed_paste(self) -> None: 

320 pass 

321 

322 def scroll_buffer_to_prompt(self) -> None: 

323 pass 

324 

325 def get_size(self) -> Size: 

326 return Size(rows=40, columns=80) 

327 

328 def get_rows_below_cursor_position(self) -> int: 

329 return 40 

330 

331 def get_default_color_depth(self) -> ColorDepth: 

332 return ColorDepth.DEPTH_1_BIT