zsh-workers
 help / color / mirror / code / Atom feed
* clear-screen widget and prompt expansion
@ 2016-02-04 14:12 Vincent Lefevre
  2016-02-04 15:37 ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Vincent Lefevre @ 2016-02-04 14:12 UTC (permalink / raw)
  To: zsh-workers

About this widget:

       clear-screen (^L ESC-^L) (^L) (^L)
              Clear the screen and redraw the prompt.

Shouldn't the prompt also be re-expanded (like when the screen is
resized)? Or is it up to the user to create a new widget for that?

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: clear-screen widget and prompt expansion
  2016-02-04 14:12 clear-screen widget and prompt expansion Vincent Lefevre
@ 2016-02-04 15:37 ` Bart Schaefer
  2016-02-16 10:01   ` Vincent Lefevre
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2016-02-04 15:37 UTC (permalink / raw)
  To: zsh-workers

On Feb 4,  3:12pm, Vincent Lefevre wrote:
}
} Shouldn't the prompt also be re-expanded (like when the screen is
} resized)? Or is it up to the user to create a new widget for that?

There was a deliberate decision made a long time ago that once ZLE
is started, the prompt is a relatively static part of the editor.
Originally this was because prompts are formatted by the shell (even
if ZLE is disabled) and ZLE was treated like a separate entity.

Window resize is particularly tricky because, depending on the window
manager/desktop application, SIGWINCH may be sent either only once
when the user releases the mouse button (or otherwise ends the drag-
resize operation), or multiple times in very rapid succession for every
incremental drag motion.

So it's left up to the user to decide how to handle that, typically by
something like
    TRAPWINCH() { zle && zle reset-prompt }


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: clear-screen widget and prompt expansion
  2016-02-04 15:37 ` Bart Schaefer
@ 2016-02-16 10:01   ` Vincent Lefevre
  2016-02-16 18:43     ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Vincent Lefevre @ 2016-02-16 10:01 UTC (permalink / raw)
  To: zsh-workers

On 2016-02-04 07:37:31 -0800, Bart Schaefer wrote:
> On Feb 4,  3:12pm, Vincent Lefevre wrote:
> } Shouldn't the prompt also be re-expanded (like when the screen is
> } resized)? Or is it up to the user to create a new widget for that?
> 
> There was a deliberate decision made a long time ago that once ZLE
> is started, the prompt is a relatively static part of the editor.
> Originally this was because prompts are formatted by the shell (even
> if ZLE is disabled) and ZLE was treated like a separate entity.
> 
> Window resize is particularly tricky because, depending on the window
> manager/desktop application, SIGWINCH may be sent either only once
> when the user releases the mouse button (or otherwise ends the drag-
> resize operation), or multiple times in very rapid succession for every
> incremental drag motion.
> 
> So it's left up to the user to decide how to handle that, typically by
> something like
>     TRAPWINCH() { zle && zle reset-prompt }

I meant that prompt is already re-expanded when the terminal is
resized. What I'm saying is that clear-screen is not consistent
with that. For instance, with RPS1="<%*" after "zsh -f", when
resizing the terminal, the time is updated, but with Ctrl-L it
is not. I'm wondering whether such a difference is expected.

Moreover I thought that

  zle -A clear-screen real-clear-screen
  cls-rp() { zle real-clear-screen; zle reset-prompt }
  zle -N clear-screen cls-rp

would do what I expect, but this doesn't work in incremental search
mode (while the prompt is still re-expanded when the terminal is
resized).

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: clear-screen widget and prompt expansion
  2016-02-16 10:01   ` Vincent Lefevre
@ 2016-02-16 18:43     ` Bart Schaefer
  2016-02-19 15:16       ` Vincent Lefevre
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2016-02-16 18:43 UTC (permalink / raw)
  To: zsh-workers

On Feb 16, 11:01am, Vincent Lefevre wrote:
}
} I meant that prompt is already re-expanded when the terminal is
} resized. What I'm saying is that clear-screen is not consistent
} with that.

Ah.  Well, clear-screen is a widget and existed in primordial form
long before the shell even knew about SIGWINCH, so it's not very
surprising that it hasn't been overhauled with more recent changes
to prompt handling.

This raises the question of whether redisplay (^R) should also imply
a reset-prompt.  However, it explicitly says "the edit buffer" whereas
clear-screen mentions "redraw the prompt".

}   zle -A clear-screen real-clear-screen
}   cls-rp() { zle real-clear-screen; zle reset-prompt }
}   zle -N clear-screen cls-rp
} 
} [...] doesn't work in incremental search mode

That's because incremental-search has its own input loop and does not
recognize user-defined widgets.  An entirely different problem.

Does the following break anything?


diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index 3d2471e..7e4f328 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -2424,6 +2424,7 @@ clearscreen(UNUSED(char **args))
     tcoutclear(TCCLEARSCREEN);
     resetneeded = 1;
     clearflag = 0;
+    reexpandprompt();
     return 0;
 }
 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: clear-screen widget and prompt expansion
  2016-02-16 18:43     ` Bart Schaefer
@ 2016-02-19 15:16       ` Vincent Lefevre
  0 siblings, 0 replies; 5+ messages in thread
From: Vincent Lefevre @ 2016-02-19 15:16 UTC (permalink / raw)
  To: zsh-workers

On 2016-02-16 10:43:51 -0800, Bart Schaefer wrote:
> diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
> index 3d2471e..7e4f328 100644
> --- a/Src/Zle/zle_refresh.c
> +++ b/Src/Zle/zle_refresh.c
> @@ -2424,6 +2424,7 @@ clearscreen(UNUSED(char **args))
>      tcoutclear(TCCLEARSCREEN);
>      resetneeded = 1;
>      clearflag = 0;
> +    reexpandprompt();
>      return 0;
>  }
>  

Thanks. It seems to work well.

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-02-19 15:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-04 14:12 clear-screen widget and prompt expansion Vincent Lefevre
2016-02-04 15:37 ` Bart Schaefer
2016-02-16 10:01   ` Vincent Lefevre
2016-02-16 18:43     ` Bart Schaefer
2016-02-19 15:16       ` Vincent Lefevre

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).