Ticket #2282 (reopened enhancement)

Opened 6 years ago

Last modified 4 years ago

force utf option

Reported by: zyxmon Owned by:
Priority: trivial Milestone: Future Releases
Component: mc-tty Version: master
Keywords: Cc:
Blocked By: Blocking:
Branch state: no branch Votes for changeset:

Description

I have arm based nas (synology ds110j), that does not support locales but stores files in uft-8.
The sample program

#include <langinfo.h>
#include <locale.h>
#include <stdio.h>

int
main (int argc, char *argv[])
{
    setlocale (LC_ALL, "");
    printf ("%s\n", nl_langinfo (CODESET));
    return 0;
}

always returns ANSI_X3.4-1968

To make mc correctly work with utf-8 on this system I've made changes in 2 files:
1) In lib/strutil/strutil.c
I've changed

return (nl_langinfo (CODESET));

to

return "UTF8";

2) In lib\tty\tty-slang.c
I've changed

SLutf8_enable (-1); 

to

SLutf8_enable (1); 

These changes force utf-8 support in mc on my system.
I think these changes can be made an option in future releases in mc for such systems.

PS Many thanks to il.smind, who helped my to find this solution.

Attachments

100-strutil.patch (279 bytes) - added by zyxmon 5 years ago.
200-tty.patch (405 bytes) - added by zyxmon 5 years ago.

Change History

comment:1 Changed 6 years ago by andrew_b

  • Status changed from new to closed
  • Resolution set to wontfix
  • Version 4.7.3 deleted
  • Component changed from mc-core to mc-tty
  • Milestone 4.7 deleted

It's terrible. This durty hack cannot be applied in MC.

comment:2 Changed 6 years ago by angel_il

  • Status changed from closed to reopened
  • Resolution wontfix deleted

need fix FAQ and maybe add patch into 'contrib'

comment:3 Changed 6 years ago by angel_il

  • Priority changed from major to minor
  • Version set to master
  • Milestone set to 4.7.4

comment:4 Changed 6 years ago by angel_il

  • Milestone changed from 4.7.4 to 4.7.5

comment:5 Changed 5 years ago by zyxmon

Just a small remark on my patches. The correct fix for lib/strutil/strutil.c is

return "UTF-8";

These patches also helped to show nonascii chars on mc compiled for mipsel based router.

comment:6 Changed 5 years ago by andrew_b

Again, if your OS supports UTF-8, but nl_langinfo (CODESET) doesn't return an "UTF-8" string, then OS itself should be fixed not MC.

Last edited 5 years ago by andrew_b (previous) (diff)

comment:7 follow-up: ↓ 8 Changed 5 years ago by zyxmon

The nl_langinfo on the mipsel router retured "ascii", so this patch was needed.

comment:8 in reply to: ↑ 7 Changed 5 years ago by andrew_b

Replying to zyxmon:

The nl_langinfo on the mipsel router retured "ascii"

Yes. I'm talking about that. In any case, this bug in not in MC but in target OS. Do you agree with me?

so this patch was needed.

If your OS has some package management system, you can build the MC package with this OS-specific patch, can't you?

comment:9 Changed 5 years ago by zyxmon

I totally agree with you, this is not a bug in MC. My last remark was just a small correction for the first post. The correct encoding name is "UTF-8". "UTF8" may be just an alias to "UTF-8".
These are OS specific patches.

Changed 5 years ago by zyxmon

Changed 5 years ago by zyxmon

comment:10 Changed 5 years ago by zyxmon

I have added two patches for mc-4.7.5.1 just in case one has such an OS and needs them.
They will work for optware and openwrt package systems. Openwrt Makefile for mc needs a lot of changes for building mc-4.7.5.1 with slang2 for these patches to work.

Last edited 5 years ago by zyxmon (previous) (diff)

comment:11 Changed 4 years ago by andrew_b

  • Priority changed from minor to trivial
  • Branch state set to no branch
  • Milestone changed from 4.7.5 to Future Releases
Note: See TracTickets for help on using tickets.