diff options
| author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
|---|---|---|
| committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
| commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
| tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/mc | |
| parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) | |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/mc')
22 files changed, 6449 insertions, 0 deletions
diff --git a/recipes/mc/mc-4.6.2/00-70-utf8-common.patch b/recipes/mc/mc-4.6.2/00-70-utf8-common.patch new file mode 100644 index 0000000000..244a01580a --- /dev/null +++ b/recipes/mc/mc-4.6.2/00-70-utf8-common.patch @@ -0,0 +1,46 @@ +Some common stuff used by other UTF-8 patches. + +================================================================================ +--- mc-4.6.2/src/util.c ++++ mc-4.6.2/src/util.c +@@ -145,6 +145,30 @@ + return strlen (str); + } + ++int ++columns_to_bytes (const char *str, int col) ++{ ++ int bytes = 0; ++ int columns = 0; ++ int i; ++#ifdef UTF8 ++ if (SLsmg_Is_Unicode) { ++ static mbstate_t s; ++ while (columns < col) { ++ memset (&s, 0, sizeof (s)); ++ i = mbrlen (str + bytes, -1, &s); ++ if (i <= 0) { ++ return col + bytes - columns; ++ } ++ bytes += i; ++ columns ++; ++ } ++ return col + bytes - columns; ++ } else ++#endif ++ return col; ++} ++ + #ifdef UTF8 + + void +--- mc-4.6.2/src/util.h ++++ mc-4.6.2/src/util.h +@@ -104,6 +104,7 @@ + + void fix_utf8(char *str); + size_t mbstrlen (const char *); ++int columns_to_bytes (const char *, int); + wchar_t *mbstr_to_wchar (const char *); + char *wchar_to_mbstr (const wchar_t *); + char *utf8_to_local(char *str); diff --git a/recipes/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch b/recipes/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch new file mode 100644 index 0000000000..a7bc41c59b --- /dev/null +++ b/recipes/mc/mc-4.6.2/00-73-utf8-bottom-buttons-width.patch @@ -0,0 +1,21 @@ +Use six character width cyan rectangles for bottom row's buttons. + +================================================================================ +--- mc-4.6.2/src/widget.c ++++ mc-4.6.2/src/widget.c +@@ -2562,11 +2562,14 @@ + attrset (DEFAULT_COLOR); + tty_printf ("%-*s", bb->widget.cols, ""); + for (i = 0; i < COLS / 8 && i < 10; i++) { ++ int j; + widget_move (&bb->widget, 0, i * 8); + attrset (DEFAULT_COLOR); + tty_printf ("%d", i + 1); + attrset (SELECTED_COLOR); +- tty_printf ("%-*s", ((i + 1) * 8 == COLS ? 5 : 6), ++ j = columns_to_bytes(bb->labels [i].text ? bb->labels [i].text : "", ++ ((i + 1) * 8 == COLS ? 5 : 6)); ++ tty_printf ("%-*s", j, + bb->labels[i].text ? bb->labels[i].text : ""); + attrset (DEFAULT_COLOR); + } diff --git a/recipes/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch b/recipes/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch new file mode 100644 index 0000000000..5f1227d30a --- /dev/null +++ b/recipes/mc/mc-4.6.2/00-75-utf8-cmdline-help.patch @@ -0,0 +1,63 @@ +Fix formatting the output of "mc --help". + +================================================================================ +--- mc-4.6.2/src/main.c ++++ mc-4.6.2/src/main.c +@@ -1865,7 +1865,7 @@ + + /* print help for options */ + leftColWidth = poptPrintHelp (ctx, stream, 0); +- fprintf (stream, " %-*s %s\n", leftColWidth, _("+number"), ++ fprintf (stream, " %-*s %s\n", leftColWidth + strlen(_("+number")) - mbstrlen(_("+number")), _("+number"), + _("Set initial line number for the internal editor")); + fputs (_ + ("\n" +--- mc-4.6.2/src/popthelp.c ++++ mc-4.6.2/src/popthelp.c +@@ -101,7 +101,7 @@ + goto out; + } + +- helpLength = strlen(help); ++ helpLength = mbstrlen(help); + while (helpLength > lineLength) { + ch = help + lineLength - 1; + while (ch > help && !isspace((unsigned char) *ch)) ch--; +@@ -112,7 +112,7 @@ + fprintf(f, "%.*s\n%*s", (int) (ch - help), help, indentLength, " "); + help = ch; + while (isspace((unsigned char) *help) && *help) help++; +- helpLength = strlen(help); ++ helpLength = mbstrlen(help); + } + + if (helpLength) fprintf(f, "%s\n", help); +@@ -233,7 +233,7 @@ + if (len == 3) return cursor; + + if (argDescrip) +- len += strlen(argDescrip) + 1; ++ len += mbstrlen(argDescrip) + 1; + + if ((cursor + len) > 79) { + fprintf(f, "\n "); +@@ -304,7 +304,7 @@ + singleTableUsage(f, cursor, con->options, NULL); + + if (con->otherHelp) { +- cursor += strlen(con->otherHelp) + 1; ++ cursor += mbstrlen(con->otherHelp) + 1; + if (cursor > 79) fprintf(f, "\n "); + fprintf(f, " %s", con->otherHelp); + } +--- mc-4.6.2/src/util.c ++++ mc-4.6.2/src/util.c +@@ -152,7 +152,7 @@ + int columns = 0; + int i; + #ifdef UTF8 +- if (SLsmg_Is_Unicode) { ++ if (1) { + static mbstate_t s; + while (columns < col) { + memset (&s, 0, sizeof (s)); diff --git a/recipes/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch b/recipes/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch new file mode 100644 index 0000000000..38e0337ad6 --- /dev/null +++ b/recipes/mc/mc-4.6.2/00-76-utf8-hotlist-highlight.patch @@ -0,0 +1,23 @@ +Highlight the lines of hotlist in full width. + +================================================================================ +--- mc-4.6.2/src/widget.c ++++ mc-4.6.2/src/widget.c +@@ -1994,6 +1994,7 @@ + { + WLEntry *e; + int i; ++ int j; + int sel_line; + Dlg_head *h = l->widget.parent; + int normalc = DLG_NORMALC (h); +@@ -2024,7 +2025,8 @@ + text = e->text; + e = e->next; + } +- tty_printf (" %-*s ", l->width-2, name_trunc (text, l->width-2)); ++ j = columns_to_bytes (name_trunc (text, l->width-2), l->width-2); ++ tty_printf (" %-*s ", j, name_trunc (text, l->width-2)); + } + l->cursor_y = sel_line; + if (!l->scrollbar) diff --git a/recipes/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch b/recipes/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch new file mode 100644 index 0000000000..912d8eb72b --- /dev/null +++ b/recipes/mc/mc-4.6.2/00-77-utf8-filename-search-highlight.patch @@ -0,0 +1,17 @@ +Quick filename search (^S) highlights correct width. + +================================================================================ +--- mc-4.6.2/src/screen.c ++++ mc-4.6.2/src/screen.c +@@ -771,8 +771,10 @@ + widget_move (&panel->widget, llines (panel)+3, 1); + + if (panel->searching){ ++ int j; + attrset (INPUT_COLOR); +- tty_printf ("/%-*s", panel->widget.cols-3, panel->search_buffer); ++ j = columns_to_bytes (panel->search_buffer, panel->widget.cols-3); ++ tty_printf ("/%-*s", j, panel->search_buffer); + attrset (NORMAL_COLOR); + return; + } diff --git a/recipes/mc/mc-4.6.2/01_ftpfs_symlink.patch b/recipes/mc/mc-4.6.2/01_ftpfs_symlink.patch new file mode 100644 index 0000000000..f05a424cac --- /dev/null +++ b/recipes/mc/mc-4.6.2/01_ftpfs_symlink.patch @@ -0,0 +1,32 @@ +--- mc-4.6.2/vfs/direntry.c ++++ mc-4.6.2/vfs/direntry.c +@@ -251,7 +251,13 @@ + char * const pathref = g_strdup (a_path); + char *path = pathref; + +- canonicalize_pathname (path); ++ if (strncmp(me->name, "ftpfs", 5) != 0) ++ canonicalize_pathname (path); ++ else { ++ char *p = path + strlen (path) - 1; ++ while (p > path && *p == PATH_SEP) ++ *p-- = 0; ++ } + + while (root) { + while (*path == PATH_SEP) /* Strip leading '/' */ +@@ -324,7 +330,13 @@ + if (root->super->root != root) + vfs_die ("We have to use _real_ root. Always. Sorry."); + +- canonicalize_pathname (path); ++ if (strncmp (me->name, "ftpfs", 5) != 0) ++ canonicalize_pathname (path); ++ else { ++ char *p = path + strlen (path) - 1; ++ while (p > path && *p == PATH_SEP) ++ *p-- = 0; ++ } + + if (!(flags & FL_DIR)) { + char *dirname, *name, *save; diff --git a/recipes/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch b/recipes/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch new file mode 100644 index 0000000000..6ad176dfa1 --- /dev/null +++ b/recipes/mc/mc-4.6.2/02_ignore_ftp_chmod_error.patch @@ -0,0 +1,11 @@ +--- mc-4.6.2/vfs/ftpfs.c ++++ mc-4.6.2/vfs/ftpfs.c +@@ -1529,7 +1529,7 @@ + char buf[BUF_SMALL]; + + g_snprintf(buf, sizeof(buf), "SITE CHMOD %4.4o /%%s", mode & 07777); +- return ftpfs_send_command(me, path, buf, OPT_FLUSH); ++ return ftpfs_send_command(me, path, buf, OPT_FLUSH | OPT_IGNORE_ERROR); + } + + static int ftpfs_chown (struct vfs_class *me, const char *path, int owner, int group) diff --git a/recipes/mc/mc-4.6.2/99_regexp-replace-fixed.patch b/recipes/mc/mc-4.6.2/99_regexp-replace-fixed.patch new file mode 100644 index 0000000000..612d77736b --- /dev/null +++ b/recipes/mc/mc-4.6.2/99_regexp-replace-fixed.patch @@ -0,0 +1,312 @@ +--- mc-4.6.2/edit/editcmd.c ++++ mc-4.6.2/edit/editcmd.c +@@ -2103,6 +2103,33 @@ + edit_error_dialog (_("Error"), _(" Invalid regular expression, or scanf expression with too many conversions ")); + } + ++int mc_isdigit(mc_wchar_t c) ++{ ++#ifndef UTF8 ++ return isdigit(c); ++#else /* UTF8 */ ++ return iswdigit(c); ++#endif /* UTF8 */ ++} ++ ++mc_wchar_t * mc_memmove(mc_wchar_t *to, mc_wchar_t *from, size_t size) ++{ ++#ifndef UTF8 ++ return memmove(to, from, size); ++#else /* UTF8 */ ++ return wmemmove(to, from, size); ++#endif /* UTF8 */ ++} ++ ++mc_wchar_t * mc_strchr(mc_wchar_t *str, mc_wchar_t c) ++{ ++#ifndef UTF8 ++ return strchr(str, c); ++#else /* UTF8 */ ++ return wcschr(str, c); ++#endif /* UTF8 */ ++} ++ + /* call with edit = 0 before shutdown to close memory leaks */ + void + edit_replace_cmd (WEdit *edit, int again) +@@ -2119,6 +2146,8 @@ + int replace_continue; + int treplace_prompt = 0; + long times_replaced = 0, last_search; ++ mc_wchar_t *repl_templ; ++ mc_wchar_t *repl_str; + int argord[NUM_REPL_ARGS]; + + if (!edit) { +@@ -2172,7 +2201,68 @@ + + } + +- { ++#ifndef UTF8 ++ repl_templ = g_strdup(input2); ++#else /* UTF8 */ ++ repl_templ = mbstr_to_wchar(input2); ++#endif /* UTF8 */ ++ ++ if (replace_regexp) { ++ /* ++ * edit replace template - convert subpattern references (\1) to ++ * snprintf_p arguments (%s) and fill "argord" array to match captured ++ * subpatterns ++ */ ++ int ao; ++ int ord; ++ mc_wchar_t *s; ++ mc_wchar_t *param; ++ mc_wchar_t *endptr; ++#ifndef UTF8 ++#define MC_CHAR(c) ((mc_wchar_t) c) ++#else /* UTF8 */ ++#define MC_CHAR(c) (L##c) ++#endif /* UTF8 */ ++ ++ endptr = mc_strchr(repl_templ, MC_CHAR('\0')); ++ s = repl_templ; ++ ao = 0; ++ while ((s = mc_strchr(s, MC_CHAR('\\')))) { ++ param = s; ++ s++; ++ if (!s) break; ++ /* implement \n \r and \t escape sequences in replace string */ ++ if (*s == MC_CHAR('n')) { ++ *s = MC_CHAR('\n'); ++ } else if (*s == MC_CHAR('r')) { ++ *s = MC_CHAR('\r'); ++ } else if (*s == MC_CHAR('t')) { ++ *s = MC_CHAR('\t'); ++ } ++ if (!mc_isdigit(*s)) { ++ mc_memmove(param, s, endptr - s + 1); ++ continue; ++ } ++ ord = 0; ++ while (mc_isdigit(*s)) { ++ ord *= 10; ++ ord += *s - MC_CHAR('0'); ++ s++; ++ } ++ if ((ord > 0) && (ord <= NUM_REPL_ARGS)) { ++ argord[ao++] = ord - 1; ++ *param++ = MC_CHAR('%'); ++ *param++ = MC_CHAR('s'); ++ mc_memmove(param, s, endptr - s + 1); ++ s = param; ++ } ++ } ++ while (ao < NUM_REPL_ARGS) { ++ argord[ao] = ao; ++ ao++; ++ } ++ ++ } else { + const char *s; + int ord; + size_t i; +@@ -2203,6 +2293,12 @@ + && !replace_backwards) + edit->search_start++; + ++ if (replace_scanf || replace_regexp) { ++ repl_str = g_malloc(((MAX_REPL_LEN + 2)+1) * sizeof(mc_wchar_t)); ++ } else { ++ repl_str = repl_templ; ++ } ++ + do { + int len = 0; + long new_start; +@@ -2227,8 +2323,47 @@ + + replace_yes = 1; + ++ if (replace_scanf || replace_regexp) { ++ int ret = 0; ++ ++ /* we need to fill in sargs just like with scanf */ ++ if (replace_regexp) { ++ int k, j; ++ for (k = 1; k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0; ++ k++) { ++ mc_wchar_t *t; ++ ++ if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) { ++ ret = -1; ++ break; ++ } ++ t = (mc_wchar_t *) &sargs[k - 1][0]; ++ for (j = 0; j < pmatch[k].rm_eo - pmatch[k].rm_so && ++ j < 255; j++, t++) ++ *t = edit_get_byte (edit, edit->search_start - ++ pmatch[0].rm_so + pmatch[k].rm_so + j); ++ *t = '\0'; ++ } ++ for (; k <= NUM_REPL_ARGS; k++) ++ sargs[k - 1][0] = 0; ++ } ++ if (ret >= 0) ++ ret = snprintf_p (repl_str, MAX_REPL_LEN + 2, repl_templ, ++ PRINTF_ARGS); ++ if (ret < 0) { ++ edit_error_dialog (_(" Replace "), ++ ret == -2 ++ ? _(" Error in replacement format string. ") ++ : _(" Replacement too long. ")); ++ treplace_prompt = 0; ++ replace_yes = 0; ++ replace_continue = 0; ++ } ++ } ++ + if (treplace_prompt) { + int l; ++ char *displ_repl_str; + l = edit->curs_row - edit->num_widget_lines / 3; + if (l > 0) + edit_scroll_downward (edit, l); +@@ -2242,7 +2377,15 @@ + /*so that undo stops at each query */ + edit_push_key_press (edit); + +- switch (edit_replace_prompt (edit, input2, /* and prompt 2/3 down */ ++#ifndef UTF8 ++ displ_repl_str = g_strdup(repl_str); ++#else /* UTF8 */ ++ displ_repl_str = wchar_to_mbstr(repl_str); ++ /* wchar_to_mbstr(str) returns NULL when length of str == 0 */ ++ if (!displ_repl_str) displ_repl_str = g_strdup(""); ++#endif /* UTF8 */ ++ convert_to_display (displ_repl_str); ++ switch (edit_replace_prompt (edit, displ_repl_str, /* and prompt 2/3 down */ + (edit->num_widget_columns - + CONFIRM_DLG_WIDTH) / 2, + edit->num_widget_lines * 2 / +@@ -2264,99 +2407,15 @@ + replace_continue = 0; + break; + } ++ g_free(displ_repl_str); + } + if (replace_yes) { /* delete then insert new */ +-#ifdef UTF8 +- mc_wchar_t *winput2 = mbstr_to_wchar(input2); +-#endif /* UTF8 */ +- if (replace_scanf) { +- mc_wchar_t repl_str[MAX_REPL_LEN + 2]; +- int ret = 0; +- +- /* we need to fill in sargs just like with scanf */ +- if (replace_regexp) { +- int k, j; +- for (k = 1; +- k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0; +- k++) { +-#ifndef UTF8 +- unsigned char *t; +-#else /* UTF8 */ +- mc_wchar_t *t; +-#endif +- +- if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) { +- ret = -1; +- break; +- } +-#ifndef UTF8 +- t = (unsigned char *) &sargs[k - 1][0]; +-#else /* UTF8 */ +- t = (mc_wchar_t *) &sargs[k - 1][0]; +-#endif /* UTF8 */ +- for (j = 0; +- j < pmatch[k].rm_eo - pmatch[k].rm_so +- && j < 255; j++, t++) +- *t = edit_get_byte (edit, +- edit-> +- search_start +- - +- pmatch +- [0]. +- rm_so + +- pmatch +- [k]. +- rm_so + +- j); +- *t = '\0'; +- } +- for (; k <= NUM_REPL_ARGS; k++) +- sargs[k - 1][0] = 0; +- } +- if (!ret) +- ret = +-#ifndef UTF8 +- snprintf_p (repl_str, MAX_REPL_LEN + 2, input2, +-#else /* UTF8 */ +- snprintf_p (repl_str, MAX_REPL_LEN + 2, winput2, +-#endif /* UTF8 */ +- PRINTF_ARGS); +- if (ret >= 0) { +- times_replaced++; +- while (i--) +- edit_delete (edit); +-#ifndef UTF8 +- while (repl_str[++i]) +- edit_insert (edit, repl_str[i]); +-#else /* UTF8 */ +- while (winput2[++i]) +- edit_insert (edit, winput2[i]); +-#endif /* UTF8 */ +- } else { +- edit_error_dialog (_(" Replace "), +- ret == +- -2 ? +- _ +- (" Error in replacement format string. ") +- : _(" Replacement too long. ")); +- replace_continue = 0; +- } +- } else { +- times_replaced++; +- while (i--) +- edit_delete (edit); +-#ifndef UTF8 +- while (input2[++i]) +- edit_insert (edit, input2[i]); +-#else /* UTF8 */ +- while (winput2[++i]) +- edit_insert (edit, winput2[i]); +-#endif /* UTF8 */ +- } ++ times_replaced++; ++ while (i--) ++ edit_delete (edit); ++ while (repl_str[++i]) ++ edit_insert (edit, repl_str[i]); + edit->found_len = i; +-#ifdef UTF8 +- g_free (winput2); +-#endif /* UTF8 */ + } + /* so that we don't find the same string again */ + if (replace_backwards) { +@@ -2385,6 +2444,12 @@ + } + } while (replace_continue); + ++ /* cleanup */ ++ if (replace_scanf || replace_regexp) { ++ g_free(repl_str); ++ } ++ g_free(repl_templ); ++ + edit->force = REDRAW_COMPLETELY; + edit_scroll_screen_over_cursor (edit); + cleanup: diff --git a/recipes/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch b/recipes/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch new file mode 100644 index 0000000000..580c8345dd --- /dev/null +++ b/recipes/mc/mc-4.6.2/99b_fix-regex-pattern-lengths.patch @@ -0,0 +1,53 @@ +--- mc-4.6.2/edit/editcmd.c ++++ mc-4.6.2/edit/editcmd.c +@@ -1511,6 +1511,32 @@ + sargs[argord[8]], sargs[argord[9]], sargs[argord[10]], sargs[argord[11]], \ + sargs[argord[12]], sargs[argord[13]], sargs[argord[14]], sargs[argord[15]] + ++#ifdef UTF8 ++size_t ++real_mbstrlen (const char *str) ++{ ++ if (SLsmg_Is_Unicode) { ++ size_t width = 0; ++ ++ for (; *str; str++) { ++ wchar_t c; ++ size_t len; ++ ++ len = mbrtowc (&c, str, MB_CUR_MAX, NULL); ++ ++ if (len == (size_t)(-1) || len == (size_t)(-2)) break; ++ ++ if (len > 0) { ++ width ++; ++ str += len-1; ++ } ++ } ++ ++ return width; ++ } else ++ return strlen (str); ++} ++#endif + + /* This function is a modification of mc-3.2.10/src/view.c:regexp_view_search() */ + /* returns -3 on error in pattern, -1 on not found, found_len = 0 if either */ +@@ -1582,7 +1608,7 @@ + continue; + tmp = string[pmatch[i].rm_so]; + string[pmatch[i].rm_so] = 0; +- new_o = mbstrlen(string); ++ new_o = real_mbstrlen(string); + string[pmatch[i].rm_so] = tmp; + pmatch[i].rm_so = new_o; + +@@ -1590,7 +1616,7 @@ + continue; + tmp = string[pmatch[i].rm_eo]; + string[pmatch[i].rm_eo] = 0; +- new_o = mbstrlen(string); ++ new_o = real_mbstrlen(string); + string[pmatch[i].rm_eo] = tmp; + pmatch[i].rm_eo = new_o; + } diff --git a/recipes/mc/mc-4.6.2/cross-compile.patch b/recipes/mc/mc-4.6.2/cross-compile.patch new file mode 100644 index 0000000000..53879e9cef --- /dev/null +++ b/recipes/mc/mc-4.6.2/cross-compile.patch @@ -0,0 +1,16 @@ +Index: mc-4.6.2/src/Makefile.am +=================================================================== +--- mc-4.6.2.orig/src/Makefile.am 2009-02-01 19:30:21.000000000 +0000 ++++ mc-4.6.2/src/Makefile.am 2009-02-25 13:24:16.000000000 +0000 +@@ -14,7 +14,10 @@ + endif + + noinst_PROGRAMS = man2hlp +-man2hlp_LDADD = $(GLIB_LIBS) ++man2hlp_CFLAGS = $(GLIB_CFLAGS_FOR_BUILD) ++man2hlp_LDADD = $(GLIB_LIBS_FOR_BUILD) ++$(man2hlp_OBJECTS): CC=$(CC_FOR_BUILD) ++man2hlp_LINK = $(LD_FOR_BUILD) -o $@ + + mcmfmt_SOURCES = mfmt.c + diff --git a/recipes/mc/mc-4.6.2/mc-cursor-appearance.patch b/recipes/mc/mc-4.6.2/mc-cursor-appearance.patch new file mode 100644 index 0000000000..2fc94ff0e6 --- /dev/null +++ b/recipes/mc/mc-4.6.2/mc-cursor-appearance.patch @@ -0,0 +1,52 @@ +--- mc-4.6.2/edit/editdraw.c ++++ mc-4.6.2/edit/editdraw.c +@@ -356,8 +356,13 @@ + if (use_colors && visible_tabs) { + c = (p->style & ~MOD_CURSOR) | MOD_WHITESPACE; + if (i > 2) { +- p->ch = '<'; +- p->style |= MOD_WHITESPACE; ++ if (p->style & MOD_CURSOR) { ++ p->ch = ' '; ++ } ++ else { ++ p->ch = '<'; ++ p->style |= MOD_WHITESPACE; ++ } + p++; + while (--i > 1) { + p->style = c; +@@ -380,8 +385,13 @@ + p++; + } + } else if (use_colors && visible_tws && q >= tws) { +- p->style |= MOD_WHITESPACE; +- p->ch = '.'; ++ if (p->style & MOD_CURSOR) { ++ p->ch = ' '; ++ } ++ else { ++ p->style |= MOD_WHITESPACE; ++ p->ch = '.'; ++ } + p++; + c = p->style & ~MOD_CURSOR; + while (--i) { +@@ -390,7 +400,7 @@ + p++; + } + } else { +- p->ch |= ' '; ++ p->ch = ' '; + c = p->style & ~MOD_CURSOR; + p++; + while (--i) { +@@ -401,7 +411,7 @@ + } + break; + case ' ': +- if (use_colors && visible_tws && q >= tws) { ++ if (use_colors && visible_tws && q >= tws && !(p->style & MOD_CURSOR)) { + p->ch = '.'; + p->style |= MOD_WHITESPACE; + p++; diff --git a/recipes/mc/mc-4.6.2/mc-esc-seq.patch b/recipes/mc/mc-4.6.2/mc-esc-seq.patch new file mode 100644 index 0000000000..b9ec04a75a --- /dev/null +++ b/recipes/mc/mc-4.6.2/mc-esc-seq.patch @@ -0,0 +1,11 @@ +--- mc-4.6.2/src/util.c ++++ mc-4.6.2/src/util.c +@@ -1205,6 +1205,8 @@ + /* strchr() matches trailing binary 0 */ + while (*(++r) && strchr ("0123456789;?", *r)); + } ++ else if (*r == '(') ++ r++; + + /* + * Now we are at the last character of the sequence. diff --git a/recipes/mc/mc-4.6.2/mc-utf8-look-and-feel.patch b/recipes/mc/mc-4.6.2/mc-utf8-look-and-feel.patch new file mode 100644 index 0000000000..83ad60135d --- /dev/null +++ b/recipes/mc/mc-4.6.2/mc-utf8-look-and-feel.patch @@ -0,0 +1,206 @@ +Index: mc-4.6.2~git20080311/src/main.c +================================================================================ +--- mc-4.6.2/src/main.c ++++ mc-4.6.2/src/main.c +@@ -276,6 +276,9 @@ + /* The user's shell */ + const char *shell = NULL; + ++/* Is the LANG UTF-8 ? */ ++gboolean is_utf8 = FALSE; ++ + /* mc_home: The home of MC */ + char *mc_home = NULL; + +@@ -2126,6 +2129,16 @@ + int + main (int argc, char *argv[]) + { ++ /* Check whether we have UTF-8 locale */ ++ char *lang = getenv("LANG"); ++ size_t len = 0; ++ ++ if ( lang ) ++ len = strlen(lang); ++ ++ if ( len >= 5 && !strcasecmp(&lang[len-5],"UTF-8") ) ++ is_utf8 = TRUE; ++ + /* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */ + setlocale (LC_ALL, ""); + bindtextdomain ("mc", LOCALEDIR); +--- mc-4.6.2/src/main.h ++++ mc-4.6.2/src/main.h +@@ -69,6 +69,7 @@ + extern int only_leading_plus_minus; + extern int output_starts_shell; + extern int midnight_shutdown; ++extern gboolean is_utf8; + extern char cmd_buf [512]; + extern const char *shell; + +--- mc-4.6.2/src/screen.c ++++ mc-4.6.2/src/screen.c +@@ -892,6 +892,9 @@ + } + #endif /* HAVE_SLANG */ + ++ vscrollbar (panel->widget, panel->widget.lines, panel->widget.cols-1, 2, 2, ++ panel->selected, panel->count, TRUE); ++ + if (panel->active) + attrset (REVERSE_COLOR); + +@@ -1493,7 +1496,7 @@ + panel->dirty = 1; + + /* Status needn't to be split */ +- usable_columns = ((panel->widget.cols-2)/((isstatus) ++ usable_columns = ((panel->widget.cols-3)/((isstatus) + ? 1 + : (panel->split+1))) - (!isstatus && panel->split); + +--- mc-4.6.2/src/widget.c ++++ mc-4.6.2/src/widget.c +@@ -1944,52 +1944,86 @@ + return in; + } + +- +-/* Listbox widget */ ++/* Vertical scrollbar widget */ + +-/* Should draw the scrollbar, but currently draws only +- * indications that there is more information +- */ +-static int listbox_cdiff (WLEntry *s, WLEntry *e); +- +-static void +-listbox_drawscroll (WListbox *l) ++void ++vscrollbar (Widget widget, int height, int width, int tpad, int bpad, ++ int selected, int count, gboolean color) + { + int line; +- int i, top; +- int max_line = l->height-1; +- ++ int i; ++ + /* Are we at the top? */ +- widget_move (&l->widget, 0, l->width); +- if (l->list == l->top) +- one_vline (); ++ widget_move (&widget, tpad, width); ++#ifndef UTF8 ++ if (!selected) ++ one_vline (); + else +- addch ('^'); ++ addch ('^'); ++#else ++ if (color) attrset (MARKED_COLOR); ++ if (is_utf8) ++ SLsmg_write_string("▴"); ++ else ++ addch ('^'); ++ if (color) attrset (NORMAL_COLOR); ++#endif + + /* Are we at the bottom? */ +- widget_move (&l->widget, max_line, l->width); +- top = listbox_cdiff (l->list, l->top); +- if ((top + l->height == l->count) || l->height >= l->count) +- one_vline (); ++ widget_move (&widget, height-1-bpad, width); ++#ifndef UTF8 ++ if (selected == count-1) ++ one_vline (); ++ else ++ addch ('v'); ++#else ++ if (color) attrset (MARKED_COLOR); ++ if (is_utf8) ++ SLsmg_write_string("▾"); + else +- addch ('v'); ++ addch('v'); ++ if (color) attrset (NORMAL_COLOR); ++#endif + + /* Now draw the nice relative pointer */ +- if (l->count) +- line = 1+ ((l->pos * (l->height-2)) / l->count); ++ if (count > 1) ++ line = tpad + 1 + ((selected * (height-3-tpad-bpad)) / (count-1)); + else +- line = 0; +- +- for (i = 1; i < max_line; i++){ +- widget_move (&l->widget, i, l->width); +- if (i != line) +- one_vline (); +- else +- addch ('*'); ++ line = 0; ++ ++ for (i = tpad + 1; i < height-1-bpad; i++){ ++ widget_move (&widget, i, width); ++ if (i != line) ++#ifndef UTF8 ++ one_vline (); ++ else ++ addch ('*'); ++#else ++ if (is_utf8) ++ SLsmg_write_string("▒"); ++ else ++ one_vline(); ++ else { ++ if (color) attrset (MARKED_COLOR); ++ if (is_utf8) ++ SLsmg_write_string("◈"); ++ else ++ addch('*'); ++ if (color) attrset (NORMAL_COLOR); ++ } ++#endif + } + } +- +-static void ++ ++ ++/* Listbox widget */ ++ ++/* Should draw the scrollbar, but currently draws only ++ * indications that there is more information ++ */ ++static int listbox_cdiff (WLEntry *s, WLEntry *e); ++ ++void + listbox_draw (WListbox *l, int focused) + { + WLEntry *e; +@@ -2032,7 +2066,7 @@ + if (!l->scrollbar) + return; + attrset (normalc); +- listbox_drawscroll (l); ++ vscrollbar (l->widget, l->height, l->width, 0, 0, l->pos, l->count, FALSE); + } + + /* Returns the number of items between s and e, +--- mc-4.6.2/src/widget.h ++++ mc-4.6.2/src/widget.h +@@ -187,6 +187,10 @@ + /* Listbox manager */ + WLEntry *listbox_get_data (WListbox *l, int pos); + ++/* Vertical scrollbar */ ++void vscrollbar (Widget widget, int height, int width, int tpad, int bpad, ++ int selected, int count, gboolean color); ++ + /* search text int listbox entries */ + WLEntry *listbox_search_text (WListbox *l, const char *text); + void listbox_select_entry (WListbox *l, WLEntry *dest); |
