aboutsummaryrefslogtreecommitdiff
path: root/readline/colors.c
diff options
context:
space:
mode:
Diffstat (limited to 'readline/colors.c')
-rw-r--r--readline/colors.c279
1 files changed, 0 insertions, 279 deletions
diff --git a/readline/colors.c b/readline/colors.c
deleted file mode 100644
index 963dc12..0000000
--- a/readline/colors.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* `dir', `vdir' and `ls' directory listing programs for GNU.
-
- Modified by Chet Ramey for Readline.
-
- Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation,
- Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-/* Written by Richard Stallman and David MacKenzie. */
-
-/* Color support by Peter Anvin <Peter.Anvin@linux.org> and Dennis
- Flaherty <dennisf@denix.elk.miles.com> based on original patches by
- Greg Lee <lee@uhunix.uhcc.hawaii.edu>. */
-
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include "rlconf.h"
-
-#include <stdio.h>
-
-#include "posixstat.h" // stat related macros (S_ISREG, ...)
-#include <fcntl.h> // S_ISUID
-
-// strlen()
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else /* !HAVE_STRING_H */
-# include <strings.h>
-#endif /* !HAVE_STRING_H */
-
-// abort()
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#include "readline.h"
-#include "rldefs.h"
-
-#ifdef COLOR_SUPPORT
-
-#include "xmalloc.h"
-#include "colors.h"
-
-static bool is_colored (enum indicator_no type);
-static void restore_default_color (void);
-
-COLOR_EXT_TYPE *_rl_color_ext_list = 0;
-
-/* Output a color indicator (which may contain nulls). */
-void
-_rl_put_indicator (const struct bin_str *ind) {
- fwrite (ind->string, ind->len, 1, rl_outstream);
-}
-
-static bool
-is_colored (enum indicator_no colored_filetype)
-{
- size_t len = _rl_color_indicator[colored_filetype].len;
- char const *s = _rl_color_indicator[colored_filetype].string;
- return ! (len == 0
- || (len == 1 && strncmp (s, "0", 1) == 0)
- || (len == 2 && strncmp (s, "00", 2) == 0));
-}
-
-static void
-restore_default_color (void)
-{
- _rl_put_indicator (&_rl_color_indicator[C_LEFT]);
- _rl_put_indicator (&_rl_color_indicator[C_RIGHT]);
-}
-
-void
-_rl_set_normal_color (void)
-{
- if (is_colored (C_NORM))
- {
- _rl_put_indicator (&_rl_color_indicator[C_LEFT]);
- _rl_put_indicator (&_rl_color_indicator[C_NORM]);
- _rl_put_indicator (&_rl_color_indicator[C_RIGHT]);
- }
-}
-
-bool
-_rl_print_prefix_color (void)
-{
- struct bin_str *s;
-
- /* What do we want to use for the prefix? Let's try cyan first, see colors.h */
- s = &_rl_color_indicator[C_PREFIX];
- if (s->string != NULL)
- {
- if (is_colored (C_NORM))
- restore_default_color ();
- _rl_put_indicator (&_rl_color_indicator[C_LEFT]);
- _rl_put_indicator (s);
- _rl_put_indicator (&_rl_color_indicator[C_RIGHT]);
- return 0;
- }
- else
- return 1;
-}
-
-/* Returns whether any color sequence was printed. */
-bool
-_rl_print_color_indicator (char *f)
-{
- enum indicator_no colored_filetype;
- COLOR_EXT_TYPE *ext; /* Color extension */
- size_t len; /* Length of name */
-
- const char* name;
- char *filename;
- struct stat astat, linkstat;
- mode_t mode;
- int linkok; /* 1 == ok, 0 == dangling symlink, -1 == missing */
- int stat_ok;
-
- name = f;
-
- /* This should already have undergone tilde expansion */
- filename = 0;
- if (rl_filename_stat_hook)
- {
- filename = savestring (f);
- (*rl_filename_stat_hook) (&filename);
- name = filename;
- }
-
-#if defined (HAVE_LSTAT)
- stat_ok = lstat(name, &astat);
-#else
- stat_ok = stat(name, &astat);
-#endif
- if (stat_ok == 0)
- {
- mode = astat.st_mode;
-#if defined (HAVE_LSTAT)
- if (S_ISLNK (mode))
- {
- linkok = stat (name, &linkstat) == 0;
- if (linkok && strncmp (_rl_color_indicator[C_LINK].string, "target", 6) == 0)
- mode = linkstat.st_mode;
- }
- else
-#endif
- linkok = 1;
- }
- else
- linkok = -1;
-
- /* Is this a nonexistent file? If so, linkok == -1. */
-
- if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL)
- colored_filetype = C_MISSING;
- else if (linkok == 0 && S_ISLNK(mode) && _rl_color_indicator[C_ORPHAN].string != NULL)
- colored_filetype = C_ORPHAN; /* dangling symlink */
- else if(stat_ok != 0)
- {
- static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS;
- colored_filetype = filetype_indicator[normal]; //f->filetype];
- }
- else
- {
- if (S_ISREG (mode))
- {
- colored_filetype = C_FILE;
-
- if ((mode & S_ISUID) != 0 && is_colored (C_SETUID))
- colored_filetype = C_SETUID;
- else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID))
- colored_filetype = C_SETGID;
- else if (is_colored (C_CAP) && 0) //f->has_capability)
- colored_filetype = C_CAP;
- else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC))
- colored_filetype = C_EXEC;
- else if ((1 < astat.st_nlink) && is_colored (C_MULTIHARDLINK))
- colored_filetype = C_MULTIHARDLINK;
- }
- else if (S_ISDIR (mode))
- {
- colored_filetype = C_DIR;
-
-#if defined (S_ISVTX)
- if ((mode & S_ISVTX) && (mode & S_IWOTH)
- && is_colored (C_STICKY_OTHER_WRITABLE))
- colored_filetype = C_STICKY_OTHER_WRITABLE;
- else
-#endif
- if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))
- colored_filetype = C_OTHER_WRITABLE;
-#if defined (S_ISVTX)
- else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY))
- colored_filetype = C_STICKY;
-#endif
- }
- else if (S_ISLNK (mode))
- colored_filetype = C_LINK;
- else if (S_ISFIFO (mode))
- colored_filetype = C_FIFO;
- else if (S_ISSOCK (mode))
- colored_filetype = C_SOCK;
- else if (S_ISBLK (mode))
- colored_filetype = C_BLK;
- else if (S_ISCHR (mode))
- colored_filetype = C_CHR;
- else
- {
- /* Classify a file of some other type as C_ORPHAN. */
- colored_filetype = C_ORPHAN;
- }
- }
-
- /* Check the file's suffix only if still classified as C_FILE. */
- ext = NULL;
- if (colored_filetype == C_FILE)
- {
- /* Test if NAME has a recognized suffix. */
- len = strlen (name);
- name += len; /* Pointer to final \0. */
- for (ext = _rl_color_ext_list; ext != NULL; ext = ext->next)
- {
- if (ext->ext.len <= len
- && strncmp (name - ext->ext.len, ext->ext.string,
- ext->ext.len) == 0)
- break;
- }
- }
-
- free (filename); /* NULL or savestring return value */
-
- {
- const struct bin_str *const s
- = ext ? &(ext->seq) : &_rl_color_indicator[colored_filetype];
- if (s->string != NULL)
- {
- /* Need to reset so not dealing with attribute combinations */
- if (is_colored (C_NORM))
- restore_default_color ();
- _rl_put_indicator (&_rl_color_indicator[C_LEFT]);
- _rl_put_indicator (s);
- _rl_put_indicator (&_rl_color_indicator[C_RIGHT]);
- return 0;
- }
- else
- return 1;
- }
-}
-
-void
-_rl_prep_non_filename_text (void)
-{
- if (_rl_color_indicator[C_END].string != NULL)
- _rl_put_indicator (&_rl_color_indicator[C_END]);
- else
- {
- _rl_put_indicator (&_rl_color_indicator[C_LEFT]);
- _rl_put_indicator (&_rl_color_indicator[C_RESET]);
- _rl_put_indicator (&_rl_color_indicator[C_RIGHT]);
- }
-}
-#endif /* COLOR_SUPPORT */