X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/2d487ae57b9d204b47984737437c3be5b08bb30b..8d5b986d0f880ddbd887865ae12b403df0464168:/src/xrdb.c diff --git a/src/xrdb.c b/src/xrdb.c index c41caa9c8a..632e447e85 100644 --- a/src/xrdb.c +++ b/src/xrdb.c @@ -1,19 +1,22 @@ /* Deal with the X Resource Manager. - Copyright (C) 1990, 1993, 1994 Free Software Foundation. + Copyright (C) 1990, 1993, 1994, 2000, 2001 Free Software Foundation. -This program is free software; you can redistribute it and/or modify +This file is part of GNU Emacs. + +GNU Emacs 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 2, or (at your option) any later version. -This program is distributed in the hope that it will be useful, +GNU Emacs 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; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +along with GNU Emacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ /* Written by jla, 4/90 */ @@ -21,6 +24,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #endif +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + #include #if 1 /* I'd really appreciate it if this code could go away... -JimB */ @@ -29,15 +38,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef SYSV #define SYSV #endif -#include #endif /* USG5 */ #endif /* 1 */ -/* This should be included before the X include files; otherwise, we get - warnings about redefining NULL under BSD 4.3. */ -#include - #include #include #if 0 @@ -53,14 +57,12 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #include -#ifndef MAXPATHLEN -#define MAXPATHLEN 256 -#endif - #if !defined(S_ISDIR) && defined(S_IFDIR) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif +#include "lisp.h" + extern char *getenv (); /* This does cause trouble on AIX. I'm going to take the comment at @@ -178,7 +180,7 @@ magic_file_p (string, string_len, class, escaped_suffix, suffix) while (p < string + string_len) { /* The chunk we're about to stick on the end of result. */ - char *next; + char *next = NULL; int next_len; if (*p == '%') @@ -224,11 +226,11 @@ magic_file_p (string, string_len, class, escaped_suffix, suffix) free (path); return NULL; } - + next = lang; next_len = strlen (next); break; - + case 't': case 'c': free (path); @@ -244,7 +246,7 @@ magic_file_p (string, string_len, class, escaped_suffix, suffix) path_size = (path_len + next_len + 1) * 2; path = (char *) realloc (path, path_size); } - + bcopy (next, path + path_len, next_len); path_len += next_len; @@ -306,7 +308,7 @@ gethomedir () ptr = pw->pw_dir; } - if (ptr == NULL) + if (ptr == NULL) return "/"; copy = (char *) malloc (strlen (ptr) + 2); @@ -330,7 +332,7 @@ file_p (path) /* Find the first element of SEARCH_PATH which exists and is readable, - after expanding the %-escapes. Return 0 if we didn't find any, and + after expanding the %-escapes. Return 0 if we didn't find any, and the path name of the one we found otherwise. */ static char * @@ -343,7 +345,7 @@ search_magic_path (search_path, class, escaped_suffix, suffix) { for (p = s; *p && *p != ':'; p++) ; - + if (p > s) { char *path = magic_file_p (s, p - s, class, escaped_suffix, suffix); @@ -369,8 +371,6 @@ search_magic_path (search_path, class, escaped_suffix, suffix) /* Producing databases for individual sources. */ -#define X_DEFAULT_SEARCH_PATH "/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S" - static XrmDatabase get_system_app (class) char *class; @@ -379,7 +379,7 @@ get_system_app (class) char *path; path = getenv ("XFILESEARCHPATH"); - if (! path) path = X_DEFAULT_SEARCH_PATH; + if (! path) path = PATH_X_DEFAULTS; path = search_magic_path (path, class, 0, 0); if (path) @@ -396,8 +396,6 @@ static XrmDatabase get_fallback (display) Display *display; { - XrmDatabase db; - return NULL; } @@ -408,6 +406,7 @@ get_user_app (class) { char *path; char *file = 0; + char *free_it = 0; /* Check for XUSERFILESEARCHPATH. It is a path of complete file names, not directories. */ @@ -419,19 +418,23 @@ get_user_app (class) || ((path = getenv ("XAPPLRESDIR")) && ((file = search_magic_path (path, class, "/%L/%N", 0)) || (file = search_magic_path (path, class, "/%N", 0)))) - + /* Check in the home directory. This is a bit of a hack; let's hope one's home directory doesn't contain any %-escapes. */ - || (path = gethomedir (), - ((file = search_magic_path (path, class, "%L/%N", 0)) - || (file = search_magic_path (path, class, "%N", 0))))) + || (free_it = gethomedir (), + ((file = search_magic_path (free_it, class, "%L/%N", 0)) + || (file = search_magic_path (free_it, class, "%N", 0))))) { XrmDatabase db = XrmGetFileDatabase (file); free (file); + if (free_it) + free (free_it); return db; } - else - return NULL; + + if (free_it) + free (free_it); + return NULL; } @@ -517,10 +520,15 @@ x_load_resources (display, xrm_string, myname, myclass) Display *display; char *xrm_string, *myname, *myclass; { - char *xdefs; XrmDatabase user_database; XrmDatabase rdb; XrmDatabase db; + char line[256]; + char *helv = "-*-helvetica-medium-r-*--*-120-*-*-*-*-iso8859-1"; +#ifdef USE_MOTIF + char *courier = "-*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1"; + extern Lisp_Object Vdouble_click_time; +#endif x_rm_string = XrmStringToQuark (XrmStringType); #ifndef USE_X_TOOLKIT @@ -530,6 +538,70 @@ x_load_resources (display, xrm_string, myname, myclass) #endif rdb = XrmGetStringDatabase (""); + /* Add some font defaults. If the font `helv' doesn't exist, widgets + will use some other default font. */ +#ifdef USE_MOTIF + + sprintf (line, "%s.pane.background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fontList: %s", myclass, helv); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*menu*background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*menubar*background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*verticalScrollBar.background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*verticalScrollBar.troughColor: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s.dialog*.background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb.Text.background: white", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb.FilterText.background: white", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*DirList.background: white", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*ItemsList.background: white", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*background: grey75", myclass); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb.Text.fontList: %s", myclass, courier); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb.FilterText.fontList: %s", myclass, courier); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*ItemsList.fontList: %s", myclass, courier); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*DirList.fontList: %s", myclass, courier); + XrmPutLineResource (&rdb, line); + + /* Set double click time of list boxes in the file selection + dialog from `double-click-time'. */ + if (INTEGERP (Vdouble_click_time) && XINT (Vdouble_click_time) > 0) + { + sprintf (line, "%s*fsb*DirList.doubleClickInterval: %d", + myclass, XFASTINT (Vdouble_click_time)); + XrmPutLineResource (&rdb, line); + sprintf (line, "%s*fsb*ItemsList.doubleClickInterval: %d", + myclass, XFASTINT (Vdouble_click_time)); + XrmPutLineResource (&rdb, line); + } + +#else /* not USE_MOTIF */ + + sprintf (line, "Emacs.dialog*.font: %s", helv); + XrmPutLineResource (&rdb, line); + sprintf (line, "Emacs.dialog*.background: grey75"); + XrmPutLineResource (&rdb, line); + sprintf (line, "*XlwMenu*font: %s", helv); + XrmPutLineResource (&rdb, line); + sprintf (line, "*XlwMenu*background: grey75"); + XrmPutLineResource (&rdb, line); + sprintf (line, "Emacs*verticalScrollBar.background: grey75"); + XrmPutLineResource (&rdb, line); + +#endif /* not USE_MOTIF */ + user_database = get_user_db (display); /* Figure out what the "customization string" is, so we can use it @@ -562,7 +634,7 @@ x_load_resources (display, xrm_string, myname, myclass) db = get_environ_db (); if (db != NULL) XrmMergeDatabases (db, &rdb); - + /* Last, merge in any specification from the command line. */ if (xrm_string != NULL) {