mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-10 22:00:09 +02:00
330 lines
7.1 KiB
Plaintext
330 lines
7.1 KiB
Plaintext
From ffa25716611e1af39cf5cd4f6a1248d208040374 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Wed, 3 Sep 2014 15:09:24 +0000
|
|
Subject: haiku patch
|
|
|
|
|
|
diff --git a/cmdbuf.c b/cmdbuf.c
|
|
index 69d7414..6686cdf 100644
|
|
--- a/cmdbuf.c
|
|
+++ b/cmdbuf.c
|
|
@@ -74,16 +74,16 @@ struct mlist
|
|
/*
|
|
* These are the various command histories that exist.
|
|
*/
|
|
-struct mlist mlist_search =
|
|
+struct mlist mlist_search =
|
|
{ &mlist_search, &mlist_search, &mlist_search, NULL, 0 };
|
|
public void * constant ml_search = (void *) &mlist_search;
|
|
|
|
-struct mlist mlist_examine =
|
|
+struct mlist mlist_examine =
|
|
{ &mlist_examine, &mlist_examine, &mlist_examine, NULL, 0 };
|
|
public void * constant ml_examine = (void *) &mlist_examine;
|
|
|
|
#if SHELL_ESCAPE || PIPEC
|
|
-struct mlist mlist_shell =
|
|
+struct mlist mlist_shell =
|
|
{ &mlist_shell, &mlist_shell, &mlist_shell, NULL, 0 };
|
|
public void * constant ml_shell = (void *) &mlist_shell;
|
|
#endif
|
|
@@ -420,7 +420,7 @@ cmd_right()
|
|
char *pr;
|
|
char *ncp;
|
|
int width;
|
|
-
|
|
+
|
|
if (*cp == '\0')
|
|
{
|
|
/* Already at the end of the line. */
|
|
@@ -454,7 +454,7 @@ cmd_left()
|
|
{
|
|
char *ncp;
|
|
int width, bswidth;
|
|
-
|
|
+
|
|
if (cp <= cmdbuf)
|
|
{
|
|
/* Already at the beginning of the line */
|
|
@@ -485,14 +485,14 @@ cmd_ichar(cs, clen)
|
|
int clen;
|
|
{
|
|
char *s;
|
|
-
|
|
+
|
|
if (strlen(cmdbuf) + clen >= sizeof(cmdbuf)-1)
|
|
{
|
|
/* No room in the command buffer for another char. */
|
|
bell();
|
|
return (CC_ERROR);
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* Make room for the new character (shift the tail of the buffer right).
|
|
*/
|
|
@@ -552,7 +552,7 @@ cmd_erase()
|
|
*/
|
|
updown_match = -1;
|
|
cmd_repaint(cp);
|
|
-
|
|
+
|
|
/*
|
|
* We say that erasing the entire command string causes us
|
|
* to abort the current command, if CF_QUIT_ON_ERASE is set.
|
|
@@ -689,7 +689,7 @@ cmd_updown(action)
|
|
{
|
|
char *s;
|
|
struct mlist *ml;
|
|
-
|
|
+
|
|
if (curr_mlist == NULL)
|
|
{
|
|
/*
|
|
@@ -754,7 +754,7 @@ cmd_addhist(mlist, cmd, modified)
|
|
{
|
|
#if CMD_HISTORY
|
|
struct mlist *ml;
|
|
-
|
|
+
|
|
/*
|
|
* Don't save a trivial command.
|
|
*/
|
|
@@ -826,7 +826,7 @@ cmd_edit(c)
|
|
#else
|
|
#define not_in_completion()
|
|
#endif
|
|
-
|
|
+
|
|
/*
|
|
* See if the char is indeed a line-editing command.
|
|
*/
|
|
@@ -937,7 +937,7 @@ cmd_istr(str)
|
|
char *s;
|
|
int action;
|
|
char *endline = str + strlen(str);
|
|
-
|
|
+
|
|
for (s = str; *s != '\0'; )
|
|
{
|
|
char *os = s;
|
|
@@ -969,7 +969,7 @@ delimit_word()
|
|
char *esc = get_meta_escape();
|
|
int esclen = (int) strlen(esc);
|
|
#endif
|
|
-
|
|
+
|
|
/*
|
|
* Move cursor to end of word.
|
|
*/
|
|
@@ -1042,7 +1042,7 @@ delimit_word()
|
|
|
|
/*
|
|
* Set things up to enter completion mode.
|
|
- * Expand the word under the cursor into a list of filenames
|
|
+ * Expand the word under the cursor into a list of filenames
|
|
* which start with that word, and set tk_text to that list.
|
|
*/
|
|
static void
|
|
@@ -1050,7 +1050,7 @@ init_compl()
|
|
{
|
|
char *word;
|
|
char c;
|
|
-
|
|
+
|
|
/*
|
|
* Get rid of any previous tk_text.
|
|
*/
|
|
@@ -1139,8 +1139,8 @@ cmd_complete(action)
|
|
if (!in_completion || action == EC_EXPAND)
|
|
{
|
|
/*
|
|
- * Expand the word under the cursor and
|
|
- * use the first word in the expansion
|
|
+ * Expand the word under the cursor and
|
|
+ * use the first word in the expansion
|
|
* (or the entire expansion if we're doing EC_EXPAND).
|
|
*/
|
|
init_compl();
|
|
@@ -1172,13 +1172,13 @@ cmd_complete(action)
|
|
*/
|
|
tk_trial = next_compl(action, tk_trial);
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* Remove the original word, or the previous trial completion.
|
|
*/
|
|
while (cp > tk_ipoint)
|
|
(void) cmd_erase();
|
|
-
|
|
+
|
|
if (tk_trial == NULL)
|
|
{
|
|
/*
|
|
@@ -1209,9 +1209,9 @@ cmd_complete(action)
|
|
goto fail;
|
|
}
|
|
}
|
|
-
|
|
+
|
|
return (CC_OK);
|
|
-
|
|
+
|
|
fail:
|
|
in_completion = 0;
|
|
bell();
|
|
@@ -1292,7 +1292,7 @@ cmd_char(c)
|
|
literal = 0;
|
|
return (cmd_ichar(cmd_mbc_buf, len));
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* See if it is a line-editing character.
|
|
*/
|
|
@@ -1308,7 +1308,7 @@ cmd_char(c)
|
|
break;
|
|
}
|
|
}
|
|
-
|
|
+
|
|
/*
|
|
* Insert the char into the command buffer.
|
|
*/
|
|
@@ -1378,10 +1378,14 @@ mlist_size(ml)
|
|
static char *
|
|
histfile_name()
|
|
{
|
|
+#ifdef __HAIKU__
|
|
+ char home[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH];
|
|
+#else
|
|
char *home;
|
|
+#endif
|
|
char *name;
|
|
int len;
|
|
-
|
|
+
|
|
/* See if filename is explicitly specified by $LESSHISTFILE. */
|
|
name = lgetenv("LESSHISTFILE");
|
|
if (name != NULL && *name != '\0')
|
|
@@ -1396,6 +1400,13 @@ histfile_name()
|
|
if (strcmp(LESSHISTFILE, "") == 0 || strcmp(LESSHISTFILE, "-") == 0)
|
|
return (NULL);
|
|
|
|
+#ifdef __HAIKU__
|
|
+ {
|
|
+ dev_t volume = dev_for_path("/boot");
|
|
+ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, home, sizeof(home)) != B_OK)
|
|
+ return (NULL);
|
|
+ }
|
|
+#else
|
|
/* Otherwise, file is in $HOME. */
|
|
home = lgetenv("HOME");
|
|
if (home == NULL || *home == '\0')
|
|
@@ -1406,6 +1417,7 @@ histfile_name()
|
|
#endif
|
|
return (NULL);
|
|
}
|
|
+#endif
|
|
len = (int) (strlen(home) + strlen(LESSHISTFILE) + 2);
|
|
name = (char *) ecalloc(len, sizeof(char));
|
|
SNPRINTF2(name, len, "%s/%s", home, LESSHISTFILE);
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 4ac9a35..d9e299a 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -596,10 +596,17 @@ AH_TOP([
|
|
* LESSHISTFILE is the filename of the history file
|
|
* (in the HOME directory).
|
|
*/
|
|
-#define LESSKEYFILE ".less"
|
|
-#define LESSKEYFILE_SYS SYSDIR "/sysless"
|
|
-#define DEF_LESSKEYINFILE ".lesskey"
|
|
-#define LESSHISTFILE ".lesshst"
|
|
+#ifdef __HAIKU__
|
|
+# define LESSKEYFILE "less"
|
|
+# define LESSKEYFILE_SYS SYSDIR "/sysless"
|
|
+# define DEF_LESSKEYINFILE "lesskey"
|
|
+# define LESSHISTFILE "lesshst"
|
|
+#else
|
|
+# define LESSKEYFILE ".less"
|
|
+# define LESSKEYFILE_SYS SYSDIR "/sysless"
|
|
+# define DEF_LESSKEYINFILE ".lesskey"
|
|
+# define LESSHISTFILE ".lesshst"
|
|
+#endif
|
|
|
|
|
|
/* Settings always true on Unix. */
|
|
diff --git a/filename.c b/filename.c
|
|
index 9631f1c..dc13a96 100644
|
|
--- a/filename.c
|
|
+++ b/filename.c
|
|
@@ -266,12 +266,23 @@ homefile(filename)
|
|
{
|
|
register char *pathname;
|
|
|
|
+#ifdef __HAIKU__
|
|
+ char path[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH];
|
|
+ dev_t volume = dev_for_path("/boot");
|
|
+ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, path, sizeof(path)) != B_OK)
|
|
+ return (NULL);
|
|
+
|
|
+ pathname = dirfile(&path, filename);
|
|
+ if (pathname != NULL)
|
|
+ return (pathname);
|
|
+#else
|
|
/*
|
|
* Try $HOME/filename.
|
|
*/
|
|
pathname = dirfile(lgetenv("HOME"), filename);
|
|
if (pathname != NULL)
|
|
return (pathname);
|
|
+#endif
|
|
#if OS2
|
|
/*
|
|
* Try $INIT/filename.
|
|
diff --git a/less.h b/less.h
|
|
index f57fb1e..17159dd 100644
|
|
--- a/less.h
|
|
+++ b/less.h
|
|
@@ -93,6 +93,11 @@
|
|
#include <floss.h>
|
|
#endif
|
|
|
|
+#ifdef __HAIKU__
|
|
+#include <FindDirectory.h>
|
|
+#include <StorageDefs.h>
|
|
+#endif
|
|
+
|
|
#if MSDOS_COMPILER==WIN32C || OS2
|
|
#include <io.h>
|
|
#endif
|
|
diff --git a/lesskey.c b/lesskey.c
|
|
index 298748b..fa4c05b 100644
|
|
--- a/lesskey.c
|
|
+++ b/lesskey.c
|
|
@@ -246,8 +246,19 @@ homefile(filename)
|
|
char *p;
|
|
char *pathname;
|
|
|
|
+#ifdef __HAIKU__
|
|
+ char path[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH];
|
|
+ dev_t volume = dev_for_path("/boot");
|
|
+ if (find_directory(B_USER_SETTINGS_DIRECTORY, volume, true, path, sizeof(path)) != B_OK)
|
|
+ return (NULL);
|
|
+
|
|
+ pathname = mkpathname(&path, filename);
|
|
+ if (pathname != NULL)
|
|
+ return (pathname);
|
|
+#else
|
|
if ((p = getenv("HOME")) != NULL && *p != '\0')
|
|
pathname = mkpathname(p, filename);
|
|
+#endif
|
|
#if OS2
|
|
else if ((p = getenv("INIT")) != NULL && *p != '\0')
|
|
pathname = mkpathname(p, filename);
|
|
--
|
|
2.2.2
|
|
|