mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-09 17:19:03 -04:00
notcurses_init(): call setlocale unless INHIBIT_SETLOCALE #579
This commit is contained in:
parent
d89d8c52e9
commit
fcc73856cb
@ -92,6 +92,10 @@ typedef struct notcurses_options {
|
|||||||
// strictly best-effort. Absolute coordinates are relative to the rendering
|
// strictly best-effort. Absolute coordinates are relative to the rendering
|
||||||
// area ((0, 0) is always the origin of the rendering area).
|
// area ((0, 0) is always the origin of the rendering area).
|
||||||
int margin_t, margin_r, margin_b, margin_l;
|
int margin_t, margin_r, margin_b, margin_l;
|
||||||
|
// General flags; see NCOPTION_*. This is expressed as a bitfield so that
|
||||||
|
// future options can be added without reshaping the struct. Undefined bits
|
||||||
|
// must be set to 0.
|
||||||
|
unsigned flags;
|
||||||
} notcurses_options;
|
} notcurses_options;
|
||||||
struct notcurses* notcurses_init(const notcurses_options*, FILE*);
|
struct notcurses* notcurses_init(const notcurses_options*, FILE*);
|
||||||
int notcurses_lex_margins(const char* op, notcurses_options* opts);
|
int notcurses_lex_margins(const char* op, notcurses_options* opts);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <locale.h>
|
||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
#include <sys/poll.h>
|
#include <sys/poll.h>
|
||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
@ -824,6 +825,16 @@ notcurses* notcurses_init(const notcurses_options* opts, FILE* outfp){
|
|||||||
fprintf(stderr, "Provided an illegal negative margin, refusing to start\n");
|
fprintf(stderr, "Provided an illegal negative margin, refusing to start\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if(!(opts->flags & NCOPTION_INHIBIT_SETLOCALE)){
|
||||||
|
const char* locale = setlocale(LC_ALL, NULL);
|
||||||
|
if(locale && (!strcmp(locale, "C") || !strcmp(locale, "POSIX"))){
|
||||||
|
if(!(locale = setlocale(LC_ALL, ""))){
|
||||||
|
fprintf(stderr, "Couldn't set locale based off LANG\n");
|
||||||
|
}else{
|
||||||
|
fprintf(stderr, "Set locale based off LANG.\n You should call setlocale(2)\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
const char* encoding = nl_langinfo(CODESET);
|
const char* encoding = nl_langinfo(CODESET);
|
||||||
if(encoding == NULL || (strcmp(encoding, "ANSI_X3.4-1968") && strcmp(encoding, "UTF-8"))){
|
if(encoding == NULL || (strcmp(encoding, "ANSI_X3.4-1968") && strcmp(encoding, "UTF-8"))){
|
||||||
fprintf(stderr, "Encoding (\"%s\") was neither ANSI_X3.4-1968 nor UTF-8, refusing to start\n Did you call setlocale()?\n",
|
fprintf(stderr, "Encoding (\"%s\") was neither ANSI_X3.4-1968 nor UTF-8, refusing to start\n Did you call setlocale()?\n",
|
||||||
|
@ -16,6 +16,7 @@ notcurses_options NotCurses::default_notcurses_options = {
|
|||||||
/* margin_r */ 0,
|
/* margin_r */ 0,
|
||||||
/* margin_b */ 0,
|
/* margin_b */ 0,
|
||||||
/* margin_l */ 0,
|
/* margin_l */ 0,
|
||||||
|
/* flags */ 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
NotCurses *NotCurses::_instance = nullptr;
|
NotCurses *NotCurses::_instance = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user