mirror of
https://github.com/rkd77/elinks.git
synced 2024-11-02 08:57:19 -04:00
[.config] Read/write configuration from ~/.config/elinks . Refs #199
Note, configs and other files from ~/.elinks/ are not moved to ~/.config/elinks/ automatically. You must do it yourself. ELINKS_CONFDIR and HOME_ETC also are no longer supported.
This commit is contained in:
parent
86a54ca33d
commit
7ea7cacade
@ -56,10 +56,11 @@ EDITOR::
|
|||||||
|
|
||||||
The program to use for external editor (when editing textareas).
|
The program to use for external editor (when editing textareas).
|
||||||
|
|
||||||
ELINKS_CONFDIR::
|
XDG_CONFIG_HOME::
|
||||||
|
|
||||||
The location of the directory containing configuration files. If not
|
The location of the directory containing configuration files. If set
|
||||||
set the default is `~/.elinks/`.
|
configuration files are located in `$XDG_CONFIG_HOME/elinks/`.
|
||||||
|
Otherwise in `~/.config/elinks/`.
|
||||||
|
|
||||||
ELINKS_TWTERM, LINKS_TWTERM::
|
ELINKS_TWTERM, LINKS_TWTERM::
|
||||||
|
|
||||||
@ -83,10 +84,6 @@ HOME::
|
|||||||
|
|
||||||
The path to the users home directory. Used when expanding `~/`.
|
The path to the users home directory. Used when expanding `~/`.
|
||||||
|
|
||||||
HOME_ETC::
|
|
||||||
|
|
||||||
If set the location of the directory containing configuration files
|
|
||||||
is `$HOME_ETC/.elinks/` instead of `~/.elinks/`.
|
|
||||||
|
|
||||||
WWW_HOME::
|
WWW_HOME::
|
||||||
|
|
||||||
@ -96,41 +93,41 @@ FILES
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
Configuration files controlled by ELinks are located in the user
|
Configuration files controlled by ELinks are located in the user
|
||||||
configuration directory, defaulting to '~/.elinks/'. In addition to the
|
configuration directory, defaulting to '~/.config/elinks/'. In addition to the
|
||||||
files listed below, a user defined CSS stylesheet can be defined using
|
files listed below, a user defined CSS stylesheet can be defined using
|
||||||
the 'document.css.stylesheet' option.
|
the 'document.css.stylesheet' option.
|
||||||
|
|
||||||
@sysconfdir@/elinks.conf::
|
@sysconfdir@/elinks.conf::
|
||||||
Site-wide configuration file.
|
Site-wide configuration file.
|
||||||
|
|
||||||
~/.elinks/elinks.conf::
|
~/.config/elinks/elinks.conf::
|
||||||
Per-user config file, loaded after site-wide configuration.
|
Per-user config file, loaded after site-wide configuration.
|
||||||
|
|
||||||
~/.elinks/bookmarks::
|
~/.config/elinks/bookmarks::
|
||||||
Bookmarks file.
|
Bookmarks file.
|
||||||
|
|
||||||
~/.elinks/cookies::
|
~/.config/elinks/cookies::
|
||||||
Cookies file.
|
Cookies file.
|
||||||
|
|
||||||
~/.elinks/exmodehist::
|
~/.config/elinks/exmodehist::
|
||||||
Exmode history file.
|
Exmode history file.
|
||||||
|
|
||||||
~/.elinks/formhist::
|
~/.config/elinks/formhist::
|
||||||
Form history file.
|
Form history file.
|
||||||
|
|
||||||
~/.elinks/globhist::
|
~/.config/elinks/globhist::
|
||||||
History file containing most recently visited URLs.
|
History file containing most recently visited URLs.
|
||||||
|
|
||||||
~/.elinks/gotohist::
|
~/.config/elinks/gotohist::
|
||||||
GoTo URL dialog history file.
|
GoTo URL dialog history file.
|
||||||
|
|
||||||
~/.elinks/hooks.{js,lua,pl,py,rb,scm}::
|
~/.config/elinks/hooks.{js,lua,pl,py,rb,scm}::
|
||||||
Browser scripting hooks.
|
Browser scripting hooks.
|
||||||
|
|
||||||
~/.elinks/searchhist::
|
~/.config/elinks/searchhist::
|
||||||
Search history file.
|
Search history file.
|
||||||
|
|
||||||
~/.elinks/socket::
|
~/.config/elinks/socket::
|
||||||
Internal 'ELinks' socket for communication between its instances.
|
Internal 'ELinks' socket for communication between its instances.
|
||||||
|
|
||||||
~/.mailcap, /etc/mailcap::
|
~/.mailcap, /etc/mailcap::
|
||||||
|
@ -14,7 +14,7 @@ keybindings.
|
|||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
Key binding for elinks should be placed in the file `~/.elinks/elinks.conf`.
|
Key binding for elinks should be placed in the file `~/.config/elinks/elinks.conf`.
|
||||||
Note that any information regarding their format/structure may not be
|
Note that any information regarding their format/structure may not be
|
||||||
up-to-date. If you will discover that, please feed us with a patch.
|
up-to-date. If you will discover that, please feed us with a patch.
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ include::{builddir}keymap-actions.txt[]
|
|||||||
DEFAULT BINDINGS
|
DEFAULT BINDINGS
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
The default bindings are shown below. Any bindings in `~/.elinks/elinks.conf`
|
The default bindings are shown below. Any bindings in `~/.config/elinks/elinks.conf`
|
||||||
will override these.
|
will override these.
|
||||||
|
|
||||||
include::{builddir}keymap-defaults.txt[]
|
include::{builddir}keymap-defaults.txt[]
|
||||||
|
@ -206,7 +206,7 @@ Arguments:
|
|||||||
|
|
||||||
Description:
|
Description:
|
||||||
|
|
||||||
Makes it possible to periodically save files in ~/.elinks to disk.
|
Makes it possible to periodically save files in ~/.config/elinks to disk.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Name: pre-format-html
|
Name: pre-format-html
|
||||||
|
@ -128,7 +128,7 @@ Config file
|
|||||||
|
|
||||||
On startup, ELinks reads in two Lua scripts. Firstly, a system-wide
|
On startup, ELinks reads in two Lua scripts. Firstly, a system-wide
|
||||||
configuration file called `/etc/elinks/hooks.lua`, then a file in your home
|
configuration file called `/etc/elinks/hooks.lua`, then a file in your home
|
||||||
directory called `~/.elinks/hooks.lua`. From these files, you can include
|
directory called `~/.config/elinks/hooks.lua`. From these files, you can include
|
||||||
other Lua files with `dofile`, if necessary.
|
other Lua files with `dofile`, if necessary.
|
||||||
|
|
||||||
To see what kind of things you should put in here, look at
|
To see what kind of things you should put in here, look at
|
||||||
@ -243,7 +243,7 @@ WARNING: The `tmpname` function creates the file but does not
|
|||||||
bind_key (keymap, keystroke, function)::
|
bind_key (keymap, keystroke, function)::
|
||||||
Currently, `keymap` must be the string `"main"`. Keystroke is a
|
Currently, `keymap` must be the string `"main"`. Keystroke is a
|
||||||
keystroke as you would write it in the ELinks config file
|
keystroke as you would write it in the ELinks config file
|
||||||
`~/.elinks/elinks.conf`. The function `function` should take no
|
`~/.config/elinks/elinks.conf`. The function `function` should take no
|
||||||
arguments, and should return the same values as `lua_console_hook`.
|
arguments, and should return the same values as `lua_console_hook`.
|
||||||
|
|
||||||
edit_bookmark_dialog (cat, name, url, function)::
|
edit_bookmark_dialog (cat, name, url, function)::
|
||||||
|
@ -15,7 +15,7 @@ DESCRIPTION
|
|||||||
If ELinks is compiled with an embedded Python interpreter, it will try
|
If ELinks is compiled with an embedded Python interpreter, it will try
|
||||||
to import a Python module called hooks when the browser starts up. To
|
to import a Python module called hooks when the browser starts up. To
|
||||||
use Python code from within ELinks, create a file called hooks.py in
|
use Python code from within ELinks, create a file called hooks.py in
|
||||||
the ~/.elinks directory, or in the system-wide configuration directory
|
the ~/.config/elinks directory, or in the system-wide configuration directory
|
||||||
(defined when ELinks was compiled), or in the standard Python search path.
|
(defined when ELinks was compiled), or in the standard Python search path.
|
||||||
An example hooks.py file can be found in the contrib/python directory of
|
An example hooks.py file can be found in the contrib/python directory of
|
||||||
the ELinks source distribution.
|
the ELinks source distribution.
|
||||||
@ -112,7 +112,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
Other public objects:
|
Other public objects:
|
||||||
|
|
||||||
home -- A string containing the pathname of the ~/.elinks directory, or
|
home -- A string containing the pathname of the ~/.config/elinks directory, or
|
||||||
None if ELinks has no configuration directory.
|
None if ELinks has no configuration directory.
|
||||||
|
|
||||||
FUNCTIONS
|
FUNCTIONS
|
||||||
|
@ -31,7 +31,7 @@ Limitations and outstanding issues
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Remote control is implemented using the intercommunication socket created in
|
Remote control is implemented using the intercommunication socket created in
|
||||||
~/.elinks/, so the command has to be run on the same machine as the instance
|
~/.config/elinks/, so the command has to be run on the same machine as the instance
|
||||||
you want to control; or put differently: the two ELinkses need to share a file
|
you want to control; or put differently: the two ELinkses need to share a file
|
||||||
system that supports socket files, which rules out usage of -remote over NFS.
|
system that supports socket files, which rules out usage of -remote over NFS.
|
||||||
This also implies that the ELinks instance you want to control should be
|
This also implies that the ELinks instance you want to control should be
|
||||||
|
@ -20,7 +20,7 @@ you don't have a `hooks.js` file, there is not much risk in enabling the
|
|||||||
feature at compile time.
|
feature at compile time.
|
||||||
|
|
||||||
When ELinks starts up, it evaluates the ECMAScript file `hooks.js` in
|
When ELinks starts up, it evaluates the ECMAScript file `hooks.js` in
|
||||||
your ELinks configuration directory (thus normally `~/.elinks/hooks.js`
|
your ELinks configuration directory (thus normally `~/.config/elinks/hooks.js`
|
||||||
on Unix-like systems), or if the file does not exist there, then in
|
on Unix-like systems), or if the file does not exist there, then in
|
||||||
the system-wide ELinks configuration directory (the location depends
|
the system-wide ELinks configuration directory (the location depends
|
||||||
on how ELinks was built, but `/etc/elinks/hooks.js` is typical).
|
on how ELinks was built, but `/etc/elinks/hooks.js` is typical).
|
||||||
@ -47,7 +47,7 @@ Global Object Methods
|
|||||||
+
|
+
|
||||||
--
|
--
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
do_file("/home/me/.elinks/hooks.js");
|
do_file("/home/me/.config/elinks/hooks.js");
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
will reload your hooks file.
|
will reload your hooks file.
|
||||||
|
@ -286,19 +286,20 @@ add_to_input_history(struct input_history *history, char *data,
|
|||||||
int
|
int
|
||||||
load_input_history(struct input_history *history, const char *filename)
|
load_input_history(struct input_history *history, const char *filename)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
char *history_file = (char *)filename;
|
char *history_file = (char *)filename;
|
||||||
char line[MAX_STR_LEN];
|
char line[MAX_STR_LEN];
|
||||||
FILE *file;
|
FILE *file;
|
||||||
|
|
||||||
if (get_cmd_opt_bool("anonymous")) return 0;
|
if (get_cmd_opt_bool("anonymous")) return 0;
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
history_file = straconcat(elinks_home, filename,
|
history_file = straconcat(xdg_config_home, filename,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!history_file) return 0;
|
if (!history_file) return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
file = fopen(history_file, "rb");
|
file = fopen(history_file, "rb");
|
||||||
if (elinks_home) mem_free(history_file);
|
if (xdg_config_home) mem_free(history_file);
|
||||||
if (!file) return 0;
|
if (!file) return 0;
|
||||||
|
|
||||||
history->nosave = 1;
|
history->nosave = 1;
|
||||||
@ -329,17 +330,18 @@ load_input_history(struct input_history *history, const char *filename)
|
|||||||
int
|
int
|
||||||
save_input_history(struct input_history *history, const char *filename)
|
save_input_history(struct input_history *history, const char *filename)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
struct input_history_entry *entry;
|
struct input_history_entry *entry;
|
||||||
struct secure_save_info *ssi;
|
struct secure_save_info *ssi;
|
||||||
char *history_file;
|
char *history_file;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!history->dirty
|
if (!history->dirty
|
||||||
|| !elinks_home
|
|| !xdg_config_home
|
||||||
|| get_cmd_opt_bool("anonymous"))
|
|| get_cmd_opt_bool("anonymous"))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
history_file = straconcat(elinks_home, filename,
|
history_file = straconcat(xdg_config_home, filename,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!history_file) return -1;
|
if (!history_file) return -1;
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ static int loaded_backend_num = -1;
|
|||||||
void
|
void
|
||||||
bookmarks_read(void)
|
bookmarks_read(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
int backend_num = get_opt_int("bookmarks.file_format", NULL);
|
int backend_num = get_opt_int("bookmarks.file_format", NULL);
|
||||||
struct bookmarks_backend *backend = bookmarks_backends[backend_num];
|
struct bookmarks_backend *backend = bookmarks_backends[backend_num];
|
||||||
char *file_name;
|
char *file_name;
|
||||||
@ -57,8 +58,8 @@ bookmarks_read(void)
|
|||||||
|
|
||||||
file_name_orig = backend->filename(0);
|
file_name_orig = backend->filename(0);
|
||||||
if (!file_name_orig) return;
|
if (!file_name_orig) return;
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
file_name = straconcat(elinks_home, file_name_orig,
|
file_name = straconcat(xdg_config_home, file_name_orig,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!file_name) return;
|
if (!file_name) return;
|
||||||
f = fopen(file_name, "rb");
|
f = fopen(file_name, "rb");
|
||||||
@ -84,11 +85,12 @@ bookmarks_write(LIST_OF(struct bookmark) *bookmarks_list)
|
|||||||
struct secure_save_info *ssi;
|
struct secure_save_info *ssi;
|
||||||
char *file_name;
|
char *file_name;
|
||||||
const char *file_name_orig;
|
const char *file_name_orig;
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
if (!bookmarks_are_dirty() && backend_num == loaded_backend_num) return;
|
if (!bookmarks_are_dirty() && backend_num == loaded_backend_num) return;
|
||||||
if (!backend
|
if (!backend
|
||||||
|| !backend->write
|
|| !backend->write
|
||||||
|| !elinks_home
|
|| !xdg_config_home
|
||||||
|| !backend->filename) return;
|
|| !backend->filename) return;
|
||||||
|
|
||||||
/* We do this two-passes because we want backend to possibly decide to
|
/* We do this two-passes because we want backend to possibly decide to
|
||||||
@ -96,7 +98,7 @@ bookmarks_write(LIST_OF(struct bookmark) *bookmarks_list)
|
|||||||
* they would be just truncated to zero by secure_open()). */
|
* they would be just truncated to zero by secure_open()). */
|
||||||
file_name_orig = backend->filename(1);
|
file_name_orig = backend->filename(1);
|
||||||
if (!file_name_orig) return;
|
if (!file_name_orig) return;
|
||||||
file_name = straconcat(elinks_home, file_name_orig, (char *) NULL);
|
file_name = straconcat(xdg_config_home, file_name_orig, (char *) NULL);
|
||||||
if (!file_name) return;
|
if (!file_name) return;
|
||||||
|
|
||||||
ssi = secure_open(file_name);
|
ssi = secure_open(file_name);
|
||||||
|
@ -578,6 +578,7 @@ static enum parse_error
|
|||||||
parse_include(struct option *opt_tree, struct conf_parsing_state *state,
|
parse_include(struct option *opt_tree, struct conf_parsing_state *state,
|
||||||
struct string *mirror, int is_system_conf)
|
struct string *mirror, int is_system_conf)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
char *fname;
|
char *fname;
|
||||||
struct string dumbstring;
|
struct string dumbstring;
|
||||||
struct conf_parsing_pos before_error;
|
struct conf_parsing_pos before_error;
|
||||||
@ -609,7 +610,7 @@ parse_include(struct option *opt_tree, struct conf_parsing_state *state,
|
|||||||
/* XXX: We should try CONFDIR/<file> when proceeding
|
/* XXX: We should try CONFDIR/<file> when proceeding
|
||||||
* CONFDIR/<otherfile> ;). --pasky */
|
* CONFDIR/<otherfile> ;). --pasky */
|
||||||
if (load_config_file(fname[0] == '/' ? (char *) ""
|
if (load_config_file(fname[0] == '/' ? (char *) ""
|
||||||
: elinks_home,
|
: xdg_config_home,
|
||||||
fname, opt_tree,
|
fname, opt_tree,
|
||||||
mirror ? &dumbstring : NULL, 1)) {
|
mirror ? &dumbstring : NULL, 1)) {
|
||||||
done_string(&dumbstring);
|
done_string(&dumbstring);
|
||||||
@ -837,7 +838,7 @@ static void
|
|||||||
load_config_from(char *file, struct option *tree)
|
load_config_from(char *file, struct option *tree)
|
||||||
{
|
{
|
||||||
load_config_file(CONFDIR, file, tree, NULL, 1);
|
load_config_file(CONFDIR, file, tree, NULL, 1);
|
||||||
load_config_file(empty_string_or_(elinks_home), file, tree, NULL, 0);
|
load_config_file(empty_string_or_(get_xdg_config_home()), file, tree, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1306,7 +1307,9 @@ free_cfg_str:
|
|||||||
int
|
int
|
||||||
write_config(struct terminal *term)
|
write_config(struct terminal *term)
|
||||||
{
|
{
|
||||||
if (!elinks_home) {
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
|
if (!xdg_config_home) {
|
||||||
if (term) {
|
if (term) {
|
||||||
write_config_dialog(term, get_cmd_opt_str("config-file"),
|
write_config_dialog(term, get_cmd_opt_str("config-file"),
|
||||||
SS_ERR_DISABLED, 0);
|
SS_ERR_DISABLED, 0);
|
||||||
@ -1314,7 +1317,7 @@ write_config(struct terminal *term)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return write_config_file(elinks_home, get_cmd_opt_str("config-file"),
|
return write_config_file(xdg_config_home, get_cmd_opt_str("config-file"),
|
||||||
term);
|
term);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@
|
|||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
|
|
||||||
|
|
||||||
char *elinks_home = NULL;
|
|
||||||
int first_use = 0;
|
int first_use = 0;
|
||||||
|
static char *xdg_config_home = NULL;
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
strip_trailing_dir_sep(char *path)
|
strip_trailing_dir_sep(char *path)
|
||||||
@ -106,6 +106,58 @@ elinks_dirname(char *path)
|
|||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
get_xdg_config_home(void)
|
||||||
|
{
|
||||||
|
if (xdg_config_home) {
|
||||||
|
return xdg_config_home;
|
||||||
|
}
|
||||||
|
char *g_xdg_config_home = getenv("XDG_CONFIG_HOME");
|
||||||
|
|
||||||
|
if (g_xdg_config_home && *g_xdg_config_home) {
|
||||||
|
xdg_config_home = test_confdir(g_xdg_config_home,
|
||||||
|
get_cmd_opt_str("config-dir"),
|
||||||
|
N_("Commandline options -config-dir set to %s, "
|
||||||
|
"but could not create directory %s."));
|
||||||
|
if (xdg_config_home) {
|
||||||
|
return xdg_config_home;
|
||||||
|
}
|
||||||
|
xdg_config_home = test_confdir(g_xdg_config_home, "elinks", NULL);
|
||||||
|
|
||||||
|
if (xdg_config_home) {
|
||||||
|
return xdg_config_home;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
char *home = getenv("HOME");
|
||||||
|
|
||||||
|
if (!home || !*home) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
char *config_dir = straconcat(home, STRING_DIR_SEP, ".config", NULL);
|
||||||
|
|
||||||
|
if (!config_dir) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
xdg_config_home = test_confdir(config_dir,
|
||||||
|
get_cmd_opt_str("config-dir"),
|
||||||
|
N_("Commandline options -config-dir set to %s, "
|
||||||
|
"but could not create directory %s."));
|
||||||
|
if (xdg_config_home) {
|
||||||
|
mem_free(config_dir);
|
||||||
|
return xdg_config_home;
|
||||||
|
}
|
||||||
|
xdg_config_home = test_confdir(config_dir, "elinks", NULL);
|
||||||
|
|
||||||
|
if (xdg_config_home) {
|
||||||
|
mem_free(config_dir);
|
||||||
|
return xdg_config_home;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
get_home(void)
|
get_home(void)
|
||||||
{
|
{
|
||||||
@ -151,8 +203,8 @@ void
|
|||||||
init_home(void)
|
init_home(void)
|
||||||
{
|
{
|
||||||
first_use = 1;
|
first_use = 1;
|
||||||
elinks_home = get_home();
|
xdg_config_home = get_xdg_config_home();
|
||||||
if (!elinks_home) {
|
if (!xdg_config_home) {
|
||||||
ERROR(gettext("Unable to find or create ELinks config "
|
ERROR(gettext("Unable to find or create ELinks config "
|
||||||
"directory. Please check if you have $HOME "
|
"directory. Please check if you have $HOME "
|
||||||
"variable set correctly and if you have "
|
"variable set correctly and if you have "
|
||||||
@ -165,5 +217,5 @@ init_home(void)
|
|||||||
void
|
void
|
||||||
done_home(void)
|
done_home(void)
|
||||||
{
|
{
|
||||||
mem_free_if(elinks_home);
|
mem_free_set(&xdg_config_home, NULL);
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *elinks_home;
|
|
||||||
extern int first_use;
|
extern int first_use;
|
||||||
|
|
||||||
void init_home(void);
|
void init_home(void);
|
||||||
void done_home(void);
|
void done_home(void);
|
||||||
|
char *get_xdg_config_home(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -886,7 +886,8 @@ change_hook_ui_double_esc(struct session *ses, struct option *current, struct op
|
|||||||
static int
|
static int
|
||||||
change_hook_ui_mouse_disable(struct session *ses, struct option *current, struct option *changed)
|
change_hook_ui_mouse_disable(struct session *ses, struct option *current, struct option *changed)
|
||||||
{
|
{
|
||||||
char *lock_filename = straconcat(empty_string_or_(elinks_home), "mouse.lock", (char *)NULL);
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
char *lock_filename = straconcat(empty_string_or_(xdg_config_home), "mouse.lock", (char *)NULL);
|
||||||
|
|
||||||
if (lock_filename) {
|
if (lock_filename) {
|
||||||
if (changed->value.number) {
|
if (changed->value.number) {
|
||||||
|
@ -691,6 +691,7 @@ static void done_cookies(struct module *module);
|
|||||||
|
|
||||||
void
|
void
|
||||||
load_cookies(void) {
|
load_cookies(void) {
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
/* Buffer size is set to be enough to read long lines that
|
/* Buffer size is set to be enough to read long lines that
|
||||||
* save_cookies may write. 6 is choosen after the fprintf(..) call
|
* save_cookies may write. 6 is choosen after the fprintf(..) call
|
||||||
* in save_cookies(). --Zas */
|
* in save_cookies(). --Zas */
|
||||||
@ -700,8 +701,8 @@ load_cookies(void) {
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
cookfile = straconcat(elinks_home, cookfile_orig,
|
cookfile = straconcat(xdg_config_home, cookfile_orig,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!cookfile) return;
|
if (!cookfile) return;
|
||||||
}
|
}
|
||||||
@ -712,7 +713,7 @@ load_cookies(void) {
|
|||||||
done_cookies(&cookies_module);
|
done_cookies(&cookies_module);
|
||||||
cookies_nosave = 0;
|
cookies_nosave = 0;
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
fp = fopen(cookfile, "rb");
|
fp = fopen(cookfile, "rb");
|
||||||
mem_free(cookfile);
|
mem_free(cookfile);
|
||||||
} else {
|
} else {
|
||||||
@ -821,6 +822,7 @@ save_cookies(struct terminal *term) {
|
|||||||
char *cookfile;
|
char *cookfile;
|
||||||
struct secure_save_info *ssi;
|
struct secure_save_info *ssi;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
#ifdef CONFIG_SMALL
|
#ifdef CONFIG_SMALL
|
||||||
# define CANNOT_SAVE_COOKIES(flags, message)
|
# define CANNOT_SAVE_COOKIES(flags, message)
|
||||||
@ -838,7 +840,7 @@ save_cookies(struct terminal *term) {
|
|||||||
if_assert_failed {}
|
if_assert_failed {}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!elinks_home) {
|
if (!xdg_config_home) {
|
||||||
CANNOT_SAVE_COOKIES(0, N_("ELinks was started without a home directory."));
|
CANNOT_SAVE_COOKIES(0, N_("ELinks was started without a home directory."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -849,7 +851,7 @@ save_cookies(struct terminal *term) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cookfile = straconcat(elinks_home, COOKIES_FILENAME,
|
cookfile = straconcat(xdg_config_home, COOKIES_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!cookfile) {
|
if (!cookfile) {
|
||||||
CANNOT_SAVE_COOKIES(0, N_("Out of memory"));
|
CANNOT_SAVE_COOKIES(0, N_("Out of memory"));
|
||||||
|
@ -155,6 +155,7 @@ static void
|
|||||||
import_css_file(struct css_stylesheet *css, struct uri *base_uri,
|
import_css_file(struct css_stylesheet *css, struct uri *base_uri,
|
||||||
const char *url, int urllen)
|
const char *url, int urllen)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
struct string string, filename;
|
struct string string, filename;
|
||||||
|
|
||||||
if (!*url
|
if (!*url
|
||||||
@ -162,8 +163,8 @@ import_css_file(struct css_stylesheet *css, struct uri *base_uri,
|
|||||||
|| !init_string(&filename))
|
|| !init_string(&filename))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (*url != '/' && elinks_home) {
|
if (*url != '/' && xdg_config_home) {
|
||||||
add_to_string(&filename, elinks_home);
|
add_to_string(&filename, xdg_config_home);
|
||||||
}
|
}
|
||||||
|
|
||||||
add_bytes_to_string(&filename, url, urllen);
|
add_bytes_to_string(&filename, url, urllen);
|
||||||
|
@ -163,15 +163,16 @@ is_prefix(char *prefix, char *url, int dl)
|
|||||||
static void
|
static void
|
||||||
read_url_list(void)
|
read_url_list(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
char line[4096];
|
char line[4096];
|
||||||
char *filename;
|
char *filename;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
if (!elinks_home) {
|
if (!xdg_config_home) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = straconcat(elinks_home, STRING_DIR_SEP, ALLOWED_ECMASCRIPT_URL_PREFIXES, NULL);
|
filename = straconcat(xdg_config_home, STRING_DIR_SEP, ALLOWED_ECMASCRIPT_URL_PREFIXES, NULL);
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
|
|
||||||
@ -186,7 +187,7 @@ read_url_list(void)
|
|||||||
mem_free(filename);
|
mem_free(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = straconcat(elinks_home, STRING_DIR_SEP, DISALLOWED_ECMASCRIPT_URL_PREFIXES, NULL);
|
filename = straconcat(xdg_config_home, STRING_DIR_SEP, DISALLOWED_ECMASCRIPT_URL_PREFIXES, NULL);
|
||||||
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
|
|
||||||
@ -829,17 +830,18 @@ ecmascript_set_timeout2m(js_State *J, const char *handle, int timeout)
|
|||||||
static void
|
static void
|
||||||
init_ecmascript_module(struct module *module)
|
init_ecmascript_module(struct module *module)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
read_url_list();
|
read_url_list();
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
/* ecmascript console log */
|
/* ecmascript console log */
|
||||||
console_log_filename = straconcat(elinks_home, "/console.log", NULL);
|
console_log_filename = straconcat(xdg_config_home, "/console.log", NULL);
|
||||||
console_error_filename = straconcat(elinks_home, "/console.err", NULL);
|
console_error_filename = straconcat(xdg_config_home, "/console.err", NULL);
|
||||||
/* ecmascript local storage db location */
|
/* ecmascript local storage db location */
|
||||||
#ifdef CONFIG_OS_DOS
|
#ifdef CONFIG_OS_DOS
|
||||||
local_storage_filename = stracpy("elinks_ls.db");
|
local_storage_filename = stracpy("elinks_ls.db");
|
||||||
#else
|
#else
|
||||||
local_storage_filename = straconcat(elinks_home, "/elinks_ls.db", NULL);
|
local_storage_filename = straconcat(xdg_config_home, "/elinks_ls.db", NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
ecmascript_enabled = get_opt_bool("ecmascript.enable", NULL);
|
ecmascript_enabled = get_opt_bool("ecmascript.enable", NULL);
|
||||||
|
@ -90,6 +90,7 @@ static int loaded = 0;
|
|||||||
int
|
int
|
||||||
load_formhist_from_file(void)
|
load_formhist_from_file(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
struct formhist_data *form;
|
struct formhist_data *form;
|
||||||
char tmp[MAX_STR_LEN];
|
char tmp[MAX_STR_LEN];
|
||||||
char *file;
|
char *file;
|
||||||
@ -97,9 +98,9 @@ load_formhist_from_file(void)
|
|||||||
|
|
||||||
if (loaded) return 1;
|
if (loaded) return 1;
|
||||||
|
|
||||||
if (!elinks_home) return 0;
|
if (!xdg_config_home) return 0;
|
||||||
|
|
||||||
file = straconcat(elinks_home, FORMS_HISTORY_FILENAME,
|
file = straconcat(xdg_config_home, FORMS_HISTORY_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!file) return 0;
|
if (!file) return 0;
|
||||||
|
|
||||||
@ -215,15 +216,16 @@ fail:
|
|||||||
int
|
int
|
||||||
save_formhist_to_file(void)
|
save_formhist_to_file(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
struct secure_save_info *ssi;
|
struct secure_save_info *ssi;
|
||||||
char *file;
|
char *file;
|
||||||
struct formhist_data *form;
|
struct formhist_data *form;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!elinks_home || get_cmd_opt_bool("anonymous"))
|
if (!xdg_config_home || get_cmd_opt_bool("anonymous"))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
file = straconcat(elinks_home, FORMS_HISTORY_FILENAME,
|
file = straconcat(xdg_config_home, FORMS_HISTORY_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!file) return 0;
|
if (!file) return 0;
|
||||||
|
|
||||||
|
@ -327,6 +327,7 @@ globhist_simple_search(char *search_url, char *search_title)
|
|||||||
static void
|
static void
|
||||||
read_global_history(void)
|
read_global_history(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
char in_buffer[MAX_STR_LEN * 3];
|
char in_buffer[MAX_STR_LEN * 3];
|
||||||
char *title;
|
char *title;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
@ -335,8 +336,8 @@ read_global_history(void)
|
|||||||
|| get_cmd_opt_bool("anonymous"))
|
|| get_cmd_opt_bool("anonymous"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
char *file_name = straconcat(elinks_home, GLOBAL_HISTORY_FILENAME,
|
char *file_name = straconcat(xdg_config_home, GLOBAL_HISTORY_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!file_name) return;
|
if (!file_name) return;
|
||||||
|
|
||||||
@ -375,16 +376,17 @@ read_global_history(void)
|
|||||||
static void
|
static void
|
||||||
write_global_history(void)
|
write_global_history(void)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
struct global_history_item *history_item;
|
struct global_history_item *history_item;
|
||||||
char *file_name;
|
char *file_name;
|
||||||
struct secure_save_info *ssi;
|
struct secure_save_info *ssi;
|
||||||
|
|
||||||
if (!global_history.dirty || !elinks_home
|
if (!global_history.dirty || !xdg_config_home
|
||||||
|| !get_globhist_enable()
|
|| !get_globhist_enable()
|
||||||
|| get_cmd_opt_bool("anonymous"))
|
|| get_cmd_opt_bool("anonymous"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
file_name = straconcat(elinks_home, GLOBAL_HISTORY_FILENAME,
|
file_name = straconcat(xdg_config_home, GLOBAL_HISTORY_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!file_name) return;
|
if (!file_name) return;
|
||||||
|
|
||||||
|
@ -114,14 +114,16 @@ enum addr_type {
|
|||||||
static int
|
static int
|
||||||
get_sun_path(struct string *sun_path)
|
get_sun_path(struct string *sun_path)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
assert(sun_path);
|
assert(sun_path);
|
||||||
if_assert_failed return 0;
|
if_assert_failed return 0;
|
||||||
|
|
||||||
if (!elinks_home) return 0;
|
if (!xdg_config_home) return 0;
|
||||||
|
|
||||||
if (!init_string(sun_path)) return 0;
|
if (!init_string(sun_path)) return 0;
|
||||||
|
|
||||||
add_to_string(sun_path, elinks_home);
|
add_to_string(sun_path, xdg_config_home);
|
||||||
add_to_string(sun_path, ELINKS_SOCK_NAME);
|
add_to_string(sun_path, ELINKS_SOCK_NAME);
|
||||||
add_long_to_string(sun_path,
|
add_long_to_string(sun_path,
|
||||||
get_cmd_opt_int("session-ring"));
|
get_cmd_opt_int("session-ring"));
|
||||||
|
@ -334,7 +334,7 @@ static union option_info gnutls_options[] = {
|
|||||||
* change the file name via the option manager. Distributors
|
* change the file name via the option manager. Distributors
|
||||||
* of binary packages should of course change the default to
|
* of binary packages should of course change the default to
|
||||||
* suit their systems.
|
* suit their systems.
|
||||||
* TODO: If the file name is relative, look in elinks_home? */
|
* TODO: If the file name is relative, look in xdg_config_home? */
|
||||||
INIT_OPT_STRING("connection.ssl", N_("Trusted CA file"),
|
INIT_OPT_STRING("connection.ssl", N_("Trusted CA file"),
|
||||||
"trusted_ca_file", OPT_ZERO,
|
"trusted_ca_file", OPT_ZERO,
|
||||||
#ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST
|
#ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST
|
||||||
|
@ -45,6 +45,7 @@ static char elguileversion[32];
|
|||||||
void
|
void
|
||||||
init_guile(struct module *module)
|
init_guile(struct module *module)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
SCM user_module;
|
SCM user_module;
|
||||||
char *path;
|
char *path;
|
||||||
|
|
||||||
@ -53,12 +54,12 @@ init_guile(struct module *module)
|
|||||||
snprintf(elguileversion, 31, "Guile %s", scm_to_locale_string(scm_version()));
|
snprintf(elguileversion, 31, "Guile %s", scm_to_locale_string(scm_version()));
|
||||||
module->name = elguileversion;
|
module->name = elguileversion;
|
||||||
|
|
||||||
if (!elinks_home) return;
|
if (!xdg_config_home) return;
|
||||||
|
|
||||||
/* Remember the current module. */
|
/* Remember the current module. */
|
||||||
user_module = scm_current_module();
|
user_module = scm_current_module();
|
||||||
|
|
||||||
path = straconcat(elinks_home, GUILE_HOOKS_FILENAME,
|
path = straconcat(xdg_config_home, GUILE_HOOKS_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!path) return;
|
if (!path) return;
|
||||||
|
|
||||||
@ -81,7 +82,7 @@ init_guile(struct module *module)
|
|||||||
|
|
||||||
mem_free(path);
|
mem_free(path);
|
||||||
|
|
||||||
path = straconcat(elinks_home, GUILE_USERHOOKS_FILENAME,
|
path = straconcat(xdg_config_home, GUILE_USERHOOKS_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
if (!path) return;
|
if (!path) return;
|
||||||
if (file_can_read(path))
|
if (file_can_read(path))
|
||||||
|
@ -720,6 +720,8 @@ static char elluaversion[32];
|
|||||||
void
|
void
|
||||||
init_lua(struct module *module)
|
init_lua(struct module *module)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
L = luaL_newstate();
|
L = luaL_newstate();
|
||||||
|
|
||||||
luaL_openlibs(L);
|
luaL_openlibs(L);
|
||||||
@ -741,12 +743,12 @@ init_lua(struct module *module)
|
|||||||
lua_register(L, "reload", l_reload);
|
lua_register(L, "reload", l_reload);
|
||||||
lua_register(L, "goto_url", l_goto_url);
|
lua_register(L, "goto_url", l_goto_url);
|
||||||
|
|
||||||
lua_pushstring(L, elinks_home ? elinks_home
|
lua_pushstring(L, xdg_config_home ? xdg_config_home
|
||||||
: (char *) CONFDIR);
|
: (char *) CONFDIR);
|
||||||
lua_setglobal(L, "elinks_home");
|
lua_setglobal(L, "elinks_home");
|
||||||
|
|
||||||
do_hooks_file(L, CONFDIR, LUA_HOOKS_FILENAME);
|
do_hooks_file(L, CONFDIR, LUA_HOOKS_FILENAME);
|
||||||
if (elinks_home) do_hooks_file(L, elinks_home, LUA_HOOKS_FILENAME);
|
if (xdg_config_home) do_hooks_file(L, xdg_config_home, LUA_HOOKS_FILENAME);
|
||||||
strncpy(elluaversion, LUA_RELEASE, 31);
|
strncpy(elluaversion, LUA_RELEASE, 31);
|
||||||
|
|
||||||
module->name = elluaversion;
|
module->name = elluaversion;
|
||||||
|
@ -45,14 +45,14 @@ static char *
|
|||||||
get_local_hook_file(void)
|
get_local_hook_file(void)
|
||||||
{
|
{
|
||||||
static char buf[1024]; /* TODO: MAX_PATH ??? --Zas */
|
static char buf[1024]; /* TODO: MAX_PATH ??? --Zas */
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
if (!elinks_home) return NULL;
|
if (!xdg_config_home) return NULL;
|
||||||
snprintf(buf, sizeof(buf), "%s%s", elinks_home, PERL_HOOKS_FILENAME);
|
snprintf(buf, sizeof(buf), "%s%s", xdg_config_home, PERL_HOOKS_FILENAME);
|
||||||
if (file_exists(buf)) return buf;
|
if (file_exists(buf)) return buf;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
precleanup_perl(struct module *module)
|
precleanup_perl(struct module *module)
|
||||||
{
|
{
|
||||||
|
@ -101,11 +101,12 @@ set_python_search_path(void)
|
|||||||
struct string new_python_path;
|
struct string new_python_path;
|
||||||
char *old_python_path;
|
char *old_python_path;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
if (!init_string(&new_python_path)) return result;
|
if (!init_string(&new_python_path)) return result;
|
||||||
|
|
||||||
if (elinks_home && !add_format_to_string(&new_python_path, "%s%c",
|
if (xdg_config_home && !add_format_to_string(&new_python_path, "%s%c",
|
||||||
elinks_home, DELIM))
|
xdg_config_home, DELIM))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (!add_to_string(&new_python_path, CONFDIR))
|
if (!add_to_string(&new_python_path, CONFDIR))
|
||||||
@ -329,6 +330,7 @@ PyMODINIT_FUNC
|
|||||||
PyInit_elinks(void)
|
PyInit_elinks(void)
|
||||||
{
|
{
|
||||||
PyObject *elinks_module, *module_dict, *module_name;
|
PyObject *elinks_module, *module_dict, *module_name;
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
if (replace_showwarning() != 0) {
|
if (replace_showwarning() != 0) {
|
||||||
goto python_error;
|
goto python_error;
|
||||||
@ -344,9 +346,9 @@ PyInit_elinks(void)
|
|||||||
goto python_error;
|
goto python_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If @elinks_home is NULL, Py_BuildValue() returns a None reference. */
|
/* If @xdg_config_home is NULL, Py_BuildValue() returns a None reference. */
|
||||||
if (PyModule_AddObject(elinks_module, "home",
|
if (PyModule_AddObject(elinks_module, "home",
|
||||||
Py_BuildValue("s", elinks_home)) != 0) {
|
Py_BuildValue("s", xdg_config_home)) != 0) {
|
||||||
goto python_error;
|
goto python_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,12 +206,12 @@ erb_module_method_missing(int argc, VALUE *argv, VALUE self)
|
|||||||
static void
|
static void
|
||||||
init_erb_module(void)
|
init_erb_module(void)
|
||||||
{
|
{
|
||||||
char *home;
|
char *home = get_xdg_config_home();
|
||||||
|
|
||||||
erb_module = rb_define_module("ELinks");
|
erb_module = rb_define_module("ELinks");
|
||||||
rb_define_const(erb_module, "VERSION", rb_str_new2(VERSION_STRING));
|
rb_define_const(erb_module, "VERSION", rb_str_new2(VERSION_STRING));
|
||||||
|
|
||||||
home = elinks_home ? elinks_home : (char *) CONFDIR;
|
home = home ?: (char *) CONFDIR;
|
||||||
rb_define_const(erb_module, "HOME", rb_str_new2(home));
|
rb_define_const(erb_module, "HOME", rb_str_new2(home));
|
||||||
|
|
||||||
rb_define_module_function(erb_module, "message", (VALUE (*)(ANYARGS))erb_module_message, 1);
|
rb_define_module_function(erb_module, "message", (VALUE (*)(ANYARGS))erb_module_message, 1);
|
||||||
@ -225,6 +225,7 @@ static char elrubyversion[32];
|
|||||||
void
|
void
|
||||||
init_ruby(struct module *module)
|
init_ruby(struct module *module)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
char *path;
|
char *path;
|
||||||
|
|
||||||
/* Set up and initialize the interpreter. This function should be called
|
/* Set up and initialize the interpreter. This function should be called
|
||||||
@ -243,8 +244,8 @@ init_ruby(struct module *module)
|
|||||||
snprintf(elrubyversion, 31, "Ruby %s", ruby_version);
|
snprintf(elrubyversion, 31, "Ruby %s", ruby_version);
|
||||||
module->name = elrubyversion;
|
module->name = elrubyversion;
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
path = straconcat(elinks_home, RUBY_HOOKS_FILENAME,
|
path = straconcat(xdg_config_home, RUBY_HOOKS_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -121,11 +121,12 @@ static void
|
|||||||
smjs_load_hooks(void)
|
smjs_load_hooks(void)
|
||||||
{
|
{
|
||||||
char *path;
|
char *path;
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
|
|
||||||
assert(smjs_ctx);
|
assert(smjs_ctx);
|
||||||
|
|
||||||
if (elinks_home) {
|
if (xdg_config_home) {
|
||||||
path = straconcat(elinks_home, SMJS_HOOKS_FILENAME,
|
path = straconcat(xdg_config_home, SMJS_HOOKS_FILENAME,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
} else {
|
} else {
|
||||||
path = stracpy(CONFDIR STRING_DIR_SEP SMJS_HOOKS_FILENAME);
|
path = stracpy(CONFDIR STRING_DIR_SEP SMJS_HOOKS_FILENAME);
|
||||||
|
@ -183,6 +183,7 @@ smjs_invoke_elinks_object_method(const char *method, int argc, JS::Value *argv,
|
|||||||
static bool
|
static bool
|
||||||
elinks_get_property_home(JSContext *ctx, unsigned int argc, JS::Value *vp)
|
elinks_get_property_home(JSContext *ctx, unsigned int argc, JS::Value *vp)
|
||||||
{
|
{
|
||||||
|
char *xdg_config_home = get_xdg_config_home();
|
||||||
JS::CallArgs args = CallArgsFromVp(argc, vp);
|
JS::CallArgs args = CallArgsFromVp(argc, vp);
|
||||||
JS::RootedObject hobj(ctx, &args.thisv().toObject());
|
JS::RootedObject hobj(ctx, &args.thisv().toObject());
|
||||||
|
|
||||||
@ -192,7 +193,7 @@ elinks_get_property_home(JSContext *ctx, unsigned int argc, JS::Value *vp)
|
|||||||
if (!JS_InstanceOf(ctx, hobj, (JSClass *) &elinks_class, NULL))
|
if (!JS_InstanceOf(ctx, hobj, (JSClass *) &elinks_class, NULL))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
args.rval().setString(JS_NewStringCopyZ(smjs_ctx, elinks_home));
|
args.rval().setString(JS_NewStringCopyZ(smjs_ctx, xdg_config_home));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -964,7 +964,9 @@ setup_first_session(struct session *ses, struct uri *uri)
|
|||||||
N_("Welcome"), ALIGN_CENTER,
|
N_("Welcome"), ALIGN_CENTER,
|
||||||
N_("Welcome to ELinks!\n\n"
|
N_("Welcome to ELinks!\n\n"
|
||||||
"Press ESC for menu. Documentation is available in "
|
"Press ESC for menu. Documentation is available in "
|
||||||
"Help menu."),
|
"Help menu.\n"
|
||||||
|
"ATTENTION. Since 0.17.GIT configuration is read from and written to $XDG_CONFIG_HOME/elinks or ~/.config/elinks.\n"
|
||||||
|
"So if you did not copy it yet from ~/.elinks, do it now and start again."),
|
||||||
ses, 1,
|
ses, 1,
|
||||||
MSG_BOX_BUTTON(N_("~OK"), (void (*)(void *))handler, B_ENTER | B_ESC));
|
MSG_BOX_BUTTON(N_("~OK"), (void (*)(void *))handler, B_ENTER | B_ESC));
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ disable_mouse(void)
|
|||||||
static int
|
static int
|
||||||
mouse_lock_exists(void)
|
mouse_lock_exists(void)
|
||||||
{
|
{
|
||||||
char *lock_filename = straconcat(empty_string_or_(elinks_home), "mouse.lock", (char *) NULL);
|
char *lock_filename = straconcat(empty_string_or_(get_xdg_config_home()), "mouse.lock", (char *) NULL);
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
if (lock_filename) {
|
if (lock_filename) {
|
||||||
|
Loading…
Reference in New Issue
Block a user