Hello rebase for 9.5
test: \pset linestyle unicode \pset border 2 \pset unicode_header_linestyle double \l Regards Pavel 2014-03-11 21:17 GMT+01:00 Pavel Stehule <pavel.steh...@gmail.com>: > Hello > > I had to reduce allowed line style to single or double, because unicode > allows only combination single,double or single,thick > > postgres=# \l > List of databases > Name | Owner | Encoding | Collate | Ctype | Access > privileges > > -----------+----------+----------+-------------+-------------+----------------------- > postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | > template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | > =c/postgres + > | | | | | > postgres=CTc/postgres > template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | > =c/postgres + > | | | | | > postgres=CTc/postgres > (3 rows) > > postgres=# \pset border 2 > Border style (border) is 2. > postgres=# \pset linestyle unicode > Line style (linestyle) is unicode. > postgres=# \l > List of databases > > ┌───────────┬──────────┬──────────┬─────────────┬─────────────┬───────────────────────┐ > │ Name │ Owner │ Encoding │ Collate │ Ctype │ Access > privileges │ > > ├───────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────┤ > │ postgres │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 > │ │ > │ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ > =c/postgres ↵│ > │ │ │ │ │ │ > postgres=CTc/postgres │ > │ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ > =c/postgres ↵│ > │ │ │ │ │ │ > postgres=CTc/postgres │ > > └───────────┴──────────┴──────────┴─────────────┴─────────────┴───────────────────────┘ > (3 rows) > > postgres=# \pset unicode_header_linestyle double > Unicode border linestyle is "double". > postgres=# \l > List of databases > > ┌───────────┬──────────┬──────────┬─────────────┬─────────────┬───────────────────────┐ > │ Name │ Owner │ Encoding │ Collate │ Ctype │ Access > privileges │ > > ╞═══════════╪══════════╪══════════╪═════════════╪═════════════╪═══════════════════════╡ > │ postgres │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 > │ │ > │ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ > =c/postgres ↵│ > │ │ │ │ │ │ > postgres=CTc/postgres │ > │ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ > =c/postgres ↵│ > │ │ │ │ │ │ > postgres=CTc/postgres │ > > └───────────┴──────────┴──────────┴─────────────┴─────────────┴───────────────────────┘ > (3 rows) > > postgres=# > > Regards > > Pavel > > > > 2014-03-07 19:24 GMT+01:00 Pavel Stehule <pavel.steh...@gmail.com>: > > Hello >> >> I am returning back to this topic. Last time I proposed styles: >> >> >> http://www.postgresql.org/message-id/cafj8prclgoktryjpbtoncpgyftrcz-zgfowdc1jqulb+ede...@mail.gmail.com >> >> http://postgres.cz/wiki/Pretty_borders_in_psql >> >> This experiment fails, but there are some interesting tips in discuss. >> >> So I propose little bit different proposal - choose one predefined style >> for any table lines elements. These styles are active only when "linestyle" >> is unicode. >> >> So possible line elements are: >> >> * border, >> * header_separator, >> * row_separator, >> * column_separator, >> >> Possible styles (for each element) >> >> * none, >> * single, >> * double, >> * thick, >> >> It should to have enough variability to define all styles proposed early. >> I hope, so this proposal is secure and simple for usage. Styles should be >> persistently saved in .psqlrc file - and some examples can be in >> documentation. >> >> Usage: >> >> \pset linestyle_border double >> \pset linestyle_header_separator single >> \pset linestyle_row_separator single >> \pset linestyle_column_separator single >> >> \pset linestyle unicode >> >> ╔═══╤════════════╤═══════╗ >> ║ a │ b │ c ║ >> ╟───┼────────────┼───────╢ >> ║ 1 │ 2012-05-24 │ Hello ║ >> ╟───┼────────────┼───────╢ >> ║ 2 │ 2012-05-25 │ Hello ║ >> ║ │ │ World ║ >> ╚═══╧════════════╧═══════╝ >> (2 rows) >> >> >> Comments, ideas ? >> >> Regards >> >> Pavel >> >> >> >> >> >> >> >> >
commit 8f0918a42b095df6a8e5fc981a2947cc54b14404 Author: Pavel Stehule <pavel.steh...@gooddata.com> Date: Sat Jun 28 21:25:45 2014 +0200 rebase for 9.5 and clean warnings diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index ee6ec3a..671259f 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -2281,6 +2281,42 @@ lo_import 152801 </para> </listitem> </varlistentry> + + <varlistentry> + <term><literal>unicode_border_style</literal></term> + <listitem> + <para> + Sets the border line drawing style to one + of <literal>single</literal> or <literal>double</literal> + This option only affects the <literal>unicode</> + linestyle + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>unicode_column_style</literal></term> + <listitem> + <para> + Sets the column line drawing style to one + of <literal>single</literal> or <literal>double</literal> + This option only affects the <literal>unicode</> + linestyle + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>unicode_header_style</literal></term> + <listitem> + <para> + Sets the header line drawing style to one + of <literal>single</literal> or <literal>double</literal> + This option only affects the <literal>unicode</> + linestyle + </para> + </listitem> + </varlistentry> </variablelist> </para> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index cede72a..8cbf10b 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -1054,6 +1054,9 @@ exec_command(const char *cmd, "footer", "format", "linestyle", "null", "numericlocale", "pager", "recordsep", "tableattr", "title", "tuples_only", + "unicode_border_linestyle", + "unicode_column_linestyle", + "unicode_header_linestyle", NULL }; @@ -2247,6 +2250,55 @@ _align2string(enum printFormat in) return "unknown"; } +/* + * Parse entered unicode linestyle. Returns true, when entered string is + * known linestyle: single, double else returns false. + */ +static bool +set_unicode_line_style(const char *value, size_t vallen, unicode_linestyle *linestyle) +{ + if (pg_strncasecmp("single", value, vallen) == 0) + *linestyle = UNICODE_LINESTYLE_SINGLE; + else if (pg_strncasecmp("double", value, vallen) == 0) + *linestyle = UNICODE_LINESTYLE_DOUBLE; + else + return false; + + return true; +} + +static const char * +_unicode_linestyle2string(int linestyle) +{ + switch (linestyle) + { + case UNICODE_LINESTYLE_SINGLE: + return "single"; + break; + case UNICODE_LINESTYLE_DOUBLE: + return "double"; + break; + } + return "unknown"; +} + +static const char * +_linestyle2string(linestyle_type line_style) +{ + switch (line_style) + { + case LINESTYLE_ASCII: + return "ascii"; + break; + case LINESTYLE_OLD_ASCII: + return "old-ascii"; + break; + case LINESTYLE_UNICODE: + return "unicode"; + break; + } + return "unknown"; +} bool do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) @@ -2291,11 +2343,11 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) if (!value) ; else if (pg_strncasecmp("ascii", value, vallen) == 0) - popt->topt.line_style = &pg_asciiformat; + popt->topt.line_style = LINESTYLE_ASCII; else if (pg_strncasecmp("old-ascii", value, vallen) == 0) - popt->topt.line_style = &pg_asciiformat_old; + popt->topt.line_style = LINESTYLE_OLD_ASCII; else if (pg_strncasecmp("unicode", value, vallen) == 0) - popt->topt.line_style = &pg_utf8format; + popt->topt.line_style = LINESTYLE_UNICODE; else { psql_error("\\pset: allowed line styles are ascii, old-ascii, unicode\n"); @@ -2304,6 +2356,45 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) } + /* set unicode border line style */ + else if (strcmp(param, "unicode_border_linestyle") == 0) + { + if (!value) + ; + else if (!set_unicode_line_style(value, vallen, &popt->topt.unicode_border_linestyle)) + { + psql_error("\\pset: allowed unicode border linestyle are single, double\n"); + return false; + } + + } + + /* set unicode column line style */ + else if (strcmp(param, "unicode_column_linestyle") == 0) + { + if (!value) + ; + else if (!set_unicode_line_style(value, vallen, &popt->topt.unicode_column_linestyle)) + { + psql_error("\\pset: allowed unicode column linestyle are single, double\n"); + return false; + } + + } + + /* set unicode header line style */ + else if (strcmp(param, "unicode_header_linestyle") == 0) + { + if (!value) + ; + else if (!set_unicode_line_style(value, vallen, &popt->topt.unicode_header_linestyle)) + { + psql_error("\\pset: allowed unicode header linestyle are single, double\n"); + return false; + } + + } + /* set border style/width */ else if (strcmp(param, "border") == 0) { @@ -2525,7 +2616,7 @@ printPsetInfo(const char *param, struct printQueryOpt *popt) else if (strcmp(param, "linestyle") == 0) { printf(_("Line style (%s) is %s.\n"), param, - get_line_style(&popt->topt)->name); + _linestyle2string(popt->topt.line_style)); } /* show null display */ @@ -2600,6 +2691,25 @@ printPsetInfo(const char *param, struct printQueryOpt *popt) printf(_("Tuples only (%s) is off.\n"), param); } + /* unicode style formatting */ + else if (strcmp(param, "unicode_border_linestyle") == 0) + { + printf(_("Unicode border linestyle is \"%s\".\n"), + _unicode_linestyle2string(popt->topt.unicode_border_linestyle)); + } + + else if (strcmp(param, "unicode_column_linestyle") == 0) + { + printf(_("Unicode column linestyle is \"%s\".\n"), + _unicode_linestyle2string(popt->topt.unicode_column_linestyle)); + } + + else if (strcmp(param, "unicode_header_linestyle") == 0) + { + printf(_("Unicode border linestyle is \"%s\".\n"), + _unicode_linestyle2string(popt->topt.unicode_header_linestyle)); + } + else { psql_error("\\pset: unknown option: %s\n", param); diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c index 62850d8..6b2f349 100644 --- a/src/bin/psql/print.c +++ b/src/bin/psql/print.c @@ -49,7 +49,6 @@ static printTableFooter default_footer_cell = {default_footer, NULL}; /* Line style control structures */ const printTextFormat pg_asciiformat = { - "ascii", { {"-", "+", "+", "+"}, {"-", "+", "+", "+"}, @@ -65,12 +64,12 @@ const printTextFormat pg_asciiformat = "+", ".", ".", - true + true, + false }; const printTextFormat pg_asciiformat_old = { - "old-ascii", { {"-", "+", "+", "+"}, {"-", "+", "+", "+"}, @@ -86,39 +85,85 @@ const printTextFormat pg_asciiformat_old = " ", " ", " ", + false, false }; -const printTextFormat pg_utf8format = -{ - "unicode", - { - /* ─, ┌, ┬, ┐ */ - {"\342\224\200", "\342\224\214", "\342\224\254", "\342\224\220"}, - /* ─, ├, ┼, ┤ */ - {"\342\224\200", "\342\224\234", "\342\224\274", "\342\224\244"}, - /* ─, └, ┴, ┘ */ - {"\342\224\200", "\342\224\224", "\342\224\264", "\342\224\230"}, - /* N/A, │, │, │ */ - {"", "\342\224\202", "\342\224\202", "\342\224\202"} +typedef struct unicodeStyleRowFormat { + const char *horizontal; + const char *vertical_and_right[2]; + const char *vertical_and_left[2]; +} unicodeStyleRowFormat; + +typedef struct unicodeStyleColumnFormat { + const char *vertical; + const char *vertical_and_horizontal[2]; + const char *up_and_horizontal[2]; + const char *down_and_horizontal[2]; +} unicodeStyleColumnFormat; + +typedef struct unicodeStyleBorderFormat { + const char *up_and_right; + const char *vertical; + const char *down_and_right; + const char *horizontal; + const char *down_and_left; + const char *left_and_right; +} unicodeStyleBorderFormat; + +typedef struct unicodeStyleFormat { + unicodeStyleRowFormat row_style[2]; + unicodeStyleColumnFormat column_style[2]; + unicodeStyleBorderFormat border_style[2]; +} unicodeStyleFormat; + +const unicodeStyleFormat unicode_style = { + { + { + /* ─ */ + "\342\224\200", + /* ├╟ */ + {"\342\224\234", "\342\225\237"}, + /* ┤╢ */ + {"\342\224\244", "\342\225\242"}, + }, + { + /* ═ */ + "\342\225\220", + /* ╞╠ */ + {"\342\225\236", "\342\225\240"}, + /* ╡╣ */ + {"\342\225\241", "\342\225\243"}, + }, + }, + { + { + /* │ */ + "\342\224\202", + /* ┼╪ */ + {"\342\224\274", "\342\225\252"}, + /* ┴╧ */ + {"\342\224\264", "\342\225\247"}, + /* ┬╤ */ + {"\342\224\254", "\342\225\244"}, + }, + { + /* ║ */ + "\342\225\221", + /* ╫╬ */ + {"\342\225\253", "\342\225\254"}, + /* ╨╩ */ + {"\342\225\250", "\342\225\251"}, + /* ╥╦ */ + {"\342\225\245", "\342\225\246"}, + }, + }, + { + /* └│┌─┐┘ */ + {"\342\224\224", "\342\224\202", "\342\224\214", "\342\224\200", "\342\224\220", "\342\224\230"}, + /* ╚║╔═╗╝ */ + {"\342\225\232", "\342\225\221", "\342\225\224", "\342\225\220", "\342\225\227", "\342\225\235"}, }, - /* │ */ - "\342\224\202", - /* │ */ - "\342\224\202", - /* │ */ - "\342\224\202", - " ", - /* ↵ */ - "\342\206\265", - " ", - /* ↵ */ - "\342\206\265", - /* … */ - "\342\200\246", - /* … */ - "\342\200\246", - true }; @@ -128,6 +173,7 @@ static void IsPagerNeeded(const printTableContent *cont, const int extra_lines, FILE **fout, bool *is_pager); static void print_aligned_vertical(const printTableContent *cont, FILE *fout); +static printTextFormat * prepare_unicode_format(const printTableOpt *opt); static int @@ -503,7 +549,7 @@ print_aligned_text(const printTableContent *cont, FILE *fout) bool opt_tuples_only = cont->opt->tuples_only; int encoding = cont->opt->encoding; unsigned short opt_border = cont->opt->border; - const printTextFormat *format = get_line_style(cont->opt); + printTextFormat *format = get_line_style(cont->opt); const printTextLineFormat *dformat = &format->lrule[PRINT_RULE_DATA]; unsigned int col_count = 0, @@ -1081,6 +1127,9 @@ cleanup: if (is_pager) ClosePager(fout); + + if (format->free_format) + free(format); } @@ -1092,7 +1141,7 @@ print_aligned_vertical_line(const printTableContent *cont, printTextRule pos, FILE *fout) { - const printTextFormat *format = get_line_style(cont->opt); + printTextFormat *format = get_line_style(cont->opt); const printTextLineFormat *lformat = &format->lrule[pos]; unsigned short opt_border = cont->opt->border; unsigned int i; @@ -1139,6 +1188,9 @@ print_aligned_vertical_line(const printTableContent *cont, if (opt_border == 2) fprintf(fout, "%s%s", lformat->hrule, lformat->rightvrule); fputc('\n', fout); + + if (format->free_format) + free(format); } static void @@ -1146,7 +1198,7 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout) { bool opt_tuples_only = cont->opt->tuples_only; unsigned short opt_border = cont->opt->border; - const printTextFormat *format = get_line_style(cont->opt); + printTextFormat *format = get_line_style(cont->opt); const printTextLineFormat *dformat = &format->lrule[PRINT_RULE_DATA]; int encoding = cont->opt->encoding; unsigned long record = cont->opt->prior_records + 1; @@ -1487,6 +1539,9 @@ print_aligned_vertical(const printTableContent *cont, FILE *fout) if (is_pager) ClosePager(fout); + + if (format->free_format) + free(format); } @@ -2840,7 +2895,7 @@ setDecimalLocale(void) } /* get selected or default line style */ -const printTextFormat * +printTextFormat * get_line_style(const printTableOpt *opt) { /* @@ -2848,10 +2903,78 @@ get_line_style(const printTableOpt *opt) * printTableOpt struct can be initialized to zeroes to get default * behavior. */ - if (opt->line_style != NULL) - return opt->line_style; - else - return &pg_asciiformat; + switch (opt->line_style) + { + case LINESTYLE_ASCII: + return (printTextFormat *) &pg_asciiformat; + case LINESTYLE_OLD_ASCII: + return (printTextFormat *) &pg_asciiformat_old; + case LINESTYLE_UNICODE: + return prepare_unicode_format(opt); + default: + /* can't get here */ + fprintf(stderr, "invalid line style\n"); + exit(1); + } +} + +static printTextFormat * +prepare_unicode_format(const printTableOpt *opt) +{ + printTextFormat *popt; + + const unicodeStyleBorderFormat *border; + const unicodeStyleRowFormat *header; + const unicodeStyleColumnFormat *column; + + border = &unicode_style.border_style[opt->unicode_border_linestyle]; + header = &unicode_style.row_style[opt->unicode_header_linestyle]; + column = &unicode_style.column_style[opt->unicode_column_linestyle]; + + popt = pg_malloc(sizeof(printTextFormat)); + + popt->lrule[PRINT_RULE_TOP].hrule = border->horizontal; + popt->lrule[PRINT_RULE_TOP].leftvrule = border->down_and_right; + popt->lrule[PRINT_RULE_TOP].midvrule = column->down_and_horizontal[opt->unicode_border_linestyle];; + popt->lrule[PRINT_RULE_TOP].rightvrule = border->down_and_left; + + popt->lrule[PRINT_RULE_MIDDLE].hrule = header->horizontal; + popt->lrule[PRINT_RULE_MIDDLE].leftvrule = header->vertical_and_right[opt->unicode_border_linestyle]; + popt->lrule[PRINT_RULE_MIDDLE].midvrule = column->vertical_and_horizontal[opt->unicode_header_linestyle]; + popt->lrule[PRINT_RULE_MIDDLE].rightvrule = header->vertical_and_left[opt->unicode_border_linestyle]; + + popt->lrule[PRINT_RULE_BOTTOM].hrule = border->horizontal; + popt->lrule[PRINT_RULE_BOTTOM].leftvrule = border->up_and_right; + popt->lrule[PRINT_RULE_BOTTOM].midvrule = column->up_and_horizontal[opt->unicode_border_linestyle]; + popt->lrule[PRINT_RULE_BOTTOM].rightvrule = border->left_and_right; + + /* N/A */ + popt->lrule[PRINT_RULE_DATA].hrule = ""; + popt->lrule[PRINT_RULE_DATA].leftvrule = border->vertical; + popt->lrule[PRINT_RULE_DATA].midvrule = column->vertical; + popt->lrule[PRINT_RULE_DATA].rightvrule = border->vertical; + + popt->midvrule_nl = column->vertical; + popt->midvrule_wrap = column->vertical; + popt->midvrule_blank = column->vertical; + popt->header_nl_left = " "; + + /* ↵ */ + popt->header_nl_right = "\342\206\265"; + + popt->nl_left = " "; + + /* ↵ */ + popt->nl_right = "\342\206\265"; + + /* … */ + popt->wrap_left = "\342\200\246"; + popt->wrap_right = "\342\200\246"; + + popt->wrap_right_border = true; + popt->free_format = true; + + return popt; } /* diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h index 87b2856..7e1f2f7 100644 --- a/src/bin/psql/print.h +++ b/src/bin/psql/print.h @@ -53,7 +53,6 @@ typedef enum printTextLineWrap typedef struct printTextFormat { /* A complete line style */ - const char *name; /* for display purposes */ printTextLineFormat lrule[4]; /* indexed by enum printTextRule */ const char *midvrule_nl; /* vertical line for continue after newline */ const char *midvrule_wrap; /* vertical line for wrapped data */ @@ -66,8 +65,22 @@ typedef struct printTextFormat const char *wrap_right; /* right mark for wrapped data */ bool wrap_right_border; /* use right-hand border for wrap * marks when border=0? */ + bool free_format; /* true, when format should be released after usage */ } printTextFormat; +typedef enum unicode_linestyle +{ + UNICODE_LINESTYLE_SINGLE = 0, /* to make sure someone initializes this */ + UNICODE_LINESTYLE_DOUBLE = 1 +} unicode_linestyle; + +typedef enum linestyle_type +{ + LINESTYLE_ASCII = 0, + LINESTYLE_OLD_ASCII, + LINESTYLE_UNICODE +} linestyle_type; + struct separator { char *separator; @@ -88,7 +101,7 @@ typedef struct printTableOpt bool stop_table; /* print stop decoration, eg </table> */ bool default_footer; /* allow "(xx rows)" default footer */ unsigned long prior_records; /* start offset for record counters */ - const printTextFormat *line_style; /* line style (NULL for default) */ + linestyle_type line_style; /* line style */ struct separator fieldSep; /* field separator for unaligned text mode */ struct separator recordSep; /* record separator for unaligned text mode */ bool numericLocale; /* locale-aware numeric units separator and @@ -97,6 +110,9 @@ typedef struct printTableOpt int encoding; /* character encoding */ int env_columns; /* $COLUMNS on psql start, 0 is unset */ int columns; /* target width for wrapped format */ + unicode_linestyle unicode_border_linestyle; + unicode_linestyle unicode_column_linestyle; + unicode_linestyle unicode_header_linestyle; } printTableOpt; /* @@ -177,7 +193,7 @@ extern void printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout, FILE *flog); extern void setDecimalLocale(void); -extern const printTextFormat *get_line_style(const printTableOpt *opt); +extern printTextFormat *get_line_style(const printTableOpt *opt); #ifndef __CYGWIN__ #define DEFAULT_PAGER "more" diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 45653a1..260d5fe 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -129,6 +129,11 @@ main(int argc, char *argv[]) pset.popt.topt.start_table = true; pset.popt.topt.stop_table = true; pset.popt.topt.default_footer = true; + + pset.popt.topt.unicode_border_linestyle = UNICODE_LINESTYLE_SINGLE; + pset.popt.topt.unicode_column_linestyle = UNICODE_LINESTYLE_SINGLE; + pset.popt.topt.unicode_header_linestyle = UNICODE_LINESTYLE_SINGLE; + /* We must get COLUMNS here before readline() sets it */ pset.popt.topt.env_columns = getenv("COLUMNS") ? atoi(getenv("COLUMNS")) : 0; diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index be5c3c5..51ab73e 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3565,7 +3565,8 @@ psql_completion(const char *text, int start, int end) {"border", "columns", "expanded", "fieldsep", "fieldsep_zero", "footer", "format", "linestyle", "null", "numericlocale", "pager", "recordsep", "recordsep_zero", "tableattr", "title", - "tuples_only", NULL}; + "tuples_only", "unicode_border_linestyle", + "unicode_column_linestyle", "unicode_header_linestyle", NULL}; COMPLETE_WITH_LIST_CS(my_list); } @@ -3586,6 +3587,16 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH_LIST_CS(my_list); } + else if (strcmp(prev_wd, "unicode_border_linestyle") == 0 || + strcmp(prev_wd, "unicode_column_linestyle") == 0 || + strcmp(prev_wd, "unicode_header_linestyle") == 0) + { + static const char *const my_list[] = + {"single", "double", NULL}; + + COMPLETE_WITH_LIST_CS(my_list); + + } } else if (strcmp(prev_wd, "\\set") == 0) {
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers