Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/IPython/utils/terminal.py: 39%

54 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-04-20 06:09 +0000

1# encoding: utf-8 

2""" 

3Utilities for working with terminals. 

4 

5Authors: 

6 

7* Brian E. Granger 

8* Fernando Perez 

9* Alexander Belchenko (e-mail: bialix AT ukr.net) 

10""" 

11 

12# Copyright (c) IPython Development Team. 

13# Distributed under the terms of the Modified BSD License. 

14 

15import os 

16import sys 

17import warnings 

18from shutil import get_terminal_size as _get_terminal_size 

19 

20# This variable is part of the expected API of the module: 

21ignore_termtitle = True 

22 

23 

24 

25if os.name == 'posix': 

26 def _term_clear(): 

27 os.system('clear') 

28elif sys.platform == 'win32': 

29 def _term_clear(): 

30 os.system('cls') 

31else: 

32 def _term_clear(): 

33 pass 

34 

35 

36 

37def toggle_set_term_title(val): 

38 """Control whether set_term_title is active or not. 

39 

40 set_term_title() allows writing to the console titlebar. In embedded 

41 widgets this can cause problems, so this call can be used to toggle it on 

42 or off as needed. 

43 

44 The default state of the module is for the function to be disabled. 

45 

46 Parameters 

47 ---------- 

48 val : bool 

49 If True, set_term_title() actually writes to the terminal (using the 

50 appropriate platform-specific module). If False, it is a no-op. 

51 """ 

52 global ignore_termtitle 

53 ignore_termtitle = not(val) 

54 

55 

56def _set_term_title(*args,**kw): 

57 """Dummy no-op.""" 

58 pass 

59 

60 

61def _restore_term_title(): 

62 pass 

63 

64 

65_xterm_term_title_saved = False 

66 

67 

68def _set_term_title_xterm(title): 

69 """ Change virtual terminal title in xterm-workalikes """ 

70 global _xterm_term_title_saved 

71 # Only save the title the first time we set, otherwise restore will only 

72 # go back one title (probably undoing a %cd title change). 

73 if not _xterm_term_title_saved: 

74 # save the current title to the xterm "stack" 

75 sys.stdout.write("\033[22;0t") 

76 _xterm_term_title_saved = True 

77 sys.stdout.write('\033]0;%s\007' % title) 

78 

79 

80def _restore_term_title_xterm(): 

81 # Make sure the restore has at least one accompanying set. 

82 global _xterm_term_title_saved 

83 assert _xterm_term_title_saved 

84 sys.stdout.write('\033[23;0t') 

85 _xterm_term_title_saved = False 

86 

87 

88if os.name == 'posix': 

89 TERM = os.environ.get('TERM','') 

90 if TERM.startswith('xterm'): 

91 _set_term_title = _set_term_title_xterm 

92 _restore_term_title = _restore_term_title_xterm 

93elif sys.platform == 'win32': 

94 import ctypes 

95 

96 SetConsoleTitleW = ctypes.windll.kernel32.SetConsoleTitleW 

97 SetConsoleTitleW.argtypes = [ctypes.c_wchar_p] 

98 

99 def _set_term_title(title): 

100 """Set terminal title using ctypes to access the Win32 APIs.""" 

101 SetConsoleTitleW(title) 

102 

103 

104def set_term_title(title): 

105 """Set terminal title using the necessary platform-dependent calls.""" 

106 if ignore_termtitle: 

107 return 

108 _set_term_title(title) 

109 

110 

111def restore_term_title(): 

112 """Restore, if possible, terminal title to the original state""" 

113 if ignore_termtitle: 

114 return 

115 _restore_term_title() 

116 

117 

118def freeze_term_title(): 

119 warnings.warn("This function is deprecated, use toggle_set_term_title()") 

120 global ignore_termtitle 

121 ignore_termtitle = True 

122 

123 

124def get_terminal_size(defaultx=80, defaulty=25): 

125 return _get_terminal_size((defaultx, defaulty))