Thread

  1. [PATCH] psql: Add tab completion for \copy pstdin and pstdout

    Yugo Nagata <nagata@sraoss.co.jp> — 2025-12-31T09:27:46Z

    ---
     src/bin/psql/tab-complete.in.c | 21 +++++++++++++++------
     1 file changed, 15 insertions(+), 6 deletions(-)
    
    diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
    index 75a101c6ab5..5edb9ad4d77 100644
    --- a/src/bin/psql/tab-complete.in.c
    +++ b/src/bin/psql/tab-complete.in.c
    @@ -3357,13 +3357,22 @@ match_previous_words(int pattern_id,
     	/* Complete COPY|\copy <sth> FROM|TO with filename or STDIN/STDOUT/PROGRAM */
     	else if (Matches("COPY|\\copy", MatchAny, "FROM|TO"))
     	{
    -		/* COPY requires quoted filename */
    -		bool		force_quote = HeadMatches("COPY");
    -
    -		if (TailMatches("FROM"))
    -			COMPLETE_WITH_FILES_PLUS("", force_quote, "STDIN", "PROGRAM");
    +		if (HeadMatches("COPY"))
    +		{
    +			/* COPY requires quoted filename */
    +			if (TailMatches("FROM"))
    +				COMPLETE_WITH_FILES_PLUS("", true, "STDIN", "PROGRAM");
    +			else
    +				COMPLETE_WITH_FILES_PLUS("", true, "STDOUT", "PROGRAM");
    +		}
     		else
    -			COMPLETE_WITH_FILES_PLUS("", force_quote, "STDOUT", "PROGRAM");
    +		{
    +			/* \copy supports pstdin and pstdout */
    +			if (TailMatches("FROM"))
    +				COMPLETE_WITH_FILES_PLUS("", false, "STDIN", "PSTDIN", "PROGRAM");
    +			else
    +				COMPLETE_WITH_FILES_PLUS("", false, "STDOUT", "PSTDOUT", "PROGRAM");
    +		}
     	}
     
     	/* Complete COPY|\copy <sth> FROM|TO PROGRAM */
    -- 
    2.43.0
    
    
    --Multipart=_Wed__31_Dec_2025_18_39_53_+0900_MoOLGgwBwcE6QY1.--