From d39fc962b516427bb903ce22ee8ea44a08ba2f22 Mon Sep 17 00:00:00 2001 From: oehhar Date: Tue, 11 Dec 2018 10:21:08 +0000 Subject: TIP529 image metadata: create -metadata option --- generic/tkImgPhoto.c | 103 ++++++++++++++++++++++++++++++++++++++++++++------- generic/tkImgPhoto.h | 2 + 2 files changed, 92 insertions(+), 13 deletions(-) diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index e1d54dd..a42c129 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -39,6 +39,7 @@ struct SubcommandOptions { XColor *background; /* Value specified for -background option. */ int compositingRule; /* Value specified for -compositingrule * option. */ + Tcl_Obj *metadata; /* Value specified for -metadata option. */ }; /* @@ -59,6 +60,7 @@ struct SubcommandOptions { * OPT_TO: Set if -to option allowed/specified. * OPT_WITHALPHA: Set if -withalpha option allowed/specified. * OPT_ZOOM: Set if -zoom option allowed/specified. + * OPT_METADATA: Set if -metadata option allowed/specified. */ #define OPT_ALPHA 1 @@ -72,6 +74,7 @@ struct SubcommandOptions { #define OPT_TO 0x100 #define OPT_WITHALPHA 0x200 #define OPT_ZOOM 0x400 +#define OPT_METADATA 0x800 /* * List of option names. The order here must match the order of declarations @@ -90,6 +93,7 @@ static const char *const optionNames[] = { "-to", "-withalpha", "-zoom", + "-metadata", NULL }; @@ -457,7 +461,11 @@ ImgPhotoCmd( if (masterPtr->format) { Tcl_SetObjResult(interp, masterPtr->format); } - } else { + } else if (strncmp(arg, "-metadata", length) == 0) { + if (masterPtr->metadata) { + Tcl_SetObjResult(interp, masterPtr->metadata); + } + } else { Tk_ConfigureValue(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, Tcl_GetString(objv[2]), 0); } @@ -492,7 +500,14 @@ ImgPhotoCmd( Tcl_AppendStringsToObj(subobj, " {}", NULL); } Tcl_ListObjAppendElement(interp, obj, subobj); - Tcl_ListObjAppendList(interp, obj, Tcl_GetObjResult(interp)); + subobj = Tcl_NewStringObj("-metadata {} {} {}", 16); + if (masterPtr->metadata) { + Tcl_ListObjAppendElement(NULL, subobj, masterPtr->metadata); + } else { + Tcl_AppendStringsToObj(subobj, " {}", NULL); + } + Tcl_ListObjAppendElement(interp, obj, subobj); + Tcl_ListObjAppendList(interp, obj, Tcl_GetObjResult(interp)); Tcl_SetObjResult(interp, obj); return TCL_OK; @@ -526,7 +541,22 @@ ImgPhotoCmd( Tcl_AppendResult(interp, " {}", NULL); } return TCL_OK; - } else { + } else if (length > 1 && + !strncmp(arg, "-metadata", length)) { + Tcl_AppendResult(interp, "-metadata {} {} {}", NULL); + if (masterPtr->metadata) { + /* + * TODO: Modifying result is bad! + */ + + Tcl_ListObjAppendElement(NULL, Tcl_GetObjResult(interp), + masterPtr->metadata); + } + else { + Tcl_AppendResult(interp, " {}", NULL); + } + return TCL_OK; + } else { return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, arg, 0); } @@ -683,7 +713,8 @@ ImgPhotoCmd( options.fromX = 0; options.fromY = 0; if (ParseSubcommandOptions(&options, interp, - OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND, + OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND + | OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -868,7 +899,8 @@ ImgPhotoCmd( memset(&options, 0, sizeof(options)); options.name = NULL; options.format = NULL; - if (ParseSubcommandOptions(&options, interp, OPT_TO|OPT_FORMAT, + if (ParseSubcommandOptions(&options, interp, + OPT_TO|OPT_FORMAT|OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -933,7 +965,7 @@ ImgPhotoCmd( options.name = NULL; options.format = NULL; if (ParseSubcommandOptions(&options, interp, - OPT_FORMAT | OPT_FROM | OPT_TO | OPT_SHRINK, + OPT_FORMAT | OPT_FROM | OPT_TO | OPT_SHRINK | OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -1282,7 +1314,8 @@ ImgPhotoCmd( options.name = NULL; options.format = NULL; if (ParseSubcommandOptions(&options, interp, - OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND, + OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND + | OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -1441,8 +1474,8 @@ GetExtension( * * This function is invoked to process one of the options which may be * specified for the photo image subcommands, namely, -from, -to, -zoom, - * -subsample, -format, -shrink, -compositingrule, -alpha, -boolean and - * -withalpha. + * -subsample, -format, -shrink, -compositingrule, -alpha, -boolean, + * -withalpha and -metadata. * Parsing starts at the index in *optIndexPtr and stops at the end of * objv[] or at the first value that does not belong to an option. * @@ -1560,7 +1593,18 @@ ParseSubcommandOptions( } *optIndexPtr = ++index; optPtr->format = objv[index]; - } else if (bit == OPT_COMPOSITE) { + } else if (bit == OPT_METADATA) { + /* + * The -metadata option takes a single dict value. Note that + * parsing this is outside the scope of this function. + */ + + if (index + 1 >= objc) { + goto oneValueRequired; + } + *optIndexPtr = ++index; + optPtr->metadata = objv[index]; + } else if (bit == OPT_COMPOSITE) { /* * The -compositingrule option takes a single value from a * well-known set. @@ -1756,7 +1800,7 @@ ImgPhotoConfigureMaster( { PhotoInstance *instancePtr; const char *oldFileString, *oldPaletteString; - Tcl_Obj *oldData, *data = NULL, *oldFormat, *format = NULL; + Tcl_Obj *oldData, *data = NULL, *oldFormat, *format = NULL, *metadata = NULL; Tcl_Obj *tempdata, *tempformat; size_t length; int i, j, result, imageWidth, imageHeight, oldformat; @@ -1795,7 +1839,21 @@ ImgPhotoConfigureMaster( "MISSING_VALUE", NULL); return TCL_ERROR; } - } + } else if ((args[j][1] == 'm') && + !strncmp(args[j], "-metadata", length)) { + if (++i < objc) { + metadata = objv[i]; + j--; + } + else { + ckfree(args); + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "value for \"-metadata\" missing", -1)); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PHOTO", + "MISSING_VALUE", NULL); + return TCL_ERROR; + } + } } } @@ -1834,7 +1892,7 @@ ImgPhotoConfigureMaster( ckfree(args); /* - * Regard the empty string for -file, -data or -format as the null value. + * Regard the empty string for -file, -data, -format or -metadata as the null value. */ if ((masterPtr->fileString != NULL) && (masterPtr->fileString[0] == 0)) { @@ -1876,6 +1934,25 @@ ImgPhotoConfigureMaster( } masterPtr->format = format; } + if (metadata) { + /* + * Stringify to ignore -metadata "". It may come in as a list or other + * object. + */ + + /* HaO: ToDo: value is a dict, not a string */ + (void)Tcl_GetString(metadata); + if (metadata->length) { + Tcl_IncrRefCount(metadata); + } + else { + metadata = NULL; + } + if (masterPtr->metadata) { + Tcl_DecrRefCount(masterPtr->metadata); + } + masterPtr->metadata = metadata; + } /* * Set the image to the user-requested size, if any, and make sure storage * is correctly allocated for this image. diff --git a/generic/tkImgPhoto.h b/generic/tkImgPhoto.h index a84ebb3..8538bfe 100644 --- a/generic/tkImgPhoto.h +++ b/generic/tkImgPhoto.h @@ -165,6 +165,8 @@ struct PhotoMaster { Tcl_Obj *dataString; /* Object to use as contents of image. */ Tcl_Obj *format; /* User-specified format of data in image file * or string value. */ + Tcl_Obj *metadata; /* User-specified metadata dict or read from + * image file */ unsigned char *pix32; /* Local storage for 32-bit image. */ int ditherX, ditherY; /* Location of first incorrectly dithered * pixel in image. */ -- cgit v0.12 From b66ce2e9ac5df781a14e9b3475a08966acb50340 Mon Sep 17 00:00:00 2001 From: oehhar Date: Tue, 11 Dec 2018 10:35:53 +0000 Subject: Corrected indents and formatting --- generic/tkImgPhoto.c | 150 +++++++++++++++++++++++++-------------------------- generic/tkImgPhoto.h | 2 +- 2 files changed, 75 insertions(+), 77 deletions(-) diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index a42c129..7d3c3d9 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -461,11 +461,11 @@ ImgPhotoCmd( if (masterPtr->format) { Tcl_SetObjResult(interp, masterPtr->format); } - } else if (strncmp(arg, "-metadata", length) == 0) { - if (masterPtr->metadata) { - Tcl_SetObjResult(interp, masterPtr->metadata); - } - } else { + } else if (strncmp(arg, "-metadata", length) == 0) { + if (masterPtr->metadata) { + Tcl_SetObjResult(interp, masterPtr->metadata); + } + } else { Tk_ConfigureValue(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, Tcl_GetString(objv[2]), 0); } @@ -500,14 +500,14 @@ ImgPhotoCmd( Tcl_AppendStringsToObj(subobj, " {}", NULL); } Tcl_ListObjAppendElement(interp, obj, subobj); - subobj = Tcl_NewStringObj("-metadata {} {} {}", 16); - if (masterPtr->metadata) { - Tcl_ListObjAppendElement(NULL, subobj, masterPtr->metadata); - } else { - Tcl_AppendStringsToObj(subobj, " {}", NULL); - } - Tcl_ListObjAppendElement(interp, obj, subobj); - Tcl_ListObjAppendList(interp, obj, Tcl_GetObjResult(interp)); + subobj = Tcl_NewStringObj("-metadata {} {} {}", 16); + if (masterPtr->metadata) { + Tcl_ListObjAppendElement(NULL, subobj, masterPtr->metadata); + } else { + Tcl_AppendStringsToObj(subobj, " {}", NULL); + } + Tcl_ListObjAppendElement(interp, obj, subobj); + Tcl_ListObjAppendList(interp, obj, Tcl_GetObjResult(interp)); Tcl_SetObjResult(interp, obj); return TCL_OK; @@ -541,22 +541,21 @@ ImgPhotoCmd( Tcl_AppendResult(interp, " {}", NULL); } return TCL_OK; - } else if (length > 1 && - !strncmp(arg, "-metadata", length)) { - Tcl_AppendResult(interp, "-metadata {} {} {}", NULL); - if (masterPtr->metadata) { - /* - * TODO: Modifying result is bad! - */ - - Tcl_ListObjAppendElement(NULL, Tcl_GetObjResult(interp), - masterPtr->metadata); - } - else { - Tcl_AppendResult(interp, " {}", NULL); - } - return TCL_OK; - } else { + } else if (length > 1 && + !strncmp(arg, "-metadata", length)) { + Tcl_AppendResult(interp, "-metadata {} {} {}", NULL); + if (masterPtr->metadata) { + /* + * TODO: Modifying result is bad! + */ + + Tcl_ListObjAppendElement(NULL, Tcl_GetObjResult(interp), + masterPtr->metadata); + } else { + Tcl_AppendResult(interp, " {}", NULL); + } + return TCL_OK; + } else { return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, arg, 0); } @@ -714,7 +713,7 @@ ImgPhotoCmd( options.fromY = 0; if (ParseSubcommandOptions(&options, interp, OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND - | OPT_METADATA, + | OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -900,7 +899,7 @@ ImgPhotoCmd( options.name = NULL; options.format = NULL; if (ParseSubcommandOptions(&options, interp, - OPT_TO|OPT_FORMAT|OPT_METADATA, + OPT_TO|OPT_FORMAT|OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -1315,7 +1314,7 @@ ImgPhotoCmd( options.format = NULL; if (ParseSubcommandOptions(&options, interp, OPT_FORMAT | OPT_FROM | OPT_GRAYSCALE | OPT_BACKGROUND - | OPT_METADATA, + | OPT_METADATA, &index, objc, objv) != TCL_OK) { return TCL_ERROR; } @@ -1593,18 +1592,18 @@ ParseSubcommandOptions( } *optIndexPtr = ++index; optPtr->format = objv[index]; - } else if (bit == OPT_METADATA) { - /* - * The -metadata option takes a single dict value. Note that - * parsing this is outside the scope of this function. - */ - - if (index + 1 >= objc) { - goto oneValueRequired; - } - *optIndexPtr = ++index; - optPtr->metadata = objv[index]; - } else if (bit == OPT_COMPOSITE) { + } else if (bit == OPT_METADATA) { + /* + * The -metadata option takes a single dict value. Note that + * parsing this is outside the scope of this function. + */ + + if (index + 1 >= objc) { + goto oneValueRequired; + } + *optIndexPtr = ++index; + optPtr->metadata = objv[index]; + } else if (bit == OPT_COMPOSITE) { /* * The -compositingrule option takes a single value from a * well-known set. @@ -1839,21 +1838,20 @@ ImgPhotoConfigureMaster( "MISSING_VALUE", NULL); return TCL_ERROR; } - } else if ((args[j][1] == 'm') && - !strncmp(args[j], "-metadata", length)) { - if (++i < objc) { - metadata = objv[i]; - j--; - } - else { - ckfree(args); - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "value for \"-metadata\" missing", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PHOTO", - "MISSING_VALUE", NULL); - return TCL_ERROR; - } - } + } else if ((args[j][1] == 'm') && + !strncmp(args[j], "-metadata", length)) { + if (++i < objc) { + metadata = objv[i]; + j--; + } else { + ckfree(args); + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "value for \"-metadata\" missing", -1)); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PHOTO", + "MISSING_VALUE", NULL); + return TCL_ERROR; + } + } } } @@ -1935,23 +1933,23 @@ ImgPhotoConfigureMaster( masterPtr->format = format; } if (metadata) { - /* - * Stringify to ignore -metadata "". It may come in as a list or other - * object. - */ - - /* HaO: ToDo: value is a dict, not a string */ - (void)Tcl_GetString(metadata); - if (metadata->length) { - Tcl_IncrRefCount(metadata); - } - else { - metadata = NULL; - } - if (masterPtr->metadata) { - Tcl_DecrRefCount(masterPtr->metadata); - } - masterPtr->metadata = metadata; + /* + * Stringify to ignore -metadata "". It may come in as a list or other + * object. + */ + + /* HaO: ToDo: value is a dict, not a string */ + (void)Tcl_GetString(metadata); + if (metadata->length) { + Tcl_IncrRefCount(metadata); + } + else { + metadata = NULL; + } + if (masterPtr->metadata) { + Tcl_DecrRefCount(masterPtr->metadata); + } + masterPtr->metadata = metadata; } /* * Set the image to the user-requested size, if any, and make sure storage diff --git a/generic/tkImgPhoto.h b/generic/tkImgPhoto.h index 8538bfe..2554cf8 100644 --- a/generic/tkImgPhoto.h +++ b/generic/tkImgPhoto.h @@ -166,7 +166,7 @@ struct PhotoMaster { Tcl_Obj *format; /* User-specified format of data in image file * or string value. */ Tcl_Obj *metadata; /* User-specified metadata dict or read from - * image file */ + * image file */ unsigned char *pix32; /* Local storage for 32-bit image. */ int ditherX, ditherY; /* Location of first incorrectly dithered * pixel in image. */ -- cgit v0.12 From 15b1bfd5ec8b414572582b32de550799bae3e803 Mon Sep 17 00:00:00 2001 From: oehhar Date: Fri, 14 Dec 2018 14:09:43 +0000 Subject: Implemented metadata output of gif comment - crashes test image-15.1 - megadata write with Tk_PhotoGetMetadata does not work, as the photo handle is not available within the write function. --- generic/tk.decls | 8 +++ generic/tkDecls.h | 12 +++- generic/tkImgGIF.c | 182 +++++++++++++++++++++++++++++++++++++++++++-------- generic/tkImgPhoto.c | 66 +++++++++++++++++++ generic/tkStubInit.c | 2 + 5 files changed, 241 insertions(+), 29 deletions(-) diff --git a/generic/tk.decls b/generic/tk.decls index 9619416..9ab13b2 100644 --- a/generic/tk.decls +++ b/generic/tk.decls @@ -1068,6 +1068,14 @@ declare 272 { declare 273 { void Tk_CreateOldPhotoImageFormat(const Tk_PhotoImageFormat *formatPtr) } +# New in Tk8.7 +declare 274 { + Tcl_Obj *Tk_PhotoGetMetadata(Tk_PhotoHandle handle); +} +declare 275 { + void Tk_PhotoSetMetadata(Tk_PhotoHandle handle,Tcl_Obj *metadata); +} + # Define the platform specific public Tk interface. These functions are # only available on the designated platform. diff --git a/generic/tkDecls.h b/generic/tkDecls.h index 0d52f2f..6edcdaa 100644 --- a/generic/tkDecls.h +++ b/generic/tkDecls.h @@ -878,7 +878,11 @@ EXTERN void Tk_CreateOldImageType(const Tk_ImageType *typePtr); /* 273 */ EXTERN void Tk_CreateOldPhotoImageFormat( const Tk_PhotoImageFormat *formatPtr); - +/* 274 */ +EXTERN Tcl_Obj *Tk_PhotoGetMetadata(Tk_PhotoHandle handle); +/* 275 */ +EXTERN void Tk_PhotoSetMetadata(Tk_PhotoHandle handle,Tcl_Obj *metadata); + typedef struct { const struct TkPlatStubs *tkPlatStubs; const struct TkIntStubs *tkIntStubs; @@ -1164,6 +1168,8 @@ typedef struct TkStubs { Tcl_Interp * (*tk_Interp) (Tk_Window tkwin); /* 271 */ void (*tk_CreateOldImageType) (const Tk_ImageType *typePtr); /* 272 */ void (*tk_CreateOldPhotoImageFormat) (const Tk_PhotoImageFormat *formatPtr); /* 273 */ + Tcl_Obj *(*tk_PhotoGetMetadata) (Tk_PhotoHandle handle); /* 274 */ + void (*tk_PhotoSetMetadata) (Tk_PhotoHandle handle,Tcl_Obj *metadata); /* 275 */ } TkStubs; extern const TkStubs *tkStubsPtr; @@ -1724,6 +1730,10 @@ extern const TkStubs *tkStubsPtr; (tkStubsPtr->tk_CreateOldImageType) /* 272 */ #define Tk_CreateOldPhotoImageFormat \ (tkStubsPtr->tk_CreateOldPhotoImageFormat) /* 273 */ +#define Tk_PhotoGetMetadata \ + (tkStubsPtr->tk_PhotoGetMetadata) /* 274 */ +#define Tk_PhotoSetMetadata \ + (tkStubsPtr->tk_PhotoSetMetadata) /* 275 */ #endif /* defined(USE_TK_STUBS) */ diff --git a/generic/tkImgGIF.c b/generic/tkImgGIF.c index aacde56..c3a0321 100644 --- a/generic/tkImgGIF.c +++ b/generic/tkImgGIF.c @@ -165,9 +165,11 @@ Tk_PhotoImageFormat tkImgFmtGIF = { * Prototypes for local functions defined in this file: */ +static int ReadOneByte(Tcl_Interp *interp, + GIFImageConfig *gifConfPtr, Tcl_Channel chan); static int DoExtension(GIFImageConfig *gifConfPtr, Tcl_Channel chan, int label, unsigned char *buffer, - int *transparent); + int *transparent, Tcl_Obj *metadata); static int GetCode(Tcl_Channel chan, int code_size, int flag, GIFImageConfig *gifConfPtr); static int GetDataBlock(GIFImageConfig *gifConfPtr, @@ -399,6 +401,8 @@ FileReadGIF( unsigned char buf[100]; unsigned char *trashBuffer = NULL; int bitPixel; + Tcl_Obj *metadata; + int gifLabel; unsigned char colorMap[MAXCOLORMAPSIZE][4]; int transparent = -1; static const char *const optionStrings[] = { @@ -499,25 +503,28 @@ FileReadGIF( destX + width, destY + height) != TCL_OK) { return TCL_ERROR; } + + /* + * ------------------------------------------------------------------------- + * From here on, go to error to not leave memory leaks + * ------------------------------------------------------------------------- + */ /* + * Initialize the metadata dict + */ + metadata = Tcl_NewDictObj(); + + /* * Search for the frame from the GIF to display. */ while (1) { - if (Fread(gifConfPtr, buf, 1, 1, chan) != 1) { - /* - * Premature end of image. - */ - - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "premature end of image data for this index", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", - NULL); + if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { goto error; } - switch (buf[0]) { + switch (gifLabel) { case GIF_TERMINATOR: Tcl_SetObjResult(interp, Tcl_NewStringObj( "no image data for this index", -1)); @@ -529,16 +536,11 @@ FileReadGIF( * This is a GIF extension. */ - if (Fread(gifConfPtr, buf, 1, 1, chan) != 1) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "error reading extension function code in GIF image", - -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "BAD_EXT", - NULL); + if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { goto error; } - if (DoExtension(gifConfPtr, chan, buf[0], - gifConfPtr->workingBuffer, &transparent) < 0) { + if (DoExtension(gifConfPtr, chan, gifLabel, + gifConfPtr->workingBuffer, &transparent, metadata) < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "error reading extension in GIF image", -1)); Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "BAD_EXT", @@ -716,9 +718,72 @@ FileReadGIF( * which suits as well). We're done. */ + /* + * Read final zero + */ + if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { + goto error; + } + if (gifLabel != '\0') { + /* + * Premature end of image. + */ + + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "no image data termination", -1)); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", + NULL); + goto error; + } + while (1) { + if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { + goto error; + } + switch (gifLabel) { + case GIF_TERMINATOR: + break; + + case GIF_EXTENSION: + /* + * This is a GIF extension. + */ + + if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { + goto error; + } + if (DoExtension(gifConfPtr, chan, gifLabel, + gifConfPtr->workingBuffer, &transparent, metadata) < 0) { + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "error reading extension in GIF image", -1)); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "BAD_EXT", + NULL); + goto error; + } + continue; + case GIF_START: + /* + * There should not be a second image block - bail out without error + */ + break; + default: + /* + * Not a valid start character; ignore it. + */ + + continue; + } + break; + } + Tcl_SetObjResult(interp, Tcl_NewStringObj(tkImgFmtGIF.name, -1)); result = TCL_OK; + /* + * Set the metadata object. + * This increments the ref count + */ + Tk_PhotoSetMetadata(imageHandle, metadata); + error: /* * If a trash buffer has been allocated, free it now. @@ -727,9 +792,54 @@ FileReadGIF( if (trashBuffer != NULL) { ckfree(trashBuffer); } + + /* + * free the metadata object in case of error. + * Otherwise, it is not freed as the ref count was incremented above. + */ + Tcl_IncrRefCount(metadata); return result; } + +/* + *---------------------------------------------------------------------- + * + * Read one Byte -- + * + * Read one byte (label byte) from the image stream. + * + * Results: + * The return value is 1 if the first characters in the data are like GIF + * data, and 0 otherwise. + * + * Side effects: + * The size of the image is placed in widthPtr and heightPtr. + * + *---------------------------------------------------------------------- + */ + +static int +ReadOneByte( + Tcl_Interp *interp, /* Interpreter to use for reporting errors. */ + GIFImageConfig *gifConfPtr, + Tcl_Channel chan /* The image file, open for reading. */ + ) +{ + unsigned char buf[2]; + if (Fread(gifConfPtr, buf, 1, 1, chan) != 1) { + /* + * Premature end of image. + */ + + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "premature end of image data", -1)); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", NULL); + return -1; + } + return buf[0]; +} + /* *---------------------------------------------------------------------- * @@ -748,6 +858,7 @@ FileReadGIF( *---------------------------------------------------------------------- */ + static int StringMatchGIF( Tcl_Obj *dataObj, /* the object containing the image data */ @@ -937,9 +1048,13 @@ DoExtension( Tcl_Channel chan, int label, unsigned char *buf, - int *transparent) + int *transparent, + Tcl_Obj *metadata) { int count; + Tcl_Obj *metadataData; + int length; + unsigned char *bytePtr; switch (label) { case 0x01: /* Plain Text Extension */ @@ -949,24 +1064,35 @@ DoExtension( break; case 0xfe: /* Comment Extension */ - do { - count = GetDataBlock(gifConfPtr, chan, buf); - } while (count > 0); + length = 0; + while ( 0 < + (count = GetDataBlock(gifConfPtr, chan, buf)) ) { + if (length == 0) { + metadataData = Tcl_NewByteArrayObj(buf, count); + } else { + bytePtr = Tcl_SetByteArrayLength(metadataData, length+count); + memcpy(bytePtr+length,buf,count); + } + length += count; + } + if (length > 0) { + if ( TCL_OK != Tcl_DictObjPut(NULL, metadata, + Tcl_NewStringObj("comment",-1), metadataData)) { + return -1; + } + } return count; case 0xf9: /* Graphic Control Extension */ count = GetDataBlock(gifConfPtr, chan, buf); if (count < 0) { + /* HaO: return 1 on file read error will not show error - why ? */ return 1; } if ((buf[0] & 0x1) != 0) { *transparent = buf[3]; } - - do { - count = GetDataBlock(gifConfPtr, chan, buf); - } while (count > 0); - return count; + break; } do { diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index 7d3c3d9..ba78be1 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -3804,6 +3804,72 @@ Tk_PhotoSetSize( /* *---------------------------------------------------------------------- * + * Tk_PhotoGetMetadata -- + * + * This function is called to obtain the metadata object of a photo + * image. + * + * Results: + * The image's metadata object pointer. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_Obj * +Tk_PhotoGetMetadata( + Tk_PhotoHandle handle) /* Handle for the image whose dimensions are + * requested. */ +{ + PhotoMaster *masterPtr = (PhotoMaster *) handle; + + return masterPtr->metadata; +} + +/* + *---------------------------------------------------------------------- + * + * Tk_PhotoSetMetadata -- + * + * This function is called to obtain to set the metadata object of a + * photo image. + * + * Results: + * None + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +void +Tk_PhotoSetMetadata( + Tk_PhotoHandle handle, /* Handle for the image whose dimensions are + * requested. */ + Tcl_Obj *metadata) +{ + PhotoMaster *masterPtr = (PhotoMaster *) handle; + /* + * Free current object if present + */ + if(masterPtr->metadata != NULL) { + Tcl_DecrRefCount(masterPtr->metadata); + } + /* + * Increment ref count of new object to get it + */ + if (metadata != NULL) { + Tcl_IncrRefCount(metadata); + } + masterPtr->metadata = metadata; +} + +/* + *---------------------------------------------------------------------- + * * TkGetPhotoValidRegion -- * * This function is called to get the part of the photo where there is diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c index 731fa50..a6e9728 100644 --- a/generic/tkStubInit.c +++ b/generic/tkStubInit.c @@ -1180,6 +1180,8 @@ const TkStubs tkStubs = { Tk_Interp, /* 271 */ Tk_CreateOldImageType, /* 272 */ Tk_CreateOldPhotoImageFormat, /* 273 */ + Tk_PhotoGetMetadata, /* 274 */ + Tk_PhotoSetMetadata, /* 275 */ }; /* !END!: Do not edit above this line. */ -- cgit v0.12 From 1898d612bd82c5d1fcfd88610c71f98b09b78005 Mon Sep 17 00:00:00 2001 From: oehhar Date: Fri, 1 Feb 2019 18:15:55 +0000 Subject: Fix a bug also present in standard Tk: Trailing segments of image data are not skipped, final 0 byte is not skipped, -index over 1 should not work IMHO. --- generic/tkImgGIF.c | 37 +++++++++++++++++++------------------ generic/tkImgPhoto.c | 3 +++ 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/generic/tkImgGIF.c b/generic/tkImgGIF.c index c3a0321..480d52b 100644 --- a/generic/tkImgGIF.c +++ b/generic/tkImgGIF.c @@ -718,23 +718,6 @@ FileReadGIF( * which suits as well). We're done. */ - /* - * Read final zero - */ - if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { - goto error; - } - if (gifLabel != '\0') { - /* - * Premature end of image. - */ - - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "no image data termination", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", - NULL); - goto error; - } while (1) { if (-1 == (gifLabel = ReadOneByte( interp, gifConfPtr, chan ) ) ) { goto error; @@ -1160,7 +1143,7 @@ ReadImage( int transparent) { unsigned char initialCodeSize; - int xpos = 0, ypos = 0, pass = 0, i; + int xpos = 0, ypos = 0, pass = 0, i, count; register unsigned char *pixelPtr; static const int interlaceStep[] = { 8, 8, 4, 2 }; static const int interlaceStart[] = { 0, 4, 2, 1 }; @@ -1378,6 +1361,24 @@ ReadImage( } pixelPtr = imagePtr + (ypos) * len * ((transparent>=0)?4:3); } + /* + * Now read until the final zero byte. + * It was observed that there might be 1 length blocks + * (test imgPhoto-14.1) which are not read. + * + * The field "stack" is abused for temporary buffer. it has 4096 bytes + * and we need 256. + * + * Loop until we hit a 0 length block which is the end sign. + */ + while ( 0 < (count = GetDataBlock(gifConfPtr, chan, stack))) + { + if (-1 == count ) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "error reading GIF image: %s", Tcl_PosixError(interp))); + return TCL_ERROR; + } + } return TCL_OK; } diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index 6b218ad..ea6e76f 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -2211,6 +2211,9 @@ ImgPhotoDelete( if (masterPtr->format != NULL) { Tcl_DecrRefCount(masterPtr->format); } + if (masterPtr->metadata != NULL) { + Tcl_DecrRefCount(masterPtr->metadata); + } Tk_FreeOptions(configSpecs, (char *) masterPtr, NULL, 0); ckfree(masterPtr); } -- cgit v0.12 From 4ea25ded4fb5e2bcfea51ab015097a9c3faa4b84 Mon Sep 17 00:00:00 2001 From: oehhar Date: Fri, 1 Feb 2019 18:27:23 +0000 Subject: Correct metadata ref counting to be cleared in the error case. --- generic/tkImgGIF.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/generic/tkImgGIF.c b/generic/tkImgGIF.c index 480d52b..5c29622 100644 --- a/generic/tkImgGIF.c +++ b/generic/tkImgGIF.c @@ -512,9 +512,12 @@ FileReadGIF( /* * Initialize the metadata dict + * Start with a ref count of 1 to delete it in the error case with + * Tcl_DecrRefCount(). */ metadata = Tcl_NewDictObj(); - + Tcl_IncrRefCount(metadata); + /* * Search for the frame from the GIF to display. */ @@ -780,7 +783,7 @@ FileReadGIF( * free the metadata object in case of error. * Otherwise, it is not freed as the ref count was incremented above. */ - Tcl_IncrRefCount(metadata); + Tcl_DecrRefCount(metadata); return result; } -- cgit v0.12 From ac7d8acb9d7b2d18335e5482304f837b1c499360 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 23 Jul 2019 15:24:05 +0000 Subject: Fix [38dc27bd1d]: Tk does not support nor events. Now handle all events up to Button 9. On Windows and Mac, Buttons 8 and 9 are used for the mouse side buttons (as X11 already does). TIP needed for this. --- generic/tkBind.c | 8 ++++++++ generic/tkCanvas.c | 26 +++----------------------- generic/tkEvent.c | 35 ++++++++++++----------------------- generic/tkGrab.c | 13 +------------ generic/tkInt.h | 37 +++++++++++++++++++++++++++++++++++++ generic/tkPointer.c | 14 +------------- generic/tkTextTag.c | 35 ++++++----------------------------- macosx/tkMacOSXMouseEvent.c | 17 +++++++++++------ win/tkWinPointer.c | 6 ++++++ win/tkWinTest.c | 10 ++++++++++ win/tkWinX.c | 17 +++++++++++++++++ 11 files changed, 112 insertions(+), 106 deletions(-) diff --git a/generic/tkBind.c b/generic/tkBind.c index 953d936..15a66f1 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -388,6 +388,14 @@ static const ModInfo modArray[] = { {"Button4", Button4Mask, 0}, {"B5", Button5Mask, 0}, {"Button5", Button5Mask, 0}, + {"B6", Button6Mask, 0}, + {"Button6", Button6Mask, 0}, + {"B7", Button7Mask, 0}, + {"Button7", Button7Mask, 0}, + {"B8", Button8Mask, 0}, + {"Button8", Button8Mask, 0}, + {"B9", Button9Mask, 0}, + {"Button9", Button9Mask, 0}, {"Mod1", Mod1Mask, 0}, {"M1", Mod1Mask, 0}, {"Command", Mod1Mask, 0}, diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index 10e2ce2..7124d51 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -5092,26 +5092,7 @@ CanvasBindProc( switch (eventPtr->type) { case ButtonPress: case ButtonRelease: - switch (eventPtr->xbutton.button) { - case Button1: - mask = Button1Mask; - break; - case Button2: - mask = Button2Mask; - break; - case Button3: - mask = Button3Mask; - break; - case Button4: - mask = Button4Mask; - break; - case Button5: - mask = Button5Mask; - break; - default: - mask = 0; - break; - } + mask = TkGetButtonMask(eventPtr->xbutton.button); /* * For button press events, repick the current item using the button @@ -5194,7 +5175,7 @@ PickCurrentItem( * ButtonRelease, or MotionNotify. */ { double coords[2]; - int buttonDown; + unsigned int buttonDown; Tk_Item *prevItemPtr; SearchUids *searchUids = GetStaticUids(); @@ -5205,8 +5186,7 @@ PickCurrentItem( * for windows. */ - buttonDown = canvasPtr->state - & (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask); + buttonDown = canvasPtr->state & ALL_BUTTONS; /* * Save information about this event in the canvas. The event in the diff --git a/generic/tkEvent.c b/generic/tkEvent.c index b36d5de..d8501c3 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -193,7 +193,6 @@ TCL_DECLARE_MUTEX(exitMutex) static void CleanUpTkEvent(XEvent *eventPtr); static void DelayedMotionProc(ClientData clientData); -static int GetButtonMask(unsigned int Button); static unsigned long GetEventMaskFromXEvent(XEvent *eventPtr); static TkWindow * GetTkWindowFromXEvent(XEvent *eventPtr); static void InvokeClientMessageHandlers(ThreadSpecificData *tsdPtr, @@ -524,7 +523,7 @@ RefreshKeyboardMappingIfNeeded( /* *---------------------------------------------------------------------- * - * GetButtonMask -- + * TkGetButtonMask -- * * Return the proper Button${n}Mask for the button. * @@ -537,23 +536,15 @@ RefreshKeyboardMappingIfNeeded( *---------------------------------------------------------------------- */ -static int -GetButtonMask( +static const int buttonMasks[] = { + 0, Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, Button6Mask, Button7Mask, Button8Mask, Button9Mask +}; + +int +TkGetButtonMask( unsigned int button) { - switch (button) { - case 1: - return Button1Mask; - case 2: - return Button2Mask; - case 3: - return Button3Mask; - case 4: - return Button4Mask; - case 5: - return Button5Mask; - } - return 0; + return (button > Button9) ? 0 : buttonMasks[button]; } /* @@ -582,8 +573,6 @@ UpdateButtonEventState( XEvent *eventPtr) { TkDisplay *dispPtr; - int allButtonsMask = Button1Mask | Button2Mask | Button3Mask - | Button4Mask | Button5Mask; switch (eventPtr->type) { case ButtonPress: @@ -591,19 +580,19 @@ UpdateButtonEventState( dispPtr->mouseButtonWindow = eventPtr->xbutton.window; eventPtr->xbutton.state |= dispPtr->mouseButtonState; - dispPtr->mouseButtonState |= GetButtonMask(eventPtr->xbutton.button); + dispPtr->mouseButtonState |= TkGetButtonMask(eventPtr->xbutton.button); break; case ButtonRelease: dispPtr = TkGetDisplay(eventPtr->xbutton.display); dispPtr->mouseButtonWindow = None; - dispPtr->mouseButtonState &= ~GetButtonMask(eventPtr->xbutton.button); + dispPtr->mouseButtonState &= ~TkGetButtonMask(eventPtr->xbutton.button); eventPtr->xbutton.state |= dispPtr->mouseButtonState; break; case MotionNotify: dispPtr = TkGetDisplay(eventPtr->xmotion.display); - if (dispPtr->mouseButtonState & allButtonsMask) { + if (dispPtr->mouseButtonState & ALL_BUTTONS) { if (eventPtr->xbutton.window != dispPtr->mouseButtonWindow) { /* * This motion event should not be interpreted as a button @@ -611,7 +600,7 @@ UpdateButtonEventState( * button was pressed down in. */ - dispPtr->mouseButtonState &= ~allButtonsMask; + dispPtr->mouseButtonState &= ~ALL_BUTTONS; dispPtr->mouseButtonWindow = None; } else { eventPtr->xmotion.state |= dispPtr->mouseButtonState; diff --git a/generic/tkGrab.c b/generic/tkGrab.c index 917ec69..50d2517 100644 --- a/generic/tkGrab.c +++ b/generic/tkGrab.c @@ -135,17 +135,6 @@ typedef struct NewGrabWinEvent { #define GENERATED_GRAB_EVENT_MAGIC ((Bool) 0x147321ac) /* - * Mask that selects any of the state bits corresponding to buttons, plus - * masks that select individual buttons' bits: - */ - -#define ALL_BUTTONS \ - (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask) -static const unsigned int buttonStates[] = { - Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask -}; - -/* * Forward declarations for functions declared later in this file: */ @@ -883,7 +872,7 @@ TkPointerEvent( } else { if (eventPtr->xbutton.button != AnyButton && ((eventPtr->xbutton.state & ALL_BUTTONS) - == buttonStates[eventPtr->xbutton.button - Button1])) { + == (unsigned int)TkGetButtonMask(eventPtr->xbutton.button))) { ReleaseButtonGrab(dispPtr); /* Note 4. */ } } diff --git a/generic/tkInt.h b/generic/tkInt.h index 77b7725..10888f7 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -965,6 +965,43 @@ typedef struct TkpClipMask { #define ALT_MASK (AnyModifier<<2) #define EXTENDED_MASK (AnyModifier<<3) +#ifndef Button6 +# define Button6 6 +#endif +#ifndef Button7 +# define Button7 7 +#endif +#ifndef Button8 +# define Button8 8 +#endif +#ifndef Button9 +# define Button9 9 +#endif + +#ifndef Button6Mask +# define Button6Mask (AnyModifier<<4) +#endif +#ifndef Button7Mask +# define Button7Mask (AnyModifier<<5) +#endif +#ifndef Button8Mask +# define Button8Mask (AnyModifier<<6) +#endif +#ifndef Button9Mask +# define Button9Mask (AnyModifier<<7) +#endif + +/* + * Mask that selects any of the state bits corresponding to buttons, plus + * masks that select individual buttons' bits: + */ + +#define ALL_BUTTONS \ + (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask|Button6Mask|Button7Mask|Button8Mask|Button9Mask) + + +MODULE_SCOPE int TkGetButtonMask(unsigned int); + /* * Object types not declared in tkObj.c need to be mentioned here so they can * be properly registered with Tcl: diff --git a/generic/tkPointer.c b/generic/tkPointer.c index 6e87638..de9d49d 100644 --- a/generic/tkPointer.c +++ b/generic/tkPointer.c @@ -23,18 +23,6 @@ #define Cursor XCursor #endif -/* - * Mask that selects any of the state bits corresponding to buttons, plus - * masks that select individual buttons' bits: - */ - -#define ALL_BUTTONS \ - (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask) -static const unsigned int buttonMasks[] = { - Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask -}; -#define ButtonMask(b) (buttonMasks[(b)-Button1]) - typedef struct { TkWindow *grabWinPtr; /* Window that defines the top of the grab * tree in a global grab. */ @@ -267,7 +255,7 @@ Tk_UpdatePointer( */ for (b = Button1; b <= Button5; b++) { - mask = ButtonMask(b); + mask = TkGetButtonMask(b); if (changes & mask) { if (state & mask) { type = ButtonPress; diff --git a/generic/tkTextTag.c b/generic/tkTextTag.c index cb0993b..bda315e 100644 --- a/generic/tkTextTag.c +++ b/generic/tkTextTag.c @@ -1446,9 +1446,6 @@ TkTextBindProc( TkText *textPtr = clientData; int repick = 0; -# define AnyButtonMask \ - (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask) - textPtr->refCount++; /* @@ -1460,35 +1457,16 @@ TkTextBindProc( if (eventPtr->type == ButtonPress) { textPtr->flags |= BUTTON_DOWN; } else if (eventPtr->type == ButtonRelease) { - int mask; + unsigned int mask; - switch (eventPtr->xbutton.button) { - case Button1: - mask = Button1Mask; - break; - case Button2: - mask = Button2Mask; - break; - case Button3: - mask = Button3Mask; - break; - case Button4: - mask = Button4Mask; - break; - case Button5: - mask = Button5Mask; - break; - default: - mask = 0; - break; - } - if ((eventPtr->xbutton.state & AnyButtonMask) == (unsigned) mask) { + mask = TkGetButtonMask(eventPtr->xbutton.button); + if ((eventPtr->xbutton.state & ALL_BUTTONS) == mask) { textPtr->flags &= ~BUTTON_DOWN; repick = 1; } } else if ((eventPtr->type == EnterNotify) || (eventPtr->type == LeaveNotify)) { - if (eventPtr->xcrossing.state & AnyButtonMask) { + if (eventPtr->xcrossing.state & ALL_BUTTONS) { textPtr->flags |= BUTTON_DOWN; } else { textPtr->flags &= ~BUTTON_DOWN; @@ -1496,7 +1474,7 @@ TkTextBindProc( TkTextPickCurrent(textPtr, eventPtr); goto done; } else if (eventPtr->type == MotionNotify) { - if (eventPtr->xmotion.state & AnyButtonMask) { + if (eventPtr->xmotion.state & ALL_BUTTONS) { textPtr->flags |= BUTTON_DOWN; } else { textPtr->flags &= ~BUTTON_DOWN; @@ -1513,8 +1491,7 @@ TkTextBindProc( unsigned int oldState; oldState = eventPtr->xbutton.state; - eventPtr->xbutton.state &= ~(Button1Mask|Button2Mask - |Button3Mask|Button4Mask|Button5Mask); + eventPtr->xbutton.state &= ~ALL_BUTTONS; if (!(textPtr->flags & DESTROYED)) { TkTextPickCurrent(textPtr, eventPtr); } diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 2517769..42fae98 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -178,22 +178,26 @@ enum { */ unsigned int state = 0; - NSInteger button = [theEvent buttonNumber]; + int button = [theEvent buttonNumber]; + if (++button > 3) { + button += 4; /* Map buttons 4/5 to 8/9 */ + } EventRef eventRef = (EventRef)[theEvent eventRef]; UInt32 buttons; OSStatus err = GetEventParameter(eventRef, kEventParamMouseChord, typeUInt32, NULL, sizeof(UInt32), NULL, &buttons); if (err == noErr) { - state |= (buttons & ((1<<5) - 1)) << 8; - } else if (button < 5) { + state |= (buttons & 0x07) << 8; + state |= (buttons & 0x18) << 12; + } else if (button <= 9) { switch (eventType) { case NSLeftMouseDown: case NSRightMouseDown: case NSLeftMouseDragged: case NSRightMouseDragged: case NSOtherMouseDown: - state |= 1 << (button + 8); + state |= TkGetButtonMask(button); break; default: break; @@ -361,10 +365,11 @@ ButtonModifiers2State( unsigned int state; /* - * Tk supports at most 5 buttons. + * Tk on OSX supports at most 5 buttons. */ - state = (buttonState & ((1<<5) - 1)) << 8; + state = (buttonState & 0x07) * Button1Mask; + state |= (buttonState & 0x18) * (Button8Mask >> 3); if (keyModifiers & alphaLock) { state |= LockMask; diff --git a/win/tkWinPointer.c b/win/tkWinPointer.c index 6f1f840..e3445c7 100644 --- a/win/tkWinPointer.c +++ b/win/tkWinPointer.c @@ -81,6 +81,12 @@ TkWinGetModifierState(void) if (GetKeyState(VK_RBUTTON) & 0x8000) { state |= Button3Mask; } + if (GetKeyState(VK_XBUTTON1) & 0x8000) { + state |= Button8Mask; + } + if (GetKeyState(VK_XBUTTON2) & 0x8000) { + state |= Button9Mask; + } return state; } diff --git a/win/tkWinTest.c b/win/tkWinTest.c index e58ee7c..e386605 100644 --- a/win/tkWinTest.c +++ b/win/tkWinTest.c @@ -287,6 +287,16 @@ TestwineventObjCmd( static const TkStateMap messageMap[] = { {WM_LBUTTONDOWN, "WM_LBUTTONDOWN"}, {WM_LBUTTONUP, "WM_LBUTTONUP"}, + {WM_LBUTTONDBLCLK, "WM_LBUTTONDBLCLK"}, + {WM_MBUTTONDOWN, "WM_MBUTTONDOWN"}, + {WM_MBUTTONUP, "WM_MBUTTONUP"}, + {WM_MBUTTONDBLCLK, "WM_MBUTTONDBLCLK"}, + {WM_RBUTTONDOWN, "WM_RBUTTONDOWN"}, + {WM_RBUTTONUP, "WM_RBUTTONUP"}, + {WM_RBUTTONDBLCLK, "WM_RBUTTONDBLCLK"}, + {WM_XBUTTONDOWN, "WM_XBUTTONDOWN"}, + {WM_XBUTTONUP, "WM_XBUTTONUP"}, + {WM_XBUTTONDBLCLK, "WM_XBUTTONDBLCLK"}, {WM_CHAR, "WM_CHAR"}, {WM_GETTEXT, "WM_GETTEXT"}, {WM_SETTEXT, "WM_SETTEXT"}, diff --git a/win/tkWinX.c b/win/tkWinX.c index db8bc4f..d724282 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -884,9 +884,12 @@ Tk_TranslateWinEvent( case WM_MBUTTONDBLCLK: case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK: + case WM_XBUTTONDOWN: + case WM_XBUTTONDBLCLK: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: + case WM_XBUTTONUP: case WM_MOUSEMOVE: Tk_PointerEvent(hwnd, (short) LOWORD(lParam), (short) HIWORD(lParam)); return 1; @@ -1713,6 +1716,14 @@ TkWinResendEvent( msg = WM_RBUTTONDOWN; wparam = MK_RBUTTON; break; + case Button8: + msg = WM_XBUTTONDOWN; + wparam = MAKEWPARAM(MK_XBUTTON1, XBUTTON1); + break; + case Button9: + msg = WM_XBUTTONDOWN; + wparam = MAKEWPARAM(MK_XBUTTON2, XBUTTON2); + break; default: return 0; } @@ -1726,6 +1737,12 @@ TkWinResendEvent( if (eventPtr->xbutton.state & Button3Mask) { wparam |= MK_RBUTTON; } + if (eventPtr->xbutton.state & Button8Mask) { + wparam |= MK_XBUTTON1; + } + if (eventPtr->xbutton.state & Button9Mask) { + wparam |= MK_XBUTTON2; + } if (eventPtr->xbutton.state & ShiftMask) { wparam |= MK_SHIFT; } -- cgit v0.12 From 987d79373dc7dd75d2cc06cd55d34f3cb6624779 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 23 Jul 2019 15:36:38 +0000 Subject: mis-counted modifier bits --- macosx/tkMacOSXMouseEvent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 42fae98..94ebb75 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -188,8 +188,8 @@ enum { typeUInt32, NULL, sizeof(UInt32), NULL, &buttons); if (err == noErr) { - state |= (buttons & 0x07) << 8; - state |= (buttons & 0x18) << 12; + state |= (buttons & 0x07) * Button1Mask; + state |= (buttons & 0x18) * (Button8Mask >> 3); } else if (button <= 9) { switch (eventType) { case NSLeftMouseDown: -- cgit v0.12 From 2c41264be7ab081b18b9a7dfb177e5835917c4bc Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 24 Jul 2019 13:31:43 +0000 Subject: (cherry-pick): Patch by Arjen sent to core 2018-09-21 Also, do some renumbering of mouse-buttons, such that at script level the XButtons appear to be at 4/5 while - internally - they are at 8/9. --- doc/bind.n | 4 ---- generic/tkBind.c | 33 ++++++++++++++++++-------------- generic/tkEvent.c | 17 ++++++++++++++++- tests/bind.test | 56 ------------------------------------------------------- 4 files changed, 35 insertions(+), 75 deletions(-) diff --git a/doc/bind.n b/doc/bind.n index 7c39cfc..015bad5 100644 --- a/doc/bind.n +++ b/doc/bind.n @@ -114,10 +114,6 @@ Modifiers consist of any of the following values: \fBButton3\fR, \fBB3\fR \fBTriple\fR \fBButton4\fR, \fBB4\fR \fBQuadruple\fR \fBButton5\fR, \fBB5\fR -\fBButton6\fR, \fBB6\fR -\fBButton7\fR, \fBB7\fR -\fBButton8\fR, \fBB8\fR -\fBButton9\fR, \fBB9\fR .DE Where more than one value is listed, separated by commas, the values are equivalent. diff --git a/generic/tkBind.c b/generic/tkBind.c index 15a66f1..a6bd8ca 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -384,18 +384,10 @@ static const ModInfo modArray[] = { {"Button2", Button2Mask, 0}, {"B3", Button3Mask, 0}, {"Button3", Button3Mask, 0}, - {"B4", Button4Mask, 0}, - {"Button4", Button4Mask, 0}, - {"B5", Button5Mask, 0}, - {"Button5", Button5Mask, 0}, - {"B6", Button6Mask, 0}, - {"Button6", Button6Mask, 0}, - {"B7", Button7Mask, 0}, - {"Button7", Button7Mask, 0}, - {"B8", Button8Mask, 0}, - {"Button8", Button8Mask, 0}, - {"B9", Button9Mask, 0}, - {"Button9", Button9Mask, 0}, + {"B4", Button8Mask, 0}, + {"Button4", Button8Mask, 0}, + {"B5", Button9Mask, 0}, + {"Button5", Button9Mask, 0}, {"Mod1", Mod1Mask, 0}, {"M1", Mod1Mask, 0}, {"Command", Mod1Mask, 0}, @@ -1995,6 +1987,9 @@ ExpandPercents( case 'b': if (flags & BUTTON) { number = eventPtr->xbutton.button; + if (eventPtr->xbutton.button >= Button8) { + number += (Button4 - Button8); + } goto doNumber; } goto doString; @@ -3109,6 +3104,9 @@ HandleEventGenerate( return TCL_ERROR; } if (flags & BUTTON) { + if (number >= Button4) { + number += (Button8 - Button4); + } event.general.xbutton.button = number; } else { goto badopt; @@ -3997,7 +3995,7 @@ ParseEventDescription( p = GetField(p, field, FIELD_SIZE); } if (*field != '\0') { - if ((*field >= '1') && (*field <= '9') && (field[1] == '\0')) { + if ((*field >= '1') && (*field <= '5') && (field[1] == '\0')) { if (eventFlags == 0) { patPtr->eventType = ButtonPress; eventMask = ButtonPressMask; @@ -4012,6 +4010,9 @@ ParseEventDescription( goto done; } patPtr->detail.button = (*field - '0'); + if (patPtr->detail.button >= Button4) { + patPtr->detail.button += (Button8 - Button4); + } } else { getKeysym: @@ -4228,7 +4229,11 @@ GetPatternObj( Tcl_AppendToObj(patternObj, string, -1); } } else { - Tcl_AppendPrintfToObj(patternObj, "%d", patPtr->detail.button); + int button = patPtr->detail.button; + if (button >= Button8) { + button += (Button4 - Button8); + } + Tcl_AppendPrintfToObj(patternObj, "%d", button); } } diff --git a/generic/tkEvent.c b/generic/tkEvent.c index d8501c3..02c7de8 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -580,7 +580,22 @@ UpdateButtonEventState( dispPtr->mouseButtonWindow = eventPtr->xbutton.window; eventPtr->xbutton.state |= dispPtr->mouseButtonState; - dispPtr->mouseButtonState |= TkGetButtonMask(eventPtr->xbutton.button); + if ((eventPtr->xbutton.button >= Button4) && (eventPtr->xbutton.button <= Button7)) { + /* + * Turn the event into a mouse wheel event and queue it + * Note: modelled after the code in tkWinX.c + */ + eventPtr->type = MouseWheelEvent; + eventPtr->xany.send_event = -1; + eventPtr->xkey.nbytes = 0; + eventPtr->xkey.keycode = (eventPtr->xbutton.button & 1) ? 1 : -1; + if (eventPtr->xkey.keycode >= Button6) { + eventPtr->xkey.state |= ShiftMask; + } + Tk_QueueWindowEvent(eventPtr, TCL_QUEUE_TAIL); + } else { + dispPtr->mouseButtonState |= TkGetButtonMask(eventPtr->xbutton.button); + } break; case ButtonRelease: diff --git a/tests/bind.test b/tests/bind.test index ebc39b7..87e8e03 100644 --- a/tests/bind.test +++ b/tests/bind.test @@ -5862,62 +5862,6 @@ test bind-27.7 {button names} -setup { } -cleanup { destroy .t.f } -result { {button 5}} -test bind-27.8 {button names} -setup { - frame .t.f -class Test -width 150 -height 100 - pack .t.f - focus -force .t.f - update -} -body { - bind .t.f {lappend x "button 6"} - set x [bind .t.f] - event generate .t.f - event generate .t.f - set x -} -cleanup { - destroy .t.f -} -result { {button 6}} -test bind-27.9 {button names} -setup { - frame .t.f -class Test -width 150 -height 100 - pack .t.f - focus -force .t.f - update -} -body { - bind .t.f {lappend x "button 7"} - set x [bind .t.f] - event generate .t.f - event generate .t.f - set x -} -cleanup { - destroy .t.f -} -result { {button 7}} -test bind-27.10 {button names} -setup { - frame .t.f -class Test -width 150 -height 100 - pack .t.f - focus -force .t.f - update -} -body { - bind .t.f {lappend x "button 8"} - set x [bind .t.f] - event generate .t.f - event generate .t.f - set x -} -cleanup { - destroy .t.f -} -result { {button 8}} -test bind-27.11 {button names} -setup { - frame .t.f -class Test -width 150 -height 100 - pack .t.f - focus -force .t.f - update -} -body { - bind .t.f {lappend x "button 9"} - set x [bind .t.f] - event generate .t.f - event generate .t.f - set x -} -cleanup { - destroy .t.f -} -result { {button 9}} test bind-28.1 {keysym names} -body { bind .t foo -- cgit v0.12 From 89d0c9df2c0159f34bdb8080abef85a21fe9c0bb Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 24 Jul 2019 14:38:37 +0000 Subject: Code simplification: Don't bother keeping track of the Button[n]Mask's for Buttons 4-7, since those are not actually buttons (they are mouse-wheels). This means that Button4Mask/Button5Mask can be used for Buttons 8/9. --- generic/tkBind.c | 8 ++++---- generic/tkEvent.c | 11 +++++++---- generic/tkInt.h | 26 ++++++-------------------- macosx/tkMacOSXMouseEvent.c | 6 ++---- win/tkWinPointer.c | 4 ++-- win/tkWinX.c | 4 ++-- 6 files changed, 23 insertions(+), 36 deletions(-) diff --git a/generic/tkBind.c b/generic/tkBind.c index 8c77d93..3d5bb3e 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -384,10 +384,10 @@ static const ModInfo modArray[] = { {"Button2", Button2Mask, 0}, {"B3", Button3Mask, 0}, {"Button3", Button3Mask, 0}, - {"B4", Button8Mask, 0}, - {"Button4", Button8Mask, 0}, - {"B5", Button9Mask, 0}, - {"Button5", Button9Mask, 0}, + {"B4", Button4Mask, 0}, + {"Button4", Button4Mask, 0}, + {"B5", Button5Mask, 0}, + {"Button5", Button5Mask, 0}, {"Mod1", Mod1Mask, 0}, {"M1", Mod1Mask, 0}, {"Command", Mod1Mask, 0}, diff --git a/generic/tkEvent.c b/generic/tkEvent.c index 02c7de8..a8eaec1 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -525,7 +525,10 @@ RefreshKeyboardMappingIfNeeded( * * TkGetButtonMask -- * - * Return the proper Button${n}Mask for the button. + * Return the proper Button${n}Mask for the button. Don't care about + * Button4 - Button7, because those are not actually buttons: Those + * are used for the horizontal or vertical mouse wheels. The + * Button4Mask/Button5Mask's are actually used for Button 8 and 9. * * Results: * A button mask. @@ -537,7 +540,7 @@ RefreshKeyboardMappingIfNeeded( */ static const int buttonMasks[] = { - 0, Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, Button6Mask, Button7Mask, Button8Mask, Button9Mask + 0, Button1Mask, Button2Mask, Button3Mask, 0, 0, 0, 0, Button4Mask, Button5Mask }; int @@ -580,7 +583,7 @@ UpdateButtonEventState( dispPtr->mouseButtonWindow = eventPtr->xbutton.window; eventPtr->xbutton.state |= dispPtr->mouseButtonState; - if ((eventPtr->xbutton.button >= Button4) && (eventPtr->xbutton.button <= Button7)) { + if ((eventPtr->xbutton.button >= Button4) && (eventPtr->xbutton.button < Button8)) { /* * Turn the event into a mouse wheel event and queue it * Note: modelled after the code in tkWinX.c @@ -589,7 +592,7 @@ UpdateButtonEventState( eventPtr->xany.send_event = -1; eventPtr->xkey.nbytes = 0; eventPtr->xkey.keycode = (eventPtr->xbutton.button & 1) ? 1 : -1; - if (eventPtr->xkey.keycode >= Button6) { + if (eventPtr->xkey.keycode > Button5) { eventPtr->xkey.state |= ShiftMask; } Tk_QueueWindowEvent(eventPtr, TCL_QUEUE_TAIL); diff --git a/generic/tkInt.h b/generic/tkInt.h index 10888f7..03ba420 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -965,12 +965,11 @@ typedef struct TkpClipMask { #define ALT_MASK (AnyModifier<<2) #define EXTENDED_MASK (AnyModifier<<3) -#ifndef Button6 -# define Button6 6 -#endif -#ifndef Button7 -# define Button7 7 -#endif +/* + * Buttons 8 and 9 are the Xbuttons (left and right side-buttons). On Windows/Mac, those + * are known as Buttons 4 and 5. At script level, they also get the numbers 4 and 5. + */ + #ifndef Button8 # define Button8 8 #endif @@ -978,26 +977,13 @@ typedef struct TkpClipMask { # define Button9 9 #endif -#ifndef Button6Mask -# define Button6Mask (AnyModifier<<4) -#endif -#ifndef Button7Mask -# define Button7Mask (AnyModifier<<5) -#endif -#ifndef Button8Mask -# define Button8Mask (AnyModifier<<6) -#endif -#ifndef Button9Mask -# define Button9Mask (AnyModifier<<7) -#endif - /* * Mask that selects any of the state bits corresponding to buttons, plus * masks that select individual buttons' bits: */ #define ALL_BUTTONS \ - (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask|Button6Mask|Button7Mask|Button8Mask|Button9Mask) + (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask) MODULE_SCOPE int TkGetButtonMask(unsigned int); diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index fc4d1c2..78363d0 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -188,8 +188,7 @@ enum { typeUInt32, NULL, sizeof(UInt32), NULL, &buttons); if (err == noErr) { - state |= (buttons & 0x07) * Button1Mask; - state |= (buttons & 0x18) * (Button8Mask >> 3); + state |= (buttons & 0x1F) * Button1Mask; } else if (button <= 9) { switch (eventType) { case NSLeftMouseDown: @@ -368,8 +367,7 @@ ButtonModifiers2State( * Tk on OSX supports at most 5 buttons. */ - state = (buttonState & 0x07) * Button1Mask; - state |= (buttonState & 0x18) * (Button8Mask >> 3); + state = (buttonState & 0x1F) * Button1Mask; if (keyModifiers & alphaLock) { state |= LockMask; diff --git a/win/tkWinPointer.c b/win/tkWinPointer.c index e3445c7..251b5b9 100644 --- a/win/tkWinPointer.c +++ b/win/tkWinPointer.c @@ -82,10 +82,10 @@ TkWinGetModifierState(void) state |= Button3Mask; } if (GetKeyState(VK_XBUTTON1) & 0x8000) { - state |= Button8Mask; + state |= Button4Mask; } if (GetKeyState(VK_XBUTTON2) & 0x8000) { - state |= Button9Mask; + state |= Button5Mask; } return state; } diff --git a/win/tkWinX.c b/win/tkWinX.c index d724282..9d474ac 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -1737,10 +1737,10 @@ TkWinResendEvent( if (eventPtr->xbutton.state & Button3Mask) { wparam |= MK_RBUTTON; } - if (eventPtr->xbutton.state & Button8Mask) { + if (eventPtr->xbutton.state & Button4Mask) { wparam |= MK_XBUTTON1; } - if (eventPtr->xbutton.state & Button9Mask) { + if (eventPtr->xbutton.state & Button5Mask) { wparam |= MK_XBUTTON2; } if (eventPtr->xbutton.state & ShiftMask) { -- cgit v0.12 From 5c07a1409bb742e9fe41e7e523146ce75d71580a Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 24 Jul 2019 14:55:51 +0000 Subject: A few more minor adaptations, and make it compile on X11 (XKeyEvent structure doesn't have a nbytes field). --- generic/tkBind.c | 2 +- generic/tkEvent.c | 2 ++ macosx/tkMacOSXMouseEvent.c | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/generic/tkBind.c b/generic/tkBind.c index 3d5bb3e..0208a7a 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -1987,7 +1987,7 @@ ExpandPercents( case 'b': if (flags & BUTTON) { number = eventPtr->xbutton.button; - if (eventPtr->xbutton.button >= Button8) { + if (number >= Button8) { number += (Button4 - Button8); } goto doNumber; diff --git a/generic/tkEvent.c b/generic/tkEvent.c index a8eaec1..e94cdd5 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -590,7 +590,9 @@ UpdateButtonEventState( */ eventPtr->type = MouseWheelEvent; eventPtr->xany.send_event = -1; +#if defined(_WIN32) || defined(MAC_OSX_TK) eventPtr->xkey.nbytes = 0; +#endif eventPtr->xkey.keycode = (eventPtr->xbutton.button & 1) ? 1 : -1; if (eventPtr->xkey.keycode > Button5) { eventPtr->xkey.state |= ShiftMask; diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 78363d0..37e3568 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -189,7 +189,7 @@ enum { if (err == noErr) { state |= (buttons & 0x1F) * Button1Mask; - } else if (button <= 9) { + } else if (button <= Button9) { switch (eventType) { case NSLeftMouseDown: case NSRightMouseDown: -- cgit v0.12 From f97059c69925b78f7f7e291b86fa2089f58291a6 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 26 Jul 2019 09:06:10 +0000 Subject: Further experiment: Bring scalefactor back to 120 (as it was for win32) --- doc/event.n | 4 ++-- generic/tkBind.c | 4 ++-- generic/tkEvent.c | 2 +- generic/tkPointer.c | 3 +-- library/demos/cscroll.tcl | 8 ++++---- library/listbox.tcl | 8 ++++---- library/scrlbar.tcl | 8 ++++---- library/text.tcl | 8 ++++---- library/ttk/utils.tcl | 35 ++++++++++------------------------- macosx/tkMacOSXMouseEvent.c | 14 ++++++++------ tests/scrollbar.test | 4 ++-- win/tkWinX.c | 4 ++-- 12 files changed, 44 insertions(+), 58 deletions(-) diff --git a/doc/event.n b/doc/event.n index be42fa5..5109794 100644 --- a/doc/event.n +++ b/doc/event.n @@ -119,8 +119,8 @@ for the event. Only valid for virtual events. Corresponds to the for the \fBMouseWheel\fR event. The \fIdelta\fR refers to the direction and magnitude the mouse wheel was rotated. Note the value is not a screen distance but are units of motion in the mouse wheel. -Typically these values are multiples of 40. For example, 40 should -scroll the text widget up 4 lines and \-80 would scroll the text +Typically these values are multiples of 120. For example, 120 should +scroll the text widget up 4 lines and \-240 would scroll the text widget down 8 lines. Of course, other widgets may define different behaviors for mouse wheel motion. This field corresponds to the \fB%D\fR substitution for binding scripts. diff --git a/generic/tkBind.c b/generic/tkBind.c index 03e4a2b..45e07be 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -1996,7 +1996,7 @@ ExpandPercents( if (flags & BUTTON) { number = eventPtr->xbutton.button; if (number >= Button8) { - number += (Button4 - Button8); + number -= (Button8 - Button4); } goto doNumber; } @@ -4239,7 +4239,7 @@ GetPatternObj( } else { int button = patPtr->detail.button; if (button >= Button8) { - button += (Button4 - Button8); + button -= (Button8 - Button4); } Tcl_AppendPrintfToObj(patternObj, "%d", button); } diff --git a/generic/tkEvent.c b/generic/tkEvent.c index dd77c2b..39d9d4b 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -594,7 +594,7 @@ UpdateButtonEventState( #if defined(_WIN32) || defined(MAC_OSX_TK) eventPtr->xkey.nbytes = 0; #endif - eventPtr->xkey.keycode = (eventPtr->xbutton.button & 1) ? 40 : -40; + eventPtr->xkey.keycode = (eventPtr->xbutton.button & 1) ? 120 : -120; if (eventPtr->xkey.keycode > Button5) { eventPtr->xkey.state |= ShiftMask; } diff --git a/generic/tkPointer.c b/generic/tkPointer.c index af5e311..57680c3 100644 --- a/generic/tkPointer.c +++ b/generic/tkPointer.c @@ -226,8 +226,7 @@ Tk_UpdatePointer( XPoint pos; XEvent event; int changes = (state ^ tsdPtr->lastState) & ALL_BUTTONS; - int type, b; - int mask; + int type, b, mask; pos.x = x; pos.y = y; diff --git a/library/demos/cscroll.tcl b/library/demos/cscroll.tcl index 24d5f89..c709668 100644 --- a/library/demos/cscroll.tcl +++ b/library/demos/cscroll.tcl @@ -59,16 +59,16 @@ $c bind all <1> "scrollButton $c" bind $c <2> "$c scan mark %x %y" bind $c "$c scan dragto %x %y" bind $c { - %W yview scroll [expr {-(%D / 40)}] units + %W yview scroll [expr {-((%D+60) / 120)}] units } bind $c { - %W yview scroll [expr {-(%D / 4)}] units + %W yview scroll [expr {-((%D+6) / 12)}] units } bind $c { - %W xview scroll [expr {-(%D / 40)}] units + %W xview scroll [expr {-((%D+60) / 120)}] units } bind $c { - %W xview scroll [expr {-(%D / 4)}] units + %W xview scroll [expr {-((%D+6) / 12)}] units } proc scrollEnter canvas { diff --git a/library/listbox.tcl b/library/listbox.tcl index fd10fe4..ffd7def 100644 --- a/library/listbox.tcl +++ b/library/listbox.tcl @@ -177,16 +177,16 @@ bind Listbox { } bind Listbox { - %W yview scroll [expr {-(%D / 40)}] units + %W yview scroll [expr {-((%D+60) / 120)}] units } bind Listbox { - %W yview scroll [expr {-(%D / 4)}] units + %W yview scroll [expr {-((%D+6) / 12)}] units } bind Listbox { - %W xview scroll [expr {-(%D / 40)}] units + %W xview scroll [expr {-((%D+60) / 120)}] units } bind Listbox { - %W xview scroll [expr {-(%D / 4)}] units + %W xview scroll [expr {-((%D+6) / 12)}] units } diff --git a/library/scrlbar.tcl b/library/scrlbar.tcl index 93ded56..dae11ae 100644 --- a/library/scrlbar.tcl +++ b/library/scrlbar.tcl @@ -130,16 +130,16 @@ bind Scrollbar <> { } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-(%D / 40)}] + tk::ScrollByUnits %W v [expr {-((%D+60) / 120)}] } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-(%D / 4)}] + tk::ScrollByUnits %W v [expr {-((%D+6) / 12)}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-(%D / 40)}] + tk::ScrollByUnits %W h [expr {-((%D+60) / 120)}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-(%D / 4)}] + tk::ScrollByUnits %W h [expr {-((%D+6) / 12)}] } # tk::ScrollButtonDown -- diff --git a/library/text.tcl b/library/text.tcl index 9d635de..72da6ff 100644 --- a/library/text.tcl +++ b/library/text.tcl @@ -428,16 +428,16 @@ bind Text { set ::tk::Priv(prevPos) {} bind Text { - %W yview scroll [expr {-(%D)}] pixels + %W yview scroll [expr {-((%D+1)/3)}] pixels } bind Text { - %W yview scroll [expr {-10 * (%D)}] pixels + %W yview scroll [expr {-4 * (%D)}] pixels } bind Text { - %W xview scroll [expr {-(%D)}] pixels + %W xview scroll [expr {-((%D+1)/3)}] pixels } bind Text { - %W xview scroll [expr {-10 * (%D)}] pixels + %W xview scroll [expr {-4 * (%D)}] pixels } # ::tk::TextClosestGap -- diff --git a/library/ttk/utils.tcl b/library/ttk/utils.tcl index 140e061..ad36927 100644 --- a/library/ttk/utils.tcl +++ b/library/ttk/utils.tcl @@ -285,7 +285,8 @@ proc ttk::copyBindings {from to} { # proc ttk::bindMouseWheel {bindtag callback} { - bind $bindtag [append callback { [expr {-(%D/40)}]}] + bind $bindtag [append callback { [expr {-((%D+60)/120)}]}] + bind $bindtag [append callback { [expr {-((%D+6)/12)}]}] } ## Mousewheel bindings for standard scrollable widgets. @@ -296,29 +297,13 @@ proc ttk::bindMouseWheel {bindtag callback} { # standard scrollbar protocol. # -switch -- [tk windowingsystem] { - x11 { - bind TtkScrollable { %W yview scroll -5 units } - bind TtkScrollable { %W yview scroll 5 units } - bind TtkScrollable { %W xview scroll -5 units } - bind TtkScrollable { %W xview scroll 5 units } - } - win32 { - bind TtkScrollable \ - { %W yview scroll [expr {-(%D/120)}] units } - bind TtkScrollable \ - { %W xview scroll [expr {-(%D/120)}] units } - } - aqua { - bind TtkScrollable \ - { %W yview scroll [expr {-(%D)}] units } - bind TtkScrollable \ - { %W xview scroll [expr {-(%D)}] units } - bind TtkScrollable \ - { %W yview scroll [expr {-10*(%D)}] units } - bind TtkScrollable \ - { %W xview scroll [expr {-10*(%D)}] units } - } -} +bind TtkScrollable \ +{ %W yview scroll [expr {-((%D+60)/120)}] units } +bind TtkScrollable \ +{ %W yview scroll [expr {-((%D+6)/12)}] units } +bind TtkScrollable \ +{ %W xview scroll [expr {-((%D+60)/120)}] units } +bind TtkScrollable \ +{ %W xview scroll [expr {-((%D+6)/12)}] units } #*EOF* diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index ed67bae..92d2daf 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -267,21 +267,23 @@ enum { xEvent.xany.display = Tk_Display(tkwin); xEvent.xany.window = Tk_WindowId(tkwin); - delta = [theEvent deltaY] * 40; + delta = [theEvent deltaY] * 120; if (delta != 0.0) { - coarseDelta = (delta > -40.0 && delta < 40.0) ? - (signbit(delta) ? -40 : 40 : lround(delta); + coarseDelta = (delta > -120.0 && delta < 120.0) ? + (signbit(delta) ? -120 : 120 : lround(delta); xEvent.xbutton.state = state; xEvent.xkey.keycode = coarseDelta; + xEvent.xkey.nbytes = 0; xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); } - delta = [theEvent deltaX] * 40; + delta = [theEvent deltaX] * 120; if (delta != 0.0) { - coarseDelta = (delta > -40.0 && delta < 40.0) ? - (signbit(delta) ? -40 : 40) : lround(delta); + coarseDelta = (delta > -120.0 && delta < 120.0) ? + (signbit(delta) ? -120 : 120) : lround(delta); xEvent.xbutton.state = state | ShiftMask; xEvent.xkey.keycode = coarseDelta; + xEvent.xkey.nbytes = 0; xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); } diff --git a/tests/scrollbar.test b/tests/scrollbar.test index d235656..e6e6bdd 100644 --- a/tests/scrollbar.test +++ b/tests/scrollbar.test @@ -693,7 +693,7 @@ test scrollbar-10.1 { event on scrollbar} -setup { pack [scrollbar .s -command {.t yview}] -fill y -expand 1 -side left update focus -force .s - event generate .s -delta -150 + event generate .s -delta -120 after 200 {set eventprocessed 1} ; vwait eventprocessed .t index @0,0 } -cleanup { @@ -708,7 +708,7 @@ test scrollbar-10.2 { event on scrollbar} -setup { pack [scrollbar .s -command {.t xview} -orient horizontal] -fill x -expand 1 -side top update focus -force .s - event generate .s -delta -150 + event generate .s -delta -120 after 200 {set eventprocessed 1} ; vwait eventprocessed .t index @0,0 } -cleanup { diff --git a/win/tkWinX.c b/win/tkWinX.c index 8127eef..9d474ac 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -1142,7 +1142,7 @@ GenerateXEvent( event.type = MouseWheelEvent; event.xany.send_event = -1; event.xkey.nbytes = 0; - event.xkey.keycode = tsdPtr->vWheelAcc / WHEEL_DELTA * WHEEL_DELTA / 3; + event.xkey.keycode = tsdPtr->vWheelAcc / WHEEL_DELTA * WHEEL_DELTA; tsdPtr->vWheelAcc = tsdPtr->vWheelAcc % WHEEL_DELTA; break; } @@ -1175,7 +1175,7 @@ GenerateXEvent( event.xany.send_event = -1; event.xkey.nbytes = 0; event.xkey.state |= ShiftMask; - event.xkey.keycode = tsdPtr->hWheelAcc / WHEEL_DELTA * WHEEL_DELTA / 3; + event.xkey.keycode = tsdPtr->hWheelAcc / WHEEL_DELTA * WHEEL_DELTA; tsdPtr->hWheelAcc = tsdPtr->hWheelAcc % WHEEL_DELTA; break; } -- cgit v0.12 From 6162cfbddcf8e3a169053a09e42e89f5d7b56b28 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 26 Jul 2019 09:57:24 +0000 Subject: Fix MouseWheel bindings for listbox and scrollbar: This fixes test-failures on Win32. Still to be tested on MacOS and X11 --- generic/tkInt.h | 2 +- library/listbox.tcl | 8 ++++---- library/scrlbar.tcl | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/generic/tkInt.h b/generic/tkInt.h index a3aa36f..07591d1 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -981,7 +981,7 @@ typedef struct TkpClipMask { # define Button6Mask (1<<13) #endif #ifndef Button7Mask -# define Button7Mask (1<<13) +# define Button7Mask (1<<14) #endif #ifndef Button8Mask # define Button8Mask (AnyModifier<<4) diff --git a/library/listbox.tcl b/library/listbox.tcl index ffd7def..769fe25 100644 --- a/library/listbox.tcl +++ b/library/listbox.tcl @@ -177,16 +177,16 @@ bind Listbox { } bind Listbox { - %W yview scroll [expr {-((%D+60) / 120)}] units + %W yview scroll [expr {-((%D+15) / 30)}] units } bind Listbox { - %W yview scroll [expr {-((%D+6) / 12)}] units + %W yview scroll [expr {-((%D+1) / 3)}] units } bind Listbox { - %W xview scroll [expr {-((%D+60) / 120)}] units + %W xview scroll [expr {-((%D+15) / 30)}] units } bind Listbox { - %W xview scroll [expr {-((%D+6) / 12)}] units + %W xview scroll [expr {-((%D+1) / 3)}] units } diff --git a/library/scrlbar.tcl b/library/scrlbar.tcl index dae11ae..a20f1a0 100644 --- a/library/scrlbar.tcl +++ b/library/scrlbar.tcl @@ -130,16 +130,16 @@ bind Scrollbar <> { } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-((%D+60) / 120)}] + tk::ScrollByUnits %W v [expr {-((%D+15) / 30)}] } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-((%D+6) / 12)}] + tk::ScrollByUnits %W v [expr {-((%D+1) / 3)}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-((%D+60) / 120)}] + tk::ScrollByUnits %W h [expr {-((%D+15) / 30)}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-((%D+6) / 12)}] + tk::ScrollByUnits %W h [expr {-((%D+1) / 3)}] } # tk::ScrollButtonDown -- -- cgit v0.12 From 9e83cbe850e17780f646217d932645e2105b605c Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 29 Jul 2019 12:48:00 +0000 Subject: Add support for "(x|y)view scroll number mouseunits" for text widget, and use it in mouse bindings. --- generic/tkTextDisp.c | 20 +++++++++++++++++--- generic/tkUtil.c | 8 ++++---- library/text.tcl | 8 ++++---- tests/entry.test | 4 ++-- tests/spinbox.test | 4 ++-- tests/textDisp.test | 16 ++++++++-------- tests/util.test | 6 +++--- 7 files changed, 40 insertions(+), 26 deletions(-) diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c index d4f6b83..2aeec2e 100644 --- a/generic/tkTextDisp.c +++ b/generic/tkTextDisp.c @@ -631,6 +631,7 @@ static int IsStartOfNotMergedLine(TkText *textPtr, #define TKTEXT_SCROLL_UNITS 3 #define TKTEXT_SCROLL_ERROR 4 #define TKTEXT_SCROLL_PIXELS 5 +#define TKTEXT_SCROLL_MOUSE 6 /* *---------------------------------------------------------------------- @@ -5893,6 +5894,10 @@ TkTextXviewCmd( case TKTEXT_SCROLL_PIXELS: dInfoPtr->newXPixelOffset += count; break; + case TKTEXT_SCROLL_MOUSE: + if (count < 0) count -= 2; + dInfoPtr->newXPixelOffset += (-count)/3; + break; } dInfoPtr->flags |= DINFO_OUT_OF_DATE; @@ -6297,6 +6302,10 @@ TkTextYviewCmd( case TKTEXT_SCROLL_PIXELS: YScrollByPixels(textPtr, count); break; + case TKTEXT_SCROLL_MOUSE: + if (count < 0) count -= 2; + YScrollByPixels(textPtr, (-count)/3); + break; case TKTEXT_SCROLL_UNITS: YScrollByLines(textPtr, count); break; @@ -8770,10 +8779,10 @@ TextGetScrollInfoObj( VIEW_MOVETO, VIEW_SCROLL }; static const char *const units[] = { - "units", "pages", "pixels", NULL + "mouseunits", "pages", "pixels", "units", NULL }; enum viewUnits { - VIEW_SCROLL_UNITS, VIEW_SCROLL_PAGES, VIEW_SCROLL_PIXELS + VIEW_SCROLL_MOUSE, VIEW_SCROLL_PAGES, VIEW_SCROLL_PIXELS, VIEW_SCROLL_UNITS }; int index; @@ -8794,7 +8803,7 @@ TextGetScrollInfoObj( return TKTEXT_SCROLL_MOVETO; case VIEW_SCROLL: if (objc != 5) { - Tcl_WrongNumArgs(interp, 3, objv, "number units|pages|pixels"); + Tcl_WrongNumArgs(interp, 3, objv, "number mouseunits|pages|pixels|units"); return TKTEXT_SCROLL_ERROR; } if (Tcl_GetIndexFromObjStruct(interp, objv[4], units, @@ -8802,6 +8811,11 @@ TextGetScrollInfoObj( return TKTEXT_SCROLL_ERROR; } switch ((enum viewUnits) index) { + case VIEW_SCROLL_MOUSE: + if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) { + return TKTEXT_SCROLL_ERROR; + } + return TKTEXT_SCROLL_MOUSE; case VIEW_SCROLL_PAGES: if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) { return TKTEXT_SCROLL_ERROR; diff --git a/generic/tkUtil.c b/generic/tkUtil.c index 2950fe0..4844bc2 100644 --- a/generic/tkUtil.c +++ b/generic/tkUtil.c @@ -668,7 +668,7 @@ Tk_GetScrollInfo( if (argc != 5) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "wrong # args: should be \"%s %s %s\"", - argv[0], argv[1], "scroll number units|pages")); + argv[0], argv[1], "scroll number pages|units")); Tcl_SetErrorCode(interp, "TCL", "WRONGARGS", NULL); return TK_SCROLL_ERROR; } @@ -684,7 +684,7 @@ Tk_GetScrollInfo( } Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad argument \"%s\": must be units or pages", argv[4])); + "bad argument \"%s\": must be pages or units", argv[4])); Tcl_SetErrorCode(interp, "TK", "VALUE", "SCROLL_UNITS", NULL); return TK_SCROLL_ERROR; } @@ -746,7 +746,7 @@ Tk_GetScrollInfoObj( return TK_SCROLL_MOVETO; } else if (ArgPfxEq("scroll")) { if (objc != 5) { - Tcl_WrongNumArgs(interp, 2, objv, "scroll number units|pages"); + Tcl_WrongNumArgs(interp, 2, objv, "scroll number pages|units"); return TK_SCROLL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) { @@ -761,7 +761,7 @@ Tk_GetScrollInfoObj( } Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad argument \"%s\": must be units or pages", arg)); + "bad argument \"%s\": must be pages or units", arg)); Tcl_SetErrorCode(interp, "TK", "VALUE", "SCROLL_UNITS", NULL); return TK_SCROLL_ERROR; } diff --git a/library/text.tcl b/library/text.tcl index 72da6ff..98255e4 100644 --- a/library/text.tcl +++ b/library/text.tcl @@ -428,16 +428,16 @@ bind Text { set ::tk::Priv(prevPos) {} bind Text { - %W yview scroll [expr {-((%D+1)/3)}] pixels + %W yview scroll %D mouseunits } bind Text { - %W yview scroll [expr {-4 * (%D)}] pixels + %W yview scroll [expr {10 * (%D)}] mouseunits } bind Text { - %W xview scroll [expr {-((%D+1)/3)}] pixels + %W xview scroll %D mouseunits } bind Text { - %W xview scroll [expr {-4 * (%D)}] pixels + %W xview scroll [expr {10 * (%D)}] mouseunits } # ::tk::TextClosestGap -- diff --git a/tests/entry.test b/tests/entry.test index 75a5da8..6207c69 100644 --- a/tests/entry.test +++ b/tests/entry.test @@ -1435,7 +1435,7 @@ test entry-3.71 {EntryWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll 24 } -cleanup { destroy .e -} -returnCodes error -result {wrong # args: should be ".e xview scroll number units|pages"} +} -returnCodes error -result {wrong # args: should be ".e xview scroll number pages|units"} test entry-3.72 {EntryWidgetCmd procedure, "xview" widget command} -setup { entry .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e @@ -1512,7 +1512,7 @@ test entry-3.77 {EntryWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll 23 foobars } -cleanup { destroy .e -} -returnCodes error -result {bad argument "foobars": must be units or pages} +} -returnCodes error -result {bad argument "foobars": must be pages or units} test entry-3.78 {EntryWidgetCmd procedure, "xview" widget command} -setup { entry .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e diff --git a/tests/spinbox.test b/tests/spinbox.test index 28ebe68..efd5b63 100644 --- a/tests/spinbox.test +++ b/tests/spinbox.test @@ -1773,7 +1773,7 @@ test spinbox-3.71 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll 24 } -cleanup { destroy .e -} -returnCodes error -result {wrong # args: should be ".e xview scroll number units|pages"} +} -returnCodes error -result {wrong # args: should be ".e xview scroll number pages|units"} test spinbox-3.72 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { spinbox .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e @@ -1850,7 +1850,7 @@ test spinbox-3.77 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll 23 foobars } -cleanup { destroy .e -} -returnCodes error -result {bad argument "foobars": must be units or pages} +} -returnCodes error -result {bad argument "foobars": must be pages or units} test spinbox-3.78 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { spinbox .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e diff --git a/tests/textDisp.test b/tests/textDisp.test index 5df5467..698f8a7 100644 --- a/tests/textDisp.test +++ b/tests/textDisp.test @@ -1867,10 +1867,10 @@ test textDisp-14.9 {TkTextXviewCmd procedure} { } [list [expr {9.0/14}] 1.0] test textDisp-14.10 {TkTextXviewCmd procedure} { list [catch {.t xview scroll a} msg] $msg -} {1 {wrong # args: should be ".t xview scroll number units|pages|pixels"}} +} {1 {wrong # args: should be ".t xview scroll number mouseunits|pages|pixels|units"}} test textDisp-14.11 {TkTextXviewCmd procedure} { list [catch {.t xview scroll a b c} msg] $msg -} {1 {wrong # args: should be ".t xview scroll number units|pages|pixels"}} +} {1 {wrong # args: should be ".t xview scroll number mouseunits|pages|pixels|units"}} test textDisp-14.12 {TkTextXviewCmd procedure} { list [catch {.t xview scroll gorp units} msg] $msg } {1 {expected integer but got "gorp"}} @@ -1904,7 +1904,7 @@ test textDisp-14.14 {TkTextXviewCmd procedure} { } {2.21 2.20 2.99 2.84} test textDisp-14.15 {TkTextXviewCmd procedure} { list [catch {.t xview scroll 14 globs} msg] $msg -} {1 {bad argument "globs": must be units, pages, or pixels}} +} {1 {bad argument "globs": must be mouseunits, pages, pixels, or units}} test textDisp-14.16 {TkTextXviewCmd procedure} { list [catch {.t xview flounder} msg] $msg } {1 {bad option "flounder": must be moveto or scroll}} @@ -2086,13 +2086,13 @@ test textDisp-16.18 {TkTextYviewCmd procedure, "moveto" roundoff} {textfonts} { } [list [expr {1.0/3}] [expr {5.0/6}]] test textDisp-16.19 {TkTextYviewCmd procedure, "scroll" option} { list [catch {.t yview scroll a} msg] $msg -} {1 {wrong # args: should be ".t yview scroll number units|pages|pixels"}} +} {1 {wrong # args: should be ".t yview scroll number mouseunits|pages|pixels|units"}} test textDisp-16.20 {TkTextYviewCmd procedure, "scroll" option} { list [catch {.t yview scroll a b c} msg] $msg -} {1 {wrong # args: should be ".t yview scroll number units|pages|pixels"}} +} {1 {wrong # args: should be ".t yview scroll number mouseunits|pages|pixels|units"}} test textDisp-16.21 {TkTextYviewCmd procedure, "scroll" option} { list [catch {.t yview scroll badInt bogus} msg] $msg -} {1 {bad argument "bogus": must be units, pages, or pixels}} +} {1 {bad argument "bogus": must be mouseunits, pages, pixels, or units}} test textDisp-16.21.2 {TkTextYviewCmd procedure, "scroll" option} { list [catch {.t yview scroll badInt units} msg] $msg } {1 {expected integer but got "badInt"}} @@ -2104,7 +2104,7 @@ test textDisp-16.22 {TkTextYviewCmd procedure, "scroll" option, back pages} { } {42.0} test textDisp-16.22.1 {TkTextYviewCmd procedure, "scroll" option, back pages} { list [catch {.t yview scroll -3 p} res] $res -} {1 {ambiguous argument "p": must be units, pages, or pixels}} +} {1 {ambiguous argument "p": must be mouseunits, pages, pixels, or units}} test textDisp-16.23 {TkTextYviewCmd procedure, "scroll" option, back pages} { .t yview 50.0 update @@ -2175,7 +2175,7 @@ test textDisp-16.31 {TkTextYviewCmd procedure, "scroll units" option} { } {151.40} test textDisp-16.32 {TkTextYviewCmd procedure} { list [catch {.t yview scroll 12 bogoids} msg] $msg -} {1 {bad argument "bogoids": must be units, pages, or pixels}} +} {1 {bad argument "bogoids": must be mouseunits, pages, pixels, or units}} test textDisp-16.33 {TkTextYviewCmd procedure} { list [catch {.t yview bad_arg 1 2} msg] $msg } {1 {bad option "bad_arg": must be moveto or scroll}} diff --git a/tests/util.test b/tests/util.test index c1ec6a5..d457b50 100644 --- a/tests/util.test +++ b/tests/util.test @@ -28,10 +28,10 @@ test util-1.3 {Tk_GetScrollInfo procedure} -body { } -result {0.5 0.75} test util-1.4 {Tk_GetScrollInfo procedure} -body { .l yview scroll a -} -returnCodes error -result {wrong # args: should be ".l yview scroll number units|pages"} +} -returnCodes error -result {wrong # args: should be ".l yview scroll number pages|units"} test util-1.5 {Tk_GetScrollInfo procedure} -body { .l yview scroll a b c -} -returnCodes error -result {wrong # args: should be ".l yview scroll number units|pages"} +} -returnCodes error -result {wrong # args: should be ".l yview scroll number pages|units"} test util-1.6 {Tk_GetScrollInfo procedure} -body { .l yview scroll xyz units } -returnCodes error -result {expected integer but got "xyz"} @@ -57,7 +57,7 @@ test util-1.10 {Tk_GetScrollInfo procedure} -body { } -result {13} test util-1.11 {Tk_GetScrollInfo procedure} -body { .l yview scroll 3 zips -} -returnCodes error -result {bad argument "zips": must be units or pages} +} -returnCodes error -result {bad argument "zips": must be pages or units} test util-1.12 {Tk_GetScrollInfo procedure} -body { .l yview dropdead 3 times } -returnCodes error -result {unknown option "dropdead": must be moveto or scroll} -- cgit v0.12 From 099f9695819a7024079f79db648c326601bac8b4 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 30 Jul 2019 07:27:43 +0000 Subject: Put (x|y)view scroll options in alphabetical order --- doc/GetScroll.3 | 8 ++++---- doc/canvas.n | 16 ++++++++-------- doc/entry.n | 12 ++++++------ doc/listbox.n | 16 +++++++++------- doc/scrollbar.n | 18 +++++++++--------- doc/spinbox.n | 10 +++++----- doc/text.n | 32 ++++++++++++++++++-------------- doc/ttk_scrollbar.n | 16 ++++++++-------- doc/ttk_widget.n | 14 ++++++++------ 9 files changed, 75 insertions(+), 67 deletions(-) diff --git a/doc/GetScroll.3 b/doc/GetScroll.3 index c0b302d..dd12cca 100644 --- a/doc/GetScroll.3 +++ b/doc/GetScroll.3 @@ -50,18 +50,18 @@ and parses the words starting with \fIobjv\fR[2]. The words starting with \fIobjv\fR[2] must have one of the following forms: .CS \fBmoveto \fIfraction\fR -\fBscroll \fInumber\fB units\fR \fBscroll \fInumber\fB pages\fR +\fBscroll \fInumber\fB units\fR .CE .LP -Any of the \fBmoveto\fR, \fBscroll\fR, \fBunits\fR, and \fBpages\fR +Any of the \fBmoveto\fR, \fBscroll\fR, \fBpages\fR, and \fBunits\fR keywords may be abbreviated. If \fIobjv\fR has the \fBmoveto\fR form, \fBTK_SCROLL_MOVETO\fR is returned as result and \fI*fractionPtr\fR is filled in with the \fIfraction\fR argument to the command, which must be a proper real value. -If \fIobjv\fR has the \fBscroll\fR form, \fBTK_SCROLL_UNITS\fR -or \fBTK_SCROLL_PAGES\fR is returned and \fI*stepsPtr\fR is filled +If \fIobjv\fR has the \fBscroll\fR form, \fBTK_SCROLL_PAGES\fR +or \fBTK_SCROLL_UNITS\fR is returned and \fI*stepsPtr\fR is filled in with the \fInumber\fR value, which must be a proper integer. If an error occurs in parsing the arguments, \fBTK_SCROLL_ERROR\fR is returned and an error message is left in interpreter diff --git a/doc/canvas.n b/doc/canvas.n index bad9113..ddaebcf 100644 --- a/doc/canvas.n +++ b/doc/canvas.n @@ -1147,16 +1147,16 @@ total width of the canvas is off-screen to the left. This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR or an abbreviation +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. -If \fIwhat\fR is \fBunits\fR, the view adjusts left or right in units -of the \fBxScrollIncrement\fR option, if it is greater than zero, -or in units of one-tenth the window's width otherwise. If \fIwhat is \fBpages\fR then the view adjusts in units of nine-tenths the window's width. If \fInumber\fR is negative then information farther to the left becomes visible; if it is positive then information farther to the right becomes visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts left or right in units +of the \fBxScrollIncrement\fR option, if it is greater than zero, +or in units of one-tenth the window's width otherwise. .RE .TP \fIpathName \fByview \fI?args\fR? @@ -1188,15 +1188,15 @@ area is off-screen to the top. This command adjusts the view in the window up or down according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR. -If \fIwhat\fR is \fBunits\fR, the view adjusts up or down in units -of the \fByScrollIncrement\fR option, if it is greater than zero, -or in units of one-tenth the window's height otherwise. +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR. If \fIwhat\fR is \fBpages\fR then the view adjusts in units of nine-tenths the window's height. If \fInumber\fR is negative then higher information becomes visible; if it is positive then lower information becomes visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts up or down in units +of the \fByScrollIncrement\fR option, if it is greater than zero, +or in units of one-tenth the window's height otherwise. .RE .SH "OVERVIEW OF ITEM TYPES" .PP diff --git a/doc/entry.n b/doc/entry.n index abbf53d..4589af0 100644 --- a/doc/entry.n +++ b/doc/entry.n @@ -404,14 +404,14 @@ way through the text appears at the left edge of the window. This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR or an abbreviation +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. -If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by -\fInumber\fR average-width characters on the display; if it is -\fBpages\fR then the view adjusts by \fInumber\fR screenfuls. -If \fInumber\fR is negative then characters farther to the left -become visible; if it is positive then characters farther to the right +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. +If \fInumber\fR is negative then characters farther to the left become +visible; if it is positive then characters farther to the right become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by +\fInumber\fR average-width characters on the display. .RE .SH "DEFAULT BINDINGS" .PP diff --git a/doc/listbox.n b/doc/listbox.n index 66b75b9..ef3ae1c 100644 --- a/doc/listbox.n +++ b/doc/listbox.n @@ -384,15 +384,16 @@ total width of the listbox text is off-screen to the left. This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR or an abbreviation +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. -If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by -\fInumber\fR character units (the width of the \fB0\fR character) -on the display; if it is \fBpages\fR then the view adjusts by +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. If \fInumber\fR is negative then characters farther to the left become visible; if it is positive then characters farther to the right become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by +\fInumber\fR character units (the width of the \fB0\fR character) +on the display. .RE .TP \fIpathName \fByview \fR?\fIargs\fR? @@ -431,13 +432,14 @@ way through the listbox, and so on. This command adjusts the view in the window up or down according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR. -If \fIwhat\fR is \fBunits\fR, the view adjusts up or down by -\fInumber\fR lines; if it is \fBpages\fR then +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR. +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. If \fInumber\fR is negative then earlier elements become visible; if it is positive then later elements become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts up or down by +\fInumber\fR lines. .RE .SH "DEFAULT BINDINGS" .PP diff --git a/doc/scrollbar.n b/doc/scrollbar.n index 4b1d4ba..5a062ce 100644 --- a/doc/scrollbar.n +++ b/doc/scrollbar.n @@ -215,15 +215,6 @@ document. 1.0 refers to the end of the document, 0.333 refers to a point one-third of the way through the document, and so on. .TP -\fIprefix \fBscroll \fInumber \fBunits\fR -. -The widget should adjust its view by \fInumber\fR units. -The units are defined in whatever way makes sense for the widget, -such as characters or lines in a text widget. -\fINumber\fR is either 1, which means one unit should scroll off -the top or left of the window, or \-1, which means that one unit -should scroll off the bottom or right of the window. -.TP \fIprefix \fBscroll \fInumber \fBpages\fR . The widget should adjust its view by \fInumber\fR pages. @@ -233,6 +224,15 @@ is a slight overlap between the old and new views. \fINumber\fR is either 1, which means the next page should become visible, or \-1, which means that the previous page should become visible. +.TP +\fIprefix \fBscroll \fInumber \fBunits\fR +. +The widget should adjust its view by \fInumber\fR units. +The units are defined in whatever way makes sense for the widget, +such as characters or lines in a text widget. +\fINumber\fR is either 1, which means one unit should scroll off +the top or left of the window, or \-1, which means that one unit +should scroll off the bottom or right of the window. .SH "OLD COMMAND SYNTAX" .PP In versions of Tk before 4.0, the \fBset\fR and \fBget\fR widget diff --git a/doc/spinbox.n b/doc/spinbox.n index f2b1ff2..6719ca3 100644 --- a/doc/spinbox.n +++ b/doc/spinbox.n @@ -471,14 +471,14 @@ way through the text appears at the left edge of the window. This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR or an abbreviation +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. -If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by -\fInumber\fR average-width characters on the display; if it is -\fBpages\fR then the view adjusts by \fInumber\fR screenfuls. -If \fInumber\fR is negative then characters farther to the left +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR +screenfuls. If \fInumber\fR is negative then characters farther to the left become visible; if it is positive then characters farther to the right become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by +\fInumber\fR average-width characters on the display. .RE .SH "DEFAULT BINDINGS" .PP diff --git a/doc/text.n b/doc/text.n index 250dff7..95a4272 100644 --- a/doc/text.n +++ b/doc/text.n @@ -1930,20 +1930,22 @@ and 1. \fIpathName \fBxview scroll \fInumber what\fR . This command shifts the view in the window left or right according to -\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBunits\fR, \fBpages\fR or -\fBpixels\fR. If \fIwhat\fR is \fBunits\fR or \fBpages\fR then \fInumber\fR -must be an integer, otherwise number may be specified in any of the forms -acceptable to \fBTk_GetPixels\fR, such as +\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBmouseunits\fR, \fBpages\fR, +\fBpixels\fR, or \fBunits\fR. If \fIwhat\fR is \fBmouseunits\fR, \fBpages\fR or +\fBunits\fR then \fInumber\fR must be an integer, otherwise number may be +specified in any of the forms acceptable to \fBTk_GetPixels\fR, such as .QW 2.0c or .QW 1i (the result is rounded to the nearest integer value. If no units are given, -pixels are assumed). If \fIwhat\fR is \fBunits\fR, the view adjusts left or -right by \fInumber\fR average-width characters on the display; if it is -\fBpages\fR then the view adjusts by \fInumber\fR screenfuls; if it is -\fBpixels\fR then the view adjusts by \fInumber\fR pixels. If \fInumber\fR is +pixels are assumed). If \fIwhat\fR is \fBpages\fR then the view adjusts by +\fInumber\fR screenfuls; if it is \fBpixels\fR then the view adjusts by +\fInumber\fR pixels; if it is \fBunits\fR, the view adjusts left or +right by \fInumber\fR average-width characters on the display. If \fInumber\fR is negative then characters farther to the left become visible; if it is positive -then characters farther to the right become visible. +then characters farther to the right become visible. If \fIwhat\fR is +\fBmouseunits\fR then the view adjusts about -\fInumber\fR/3 pixels, since +mouse units work in the other direction than pixels. .RE .TP \fIpathName \fByview \fR?\fIargs\fR? @@ -1978,10 +1980,10 @@ the bottom of the window, and some other pixel is at the top. \fIpathName \fByview scroll \fInumber what\fR . This command adjust the view in the window up or down according to -\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBunits\fR, \fBpages\fR or -\fBpixels\fR. If \fIwhat\fR is \fBunits\fR or \fBpages\fR then \fInumber\fR -must be an integer, otherwise number may be specified in any of the forms -acceptable to \fBTk_GetPixels\fR, such as +\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBmouseunits\fR, \fBpages\fR, +\fBpixels\fR, or \fBunits\fR. If \fIwhat\fR is \fBunits\fR or \fBpages\fR then +\fInumber\fR must be an integer, otherwise number may be specified in any of +the forms acceptable to \fBTk_GetPixels\fR, such as .QW 2.0c or .QW 1i @@ -1991,7 +1993,9 @@ by \fInumber\fR lines on the display; if it is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls; if it is \fBpixels\fR then the view adjusts by \fInumber\fR pixels. If \fInumber\fR is negative then earlier positions in the text become visible; if it is positive then later positions -in the text become visible. +in the text become visible. If \fIwhat\fR is \fBmouseunits\fR then the view +adjusts about -\fInumber\fR/3 pixels, since mouse units work in the other +direction than pixels. .TP \fIpathName \fByview \fR?\fB\-pickplace\fR? \fIindex\fR . diff --git a/doc/ttk_scrollbar.n b/doc/ttk_scrollbar.n index bd80760..08c7f52 100644 --- a/doc/ttk_scrollbar.n +++ b/doc/ttk_scrollbar.n @@ -118,14 +118,6 @@ document. 1.0 refers to the end of the document, 0.333 refers to a point one-third of the way through the document, and so on. .TP -\fIprefix \fBscroll \fInumber \fBunits\fR -The widget should adjust its view by \fInumber\fR units. -The units are defined in whatever way makes sense for the widget, -such as characters or lines in a text widget. -\fINumber\fR is either 1, which means one unit should scroll off -the top or left of the window, or \-1, which means that one unit -should scroll off the bottom or right of the window. -.TP \fIprefix \fBscroll \fInumber \fBpages\fR The widget should adjust its view by \fInumber\fR pages. It is up to the widget to define the meaning of a page; typically @@ -134,6 +126,14 @@ is a slight overlap between the old and new views. \fINumber\fR is either 1, which means the next page should become visible, or \-1, which means that the previous page should become visible. +.TP +\fIprefix \fBscroll \fInumber \fBunits\fR +The widget should adjust its view by \fInumber\fR units. +The units are defined in whatever way makes sense for the widget, +such as characters or lines in a text widget. +\fINumber\fR is either 1, which means one unit should scroll off +the top or left of the window, or \-1, which means that one unit +should scroll off the bottom or right of the window. .SH "WIDGET STATES" .PP The scrollbar automatically sets the \fBdisabled\fR state bit. diff --git a/doc/ttk_widget.n b/doc/ttk_widget.n index b1c280d..2dca269 100644 --- a/doc/ttk_widget.n +++ b/doc/ttk_widget.n @@ -254,14 +254,15 @@ way through the content appears at the left edge of the window. This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR. +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR. '\" or an abbreviation of one of these, but we don't document that. -If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by -\fInumber\fR average-width characters on the display; if it is +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. If \fInumber\fR is negative then characters farther to the left become visible; if it is positive then characters farther to the right become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts left or right by +\fInumber\fR average-width characters on the display. .RE .TP \fIpathName \fByview \fIargs\fR @@ -293,14 +294,15 @@ way through the content appears at the top edge of the window. This command shifts the view in the window up or down according to \fInumber\fR and \fIwhat\fR. \fINumber\fR must be an integer. -\fIWhat\fR must be either \fBunits\fR or \fBpages\fR. +\fIWhat\fR must be either \fBpages\fR or \fBunits\fR. '\" or an abbreviation of one of these, but we don't document that. -If \fIwhat\fR is \fBunits\fR, the view adjusts up or down by -\fInumber\fR average-width characters on the display; if it is +If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. If \fInumber\fR is negative then items farther to the top become visible; if it is positive then items farther to the bottom become visible. +If \fIwhat\fR is \fBunits\fR, the view adjusts up or down by +\fInumber\fR average-width characters on the display. .RE .SH "WIDGET STATES" The widget state is a bitmap of independent state flags. -- cgit v0.12 From 127c180c66bf291cae359b4c83fcfce3961af8be Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 22 Aug 2019 15:02:23 +0000 Subject: Allow using floating-point number in "scroll (x|y)view (units|pages)". They are rounded away from zero towards an integer. --- doc/GetScroll.3 | 3 ++- doc/canvas.n | 3 ++- doc/entry.n | 3 ++- doc/listbox.n | 3 ++- doc/spinbox.n | 3 ++- doc/text.n | 14 +++++--------- doc/ttk_widget.n | 3 ++- generic/tkTextDisp.c | 11 ++++++++++- library/listbox.tcl | 8 ++++---- library/scrlbar.tcl | 8 ++++---- library/ttk/utils.tcl | 12 ++++++------ tests/entry.test | 2 +- tests/spinbox.test | 2 +- tests/textDisp.test | 8 ++++---- tests/util.test | 2 +- 15 files changed, 48 insertions(+), 37 deletions(-) diff --git a/doc/GetScroll.3 b/doc/GetScroll.3 index dd12cca..d61e744 100644 --- a/doc/GetScroll.3 +++ b/doc/GetScroll.3 @@ -62,7 +62,8 @@ is returned as result and \fI*fractionPtr\fR is filled in with the value. If \fIobjv\fR has the \fBscroll\fR form, \fBTK_SCROLL_PAGES\fR or \fBTK_SCROLL_UNITS\fR is returned and \fI*stepsPtr\fR is filled -in with the \fInumber\fR value, which must be a proper integer. +in with the \fInumber\fR value, which must be a integer or a float, +but if it is a float then it is converted to an integer, rounded away from 0. If an error occurs in parsing the arguments, \fBTK_SCROLL_ERROR\fR is returned and an error message is left in interpreter \fIinterp\fR's result. diff --git a/doc/canvas.n b/doc/canvas.n index ddaebcf..95c732e 100644 --- a/doc/canvas.n +++ b/doc/canvas.n @@ -1146,7 +1146,8 @@ total width of the canvas is off-screen to the left. . This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. -\fINumber\fR must be an integer. +\fINumber\fR must be an integer or a float, but if it is a float then +it is converted to an integer, rounded away from 0. \fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. If \fIwhat is \fBpages\fR then the view diff --git a/doc/entry.n b/doc/entry.n index 4589af0..dd198a7 100644 --- a/doc/entry.n +++ b/doc/entry.n @@ -403,7 +403,8 @@ way through the text appears at the left edge of the window. \fIpathName \fBxview scroll \fInumber what\fR This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. -\fINumber\fR must be an integer. +\fINumber\fR must be an integer or a float, but if it is a float then +it is converted to an integer, rounded away from 0. \fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls. diff --git a/doc/listbox.n b/doc/listbox.n index ef3ae1c..c2ff09e 100644 --- a/doc/listbox.n +++ b/doc/listbox.n @@ -383,7 +383,8 @@ total width of the listbox text is off-screen to the left. . This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. -\fINumber\fR must be an integer. +\fINumber\fR must be an integer or a float, but if it is a float then +it is converted to an integer, rounded away from 0. \fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. If \fIwhat\fR is \fBpages\fR then the view adjusts by diff --git a/doc/spinbox.n b/doc/spinbox.n index 6719ca3..6d0646b 100644 --- a/doc/spinbox.n +++ b/doc/spinbox.n @@ -470,7 +470,8 @@ way through the text appears at the left edge of the window. \fIpathName \fBxview scroll \fInumber what\fR This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. -\fINumber\fR must be an integer. +\fINumber\fR must be an integer or a float, but if it is a float then +it is converted to an integer, rounded away from 0. \fIWhat\fR must be either \fBpages\fR or \fBunits\fR or an abbreviation of one of these. If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR diff --git a/doc/text.n b/doc/text.n index 95a4272..c4128a1 100644 --- a/doc/text.n +++ b/doc/text.n @@ -1930,8 +1930,8 @@ and 1. \fIpathName \fBxview scroll \fInumber what\fR . This command shifts the view in the window left or right according to -\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBmouseunits\fR, \fBpages\fR, -\fBpixels\fR, or \fBunits\fR. If \fIwhat\fR is \fBmouseunits\fR, \fBpages\fR or +\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBpages\fR, +\fBpixels\fR, or \fBunits\fR. If \fIwhat\fR is \fBpages\fR or \fBunits\fR then \fInumber\fR must be an integer, otherwise number may be specified in any of the forms acceptable to \fBTk_GetPixels\fR, such as .QW 2.0c @@ -1943,9 +1943,7 @@ pixels are assumed). If \fIwhat\fR is \fBpages\fR then the view adjusts by \fInumber\fR pixels; if it is \fBunits\fR, the view adjusts left or right by \fInumber\fR average-width characters on the display. If \fInumber\fR is negative then characters farther to the left become visible; if it is positive -then characters farther to the right become visible. If \fIwhat\fR is -\fBmouseunits\fR then the view adjusts about -\fInumber\fR/3 pixels, since -mouse units work in the other direction than pixels. +then characters farther to the right become visible. .RE .TP \fIpathName \fByview \fR?\fIargs\fR? @@ -1980,7 +1978,7 @@ the bottom of the window, and some other pixel is at the top. \fIpathName \fByview scroll \fInumber what\fR . This command adjust the view in the window up or down according to -\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBmouseunits\fR, \fBpages\fR, +\fInumber\fR and \fIwhat\fR. \fIWhat\fR must be \fBpages\fR, \fBpixels\fR, or \fBunits\fR. If \fIwhat\fR is \fBunits\fR or \fBpages\fR then \fInumber\fR must be an integer, otherwise number may be specified in any of the forms acceptable to \fBTk_GetPixels\fR, such as @@ -1993,9 +1991,7 @@ by \fInumber\fR lines on the display; if it is \fBpages\fR then the view adjusts by \fInumber\fR screenfuls; if it is \fBpixels\fR then the view adjusts by \fInumber\fR pixels. If \fInumber\fR is negative then earlier positions in the text become visible; if it is positive then later positions -in the text become visible. If \fIwhat\fR is \fBmouseunits\fR then the view -adjusts about -\fInumber\fR/3 pixels, since mouse units work in the other -direction than pixels. +in the text become visible. .TP \fIpathName \fByview \fR?\fB\-pickplace\fR? \fIindex\fR . diff --git a/doc/ttk_widget.n b/doc/ttk_widget.n index 2dca269..fdacfd0 100644 --- a/doc/ttk_widget.n +++ b/doc/ttk_widget.n @@ -253,7 +253,8 @@ way through the content appears at the left edge of the window. \fIpathName \fBxview scroll \fInumber what\fR This command shifts the view in the window left or right according to \fInumber\fR and \fIwhat\fR. -\fINumber\fR must be an integer. +\fINumber\fR must be an integer or a float, but if it is a float then +it is converted to an integer, rounded away from 0. \fIWhat\fR must be either \fBpages\fR or \fBunits\fR. '\" or an abbreviation of one of these, but we don't document that. If \fIwhat\fR is diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c index 33b9720..e6dc988 100644 --- a/generic/tkTextDisp.c +++ b/generic/tkTextDisp.c @@ -8776,6 +8776,7 @@ TextGetScrollInfoObj( VIEW_SCROLL_PAGES, VIEW_SCROLL_PIXELS, VIEW_SCROLL_UNITS }; int index; + double d; if (Tcl_GetIndexFromObjStruct(interp, objv[2], subcommands, sizeof(char *), "option", 0, &index) != TCL_OK) { @@ -8814,9 +8815,17 @@ TextGetScrollInfoObj( } return TKTEXT_SCROLL_PIXELS; case VIEW_SCROLL_UNITS: - if (Tcl_GetIntFromObj(interp, objv[3], intPtr) != TCL_OK) { + if (Tcl_GetDoubleFromObj(interp, objv[3], &d) != TCL_OK) { return TKTEXT_SCROLL_ERROR; } + if (d > 0) { + *intPtr = ceil(d); + } else { + *intPtr = floor(d); + } + if (dblPtr) { + *dblPtr = d; + } return TKTEXT_SCROLL_UNITS; } } diff --git a/library/listbox.tcl b/library/listbox.tcl index 4a76a18..7400494 100644 --- a/library/listbox.tcl +++ b/library/listbox.tcl @@ -177,16 +177,16 @@ bind Listbox { } bind Listbox { - %W yview scroll [expr {-(%D/30)}] units + %W yview scroll [expr {%D/-30}] units } bind Listbox { - %W yview scroll [expr {-(%D/3)}] units + %W yview scroll [expr {%D/-3}] units } bind Listbox { - %W xview scroll [expr {-(%D/30)}] units + %W xview scroll [expr {%D/-30}] units } bind Listbox { - %W xview scroll [expr {-(%D/3)}] units + %W xview scroll [expr {%D/-3}] units } # ::tk::ListboxBeginSelect -- diff --git a/library/scrlbar.tcl b/library/scrlbar.tcl index d797b24..2b3503a 100644 --- a/library/scrlbar.tcl +++ b/library/scrlbar.tcl @@ -130,16 +130,16 @@ bind Scrollbar <> { } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-(%D / 30)}] + tk::ScrollByUnits %W v [expr {%D/-30.0}] } bind Scrollbar { - tk::ScrollByUnits %W v [expr {-(%D / 3)}] + tk::ScrollByUnits %W v [expr {%D/-3.0}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-(%D / 30)}] + tk::ScrollByUnits %W h [expr {%D/-30.0}] } bind Scrollbar { - tk::ScrollByUnits %W h [expr {-(%D / 3)}] + tk::ScrollByUnits %W h [expr {%D/-3.0}] } # tk::ScrollButtonDown -- diff --git a/library/ttk/utils.tcl b/library/ttk/utils.tcl index fc8b4e0..4827aa3 100644 --- a/library/ttk/utils.tcl +++ b/library/ttk/utils.tcl @@ -285,8 +285,8 @@ proc ttk::copyBindings {from to} { # proc ttk::bindMouseWheel {bindtag callback} { - bind $bindtag [append callback { [expr {-(%D / 120)}]}] - bind $bindtag [append callback { [expr {-(%D / 12)}]}] + bind $bindtag [append callback { [expr {%D/-120.0}]}] + bind $bindtag [append callback { [expr {%D/-12.0}]}] } ## Mousewheel bindings for standard scrollable widgets. @@ -298,12 +298,12 @@ proc ttk::bindMouseWheel {bindtag callback} { # bind TtkScrollable \ - { %W yview scroll [expr {-(%D / 120)}] units } + { %W yview scroll [expr {%D/-120}] units } bind TtkScrollable \ - { %W yview scroll [expr {-(%D / 12)}] units } + { %W yview scroll [expr {%D/-12}] units } bind TtkScrollable \ - { %W xview scroll [expr {-(%D / 120)}] units } + { %W xview scroll [expr {%D/-120}] units } bind TtkScrollable \ - { %W xview scroll [expr {-(%D / 12)}] units } + { %W xview scroll [expr {%D/-12}] units } #*EOF* diff --git a/tests/entry.test b/tests/entry.test index 6207c69..47b459d 100644 --- a/tests/entry.test +++ b/tests/entry.test @@ -1446,7 +1446,7 @@ test entry-3.72 {EntryWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll gorp units } -cleanup { destroy .e -} -returnCodes error -result {expected integer but got "gorp"} +} -returnCodes error -result {expected floating-point number but got "gorp"} test entry-3.73 {EntryWidgetCmd procedure, "xview" widget command} -setup { entry .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e diff --git a/tests/spinbox.test b/tests/spinbox.test index efd5b63..65c5bd9 100644 --- a/tests/spinbox.test +++ b/tests/spinbox.test @@ -1784,7 +1784,7 @@ test spinbox-3.72 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { .e xview scroll gorp units } -cleanup { destroy .e -} -returnCodes error -result {expected integer but got "gorp"} +} -returnCodes error -result {expected floating-point number but got "gorp"} test spinbox-3.73 {SpinboxWidgetCmd procedure, "xview" widget command} -setup { spinbox .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e diff --git a/tests/textDisp.test b/tests/textDisp.test index 1b6f4c5..c029a69 100644 --- a/tests/textDisp.test +++ b/tests/textDisp.test @@ -1873,7 +1873,7 @@ test textDisp-14.11 {TkTextXviewCmd procedure} { } {1 {wrong # args: should be ".t xview scroll number pages|pixels|units"}} test textDisp-14.12 {TkTextXviewCmd procedure} { list [catch {.t xview scroll gorp units} msg] $msg -} {1 {expected integer but got "gorp"}} +} {1 {expected floating-point number but got "gorp"}} test textDisp-14.13 {TkTextXviewCmd procedure} { .t delete 1.0 end .t insert end xxxxxxxxx\n @@ -2091,11 +2091,11 @@ test textDisp-16.20 {TkTextYviewCmd procedure, "scroll" option} { list [catch {.t yview scroll a b c} msg] $msg } {1 {wrong # args: should be ".t yview scroll number pages|pixels|units"}} test textDisp-16.21 {TkTextYviewCmd procedure, "scroll" option} { - list [catch {.t yview scroll badInt bogus} msg] $msg + list [catch {.t yview scroll bogus bogus} msg] $msg } {1 {bad argument "bogus": must be pages, pixels, or units}} test textDisp-16.21.2 {TkTextYviewCmd procedure, "scroll" option} { - list [catch {.t yview scroll badInt units} msg] $msg -} {1 {expected integer but got "badInt"}} + list [catch {.t yview scroll bogus units} msg] $msg +} {1 {expected floating-point number but got "bogus"}} test textDisp-16.22 {TkTextYviewCmd procedure, "scroll" option, back pages} { .t yview 50.0 update diff --git a/tests/util.test b/tests/util.test index d457b50..c2f4542 100644 --- a/tests/util.test +++ b/tests/util.test @@ -34,7 +34,7 @@ test util-1.5 {Tk_GetScrollInfo procedure} -body { } -returnCodes error -result {wrong # args: should be ".l yview scroll number pages|units"} test util-1.6 {Tk_GetScrollInfo procedure} -body { .l yview scroll xyz units -} -returnCodes error -result {expected integer but got "xyz"} +} -returnCodes error -result {expected floating-point number but got "xyz"} test util-1.7 {Tk_GetScrollInfo procedure} -body { .l yview 0 .l yview scroll 2 pages -- cgit v0.12 From 68fc0a0ef4781d53802b28f569935acedc875a92 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 22 Aug 2019 15:29:53 +0000 Subject: Use some more "(x|y)view scroll units" automatic rounding in bindings. --- library/demos/cscroll.tcl | 15 ++++++++++++++- library/iconlist.tcl | 6 +----- library/listbox.tcl | 8 ++++---- library/ttk/utils.tcl | 8 ++++---- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/library/demos/cscroll.tcl b/library/demos/cscroll.tcl index 7bbb91c..1740f94 100644 --- a/library/demos/cscroll.tcl +++ b/library/demos/cscroll.tcl @@ -58,7 +58,20 @@ $c bind all "scrollLeave $c" $c bind all <1> "scrollButton $c" bind $c <2> "$c scan mark %x %y" bind $c "$c scan dragto %x %y" -if {[tk windowingsystem] eq "aqua" && ![package vsatisfies [package provide Tk] 8.7-]} { +if {[package vsatisfies [package provide Tk] 8.7-]} { + bind $c { + %W yview scroll [expr {%D/-30.0}] units + } + bind $c { + %W yview scroll [expr {%D/-3.0}] units + } + bind $c { + %W xview scroll [expr {%D/-30.0}] units + } + bind $c { + %W xview scroll [expr {%D/-3.0}] units + } +} elseif {[tk windowingsystem] eq "aqua"} { bind $c { %W yview scroll [expr {-(%D)}] units } diff --git a/library/iconlist.tcl b/library/iconlist.tcl index 30352a1..65c66b1 100644 --- a/library/iconlist.tcl +++ b/library/iconlist.tcl @@ -509,11 +509,7 @@ package require Tk 8.6 if {$noScroll || $::tk_strictMotif} { return } - if {$amount > 0} { - $canvas xview scroll [expr {(-119-$amount) / 120}] units - } else { - $canvas xview scroll [expr {-($amount / 120)}] units - } + $canvas xview scroll [expr {$amount/-120.0}] units } method Btn1 {x y} { focus $canvas diff --git a/library/listbox.tcl b/library/listbox.tcl index 7400494..500c32e 100644 --- a/library/listbox.tcl +++ b/library/listbox.tcl @@ -177,16 +177,16 @@ bind Listbox { } bind Listbox { - %W yview scroll [expr {%D/-30}] units + %W yview scroll [expr {%D/-30.0}] units } bind Listbox { - %W yview scroll [expr {%D/-3}] units + %W yview scroll [expr {%D/-3.0}] units } bind Listbox { - %W xview scroll [expr {%D/-30}] units + %W xview scroll [expr {%D/-30.0}] units } bind Listbox { - %W xview scroll [expr {%D/-3}] units + %W xview scroll [expr {%D/-3.0}] units } # ::tk::ListboxBeginSelect -- diff --git a/library/ttk/utils.tcl b/library/ttk/utils.tcl index 4827aa3..3729254 100644 --- a/library/ttk/utils.tcl +++ b/library/ttk/utils.tcl @@ -298,12 +298,12 @@ proc ttk::bindMouseWheel {bindtag callback} { # bind TtkScrollable \ - { %W yview scroll [expr {%D/-120}] units } + { %W yview scroll [expr {%D/-120.0}] units } bind TtkScrollable \ - { %W yview scroll [expr {%D/-12}] units } + { %W yview scroll [expr {%D/-12.0}] units } bind TtkScrollable \ - { %W xview scroll [expr {%D/-120}] units } + { %W xview scroll [expr {%D/-120.0}] units } bind TtkScrollable \ - { %W xview scroll [expr {%D/-12}] units } + { %W xview scroll [expr {%D/-12.0}] units } #*EOF* -- cgit v0.12 From a4d797e54b60d127a6956ab37a9431a0da7b83ef Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 14 Oct 2019 15:10:12 +0000 Subject: Use Unicode for keysym names in stead of standard X11-R6 names representing Unicode characters. --- doc/keysyms.n | 709 ----------------------------------------------- generic/ks_names.h | 719 ----------------------------------------------- generic/tkBind.c | 33 ++- tests/bind.test | 14 + xlib/X11/keysymdef.h | 768 --------------------------------------------------- 5 files changed, 43 insertions(+), 2200 deletions(-) diff --git a/doc/keysyms.n b/doc/keysyms.n index 0ad0324..12334f1 100644 --- a/doc/keysyms.n +++ b/doc/keysyms.n @@ -1328,715 +1328,6 @@ braille_dot_8 65528 0xFFF8 braille_dot_9 65529 0xFFF9 braille_dot_10 65530 0xFFFA Delete 65535 0xFFFF -Ibreve 16777516 0x100012C -ibreve 16777517 0x100012D -Wcircumflex 16777588 0x1000174 -wcircumflex 16777589 0x1000175 -Ycircumflex 16777590 0x1000176 -ycircumflex 16777591 0x1000177 -SCHWA 16777615 0x100018F -Obarred 16777631 0x100019F -Ohorn 16777632 0x10001A0 -ohorn 16777633 0x10001A1 -Uhorn 16777647 0x10001AF -uhorn 16777648 0x10001B0 -Zstroke 16777653 0x10001B5 -zstroke 16777654 0x10001B6 -EZH 16777655 0x10001B7 -Ocaron 16777681 0x10001D1 -ocaron 16777682 0x10001D2 -Gcaron 16777702 0x10001E6 -gcaron 16777703 0x10001E7 -schwa 16777817 0x1000259 -obarred 16777845 0x1000275 -ezh 16777874 0x1000292 -Cyrillic_GHE_bar 16778386 0x1000492 -Cyrillic_ghe_bar 16778387 0x1000493 -Cyrillic_ZHE_descender 16778390 0x1000496 -Cyrillic_zhe_descender 16778391 0x1000497 -Cyrillic_KA_descender 16778394 0x100049A -Cyrillic_ka_descender 16778395 0x100049B -Cyrillic_KA_vertstroke 16778396 0x100049C -Cyrillic_ka_vertstroke 16778397 0x100049D -Cyrillic_EN_descender 16778402 0x10004A2 -Cyrillic_en_descender 16778403 0x10004A3 -Cyrillic_U_straight 16778414 0x10004AE -Cyrillic_u_straight 16778415 0x10004AF -Cyrillic_U_straight_bar 16778416 0x10004B0 -Cyrillic_u_straight_bar 16778417 0x10004B1 -Cyrillic_HA_descender 16778418 0x10004B2 -Cyrillic_ha_descender 16778419 0x10004B3 -Cyrillic_CHE_descender 16778422 0x10004B6 -Cyrillic_che_descender 16778423 0x10004B7 -Cyrillic_CHE_vertstroke 16778424 0x10004B8 -Cyrillic_che_vertstroke 16778425 0x10004B9 -Cyrillic_SHHA 16778426 0x10004BA -Cyrillic_shha 16778427 0x10004BB -Cyrillic_SCHWA 16778456 0x10004D8 -Cyrillic_schwa 16778457 0x10004D9 -Cyrillic_I_macron 16778466 0x10004E2 -Cyrillic_i_macron 16778467 0x10004E3 -Cyrillic_O_bar 16778472 0x10004E8 -Cyrillic_o_bar 16778473 0x10004E9 -Cyrillic_U_macron 16778478 0x10004EE -Cyrillic_u_macron 16778479 0x10004EF -Armenian_AYB 16778545 0x1000531 -Armenian_BEN 16778546 0x1000532 -Armenian_GIM 16778547 0x1000533 -Armenian_DA 16778548 0x1000534 -Armenian_YECH 16778549 0x1000535 -Armenian_ZA 16778550 0x1000536 -Armenian_E 16778551 0x1000537 -Armenian_AT 16778552 0x1000538 -Armenian_TO 16778553 0x1000539 -Armenian_ZHE 16778554 0x100053A -Armenian_INI 16778555 0x100053B -Armenian_LYUN 16778556 0x100053C -Armenian_KHE 16778557 0x100053D -Armenian_TSA 16778558 0x100053E -Armenian_KEN 16778559 0x100053F -Armenian_HO 16778560 0x1000540 -Armenian_DZA 16778561 0x1000541 -Armenian_GHAT 16778562 0x1000542 -Armenian_TCHE 16778563 0x1000543 -Armenian_MEN 16778564 0x1000544 -Armenian_HI 16778565 0x1000545 -Armenian_NU 16778566 0x1000546 -Armenian_SHA 16778567 0x1000547 -Armenian_VO 16778568 0x1000548 -Armenian_CHA 16778569 0x1000549 -Armenian_PE 16778570 0x100054A -Armenian_JE 16778571 0x100054B -Armenian_RA 16778572 0x100054C -Armenian_SE 16778573 0x100054D -Armenian_VEV 16778574 0x100054E -Armenian_TYUN 16778575 0x100054F -Armenian_RE 16778576 0x1000550 -Armenian_TSO 16778577 0x1000551 -Armenian_VYUN 16778578 0x1000552 -Armenian_PYUR 16778579 0x1000553 -Armenian_KE 16778580 0x1000554 -Armenian_O 16778581 0x1000555 -Armenian_FE 16778582 0x1000556 -Armenian_apostrophe 16778586 0x100055A -Armenian_accent 16778587 0x100055B -Armenian_exclam 16778588 0x100055C -Armenian_separation_mark 16778589 0x100055D -Armenian_question 16778590 0x100055E -Armenian_ayb 16778593 0x1000561 -Armenian_ben 16778594 0x1000562 -Armenian_gim 16778595 0x1000563 -Armenian_da 16778596 0x1000564 -Armenian_yech 16778597 0x1000565 -Armenian_za 16778598 0x1000566 -Armenian_e 16778599 0x1000567 -Armenian_at 16778600 0x1000568 -Armenian_to 16778601 0x1000569 -Armenian_zhe 16778602 0x100056A -Armenian_ini 16778603 0x100056B -Armenian_lyun 16778604 0x100056C -Armenian_khe 16778605 0x100056D -Armenian_tsa 16778606 0x100056E -Armenian_ken 16778607 0x100056F -Armenian_ho 16778608 0x1000570 -Armenian_dza 16778609 0x1000571 -Armenian_ghat 16778610 0x1000572 -Armenian_tche 16778611 0x1000573 -Armenian_men 16778612 0x1000574 -Armenian_hi 16778613 0x1000575 -Armenian_nu 16778614 0x1000576 -Armenian_sha 16778615 0x1000577 -Armenian_vo 16778616 0x1000578 -Armenian_cha 16778617 0x1000579 -Armenian_pe 16778618 0x100057A -Armenian_je 16778619 0x100057B -Armenian_ra 16778620 0x100057C -Armenian_se 16778621 0x100057D -Armenian_vev 16778622 0x100057E -Armenian_tyun 16778623 0x100057F -Armenian_re 16778624 0x1000580 -Armenian_tso 16778625 0x1000581 -Armenian_vyun 16778626 0x1000582 -Armenian_pyur 16778627 0x1000583 -Armenian_ke 16778628 0x1000584 -Armenian_o 16778629 0x1000585 -Armenian_fe 16778630 0x1000586 -Armenian_ligature_ew 16778631 0x1000587 -Armenian_full_stop 16778633 0x1000589 -Armenian_hyphen 16778634 0x100058A -Arabic_madda_above 16778835 0x1000653 -Arabic_hamza_above 16778836 0x1000654 -Arabic_hamza_below 16778837 0x1000655 -Arabic_0 16778848 0x1000660 -Arabic_1 16778849 0x1000661 -Arabic_2 16778850 0x1000662 -Arabic_3 16778851 0x1000663 -Arabic_4 16778852 0x1000664 -Arabic_5 16778853 0x1000665 -Arabic_6 16778854 0x1000666 -Arabic_7 16778855 0x1000667 -Arabic_8 16778856 0x1000668 -Arabic_9 16778857 0x1000669 -Arabic_percent 16778858 0x100066A -Arabic_superscript_alef 16778864 0x1000670 -Arabic_tteh 16778873 0x1000679 -Arabic_peh 16778878 0x100067E -Arabic_tcheh 16778886 0x1000686 -Arabic_ddal 16778888 0x1000688 -Arabic_rreh 16778897 0x1000691 -Arabic_jeh 16778904 0x1000698 -Arabic_veh 16778916 0x10006A4 -Arabic_keheh 16778921 0x10006A9 -Arabic_gaf 16778927 0x10006AF -Arabic_noon_ghunna 16778938 0x10006BA -Arabic_heh_doachashmee 16778942 0x10006BE -Arabic_heh_goal 16778945 0x10006C1 -Farsi_yeh 16778956 0x10006CC -Arabic_yeh_baree 16778962 0x10006D2 -Arabic_fullstop 16778964 0x10006D4 -Farsi_0 16778992 0x10006F0 -Farsi_1 16778993 0x10006F1 -Farsi_2 16778994 0x10006F2 -Farsi_3 16778995 0x10006F3 -Farsi_4 16778996 0x10006F4 -Farsi_5 16778997 0x10006F5 -Farsi_6 16778998 0x10006F6 -Farsi_7 16778999 0x10006F7 -Farsi_8 16779000 0x10006F8 -Farsi_9 16779001 0x10006F9 -Sinh_ng 16780674 0x1000D82 -Sinh_h2 16780675 0x1000D83 -Sinh_a 16780677 0x1000D85 -Sinh_aa 16780678 0x1000D86 -Sinh_ae 16780679 0x1000D87 -Sinh_aee 16780680 0x1000D88 -Sinh_i 16780681 0x1000D89 -Sinh_ii 16780682 0x1000D8A -Sinh_u 16780683 0x1000D8B -Sinh_uu 16780684 0x1000D8C -Sinh_ri 16780685 0x1000D8D -Sinh_rii 16780686 0x1000D8E -Sinh_lu 16780687 0x1000D8F -Sinh_luu 16780688 0x1000D90 -Sinh_e 16780689 0x1000D91 -Sinh_ee 16780690 0x1000D92 -Sinh_ai 16780691 0x1000D93 -Sinh_o 16780692 0x1000D94 -Sinh_oo 16780693 0x1000D95 -Sinh_au 16780694 0x1000D96 -Sinh_ka 16780698 0x1000D9A -Sinh_kha 16780699 0x1000D9B -Sinh_ga 16780700 0x1000D9C -Sinh_gha 16780701 0x1000D9D -Sinh_ng2 16780702 0x1000D9E -Sinh_nga 16780703 0x1000D9F -Sinh_ca 16780704 0x1000DA0 -Sinh_cha 16780705 0x1000DA1 -Sinh_ja 16780706 0x1000DA2 -Sinh_jha 16780707 0x1000DA3 -Sinh_nya 16780708 0x1000DA4 -Sinh_jnya 16780709 0x1000DA5 -Sinh_nja 16780710 0x1000DA6 -Sinh_tta 16780711 0x1000DA7 -Sinh_ttha 16780712 0x1000DA8 -Sinh_dda 16780713 0x1000DA9 -Sinh_ddha 16780714 0x1000DAA -Sinh_nna 16780715 0x1000DAB -Sinh_ndda 16780716 0x1000DAC -Sinh_tha 16780717 0x1000DAD -Sinh_thha 16780718 0x1000DAE -Sinh_dha 16780719 0x1000DAF -Sinh_dhha 16780720 0x1000DB0 -Sinh_na 16780721 0x1000DB1 -Sinh_ndha 16780723 0x1000DB3 -Sinh_pa 16780724 0x1000DB4 -Sinh_pha 16780725 0x1000DB5 -Sinh_ba 16780726 0x1000DB6 -Sinh_bha 16780727 0x1000DB7 -Sinh_ma 16780728 0x1000DB8 -Sinh_mba 16780729 0x1000DB9 -Sinh_ya 16780730 0x1000DBA -Sinh_ra 16780731 0x1000DBB -Sinh_la 16780733 0x1000DBD -Sinh_va 16780736 0x1000DC0 -Sinh_sha 16780737 0x1000DC1 -Sinh_ssha 16780738 0x1000DC2 -Sinh_sa 16780739 0x1000DC3 -Sinh_ha 16780740 0x1000DC4 -Sinh_lla 16780741 0x1000DC5 -Sinh_fa 16780742 0x1000DC6 -Sinh_al 16780746 0x1000DCA -Sinh_aa2 16780751 0x1000DCF -Sinh_ae2 16780752 0x1000DD0 -Sinh_aee2 16780753 0x1000DD1 -Sinh_i2 16780754 0x1000DD2 -Sinh_ii2 16780755 0x1000DD3 -Sinh_u2 16780756 0x1000DD4 -Sinh_uu2 16780758 0x1000DD6 -Sinh_ru2 16780760 0x1000DD8 -Sinh_e2 16780761 0x1000DD9 -Sinh_ee2 16780762 0x1000DDA -Sinh_ai2 16780763 0x1000DDB -Sinh_o2 16780764 0x1000DDC -Sinh_oo2 16780765 0x1000DDD -Sinh_au2 16780766 0x1000DDE -Sinh_lu2 16780767 0x1000DDF -Sinh_ruu2 16780786 0x1000DF2 -Sinh_luu2 16780787 0x1000DF3 -Sinh_kunddaliya 16780788 0x1000DF4 -Georgian_an 16781520 0x10010D0 -Georgian_ban 16781521 0x10010D1 -Georgian_gan 16781522 0x10010D2 -Georgian_don 16781523 0x10010D3 -Georgian_en 16781524 0x10010D4 -Georgian_vin 16781525 0x10010D5 -Georgian_zen 16781526 0x10010D6 -Georgian_tan 16781527 0x10010D7 -Georgian_in 16781528 0x10010D8 -Georgian_kan 16781529 0x10010D9 -Georgian_las 16781530 0x10010DA -Georgian_man 16781531 0x10010DB -Georgian_nar 16781532 0x10010DC -Georgian_on 16781533 0x10010DD -Georgian_par 16781534 0x10010DE -Georgian_zhar 16781535 0x10010DF -Georgian_rae 16781536 0x10010E0 -Georgian_san 16781537 0x10010E1 -Georgian_tar 16781538 0x10010E2 -Georgian_un 16781539 0x10010E3 -Georgian_phar 16781540 0x10010E4 -Georgian_khar 16781541 0x10010E5 -Georgian_ghan 16781542 0x10010E6 -Georgian_qar 16781543 0x10010E7 -Georgian_shin 16781544 0x10010E8 -Georgian_chin 16781545 0x10010E9 -Georgian_can 16781546 0x10010EA -Georgian_jil 16781547 0x10010EB -Georgian_cil 16781548 0x10010EC -Georgian_char 16781549 0x10010ED -Georgian_xan 16781550 0x10010EE -Georgian_jhan 16781551 0x10010EF -Georgian_hae 16781552 0x10010F0 -Georgian_he 16781553 0x10010F1 -Georgian_hie 16781554 0x10010F2 -Georgian_we 16781555 0x10010F3 -Georgian_har 16781556 0x10010F4 -Georgian_hoe 16781557 0x10010F5 -Georgian_fi 16781558 0x10010F6 -Babovedot 16784898 0x1001E02 -babovedot 16784899 0x1001E03 -Dabovedot 16784906 0x1001E0A -dabovedot 16784907 0x1001E0B -Fabovedot 16784926 0x1001E1E -fabovedot 16784927 0x1001E1F -Lbelowdot 16784950 0x1001E36 -lbelowdot 16784951 0x1001E37 -Mabovedot 16784960 0x1001E40 -mabovedot 16784961 0x1001E41 -Pabovedot 16784982 0x1001E56 -pabovedot 16784983 0x1001E57 -Sabovedot 16784992 0x1001E60 -sabovedot 16784993 0x1001E61 -Tabovedot 16785002 0x1001E6A -tabovedot 16785003 0x1001E6B -Wgrave 16785024 0x1001E80 -wgrave 16785025 0x1001E81 -Wacute 16785026 0x1001E82 -wacute 16785027 0x1001E83 -Wdiaeresis 16785028 0x1001E84 -wdiaeresis 16785029 0x1001E85 -Xabovedot 16785034 0x1001E8A -xabovedot 16785035 0x1001E8B -Abelowdot 16785056 0x1001EA0 -abelowdot 16785057 0x1001EA1 -Ahook 16785058 0x1001EA2 -ahook 16785059 0x1001EA3 -Acircumflexacute 16785060 0x1001EA4 -acircumflexacute 16785061 0x1001EA5 -Acircumflexgrave 16785062 0x1001EA6 -acircumflexgrave 16785063 0x1001EA7 -Acircumflexhook 16785064 0x1001EA8 -acircumflexhook 16785065 0x1001EA9 -Acircumflextilde 16785066 0x1001EAA -acircumflextilde 16785067 0x1001EAB -Acircumflexbelowdot 16785068 0x1001EAC -acircumflexbelowdot 16785069 0x1001EAD -Abreveacute 16785070 0x1001EAE -abreveacute 16785071 0x1001EAF -Abrevegrave 16785072 0x1001EB0 -abrevegrave 16785073 0x1001EB1 -Abrevehook 16785074 0x1001EB2 -abrevehook 16785075 0x1001EB3 -Abrevetilde 16785076 0x1001EB4 -abrevetilde 16785077 0x1001EB5 -Abrevebelowdot 16785078 0x1001EB6 -abrevebelowdot 16785079 0x1001EB7 -Ebelowdot 16785080 0x1001EB8 -ebelowdot 16785081 0x1001EB9 -Ehook 16785082 0x1001EBA -ehook 16785083 0x1001EBB -Etilde 16785084 0x1001EBC -etilde 16785085 0x1001EBD -Ecircumflexacute 16785086 0x1001EBE -ecircumflexacute 16785087 0x1001EBF -Ecircumflexgrave 16785088 0x1001EC0 -ecircumflexgrave 16785089 0x1001EC1 -Ecircumflexhook 16785090 0x1001EC2 -ecircumflexhook 16785091 0x1001EC3 -Ecircumflextilde 16785092 0x1001EC4 -ecircumflextilde 16785093 0x1001EC5 -Ecircumflexbelowdot 16785094 0x1001EC6 -ecircumflexbelowdot 16785095 0x1001EC7 -Ihook 16785096 0x1001EC8 -ihook 16785097 0x1001EC9 -Ibelowdot 16785098 0x1001ECA -ibelowdot 16785099 0x1001ECB -Obelowdot 16785100 0x1001ECC -obelowdot 16785101 0x1001ECD -Ohook 16785102 0x1001ECE -ohook 16785103 0x1001ECF -Ocircumflexacute 16785104 0x1001ED0 -ocircumflexacute 16785105 0x1001ED1 -Ocircumflexgrave 16785106 0x1001ED2 -ocircumflexgrave 16785107 0x1001ED3 -Ocircumflexhook 16785108 0x1001ED4 -ocircumflexhook 16785109 0x1001ED5 -Ocircumflextilde 16785110 0x1001ED6 -ocircumflextilde 16785111 0x1001ED7 -Ocircumflexbelowdot 16785112 0x1001ED8 -ocircumflexbelowdot 16785113 0x1001ED9 -Ohornacute 16785114 0x1001EDA -ohornacute 16785115 0x1001EDB -Ohorngrave 16785116 0x1001EDC -ohorngrave 16785117 0x1001EDD -Ohornhook 16785118 0x1001EDE -ohornhook 16785119 0x1001EDF -Ohorntilde 16785120 0x1001EE0 -ohorntilde 16785121 0x1001EE1 -Ohornbelowdot 16785122 0x1001EE2 -ohornbelowdot 16785123 0x1001EE3 -Ubelowdot 16785124 0x1001EE4 -ubelowdot 16785125 0x1001EE5 -Uhook 16785126 0x1001EE6 -uhook 16785127 0x1001EE7 -Uhornacute 16785128 0x1001EE8 -uhornacute 16785129 0x1001EE9 -Uhorngrave 16785130 0x1001EEA -uhorngrave 16785131 0x1001EEB -Uhornhook 16785132 0x1001EEC -uhornhook 16785133 0x1001EED -Uhorntilde 16785134 0x1001EEE -uhorntilde 16785135 0x1001EEF -Uhornbelowdot 16785136 0x1001EF0 -uhornbelowdot 16785137 0x1001EF1 -Ygrave 16785138 0x1001EF2 -ygrave 16785139 0x1001EF3 -Ybelowdot 16785140 0x1001EF4 -ybelowdot 16785141 0x1001EF5 -Yhook 16785142 0x1001EF6 -yhook 16785143 0x1001EF7 -Ytilde 16785144 0x1001EF8 -ytilde 16785145 0x1001EF9 -zerosuperior 16785520 0x1002070 -foursuperior 16785524 0x1002074 -fivesuperior 16785525 0x1002075 -sixsuperior 16785526 0x1002076 -sevensuperior 16785527 0x1002077 -eightsuperior 16785528 0x1002078 -ninesuperior 16785529 0x1002079 -zerosubscript 16785536 0x1002080 -onesubscript 16785537 0x1002081 -twosubscript 16785538 0x1002082 -threesubscript 16785539 0x1002083 -foursubscript 16785540 0x1002084 -fivesubscript 16785541 0x1002085 -sixsubscript 16785542 0x1002086 -sevensubscript 16785543 0x1002087 -eightsubscript 16785544 0x1002088 -ninesubscript 16785545 0x1002089 -EcuSign 16785568 0x10020A0 -ColonSign 16785569 0x10020A1 -CruzeiroSign 16785570 0x10020A2 -FFrancSign 16785571 0x10020A3 -LiraSign 16785572 0x10020A4 -MillSign 16785573 0x10020A5 -NairaSign 16785574 0x10020A6 -PesetaSign 16785575 0x10020A7 -RupeeSign 16785576 0x10020A8 -WonSign 16785577 0x10020A9 -NewSheqelSign 16785578 0x10020AA -DongSign 16785579 0x10020AB -partdifferential 16785922 0x1002202 -emptyset 16785925 0x1002205 -elementof 16785928 0x1002208 -notelementof 16785929 0x1002209 -containsas 16785931 0x100220B -squareroot 16785946 0x100221A -cuberoot 16785947 0x100221B -fourthroot 16785948 0x100221C -dintegral 16785964 0x100222C -tintegral 16785965 0x100222D -because 16785973 0x1002235 -notapproxeq 16785991 0x1002247 -approxeq 16785992 0x1002248 -notidentical 16786018 0x1002262 -stricteq 16786019 0x1002263 -braille_blank 16787456 0x1002800 -braille_dots_1 16787457 0x1002801 -braille_dots_2 16787458 0x1002802 -braille_dots_12 16787459 0x1002803 -braille_dots_3 16787460 0x1002804 -braille_dots_13 16787461 0x1002805 -braille_dots_23 16787462 0x1002806 -braille_dots_123 16787463 0x1002807 -braille_dots_4 16787464 0x1002808 -braille_dots_14 16787465 0x1002809 -braille_dots_24 16787466 0x100280A -braille_dots_124 16787467 0x100280B -braille_dots_34 16787468 0x100280C -braille_dots_134 16787469 0x100280D -braille_dots_234 16787470 0x100280E -braille_dots_1234 16787471 0x100280F -braille_dots_5 16787472 0x1002810 -braille_dots_15 16787473 0x1002811 -braille_dots_25 16787474 0x1002812 -braille_dots_125 16787475 0x1002813 -braille_dots_35 16787476 0x1002814 -braille_dots_135 16787477 0x1002815 -braille_dots_235 16787478 0x1002816 -braille_dots_1235 16787479 0x1002817 -braille_dots_45 16787480 0x1002818 -braille_dots_145 16787481 0x1002819 -braille_dots_245 16787482 0x100281A -braille_dots_1245 16787483 0x100281B -braille_dots_345 16787484 0x100281C -braille_dots_1345 16787485 0x100281D -braille_dots_2345 16787486 0x100281E -braille_dots_12345 16787487 0x100281F -braille_dots_6 16787488 0x1002820 -braille_dots_16 16787489 0x1002821 -braille_dots_26 16787490 0x1002822 -braille_dots_126 16787491 0x1002823 -braille_dots_36 16787492 0x1002824 -braille_dots_136 16787493 0x1002825 -braille_dots_236 16787494 0x1002826 -braille_dots_1236 16787495 0x1002827 -braille_dots_46 16787496 0x1002828 -braille_dots_146 16787497 0x1002829 -braille_dots_246 16787498 0x100282A -braille_dots_1246 16787499 0x100282B -braille_dots_346 16787500 0x100282C -braille_dots_1346 16787501 0x100282D -braille_dots_2346 16787502 0x100282E -braille_dots_12346 16787503 0x100282F -braille_dots_56 16787504 0x1002830 -braille_dots_156 16787505 0x1002831 -braille_dots_256 16787506 0x1002832 -braille_dots_1256 16787507 0x1002833 -braille_dots_356 16787508 0x1002834 -braille_dots_1356 16787509 0x1002835 -braille_dots_2356 16787510 0x1002836 -braille_dots_12356 16787511 0x1002837 -braille_dots_456 16787512 0x1002838 -braille_dots_1456 16787513 0x1002839 -braille_dots_2456 16787514 0x100283A -braille_dots_12456 16787515 0x100283B -braille_dots_3456 16787516 0x100283C -braille_dots_13456 16787517 0x100283D -braille_dots_23456 16787518 0x100283E -braille_dots_123456 16787519 0x100283F -braille_dots_7 16787520 0x1002840 -braille_dots_17 16787521 0x1002841 -braille_dots_27 16787522 0x1002842 -braille_dots_127 16787523 0x1002843 -braille_dots_37 16787524 0x1002844 -braille_dots_137 16787525 0x1002845 -braille_dots_237 16787526 0x1002846 -braille_dots_1237 16787527 0x1002847 -braille_dots_47 16787528 0x1002848 -braille_dots_147 16787529 0x1002849 -braille_dots_247 16787530 0x100284A -braille_dots_1247 16787531 0x100284B -braille_dots_347 16787532 0x100284C -braille_dots_1347 16787533 0x100284D -braille_dots_2347 16787534 0x100284E -braille_dots_12347 16787535 0x100284F -braille_dots_57 16787536 0x1002850 -braille_dots_157 16787537 0x1002851 -braille_dots_257 16787538 0x1002852 -braille_dots_1257 16787539 0x1002853 -braille_dots_357 16787540 0x1002854 -braille_dots_1357 16787541 0x1002855 -braille_dots_2357 16787542 0x1002856 -braille_dots_12357 16787543 0x1002857 -braille_dots_457 16787544 0x1002858 -braille_dots_1457 16787545 0x1002859 -braille_dots_2457 16787546 0x100285A -braille_dots_12457 16787547 0x100285B -braille_dots_3457 16787548 0x100285C -braille_dots_13457 16787549 0x100285D -braille_dots_23457 16787550 0x100285E -braille_dots_123457 16787551 0x100285F -braille_dots_67 16787552 0x1002860 -braille_dots_167 16787553 0x1002861 -braille_dots_267 16787554 0x1002862 -braille_dots_1267 16787555 0x1002863 -braille_dots_367 16787556 0x1002864 -braille_dots_1367 16787557 0x1002865 -braille_dots_2367 16787558 0x1002866 -braille_dots_12367 16787559 0x1002867 -braille_dots_467 16787560 0x1002868 -braille_dots_1467 16787561 0x1002869 -braille_dots_2467 16787562 0x100286A -braille_dots_12467 16787563 0x100286B -braille_dots_3467 16787564 0x100286C -braille_dots_13467 16787565 0x100286D -braille_dots_23467 16787566 0x100286E -braille_dots_123467 16787567 0x100286F -braille_dots_567 16787568 0x1002870 -braille_dots_1567 16787569 0x1002871 -braille_dots_2567 16787570 0x1002872 -braille_dots_12567 16787571 0x1002873 -braille_dots_3567 16787572 0x1002874 -braille_dots_13567 16787573 0x1002875 -braille_dots_23567 16787574 0x1002876 -braille_dots_123567 16787575 0x1002877 -braille_dots_4567 16787576 0x1002878 -braille_dots_14567 16787577 0x1002879 -braille_dots_24567 16787578 0x100287A -braille_dots_124567 16787579 0x100287B -braille_dots_34567 16787580 0x100287C -braille_dots_134567 16787581 0x100287D -braille_dots_234567 16787582 0x100287E -braille_dots_1234567 16787583 0x100287F -braille_dots_8 16787584 0x1002880 -braille_dots_18 16787585 0x1002881 -braille_dots_28 16787586 0x1002882 -braille_dots_128 16787587 0x1002883 -braille_dots_38 16787588 0x1002884 -braille_dots_138 16787589 0x1002885 -braille_dots_238 16787590 0x1002886 -braille_dots_1238 16787591 0x1002887 -braille_dots_48 16787592 0x1002888 -braille_dots_148 16787593 0x1002889 -braille_dots_248 16787594 0x100288A -braille_dots_1248 16787595 0x100288B -braille_dots_348 16787596 0x100288C -braille_dots_1348 16787597 0x100288D -braille_dots_2348 16787598 0x100288E -braille_dots_12348 16787599 0x100288F -braille_dots_58 16787600 0x1002890 -braille_dots_158 16787601 0x1002891 -braille_dots_258 16787602 0x1002892 -braille_dots_1258 16787603 0x1002893 -braille_dots_358 16787604 0x1002894 -braille_dots_1358 16787605 0x1002895 -braille_dots_2358 16787606 0x1002896 -braille_dots_12358 16787607 0x1002897 -braille_dots_458 16787608 0x1002898 -braille_dots_1458 16787609 0x1002899 -braille_dots_2458 16787610 0x100289A -braille_dots_12458 16787611 0x100289B -braille_dots_3458 16787612 0x100289C -braille_dots_13458 16787613 0x100289D -braille_dots_23458 16787614 0x100289E -braille_dots_123458 16787615 0x100289F -braille_dots_68 16787616 0x10028A0 -braille_dots_168 16787617 0x10028A1 -braille_dots_268 16787618 0x10028A2 -braille_dots_1268 16787619 0x10028A3 -braille_dots_368 16787620 0x10028A4 -braille_dots_1368 16787621 0x10028A5 -braille_dots_2368 16787622 0x10028A6 -braille_dots_12368 16787623 0x10028A7 -braille_dots_468 16787624 0x10028A8 -braille_dots_1468 16787625 0x10028A9 -braille_dots_2468 16787626 0x10028AA -braille_dots_12468 16787627 0x10028AB -braille_dots_3468 16787628 0x10028AC -braille_dots_13468 16787629 0x10028AD -braille_dots_23468 16787630 0x10028AE -braille_dots_123468 16787631 0x10028AF -braille_dots_568 16787632 0x10028B0 -braille_dots_1568 16787633 0x10028B1 -braille_dots_2568 16787634 0x10028B2 -braille_dots_12568 16787635 0x10028B3 -braille_dots_3568 16787636 0x10028B4 -braille_dots_13568 16787637 0x10028B5 -braille_dots_23568 16787638 0x10028B6 -braille_dots_123568 16787639 0x10028B7 -braille_dots_4568 16787640 0x10028B8 -braille_dots_14568 16787641 0x10028B9 -braille_dots_24568 16787642 0x10028BA -braille_dots_124568 16787643 0x10028BB -braille_dots_34568 16787644 0x10028BC -braille_dots_134568 16787645 0x10028BD -braille_dots_234568 16787646 0x10028BE -braille_dots_1234568 16787647 0x10028BF -braille_dots_78 16787648 0x10028C0 -braille_dots_178 16787649 0x10028C1 -braille_dots_278 16787650 0x10028C2 -braille_dots_1278 16787651 0x10028C3 -braille_dots_378 16787652 0x10028C4 -braille_dots_1378 16787653 0x10028C5 -braille_dots_2378 16787654 0x10028C6 -braille_dots_12378 16787655 0x10028C7 -braille_dots_478 16787656 0x10028C8 -braille_dots_1478 16787657 0x10028C9 -braille_dots_2478 16787658 0x10028CA -braille_dots_12478 16787659 0x10028CB -braille_dots_3478 16787660 0x10028CC -braille_dots_13478 16787661 0x10028CD -braille_dots_23478 16787662 0x10028CE -braille_dots_123478 16787663 0x10028CF -braille_dots_578 16787664 0x10028D0 -braille_dots_1578 16787665 0x10028D1 -braille_dots_2578 16787666 0x10028D2 -braille_dots_12578 16787667 0x10028D3 -braille_dots_3578 16787668 0x10028D4 -braille_dots_13578 16787669 0x10028D5 -braille_dots_23578 16787670 0x10028D6 -braille_dots_123578 16787671 0x10028D7 -braille_dots_4578 16787672 0x10028D8 -braille_dots_14578 16787673 0x10028D9 -braille_dots_24578 16787674 0x10028DA -braille_dots_124578 16787675 0x10028DB -braille_dots_34578 16787676 0x10028DC -braille_dots_134578 16787677 0x10028DD -braille_dots_234578 16787678 0x10028DE -braille_dots_1234578 16787679 0x10028DF -braille_dots_678 16787680 0x10028E0 -braille_dots_1678 16787681 0x10028E1 -braille_dots_2678 16787682 0x10028E2 -braille_dots_12678 16787683 0x10028E3 -braille_dots_3678 16787684 0x10028E4 -braille_dots_13678 16787685 0x10028E5 -braille_dots_23678 16787686 0x10028E6 -braille_dots_123678 16787687 0x10028E7 -braille_dots_4678 16787688 0x10028E8 -braille_dots_14678 16787689 0x10028E9 -braille_dots_24678 16787690 0x10028EA -braille_dots_124678 16787691 0x10028EB -braille_dots_34678 16787692 0x10028EC -braille_dots_134678 16787693 0x10028ED -braille_dots_234678 16787694 0x10028EE -braille_dots_1234678 16787695 0x10028EF -braille_dots_5678 16787696 0x10028F0 -braille_dots_15678 16787697 0x10028F1 -braille_dots_25678 16787698 0x10028F2 -braille_dots_125678 16787699 0x10028F3 -braille_dots_35678 16787700 0x10028F4 -braille_dots_135678 16787701 0x10028F5 -braille_dots_235678 16787702 0x10028F6 -braille_dots_1235678 16787703 0x10028F7 -braille_dots_45678 16787704 0x10028F8 -braille_dots_145678 16787705 0x10028F9 -braille_dots_245678 16787706 0x10028FA -braille_dots_1245678 16787707 0x10028FB -braille_dots_345678 16787708 0x10028FC -braille_dots_1345678 16787709 0x10028FD -braille_dots_2345678 16787710 0x10028FE -braille_dots_12345678 16787711 0x10028FF XF86AudioLowerVolume 269025041 0x1008FF11 XF86AudioMute 269025042 0x1008FF12 XF86AudioRaiseVolume 269025043 0x1008FF13 diff --git a/generic/ks_names.h b/generic/ks_names.h index 36cbf1d..ccc5a8d 100644 --- a/generic/ks_names.h +++ b/generic/ks_names.h @@ -674,32 +674,6 @@ { "uogonek", 0x3F9 }, { "utilde", 0x3FD }, { "umacron", 0x3FE }, -{ "Wcircumflex", 0x1000174 }, -{ "wcircumflex", 0x1000175 }, -{ "Ycircumflex", 0x1000176 }, -{ "ycircumflex", 0x1000177 }, -{ "Babovedot", 0x1001E02 }, -{ "babovedot", 0x1001E03 }, -{ "Dabovedot", 0x1001E0A }, -{ "dabovedot", 0x1001E0B }, -{ "Fabovedot", 0x1001E1E }, -{ "fabovedot", 0x1001E1F }, -{ "Mabovedot", 0x1001E40 }, -{ "mabovedot", 0x1001E41 }, -{ "Pabovedot", 0x1001E56 }, -{ "pabovedot", 0x1001E57 }, -{ "Sabovedot", 0x1001E60 }, -{ "sabovedot", 0x1001E61 }, -{ "Tabovedot", 0x1001E6A }, -{ "tabovedot", 0x1001E6B }, -{ "Wgrave", 0x1001E80 }, -{ "wgrave", 0x1001E81 }, -{ "Wacute", 0x1001E82 }, -{ "wacute", 0x1001E83 }, -{ "Wdiaeresis", 0x1001E84 }, -{ "wdiaeresis", 0x1001E85 }, -{ "Ygrave", 0x1001EF2 }, -{ "ygrave", 0x1001EF3 }, { "OE", 0x13BC }, { "oe", 0x13BD }, { "Ydiaeresis", 0x13BE }, @@ -773,35 +747,6 @@ { "voicedsound", 0x4DE }, { "semivoicedsound", 0x4DF }, { "kana_switch", 0xFF7E }, -{ "Farsi_0", 0x10006F0 }, -{ "Farsi_1", 0x10006F1 }, -{ "Farsi_2", 0x10006F2 }, -{ "Farsi_3", 0x10006F3 }, -{ "Farsi_4", 0x10006F4 }, -{ "Farsi_5", 0x10006F5 }, -{ "Farsi_6", 0x10006F6 }, -{ "Farsi_7", 0x10006F7 }, -{ "Farsi_8", 0x10006F8 }, -{ "Farsi_9", 0x10006F9 }, -{ "Arabic_percent", 0x100066A }, -{ "Arabic_superscript_alef", 0x1000670 }, -{ "Arabic_tteh", 0x1000679 }, -{ "Arabic_peh", 0x100067E }, -{ "Arabic_tcheh", 0x1000686 }, -{ "Arabic_ddal", 0x1000688 }, -{ "Arabic_rreh", 0x1000691 }, -{ "Arabic_comma", 0x5AC }, -{ "Arabic_fullstop", 0x10006D4 }, -{ "Arabic_0", 0x1000660 }, -{ "Arabic_1", 0x1000661 }, -{ "Arabic_2", 0x1000662 }, -{ "Arabic_3", 0x1000663 }, -{ "Arabic_4", 0x1000664 }, -{ "Arabic_5", 0x1000665 }, -{ "Arabic_6", 0x1000666 }, -{ "Arabic_7", 0x1000667 }, -{ "Arabic_8", 0x1000668 }, -{ "Arabic_9", 0x1000669 }, { "Arabic_semicolon", 0x5BB }, { "Arabic_question_mark", 0x5BF }, { "Arabic_hamza", 0x5C1 }, @@ -850,50 +795,6 @@ { "Arabic_kasra", 0x5F0 }, { "Arabic_shadda", 0x5F1 }, { "Arabic_sukun", 0x5F2 }, -{ "Arabic_madda_above", 0x1000653 }, -{ "Arabic_hamza_above", 0x1000654 }, -{ "Arabic_hamza_below", 0x1000655 }, -{ "Arabic_jeh", 0x1000698 }, -{ "Arabic_veh", 0x10006A4 }, -{ "Arabic_keheh", 0x10006A9 }, -{ "Arabic_gaf", 0x10006AF }, -{ "Arabic_noon_ghunna", 0x10006BA }, -{ "Arabic_heh_doachashmee", 0x10006BE }, -{ "Farsi_yeh", 0x10006CC }, -{ "Arabic_farsi_yeh", 0x10006CC }, -{ "Arabic_yeh_baree", 0x10006D2 }, -{ "Arabic_heh_goal", 0x10006C1 }, -{ "Arabic_switch", 0xFF7E }, -{ "Cyrillic_GHE_bar", 0x1000492 }, -{ "Cyrillic_ghe_bar", 0x1000493 }, -{ "Cyrillic_ZHE_descender", 0x1000496 }, -{ "Cyrillic_zhe_descender", 0x1000497 }, -{ "Cyrillic_KA_descender", 0x100049A }, -{ "Cyrillic_ka_descender", 0x100049B }, -{ "Cyrillic_KA_vertstroke", 0x100049C }, -{ "Cyrillic_ka_vertstroke", 0x100049D }, -{ "Cyrillic_EN_descender", 0x10004A2 }, -{ "Cyrillic_en_descender", 0x10004A3 }, -{ "Cyrillic_U_straight", 0x10004AE }, -{ "Cyrillic_u_straight", 0x10004AF }, -{ "Cyrillic_U_straight_bar", 0x10004B0 }, -{ "Cyrillic_u_straight_bar", 0x10004B1 }, -{ "Cyrillic_HA_descender", 0x10004B2 }, -{ "Cyrillic_ha_descender", 0x10004B3 }, -{ "Cyrillic_CHE_descender", 0x10004B6 }, -{ "Cyrillic_che_descender", 0x10004B7 }, -{ "Cyrillic_CHE_vertstroke", 0x10004B8 }, -{ "Cyrillic_che_vertstroke", 0x10004B9 }, -{ "Cyrillic_SHHA", 0x10004BA }, -{ "Cyrillic_shha", 0x10004BB }, -{ "Cyrillic_SCHWA", 0x10004D8 }, -{ "Cyrillic_schwa", 0x10004D9 }, -{ "Cyrillic_I_macron", 0x10004E2 }, -{ "Cyrillic_i_macron", 0x10004E3 }, -{ "Cyrillic_O_bar", 0x10004E8 }, -{ "Cyrillic_o_bar", 0x10004E9 }, -{ "Cyrillic_U_macron", 0x10004EE }, -{ "Cyrillic_u_macron", 0x10004EF }, { "Serbian_dje", 0x6A1 }, { "Macedonia_gje", 0x6A2 }, { "Cyrillic_io", 0x6A3 }, @@ -1485,290 +1386,6 @@ { "Hangul_J_KkogjiDalrinIeung", 0xEF9 }, { "Hangul_J_YeorinHieuh", 0xEFA }, { "Korean_Won", 0xEFF }, -{ "Armenian_ligature_ew", 0x1000587 }, -{ "Armenian_full_stop", 0x1000589 }, -{ "Armenian_verjaket", 0x1000589 }, -{ "Armenian_separation_mark", 0x100055D }, -{ "Armenian_but", 0x100055D }, -{ "Armenian_hyphen", 0x100058A }, -{ "Armenian_yentamna", 0x100058A }, -{ "Armenian_exclam", 0x100055C }, -{ "Armenian_amanak", 0x100055C }, -{ "Armenian_accent", 0x100055B }, -{ "Armenian_shesht", 0x100055B }, -{ "Armenian_question", 0x100055E }, -{ "Armenian_paruyk", 0x100055E }, -{ "Armenian_AYB", 0x1000531 }, -{ "Armenian_ayb", 0x1000561 }, -{ "Armenian_BEN", 0x1000532 }, -{ "Armenian_ben", 0x1000562 }, -{ "Armenian_GIM", 0x1000533 }, -{ "Armenian_gim", 0x1000563 }, -{ "Armenian_DA", 0x1000534 }, -{ "Armenian_da", 0x1000564 }, -{ "Armenian_YECH", 0x1000535 }, -{ "Armenian_yech", 0x1000565 }, -{ "Armenian_ZA", 0x1000536 }, -{ "Armenian_za", 0x1000566 }, -{ "Armenian_E", 0x1000537 }, -{ "Armenian_e", 0x1000567 }, -{ "Armenian_AT", 0x1000538 }, -{ "Armenian_at", 0x1000568 }, -{ "Armenian_TO", 0x1000539 }, -{ "Armenian_to", 0x1000569 }, -{ "Armenian_ZHE", 0x100053A }, -{ "Armenian_zhe", 0x100056A }, -{ "Armenian_INI", 0x100053B }, -{ "Armenian_ini", 0x100056B }, -{ "Armenian_LYUN", 0x100053C }, -{ "Armenian_lyun", 0x100056C }, -{ "Armenian_KHE", 0x100053D }, -{ "Armenian_khe", 0x100056D }, -{ "Armenian_TSA", 0x100053E }, -{ "Armenian_tsa", 0x100056E }, -{ "Armenian_KEN", 0x100053F }, -{ "Armenian_ken", 0x100056F }, -{ "Armenian_HO", 0x1000540 }, -{ "Armenian_ho", 0x1000570 }, -{ "Armenian_DZA", 0x1000541 }, -{ "Armenian_dza", 0x1000571 }, -{ "Armenian_GHAT", 0x1000542 }, -{ "Armenian_ghat", 0x1000572 }, -{ "Armenian_TCHE", 0x1000543 }, -{ "Armenian_tche", 0x1000573 }, -{ "Armenian_MEN", 0x1000544 }, -{ "Armenian_men", 0x1000574 }, -{ "Armenian_HI", 0x1000545 }, -{ "Armenian_hi", 0x1000575 }, -{ "Armenian_NU", 0x1000546 }, -{ "Armenian_nu", 0x1000576 }, -{ "Armenian_SHA", 0x1000547 }, -{ "Armenian_sha", 0x1000577 }, -{ "Armenian_VO", 0x1000548 }, -{ "Armenian_vo", 0x1000578 }, -{ "Armenian_CHA", 0x1000549 }, -{ "Armenian_cha", 0x1000579 }, -{ "Armenian_PE", 0x100054A }, -{ "Armenian_pe", 0x100057A }, -{ "Armenian_JE", 0x100054B }, -{ "Armenian_je", 0x100057B }, -{ "Armenian_RA", 0x100054C }, -{ "Armenian_ra", 0x100057C }, -{ "Armenian_SE", 0x100054D }, -{ "Armenian_se", 0x100057D }, -{ "Armenian_VEV", 0x100054E }, -{ "Armenian_vev", 0x100057E }, -{ "Armenian_TYUN", 0x100054F }, -{ "Armenian_tyun", 0x100057F }, -{ "Armenian_RE", 0x1000550 }, -{ "Armenian_re", 0x1000580 }, -{ "Armenian_TSO", 0x1000551 }, -{ "Armenian_tso", 0x1000581 }, -{ "Armenian_VYUN", 0x1000552 }, -{ "Armenian_vyun", 0x1000582 }, -{ "Armenian_PYUR", 0x1000553 }, -{ "Armenian_pyur", 0x1000583 }, -{ "Armenian_KE", 0x1000554 }, -{ "Armenian_ke", 0x1000584 }, -{ "Armenian_O", 0x1000555 }, -{ "Armenian_o", 0x1000585 }, -{ "Armenian_FE", 0x1000556 }, -{ "Armenian_fe", 0x1000586 }, -{ "Armenian_apostrophe", 0x100055A }, -{ "Georgian_an", 0x10010D0 }, -{ "Georgian_ban", 0x10010D1 }, -{ "Georgian_gan", 0x10010D2 }, -{ "Georgian_don", 0x10010D3 }, -{ "Georgian_en", 0x10010D4 }, -{ "Georgian_vin", 0x10010D5 }, -{ "Georgian_zen", 0x10010D6 }, -{ "Georgian_tan", 0x10010D7 }, -{ "Georgian_in", 0x10010D8 }, -{ "Georgian_kan", 0x10010D9 }, -{ "Georgian_las", 0x10010DA }, -{ "Georgian_man", 0x10010DB }, -{ "Georgian_nar", 0x10010DC }, -{ "Georgian_on", 0x10010DD }, -{ "Georgian_par", 0x10010DE }, -{ "Georgian_zhar", 0x10010DF }, -{ "Georgian_rae", 0x10010E0 }, -{ "Georgian_san", 0x10010E1 }, -{ "Georgian_tar", 0x10010E2 }, -{ "Georgian_un", 0x10010E3 }, -{ "Georgian_phar", 0x10010E4 }, -{ "Georgian_khar", 0x10010E5 }, -{ "Georgian_ghan", 0x10010E6 }, -{ "Georgian_qar", 0x10010E7 }, -{ "Georgian_shin", 0x10010E8 }, -{ "Georgian_chin", 0x10010E9 }, -{ "Georgian_can", 0x10010EA }, -{ "Georgian_jil", 0x10010EB }, -{ "Georgian_cil", 0x10010EC }, -{ "Georgian_char", 0x10010ED }, -{ "Georgian_xan", 0x10010EE }, -{ "Georgian_jhan", 0x10010EF }, -{ "Georgian_hae", 0x10010F0 }, -{ "Georgian_he", 0x10010F1 }, -{ "Georgian_hie", 0x10010F2 }, -{ "Georgian_we", 0x10010F3 }, -{ "Georgian_har", 0x10010F4 }, -{ "Georgian_hoe", 0x10010F5 }, -{ "Georgian_fi", 0x10010F6 }, -{ "Xabovedot", 0x1001E8A }, -{ "Ibreve", 0x100012C }, -{ "Zstroke", 0x10001B5 }, -{ "Gcaron", 0x10001E6 }, -{ "Ocaron", 0x10001D1 }, -{ "Obarred", 0x100019F }, -{ "xabovedot", 0x1001E8B }, -{ "ibreve", 0x100012D }, -{ "zstroke", 0x10001B6 }, -{ "gcaron", 0x10001E7 }, -{ "ocaron", 0x10001D2 }, -{ "obarred", 0x1000275 }, -{ "SCHWA", 0x100018F }, -{ "schwa", 0x1000259 }, -{ "EZH", 0x10001B7 }, -{ "ezh", 0x1000292 }, -{ "Lbelowdot", 0x1001E36 }, -{ "lbelowdot", 0x1001E37 }, -{ "Abelowdot", 0x1001EA0 }, -{ "abelowdot", 0x1001EA1 }, -{ "Ahook", 0x1001EA2 }, -{ "ahook", 0x1001EA3 }, -{ "Acircumflexacute", 0x1001EA4 }, -{ "acircumflexacute", 0x1001EA5 }, -{ "Acircumflexgrave", 0x1001EA6 }, -{ "acircumflexgrave", 0x1001EA7 }, -{ "Acircumflexhook", 0x1001EA8 }, -{ "acircumflexhook", 0x1001EA9 }, -{ "Acircumflextilde", 0x1001EAA }, -{ "acircumflextilde", 0x1001EAB }, -{ "Acircumflexbelowdot", 0x1001EAC }, -{ "acircumflexbelowdot", 0x1001EAD }, -{ "Abreveacute", 0x1001EAE }, -{ "abreveacute", 0x1001EAF }, -{ "Abrevegrave", 0x1001EB0 }, -{ "abrevegrave", 0x1001EB1 }, -{ "Abrevehook", 0x1001EB2 }, -{ "abrevehook", 0x1001EB3 }, -{ "Abrevetilde", 0x1001EB4 }, -{ "abrevetilde", 0x1001EB5 }, -{ "Abrevebelowdot", 0x1001EB6 }, -{ "abrevebelowdot", 0x1001EB7 }, -{ "Ebelowdot", 0x1001EB8 }, -{ "ebelowdot", 0x1001EB9 }, -{ "Ehook", 0x1001EBA }, -{ "ehook", 0x1001EBB }, -{ "Etilde", 0x1001EBC }, -{ "etilde", 0x1001EBD }, -{ "Ecircumflexacute", 0x1001EBE }, -{ "ecircumflexacute", 0x1001EBF }, -{ "Ecircumflexgrave", 0x1001EC0 }, -{ "ecircumflexgrave", 0x1001EC1 }, -{ "Ecircumflexhook", 0x1001EC2 }, -{ "ecircumflexhook", 0x1001EC3 }, -{ "Ecircumflextilde", 0x1001EC4 }, -{ "ecircumflextilde", 0x1001EC5 }, -{ "Ecircumflexbelowdot", 0x1001EC6 }, -{ "ecircumflexbelowdot", 0x1001EC7 }, -{ "Ihook", 0x1001EC8 }, -{ "ihook", 0x1001EC9 }, -{ "Ibelowdot", 0x1001ECA }, -{ "ibelowdot", 0x1001ECB }, -{ "Obelowdot", 0x1001ECC }, -{ "obelowdot", 0x1001ECD }, -{ "Ohook", 0x1001ECE }, -{ "ohook", 0x1001ECF }, -{ "Ocircumflexacute", 0x1001ED0 }, -{ "ocircumflexacute", 0x1001ED1 }, -{ "Ocircumflexgrave", 0x1001ED2 }, -{ "ocircumflexgrave", 0x1001ED3 }, -{ "Ocircumflexhook", 0x1001ED4 }, -{ "ocircumflexhook", 0x1001ED5 }, -{ "Ocircumflextilde", 0x1001ED6 }, -{ "ocircumflextilde", 0x1001ED7 }, -{ "Ocircumflexbelowdot", 0x1001ED8 }, -{ "ocircumflexbelowdot", 0x1001ED9 }, -{ "Ohornacute", 0x1001EDA }, -{ "ohornacute", 0x1001EDB }, -{ "Ohorngrave", 0x1001EDC }, -{ "ohorngrave", 0x1001EDD }, -{ "Ohornhook", 0x1001EDE }, -{ "ohornhook", 0x1001EDF }, -{ "Ohorntilde", 0x1001EE0 }, -{ "ohorntilde", 0x1001EE1 }, -{ "Ohornbelowdot", 0x1001EE2 }, -{ "ohornbelowdot", 0x1001EE3 }, -{ "Ubelowdot", 0x1001EE4 }, -{ "ubelowdot", 0x1001EE5 }, -{ "Uhook", 0x1001EE6 }, -{ "uhook", 0x1001EE7 }, -{ "Uhornacute", 0x1001EE8 }, -{ "uhornacute", 0x1001EE9 }, -{ "Uhorngrave", 0x1001EEA }, -{ "uhorngrave", 0x1001EEB }, -{ "Uhornhook", 0x1001EEC }, -{ "uhornhook", 0x1001EED }, -{ "Uhorntilde", 0x1001EEE }, -{ "uhorntilde", 0x1001EEF }, -{ "Uhornbelowdot", 0x1001EF0 }, -{ "uhornbelowdot", 0x1001EF1 }, -{ "Ybelowdot", 0x1001EF4 }, -{ "ybelowdot", 0x1001EF5 }, -{ "Yhook", 0x1001EF6 }, -{ "yhook", 0x1001EF7 }, -{ "Ytilde", 0x1001EF8 }, -{ "ytilde", 0x1001EF9 }, -{ "Ohorn", 0x10001A0 }, -{ "ohorn", 0x10001A1 }, -{ "Uhorn", 0x10001AF }, -{ "uhorn", 0x10001B0 }, -{ "EcuSign", 0x10020A0 }, -{ "ColonSign", 0x10020A1 }, -{ "CruzeiroSign", 0x10020A2 }, -{ "FFrancSign", 0x10020A3 }, -{ "LiraSign", 0x10020A4 }, -{ "MillSign", 0x10020A5 }, -{ "NairaSign", 0x10020A6 }, -{ "PesetaSign", 0x10020A7 }, -{ "RupeeSign", 0x10020A8 }, -{ "WonSign", 0x10020A9 }, -{ "NewSheqelSign", 0x10020AA }, -{ "DongSign", 0x10020AB }, -{ "EuroSign", 0x20AC }, -{ "zerosuperior", 0x1002070 }, -{ "foursuperior", 0x1002074 }, -{ "fivesuperior", 0x1002075 }, -{ "sixsuperior", 0x1002076 }, -{ "sevensuperior", 0x1002077 }, -{ "eightsuperior", 0x1002078 }, -{ "ninesuperior", 0x1002079 }, -{ "zerosubscript", 0x1002080 }, -{ "onesubscript", 0x1002081 }, -{ "twosubscript", 0x1002082 }, -{ "threesubscript", 0x1002083 }, -{ "foursubscript", 0x1002084 }, -{ "fivesubscript", 0x1002085 }, -{ "sixsubscript", 0x1002086 }, -{ "sevensubscript", 0x1002087 }, -{ "eightsubscript", 0x1002088 }, -{ "ninesubscript", 0x1002089 }, -{ "partdifferential", 0x1002202 }, -{ "emptyset", 0x1002205 }, -{ "elementof", 0x1002208 }, -{ "notelementof", 0x1002209 }, -{ "containsas", 0x100220B }, -{ "squareroot", 0x100221A }, -{ "cuberoot", 0x100221B }, -{ "fourthroot", 0x100221C }, -{ "dintegral", 0x100222C }, -{ "tintegral", 0x100222D }, -{ "because", 0x1002235 }, -{ "approxeq", 0x1002248 }, -{ "notapproxeq", 0x1002247 }, -{ "notidentical", 0x1002262 }, -{ "stricteq", 0x1002263 }, { "braille_dot_1", 0xFFF1 }, { "braille_dot_2", 0xFFF2 }, { "braille_dot_3", 0xFFF3 }, @@ -1779,342 +1396,6 @@ { "braille_dot_8", 0xFFF8 }, { "braille_dot_9", 0xFFF9 }, { "braille_dot_10", 0xFFFA }, -{ "braille_blank", 0x1002800 }, -{ "braille_dots_1", 0x1002801 }, -{ "braille_dots_2", 0x1002802 }, -{ "braille_dots_12", 0x1002803 }, -{ "braille_dots_3", 0x1002804 }, -{ "braille_dots_13", 0x1002805 }, -{ "braille_dots_23", 0x1002806 }, -{ "braille_dots_123", 0x1002807 }, -{ "braille_dots_4", 0x1002808 }, -{ "braille_dots_14", 0x1002809 }, -{ "braille_dots_24", 0x100280A }, -{ "braille_dots_124", 0x100280B }, -{ "braille_dots_34", 0x100280C }, -{ "braille_dots_134", 0x100280D }, -{ "braille_dots_234", 0x100280E }, -{ "braille_dots_1234", 0x100280F }, -{ "braille_dots_5", 0x1002810 }, -{ "braille_dots_15", 0x1002811 }, -{ "braille_dots_25", 0x1002812 }, -{ "braille_dots_125", 0x1002813 }, -{ "braille_dots_35", 0x1002814 }, -{ "braille_dots_135", 0x1002815 }, -{ "braille_dots_235", 0x1002816 }, -{ "braille_dots_1235", 0x1002817 }, -{ "braille_dots_45", 0x1002818 }, -{ "braille_dots_145", 0x1002819 }, -{ "braille_dots_245", 0x100281A }, -{ "braille_dots_1245", 0x100281B }, -{ "braille_dots_345", 0x100281C }, -{ "braille_dots_1345", 0x100281D }, -{ "braille_dots_2345", 0x100281E }, -{ "braille_dots_12345", 0x100281F }, -{ "braille_dots_6", 0x1002820 }, -{ "braille_dots_16", 0x1002821 }, -{ "braille_dots_26", 0x1002822 }, -{ "braille_dots_126", 0x1002823 }, -{ "braille_dots_36", 0x1002824 }, -{ "braille_dots_136", 0x1002825 }, -{ "braille_dots_236", 0x1002826 }, -{ "braille_dots_1236", 0x1002827 }, -{ "braille_dots_46", 0x1002828 }, -{ "braille_dots_146", 0x1002829 }, -{ "braille_dots_246", 0x100282A }, -{ "braille_dots_1246", 0x100282B }, -{ "braille_dots_346", 0x100282C }, -{ "braille_dots_1346", 0x100282D }, -{ "braille_dots_2346", 0x100282E }, -{ "braille_dots_12346", 0x100282F }, -{ "braille_dots_56", 0x1002830 }, -{ "braille_dots_156", 0x1002831 }, -{ "braille_dots_256", 0x1002832 }, -{ "braille_dots_1256", 0x1002833 }, -{ "braille_dots_356", 0x1002834 }, -{ "braille_dots_1356", 0x1002835 }, -{ "braille_dots_2356", 0x1002836 }, -{ "braille_dots_12356", 0x1002837 }, -{ "braille_dots_456", 0x1002838 }, -{ "braille_dots_1456", 0x1002839 }, -{ "braille_dots_2456", 0x100283A }, -{ "braille_dots_12456", 0x100283B }, -{ "braille_dots_3456", 0x100283C }, -{ "braille_dots_13456", 0x100283D }, -{ "braille_dots_23456", 0x100283E }, -{ "braille_dots_123456", 0x100283F }, -{ "braille_dots_7", 0x1002840 }, -{ "braille_dots_17", 0x1002841 }, -{ "braille_dots_27", 0x1002842 }, -{ "braille_dots_127", 0x1002843 }, -{ "braille_dots_37", 0x1002844 }, -{ "braille_dots_137", 0x1002845 }, -{ "braille_dots_237", 0x1002846 }, -{ "braille_dots_1237", 0x1002847 }, -{ "braille_dots_47", 0x1002848 }, -{ "braille_dots_147", 0x1002849 }, -{ "braille_dots_247", 0x100284A }, -{ "braille_dots_1247", 0x100284B }, -{ "braille_dots_347", 0x100284C }, -{ "braille_dots_1347", 0x100284D }, -{ "braille_dots_2347", 0x100284E }, -{ "braille_dots_12347", 0x100284F }, -{ "braille_dots_57", 0x1002850 }, -{ "braille_dots_157", 0x1002851 }, -{ "braille_dots_257", 0x1002852 }, -{ "braille_dots_1257", 0x1002853 }, -{ "braille_dots_357", 0x1002854 }, -{ "braille_dots_1357", 0x1002855 }, -{ "braille_dots_2357", 0x1002856 }, -{ "braille_dots_12357", 0x1002857 }, -{ "braille_dots_457", 0x1002858 }, -{ "braille_dots_1457", 0x1002859 }, -{ "braille_dots_2457", 0x100285A }, -{ "braille_dots_12457", 0x100285B }, -{ "braille_dots_3457", 0x100285C }, -{ "braille_dots_13457", 0x100285D }, -{ "braille_dots_23457", 0x100285E }, -{ "braille_dots_123457", 0x100285F }, -{ "braille_dots_67", 0x1002860 }, -{ "braille_dots_167", 0x1002861 }, -{ "braille_dots_267", 0x1002862 }, -{ "braille_dots_1267", 0x1002863 }, -{ "braille_dots_367", 0x1002864 }, -{ "braille_dots_1367", 0x1002865 }, -{ "braille_dots_2367", 0x1002866 }, -{ "braille_dots_12367", 0x1002867 }, -{ "braille_dots_467", 0x1002868 }, -{ "braille_dots_1467", 0x1002869 }, -{ "braille_dots_2467", 0x100286A }, -{ "braille_dots_12467", 0x100286B }, -{ "braille_dots_3467", 0x100286C }, -{ "braille_dots_13467", 0x100286D }, -{ "braille_dots_23467", 0x100286E }, -{ "braille_dots_123467", 0x100286F }, -{ "braille_dots_567", 0x1002870 }, -{ "braille_dots_1567", 0x1002871 }, -{ "braille_dots_2567", 0x1002872 }, -{ "braille_dots_12567", 0x1002873 }, -{ "braille_dots_3567", 0x1002874 }, -{ "braille_dots_13567", 0x1002875 }, -{ "braille_dots_23567", 0x1002876 }, -{ "braille_dots_123567", 0x1002877 }, -{ "braille_dots_4567", 0x1002878 }, -{ "braille_dots_14567", 0x1002879 }, -{ "braille_dots_24567", 0x100287A }, -{ "braille_dots_124567", 0x100287B }, -{ "braille_dots_34567", 0x100287C }, -{ "braille_dots_134567", 0x100287D }, -{ "braille_dots_234567", 0x100287E }, -{ "braille_dots_1234567", 0x100287F }, -{ "braille_dots_8", 0x1002880 }, -{ "braille_dots_18", 0x1002881 }, -{ "braille_dots_28", 0x1002882 }, -{ "braille_dots_128", 0x1002883 }, -{ "braille_dots_38", 0x1002884 }, -{ "braille_dots_138", 0x1002885 }, -{ "braille_dots_238", 0x1002886 }, -{ "braille_dots_1238", 0x1002887 }, -{ "braille_dots_48", 0x1002888 }, -{ "braille_dots_148", 0x1002889 }, -{ "braille_dots_248", 0x100288A }, -{ "braille_dots_1248", 0x100288B }, -{ "braille_dots_348", 0x100288C }, -{ "braille_dots_1348", 0x100288D }, -{ "braille_dots_2348", 0x100288E }, -{ "braille_dots_12348", 0x100288F }, -{ "braille_dots_58", 0x1002890 }, -{ "braille_dots_158", 0x1002891 }, -{ "braille_dots_258", 0x1002892 }, -{ "braille_dots_1258", 0x1002893 }, -{ "braille_dots_358", 0x1002894 }, -{ "braille_dots_1358", 0x1002895 }, -{ "braille_dots_2358", 0x1002896 }, -{ "braille_dots_12358", 0x1002897 }, -{ "braille_dots_458", 0x1002898 }, -{ "braille_dots_1458", 0x1002899 }, -{ "braille_dots_2458", 0x100289A }, -{ "braille_dots_12458", 0x100289B }, -{ "braille_dots_3458", 0x100289C }, -{ "braille_dots_13458", 0x100289D }, -{ "braille_dots_23458", 0x100289E }, -{ "braille_dots_123458", 0x100289F }, -{ "braille_dots_68", 0x10028A0 }, -{ "braille_dots_168", 0x10028A1 }, -{ "braille_dots_268", 0x10028A2 }, -{ "braille_dots_1268", 0x10028A3 }, -{ "braille_dots_368", 0x10028A4 }, -{ "braille_dots_1368", 0x10028A5 }, -{ "braille_dots_2368", 0x10028A6 }, -{ "braille_dots_12368", 0x10028A7 }, -{ "braille_dots_468", 0x10028A8 }, -{ "braille_dots_1468", 0x10028A9 }, -{ "braille_dots_2468", 0x10028AA }, -{ "braille_dots_12468", 0x10028AB }, -{ "braille_dots_3468", 0x10028AC }, -{ "braille_dots_13468", 0x10028AD }, -{ "braille_dots_23468", 0x10028AE }, -{ "braille_dots_123468", 0x10028AF }, -{ "braille_dots_568", 0x10028B0 }, -{ "braille_dots_1568", 0x10028B1 }, -{ "braille_dots_2568", 0x10028B2 }, -{ "braille_dots_12568", 0x10028B3 }, -{ "braille_dots_3568", 0x10028B4 }, -{ "braille_dots_13568", 0x10028B5 }, -{ "braille_dots_23568", 0x10028B6 }, -{ "braille_dots_123568", 0x10028B7 }, -{ "braille_dots_4568", 0x10028B8 }, -{ "braille_dots_14568", 0x10028B9 }, -{ "braille_dots_24568", 0x10028BA }, -{ "braille_dots_124568", 0x10028BB }, -{ "braille_dots_34568", 0x10028BC }, -{ "braille_dots_134568", 0x10028BD }, -{ "braille_dots_234568", 0x10028BE }, -{ "braille_dots_1234568", 0x10028BF }, -{ "braille_dots_78", 0x10028C0 }, -{ "braille_dots_178", 0x10028C1 }, -{ "braille_dots_278", 0x10028C2 }, -{ "braille_dots_1278", 0x10028C3 }, -{ "braille_dots_378", 0x10028C4 }, -{ "braille_dots_1378", 0x10028C5 }, -{ "braille_dots_2378", 0x10028C6 }, -{ "braille_dots_12378", 0x10028C7 }, -{ "braille_dots_478", 0x10028C8 }, -{ "braille_dots_1478", 0x10028C9 }, -{ "braille_dots_2478", 0x10028CA }, -{ "braille_dots_12478", 0x10028CB }, -{ "braille_dots_3478", 0x10028CC }, -{ "braille_dots_13478", 0x10028CD }, -{ "braille_dots_23478", 0x10028CE }, -{ "braille_dots_123478", 0x10028CF }, -{ "braille_dots_578", 0x10028D0 }, -{ "braille_dots_1578", 0x10028D1 }, -{ "braille_dots_2578", 0x10028D2 }, -{ "braille_dots_12578", 0x10028D3 }, -{ "braille_dots_3578", 0x10028D4 }, -{ "braille_dots_13578", 0x10028D5 }, -{ "braille_dots_23578", 0x10028D6 }, -{ "braille_dots_123578", 0x10028D7 }, -{ "braille_dots_4578", 0x10028D8 }, -{ "braille_dots_14578", 0x10028D9 }, -{ "braille_dots_24578", 0x10028DA }, -{ "braille_dots_124578", 0x10028DB }, -{ "braille_dots_34578", 0x10028DC }, -{ "braille_dots_134578", 0x10028DD }, -{ "braille_dots_234578", 0x10028DE }, -{ "braille_dots_1234578", 0x10028DF }, -{ "braille_dots_678", 0x10028E0 }, -{ "braille_dots_1678", 0x10028E1 }, -{ "braille_dots_2678", 0x10028E2 }, -{ "braille_dots_12678", 0x10028E3 }, -{ "braille_dots_3678", 0x10028E4 }, -{ "braille_dots_13678", 0x10028E5 }, -{ "braille_dots_23678", 0x10028E6 }, -{ "braille_dots_123678", 0x10028E7 }, -{ "braille_dots_4678", 0x10028E8 }, -{ "braille_dots_14678", 0x10028E9 }, -{ "braille_dots_24678", 0x10028EA }, -{ "braille_dots_124678", 0x10028EB }, -{ "braille_dots_34678", 0x10028EC }, -{ "braille_dots_134678", 0x10028ED }, -{ "braille_dots_234678", 0x10028EE }, -{ "braille_dots_1234678", 0x10028EF }, -{ "braille_dots_5678", 0x10028F0 }, -{ "braille_dots_15678", 0x10028F1 }, -{ "braille_dots_25678", 0x10028F2 }, -{ "braille_dots_125678", 0x10028F3 }, -{ "braille_dots_35678", 0x10028F4 }, -{ "braille_dots_135678", 0x10028F5 }, -{ "braille_dots_235678", 0x10028F6 }, -{ "braille_dots_1235678", 0x10028F7 }, -{ "braille_dots_45678", 0x10028F8 }, -{ "braille_dots_145678", 0x10028F9 }, -{ "braille_dots_245678", 0x10028FA }, -{ "braille_dots_1245678", 0x10028FB }, -{ "braille_dots_345678", 0x10028FC }, -{ "braille_dots_1345678", 0x10028FD }, -{ "braille_dots_2345678", 0x10028FE }, -{ "braille_dots_12345678", 0x10028FF }, -{ "Sinh_ng", 0x1000D82 }, -{ "Sinh_h2", 0x1000D83 }, -{ "Sinh_a", 0x1000D85 }, -{ "Sinh_aa", 0x1000D86 }, -{ "Sinh_ae", 0x1000D87 }, -{ "Sinh_aee", 0x1000D88 }, -{ "Sinh_i", 0x1000D89 }, -{ "Sinh_ii", 0x1000D8A }, -{ "Sinh_u", 0x1000D8B }, -{ "Sinh_uu", 0x1000D8C }, -{ "Sinh_ri", 0x1000D8D }, -{ "Sinh_rii", 0x1000D8E }, -{ "Sinh_lu", 0x1000D8F }, -{ "Sinh_luu", 0x1000D90 }, -{ "Sinh_e", 0x1000D91 }, -{ "Sinh_ee", 0x1000D92 }, -{ "Sinh_ai", 0x1000D93 }, -{ "Sinh_o", 0x1000D94 }, -{ "Sinh_oo", 0x1000D95 }, -{ "Sinh_au", 0x1000D96 }, -{ "Sinh_ka", 0x1000D9A }, -{ "Sinh_kha", 0x1000D9B }, -{ "Sinh_ga", 0x1000D9C }, -{ "Sinh_gha", 0x1000D9D }, -{ "Sinh_ng2", 0x1000D9E }, -{ "Sinh_nga", 0x1000D9F }, -{ "Sinh_ca", 0x1000DA0 }, -{ "Sinh_cha", 0x1000DA1 }, -{ "Sinh_ja", 0x1000DA2 }, -{ "Sinh_jha", 0x1000DA3 }, -{ "Sinh_nya", 0x1000DA4 }, -{ "Sinh_jnya", 0x1000DA5 }, -{ "Sinh_nja", 0x1000DA6 }, -{ "Sinh_tta", 0x1000DA7 }, -{ "Sinh_ttha", 0x1000DA8 }, -{ "Sinh_dda", 0x1000DA9 }, -{ "Sinh_ddha", 0x1000DAA }, -{ "Sinh_nna", 0x1000DAB }, -{ "Sinh_ndda", 0x1000DAC }, -{ "Sinh_tha", 0x1000DAD }, -{ "Sinh_thha", 0x1000DAE }, -{ "Sinh_dha", 0x1000DAF }, -{ "Sinh_dhha", 0x1000DB0 }, -{ "Sinh_na", 0x1000DB1 }, -{ "Sinh_ndha", 0x1000DB3 }, -{ "Sinh_pa", 0x1000DB4 }, -{ "Sinh_pha", 0x1000DB5 }, -{ "Sinh_ba", 0x1000DB6 }, -{ "Sinh_bha", 0x1000DB7 }, -{ "Sinh_ma", 0x1000DB8 }, -{ "Sinh_mba", 0x1000DB9 }, -{ "Sinh_ya", 0x1000DBA }, -{ "Sinh_ra", 0x1000DBB }, -{ "Sinh_la", 0x1000DBD }, -{ "Sinh_va", 0x1000DC0 }, -{ "Sinh_sha", 0x1000DC1 }, -{ "Sinh_ssha", 0x1000DC2 }, -{ "Sinh_sa", 0x1000DC3 }, -{ "Sinh_ha", 0x1000DC4 }, -{ "Sinh_lla", 0x1000DC5 }, -{ "Sinh_fa", 0x1000DC6 }, -{ "Sinh_al", 0x1000DCA }, -{ "Sinh_aa2", 0x1000DCF }, -{ "Sinh_ae2", 0x1000DD0 }, -{ "Sinh_aee2", 0x1000DD1 }, -{ "Sinh_i2", 0x1000DD2 }, -{ "Sinh_ii2", 0x1000DD3 }, -{ "Sinh_u2", 0x1000DD4 }, -{ "Sinh_uu2", 0x1000DD6 }, -{ "Sinh_ru2", 0x1000DD8 }, -{ "Sinh_e2", 0x1000DD9 }, -{ "Sinh_ee2", 0x1000DDA }, -{ "Sinh_ai2", 0x1000DDB }, -{ "Sinh_o2", 0x1000DDC }, -{ "Sinh_oo2", 0x1000DDD }, -{ "Sinh_au2", 0x1000DDE }, -{ "Sinh_lu2", 0x1000DDF }, -{ "Sinh_ruu2", 0x1000DF2 }, -{ "Sinh_luu2", 0x1000DF3 }, -{ "Sinh_kunddaliya", 0x1000DF4 }, { "XF86AudioLowerVolume", 0x1008FF11 }, { "XF86AudioMute", 0x1008FF12 }, { "XF86AudioRaiseVolume", 0x1008FF13 }, diff --git a/generic/tkBind.c b/generic/tkBind.c index ed81584..08a1e04 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -410,8 +410,8 @@ static const KeySymInfo keyArray[] = { {NULL, 0} }; static Tcl_HashTable keySymTable; /* keyArray hashed by keysym value. */ -static Tcl_HashTable nameTable; /* keyArray hashed by keysym name. */ #endif /* REDO_KEYSYM_LOOKUP */ +static Tcl_HashTable nameTable; /* keyArray hashed by keysym name. */ /* * A hash table is kept to map from the string names of event modifiers to @@ -1327,9 +1327,11 @@ TkBindInit( unsigned i; #ifdef REDO_KEYSYM_LOOKUP const KeySymInfo *kPtr; +#endif /* REDO_KEYSYM_LOOKUP */ - Tcl_InitHashTable(&keySymTable, TCL_STRING_KEYS); Tcl_InitHashTable(&nameTable, TCL_ONE_WORD_KEYS); +#ifdef REDO_KEYSYM_LOOKUP + Tcl_InitHashTable(&keySymTable, TCL_STRING_KEYS); for (kPtr = keyArray; kPtr->name; ++kPtr) { hPtr = Tcl_CreateHashEntry(&keySymTable, kPtr->name, &newEntry); Tcl_SetHashValue(hPtr, kPtr->value); @@ -5188,7 +5190,16 @@ TkStringToKeysym( { #ifdef REDO_KEYSYM_LOOKUP Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&keySymTable, name); +#endif /* REDO_KEYSYM_LOOKUP */ + if (name[0] & 0x80) { + int keysym; + size_t len = TkUtfToUniChar(name, &keysym); + if (name[len] == '\0') { + return keysym + 0x1000000; + } + } +#ifdef REDO_KEYSYM_LOOKUP if (hPtr) { return (KeySym) Tcl_GetHashValue(hPtr); } @@ -5226,15 +5237,29 @@ const char * TkKeysymToString( KeySym keysym) { + Tcl_HashEntry *hPtr; + int newEntry; + char *value; + + if ((keysym >= 0x1000000) && (keysym <= 0x110FFFF)) { + hPtr = Tcl_CreateHashEntry(&nameTable, INT2PTR(keysym), &newEntry); + value = (char *)&Tcl_GetHashValue(hPtr); + if (newEntry) { + Tcl_SetHashValue(hPtr, NULL); + TkUniCharToUtf(keysym - 0x1000000, value); + } + return value; + } + #ifdef REDO_KEYSYM_LOOKUP - Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&nameTable, (char *)keysym); + hPtr = Tcl_FindHashEntry(&nameTable, INT2PTR(keysym)); if (hPtr) { return Tcl_GetHashValue(hPtr); } #endif /* REDO_KEYSYM_LOOKUP */ - if (keysym > (KeySym)0x1008FFFF) { + if (keysym > 0x1008FFFF) { return NULL; } return XKeysymToString(keysym); diff --git a/tests/bind.test b/tests/bind.test index edcdf96..d8a6e13 100644 --- a/tests/bind.test +++ b/tests/bind.test @@ -6038,6 +6038,20 @@ test bind-28.12 {keysym names, Greek_IOTAdiaeresis -> Greek_IOTAdieresis} -body } -cleanup { destroy .t.f } -result {} +test bind-28.13 {keysym names, Unicode} -body { + frame .t.f -class Test -width 150 -height 100 + bind .t.f <\u20AC> foo + bind .t.f +} -cleanup { + destroy .t.f +} -result "" +test bind-28.14 {keysym names, Emoji} -body { + frame .t.f -class Test -width 150 -height 100 + bind .t.f <\U1F44D> foo + bind .t.f +} -cleanup { + destroy .t.f +} -result "" test bind-29.1 {Tcl_BackgroundError procedure} -setup { diff --git a/xlib/X11/keysymdef.h b/xlib/X11/keysymdef.h index c337dc7..7a40007 100644 --- a/xlib/X11/keysymdef.h +++ b/xlib/X11/keysymdef.h @@ -887,38 +887,6 @@ SOFTWARE. #endif /* XK_LATIN4 */ /* - * Latin 8 - */ -#ifdef XK_LATIN8 -#define XK_Wcircumflex 0x1000174 /* U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX */ -#define XK_wcircumflex 0x1000175 /* U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX */ -#define XK_Ycircumflex 0x1000176 /* U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */ -#define XK_ycircumflex 0x1000177 /* U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX */ -#define XK_Babovedot 0x1001e02 /* U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE */ -#define XK_babovedot 0x1001e03 /* U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE */ -#define XK_Dabovedot 0x1001e0a /* U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE */ -#define XK_dabovedot 0x1001e0b /* U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE */ -#define XK_Fabovedot 0x1001e1e /* U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE */ -#define XK_fabovedot 0x1001e1f /* U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE */ -#define XK_Mabovedot 0x1001e40 /* U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE */ -#define XK_mabovedot 0x1001e41 /* U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE */ -#define XK_Pabovedot 0x1001e56 /* U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE */ -#define XK_pabovedot 0x1001e57 /* U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE */ -#define XK_Sabovedot 0x1001e60 /* U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE */ -#define XK_sabovedot 0x1001e61 /* U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE */ -#define XK_Tabovedot 0x1001e6a /* U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE */ -#define XK_tabovedot 0x1001e6b /* U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE */ -#define XK_Wgrave 0x1001e80 /* U+1E80 LATIN CAPITAL LETTER W WITH GRAVE */ -#define XK_wgrave 0x1001e81 /* U+1E81 LATIN SMALL LETTER W WITH GRAVE */ -#define XK_Wacute 0x1001e82 /* U+1E82 LATIN CAPITAL LETTER W WITH ACUTE */ -#define XK_wacute 0x1001e83 /* U+1E83 LATIN SMALL LETTER W WITH ACUTE */ -#define XK_Wdiaeresis 0x1001e84 /* U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS */ -#define XK_wdiaeresis 0x1001e85 /* U+1E85 LATIN SMALL LETTER W WITH DIAERESIS */ -#define XK_Ygrave 0x1001ef2 /* U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE */ -#define XK_ygrave 0x1001ef3 /* U+1EF3 LATIN SMALL LETTER Y WITH GRAVE */ -#endif /* XK_LATIN8 */ - -/* * Latin 9 * Byte 3 = 0x13 */ @@ -1013,35 +981,7 @@ SOFTWARE. */ #ifdef XK_ARABIC -#define XK_Farsi_0 0x10006f0 /* U+06F0 EXTENDED ARABIC-INDIC DIGIT ZERO */ -#define XK_Farsi_1 0x10006f1 /* U+06F1 EXTENDED ARABIC-INDIC DIGIT ONE */ -#define XK_Farsi_2 0x10006f2 /* U+06F2 EXTENDED ARABIC-INDIC DIGIT TWO */ -#define XK_Farsi_3 0x10006f3 /* U+06F3 EXTENDED ARABIC-INDIC DIGIT THREE */ -#define XK_Farsi_4 0x10006f4 /* U+06F4 EXTENDED ARABIC-INDIC DIGIT FOUR */ -#define XK_Farsi_5 0x10006f5 /* U+06F5 EXTENDED ARABIC-INDIC DIGIT FIVE */ -#define XK_Farsi_6 0x10006f6 /* U+06F6 EXTENDED ARABIC-INDIC DIGIT SIX */ -#define XK_Farsi_7 0x10006f7 /* U+06F7 EXTENDED ARABIC-INDIC DIGIT SEVEN */ -#define XK_Farsi_8 0x10006f8 /* U+06F8 EXTENDED ARABIC-INDIC DIGIT EIGHT */ -#define XK_Farsi_9 0x10006f9 /* U+06F9 EXTENDED ARABIC-INDIC DIGIT NINE */ -#define XK_Arabic_percent 0x100066a /* U+066A ARABIC PERCENT SIGN */ -#define XK_Arabic_superscript_alef 0x1000670 /* U+0670 ARABIC LETTER SUPERSCRIPT ALEF */ -#define XK_Arabic_tteh 0x1000679 /* U+0679 ARABIC LETTER TTEH */ -#define XK_Arabic_peh 0x100067e /* U+067E ARABIC LETTER PEH */ -#define XK_Arabic_tcheh 0x1000686 /* U+0686 ARABIC LETTER TCHEH */ -#define XK_Arabic_ddal 0x1000688 /* U+0688 ARABIC LETTER DDAL */ -#define XK_Arabic_rreh 0x1000691 /* U+0691 ARABIC LETTER RREH */ #define XK_Arabic_comma 0x05ac /* U+060C ARABIC COMMA */ -#define XK_Arabic_fullstop 0x10006d4 /* U+06D4 ARABIC FULL STOP */ -#define XK_Arabic_0 0x1000660 /* U+0660 ARABIC-INDIC DIGIT ZERO */ -#define XK_Arabic_1 0x1000661 /* U+0661 ARABIC-INDIC DIGIT ONE */ -#define XK_Arabic_2 0x1000662 /* U+0662 ARABIC-INDIC DIGIT TWO */ -#define XK_Arabic_3 0x1000663 /* U+0663 ARABIC-INDIC DIGIT THREE */ -#define XK_Arabic_4 0x1000664 /* U+0664 ARABIC-INDIC DIGIT FOUR */ -#define XK_Arabic_5 0x1000665 /* U+0665 ARABIC-INDIC DIGIT FIVE */ -#define XK_Arabic_6 0x1000666 /* U+0666 ARABIC-INDIC DIGIT SIX */ -#define XK_Arabic_7 0x1000667 /* U+0667 ARABIC-INDIC DIGIT SEVEN */ -#define XK_Arabic_8 0x1000668 /* U+0668 ARABIC-INDIC DIGIT EIGHT */ -#define XK_Arabic_9 0x1000669 /* U+0669 ARABIC-INDIC DIGIT NINE */ #define XK_Arabic_semicolon 0x05bb /* U+061B ARABIC SEMICOLON */ #define XK_Arabic_question_mark 0x05bf /* U+061F ARABIC QUESTION MARK */ #define XK_Arabic_hamza 0x05c1 /* U+0621 ARABIC LETTER HAMZA */ @@ -1090,19 +1030,6 @@ SOFTWARE. #define XK_Arabic_kasra 0x05f0 /* U+0650 ARABIC KASRA */ #define XK_Arabic_shadda 0x05f1 /* U+0651 ARABIC SHADDA */ #define XK_Arabic_sukun 0x05f2 /* U+0652 ARABIC SUKUN */ -#define XK_Arabic_madda_above 0x1000653 /* U+0653 ARABIC MADDAH ABOVE */ -#define XK_Arabic_hamza_above 0x1000654 /* U+0654 ARABIC HAMZA ABOVE */ -#define XK_Arabic_hamza_below 0x1000655 /* U+0655 ARABIC HAMZA BELOW */ -#define XK_Arabic_jeh 0x1000698 /* U+0698 ARABIC LETTER JEH */ -#define XK_Arabic_veh 0x10006a4 /* U+06A4 ARABIC LETTER VEH */ -#define XK_Arabic_keheh 0x10006a9 /* U+06A9 ARABIC LETTER KEHEH */ -#define XK_Arabic_gaf 0x10006af /* U+06AF ARABIC LETTER GAF */ -#define XK_Arabic_noon_ghunna 0x10006ba /* U+06BA ARABIC LETTER NOON GHUNNA */ -#define XK_Arabic_heh_doachashmee 0x10006be /* U+06BE ARABIC LETTER HEH DOACHASHMEE */ -#define XK_Farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ -#define XK_Arabic_farsi_yeh 0x10006cc /* U+06CC ARABIC LETTER FARSI YEH */ -#define XK_Arabic_yeh_baree 0x10006d2 /* U+06D2 ARABIC LETTER YEH BARREE */ -#define XK_Arabic_heh_goal 0x10006c1 /* U+06C1 ARABIC LETTER HEH GOAL */ #define XK_Arabic_switch 0xff7e /* Alias for mode_switch */ #endif /* XK_ARABIC */ @@ -1111,38 +1038,6 @@ SOFTWARE. * Byte 3 = 6 */ #ifdef XK_CYRILLIC -#define XK_Cyrillic_GHE_bar 0x1000492 /* U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE */ -#define XK_Cyrillic_ghe_bar 0x1000493 /* U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE */ -#define XK_Cyrillic_ZHE_descender 0x1000496 /* U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER */ -#define XK_Cyrillic_zhe_descender 0x1000497 /* U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER */ -#define XK_Cyrillic_KA_descender 0x100049a /* U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER */ -#define XK_Cyrillic_ka_descender 0x100049b /* U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER */ -#define XK_Cyrillic_KA_vertstroke 0x100049c /* U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE */ -#define XK_Cyrillic_ka_vertstroke 0x100049d /* U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE */ -#define XK_Cyrillic_EN_descender 0x10004a2 /* U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER */ -#define XK_Cyrillic_en_descender 0x10004a3 /* U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER */ -#define XK_Cyrillic_U_straight 0x10004ae /* U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U */ -#define XK_Cyrillic_u_straight 0x10004af /* U+04AF CYRILLIC SMALL LETTER STRAIGHT U */ -#define XK_Cyrillic_U_straight_bar 0x10004b0 /* U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE */ -#define XK_Cyrillic_u_straight_bar 0x10004b1 /* U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE */ -#define XK_Cyrillic_HA_descender 0x10004b2 /* U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER */ -#define XK_Cyrillic_ha_descender 0x10004b3 /* U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER */ -#define XK_Cyrillic_CHE_descender 0x10004b6 /* U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER */ -#define XK_Cyrillic_che_descender 0x10004b7 /* U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER */ -#define XK_Cyrillic_CHE_vertstroke 0x10004b8 /* U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE */ -#define XK_Cyrillic_che_vertstroke 0x10004b9 /* U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE */ -#define XK_Cyrillic_SHHA 0x10004ba /* U+04BA CYRILLIC CAPITAL LETTER SHHA */ -#define XK_Cyrillic_shha 0x10004bb /* U+04BB CYRILLIC SMALL LETTER SHHA */ - -#define XK_Cyrillic_SCHWA 0x10004d8 /* U+04D8 CYRILLIC CAPITAL LETTER SCHWA */ -#define XK_Cyrillic_schwa 0x10004d9 /* U+04D9 CYRILLIC SMALL LETTER SCHWA */ -#define XK_Cyrillic_I_macron 0x10004e2 /* U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON */ -#define XK_Cyrillic_i_macron 0x10004e3 /* U+04E3 CYRILLIC SMALL LETTER I WITH MACRON */ -#define XK_Cyrillic_O_bar 0x10004e8 /* U+04E8 CYRILLIC CAPITAL LETTER BARRED O */ -#define XK_Cyrillic_o_bar 0x10004e9 /* U+04E9 CYRILLIC SMALL LETTER BARRED O */ -#define XK_Cyrillic_U_macron 0x10004ee /* U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON */ -#define XK_Cyrillic_u_macron 0x10004ef /* U+04EF CYRILLIC SMALL LETTER U WITH MACRON */ - #define XK_Serbian_dje 0x06a1 /* U+0452 CYRILLIC SMALL LETTER DJE */ #define XK_Macedonia_gje 0x06a2 /* U+0453 CYRILLIC SMALL LETTER GJE */ #define XK_Cyrillic_io 0x06a3 /* U+0451 CYRILLIC SMALL LETTER IO */ @@ -1821,329 +1716,10 @@ SOFTWARE. #endif /* XK_KOREAN */ -/* - * Armenian - */ - -#ifdef XK_ARMENIAN -#define XK_Armenian_ligature_ew 0x1000587 /* U+0587 ARMENIAN SMALL LIGATURE ECH YIWN */ -#define XK_Armenian_full_stop 0x1000589 /* U+0589 ARMENIAN FULL STOP */ -#define XK_Armenian_verjaket 0x1000589 /* U+0589 ARMENIAN FULL STOP */ -#define XK_Armenian_separation_mark 0x100055d /* U+055D ARMENIAN COMMA */ -#define XK_Armenian_but 0x100055d /* U+055D ARMENIAN COMMA */ -#define XK_Armenian_hyphen 0x100058a /* U+058A ARMENIAN HYPHEN */ -#define XK_Armenian_yentamna 0x100058a /* U+058A ARMENIAN HYPHEN */ -#define XK_Armenian_exclam 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ -#define XK_Armenian_amanak 0x100055c /* U+055C ARMENIAN EXCLAMATION MARK */ -#define XK_Armenian_accent 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ -#define XK_Armenian_shesht 0x100055b /* U+055B ARMENIAN EMPHASIS MARK */ -#define XK_Armenian_question 0x100055e /* U+055E ARMENIAN QUESTION MARK */ -#define XK_Armenian_paruyk 0x100055e /* U+055E ARMENIAN QUESTION MARK */ -#define XK_Armenian_AYB 0x1000531 /* U+0531 ARMENIAN CAPITAL LETTER AYB */ -#define XK_Armenian_ayb 0x1000561 /* U+0561 ARMENIAN SMALL LETTER AYB */ -#define XK_Armenian_BEN 0x1000532 /* U+0532 ARMENIAN CAPITAL LETTER BEN */ -#define XK_Armenian_ben 0x1000562 /* U+0562 ARMENIAN SMALL LETTER BEN */ -#define XK_Armenian_GIM 0x1000533 /* U+0533 ARMENIAN CAPITAL LETTER GIM */ -#define XK_Armenian_gim 0x1000563 /* U+0563 ARMENIAN SMALL LETTER GIM */ -#define XK_Armenian_DA 0x1000534 /* U+0534 ARMENIAN CAPITAL LETTER DA */ -#define XK_Armenian_da 0x1000564 /* U+0564 ARMENIAN SMALL LETTER DA */ -#define XK_Armenian_YECH 0x1000535 /* U+0535 ARMENIAN CAPITAL LETTER ECH */ -#define XK_Armenian_yech 0x1000565 /* U+0565 ARMENIAN SMALL LETTER ECH */ -#define XK_Armenian_ZA 0x1000536 /* U+0536 ARMENIAN CAPITAL LETTER ZA */ -#define XK_Armenian_za 0x1000566 /* U+0566 ARMENIAN SMALL LETTER ZA */ -#define XK_Armenian_E 0x1000537 /* U+0537 ARMENIAN CAPITAL LETTER EH */ -#define XK_Armenian_e 0x1000567 /* U+0567 ARMENIAN SMALL LETTER EH */ -#define XK_Armenian_AT 0x1000538 /* U+0538 ARMENIAN CAPITAL LETTER ET */ -#define XK_Armenian_at 0x1000568 /* U+0568 ARMENIAN SMALL LETTER ET */ -#define XK_Armenian_TO 0x1000539 /* U+0539 ARMENIAN CAPITAL LETTER TO */ -#define XK_Armenian_to 0x1000569 /* U+0569 ARMENIAN SMALL LETTER TO */ -#define XK_Armenian_ZHE 0x100053a /* U+053A ARMENIAN CAPITAL LETTER ZHE */ -#define XK_Armenian_zhe 0x100056a /* U+056A ARMENIAN SMALL LETTER ZHE */ -#define XK_Armenian_INI 0x100053b /* U+053B ARMENIAN CAPITAL LETTER INI */ -#define XK_Armenian_ini 0x100056b /* U+056B ARMENIAN SMALL LETTER INI */ -#define XK_Armenian_LYUN 0x100053c /* U+053C ARMENIAN CAPITAL LETTER LIWN */ -#define XK_Armenian_lyun 0x100056c /* U+056C ARMENIAN SMALL LETTER LIWN */ -#define XK_Armenian_KHE 0x100053d /* U+053D ARMENIAN CAPITAL LETTER XEH */ -#define XK_Armenian_khe 0x100056d /* U+056D ARMENIAN SMALL LETTER XEH */ -#define XK_Armenian_TSA 0x100053e /* U+053E ARMENIAN CAPITAL LETTER CA */ -#define XK_Armenian_tsa 0x100056e /* U+056E ARMENIAN SMALL LETTER CA */ -#define XK_Armenian_KEN 0x100053f /* U+053F ARMENIAN CAPITAL LETTER KEN */ -#define XK_Armenian_ken 0x100056f /* U+056F ARMENIAN SMALL LETTER KEN */ -#define XK_Armenian_HO 0x1000540 /* U+0540 ARMENIAN CAPITAL LETTER HO */ -#define XK_Armenian_ho 0x1000570 /* U+0570 ARMENIAN SMALL LETTER HO */ -#define XK_Armenian_DZA 0x1000541 /* U+0541 ARMENIAN CAPITAL LETTER JA */ -#define XK_Armenian_dza 0x1000571 /* U+0571 ARMENIAN SMALL LETTER JA */ -#define XK_Armenian_GHAT 0x1000542 /* U+0542 ARMENIAN CAPITAL LETTER GHAD */ -#define XK_Armenian_ghat 0x1000572 /* U+0572 ARMENIAN SMALL LETTER GHAD */ -#define XK_Armenian_TCHE 0x1000543 /* U+0543 ARMENIAN CAPITAL LETTER CHEH */ -#define XK_Armenian_tche 0x1000573 /* U+0573 ARMENIAN SMALL LETTER CHEH */ -#define XK_Armenian_MEN 0x1000544 /* U+0544 ARMENIAN CAPITAL LETTER MEN */ -#define XK_Armenian_men 0x1000574 /* U+0574 ARMENIAN SMALL LETTER MEN */ -#define XK_Armenian_HI 0x1000545 /* U+0545 ARMENIAN CAPITAL LETTER YI */ -#define XK_Armenian_hi 0x1000575 /* U+0575 ARMENIAN SMALL LETTER YI */ -#define XK_Armenian_NU 0x1000546 /* U+0546 ARMENIAN CAPITAL LETTER NOW */ -#define XK_Armenian_nu 0x1000576 /* U+0576 ARMENIAN SMALL LETTER NOW */ -#define XK_Armenian_SHA 0x1000547 /* U+0547 ARMENIAN CAPITAL LETTER SHA */ -#define XK_Armenian_sha 0x1000577 /* U+0577 ARMENIAN SMALL LETTER SHA */ -#define XK_Armenian_VO 0x1000548 /* U+0548 ARMENIAN CAPITAL LETTER VO */ -#define XK_Armenian_vo 0x1000578 /* U+0578 ARMENIAN SMALL LETTER VO */ -#define XK_Armenian_CHA 0x1000549 /* U+0549 ARMENIAN CAPITAL LETTER CHA */ -#define XK_Armenian_cha 0x1000579 /* U+0579 ARMENIAN SMALL LETTER CHA */ -#define XK_Armenian_PE 0x100054a /* U+054A ARMENIAN CAPITAL LETTER PEH */ -#define XK_Armenian_pe 0x100057a /* U+057A ARMENIAN SMALL LETTER PEH */ -#define XK_Armenian_JE 0x100054b /* U+054B ARMENIAN CAPITAL LETTER JHEH */ -#define XK_Armenian_je 0x100057b /* U+057B ARMENIAN SMALL LETTER JHEH */ -#define XK_Armenian_RA 0x100054c /* U+054C ARMENIAN CAPITAL LETTER RA */ -#define XK_Armenian_ra 0x100057c /* U+057C ARMENIAN SMALL LETTER RA */ -#define XK_Armenian_SE 0x100054d /* U+054D ARMENIAN CAPITAL LETTER SEH */ -#define XK_Armenian_se 0x100057d /* U+057D ARMENIAN SMALL LETTER SEH */ -#define XK_Armenian_VEV 0x100054e /* U+054E ARMENIAN CAPITAL LETTER VEW */ -#define XK_Armenian_vev 0x100057e /* U+057E ARMENIAN SMALL LETTER VEW */ -#define XK_Armenian_TYUN 0x100054f /* U+054F ARMENIAN CAPITAL LETTER TIWN */ -#define XK_Armenian_tyun 0x100057f /* U+057F ARMENIAN SMALL LETTER TIWN */ -#define XK_Armenian_RE 0x1000550 /* U+0550 ARMENIAN CAPITAL LETTER REH */ -#define XK_Armenian_re 0x1000580 /* U+0580 ARMENIAN SMALL LETTER REH */ -#define XK_Armenian_TSO 0x1000551 /* U+0551 ARMENIAN CAPITAL LETTER CO */ -#define XK_Armenian_tso 0x1000581 /* U+0581 ARMENIAN SMALL LETTER CO */ -#define XK_Armenian_VYUN 0x1000552 /* U+0552 ARMENIAN CAPITAL LETTER YIWN */ -#define XK_Armenian_vyun 0x1000582 /* U+0582 ARMENIAN SMALL LETTER YIWN */ -#define XK_Armenian_PYUR 0x1000553 /* U+0553 ARMENIAN CAPITAL LETTER PIWR */ -#define XK_Armenian_pyur 0x1000583 /* U+0583 ARMENIAN SMALL LETTER PIWR */ -#define XK_Armenian_KE 0x1000554 /* U+0554 ARMENIAN CAPITAL LETTER KEH */ -#define XK_Armenian_ke 0x1000584 /* U+0584 ARMENIAN SMALL LETTER KEH */ -#define XK_Armenian_O 0x1000555 /* U+0555 ARMENIAN CAPITAL LETTER OH */ -#define XK_Armenian_o 0x1000585 /* U+0585 ARMENIAN SMALL LETTER OH */ -#define XK_Armenian_FE 0x1000556 /* U+0556 ARMENIAN CAPITAL LETTER FEH */ -#define XK_Armenian_fe 0x1000586 /* U+0586 ARMENIAN SMALL LETTER FEH */ -#define XK_Armenian_apostrophe 0x100055a /* U+055A ARMENIAN APOSTROPHE */ -#endif /* XK_ARMENIAN */ - -/* - * Georgian - */ - -#ifdef XK_GEORGIAN -#define XK_Georgian_an 0x10010d0 /* U+10D0 GEORGIAN LETTER AN */ -#define XK_Georgian_ban 0x10010d1 /* U+10D1 GEORGIAN LETTER BAN */ -#define XK_Georgian_gan 0x10010d2 /* U+10D2 GEORGIAN LETTER GAN */ -#define XK_Georgian_don 0x10010d3 /* U+10D3 GEORGIAN LETTER DON */ -#define XK_Georgian_en 0x10010d4 /* U+10D4 GEORGIAN LETTER EN */ -#define XK_Georgian_vin 0x10010d5 /* U+10D5 GEORGIAN LETTER VIN */ -#define XK_Georgian_zen 0x10010d6 /* U+10D6 GEORGIAN LETTER ZEN */ -#define XK_Georgian_tan 0x10010d7 /* U+10D7 GEORGIAN LETTER TAN */ -#define XK_Georgian_in 0x10010d8 /* U+10D8 GEORGIAN LETTER IN */ -#define XK_Georgian_kan 0x10010d9 /* U+10D9 GEORGIAN LETTER KAN */ -#define XK_Georgian_las 0x10010da /* U+10DA GEORGIAN LETTER LAS */ -#define XK_Georgian_man 0x10010db /* U+10DB GEORGIAN LETTER MAN */ -#define XK_Georgian_nar 0x10010dc /* U+10DC GEORGIAN LETTER NAR */ -#define XK_Georgian_on 0x10010dd /* U+10DD GEORGIAN LETTER ON */ -#define XK_Georgian_par 0x10010de /* U+10DE GEORGIAN LETTER PAR */ -#define XK_Georgian_zhar 0x10010df /* U+10DF GEORGIAN LETTER ZHAR */ -#define XK_Georgian_rae 0x10010e0 /* U+10E0 GEORGIAN LETTER RAE */ -#define XK_Georgian_san 0x10010e1 /* U+10E1 GEORGIAN LETTER SAN */ -#define XK_Georgian_tar 0x10010e2 /* U+10E2 GEORGIAN LETTER TAR */ -#define XK_Georgian_un 0x10010e3 /* U+10E3 GEORGIAN LETTER UN */ -#define XK_Georgian_phar 0x10010e4 /* U+10E4 GEORGIAN LETTER PHAR */ -#define XK_Georgian_khar 0x10010e5 /* U+10E5 GEORGIAN LETTER KHAR */ -#define XK_Georgian_ghan 0x10010e6 /* U+10E6 GEORGIAN LETTER GHAN */ -#define XK_Georgian_qar 0x10010e7 /* U+10E7 GEORGIAN LETTER QAR */ -#define XK_Georgian_shin 0x10010e8 /* U+10E8 GEORGIAN LETTER SHIN */ -#define XK_Georgian_chin 0x10010e9 /* U+10E9 GEORGIAN LETTER CHIN */ -#define XK_Georgian_can 0x10010ea /* U+10EA GEORGIAN LETTER CAN */ -#define XK_Georgian_jil 0x10010eb /* U+10EB GEORGIAN LETTER JIL */ -#define XK_Georgian_cil 0x10010ec /* U+10EC GEORGIAN LETTER CIL */ -#define XK_Georgian_char 0x10010ed /* U+10ED GEORGIAN LETTER CHAR */ -#define XK_Georgian_xan 0x10010ee /* U+10EE GEORGIAN LETTER XAN */ -#define XK_Georgian_jhan 0x10010ef /* U+10EF GEORGIAN LETTER JHAN */ -#define XK_Georgian_hae 0x10010f0 /* U+10F0 GEORGIAN LETTER HAE */ -#define XK_Georgian_he 0x10010f1 /* U+10F1 GEORGIAN LETTER HE */ -#define XK_Georgian_hie 0x10010f2 /* U+10F2 GEORGIAN LETTER HIE */ -#define XK_Georgian_we 0x10010f3 /* U+10F3 GEORGIAN LETTER WE */ -#define XK_Georgian_har 0x10010f4 /* U+10F4 GEORGIAN LETTER HAR */ -#define XK_Georgian_hoe 0x10010f5 /* U+10F5 GEORGIAN LETTER HOE */ -#define XK_Georgian_fi 0x10010f6 /* U+10F6 GEORGIAN LETTER FI */ -#endif /* XK_GEORGIAN */ - -/* - * Azeri (and other Turkic or Caucasian languages) - */ - -#ifdef XK_CAUCASUS -/* latin */ -#define XK_Xabovedot 0x1001e8a /* U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE */ -#define XK_Ibreve 0x100012c /* U+012C LATIN CAPITAL LETTER I WITH BREVE */ -#define XK_Zstroke 0x10001b5 /* U+01B5 LATIN CAPITAL LETTER Z WITH STROKE */ -#define XK_Gcaron 0x10001e6 /* U+01E6 LATIN CAPITAL LETTER G WITH CARON */ -#define XK_Ocaron 0x10001d1 /* U+01D2 LATIN CAPITAL LETTER O WITH CARON */ -#define XK_Obarred 0x100019f /* U+019F LATIN CAPITAL LETTER O WITH MIDDLE TILDE */ -#define XK_xabovedot 0x1001e8b /* U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE */ -#define XK_ibreve 0x100012d /* U+012D LATIN SMALL LETTER I WITH BREVE */ -#define XK_zstroke 0x10001b6 /* U+01B6 LATIN SMALL LETTER Z WITH STROKE */ -#define XK_gcaron 0x10001e7 /* U+01E7 LATIN SMALL LETTER G WITH CARON */ -#define XK_ocaron 0x10001d2 /* U+01D2 LATIN SMALL LETTER O WITH CARON */ -#define XK_obarred 0x1000275 /* U+0275 LATIN SMALL LETTER BARRED O */ -#define XK_SCHWA 0x100018f /* U+018F LATIN CAPITAL LETTER SCHWA */ -#define XK_schwa 0x1000259 /* U+0259 LATIN SMALL LETTER SCHWA */ -#define XK_EZH 0x10001b7 /* U+01B7 LATIN CAPITAL LETTER EZH */ -#define XK_ezh 0x1000292 /* U+0292 LATIN SMALL LETTER EZH */ -/* those are not really Caucasus */ -/* For Inupiak */ -#define XK_Lbelowdot 0x1001e36 /* U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW */ -#define XK_lbelowdot 0x1001e37 /* U+1E37 LATIN SMALL LETTER L WITH DOT BELOW */ -#endif /* XK_CAUCASUS */ - -/* - * Vietnamese - */ - -#ifdef XK_VIETNAMESE -#define XK_Abelowdot 0x1001ea0 /* U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW */ -#define XK_abelowdot 0x1001ea1 /* U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW */ -#define XK_Ahook 0x1001ea2 /* U+1EA2 LATIN CAPITAL LETTER A WITH HOOK ABOVE */ -#define XK_ahook 0x1001ea3 /* U+1EA3 LATIN SMALL LETTER A WITH HOOK ABOVE */ -#define XK_Acircumflexacute 0x1001ea4 /* U+1EA4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ -#define XK_acircumflexacute 0x1001ea5 /* U+1EA5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ -#define XK_Acircumflexgrave 0x1001ea6 /* U+1EA6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ -#define XK_acircumflexgrave 0x1001ea7 /* U+1EA7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ -#define XK_Acircumflexhook 0x1001ea8 /* U+1EA8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_acircumflexhook 0x1001ea9 /* U+1EA9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_Acircumflextilde 0x1001eaa /* U+1EAA LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ -#define XK_acircumflextilde 0x1001eab /* U+1EAB LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ -#define XK_Acircumflexbelowdot 0x1001eac /* U+1EAC LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_acircumflexbelowdot 0x1001ead /* U+1EAD LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_Abreveacute 0x1001eae /* U+1EAE LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ -#define XK_abreveacute 0x1001eaf /* U+1EAF LATIN SMALL LETTER A WITH BREVE AND ACUTE */ -#define XK_Abrevegrave 0x1001eb0 /* U+1EB0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ -#define XK_abrevegrave 0x1001eb1 /* U+1EB1 LATIN SMALL LETTER A WITH BREVE AND GRAVE */ -#define XK_Abrevehook 0x1001eb2 /* U+1EB2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ -#define XK_abrevehook 0x1001eb3 /* U+1EB3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ -#define XK_Abrevetilde 0x1001eb4 /* U+1EB4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ -#define XK_abrevetilde 0x1001eb5 /* U+1EB5 LATIN SMALL LETTER A WITH BREVE AND TILDE */ -#define XK_Abrevebelowdot 0x1001eb6 /* U+1EB6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ -#define XK_abrevebelowdot 0x1001eb7 /* U+1EB7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ -#define XK_Ebelowdot 0x1001eb8 /* U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW */ -#define XK_ebelowdot 0x1001eb9 /* U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW */ -#define XK_Ehook 0x1001eba /* U+1EBA LATIN CAPITAL LETTER E WITH HOOK ABOVE */ -#define XK_ehook 0x1001ebb /* U+1EBB LATIN SMALL LETTER E WITH HOOK ABOVE */ -#define XK_Etilde 0x1001ebc /* U+1EBC LATIN CAPITAL LETTER E WITH TILDE */ -#define XK_etilde 0x1001ebd /* U+1EBD LATIN SMALL LETTER E WITH TILDE */ -#define XK_Ecircumflexacute 0x1001ebe /* U+1EBE LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ -#define XK_ecircumflexacute 0x1001ebf /* U+1EBF LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ -#define XK_Ecircumflexgrave 0x1001ec0 /* U+1EC0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ -#define XK_ecircumflexgrave 0x1001ec1 /* U+1EC1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ -#define XK_Ecircumflexhook 0x1001ec2 /* U+1EC2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_ecircumflexhook 0x1001ec3 /* U+1EC3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_Ecircumflextilde 0x1001ec4 /* U+1EC4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ -#define XK_ecircumflextilde 0x1001ec5 /* U+1EC5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ -#define XK_Ecircumflexbelowdot 0x1001ec6 /* U+1EC6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_ecircumflexbelowdot 0x1001ec7 /* U+1EC7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_Ihook 0x1001ec8 /* U+1EC8 LATIN CAPITAL LETTER I WITH HOOK ABOVE */ -#define XK_ihook 0x1001ec9 /* U+1EC9 LATIN SMALL LETTER I WITH HOOK ABOVE */ -#define XK_Ibelowdot 0x1001eca /* U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW */ -#define XK_ibelowdot 0x1001ecb /* U+1ECB LATIN SMALL LETTER I WITH DOT BELOW */ -#define XK_Obelowdot 0x1001ecc /* U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW */ -#define XK_obelowdot 0x1001ecd /* U+1ECD LATIN SMALL LETTER O WITH DOT BELOW */ -#define XK_Ohook 0x1001ece /* U+1ECE LATIN CAPITAL LETTER O WITH HOOK ABOVE */ -#define XK_ohook 0x1001ecf /* U+1ECF LATIN SMALL LETTER O WITH HOOK ABOVE */ -#define XK_Ocircumflexacute 0x1001ed0 /* U+1ED0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ -#define XK_ocircumflexacute 0x1001ed1 /* U+1ED1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ -#define XK_Ocircumflexgrave 0x1001ed2 /* U+1ED2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ -#define XK_ocircumflexgrave 0x1001ed3 /* U+1ED3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ -#define XK_Ocircumflexhook 0x1001ed4 /* U+1ED4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_ocircumflexhook 0x1001ed5 /* U+1ED5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ -#define XK_Ocircumflextilde 0x1001ed6 /* U+1ED6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ -#define XK_ocircumflextilde 0x1001ed7 /* U+1ED7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ -#define XK_Ocircumflexbelowdot 0x1001ed8 /* U+1ED8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_ocircumflexbelowdot 0x1001ed9 /* U+1ED9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ -#define XK_Ohornacute 0x1001eda /* U+1EDA LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ -#define XK_ohornacute 0x1001edb /* U+1EDB LATIN SMALL LETTER O WITH HORN AND ACUTE */ -#define XK_Ohorngrave 0x1001edc /* U+1EDC LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ -#define XK_ohorngrave 0x1001edd /* U+1EDD LATIN SMALL LETTER O WITH HORN AND GRAVE */ -#define XK_Ohornhook 0x1001ede /* U+1EDE LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ -#define XK_ohornhook 0x1001edf /* U+1EDF LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ -#define XK_Ohorntilde 0x1001ee0 /* U+1EE0 LATIN CAPITAL LETTER O WITH HORN AND TILDE */ -#define XK_ohorntilde 0x1001ee1 /* U+1EE1 LATIN SMALL LETTER O WITH HORN AND TILDE */ -#define XK_Ohornbelowdot 0x1001ee2 /* U+1EE2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ -#define XK_ohornbelowdot 0x1001ee3 /* U+1EE3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ -#define XK_Ubelowdot 0x1001ee4 /* U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW */ -#define XK_ubelowdot 0x1001ee5 /* U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW */ -#define XK_Uhook 0x1001ee6 /* U+1EE6 LATIN CAPITAL LETTER U WITH HOOK ABOVE */ -#define XK_uhook 0x1001ee7 /* U+1EE7 LATIN SMALL LETTER U WITH HOOK ABOVE */ -#define XK_Uhornacute 0x1001ee8 /* U+1EE8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ -#define XK_uhornacute 0x1001ee9 /* U+1EE9 LATIN SMALL LETTER U WITH HORN AND ACUTE */ -#define XK_Uhorngrave 0x1001eea /* U+1EEA LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ -#define XK_uhorngrave 0x1001eeb /* U+1EEB LATIN SMALL LETTER U WITH HORN AND GRAVE */ -#define XK_Uhornhook 0x1001eec /* U+1EEC LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ -#define XK_uhornhook 0x1001eed /* U+1EED LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ -#define XK_Uhorntilde 0x1001eee /* U+1EEE LATIN CAPITAL LETTER U WITH HORN AND TILDE */ -#define XK_uhorntilde 0x1001eef /* U+1EEF LATIN SMALL LETTER U WITH HORN AND TILDE */ -#define XK_Uhornbelowdot 0x1001ef0 /* U+1EF0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ -#define XK_uhornbelowdot 0x1001ef1 /* U+1EF1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ -#define XK_Ybelowdot 0x1001ef4 /* U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW */ -#define XK_ybelowdot 0x1001ef5 /* U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW */ -#define XK_Yhook 0x1001ef6 /* U+1EF6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ -#define XK_yhook 0x1001ef7 /* U+1EF7 LATIN SMALL LETTER Y WITH HOOK ABOVE */ -#define XK_Ytilde 0x1001ef8 /* U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE */ -#define XK_ytilde 0x1001ef9 /* U+1EF9 LATIN SMALL LETTER Y WITH TILDE */ -#define XK_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ -#define XK_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ -#define XK_Uhorn 0x10001af /* U+01AF LATIN CAPITAL LETTER U WITH HORN */ -#define XK_uhorn 0x10001b0 /* U+01B0 LATIN SMALL LETTER U WITH HORN */ - -#endif /* XK_VIETNAMESE */ - #ifdef XK_CURRENCY -#define XK_EcuSign 0x10020a0 /* U+20A0 EURO-CURRENCY SIGN */ -#define XK_ColonSign 0x10020a1 /* U+20A1 COLON SIGN */ -#define XK_CruzeiroSign 0x10020a2 /* U+20A2 CRUZEIRO SIGN */ -#define XK_FFrancSign 0x10020a3 /* U+20A3 FRENCH FRANC SIGN */ -#define XK_LiraSign 0x10020a4 /* U+20A4 LIRA SIGN */ -#define XK_MillSign 0x10020a5 /* U+20A5 MILL SIGN */ -#define XK_NairaSign 0x10020a6 /* U+20A6 NAIRA SIGN */ -#define XK_PesetaSign 0x10020a7 /* U+20A7 PESETA SIGN */ -#define XK_RupeeSign 0x10020a8 /* U+20A8 RUPEE SIGN */ -#define XK_WonSign 0x10020a9 /* U+20A9 WON SIGN */ -#define XK_NewSheqelSign 0x10020aa /* U+20AA NEW SHEQEL SIGN */ -#define XK_DongSign 0x10020ab /* U+20AB DONG SIGN */ #define XK_EuroSign 0x20ac /* U+20AC EURO SIGN */ #endif /* XK_CURRENCY */ -#ifdef XK_MATHEMATICAL -/* one, two and three are defined above. */ -#define XK_zerosuperior 0x1002070 /* U+2070 SUPERSCRIPT ZERO */ -#define XK_foursuperior 0x1002074 /* U+2074 SUPERSCRIPT FOUR */ -#define XK_fivesuperior 0x1002075 /* U+2075 SUPERSCRIPT FIVE */ -#define XK_sixsuperior 0x1002076 /* U+2076 SUPERSCRIPT SIX */ -#define XK_sevensuperior 0x1002077 /* U+2077 SUPERSCRIPT SEVEN */ -#define XK_eightsuperior 0x1002078 /* U+2078 SUPERSCRIPT EIGHT */ -#define XK_ninesuperior 0x1002079 /* U+2079 SUPERSCRIPT NINE */ -#define XK_zerosubscript 0x1002080 /* U+2080 SUBSCRIPT ZERO */ -#define XK_onesubscript 0x1002081 /* U+2081 SUBSCRIPT ONE */ -#define XK_twosubscript 0x1002082 /* U+2082 SUBSCRIPT TWO */ -#define XK_threesubscript 0x1002083 /* U+2083 SUBSCRIPT THREE */ -#define XK_foursubscript 0x1002084 /* U+2084 SUBSCRIPT FOUR */ -#define XK_fivesubscript 0x1002085 /* U+2085 SUBSCRIPT FIVE */ -#define XK_sixsubscript 0x1002086 /* U+2086 SUBSCRIPT SIX */ -#define XK_sevensubscript 0x1002087 /* U+2087 SUBSCRIPT SEVEN */ -#define XK_eightsubscript 0x1002088 /* U+2088 SUBSCRIPT EIGHT */ -#define XK_ninesubscript 0x1002089 /* U+2089 SUBSCRIPT NINE */ -#define XK_partdifferential 0x1002202 /* U+2202 PARTIAL DIFFERENTIAL */ -#define XK_emptyset 0x1002205 /* U+2205 NULL SET */ -#define XK_elementof 0x1002208 /* U+2208 ELEMENT OF */ -#define XK_notelementof 0x1002209 /* U+2209 NOT AN ELEMENT OF */ -#define XK_containsas 0x100220B /* U+220B CONTAINS AS MEMBER */ -#define XK_squareroot 0x100221A /* U+221A SQUARE ROOT */ -#define XK_cuberoot 0x100221B /* U+221B CUBE ROOT */ -#define XK_fourthroot 0x100221C /* U+221C FOURTH ROOT */ -#define XK_dintegral 0x100222C /* U+222C DOUBLE INTEGRAL */ -#define XK_tintegral 0x100222D /* U+222D TRIPLE INTEGRAL */ -#define XK_because 0x1002235 /* U+2235 BECAUSE */ -#define XK_approxeq 0x1002248 /* U+2245 ALMOST EQUAL TO */ -#define XK_notapproxeq 0x1002247 /* U+2247 NOT ALMOST EQUAL TO */ -#define XK_notidentical 0x1002262 /* U+2262 NOT IDENTICAL TO */ -#define XK_stricteq 0x1002263 /* U+2263 STRICTLY EQUIVALENT TO */ -#endif /* XK_MATHEMATICAL */ - #ifdef XK_BRAILLE #define XK_braille_dot_1 0xfff1 #define XK_braille_dot_2 0xfff2 @@ -2155,352 +1731,8 @@ SOFTWARE. #define XK_braille_dot_8 0xfff8 #define XK_braille_dot_9 0xfff9 #define XK_braille_dot_10 0xfffa -#define XK_braille_blank 0x1002800 /* U+2800 BRAILLE PATTERN BLANK */ -#define XK_braille_dots_1 0x1002801 /* U+2801 BRAILLE PATTERN DOTS-1 */ -#define XK_braille_dots_2 0x1002802 /* U+2802 BRAILLE PATTERN DOTS-2 */ -#define XK_braille_dots_12 0x1002803 /* U+2803 BRAILLE PATTERN DOTS-12 */ -#define XK_braille_dots_3 0x1002804 /* U+2804 BRAILLE PATTERN DOTS-3 */ -#define XK_braille_dots_13 0x1002805 /* U+2805 BRAILLE PATTERN DOTS-13 */ -#define XK_braille_dots_23 0x1002806 /* U+2806 BRAILLE PATTERN DOTS-23 */ -#define XK_braille_dots_123 0x1002807 /* U+2807 BRAILLE PATTERN DOTS-123 */ -#define XK_braille_dots_4 0x1002808 /* U+2808 BRAILLE PATTERN DOTS-4 */ -#define XK_braille_dots_14 0x1002809 /* U+2809 BRAILLE PATTERN DOTS-14 */ -#define XK_braille_dots_24 0x100280a /* U+280a BRAILLE PATTERN DOTS-24 */ -#define XK_braille_dots_124 0x100280b /* U+280b BRAILLE PATTERN DOTS-124 */ -#define XK_braille_dots_34 0x100280c /* U+280c BRAILLE PATTERN DOTS-34 */ -#define XK_braille_dots_134 0x100280d /* U+280d BRAILLE PATTERN DOTS-134 */ -#define XK_braille_dots_234 0x100280e /* U+280e BRAILLE PATTERN DOTS-234 */ -#define XK_braille_dots_1234 0x100280f /* U+280f BRAILLE PATTERN DOTS-1234 */ -#define XK_braille_dots_5 0x1002810 /* U+2810 BRAILLE PATTERN DOTS-5 */ -#define XK_braille_dots_15 0x1002811 /* U+2811 BRAILLE PATTERN DOTS-15 */ -#define XK_braille_dots_25 0x1002812 /* U+2812 BRAILLE PATTERN DOTS-25 */ -#define XK_braille_dots_125 0x1002813 /* U+2813 BRAILLE PATTERN DOTS-125 */ -#define XK_braille_dots_35 0x1002814 /* U+2814 BRAILLE PATTERN DOTS-35 */ -#define XK_braille_dots_135 0x1002815 /* U+2815 BRAILLE PATTERN DOTS-135 */ -#define XK_braille_dots_235 0x1002816 /* U+2816 BRAILLE PATTERN DOTS-235 */ -#define XK_braille_dots_1235 0x1002817 /* U+2817 BRAILLE PATTERN DOTS-1235 */ -#define XK_braille_dots_45 0x1002818 /* U+2818 BRAILLE PATTERN DOTS-45 */ -#define XK_braille_dots_145 0x1002819 /* U+2819 BRAILLE PATTERN DOTS-145 */ -#define XK_braille_dots_245 0x100281a /* U+281a BRAILLE PATTERN DOTS-245 */ -#define XK_braille_dots_1245 0x100281b /* U+281b BRAILLE PATTERN DOTS-1245 */ -#define XK_braille_dots_345 0x100281c /* U+281c BRAILLE PATTERN DOTS-345 */ -#define XK_braille_dots_1345 0x100281d /* U+281d BRAILLE PATTERN DOTS-1345 */ -#define XK_braille_dots_2345 0x100281e /* U+281e BRAILLE PATTERN DOTS-2345 */ -#define XK_braille_dots_12345 0x100281f /* U+281f BRAILLE PATTERN DOTS-12345 */ -#define XK_braille_dots_6 0x1002820 /* U+2820 BRAILLE PATTERN DOTS-6 */ -#define XK_braille_dots_16 0x1002821 /* U+2821 BRAILLE PATTERN DOTS-16 */ -#define XK_braille_dots_26 0x1002822 /* U+2822 BRAILLE PATTERN DOTS-26 */ -#define XK_braille_dots_126 0x1002823 /* U+2823 BRAILLE PATTERN DOTS-126 */ -#define XK_braille_dots_36 0x1002824 /* U+2824 BRAILLE PATTERN DOTS-36 */ -#define XK_braille_dots_136 0x1002825 /* U+2825 BRAILLE PATTERN DOTS-136 */ -#define XK_braille_dots_236 0x1002826 /* U+2826 BRAILLE PATTERN DOTS-236 */ -#define XK_braille_dots_1236 0x1002827 /* U+2827 BRAILLE PATTERN DOTS-1236 */ -#define XK_braille_dots_46 0x1002828 /* U+2828 BRAILLE PATTERN DOTS-46 */ -#define XK_braille_dots_146 0x1002829 /* U+2829 BRAILLE PATTERN DOTS-146 */ -#define XK_braille_dots_246 0x100282a /* U+282a BRAILLE PATTERN DOTS-246 */ -#define XK_braille_dots_1246 0x100282b /* U+282b BRAILLE PATTERN DOTS-1246 */ -#define XK_braille_dots_346 0x100282c /* U+282c BRAILLE PATTERN DOTS-346 */ -#define XK_braille_dots_1346 0x100282d /* U+282d BRAILLE PATTERN DOTS-1346 */ -#define XK_braille_dots_2346 0x100282e /* U+282e BRAILLE PATTERN DOTS-2346 */ -#define XK_braille_dots_12346 0x100282f /* U+282f BRAILLE PATTERN DOTS-12346 */ -#define XK_braille_dots_56 0x1002830 /* U+2830 BRAILLE PATTERN DOTS-56 */ -#define XK_braille_dots_156 0x1002831 /* U+2831 BRAILLE PATTERN DOTS-156 */ -#define XK_braille_dots_256 0x1002832 /* U+2832 BRAILLE PATTERN DOTS-256 */ -#define XK_braille_dots_1256 0x1002833 /* U+2833 BRAILLE PATTERN DOTS-1256 */ -#define XK_braille_dots_356 0x1002834 /* U+2834 BRAILLE PATTERN DOTS-356 */ -#define XK_braille_dots_1356 0x1002835 /* U+2835 BRAILLE PATTERN DOTS-1356 */ -#define XK_braille_dots_2356 0x1002836 /* U+2836 BRAILLE PATTERN DOTS-2356 */ -#define XK_braille_dots_12356 0x1002837 /* U+2837 BRAILLE PATTERN DOTS-12356 */ -#define XK_braille_dots_456 0x1002838 /* U+2838 BRAILLE PATTERN DOTS-456 */ -#define XK_braille_dots_1456 0x1002839 /* U+2839 BRAILLE PATTERN DOTS-1456 */ -#define XK_braille_dots_2456 0x100283a /* U+283a BRAILLE PATTERN DOTS-2456 */ -#define XK_braille_dots_12456 0x100283b /* U+283b BRAILLE PATTERN DOTS-12456 */ -#define XK_braille_dots_3456 0x100283c /* U+283c BRAILLE PATTERN DOTS-3456 */ -#define XK_braille_dots_13456 0x100283d /* U+283d BRAILLE PATTERN DOTS-13456 */ -#define XK_braille_dots_23456 0x100283e /* U+283e BRAILLE PATTERN DOTS-23456 */ -#define XK_braille_dots_123456 0x100283f /* U+283f BRAILLE PATTERN DOTS-123456 */ -#define XK_braille_dots_7 0x1002840 /* U+2840 BRAILLE PATTERN DOTS-7 */ -#define XK_braille_dots_17 0x1002841 /* U+2841 BRAILLE PATTERN DOTS-17 */ -#define XK_braille_dots_27 0x1002842 /* U+2842 BRAILLE PATTERN DOTS-27 */ -#define XK_braille_dots_127 0x1002843 /* U+2843 BRAILLE PATTERN DOTS-127 */ -#define XK_braille_dots_37 0x1002844 /* U+2844 BRAILLE PATTERN DOTS-37 */ -#define XK_braille_dots_137 0x1002845 /* U+2845 BRAILLE PATTERN DOTS-137 */ -#define XK_braille_dots_237 0x1002846 /* U+2846 BRAILLE PATTERN DOTS-237 */ -#define XK_braille_dots_1237 0x1002847 /* U+2847 BRAILLE PATTERN DOTS-1237 */ -#define XK_braille_dots_47 0x1002848 /* U+2848 BRAILLE PATTERN DOTS-47 */ -#define XK_braille_dots_147 0x1002849 /* U+2849 BRAILLE PATTERN DOTS-147 */ -#define XK_braille_dots_247 0x100284a /* U+284a BRAILLE PATTERN DOTS-247 */ -#define XK_braille_dots_1247 0x100284b /* U+284b BRAILLE PATTERN DOTS-1247 */ -#define XK_braille_dots_347 0x100284c /* U+284c BRAILLE PATTERN DOTS-347 */ -#define XK_braille_dots_1347 0x100284d /* U+284d BRAILLE PATTERN DOTS-1347 */ -#define XK_braille_dots_2347 0x100284e /* U+284e BRAILLE PATTERN DOTS-2347 */ -#define XK_braille_dots_12347 0x100284f /* U+284f BRAILLE PATTERN DOTS-12347 */ -#define XK_braille_dots_57 0x1002850 /* U+2850 BRAILLE PATTERN DOTS-57 */ -#define XK_braille_dots_157 0x1002851 /* U+2851 BRAILLE PATTERN DOTS-157 */ -#define XK_braille_dots_257 0x1002852 /* U+2852 BRAILLE PATTERN DOTS-257 */ -#define XK_braille_dots_1257 0x1002853 /* U+2853 BRAILLE PATTERN DOTS-1257 */ -#define XK_braille_dots_357 0x1002854 /* U+2854 BRAILLE PATTERN DOTS-357 */ -#define XK_braille_dots_1357 0x1002855 /* U+2855 BRAILLE PATTERN DOTS-1357 */ -#define XK_braille_dots_2357 0x1002856 /* U+2856 BRAILLE PATTERN DOTS-2357 */ -#define XK_braille_dots_12357 0x1002857 /* U+2857 BRAILLE PATTERN DOTS-12357 */ -#define XK_braille_dots_457 0x1002858 /* U+2858 BRAILLE PATTERN DOTS-457 */ -#define XK_braille_dots_1457 0x1002859 /* U+2859 BRAILLE PATTERN DOTS-1457 */ -#define XK_braille_dots_2457 0x100285a /* U+285a BRAILLE PATTERN DOTS-2457 */ -#define XK_braille_dots_12457 0x100285b /* U+285b BRAILLE PATTERN DOTS-12457 */ -#define XK_braille_dots_3457 0x100285c /* U+285c BRAILLE PATTERN DOTS-3457 */ -#define XK_braille_dots_13457 0x100285d /* U+285d BRAILLE PATTERN DOTS-13457 */ -#define XK_braille_dots_23457 0x100285e /* U+285e BRAILLE PATTERN DOTS-23457 */ -#define XK_braille_dots_123457 0x100285f /* U+285f BRAILLE PATTERN DOTS-123457 */ -#define XK_braille_dots_67 0x1002860 /* U+2860 BRAILLE PATTERN DOTS-67 */ -#define XK_braille_dots_167 0x1002861 /* U+2861 BRAILLE PATTERN DOTS-167 */ -#define XK_braille_dots_267 0x1002862 /* U+2862 BRAILLE PATTERN DOTS-267 */ -#define XK_braille_dots_1267 0x1002863 /* U+2863 BRAILLE PATTERN DOTS-1267 */ -#define XK_braille_dots_367 0x1002864 /* U+2864 BRAILLE PATTERN DOTS-367 */ -#define XK_braille_dots_1367 0x1002865 /* U+2865 BRAILLE PATTERN DOTS-1367 */ -#define XK_braille_dots_2367 0x1002866 /* U+2866 BRAILLE PATTERN DOTS-2367 */ -#define XK_braille_dots_12367 0x1002867 /* U+2867 BRAILLE PATTERN DOTS-12367 */ -#define XK_braille_dots_467 0x1002868 /* U+2868 BRAILLE PATTERN DOTS-467 */ -#define XK_braille_dots_1467 0x1002869 /* U+2869 BRAILLE PATTERN DOTS-1467 */ -#define XK_braille_dots_2467 0x100286a /* U+286a BRAILLE PATTERN DOTS-2467 */ -#define XK_braille_dots_12467 0x100286b /* U+286b BRAILLE PATTERN DOTS-12467 */ -#define XK_braille_dots_3467 0x100286c /* U+286c BRAILLE PATTERN DOTS-3467 */ -#define XK_braille_dots_13467 0x100286d /* U+286d BRAILLE PATTERN DOTS-13467 */ -#define XK_braille_dots_23467 0x100286e /* U+286e BRAILLE PATTERN DOTS-23467 */ -#define XK_braille_dots_123467 0x100286f /* U+286f BRAILLE PATTERN DOTS-123467 */ -#define XK_braille_dots_567 0x1002870 /* U+2870 BRAILLE PATTERN DOTS-567 */ -#define XK_braille_dots_1567 0x1002871 /* U+2871 BRAILLE PATTERN DOTS-1567 */ -#define XK_braille_dots_2567 0x1002872 /* U+2872 BRAILLE PATTERN DOTS-2567 */ -#define XK_braille_dots_12567 0x1002873 /* U+2873 BRAILLE PATTERN DOTS-12567 */ -#define XK_braille_dots_3567 0x1002874 /* U+2874 BRAILLE PATTERN DOTS-3567 */ -#define XK_braille_dots_13567 0x1002875 /* U+2875 BRAILLE PATTERN DOTS-13567 */ -#define XK_braille_dots_23567 0x1002876 /* U+2876 BRAILLE PATTERN DOTS-23567 */ -#define XK_braille_dots_123567 0x1002877 /* U+2877 BRAILLE PATTERN DOTS-123567 */ -#define XK_braille_dots_4567 0x1002878 /* U+2878 BRAILLE PATTERN DOTS-4567 */ -#define XK_braille_dots_14567 0x1002879 /* U+2879 BRAILLE PATTERN DOTS-14567 */ -#define XK_braille_dots_24567 0x100287a /* U+287a BRAILLE PATTERN DOTS-24567 */ -#define XK_braille_dots_124567 0x100287b /* U+287b BRAILLE PATTERN DOTS-124567 */ -#define XK_braille_dots_34567 0x100287c /* U+287c BRAILLE PATTERN DOTS-34567 */ -#define XK_braille_dots_134567 0x100287d /* U+287d BRAILLE PATTERN DOTS-134567 */ -#define XK_braille_dots_234567 0x100287e /* U+287e BRAILLE PATTERN DOTS-234567 */ -#define XK_braille_dots_1234567 0x100287f /* U+287f BRAILLE PATTERN DOTS-1234567 */ -#define XK_braille_dots_8 0x1002880 /* U+2880 BRAILLE PATTERN DOTS-8 */ -#define XK_braille_dots_18 0x1002881 /* U+2881 BRAILLE PATTERN DOTS-18 */ -#define XK_braille_dots_28 0x1002882 /* U+2882 BRAILLE PATTERN DOTS-28 */ -#define XK_braille_dots_128 0x1002883 /* U+2883 BRAILLE PATTERN DOTS-128 */ -#define XK_braille_dots_38 0x1002884 /* U+2884 BRAILLE PATTERN DOTS-38 */ -#define XK_braille_dots_138 0x1002885 /* U+2885 BRAILLE PATTERN DOTS-138 */ -#define XK_braille_dots_238 0x1002886 /* U+2886 BRAILLE PATTERN DOTS-238 */ -#define XK_braille_dots_1238 0x1002887 /* U+2887 BRAILLE PATTERN DOTS-1238 */ -#define XK_braille_dots_48 0x1002888 /* U+2888 BRAILLE PATTERN DOTS-48 */ -#define XK_braille_dots_148 0x1002889 /* U+2889 BRAILLE PATTERN DOTS-148 */ -#define XK_braille_dots_248 0x100288a /* U+288a BRAILLE PATTERN DOTS-248 */ -#define XK_braille_dots_1248 0x100288b /* U+288b BRAILLE PATTERN DOTS-1248 */ -#define XK_braille_dots_348 0x100288c /* U+288c BRAILLE PATTERN DOTS-348 */ -#define XK_braille_dots_1348 0x100288d /* U+288d BRAILLE PATTERN DOTS-1348 */ -#define XK_braille_dots_2348 0x100288e /* U+288e BRAILLE PATTERN DOTS-2348 */ -#define XK_braille_dots_12348 0x100288f /* U+288f BRAILLE PATTERN DOTS-12348 */ -#define XK_braille_dots_58 0x1002890 /* U+2890 BRAILLE PATTERN DOTS-58 */ -#define XK_braille_dots_158 0x1002891 /* U+2891 BRAILLE PATTERN DOTS-158 */ -#define XK_braille_dots_258 0x1002892 /* U+2892 BRAILLE PATTERN DOTS-258 */ -#define XK_braille_dots_1258 0x1002893 /* U+2893 BRAILLE PATTERN DOTS-1258 */ -#define XK_braille_dots_358 0x1002894 /* U+2894 BRAILLE PATTERN DOTS-358 */ -#define XK_braille_dots_1358 0x1002895 /* U+2895 BRAILLE PATTERN DOTS-1358 */ -#define XK_braille_dots_2358 0x1002896 /* U+2896 BRAILLE PATTERN DOTS-2358 */ -#define XK_braille_dots_12358 0x1002897 /* U+2897 BRAILLE PATTERN DOTS-12358 */ -#define XK_braille_dots_458 0x1002898 /* U+2898 BRAILLE PATTERN DOTS-458 */ -#define XK_braille_dots_1458 0x1002899 /* U+2899 BRAILLE PATTERN DOTS-1458 */ -#define XK_braille_dots_2458 0x100289a /* U+289a BRAILLE PATTERN DOTS-2458 */ -#define XK_braille_dots_12458 0x100289b /* U+289b BRAILLE PATTERN DOTS-12458 */ -#define XK_braille_dots_3458 0x100289c /* U+289c BRAILLE PATTERN DOTS-3458 */ -#define XK_braille_dots_13458 0x100289d /* U+289d BRAILLE PATTERN DOTS-13458 */ -#define XK_braille_dots_23458 0x100289e /* U+289e BRAILLE PATTERN DOTS-23458 */ -#define XK_braille_dots_123458 0x100289f /* U+289f BRAILLE PATTERN DOTS-123458 */ -#define XK_braille_dots_68 0x10028a0 /* U+28a0 BRAILLE PATTERN DOTS-68 */ -#define XK_braille_dots_168 0x10028a1 /* U+28a1 BRAILLE PATTERN DOTS-168 */ -#define XK_braille_dots_268 0x10028a2 /* U+28a2 BRAILLE PATTERN DOTS-268 */ -#define XK_braille_dots_1268 0x10028a3 /* U+28a3 BRAILLE PATTERN DOTS-1268 */ -#define XK_braille_dots_368 0x10028a4 /* U+28a4 BRAILLE PATTERN DOTS-368 */ -#define XK_braille_dots_1368 0x10028a5 /* U+28a5 BRAILLE PATTERN DOTS-1368 */ -#define XK_braille_dots_2368 0x10028a6 /* U+28a6 BRAILLE PATTERN DOTS-2368 */ -#define XK_braille_dots_12368 0x10028a7 /* U+28a7 BRAILLE PATTERN DOTS-12368 */ -#define XK_braille_dots_468 0x10028a8 /* U+28a8 BRAILLE PATTERN DOTS-468 */ -#define XK_braille_dots_1468 0x10028a9 /* U+28a9 BRAILLE PATTERN DOTS-1468 */ -#define XK_braille_dots_2468 0x10028aa /* U+28aa BRAILLE PATTERN DOTS-2468 */ -#define XK_braille_dots_12468 0x10028ab /* U+28ab BRAILLE PATTERN DOTS-12468 */ -#define XK_braille_dots_3468 0x10028ac /* U+28ac BRAILLE PATTERN DOTS-3468 */ -#define XK_braille_dots_13468 0x10028ad /* U+28ad BRAILLE PATTERN DOTS-13468 */ -#define XK_braille_dots_23468 0x10028ae /* U+28ae BRAILLE PATTERN DOTS-23468 */ -#define XK_braille_dots_123468 0x10028af /* U+28af BRAILLE PATTERN DOTS-123468 */ -#define XK_braille_dots_568 0x10028b0 /* U+28b0 BRAILLE PATTERN DOTS-568 */ -#define XK_braille_dots_1568 0x10028b1 /* U+28b1 BRAILLE PATTERN DOTS-1568 */ -#define XK_braille_dots_2568 0x10028b2 /* U+28b2 BRAILLE PATTERN DOTS-2568 */ -#define XK_braille_dots_12568 0x10028b3 /* U+28b3 BRAILLE PATTERN DOTS-12568 */ -#define XK_braille_dots_3568 0x10028b4 /* U+28b4 BRAILLE PATTERN DOTS-3568 */ -#define XK_braille_dots_13568 0x10028b5 /* U+28b5 BRAILLE PATTERN DOTS-13568 */ -#define XK_braille_dots_23568 0x10028b6 /* U+28b6 BRAILLE PATTERN DOTS-23568 */ -#define XK_braille_dots_123568 0x10028b7 /* U+28b7 BRAILLE PATTERN DOTS-123568 */ -#define XK_braille_dots_4568 0x10028b8 /* U+28b8 BRAILLE PATTERN DOTS-4568 */ -#define XK_braille_dots_14568 0x10028b9 /* U+28b9 BRAILLE PATTERN DOTS-14568 */ -#define XK_braille_dots_24568 0x10028ba /* U+28ba BRAILLE PATTERN DOTS-24568 */ -#define XK_braille_dots_124568 0x10028bb /* U+28bb BRAILLE PATTERN DOTS-124568 */ -#define XK_braille_dots_34568 0x10028bc /* U+28bc BRAILLE PATTERN DOTS-34568 */ -#define XK_braille_dots_134568 0x10028bd /* U+28bd BRAILLE PATTERN DOTS-134568 */ -#define XK_braille_dots_234568 0x10028be /* U+28be BRAILLE PATTERN DOTS-234568 */ -#define XK_braille_dots_1234568 0x10028bf /* U+28bf BRAILLE PATTERN DOTS-1234568 */ -#define XK_braille_dots_78 0x10028c0 /* U+28c0 BRAILLE PATTERN DOTS-78 */ -#define XK_braille_dots_178 0x10028c1 /* U+28c1 BRAILLE PATTERN DOTS-178 */ -#define XK_braille_dots_278 0x10028c2 /* U+28c2 BRAILLE PATTERN DOTS-278 */ -#define XK_braille_dots_1278 0x10028c3 /* U+28c3 BRAILLE PATTERN DOTS-1278 */ -#define XK_braille_dots_378 0x10028c4 /* U+28c4 BRAILLE PATTERN DOTS-378 */ -#define XK_braille_dots_1378 0x10028c5 /* U+28c5 BRAILLE PATTERN DOTS-1378 */ -#define XK_braille_dots_2378 0x10028c6 /* U+28c6 BRAILLE PATTERN DOTS-2378 */ -#define XK_braille_dots_12378 0x10028c7 /* U+28c7 BRAILLE PATTERN DOTS-12378 */ -#define XK_braille_dots_478 0x10028c8 /* U+28c8 BRAILLE PATTERN DOTS-478 */ -#define XK_braille_dots_1478 0x10028c9 /* U+28c9 BRAILLE PATTERN DOTS-1478 */ -#define XK_braille_dots_2478 0x10028ca /* U+28ca BRAILLE PATTERN DOTS-2478 */ -#define XK_braille_dots_12478 0x10028cb /* U+28cb BRAILLE PATTERN DOTS-12478 */ -#define XK_braille_dots_3478 0x10028cc /* U+28cc BRAILLE PATTERN DOTS-3478 */ -#define XK_braille_dots_13478 0x10028cd /* U+28cd BRAILLE PATTERN DOTS-13478 */ -#define XK_braille_dots_23478 0x10028ce /* U+28ce BRAILLE PATTERN DOTS-23478 */ -#define XK_braille_dots_123478 0x10028cf /* U+28cf BRAILLE PATTERN DOTS-123478 */ -#define XK_braille_dots_578 0x10028d0 /* U+28d0 BRAILLE PATTERN DOTS-578 */ -#define XK_braille_dots_1578 0x10028d1 /* U+28d1 BRAILLE PATTERN DOTS-1578 */ -#define XK_braille_dots_2578 0x10028d2 /* U+28d2 BRAILLE PATTERN DOTS-2578 */ -#define XK_braille_dots_12578 0x10028d3 /* U+28d3 BRAILLE PATTERN DOTS-12578 */ -#define XK_braille_dots_3578 0x10028d4 /* U+28d4 BRAILLE PATTERN DOTS-3578 */ -#define XK_braille_dots_13578 0x10028d5 /* U+28d5 BRAILLE PATTERN DOTS-13578 */ -#define XK_braille_dots_23578 0x10028d6 /* U+28d6 BRAILLE PATTERN DOTS-23578 */ -#define XK_braille_dots_123578 0x10028d7 /* U+28d7 BRAILLE PATTERN DOTS-123578 */ -#define XK_braille_dots_4578 0x10028d8 /* U+28d8 BRAILLE PATTERN DOTS-4578 */ -#define XK_braille_dots_14578 0x10028d9 /* U+28d9 BRAILLE PATTERN DOTS-14578 */ -#define XK_braille_dots_24578 0x10028da /* U+28da BRAILLE PATTERN DOTS-24578 */ -#define XK_braille_dots_124578 0x10028db /* U+28db BRAILLE PATTERN DOTS-124578 */ -#define XK_braille_dots_34578 0x10028dc /* U+28dc BRAILLE PATTERN DOTS-34578 */ -#define XK_braille_dots_134578 0x10028dd /* U+28dd BRAILLE PATTERN DOTS-134578 */ -#define XK_braille_dots_234578 0x10028de /* U+28de BRAILLE PATTERN DOTS-234578 */ -#define XK_braille_dots_1234578 0x10028df /* U+28df BRAILLE PATTERN DOTS-1234578 */ -#define XK_braille_dots_678 0x10028e0 /* U+28e0 BRAILLE PATTERN DOTS-678 */ -#define XK_braille_dots_1678 0x10028e1 /* U+28e1 BRAILLE PATTERN DOTS-1678 */ -#define XK_braille_dots_2678 0x10028e2 /* U+28e2 BRAILLE PATTERN DOTS-2678 */ -#define XK_braille_dots_12678 0x10028e3 /* U+28e3 BRAILLE PATTERN DOTS-12678 */ -#define XK_braille_dots_3678 0x10028e4 /* U+28e4 BRAILLE PATTERN DOTS-3678 */ -#define XK_braille_dots_13678 0x10028e5 /* U+28e5 BRAILLE PATTERN DOTS-13678 */ -#define XK_braille_dots_23678 0x10028e6 /* U+28e6 BRAILLE PATTERN DOTS-23678 */ -#define XK_braille_dots_123678 0x10028e7 /* U+28e7 BRAILLE PATTERN DOTS-123678 */ -#define XK_braille_dots_4678 0x10028e8 /* U+28e8 BRAILLE PATTERN DOTS-4678 */ -#define XK_braille_dots_14678 0x10028e9 /* U+28e9 BRAILLE PATTERN DOTS-14678 */ -#define XK_braille_dots_24678 0x10028ea /* U+28ea BRAILLE PATTERN DOTS-24678 */ -#define XK_braille_dots_124678 0x10028eb /* U+28eb BRAILLE PATTERN DOTS-124678 */ -#define XK_braille_dots_34678 0x10028ec /* U+28ec BRAILLE PATTERN DOTS-34678 */ -#define XK_braille_dots_134678 0x10028ed /* U+28ed BRAILLE PATTERN DOTS-134678 */ -#define XK_braille_dots_234678 0x10028ee /* U+28ee BRAILLE PATTERN DOTS-234678 */ -#define XK_braille_dots_1234678 0x10028ef /* U+28ef BRAILLE PATTERN DOTS-1234678 */ -#define XK_braille_dots_5678 0x10028f0 /* U+28f0 BRAILLE PATTERN DOTS-5678 */ -#define XK_braille_dots_15678 0x10028f1 /* U+28f1 BRAILLE PATTERN DOTS-15678 */ -#define XK_braille_dots_25678 0x10028f2 /* U+28f2 BRAILLE PATTERN DOTS-25678 */ -#define XK_braille_dots_125678 0x10028f3 /* U+28f3 BRAILLE PATTERN DOTS-125678 */ -#define XK_braille_dots_35678 0x10028f4 /* U+28f4 BRAILLE PATTERN DOTS-35678 */ -#define XK_braille_dots_135678 0x10028f5 /* U+28f5 BRAILLE PATTERN DOTS-135678 */ -#define XK_braille_dots_235678 0x10028f6 /* U+28f6 BRAILLE PATTERN DOTS-235678 */ -#define XK_braille_dots_1235678 0x10028f7 /* U+28f7 BRAILLE PATTERN DOTS-1235678 */ -#define XK_braille_dots_45678 0x10028f8 /* U+28f8 BRAILLE PATTERN DOTS-45678 */ -#define XK_braille_dots_145678 0x10028f9 /* U+28f9 BRAILLE PATTERN DOTS-145678 */ -#define XK_braille_dots_245678 0x10028fa /* U+28fa BRAILLE PATTERN DOTS-245678 */ -#define XK_braille_dots_1245678 0x10028fb /* U+28fb BRAILLE PATTERN DOTS-1245678 */ -#define XK_braille_dots_345678 0x10028fc /* U+28fc BRAILLE PATTERN DOTS-345678 */ -#define XK_braille_dots_1345678 0x10028fd /* U+28fd BRAILLE PATTERN DOTS-1345678 */ -#define XK_braille_dots_2345678 0x10028fe /* U+28fe BRAILLE PATTERN DOTS-2345678 */ -#define XK_braille_dots_12345678 0x10028ff /* U+28ff BRAILLE PATTERN DOTS-12345678 */ #endif /* XK_BRAILLE */ -/* - * Sinhala (http://unicode.org/charts/PDF/U0D80.pdf) - * http://www.nongnu.org/sinhala/doc/transliteration/sinhala-transliteration_6.html - */ - -#ifdef XK_SINHALA -#define XK_Sinh_ng 0x1000d82 /* U+0D82 SINHALA ANUSVARAYA */ -#define XK_Sinh_h2 0x1000d83 /* U+0D83 SINHALA VISARGAYA */ -#define XK_Sinh_a 0x1000d85 /* U+0D85 SINHALA AYANNA */ -#define XK_Sinh_aa 0x1000d86 /* U+0D86 SINHALA AAYANNA */ -#define XK_Sinh_ae 0x1000d87 /* U+0D87 SINHALA AEYANNA */ -#define XK_Sinh_aee 0x1000d88 /* U+0D88 SINHALA AEEYANNA */ -#define XK_Sinh_i 0x1000d89 /* U+0D89 SINHALA IYANNA */ -#define XK_Sinh_ii 0x1000d8a /* U+0D8A SINHALA IIYANNA */ -#define XK_Sinh_u 0x1000d8b /* U+0D8B SINHALA UYANNA */ -#define XK_Sinh_uu 0x1000d8c /* U+0D8C SINHALA UUYANNA */ -#define XK_Sinh_ri 0x1000d8d /* U+0D8D SINHALA IRUYANNA */ -#define XK_Sinh_rii 0x1000d8e /* U+0D8E SINHALA IRUUYANNA */ -#define XK_Sinh_lu 0x1000d8f /* U+0D8F SINHALA ILUYANNA */ -#define XK_Sinh_luu 0x1000d90 /* U+0D90 SINHALA ILUUYANNA */ -#define XK_Sinh_e 0x1000d91 /* U+0D91 SINHALA EYANNA */ -#define XK_Sinh_ee 0x1000d92 /* U+0D92 SINHALA EEYANNA */ -#define XK_Sinh_ai 0x1000d93 /* U+0D93 SINHALA AIYANNA */ -#define XK_Sinh_o 0x1000d94 /* U+0D94 SINHALA OYANNA */ -#define XK_Sinh_oo 0x1000d95 /* U+0D95 SINHALA OOYANNA */ -#define XK_Sinh_au 0x1000d96 /* U+0D96 SINHALA AUYANNA */ -#define XK_Sinh_ka 0x1000d9a /* U+0D9A SINHALA KAYANNA */ -#define XK_Sinh_kha 0x1000d9b /* U+0D9B SINHALA MAHA. KAYANNA */ -#define XK_Sinh_ga 0x1000d9c /* U+0D9C SINHALA GAYANNA */ -#define XK_Sinh_gha 0x1000d9d /* U+0D9D SINHALA MAHA. GAYANNA */ -#define XK_Sinh_ng2 0x1000d9e /* U+0D9E SINHALA KANTAJA NAASIKYAYA */ -#define XK_Sinh_nga 0x1000d9f /* U+0D9F SINHALA SANYAKA GAYANNA */ -#define XK_Sinh_ca 0x1000da0 /* U+0DA0 SINHALA CAYANNA */ -#define XK_Sinh_cha 0x1000da1 /* U+0DA1 SINHALA MAHA. CAYANNA */ -#define XK_Sinh_ja 0x1000da2 /* U+0DA2 SINHALA JAYANNA */ -#define XK_Sinh_jha 0x1000da3 /* U+0DA3 SINHALA MAHA. JAYANNA */ -#define XK_Sinh_nya 0x1000da4 /* U+0DA4 SINHALA TAALUJA NAASIKYAYA */ -#define XK_Sinh_jnya 0x1000da5 /* U+0DA5 SINHALA TAALUJA SANYOOGA NAASIKYAYA */ -#define XK_Sinh_nja 0x1000da6 /* U+0DA6 SINHALA SANYAKA JAYANNA */ -#define XK_Sinh_tta 0x1000da7 /* U+0DA7 SINHALA TTAYANNA */ -#define XK_Sinh_ttha 0x1000da8 /* U+0DA8 SINHALA MAHA. TTAYANNA */ -#define XK_Sinh_dda 0x1000da9 /* U+0DA9 SINHALA DDAYANNA */ -#define XK_Sinh_ddha 0x1000daa /* U+0DAA SINHALA MAHA. DDAYANNA */ -#define XK_Sinh_nna 0x1000dab /* U+0DAB SINHALA MUURDHAJA NAYANNA */ -#define XK_Sinh_ndda 0x1000dac /* U+0DAC SINHALA SANYAKA DDAYANNA */ -#define XK_Sinh_tha 0x1000dad /* U+0DAD SINHALA TAYANNA */ -#define XK_Sinh_thha 0x1000dae /* U+0DAE SINHALA MAHA. TAYANNA */ -#define XK_Sinh_dha 0x1000daf /* U+0DAF SINHALA DAYANNA */ -#define XK_Sinh_dhha 0x1000db0 /* U+0DB0 SINHALA MAHA. DAYANNA */ -#define XK_Sinh_na 0x1000db1 /* U+0DB1 SINHALA DANTAJA NAYANNA */ -#define XK_Sinh_ndha 0x1000db3 /* U+0DB3 SINHALA SANYAKA DAYANNA */ -#define XK_Sinh_pa 0x1000db4 /* U+0DB4 SINHALA PAYANNA */ -#define XK_Sinh_pha 0x1000db5 /* U+0DB5 SINHALA MAHA. PAYANNA */ -#define XK_Sinh_ba 0x1000db6 /* U+0DB6 SINHALA BAYANNA */ -#define XK_Sinh_bha 0x1000db7 /* U+0DB7 SINHALA MAHA. BAYANNA */ -#define XK_Sinh_ma 0x1000db8 /* U+0DB8 SINHALA MAYANNA */ -#define XK_Sinh_mba 0x1000db9 /* U+0DB9 SINHALA AMBA BAYANNA */ -#define XK_Sinh_ya 0x1000dba /* U+0DBA SINHALA YAYANNA */ -#define XK_Sinh_ra 0x1000dbb /* U+0DBB SINHALA RAYANNA */ -#define XK_Sinh_la 0x1000dbd /* U+0DBD SINHALA DANTAJA LAYANNA */ -#define XK_Sinh_va 0x1000dc0 /* U+0DC0 SINHALA VAYANNA */ -#define XK_Sinh_sha 0x1000dc1 /* U+0DC1 SINHALA TAALUJA SAYANNA */ -#define XK_Sinh_ssha 0x1000dc2 /* U+0DC2 SINHALA MUURDHAJA SAYANNA */ -#define XK_Sinh_sa 0x1000dc3 /* U+0DC3 SINHALA DANTAJA SAYANNA */ -#define XK_Sinh_ha 0x1000dc4 /* U+0DC4 SINHALA HAYANNA */ -#define XK_Sinh_lla 0x1000dc5 /* U+0DC5 SINHALA MUURDHAJA LAYANNA */ -#define XK_Sinh_fa 0x1000dc6 /* U+0DC6 SINHALA FAYANNA */ -#define XK_Sinh_al 0x1000dca /* U+0DCA SINHALA AL-LAKUNA */ -#define XK_Sinh_aa2 0x1000dcf /* U+0DCF SINHALA AELA-PILLA */ -#define XK_Sinh_ae2 0x1000dd0 /* U+0DD0 SINHALA AEDA-PILLA */ -#define XK_Sinh_aee2 0x1000dd1 /* U+0DD1 SINHALA DIGA AEDA-PILLA */ -#define XK_Sinh_i2 0x1000dd2 /* U+0DD2 SINHALA IS-PILLA */ -#define XK_Sinh_ii2 0x1000dd3 /* U+0DD3 SINHALA DIGA IS-PILLA */ -#define XK_Sinh_u2 0x1000dd4 /* U+0DD4 SINHALA PAA-PILLA */ -#define XK_Sinh_uu2 0x1000dd6 /* U+0DD6 SINHALA DIGA PAA-PILLA */ -#define XK_Sinh_ru2 0x1000dd8 /* U+0DD8 SINHALA GAETTA-PILLA */ -#define XK_Sinh_e2 0x1000dd9 /* U+0DD9 SINHALA KOMBUVA */ -#define XK_Sinh_ee2 0x1000dda /* U+0DDA SINHALA DIGA KOMBUVA */ -#define XK_Sinh_ai2 0x1000ddb /* U+0DDB SINHALA KOMBU DEKA */ -#define XK_Sinh_o2 0x1000ddc /* U+0DDC SINHALA KOMBUVA HAA AELA-PILLA*/ -#define XK_Sinh_oo2 0x1000ddd /* U+0DDD SINHALA KOMBUVA HAA DIGA AELA-PILLA*/ -#define XK_Sinh_au2 0x1000dde /* U+0DDE SINHALA KOMBUVA HAA GAYANUKITTA */ -#define XK_Sinh_lu2 0x1000ddf /* U+0DDF SINHALA GAYANUKITTA */ -#define XK_Sinh_ruu2 0x1000df2 /* U+0DF2 SINHALA DIGA GAETTA-PILLA */ -#define XK_Sinh_luu2 0x1000df3 /* U+0DF3 SINHALA DIGA GAYANUKITTA */ -#define XK_Sinh_kunddaliya 0x1000df4 /* U+0DF4 SINHALA KUNDDALIYA */ -#endif /* XK_SINHALA */ - /* Multimedia keys, defined same as on Linux * /usr/include/pkg/libxkbcommon/xkbcommon/xkbcommon-keysyms.h */ -- cgit v0.12 From 464f2082d38a09d75af5345ea4b45b1ede9433f0 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 14 Oct 2019 20:28:08 +0000 Subject: Further implementation: Handle Latin-1 --- generic/ks_names.h | 2 ++ generic/tkBind.c | 11 +++++++++-- tests/bind.test | 20 ++++++++++---------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/generic/ks_names.h b/generic/ks_names.h index ccc5a8d..a2a68ef 100644 --- a/generic/ks_names.h +++ b/generic/ks_names.h @@ -457,6 +457,7 @@ { "braceright", 0x7D }, { "asciitilde", 0x7E }, { "nobreakspace", 0xA0 }, +#ifndef TK_NO_DEPRECATED { "exclamdown", 0xA1 }, { "cent", 0xA2 }, { "sterling", 0xA3 }, @@ -556,6 +557,7 @@ { "yacute", 0xFD }, { "thorn", 0xFE }, { "ydiaeresis", 0xFF }, +#endif /* TK_NO_DEPRECATED */ { "Aogonek", 0x1A1 }, { "breve", 0x1A2 }, { "Lstroke", 0x1A3 }, diff --git a/generic/tkBind.c b/generic/tkBind.c index 08a1e04..724a130 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -5189,17 +5189,21 @@ TkStringToKeysym( const char *name) /* Name of a keysym. */ { #ifdef REDO_KEYSYM_LOOKUP - Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&keySymTable, name); + Tcl_HashEntry *hPtr; #endif /* REDO_KEYSYM_LOOKUP */ if (name[0] & 0x80) { int keysym; size_t len = TkUtfToUniChar(name, &keysym); if (name[len] == '\0') { + if ((keysym >= 0xA1) && (keysym <= 0xFF)) { + return keysym; + } return keysym + 0x1000000; } } #ifdef REDO_KEYSYM_LOOKUP + hPtr = Tcl_FindHashEntry(&keySymTable, name); if (hPtr) { return (KeySym) Tcl_GetHashValue(hPtr); } @@ -5241,6 +5245,9 @@ TkKeysymToString( int newEntry; char *value; + if ((keysym >= 0xA1) && (keysym <= 0xFF)) { + keysym += 0x1000000; + } if ((keysym >= 0x1000000) && (keysym <= 0x110FFFF)) { hPtr = Tcl_CreateHashEntry(&nameTable, INT2PTR(keysym), &newEntry); value = (char *)&Tcl_GetHashValue(hPtr); @@ -5259,7 +5266,7 @@ TkKeysymToString( } #endif /* REDO_KEYSYM_LOOKUP */ - if (keysym > 0x1008FFFF) { + if (keysym > XK_XF86AudioNext) { return NULL; } return XKeysymToString(keysym); diff --git a/tests/bind.test b/tests/bind.test index d8a6e13..a0df61c 100644 --- a/tests/bind.test +++ b/tests/bind.test @@ -384,13 +384,13 @@ test bind-10.2 {Tk_GetBinding procedure} -body { test bind-11.1 {Tk_GetAllBindings procedure} -body { frame .t.f - foreach i "! a \\\{ ~ <> " { + foreach i "! a \\\{ ~ <> <\uC2>" { bind .t.f $i Test } lsort [bind .t.f] } -cleanup { destroy .t.f -} -result {! <> a \{ ~} +} -result "! <> a \\\{ ~" test bind-11.2 {Tk_GetAllBindings procedure} -body { frame .t.f foreach i " <1>" { @@ -6010,34 +6010,34 @@ test bind-28.8 {keysym names} -setup { } -cleanup { destroy .t.f } -result {X x {keysym X}} -test bind-28.9 {keysym names, Eth -> ETH} -body { +test bind-28.9 {keysym names, \uD0} -body { frame .t.f -class Test -width 150 -height 100 - bind .t.f foo + bind .t.f <\uD0> foo bind .t.f } -cleanup { destroy .t.f -} -result {} -test bind-28.10 {keysym names, Ooblique -> Oslash} -body { +} -result +test bind-28.10 {keysym names, \uD8} -body { frame .t.f -class Test -width 150 -height 100 - bind .t.f foo + bind .t.f <\uD8> foo bind .t.f } -cleanup { destroy .t.f -} -result {} +} -result test bind-28.11 {keysym names, gcedilla} -body { frame .t.f -class Test -width 150 -height 100 bind .t.f foo bind .t.f } -cleanup { destroy .t.f -} -result {} +} -result test bind-28.12 {keysym names, Greek_IOTAdiaeresis -> Greek_IOTAdieresis} -body { frame .t.f -class Test -width 150 -height 100 bind .t.f foo bind .t.f } -cleanup { destroy .t.f -} -result {} +} -result test bind-28.13 {keysym names, Unicode} -body { frame .t.f -class Test -width 150 -height 100 bind .t.f <\u20AC> foo -- cgit v0.12 From cef82a79e42d453a43dc0b43070acb56187e6237 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 18 Oct 2019 21:54:41 +0000 Subject: Add more Linux keycodes. --- xlib/X11/keysymdef.h | 234 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 227 insertions(+), 7 deletions(-) diff --git a/xlib/X11/keysymdef.h b/xlib/X11/keysymdef.h index 7a40007..e7cb52a 100644 --- a/xlib/X11/keysymdef.h +++ b/xlib/X11/keysymdef.h @@ -1737,11 +1737,231 @@ SOFTWARE. * /usr/include/pkg/libxkbcommon/xkbcommon/xkbcommon-keysyms.h */ -#define XK_XF86AudioLowerVolume 0x1008FF11 /* Volume control down */ -#define XK_XF86AudioMute 0x1008FF12 /* Mute sound from the system */ -#define XK_XF86AudioRaiseVolume 0x1008FF13 /* Volume control up */ -#define XK_XF86AudioPlay 0x1008FF14 /* Start playing of audio > */ -#define XK_XF86AudioStop 0x1008FF15 /* Stop playing audio */ -#define XK_XF86AudioPrev 0x1008FF16 /* Previous track */ -#define XK_XF86AudioNext 0x1008FF17 /* Next track */ +/* + * XFree86 vendor specific keysyms. + * + * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. + * + * X.Org will not be adding to the XF86 set of keysyms, though they have + * been adopted and are considered a "standard" part of X keysym definitions. + * XFree86 never properly commented these keysyms, so we have done our + * best to explain the semantic meaning of these keys. + * + * XFree86 has removed their mail archives of the period, that might have + * shed more light on some of these definitions. Until/unless we resurrect + * these archives, these are from memory and usage. + */ + +/* + * ModeLock + * + * This one is old, and not really used any more since XKB offers this + * functionality. + */ + +#define XF86XK_ModeLock 0x1008FF01 /* Mode Switch Lock */ + +/* Backlight controls. */ +#define XF86XK_MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ +#define XF86XK_MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ +#define XF86XK_KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ +#define XF86XK_KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ +#define XF86XK_KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ + +/* + * Keys found on some "Internet" keyboards. + */ +#define XF86XK_Standby 0x1008FF10 /* System into standby mode */ +#define XF86XK_AudioLowerVolume 0x1008FF11 /* Volume control down */ +#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */ +#define XF86XK_AudioRaiseVolume 0x1008FF13 /* Volume control up */ +#define XF86XK_AudioPlay 0x1008FF14 /* Start playing of audio > */ +#define XF86XK_AudioStop 0x1008FF15 /* Stop playing audio */ +#define XF86XK_AudioPrev 0x1008FF16 /* Previous track */ +#define XF86XK_AudioNext 0x1008FF17 /* Next track */ +#define XF86XK_HomePage 0x1008FF18 /* Display user's home page */ +#define XF86XK_Mail 0x1008FF19 /* Invoke user's mail program */ +#define XF86XK_Start 0x1008FF1A /* Start application */ +#define XF86XK_Search 0x1008FF1B /* Search */ +#define XF86XK_AudioRecord 0x1008FF1C /* Record audio application */ + +/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ +#define XF86XK_Calculator 0x1008FF1D /* Invoke calculator program */ +#define XF86XK_Memo 0x1008FF1E /* Invoke Memo taking program */ +#define XF86XK_ToDoList 0x1008FF1F /* Invoke To Do List program */ +#define XF86XK_Calendar 0x1008FF20 /* Invoke Calendar program */ +#define XF86XK_PowerDown 0x1008FF21 /* Deep sleep the system */ +#define XF86XK_ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ +#define XF86XK_RockerUp 0x1008FF23 /* Rocker switches exist up */ +#define XF86XK_RockerDown 0x1008FF24 /* and down */ +#define XF86XK_RockerEnter 0x1008FF25 /* and let you press them */ + +/* Some more "Internet" keyboard symbols */ +#define XF86XK_Back 0x1008FF26 /* Like back on a browser */ +#define XF86XK_Forward 0x1008FF27 /* Like forward on a browser */ +#define XF86XK_Stop 0x1008FF28 /* Stop current operation */ +#define XF86XK_Refresh 0x1008FF29 /* Refresh the page */ +#define XF86XK_PowerOff 0x1008FF2A /* Power off system entirely */ +#define XF86XK_WakeUp 0x1008FF2B /* Wake up system from sleep */ +#define XF86XK_Eject 0x1008FF2C /* Eject device (e.g. DVD) */ +#define XF86XK_ScreenSaver 0x1008FF2D /* Invoke screensaver */ +#define XF86XK_WWW 0x1008FF2E /* Invoke web browser */ +#define XF86XK_Sleep 0x1008FF2F /* Put system to sleep */ +#define XF86XK_Favorites 0x1008FF30 /* Show favorite locations */ +#define XF86XK_AudioPause 0x1008FF31 /* Pause audio playing */ +#define XF86XK_AudioMedia 0x1008FF32 /* Launch media collection app */ +#define XF86XK_MyComputer 0x1008FF33 /* Display "My Computer" window */ +#define XF86XK_VendorHome 0x1008FF34 /* Display vendor home web site */ +#define XF86XK_LightBulb 0x1008FF35 /* Light bulb keys exist */ +#define XF86XK_Shop 0x1008FF36 /* Display shopping web site */ +#define XF86XK_History 0x1008FF37 /* Show history of web surfing */ +#define XF86XK_OpenURL 0x1008FF38 /* Open selected URL */ +#define XF86XK_AddFavorite 0x1008FF39 /* Add URL to favorites list */ +#define XF86XK_HotLinks 0x1008FF3A /* Show "hot" links */ +#define XF86XK_BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ +#define XF86XK_Finance 0x1008FF3C /* Display financial site */ +#define XF86XK_Community 0x1008FF3D /* Display user's community */ +#define XF86XK_AudioRewind 0x1008FF3E /* "rewind" audio track */ +#define XF86XK_BackForward 0x1008FF3F /* ??? */ +#define XF86XK_Launch0 0x1008FF40 /* Launch Application */ +#define XF86XK_Launch1 0x1008FF41 /* Launch Application */ +#define XF86XK_Launch2 0x1008FF42 /* Launch Application */ +#define XF86XK_Launch3 0x1008FF43 /* Launch Application */ +#define XF86XK_Launch4 0x1008FF44 /* Launch Application */ +#define XF86XK_Launch5 0x1008FF45 /* Launch Application */ +#define XF86XK_Launch6 0x1008FF46 /* Launch Application */ +#define XF86XK_Launch7 0x1008FF47 /* Launch Application */ +#define XF86XK_Launch8 0x1008FF48 /* Launch Application */ +#define XF86XK_Launch9 0x1008FF49 /* Launch Application */ +#define XF86XK_LaunchA 0x1008FF4A /* Launch Application */ +#define XF86XK_LaunchB 0x1008FF4B /* Launch Application */ +#define XF86XK_LaunchC 0x1008FF4C /* Launch Application */ +#define XF86XK_LaunchD 0x1008FF4D /* Launch Application */ +#define XF86XK_LaunchE 0x1008FF4E /* Launch Application */ +#define XF86XK_LaunchF 0x1008FF4F /* Launch Application */ + +#define XF86XK_ApplicationLeft 0x1008FF50 /* switch to application, left */ +#define XF86XK_ApplicationRight 0x1008FF51 /* switch to application, right*/ +#define XF86XK_Book 0x1008FF52 /* Launch bookreader */ +#define XF86XK_CD 0x1008FF53 /* Launch CD/DVD player */ +#define XF86XK_Calculater 0x1008FF54 /* Launch Calculater */ +#define XF86XK_Clear 0x1008FF55 /* Clear window, screen */ +#define XF86XK_Close 0x1008FF56 /* Close window */ +#define XF86XK_Copy 0x1008FF57 /* Copy selection */ +#define XF86XK_Cut 0x1008FF58 /* Cut selection */ +#define XF86XK_Display 0x1008FF59 /* Output switch key */ +#define XF86XK_DOS 0x1008FF5A /* Launch DOS (emulation) */ +#define XF86XK_Documents 0x1008FF5B /* Open documents window */ +#define XF86XK_Excel 0x1008FF5C /* Launch spread sheet */ +#define XF86XK_Explorer 0x1008FF5D /* Launch file explorer */ +#define XF86XK_Game 0x1008FF5E /* Launch game */ +#define XF86XK_Go 0x1008FF5F /* Go to URL */ +#define XF86XK_iTouch 0x1008FF60 /* Logitch iTouch- don't use */ +#define XF86XK_LogOff 0x1008FF61 /* Log off system */ +#define XF86XK_Market 0x1008FF62 /* ?? */ +#define XF86XK_Meeting 0x1008FF63 /* enter meeting in calendar */ +#define XF86XK_MenuKB 0x1008FF65 /* distingush keyboard from PB */ +#define XF86XK_MenuPB 0x1008FF66 /* distinuish PB from keyboard */ +#define XF86XK_MySites 0x1008FF67 /* Favourites */ +#define XF86XK_New 0x1008FF68 /* New (folder, document... */ +#define XF86XK_News 0x1008FF69 /* News */ +#define XF86XK_OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ +#define XF86XK_Open 0x1008FF6B /* Open */ +#define XF86XK_Option 0x1008FF6C /* ?? */ +#define XF86XK_Paste 0x1008FF6D /* Paste */ +#define XF86XK_Phone 0x1008FF6E /* Launch phone; dial number */ +#define XF86XK_Q 0x1008FF70 /* Compaq's Q - don't use */ +#define XF86XK_Reply 0x1008FF72 /* Reply e.g., mail */ +#define XF86XK_Reload 0x1008FF73 /* Reload web page, file, etc. */ +#define XF86XK_RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ +#define XF86XK_RotationPB 0x1008FF75 /* don't use */ +#define XF86XK_RotationKB 0x1008FF76 /* don't use */ +#define XF86XK_Save 0x1008FF77 /* Save (file, document, state */ +#define XF86XK_ScrollUp 0x1008FF78 /* Scroll window/contents up */ +#define XF86XK_ScrollDown 0x1008FF79 /* Scrool window/contentd down */ +#define XF86XK_ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ +#define XF86XK_Send 0x1008FF7B /* Send mail, file, object */ +#define XF86XK_Spell 0x1008FF7C /* Spell checker */ +#define XF86XK_SplitScreen 0x1008FF7D /* Split window or screen */ +#define XF86XK_Support 0x1008FF7E /* Get support (??) */ +#define XF86XK_TaskPane 0x1008FF7F /* Show tasks */ +#define XF86XK_Terminal 0x1008FF80 /* Launch terminal emulator */ +#define XF86XK_Tools 0x1008FF81 /* toolbox of desktop/app. */ +#define XF86XK_Travel 0x1008FF82 /* ?? */ +#define XF86XK_UserPB 0x1008FF84 /* ?? */ +#define XF86XK_User1KB 0x1008FF85 /* ?? */ +#define XF86XK_User2KB 0x1008FF86 /* ?? */ +#define XF86XK_Video 0x1008FF87 /* Launch video player */ +#define XF86XK_WheelButton 0x1008FF88 /* button from a mouse wheel */ +#define XF86XK_Word 0x1008FF89 /* Launch word processor */ +#define XF86XK_Xfer 0x1008FF8A +#define XF86XK_ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ +#define XF86XK_ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ + +#define XF86XK_Away 0x1008FF8D /* mark yourself as away */ +#define XF86XK_Messenger 0x1008FF8E /* as in instant messaging */ +#define XF86XK_WebCam 0x1008FF8F /* Launch web camera app. */ +#define XF86XK_MailForward 0x1008FF90 /* Forward in mail */ +#define XF86XK_Pictures 0x1008FF91 /* Show pictures */ +#define XF86XK_Music 0x1008FF92 /* Launch music application */ + +#define XF86XK_Battery 0x1008FF93 /* Display battery information */ +#define XF86XK_Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ +#define XF86XK_WLAN 0x1008FF95 /* Enable/disable WLAN */ +#define XF86XK_UWB 0x1008FF96 /* Enable/disable UWB */ + +#define XF86XK_AudioForward 0x1008FF97 /* fast-forward audio track */ +#define XF86XK_AudioRepeat 0x1008FF98 /* toggle repeat mode */ +#define XF86XK_AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ +#define XF86XK_Subtitle 0x1008FF9A /* cycle through subtitle */ +#define XF86XK_AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ +#define XF86XK_CycleAngle 0x1008FF9C /* cycle through angles */ +#define XF86XK_FrameBack 0x1008FF9D /* video: go one frame back */ +#define XF86XK_FrameForward 0x1008FF9E /* video: go one frame forward */ +#define XF86XK_Time 0x1008FF9F /* display, or shows an entry for time seeking */ +#define XF86XK_Select 0x1008FFA0 /* Select button on joypads and remotes */ +#define XF86XK_View 0x1008FFA1 /* Show a view options/properties */ +#define XF86XK_TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ + +#define XF86XK_Red 0x1008FFA3 /* Red button */ +#define XF86XK_Green 0x1008FFA4 /* Green button */ +#define XF86XK_Yellow 0x1008FFA5 /* Yellow button */ +#define XF86XK_Blue 0x1008FFA6 /* Blue button */ + +#define XF86XK_Suspend 0x1008FFA7 /* Sleep to RAM */ +#define XF86XK_Hibernate 0x1008FFA8 /* Sleep to disk */ +#define XF86XK_TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ +#define XF86XK_TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ +#define XF86XK_TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ + +#define XF86XK_AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ + +#define XF86XK_Keyboard 0x1008FFB3 /* User defined keyboard related action */ + +#define XF86XK_WWAN 0x1008FFB4 /* Toggle WWAN (LTE, UMTS, etc.) radio */ +#define XF86XK_RFKill 0x1008FFB5 /* Toggle radios on/off */ + +#define XF86XK_AudioPreset 0x1008FFB6 /* Select equalizer preset, e.g. theatre-mode */ + +/* Keys for special action keys (hot keys) */ +/* Virtual terminals on some operating systems */ +#define XF86XK_Switch_VT_1 0x1008FE01 +#define XF86XK_Switch_VT_2 0x1008FE02 +#define XF86XK_Switch_VT_3 0x1008FE03 +#define XF86XK_Switch_VT_4 0x1008FE04 +#define XF86XK_Switch_VT_5 0x1008FE05 +#define XF86XK_Switch_VT_6 0x1008FE06 +#define XF86XK_Switch_VT_7 0x1008FE07 +#define XF86XK_Switch_VT_8 0x1008FE08 +#define XF86XK_Switch_VT_9 0x1008FE09 +#define XF86XK_Switch_VT_10 0x1008FE0A +#define XF86XK_Switch_VT_11 0x1008FE0B +#define XF86XK_Switch_VT_12 0x1008FE0C + +#define XF86XK_Ungrab 0x1008FE20 /* force ungrab */ +#define XF86XK_ClearGrab 0x1008FE21 /* kill application with grab */ +#define XF86XK_Next_VMode 0x1008FE22 /* next video mode available */ +#define XF86XK_Prev_VMode 0x1008FE23 /* prev. video mode available */ +#define XF86XK_LogWindowTree 0x1008FE24 /* print window tree to log */ +#define XF86XK_LogGrabInfo 0x1008FE25 /* print all active grabs to log */ -- cgit v0.12 From d622513cebfc12213d08aa8c6f9fa12712776524 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 19 Oct 2019 21:06:22 +0000 Subject: Add support for parsing/generating U????-forms of keysyms. Add more X11 header-files containing keysym information. --- generic/tkBind.c | 57 ++++++------ tests/bind.test | 13 +++ win/tkWinKey.c | 4 +- xlib/X11/DECkeysym.h | 65 ++++++++++++++ xlib/X11/HPkeysym.h | 164 +++++++++++++++++++++++++++++++++++ xlib/X11/Sunkeysym.h | 106 +++++++++++++++++++++++ xlib/X11/XF86keysym.h | 230 +++++++++++++++++++++++++++++++++++++++++++++++++ xlib/X11/ap_keysym.h | 51 +++++++++++ xlib/X11/keysymdef.h | 233 -------------------------------------------------- 9 files changed, 659 insertions(+), 264 deletions(-) create mode 100644 xlib/X11/DECkeysym.h create mode 100644 xlib/X11/HPkeysym.h create mode 100644 xlib/X11/Sunkeysym.h create mode 100755 xlib/X11/XF86keysym.h create mode 100644 xlib/X11/ap_keysym.h diff --git a/generic/tkBind.c b/generic/tkBind.c index 7bce979..9efaebe 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -4075,10 +4075,10 @@ HandleEventGenerate( } break; case EVENT_KEYCODE: - if (Tcl_GetIntFromObj(interp, valuePtr, &number) != TCL_OK) { - return TCL_ERROR; - } if ((flags & KEY) && event.general.xkey.type != MouseWheelEvent) { + if (Tcl_GetIntFromObj(interp, valuePtr, &number) != TCL_OK) { + return TCL_ERROR; + } event.general.xkey.keycode = number; } else { badOpt = 1; @@ -5191,27 +5191,34 @@ TkStringToKeysym( #ifdef REDO_KEYSYM_LOOKUP Tcl_HashEntry *hPtr; #endif /* REDO_KEYSYM_LOOKUP */ + int keysym; if (name[0] & 0x80) { - int keysym; size_t len = TkUtfToUniChar(name, &keysym); if (name[len] == '\0') { if (keysym == 0x20AC) { return 0x20AC; } - if ((keysym >= 0xA1) && (keysym <= 0xFF)) { + if ((unsigned)(keysym - 0xA1) <= 0x5E) { return keysym; } return keysym + 0x1000000; } +#ifdef REDO_KEYSYM_LOOKUP + } else if ((name[0] == 'U') && ((unsigned)(name[1] - '0') <= 9)) { + char *p = (char *)name + 1; + keysym = strtol(p, &p, 16); + if ((p >= name + 5) && (p <= name + 9) && !*p) { + return keysym; + } +#endif } #ifdef REDO_KEYSYM_LOOKUP hPtr = Tcl_FindHashEntry(&keySymTable, name); if (hPtr) { return (KeySym) Tcl_GetHashValue(hPtr); } - assert(name); - if (strlen(name) == 1u) { + if (((unsigned)(name[0]-1) < 0x7F) && !name[1]) { KeySym keysym = (KeySym) (unsigned char) name[0]; if (TkKeysymToString(keysym)) { @@ -5246,35 +5253,30 @@ TkKeysymToString( { Tcl_HashEntry *hPtr; int newEntry; - char *value; + const char *value; - if ((keysym >= 0xA1) && (keysym <= 0xFF)) { + if ((unsigned)(keysym - 0xA1) <= 0x5E) { keysym += 0x1000000; } else if (keysym == 0x20AC) { keysym += 0x1000000; } if ((keysym >= 0x1000000) && (keysym <= 0x110FFFF)) { + char buf[10]; hPtr = Tcl_CreateHashEntry(&nameTable, INT2PTR(keysym), &newEntry); - if (Tcl_UniCharIsPrint(keysym-0x1000000)) { - value = (char *)&Tcl_GetHashValue(hPtr); - if (newEntry) { - Tcl_SetHashValue(hPtr, NULL); - TkUniCharToUtf(keysym - 0x1000000, value); + if (newEntry) { + if (Tcl_UniCharIsPrint(keysym-0x1000000)) { + buf[TkUniCharToUtf(keysym - 0x1000000, buf)] = '\0'; + } else if (keysym >= 0x1010000) { + sprintf(buf, "U%08X", (int)(keysym - 0x1000000)); + } else { + sprintf(buf, "U%04X", (int)(keysym - 0x1000000)); } - return value; + value = Tk_GetUid(buf); + Tcl_SetHashValue(hPtr, value); } else { - if (newEntry) { - char *buf = ckalloc(10); - if (keysym >= 0x1010000) { - sprintf(buf, "U%08X", (int)(keysym - 0x1000000)); - } else { - sprintf(buf, "U%04X", (int)(keysym - 0x1000000)); - } - Tcl_SetHashValue(hPtr, buf); - return buf; - } - return Tcl_GetHashValue(hPtr); + value = Tcl_GetHashValue(hPtr); } + return value; } #ifdef REDO_KEYSYM_LOOKUP @@ -5285,9 +5287,6 @@ TkKeysymToString( } #endif /* REDO_KEYSYM_LOOKUP */ - if (keysym > (KeySym)0x1008FFFF) { - return NULL; - } return XKeysymToString(keysym); } diff --git a/tests/bind.test b/tests/bind.test index a0df61c..33a621d 100644 --- a/tests/bind.test +++ b/tests/bind.test @@ -2220,6 +2220,19 @@ test bind-16.46 {ExpandPercents procedure} -setup { bind all $savedBind(All) unset savedBind } -result {0 1 2} +test bind-16.16 {ExpandPercents procedure} -setup { + frame .t.f -class Test -width 150 -height 100 + pack .t.f + focus -force .t.f + update +} -body { + bind .t.f {set x "%K"} + set x none + event generate .t.f -keysym U000020AC + set x +} -cleanup { + destroy .t.f +} -result \u20AC test bind-17.1 {event command} -body { event diff --git a/win/tkWinKey.c b/win/tkWinKey.c index 234a158..a0ff736 100644 --- a/win/tkWinKey.c +++ b/win/tkWinKey.c @@ -59,8 +59,8 @@ static const KeySym keymap[] = { NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, /*155 0x9b*/ NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, /*160 0xa0*/ NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, /*165 0xa5*/ - NoSymbol, NoSymbol, NoSymbol, XK_XF86AudioMute, XK_XF86AudioLowerVolume, /*170 0xaa*/ - XK_XF86AudioRaiseVolume, XK_XF86AudioNext, XK_XF86AudioPrev, XK_XF86AudioStop, XK_XF86AudioPlay /*175 0xaf*/ + NoSymbol, NoSymbol, NoSymbol, XF86XK_AudioMute, XF86XK_AudioLowerVolume, /*170 0xaa*/ + XF86XK_AudioRaiseVolume, XF86XK_AudioNext, XF86XK_AudioPrev, XF86XK_AudioStop, XF86XK_AudioPlay /*175 0xaf*/ }; /* diff --git a/xlib/X11/DECkeysym.h b/xlib/X11/DECkeysym.h new file mode 100644 index 0000000..d9e23c4 --- /dev/null +++ b/xlib/X11/DECkeysym.h @@ -0,0 +1,65 @@ +/*********************************************************** + +Copyright 1988, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1988 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * DEC private keysyms + * (29th bit set) + */ + +/* two-key compose sequence initiators, chosen to map to Latin1 characters */ + +#define DXK_ring_accent 0x1000FEB0 +#define DXK_circumflex_accent 0x1000FE5E +#define DXK_cedilla_accent 0x1000FE2C +#define DXK_acute_accent 0x1000FE27 +#define DXK_grave_accent 0x1000FE60 +#define DXK_tilde 0x1000FE7E +#define DXK_diaeresis 0x1000FE22 + +/* special keysym for LK2** "Remove" key on editing keypad */ + +#define DXK_Remove 0x1000FF00 /* Remove */ diff --git a/xlib/X11/HPkeysym.h b/xlib/X11/HPkeysym.h new file mode 100644 index 0000000..4a0655a --- /dev/null +++ b/xlib/X11/HPkeysym.h @@ -0,0 +1,164 @@ +/* + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett Packard +or Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD +TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. Hewlett-Packard shall not be liable for errors +contained herein or direct, indirect, special, incidental or +consequential damages in connection with the furnishing, +performance, or use of this material. + +*/ + +#ifndef _HPKEYSYM_H + +#define _HPKEYSYM_H + +#define hpXK_ClearLine 0x1000FF6F +#define hpXK_InsertLine 0x1000FF70 +#define hpXK_DeleteLine 0x1000FF71 +#define hpXK_InsertChar 0x1000FF72 +#define hpXK_DeleteChar 0x1000FF73 +#define hpXK_BackTab 0x1000FF74 +#define hpXK_KP_BackTab 0x1000FF75 +#define hpXK_Modelock1 0x1000FF48 +#define hpXK_Modelock2 0x1000FF49 +#define hpXK_Reset 0x1000FF6C +#define hpXK_System 0x1000FF6D +#define hpXK_User 0x1000FF6E +#define hpXK_mute_acute 0x100000A8 +#define hpXK_mute_grave 0x100000A9 +#define hpXK_mute_asciicircum 0x100000AA +#define hpXK_mute_diaeresis 0x100000AB +#define hpXK_mute_asciitilde 0x100000AC +#define hpXK_lira 0x100000AF +#define hpXK_guilder 0x100000BE +#define hpXK_Ydiaeresis 0x100000EE +#define hpXK_IO 0x100000EE +#define hpXK_longminus 0x100000F6 +#define hpXK_block 0x100000FC + + +#ifndef _OSF_Keysyms +#define _OSF_Keysyms + +#define osfXK_Copy 0x1004FF02 +#define osfXK_Cut 0x1004FF03 +#define osfXK_Paste 0x1004FF04 +#define osfXK_BackTab 0x1004FF07 +#define osfXK_BackSpace 0x1004FF08 +#define osfXK_Clear 0x1004FF0B +#define osfXK_Escape 0x1004FF1B +#define osfXK_AddMode 0x1004FF31 +#define osfXK_PrimaryPaste 0x1004FF32 +#define osfXK_QuickPaste 0x1004FF33 +#define osfXK_PageLeft 0x1004FF40 +#define osfXK_PageUp 0x1004FF41 +#define osfXK_PageDown 0x1004FF42 +#define osfXK_PageRight 0x1004FF43 +#define osfXK_Activate 0x1004FF44 +#define osfXK_MenuBar 0x1004FF45 +#define osfXK_Left 0x1004FF51 +#define osfXK_Up 0x1004FF52 +#define osfXK_Right 0x1004FF53 +#define osfXK_Down 0x1004FF54 +#define osfXK_EndLine 0x1004FF57 +#define osfXK_BeginLine 0x1004FF58 +#define osfXK_EndData 0x1004FF59 +#define osfXK_BeginData 0x1004FF5A +#define osfXK_PrevMenu 0x1004FF5B +#define osfXK_NextMenu 0x1004FF5C +#define osfXK_PrevField 0x1004FF5D +#define osfXK_NextField 0x1004FF5E +#define osfXK_Select 0x1004FF60 +#define osfXK_Insert 0x1004FF63 +#define osfXK_Undo 0x1004FF65 +#define osfXK_Menu 0x1004FF67 +#define osfXK_Cancel 0x1004FF69 +#define osfXK_Help 0x1004FF6A +#define osfXK_SelectAll 0x1004FF71 +#define osfXK_DeselectAll 0x1004FF72 +#define osfXK_Reselect 0x1004FF73 +#define osfXK_Extend 0x1004FF74 +#define osfXK_Restore 0x1004FF78 +#define osfXK_Delete 0x1004FFFF + +#endif /* _OSF_Keysyms */ + + +/************************************************************** + * The use of the following macros is deprecated. + * They are listed below only for backwards compatibility. + */ +#define XK_Reset 0x1000FF6C +#define XK_System 0x1000FF6D +#define XK_User 0x1000FF6E +#define XK_ClearLine 0x1000FF6F +#define XK_InsertLine 0x1000FF70 +#define XK_DeleteLine 0x1000FF71 +#define XK_InsertChar 0x1000FF72 +#define XK_DeleteChar 0x1000FF73 +#define XK_BackTab 0x1000FF74 +#define XK_KP_BackTab 0x1000FF75 +#define XK_Ext16bit_L 0x1000FF76 +#define XK_Ext16bit_R 0x1000FF77 +#define XK_mute_acute 0x100000a8 +#define XK_mute_grave 0x100000a9 +#define XK_mute_asciicircum 0x100000aa +#define XK_mute_diaeresis 0x100000ab +#define XK_mute_asciitilde 0x100000ac +#define XK_lira 0x100000af +#define XK_guilder 0x100000be +#ifndef XK_Ydiaeresis +#define XK_Ydiaeresis 0x100000ee +#endif +#define XK_IO 0x100000ee +#define XK_longminus 0x100000f6 +#define XK_block 0x100000fc + +#endif /* _HPKEYSYM_H */ diff --git a/xlib/X11/Sunkeysym.h b/xlib/X11/Sunkeysym.h new file mode 100644 index 0000000..78d1286 --- /dev/null +++ b/xlib/X11/Sunkeysym.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 1991, Oracle and/or its affiliates. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/************************************************************ + +Copyright 1991, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +***********************************************************/ + +/* + * Floating Accent + */ + +#define SunXK_FA_Grave 0x1005FF00 +#define SunXK_FA_Circum 0x1005FF01 +#define SunXK_FA_Tilde 0x1005FF02 +#define SunXK_FA_Acute 0x1005FF03 +#define SunXK_FA_Diaeresis 0x1005FF04 +#define SunXK_FA_Cedilla 0x1005FF05 + +/* + * Miscellaneous Functions + */ + +#define SunXK_F36 0x1005FF10 /* Labeled F11 */ +#define SunXK_F37 0x1005FF11 /* Labeled F12 */ + +#define SunXK_Sys_Req 0x1005FF60 +#define SunXK_Print_Screen 0x0000FF61 /* Same as XK_Print */ + +/* + * International & Multi-Key Character Composition + */ + +#define SunXK_Compose 0x0000FF20 /* Same as XK_Multi_key */ +#define SunXK_AltGraph 0x0000FF7E /* Same as XK_Mode_switch */ + +/* + * Cursor Control + */ + +#define SunXK_PageUp 0x0000FF55 /* Same as XK_Prior */ +#define SunXK_PageDown 0x0000FF56 /* Same as XK_Next */ + +/* + * Open Look Functions + */ + +#define SunXK_Undo 0x0000FF65 /* Same as XK_Undo */ +#define SunXK_Again 0x0000FF66 /* Same as XK_Redo */ +#define SunXK_Find 0x0000FF68 /* Same as XK_Find */ +#define SunXK_Stop 0x0000FF69 /* Same as XK_Cancel */ +#define SunXK_Props 0x1005FF70 +#define SunXK_Front 0x1005FF71 +#define SunXK_Copy 0x1005FF72 +#define SunXK_Open 0x1005FF73 +#define SunXK_Paste 0x1005FF74 +#define SunXK_Cut 0x1005FF75 + +#define SunXK_PowerSwitch 0x1005FF76 +#define SunXK_AudioLowerVolume 0x1005FF77 +#define SunXK_AudioMute 0x1005FF78 +#define SunXK_AudioRaiseVolume 0x1005FF79 +#define SunXK_VideoDegauss 0x1005FF7A +#define SunXK_VideoLowerBrightness 0x1005FF7B +#define SunXK_VideoRaiseBrightness 0x1005FF7C +#define SunXK_PowerSwitchShift 0x1005FF7D diff --git a/xlib/X11/XF86keysym.h b/xlib/X11/XF86keysym.h new file mode 100755 index 0000000..dd287e2 --- /dev/null +++ b/xlib/X11/XF86keysym.h @@ -0,0 +1,230 @@ +/* + * XFree86 vendor specific keysyms. + * + * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. + * + * X.Org will not be adding to the XF86 set of keysyms, though they have + * been adopted and are considered a "standard" part of X keysym definitions. + * XFree86 never properly commented these keysyms, so we have done our + * best to explain the semantic meaning of these keys. + * + * XFree86 has removed their mail archives of the period, that might have + * shed more light on some of these definitions. Until/unless we resurrect + * these archives, these are from memory and usage. + */ + +/* + * ModeLock + * + * This one is old, and not really used any more since XKB offers this + * functionality. + */ + +#define XF86XK_ModeLock 0x1008FF01 /* Mode Switch Lock */ + +/* Backlight controls. */ +#define XF86XK_MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ +#define XF86XK_MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ +#define XF86XK_KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ +#define XF86XK_KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ +#define XF86XK_KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ +#define XF86XK_MonBrightnessCycle 0x1008FF07 /* Monitor/panel brightness */ + +/* + * Keys found on some "Internet" keyboards. + */ +#define XF86XK_Standby 0x1008FF10 /* System into standby mode */ +#define XF86XK_AudioLowerVolume 0x1008FF11 /* Volume control down */ +#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */ +#define XF86XK_AudioRaiseVolume 0x1008FF13 /* Volume control up */ +#define XF86XK_AudioPlay 0x1008FF14 /* Start playing of audio > */ +#define XF86XK_AudioStop 0x1008FF15 /* Stop playing audio */ +#define XF86XK_AudioPrev 0x1008FF16 /* Previous track */ +#define XF86XK_AudioNext 0x1008FF17 /* Next track */ +#define XF86XK_HomePage 0x1008FF18 /* Display user's home page */ +#define XF86XK_Mail 0x1008FF19 /* Invoke user's mail program */ +#define XF86XK_Start 0x1008FF1A /* Start application */ +#define XF86XK_Search 0x1008FF1B /* Search */ +#define XF86XK_AudioRecord 0x1008FF1C /* Record audio application */ + +/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ +#define XF86XK_Calculator 0x1008FF1D /* Invoke calculator program */ +#define XF86XK_Memo 0x1008FF1E /* Invoke Memo taking program */ +#define XF86XK_ToDoList 0x1008FF1F /* Invoke To Do List program */ +#define XF86XK_Calendar 0x1008FF20 /* Invoke Calendar program */ +#define XF86XK_PowerDown 0x1008FF21 /* Deep sleep the system */ +#define XF86XK_ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ +#define XF86XK_RockerUp 0x1008FF23 /* Rocker switches exist up */ +#define XF86XK_RockerDown 0x1008FF24 /* and down */ +#define XF86XK_RockerEnter 0x1008FF25 /* and let you press them */ + +/* Some more "Internet" keyboard symbols */ +#define XF86XK_Back 0x1008FF26 /* Like back on a browser */ +#define XF86XK_Forward 0x1008FF27 /* Like forward on a browser */ +#define XF86XK_Stop 0x1008FF28 /* Stop current operation */ +#define XF86XK_Refresh 0x1008FF29 /* Refresh the page */ +#define XF86XK_PowerOff 0x1008FF2A /* Power off system entirely */ +#define XF86XK_WakeUp 0x1008FF2B /* Wake up system from sleep */ +#define XF86XK_Eject 0x1008FF2C /* Eject device (e.g. DVD) */ +#define XF86XK_ScreenSaver 0x1008FF2D /* Invoke screensaver */ +#define XF86XK_WWW 0x1008FF2E /* Invoke web browser */ +#define XF86XK_Sleep 0x1008FF2F /* Put system to sleep */ +#define XF86XK_Favorites 0x1008FF30 /* Show favorite locations */ +#define XF86XK_AudioPause 0x1008FF31 /* Pause audio playing */ +#define XF86XK_AudioMedia 0x1008FF32 /* Launch media collection app */ +#define XF86XK_MyComputer 0x1008FF33 /* Display "My Computer" window */ +#define XF86XK_VendorHome 0x1008FF34 /* Display vendor home web site */ +#define XF86XK_LightBulb 0x1008FF35 /* Light bulb keys exist */ +#define XF86XK_Shop 0x1008FF36 /* Display shopping web site */ +#define XF86XK_History 0x1008FF37 /* Show history of web surfing */ +#define XF86XK_OpenURL 0x1008FF38 /* Open selected URL */ +#define XF86XK_AddFavorite 0x1008FF39 /* Add URL to favorites list */ +#define XF86XK_HotLinks 0x1008FF3A /* Show "hot" links */ +#define XF86XK_BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ +#define XF86XK_Finance 0x1008FF3C /* Display financial site */ +#define XF86XK_Community 0x1008FF3D /* Display user's community */ +#define XF86XK_AudioRewind 0x1008FF3E /* "rewind" audio track */ +#define XF86XK_BackForward 0x1008FF3F /* ??? */ +#define XF86XK_Launch0 0x1008FF40 /* Launch Application */ +#define XF86XK_Launch1 0x1008FF41 /* Launch Application */ +#define XF86XK_Launch2 0x1008FF42 /* Launch Application */ +#define XF86XK_Launch3 0x1008FF43 /* Launch Application */ +#define XF86XK_Launch4 0x1008FF44 /* Launch Application */ +#define XF86XK_Launch5 0x1008FF45 /* Launch Application */ +#define XF86XK_Launch6 0x1008FF46 /* Launch Application */ +#define XF86XK_Launch7 0x1008FF47 /* Launch Application */ +#define XF86XK_Launch8 0x1008FF48 /* Launch Application */ +#define XF86XK_Launch9 0x1008FF49 /* Launch Application */ +#define XF86XK_LaunchA 0x1008FF4A /* Launch Application */ +#define XF86XK_LaunchB 0x1008FF4B /* Launch Application */ +#define XF86XK_LaunchC 0x1008FF4C /* Launch Application */ +#define XF86XK_LaunchD 0x1008FF4D /* Launch Application */ +#define XF86XK_LaunchE 0x1008FF4E /* Launch Application */ +#define XF86XK_LaunchF 0x1008FF4F /* Launch Application */ + +#define XF86XK_ApplicationLeft 0x1008FF50 /* switch to application, left */ +#define XF86XK_ApplicationRight 0x1008FF51 /* switch to application, right*/ +#define XF86XK_Book 0x1008FF52 /* Launch bookreader */ +#define XF86XK_CD 0x1008FF53 /* Launch CD/DVD player */ +#define XF86XK_Calculater 0x1008FF54 /* Launch Calculater */ +#define XF86XK_Clear 0x1008FF55 /* Clear window, screen */ +#define XF86XK_Close 0x1008FF56 /* Close window */ +#define XF86XK_Copy 0x1008FF57 /* Copy selection */ +#define XF86XK_Cut 0x1008FF58 /* Cut selection */ +#define XF86XK_Display 0x1008FF59 /* Output switch key */ +#define XF86XK_DOS 0x1008FF5A /* Launch DOS (emulation) */ +#define XF86XK_Documents 0x1008FF5B /* Open documents window */ +#define XF86XK_Excel 0x1008FF5C /* Launch spread sheet */ +#define XF86XK_Explorer 0x1008FF5D /* Launch file explorer */ +#define XF86XK_Game 0x1008FF5E /* Launch game */ +#define XF86XK_Go 0x1008FF5F /* Go to URL */ +#define XF86XK_iTouch 0x1008FF60 /* Logitech iTouch- don't use */ +#define XF86XK_LogOff 0x1008FF61 /* Log off system */ +#define XF86XK_Market 0x1008FF62 /* ?? */ +#define XF86XK_Meeting 0x1008FF63 /* enter meeting in calendar */ +#define XF86XK_MenuKB 0x1008FF65 /* distinguish keyboard from PB */ +#define XF86XK_MenuPB 0x1008FF66 /* distinguish PB from keyboard */ +#define XF86XK_MySites 0x1008FF67 /* Favourites */ +#define XF86XK_New 0x1008FF68 /* New (folder, document... */ +#define XF86XK_News 0x1008FF69 /* News */ +#define XF86XK_OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ +#define XF86XK_Open 0x1008FF6B /* Open */ +#define XF86XK_Option 0x1008FF6C /* ?? */ +#define XF86XK_Paste 0x1008FF6D /* Paste */ +#define XF86XK_Phone 0x1008FF6E /* Launch phone; dial number */ +#define XF86XK_Q 0x1008FF70 /* Compaq's Q - don't use */ +#define XF86XK_Reply 0x1008FF72 /* Reply e.g., mail */ +#define XF86XK_Reload 0x1008FF73 /* Reload web page, file, etc. */ +#define XF86XK_RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ +#define XF86XK_RotationPB 0x1008FF75 /* don't use */ +#define XF86XK_RotationKB 0x1008FF76 /* don't use */ +#define XF86XK_Save 0x1008FF77 /* Save (file, document, state */ +#define XF86XK_ScrollUp 0x1008FF78 /* Scroll window/contents up */ +#define XF86XK_ScrollDown 0x1008FF79 /* Scrool window/contentd down */ +#define XF86XK_ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ +#define XF86XK_Send 0x1008FF7B /* Send mail, file, object */ +#define XF86XK_Spell 0x1008FF7C /* Spell checker */ +#define XF86XK_SplitScreen 0x1008FF7D /* Split window or screen */ +#define XF86XK_Support 0x1008FF7E /* Get support (??) */ +#define XF86XK_TaskPane 0x1008FF7F /* Show tasks */ +#define XF86XK_Terminal 0x1008FF80 /* Launch terminal emulator */ +#define XF86XK_Tools 0x1008FF81 /* toolbox of desktop/app. */ +#define XF86XK_Travel 0x1008FF82 /* ?? */ +#define XF86XK_UserPB 0x1008FF84 /* ?? */ +#define XF86XK_User1KB 0x1008FF85 /* ?? */ +#define XF86XK_User2KB 0x1008FF86 /* ?? */ +#define XF86XK_Video 0x1008FF87 /* Launch video player */ +#define XF86XK_WheelButton 0x1008FF88 /* button from a mouse wheel */ +#define XF86XK_Word 0x1008FF89 /* Launch word processor */ +#define XF86XK_Xfer 0x1008FF8A +#define XF86XK_ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ +#define XF86XK_ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ + +#define XF86XK_Away 0x1008FF8D /* mark yourself as away */ +#define XF86XK_Messenger 0x1008FF8E /* as in instant messaging */ +#define XF86XK_WebCam 0x1008FF8F /* Launch web camera app. */ +#define XF86XK_MailForward 0x1008FF90 /* Forward in mail */ +#define XF86XK_Pictures 0x1008FF91 /* Show pictures */ +#define XF86XK_Music 0x1008FF92 /* Launch music application */ + +#define XF86XK_Battery 0x1008FF93 /* Display battery information */ +#define XF86XK_Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ +#define XF86XK_WLAN 0x1008FF95 /* Enable/disable WLAN */ +#define XF86XK_UWB 0x1008FF96 /* Enable/disable UWB */ + +#define XF86XK_AudioForward 0x1008FF97 /* fast-forward audio track */ +#define XF86XK_AudioRepeat 0x1008FF98 /* toggle repeat mode */ +#define XF86XK_AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ +#define XF86XK_Subtitle 0x1008FF9A /* cycle through subtitle */ +#define XF86XK_AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ +#define XF86XK_CycleAngle 0x1008FF9C /* cycle through angles */ +#define XF86XK_FrameBack 0x1008FF9D /* video: go one frame back */ +#define XF86XK_FrameForward 0x1008FF9E /* video: go one frame forward */ +#define XF86XK_Time 0x1008FF9F /* display, or shows an entry for time seeking */ +#define XF86XK_Select 0x1008FFA0 /* Select button on joypads and remotes */ +#define XF86XK_View 0x1008FFA1 /* Show a view options/properties */ +#define XF86XK_TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ + +#define XF86XK_Red 0x1008FFA3 /* Red button */ +#define XF86XK_Green 0x1008FFA4 /* Green button */ +#define XF86XK_Yellow 0x1008FFA5 /* Yellow button */ +#define XF86XK_Blue 0x1008FFA6 /* Blue button */ + +#define XF86XK_Suspend 0x1008FFA7 /* Sleep to RAM */ +#define XF86XK_Hibernate 0x1008FFA8 /* Sleep to disk */ +#define XF86XK_TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ +#define XF86XK_TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ +#define XF86XK_TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ + +#define XF86XK_AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ + +#define XF86XK_Keyboard 0x1008FFB3 /* User defined keyboard related action */ + +#define XF86XK_WWAN 0x1008FFB4 /* Toggle WWAN (LTE, UMTS, etc.) radio */ +#define XF86XK_RFKill 0x1008FFB5 /* Toggle radios on/off */ + +#define XF86XK_AudioPreset 0x1008FFB6 /* Select equalizer preset, e.g. theatre-mode */ + +#define XF86XK_RotationLockToggle 0x1008FFB7 /* Toggle screen rotation lock on/off */ + +/* Keys for special action keys (hot keys) */ +/* Virtual terminals on some operating systems */ +#define XF86XK_Switch_VT_1 0x1008FE01 +#define XF86XK_Switch_VT_2 0x1008FE02 +#define XF86XK_Switch_VT_3 0x1008FE03 +#define XF86XK_Switch_VT_4 0x1008FE04 +#define XF86XK_Switch_VT_5 0x1008FE05 +#define XF86XK_Switch_VT_6 0x1008FE06 +#define XF86XK_Switch_VT_7 0x1008FE07 +#define XF86XK_Switch_VT_8 0x1008FE08 +#define XF86XK_Switch_VT_9 0x1008FE09 +#define XF86XK_Switch_VT_10 0x1008FE0A +#define XF86XK_Switch_VT_11 0x1008FE0B +#define XF86XK_Switch_VT_12 0x1008FE0C + +#define XF86XK_Ungrab 0x1008FE20 /* force ungrab */ +#define XF86XK_ClearGrab 0x1008FE21 /* kill application with grab */ +#define XF86XK_Next_VMode 0x1008FE22 /* next video mode available */ +#define XF86XK_Prev_VMode 0x1008FE23 /* prev. video mode available */ +#define XF86XK_LogWindowTree 0x1008FE24 /* print window tree to log */ +#define XF86XK_LogGrabInfo 0x1008FE25 /* print all active grabs to log */ diff --git a/xlib/X11/ap_keysym.h b/xlib/X11/ap_keysym.h new file mode 100644 index 0000000..76cbde2 --- /dev/null +++ b/xlib/X11/ap_keysym.h @@ -0,0 +1,51 @@ +/****************************************************************** +Copyright 1987 by Apollo Computer Inc., Chelmsford, Massachusetts. +Copyright 1989 by Hewlett-Packard Company. + + All Rights Reserved + +Permission to use, duplicate, change, and distribute this software and +its documentation for any purpose and without fee is granted, provided +that the above copyright notice appear in such copy and that this +copyright notice appear in all supporting documentation, and that the +names of Apollo Computer Inc., the Hewlett-Packard Company, or the X +Consortium not be used in advertising or publicity pertaining to +distribution of the software without written prior permission. + +HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD +TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. Hewlett-Packard shall not be liable for errors +contained herein or direct, indirect, special, incidental or +consequential damages in connection with the furnishing, +performance, or use of this material. + +This software is not subject to any license of the American +Telephone and Telegraph Company or of the Regents of the +University of California. +******************************************************************/ + +#define apXK_LineDel 0x1000FF00 +#define apXK_CharDel 0x1000FF01 +#define apXK_Copy 0x1000FF02 +#define apXK_Cut 0x1000FF03 +#define apXK_Paste 0x1000FF04 +#define apXK_Move 0x1000FF05 +#define apXK_Grow 0x1000FF06 +#define apXK_Cmd 0x1000FF07 +#define apXK_Shell 0x1000FF08 +#define apXK_LeftBar 0x1000FF09 +#define apXK_RightBar 0x1000FF0A +#define apXK_LeftBox 0x1000FF0B +#define apXK_RightBox 0x1000FF0C +#define apXK_UpBox 0x1000FF0D +#define apXK_DownBox 0x1000FF0E +#define apXK_Pop 0x1000FF0F +#define apXK_Read 0x1000FF10 +#define apXK_Edit 0x1000FF11 +#define apXK_Save 0x1000FF12 +#define apXK_Exit 0x1000FF13 +#define apXK_Repeat 0x1000FF14 + +#define apXK_KP_parenleft 0x1000FFA8 +#define apXK_KP_parenright 0x1000FFA9 diff --git a/xlib/X11/keysymdef.h b/xlib/X11/keysymdef.h index e7cb52a..2431b7f 100644 --- a/xlib/X11/keysymdef.h +++ b/xlib/X11/keysymdef.h @@ -1732,236 +1732,3 @@ SOFTWARE. #define XK_braille_dot_9 0xfff9 #define XK_braille_dot_10 0xfffa #endif /* XK_BRAILLE */ - -/* Multimedia keys, defined same as on Linux - * /usr/include/pkg/libxkbcommon/xkbcommon/xkbcommon-keysyms.h - */ - -/* - * XFree86 vendor specific keysyms. - * - * The XFree86 keysym range is 0x10080001 - 0x1008FFFF. - * - * X.Org will not be adding to the XF86 set of keysyms, though they have - * been adopted and are considered a "standard" part of X keysym definitions. - * XFree86 never properly commented these keysyms, so we have done our - * best to explain the semantic meaning of these keys. - * - * XFree86 has removed their mail archives of the period, that might have - * shed more light on some of these definitions. Until/unless we resurrect - * these archives, these are from memory and usage. - */ - -/* - * ModeLock - * - * This one is old, and not really used any more since XKB offers this - * functionality. - */ - -#define XF86XK_ModeLock 0x1008FF01 /* Mode Switch Lock */ - -/* Backlight controls. */ -#define XF86XK_MonBrightnessUp 0x1008FF02 /* Monitor/panel brightness */ -#define XF86XK_MonBrightnessDown 0x1008FF03 /* Monitor/panel brightness */ -#define XF86XK_KbdLightOnOff 0x1008FF04 /* Keyboards may be lit */ -#define XF86XK_KbdBrightnessUp 0x1008FF05 /* Keyboards may be lit */ -#define XF86XK_KbdBrightnessDown 0x1008FF06 /* Keyboards may be lit */ - -/* - * Keys found on some "Internet" keyboards. - */ -#define XF86XK_Standby 0x1008FF10 /* System into standby mode */ -#define XF86XK_AudioLowerVolume 0x1008FF11 /* Volume control down */ -#define XF86XK_AudioMute 0x1008FF12 /* Mute sound from the system */ -#define XF86XK_AudioRaiseVolume 0x1008FF13 /* Volume control up */ -#define XF86XK_AudioPlay 0x1008FF14 /* Start playing of audio > */ -#define XF86XK_AudioStop 0x1008FF15 /* Stop playing audio */ -#define XF86XK_AudioPrev 0x1008FF16 /* Previous track */ -#define XF86XK_AudioNext 0x1008FF17 /* Next track */ -#define XF86XK_HomePage 0x1008FF18 /* Display user's home page */ -#define XF86XK_Mail 0x1008FF19 /* Invoke user's mail program */ -#define XF86XK_Start 0x1008FF1A /* Start application */ -#define XF86XK_Search 0x1008FF1B /* Search */ -#define XF86XK_AudioRecord 0x1008FF1C /* Record audio application */ - -/* These are sometimes found on PDA's (e.g. Palm, PocketPC or elsewhere) */ -#define XF86XK_Calculator 0x1008FF1D /* Invoke calculator program */ -#define XF86XK_Memo 0x1008FF1E /* Invoke Memo taking program */ -#define XF86XK_ToDoList 0x1008FF1F /* Invoke To Do List program */ -#define XF86XK_Calendar 0x1008FF20 /* Invoke Calendar program */ -#define XF86XK_PowerDown 0x1008FF21 /* Deep sleep the system */ -#define XF86XK_ContrastAdjust 0x1008FF22 /* Adjust screen contrast */ -#define XF86XK_RockerUp 0x1008FF23 /* Rocker switches exist up */ -#define XF86XK_RockerDown 0x1008FF24 /* and down */ -#define XF86XK_RockerEnter 0x1008FF25 /* and let you press them */ - -/* Some more "Internet" keyboard symbols */ -#define XF86XK_Back 0x1008FF26 /* Like back on a browser */ -#define XF86XK_Forward 0x1008FF27 /* Like forward on a browser */ -#define XF86XK_Stop 0x1008FF28 /* Stop current operation */ -#define XF86XK_Refresh 0x1008FF29 /* Refresh the page */ -#define XF86XK_PowerOff 0x1008FF2A /* Power off system entirely */ -#define XF86XK_WakeUp 0x1008FF2B /* Wake up system from sleep */ -#define XF86XK_Eject 0x1008FF2C /* Eject device (e.g. DVD) */ -#define XF86XK_ScreenSaver 0x1008FF2D /* Invoke screensaver */ -#define XF86XK_WWW 0x1008FF2E /* Invoke web browser */ -#define XF86XK_Sleep 0x1008FF2F /* Put system to sleep */ -#define XF86XK_Favorites 0x1008FF30 /* Show favorite locations */ -#define XF86XK_AudioPause 0x1008FF31 /* Pause audio playing */ -#define XF86XK_AudioMedia 0x1008FF32 /* Launch media collection app */ -#define XF86XK_MyComputer 0x1008FF33 /* Display "My Computer" window */ -#define XF86XK_VendorHome 0x1008FF34 /* Display vendor home web site */ -#define XF86XK_LightBulb 0x1008FF35 /* Light bulb keys exist */ -#define XF86XK_Shop 0x1008FF36 /* Display shopping web site */ -#define XF86XK_History 0x1008FF37 /* Show history of web surfing */ -#define XF86XK_OpenURL 0x1008FF38 /* Open selected URL */ -#define XF86XK_AddFavorite 0x1008FF39 /* Add URL to favorites list */ -#define XF86XK_HotLinks 0x1008FF3A /* Show "hot" links */ -#define XF86XK_BrightnessAdjust 0x1008FF3B /* Invoke brightness adj. UI */ -#define XF86XK_Finance 0x1008FF3C /* Display financial site */ -#define XF86XK_Community 0x1008FF3D /* Display user's community */ -#define XF86XK_AudioRewind 0x1008FF3E /* "rewind" audio track */ -#define XF86XK_BackForward 0x1008FF3F /* ??? */ -#define XF86XK_Launch0 0x1008FF40 /* Launch Application */ -#define XF86XK_Launch1 0x1008FF41 /* Launch Application */ -#define XF86XK_Launch2 0x1008FF42 /* Launch Application */ -#define XF86XK_Launch3 0x1008FF43 /* Launch Application */ -#define XF86XK_Launch4 0x1008FF44 /* Launch Application */ -#define XF86XK_Launch5 0x1008FF45 /* Launch Application */ -#define XF86XK_Launch6 0x1008FF46 /* Launch Application */ -#define XF86XK_Launch7 0x1008FF47 /* Launch Application */ -#define XF86XK_Launch8 0x1008FF48 /* Launch Application */ -#define XF86XK_Launch9 0x1008FF49 /* Launch Application */ -#define XF86XK_LaunchA 0x1008FF4A /* Launch Application */ -#define XF86XK_LaunchB 0x1008FF4B /* Launch Application */ -#define XF86XK_LaunchC 0x1008FF4C /* Launch Application */ -#define XF86XK_LaunchD 0x1008FF4D /* Launch Application */ -#define XF86XK_LaunchE 0x1008FF4E /* Launch Application */ -#define XF86XK_LaunchF 0x1008FF4F /* Launch Application */ - -#define XF86XK_ApplicationLeft 0x1008FF50 /* switch to application, left */ -#define XF86XK_ApplicationRight 0x1008FF51 /* switch to application, right*/ -#define XF86XK_Book 0x1008FF52 /* Launch bookreader */ -#define XF86XK_CD 0x1008FF53 /* Launch CD/DVD player */ -#define XF86XK_Calculater 0x1008FF54 /* Launch Calculater */ -#define XF86XK_Clear 0x1008FF55 /* Clear window, screen */ -#define XF86XK_Close 0x1008FF56 /* Close window */ -#define XF86XK_Copy 0x1008FF57 /* Copy selection */ -#define XF86XK_Cut 0x1008FF58 /* Cut selection */ -#define XF86XK_Display 0x1008FF59 /* Output switch key */ -#define XF86XK_DOS 0x1008FF5A /* Launch DOS (emulation) */ -#define XF86XK_Documents 0x1008FF5B /* Open documents window */ -#define XF86XK_Excel 0x1008FF5C /* Launch spread sheet */ -#define XF86XK_Explorer 0x1008FF5D /* Launch file explorer */ -#define XF86XK_Game 0x1008FF5E /* Launch game */ -#define XF86XK_Go 0x1008FF5F /* Go to URL */ -#define XF86XK_iTouch 0x1008FF60 /* Logitch iTouch- don't use */ -#define XF86XK_LogOff 0x1008FF61 /* Log off system */ -#define XF86XK_Market 0x1008FF62 /* ?? */ -#define XF86XK_Meeting 0x1008FF63 /* enter meeting in calendar */ -#define XF86XK_MenuKB 0x1008FF65 /* distingush keyboard from PB */ -#define XF86XK_MenuPB 0x1008FF66 /* distinuish PB from keyboard */ -#define XF86XK_MySites 0x1008FF67 /* Favourites */ -#define XF86XK_New 0x1008FF68 /* New (folder, document... */ -#define XF86XK_News 0x1008FF69 /* News */ -#define XF86XK_OfficeHome 0x1008FF6A /* Office home (old Staroffice)*/ -#define XF86XK_Open 0x1008FF6B /* Open */ -#define XF86XK_Option 0x1008FF6C /* ?? */ -#define XF86XK_Paste 0x1008FF6D /* Paste */ -#define XF86XK_Phone 0x1008FF6E /* Launch phone; dial number */ -#define XF86XK_Q 0x1008FF70 /* Compaq's Q - don't use */ -#define XF86XK_Reply 0x1008FF72 /* Reply e.g., mail */ -#define XF86XK_Reload 0x1008FF73 /* Reload web page, file, etc. */ -#define XF86XK_RotateWindows 0x1008FF74 /* Rotate windows e.g. xrandr */ -#define XF86XK_RotationPB 0x1008FF75 /* don't use */ -#define XF86XK_RotationKB 0x1008FF76 /* don't use */ -#define XF86XK_Save 0x1008FF77 /* Save (file, document, state */ -#define XF86XK_ScrollUp 0x1008FF78 /* Scroll window/contents up */ -#define XF86XK_ScrollDown 0x1008FF79 /* Scrool window/contentd down */ -#define XF86XK_ScrollClick 0x1008FF7A /* Use XKB mousekeys instead */ -#define XF86XK_Send 0x1008FF7B /* Send mail, file, object */ -#define XF86XK_Spell 0x1008FF7C /* Spell checker */ -#define XF86XK_SplitScreen 0x1008FF7D /* Split window or screen */ -#define XF86XK_Support 0x1008FF7E /* Get support (??) */ -#define XF86XK_TaskPane 0x1008FF7F /* Show tasks */ -#define XF86XK_Terminal 0x1008FF80 /* Launch terminal emulator */ -#define XF86XK_Tools 0x1008FF81 /* toolbox of desktop/app. */ -#define XF86XK_Travel 0x1008FF82 /* ?? */ -#define XF86XK_UserPB 0x1008FF84 /* ?? */ -#define XF86XK_User1KB 0x1008FF85 /* ?? */ -#define XF86XK_User2KB 0x1008FF86 /* ?? */ -#define XF86XK_Video 0x1008FF87 /* Launch video player */ -#define XF86XK_WheelButton 0x1008FF88 /* button from a mouse wheel */ -#define XF86XK_Word 0x1008FF89 /* Launch word processor */ -#define XF86XK_Xfer 0x1008FF8A -#define XF86XK_ZoomIn 0x1008FF8B /* zoom in view, map, etc. */ -#define XF86XK_ZoomOut 0x1008FF8C /* zoom out view, map, etc. */ - -#define XF86XK_Away 0x1008FF8D /* mark yourself as away */ -#define XF86XK_Messenger 0x1008FF8E /* as in instant messaging */ -#define XF86XK_WebCam 0x1008FF8F /* Launch web camera app. */ -#define XF86XK_MailForward 0x1008FF90 /* Forward in mail */ -#define XF86XK_Pictures 0x1008FF91 /* Show pictures */ -#define XF86XK_Music 0x1008FF92 /* Launch music application */ - -#define XF86XK_Battery 0x1008FF93 /* Display battery information */ -#define XF86XK_Bluetooth 0x1008FF94 /* Enable/disable Bluetooth */ -#define XF86XK_WLAN 0x1008FF95 /* Enable/disable WLAN */ -#define XF86XK_UWB 0x1008FF96 /* Enable/disable UWB */ - -#define XF86XK_AudioForward 0x1008FF97 /* fast-forward audio track */ -#define XF86XK_AudioRepeat 0x1008FF98 /* toggle repeat mode */ -#define XF86XK_AudioRandomPlay 0x1008FF99 /* toggle shuffle mode */ -#define XF86XK_Subtitle 0x1008FF9A /* cycle through subtitle */ -#define XF86XK_AudioCycleTrack 0x1008FF9B /* cycle through audio tracks */ -#define XF86XK_CycleAngle 0x1008FF9C /* cycle through angles */ -#define XF86XK_FrameBack 0x1008FF9D /* video: go one frame back */ -#define XF86XK_FrameForward 0x1008FF9E /* video: go one frame forward */ -#define XF86XK_Time 0x1008FF9F /* display, or shows an entry for time seeking */ -#define XF86XK_Select 0x1008FFA0 /* Select button on joypads and remotes */ -#define XF86XK_View 0x1008FFA1 /* Show a view options/properties */ -#define XF86XK_TopMenu 0x1008FFA2 /* Go to a top-level menu in a video */ - -#define XF86XK_Red 0x1008FFA3 /* Red button */ -#define XF86XK_Green 0x1008FFA4 /* Green button */ -#define XF86XK_Yellow 0x1008FFA5 /* Yellow button */ -#define XF86XK_Blue 0x1008FFA6 /* Blue button */ - -#define XF86XK_Suspend 0x1008FFA7 /* Sleep to RAM */ -#define XF86XK_Hibernate 0x1008FFA8 /* Sleep to disk */ -#define XF86XK_TouchpadToggle 0x1008FFA9 /* Toggle between touchpad/trackstick */ -#define XF86XK_TouchpadOn 0x1008FFB0 /* The touchpad got switched on */ -#define XF86XK_TouchpadOff 0x1008FFB1 /* The touchpad got switched off */ - -#define XF86XK_AudioMicMute 0x1008FFB2 /* Mute the Mic from the system */ - -#define XF86XK_Keyboard 0x1008FFB3 /* User defined keyboard related action */ - -#define XF86XK_WWAN 0x1008FFB4 /* Toggle WWAN (LTE, UMTS, etc.) radio */ -#define XF86XK_RFKill 0x1008FFB5 /* Toggle radios on/off */ - -#define XF86XK_AudioPreset 0x1008FFB6 /* Select equalizer preset, e.g. theatre-mode */ - -/* Keys for special action keys (hot keys) */ -/* Virtual terminals on some operating systems */ -#define XF86XK_Switch_VT_1 0x1008FE01 -#define XF86XK_Switch_VT_2 0x1008FE02 -#define XF86XK_Switch_VT_3 0x1008FE03 -#define XF86XK_Switch_VT_4 0x1008FE04 -#define XF86XK_Switch_VT_5 0x1008FE05 -#define XF86XK_Switch_VT_6 0x1008FE06 -#define XF86XK_Switch_VT_7 0x1008FE07 -#define XF86XK_Switch_VT_8 0x1008FE08 -#define XF86XK_Switch_VT_9 0x1008FE09 -#define XF86XK_Switch_VT_10 0x1008FE0A -#define XF86XK_Switch_VT_11 0x1008FE0B -#define XF86XK_Switch_VT_12 0x1008FE0C - -#define XF86XK_Ungrab 0x1008FE20 /* force ungrab */ -#define XF86XK_ClearGrab 0x1008FE21 /* kill application with grab */ -#define XF86XK_Next_VMode 0x1008FE22 /* next video mode available */ -#define XF86XK_Prev_VMode 0x1008FE23 /* prev. video mode available */ -#define XF86XK_LogWindowTree 0x1008FE24 /* print window tree to log */ -#define XF86XK_LogGrabInfo 0x1008FE25 /* print all active grabs to log */ - -- cgit v0.12 From db0cefd5275d1c5ab038f45bc59d080fee942763 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 21 Oct 2019 15:38:09 +0000 Subject: Use in stead of , except for <1> and <2> --- doc/event.n | 2 +- doc/keysyms.n | 2 +- library/console.tcl | 64 ++++++++++----------- library/tk.tcl | 96 ++++++++++++++++---------------- library/ttk/button.tcl | 2 +- library/ttk/entry.tcl | 30 +++++----- library/ttk/menubutton.tcl | 4 +- library/ttk/notebook.tcl | 18 +++--- tests/bind.test | 136 ++++++++++++++++++++++----------------------- 9 files changed, 177 insertions(+), 177 deletions(-) diff --git a/doc/event.n b/doc/event.n index 9ab48e5..3e084d7 100644 --- a/doc/event.n +++ b/doc/event.n @@ -568,7 +568,7 @@ Starting from the preceding example, if the following code is executed: .PP .CS bind Entry {} -\fBevent add\fR <> +\fBevent add\fR <> .CE .PP the behavior will change such in two ways. First, the shadowed diff --git a/doc/keysyms.n b/doc/keysyms.n index e0228a1..02e7e8e 100644 --- a/doc/keysyms.n +++ b/doc/keysyms.n @@ -12,7 +12,7 @@ keysyms \- keysyms recognized by Tk .SH DESCRIPTION .PP Tk recognizes many keysyms when specifying key bindings (e.g., -.QW "\fBbind\fR \fB. \fR" ). +.QW "\fBbind\fR \fB. <\fR\fIkeysym\fR\fB>\fR" ). The following list enumerates the keysyms that will be recognized by Tk. Note that not all keysyms will be valid on all platforms, and some keysyms are also available on diff --git a/library/console.tcl b/library/console.tcl index 355a43b..c94fe4b 100644 --- a/library/console.tcl +++ b/library/console.tcl @@ -416,13 +416,13 @@ proc ::tk::ConsoleBind {w} { bind Console $ev [bind Text $ev] } ## We really didn't want the newline insertion... - bind Console {} + bind Console {} ## ...or any Control-v binding (would block <>) - bind Console {} + bind Console {} # For the moment, transpose isn't enabled until the console # gets and overhaul of how it handles input -- hobbs - bind Console {} + bind Console {} # Ignore all Alt, Meta, and Control keypresses unless explicitly bound. # Otherwise, if a widget binding for one of these is defined, the @@ -434,42 +434,42 @@ proc ::tk::ConsoleBind {w} { bind Console {# nothing} foreach {ev key} { - <> - <> - <> - <> - - <> - <> - <> - <> - <> - <> - <> - <> - <> - - <> - <> - <> - <> - <> - <> - <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> + <> + <> + + <> + <> + <> + <> + <> + <> + <> } { event add $ev $key bind Console $key {} } if {[tk windowingsystem] eq "aqua"} { foreach {ev key} { - <> - <> + <> + <> } { event add $ev $key bind Console $key {} } if {$::tk::console::useFontchooser} { - bind Console [list ::tk::console::FontchooserToggle] + bind Console [list ::tk::console::FontchooserToggle] } } bind Console <> { @@ -629,22 +629,22 @@ proc ::tk::ConsoleBind {w} { ## ## Bindings for doing special things based on certain keys ## - bind PostConsole { + bind PostConsole { if {"\\" ne [%W get insert-2c]} { ::tk::console::MatchPair %W \( \) promptEnd } } - bind PostConsole { + bind PostConsole { if {"\\" ne [%W get insert-2c]} { ::tk::console::MatchPair %W \[ \] promptEnd } } - bind PostConsole { + bind PostConsole { if {"\\" ne [%W get insert-2c]} { ::tk::console::MatchPair %W \{ \} promptEnd } } - bind PostConsole { + bind PostConsole { if {"\\" ne [%W get insert-2c]} { ::tk::console::MatchQuote %W promptEnd } diff --git a/library/tk.tcl b/library/tk.tcl index d7fae1d..fcc987d 100644 --- a/library/tk.tcl +++ b/library/tk.tcl @@ -306,21 +306,21 @@ proc ::tk::EventMotifBindings {n1 dummy dummy} { set op add } - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> - event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> + event $op <> } #---------------------------------------------------------------------- @@ -368,18 +368,18 @@ if {![llength [info command tk_chooseDirectory]]} { switch -exact -- [tk windowingsystem] { "x11" { - event add <> - event add <> - event add <> + event add <> + event add <> + event add <> event add <> - event add <> - event add <> + event add <> + event add <> event add <> # On Darwin/Aqua, buttons from left to right are 1,3,2. On Darwin/X11 with recent # XQuartz as the X server, they are 1,2,3; other X servers may differ. - event add <> - event add <> + event add <> + event add <> event add <> event add <> event add <> @@ -419,16 +419,16 @@ switch -exact -- [tk windowingsystem] { set ::tk::AlwaysShowSelection 1 } "win32" { - event add <> - event add <> - event add <> + event add <> + event add <> + event add <> event add <> - event add <> - event add <> + event add <> + event add <> event add <> - event add <> - event add <> + event add <> + event add <> event add <> event add <> event add <> @@ -452,36 +452,36 @@ switch -exact -- [tk windowingsystem] { event add <> } "aqua" { - event add <> - event add <> - event add <> + event add <> + event add <> + event add <> event add <> event add <> event add <> # Official bindings # See http://support.apple.com/kb/HT1343 - event add <> + event add <> #Attach function keys not otherwise assigned to this event so they no-op - workaround for bug 0e6930dfe7 - event add <> - event add <> - event add <> - event add <> - event add <> - event add <> - event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> event add <> event add <> event add <> event add <> - event add <> - event add <> - event add <> - event add <> - event add <> - event add <> - event add <> - event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> + event add <> # Not official, but logical extensions of above. Also derived from # bindings present in MS Word on OSX. event add <> diff --git a/library/ttk/button.tcl b/library/ttk/button.tcl index 24065c2..1d29f57 100644 --- a/library/ttk/button.tcl +++ b/library/ttk/button.tcl @@ -20,7 +20,7 @@ namespace eval ttk::button {} bind TButton { %W instate !disabled {%W state active} } bind TButton { %W state !active } -bind TButton { ttk::button::activate %W } +bind TButton { ttk::button::activate %W } bind TButton <> { ttk::button::activate %W } bind TButton \ diff --git a/library/ttk/entry.tcl b/library/ttk/entry.tcl index 383eebd..471df28 100644 --- a/library/ttk/entry.tcl +++ b/library/ttk/entry.tcl @@ -40,20 +40,20 @@ option add *TEntry.cursor [ttk::cursor text] widgetDefault # # Removed the following standard Tk bindings: # -# , , -# , : +# , , +#