[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RP] i18n patch for 1.4.0
From: |
rubikitch |
Subject: |
[RP] i18n patch for 1.4.0 |
Date: |
Mon, 03 Apr 2006 16:14:42 +0900 (JST) |
From: Shawn Betts <address@hidden>
Subject: [RP] Ratpoison 1.4.0
Date: Sun, 02 Apr 2006 16:44:13 -0400
> I've released 1.4.0. Any patches that didn't go in and bugs that
Thank you!
I updated i18n patch.
With i18n patch, you can use fontsets to display non-ascii chars.
diff -u /tmp/ratpoison-1.4.0/src/actions.c src/actions.c
--- /tmp/ratpoison-1.4.0/src/actions.c 2006-03-16 10:27:17.000000000 +0900
+++ src/actions.c 2006-04-03 10:48:13.000000000 +0900
@@ -1664,7 +1664,7 @@
/* Display the frame's number inside the window. */
XDrawString (dpy, wins[i], s->normal_gc,
defaults.bar_x_padding,
- defaults.bar_y_padding +
defaults.font->max_bounds.ascent,
+ defaults.bar_y_padding + font_ascent,
num, strlen (num));
free (num);
@@ -3108,7 +3108,7 @@
for(i=0; license_text[i]; i++)
{
XDrawString (dpy, s->help_window, s->normal_gc,
- x, y + defaults.font->max_bounds.ascent,
+ x, y + font_ascent,
license_text[i], strlen (license_text[i]));
y += FONT_HEIGHT (defaults.font);
@@ -3153,19 +3153,19 @@
XGrabKeyboard (dpy, s->help_window, False, GrabModeSync, GrabModeAsync,
CurrentTime);
XDrawString (dpy, s->help_window, s->normal_gc,
- 10, y + defaults.font->max_bounds.ascent,
+ 10, y + font_ascent,
"ratpoison key bindings", strlen ("ratpoison key
bindings"));
y += FONT_HEIGHT (defaults.font) * 2;
XDrawString (dpy, s->help_window, s->normal_gc,
- 10, y + defaults.font->max_bounds.ascent,
+ 10, y + font_ascent,
"Command key: ", strlen ("Command key: "));
keysym_name = keysym_to_string (prefix_key.sym, prefix_key.state);
XDrawString (dpy, s->help_window, s->normal_gc,
10 + XTextWidth (defaults.font, "Command key: ", strlen
("Command key: ")),
- y + defaults.font->max_bounds.ascent,
+ y + font_ascent,
keysym_name, strlen (keysym_name));
free (keysym_name);
@@ -3180,7 +3180,7 @@
keysym_name = keysym_to_string (map->actions[i].key,
map->actions[i].state);
XDrawString (dpy, s->help_window, s->normal_gc,
- x, y + defaults.font->max_bounds.ascent,
+ x, y + font_ascent,
keysym_name, strlen (keysym_name));
if (XTextWidth (defaults.font, keysym_name, strlen
(keysym_name)) > max_width)
@@ -3191,7 +3191,7 @@
else
{
XDrawString (dpy, s->help_window, s->normal_gc,
- x, y + defaults.font->max_bounds.ascent,
+ x, y + font_ascent,
map->actions[i].data, strlen
(map->actions[i].data));
if (XTextWidth (defaults.font, map->actions[i].data, strlen
(map->actions[i].data)) > max_width)
@@ -3419,12 +3419,11 @@
gv.function = GXcopy;
gv.line_width = 1;
gv.subwindow_mode = IncludeInferiors;
- gv.font = defaults.font->fid;
XFreeGC (dpy, s->normal_gc);
s->normal_gc = XCreateGC(dpy, s->root,
GCForeground | GCBackground
| GCFunction | GCLineWidth
- | GCSubwindowMode | GCFont, &gv);
+ | GCSubwindowMode, &gv);
}
static void
@@ -3441,7 +3440,7 @@
static cmdret *
set_font (struct cmdarg **args)
{
- XFontStruct *font;
+ XFontSet font;
if (args[0] == NULL)
return cmdret_new (RET_SUCCESS, "%s", defaults.font_string);
@@ -3450,6 +3449,7 @@
if (font == NULL)
return cmdret_new (RET_FAILURE, "deffont: unknown font");
+ set_extents_of_fontset(font);
/* Save the font as the default. */
XFreeFont (dpy, defaults.font);
defaults.font = font;
diff -u /tmp/ratpoison-1.4.0/src/bar.c src/bar.c
--- /tmp/ratpoison-1.4.0/src/bar.c 2006-03-16 09:51:25.000000000 +0900
+++ src/bar.c 2006-04-03 10:37:27.000000000 +0900
@@ -308,7 +308,7 @@
{
XDrawString (dpy, s->bar_window, s->normal_gc,
defaults.bar_x_padding,
- defaults.bar_y_padding +
defaults.font->max_bounds.ascent
+ defaults.bar_y_padding + font_ascent
+ line_no * line_height,
msg + start, i - start);
line_no++;
@@ -319,7 +319,7 @@
/* Print the last line. */
XDrawString (dpy, s->bar_window, s->normal_gc,
defaults.bar_x_padding,
- defaults.bar_y_padding + defaults.font->max_bounds.ascent
+ defaults.bar_y_padding + font_ascent
+ line_no * line_height,
msg + start, strlen (msg) - start);
diff -u /tmp/ratpoison-1.4.0/src/data.h src/data.h
--- /tmp/ratpoison-1.4.0/src/data.h 2006-03-16 09:31:06.000000000 +0900
+++ src/data.h 2006-04-03 10:37:28.000000000 +0900
@@ -220,7 +220,7 @@
int padding_top;
int padding_bottom;
- XFontStruct *font;
+ XFontSet font;
char *font_string;
char *fgcolor_string;
diff -u /tmp/ratpoison-1.4.0/src/globals.c src/globals.c
--- /tmp/ratpoison-1.4.0/src/globals.c 2006-03-16 10:10:01.000000000 +0900
+++ src/globals.c 2006-04-03 10:37:28.000000000 +0900
@@ -32,6 +32,8 @@
char *rp_exec_newwm = NULL;
+int font_ascent, font_descent, font_width;
+
Atom wm_name;
Atom wm_state;
Atom wm_change_state;
diff -u /tmp/ratpoison-1.4.0/src/globals.h src/globals.h
--- /tmp/ratpoison-1.4.0/src/globals.h 2006-03-16 10:10:04.000000000 +0900
+++ src/globals.h 2006-04-03 10:38:11.000000000 +0900
@@ -27,8 +27,8 @@
#define RET_SUCCESS 1
#define RET_FAILURE 0
-#define FONT_HEIGHT(f) ((f)->max_bounds.ascent + (f)->max_bounds.descent)
-#define MAX_FONT_WIDTH(f) ((f)->max_bounds.width)
+#define FONT_HEIGHT(f) (font_ascent + font_descent)
+#define MAX_FONT_WIDTH(f) (font_width)
#define WIN_EVENTS (StructureNotifyMask | PropertyChangeMask |
ColormapChangeMask | FocusChangeMask)
/* EMPTY is used when a frame doesn't contain a window, or a window
@@ -67,6 +67,8 @@
extern struct rp_defaults defaults;
+extern int font_ascent, font_descent, font_width;
+
/* The prefix key also known as the command character under screen. */
extern struct rp_key prefix_key;
diff -u /tmp/ratpoison-1.4.0/src/input.c src/input.c
--- /tmp/ratpoison-1.4.0/src/input.c 2006-04-02 17:30:18.000000000 +0900
+++ src/input.c 2006-04-03 10:37:27.000000000 +0900
@@ -343,13 +343,13 @@
XDrawString (dpy, s->input_window, s->normal_gc,
defaults.bar_x_padding,
- defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+ defaults.bar_y_padding + font_ascent,
line->prompt,
strlen (line->prompt));
XDrawString (dpy, s->input_window, s->normal_gc,
defaults.bar_x_padding + prompt_width,
- defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+ defaults.bar_y_padding + font_ascent,
line->buffer,
line->length);
diff -u /tmp/ratpoison-1.4.0/src/main.c src/main.c
--- /tmp/ratpoison-1.4.0/src/main.c 2006-03-16 10:10:48.000000000 +0900
+++ src/main.c 2006-04-03 10:43:31.000000000 +0900
@@ -462,6 +462,17 @@
free (prefix);
}
+void
+set_extents_of_fontset(XFontSet font)
+{
+ XFontSetExtents *extent;
+ extent = XExtentsOfFontSet(font);
+ font_ascent = extent->max_logical_extent.height * 9 / 10;
+ font_descent = extent->max_logical_extent.height / 5;
+ font_width = extent->max_logical_extent.width;
+}
+
+
static void
init_defaults ()
{
@@ -492,6 +503,7 @@
exit (EXIT_FAILURE);
}
defaults.font_string = xstrdup (DEFAULT_FONT);
+ set_extents_of_fontset(defaults.font);
defaults.fgcolor_string = xstrdup ("black");
defaults.bgcolor_string = xstrdup ("white");
@@ -526,6 +538,7 @@
myargv = argv;
+ setlocale(LC_CTYPE, "");
/* Parse the arguments */
while (1)
{
@@ -759,3 +772,22 @@
XSetInputFocus (dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
XCloseDisplay (dpy);
}
+
+XFontSet XLoadQueryFontSet(Display *disp, const char *fontset_name)
+{
+ XFontSet fontset;
+ int missing_charset_count;
+ char **missing_charset_list;
+ char *def_string;
+
+ fontset = XCreateFontSet(disp, fontset_name,
+ &missing_charset_list, &missing_charset_count,
+ &def_string);
+ if (missing_charset_count) {
+#if 0
+ fprintf(stderr, "Missing charsets in FontSet(%s) creation.\n",
fontset_name);
+#endif
+ XFreeStringList(missing_charset_list);
+ }
+ return fontset;
+}
diff -u /tmp/ratpoison-1.4.0/src/manage.c src/manage.c
--- /tmp/ratpoison-1.4.0/src/manage.c 2006-03-16 09:31:34.000000000 +0900
+++ src/manage.c 2006-04-03 10:48:14.000000000 +0900
@@ -198,33 +198,29 @@
static char *
get_wmname (Window w)
{
- Atom actual_type;
- int actual_format;
- int status;
- unsigned long n;
- unsigned long bytes_after;
unsigned char *name = NULL;
char *ret;
-
- status = XGetWindowProperty (dpy, w, wm_name, 0L, 100L, False,
- XA_STRING, &actual_type, &actual_format,
- &n, &bytes_after, &name);
-
- PRINT_DEBUG (("XGetWindowProperty: %d %ld %d %ld %ld '%s'\n", status,
actual_type,
- actual_format, n, bytes_after, name));
-
- if (status != Success || name == NULL)
- {
- PRINT_DEBUG (("I can't get the WMName.\n"));
- return NULL;
- }
-
- if (n == 0)
- {
- PRINT_DEBUG (("I can't get the WMName.\n"));
- XFree (name);
- return NULL;
- }
+ XTextProperty text_prop;
+ int n;
+ char** cl;
+
+ if (XGetWMName(dpy, w, &text_prop) != 0) {
+ if (text_prop.encoding == XA_STRING) {
+ name = (char *)text_prop.value;
+ } else {
+ XmbTextPropertyToTextList(dpy, &text_prop, &cl, &n);
+ if (cl) {
+ name = strdup(cl[0]);
+ XFreeStringList(cl);
+ } else {
+ PRINT_DEBUG (("I can't get the WMName.\n"));
+ return NULL;
+ }
+ }
+ } else {
+ PRINT_DEBUG (("I can't get the WMName.\n"));
+ return NULL;
+ }
PRINT_DEBUG (("WM_NAME: '%s'\n", name));
diff -u /tmp/ratpoison-1.4.0/src/ratpoison.h src/ratpoison.h
--- /tmp/ratpoison-1.4.0/src/ratpoison.h 2006-03-16 09:31:41.000000000
+0900
+++ src/ratpoison.h 2006-04-03 10:48:13.000000000 +0900
@@ -31,6 +31,7 @@
#include <stdarg.h>
#include <string.h>
#include <X11/Xlib.h>
+#include <X11/Xlocale.h>
#include <X11/Xatom.h>
#include <fcntl.h>
@@ -102,6 +103,14 @@
char *xsprintf (char *fmt, ...);
char *xvsprintf (char *fmt, va_list ap);
int str_comp (char *s1, char *s2, int len);
+
+#define XLoadQueryFont XLoadQueryFontSet
+XFontSet XLoadQueryFontSet(Display *, const char *);
+#define XFreeFont XFreeFontSet
+void set_extents_of_fontset (XFontSet font);
+#define XTextWidth XmbTextEscapement
+#define XDrawString(d,w,gc,x,y,s,l)
XmbDrawString(d,w,defaults.font,gc,x,y,s,l)
+
/* Needed in cmd_tmpwm */
void check_child_procs ();
void chld_handler (int signum);
diff -u /tmp/ratpoison-1.4.0/src/screen.c src/screen.c
--- /tmp/ratpoison-1.4.0/src/screen.c 2006-03-16 10:27:29.000000000 +0900
+++ src/screen.c 2006-04-03 10:51:37.000000000 +0900
@@ -308,10 +308,9 @@
gv.function = GXcopy;
gv.line_width = 1;
gv.subwindow_mode = IncludeInferiors;
- gv.font = defaults.font->fid;
s->normal_gc = XCreateGC(dpy, s->root,
GCForeground | GCBackground | GCFunction
- | GCLineWidth | GCSubwindowMode | GCFont,
+ | GCLineWidth | GCSubwindowMode,
&gv);
/* Create the program bar window. */
diff -u /tmp/ratpoison-1.4.0/src/split.c src/split.c
--- /tmp/ratpoison-1.4.0/src/split.c 2006-03-16 09:31:44.000000000 +0900
+++ src/split.c 2006-04-03 10:37:26.000000000 +0900
@@ -937,7 +937,7 @@
XDrawString (dpy, s->frame_window, s->normal_gc,
defaults.bar_x_padding,
- defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+ defaults.bar_y_padding + font_ascent,
msg, strlen (msg));
}
--
rubikitch
http://www.rubyist.net/~rubikitch/