Mercurial > emacs
view src/=XTests.c @ 12505:0f970ed476cb
restructured, largely rewritten without the bugs and
extended to cover over 15 shells. Most variables can now work as a
lookup table, and, unless set by user, do.
(sh-mode-syntax-table): Possibly multiple tables.
(sh-shell): Set initially so shell or other libraries may use features.
(sh-assignment-regexp): Replaces `sh-assignment-space'.
(sh-here-document-word): Set to more common "EOF".
(sh-variables): Changed semantics.
(sh-font-lock-keywords): Much nicer.
(sh-ancestor-alist, sh-alias-alist, sh-shells, sh-abbrevs)
(sh-dynamic-complete-functions, sh-require-final-newline)
(sh-comment-prefix, sh-indentation, sh-header-marker, sh-builtins)
(sh-leading-keywords): New variables.
(sh-use-prefix, sh-find-file-modifies, sh-query-for-magic)
(sh-magicless-file-regexp, magic-number-alist, sh-executable)
(sh-chmod-argument, sh-shell-is-csh, sh-tab-width)
(sh-sh-font-lock-keywords, sh-ksh-font-lock-keywords)
(sh-bash-font-lock-keywords, sh-csh-font-lock-keywords)
(sh-tcsh-font-lock-keywords): Variables deleted, see also executable.el.
(sh-mode): Shell dependent code moved to `sh-set-shell'.
(sh-feature, sh-abbrevs, sh-syntax-table, sh-append, sh-modify): New
functions.
(sh-execute-region): New command.
(sh-indexed-loop): Far more efficient code generated for sh.
(sh-repeat, sh-tmp-file, sh-while-getopts): New skeletons.
(sh-or-other-mode, define-sh-skeleton, sh-executable, sh-chmod)
(sh-query-for-variable): Command deleted.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Fri, 07 Jul 1995 19:48:24 +0000 (1995-07-07) |
parents | 3165b2697c78 |
children |
line wrap: on
line source
#include <X11/Xlib.h> #include <X11/X.h> #include <X11/Xutil.h> #include <X11/Xresource.h> #include "XTests.h" #include <stdio.h> static Display *dpy; static void quit (dpy) Display *dpy; { XCloseDisplay (dpy); exit (0); } static Colormap screen_colormap; static unsigned long obtain_color (color) char *color; { int exists; XColor color_def; if (!screen_colormap) screen_colormap = DefaultColormap (dpy, DefaultScreen (dpy)); exists = XParseColor (dpy, screen_colormap, color, &color_def) && XAllocColor (dpy, screen_colormap, &color_def); if (exists) return color_def.pixel; fprintf (stderr, "Can't get color; using black."); return BlackPixel (dpy, DefaultScreen (dpy)); } static char *visual_strings[] = { "StaticGray ", "GrayScale ", "StaticColor", "PseudoColor", "TrueColor ", "DirectColor" }; main (argc,argv) int argc; char *argv[]; { char *dpy_string; int n; long mask; Visual *my_visual; XVisualInfo *vinfo, visual_template; XEvent event; Window window; Screen *scr; XGCValues gc_values; GC fill_gc, pix_gc, line_xor_gc, line_xor_inv_gc; int i; int x, y, width, height, geometry, gravity; char *geo; char default_geo[] = "80x40+0+0"; int depth; Pixmap pix; char *string = "Kill the head and the body will die."; char dash_list[] = {4, 4}; int dashes = 2; if (argc < 2) dpy_string = "localhost:0.0"; else dpy_string = argv[1]; if (argc >= 3) { XSizeHints hints; printf ("Geometry: %s\t(default: %s)\n", argv[2], default_geo); geo = argv[2]; XWMGeometry (dpy, DefaultScreen (dpy), geo, default_geo, 3, &hints, &x, &y, &width, &height, &gravity); } dpy = XOpenDisplay (dpy_string); if (!dpy) { printf ("Can' open display %s\n", dpy_string); exit (1); } window = XCreateSimpleWindow (dpy, DefaultRootWindow (dpy), 300, 300, 300, 300, 1, BlackPixel (dpy, DefaultScreen (dpy)), WhitePixel (dpy, DefaultScreen (dpy))); XSelectInput (dpy, window, ButtonPressMask | KeyPressMask | EnterWindowMask | LeaveWindowMask); gc_values.foreground = obtain_color ("blue"); gc_values.background = WhitePixel (dpy, DefaultScreen (dpy)); fill_gc = XCreateGC (dpy, window, GCForeground | GCBackground, &gc_values); gc_values.foreground = obtain_color ("red"); gc_values.line_width = 3; gc_values.line_style = LineOnOffDash; gc_values.cap_style = CapRound; gc_values.join_style = JoinRound; line_xor_gc = XCreateGC (dpy, window, GCForeground | GCBackground | GCLineStyle | GCJoinStyle | GCCapStyle | GCLineWidth, &gc_values); XSetDashes (dpy, line_xor_gc, 0, dash_list, dashes); line_xor_inv_gc = XCreateGC (dpy, window, GCForeground | GCBackground | GCLineWidth, &gc_values); depth = DefaultDepthOfScreen (ScreenOfDisplay (dpy, DefaultScreen (dpy))); pix = XCreateBitmapFromData (dpy, window, page_glyf_bits, page_glyf_width, page_glyf_height); XMapWindow (dpy, window); XFlush (dpy); while (1) { XNextEvent (dpy, &event); switch (event.type) { case ButtonPress: switch (event.xbutton.button) { case Button1: XDrawLine (dpy, window, line_xor_gc, 25, 75, 300, 75); break; case Button2: XDrawLine (dpy, window, line_xor_inv_gc, 25, 25, 300, 25); break; case Button3: XDrawLine (dpy, window, line_xor_gc, 25, 25, 25, 125); break; } break; case KeyPress: { char buf[20]; int n; XComposeStatus status; KeySym keysym; n = XLookupString (&event, buf, 20, &keysym, (XComposeStatus *) &status); if (n == 1 && buf[0] == 'q') quit (dpy); } break; case EnterNotify: XCopyPlane (dpy, pix, window, fill_gc, 0, 0, page_glyf_width, page_glyf_height, 100, 100, 1L); XFillRectangle (dpy, window, fill_gc, 50, 50, 50, 50); break; case LeaveNotify: XClearWindow (dpy, window); break; } XFlush (dpy); } }