Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e9fce61

Browse files
authored
Merge pull request #13619 from maciej-irl/master
Make terminal title better behaved
2 parents 04d2781 + ed2fdc3 commit e9fce61

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

IPython/terminal/interactiveshell.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,14 +405,14 @@ def _autosuggestions_provider_changed(self, change):
405405
@observe('term_title')
406406
def init_term_title(self, change=None):
407407
# Enable or disable the terminal title.
408-
if self.term_title:
408+
if self.term_title and _is_tty:
409409
toggle_set_term_title(True)
410410
set_term_title(self.term_title_format.format(cwd=abbrev_cwd()))
411411
else:
412412
toggle_set_term_title(False)
413413

414414
def restore_term_title(self):
415-
if self.term_title:
415+
if self.term_title and _is_tty:
416416
restore_term_title()
417417

418418
def init_display_formatter(self):

IPython/terminal/ipapp.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def start(self):
318318
self.shell.mainloop()
319319
else:
320320
self.log.debug("IPython not interactive...")
321+
self.shell.restore_term_title()
321322
if not self.shell.last_execution_succeeded:
322323
sys.exit(1)
323324

IPython/utils/terminal.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,27 @@ def _restore_term_title():
6262
pass
6363

6464

65+
_xterm_term_title_saved = False
66+
67+
6568
def _set_term_title_xterm(title):
6669
""" Change virtual terminal title in xterm-workalikes """
67-
# save the current title to the xterm "stack"
68-
sys.stdout.write('\033[22;0t')
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
6977
sys.stdout.write('\033]0;%s\007' % title)
7078

7179

7280
def _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
7384
sys.stdout.write('\033[23;0t')
85+
_xterm_term_title_saved = False
7486

7587

7688
if os.name == 'posix':

0 commit comments

Comments
 (0)