summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2012-10-15 15:06:14 -0400
committerAllan McRae <allan@archlinux.org>2012-11-27 15:16:15 +1000
commit1c0c292728c6bb5987b418c7ecbaf998a26c066d (patch)
tree0ae03abdda46ddc8d57d3ce6597c3b506fe27017
parente1fdcfb145aa45eb1115ba400587cfed5eaf5455 (diff)
pactree: autodetect and use unicode line drawing characters
Add a compile time check for langinfo.h so that we can possibly use unicode line drawing characters if the current locale is supportive of them. This can be explicitly disabled at runtime with the use of a new switch: -a, --ascii. Signed-off-by: Dave Reisner <dreisner@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--configure.ac4
-rw-r--r--doc/pactree.8.txt4
-rw-r--r--src/util/pactree.c37
3 files changed, 40 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index b823fab3..1a90906e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -247,8 +247,8 @@ AS_IF([test "x$have_gpgme" = xno -a "x$with_gpgme" = xyes],
AM_CONDITIONAL([HAVE_LIBGPGME], [test "x$have_gpgme" = "xyes"])
# Checks for header files.
-AC_CHECK_HEADERS([fcntl.h float.h glob.h libintl.h limits.h locale.h \
- mntent.h netinet/in.h netinet/tcp.h \
+AC_CHECK_HEADERS([fcntl.h float.h glob.h langinfo.h libintl.h limits.h \
+ locale.h mntent.h netinet/in.h netinet/tcp.h \
stddef.h string.h sys/ioctl.h \
sys/mnttab.h sys/mount.h \
sys/param.h sys/statvfs.h sys/time.h sys/types.h \
diff --git a/doc/pactree.8.txt b/doc/pactree.8.txt
index 669a14bb..6ecaf23e 100644
--- a/doc/pactree.8.txt
+++ b/doc/pactree.8.txt
@@ -22,6 +22,10 @@ description is generated.
Options
-------
+*-a, \--ascii*::
+ Use ascii characters for tree formatting. By default, pactree will use unicode
+ line drawing characters if it is able to detect that the locale supports them.
+
*-b, \--dbpath*::
Specify an alternative database location.
diff --git a/src/util/pactree.c b/src/util/pactree.c
index 4984a12e..ae0c8a07 100644
--- a/src/util/pactree.c
+++ b/src/util/pactree.c
@@ -21,10 +21,14 @@
#include <getopt.h>
#include <stdio.h>
#include <string.h>
-
+#include <locale.h>
#include <alpm.h>
#include <alpm_list.h>
+#ifdef HAVE_LANGINFO_H
+#include <langinfo.h>
+#endif
+
#define LINE_MAX 512
typedef struct tdepth {
@@ -42,6 +46,19 @@ struct graph_style {
int indent;
};
+#define UTF_V "\342\224\202" /* U+2502, Vertical line drawing char */
+#define UTF_VR "\342\224\234" /* U+251C, Vertical and right */
+#define UTF_H "\342\224\200" /* U+2500, Horizontal */
+#define UTF_UR "\342\224\224" /* U+2514, Up and right */
+
+static struct graph_style graph_utf8 = {
+ " provides",
+ UTF_VR UTF_H,
+ UTF_UR UTF_H,
+ UTF_V " ",
+ 3
+};
+
static struct graph_style graph_default = {
" provides",
"|--",
@@ -95,7 +112,7 @@ alpm_list_t *provisions = NULL;
/* options */
struct color_choices *color = &no_color;
-struct graph_style *style = &graph_default;
+struct graph_style *style = &graph_utf8;
int graphviz = 0;
int max_depth = -1;
int reverse = 0;
@@ -210,6 +227,7 @@ static int parse_options(int argc, char *argv[])
char *endptr = NULL;
static const struct option opts[] = {
+ {"ascii", no_argument, 0, 'a'},
{"dbpath", required_argument, 0, 'b'},
{"color", no_argument, 0, 'c'},
{"depth", required_argument, 0, 'd'},
@@ -224,12 +242,24 @@ static int parse_options(int argc, char *argv[])
{0, 0, 0, 0}
};
- while((opt = getopt_long(argc, argv, "b:cd:ghlrsu", opts, &option_index))) {
+#ifdef HAVE_LANGINFO_H
+ setlocale(LC_ALL, "");
+ if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0) {
+ style = &graph_utf8;
+ }
+#else
+ style = &graph_default;
+#endif
+
+ while((opt = getopt_long(argc, argv, "ab:cd:ghlrsu", opts, &option_index))) {
if(opt < 0) {
break;
}
switch(opt) {
+ case 'a':
+ style = &graph_default;
+ break;
case OP_CONFIG:
configfile = optarg;
break;
@@ -281,6 +311,7 @@ static void usage(void)
{
fprintf(stderr, "pactree v" PACKAGE_VERSION "\n"
"Usage: pactree [options] PACKAGE\n\n"
+ " -a, --ascii use ascii characters for tree formatting\n"
" -b, --dbpath <path> set an alternate database location\n"
" -c, --color colorize output\n"
" -d, --depth <#> limit the depth of recursion\n"