From ff93866969e140eaa68ea5bde4b763e74386ee31 2023-10-02 08:11:21 From: Matthias Bussonnier Date: 2023-10-02 08:11:21 Subject: [PATCH] Backport PR #14198 on branch 8.16.x (Revert "fix semicolon detection with no history") (#14199) Backport PR #14198: Revert "fix semicolon detection with no history" --- diff --git a/IPython/core/displayhook.py b/IPython/core/displayhook.py index 1ea8d85..b411f11 100644 --- a/IPython/core/displayhook.py +++ b/IPython/core/displayhook.py @@ -51,7 +51,7 @@ class DisplayHook(Configurable): # we need a reference to the user-level namespace self.shell = shell - + self._,self.__,self.___ = '','','' # these are deliberately global: @@ -83,9 +83,15 @@ class DisplayHook(Configurable): def quiet(self): """Should we silence the display hook because of ';'?""" - if self.exec_result is not None: - return self.semicolon_at_end_of_expression(self.exec_result.info.raw_cell) - return False + # do not print output if input ends in ';' + + try: + cell = self.shell.history_manager.input_hist_parsed[-1] + except IndexError: + # some uses of ipshellembed may fail here + return False + + return self.semicolon_at_end_of_expression(cell) @staticmethod def semicolon_at_end_of_expression(expression): @@ -274,12 +280,13 @@ class DisplayHook(Configurable): cull_count = max(int(sz * self.cull_fraction), 2) warn('Output cache limit (currently {sz} entries) hit.\n' 'Flushing oldest {cull_count} entries.'.format(sz=sz, cull_count=cull_count)) - + for i, n in enumerate(sorted(oh)): if i >= cull_count: break self.shell.user_ns.pop('_%i' % n, None) oh.pop(n, None) + def flush(self): if not self.do_full_cache: