macro.c

来自「nedit 是一款linux下的开发源码的功能强大的编辑器」· C语言 代码 · 共 1,752 行 · 第 1/5 页

C
1,752
字号
static const char CVSID[] = "$Id: macro.c,v 1.71.2.4 2003/11/07 17:27:02 edg Exp $";/********************************************************************************                                                                              ** macro.c -- Macro file processing, learn/replay, and built-in macro           **            subroutines                                                       **                                                                              ** Copyright (C) 1999 Mark Edel                                                 **                                                                              ** This is free software; you can redistribute it and/or modify it under the    ** terms of the GNU General Public License as published by the Free Software    ** Foundation; either version 2 of the License, or (at your option) any later   ** version.                                                                     **                                                                              ** This software is distributed in the hope that it will be useful, but WITHOUT ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        ** FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License        ** for more details.                                                            **                                                                              ** You should have received a copy of the GNU General Public License along with ** software; if not, write to the Free Software Foundation, Inc., 59 Temple     ** Place, Suite 330, Boston, MA  02111-1307 USA                                 **                                                                              ** Nirvana Text Editor                                                          ** April, 1997                                                                  **                                                                              ** Written by Mark Edel                                                         **                                                                              ********************************************************************************/#ifdef HAVE_CONFIG_H#include "../config.h"#endif#include "macro.h"#include "textBuf.h"#include "text.h"#include "nedit.h"#include "window.h"#include "preferences.h"#include "interpret.h"#include "parse.h"#include "search.h"#include "server.h"#include "shell.h"#include "smartIndent.h"#include "userCmds.h"#include "selection.h"#include "rbTree.h"#include "tags.h"#include "calltips.h"#include "../util/DialogF.h"#include "../util/misc.h"#include "../util/fileUtils.h"#include "../util/utils.h"#include "highlight.h"#include "highlightData.h"#include "rangeset.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <errno.h>#ifdef VMS#include "../util/VMSparam.h"#include <types.h>#include <stat.h>#include <unixio.h>#else#include <sys/types.h>#include <sys/stat.h>#ifndef __MVS__#include <sys/param.h>#endif#include <fcntl.h>#endif /*VMS*/#include <X11/Intrinsic.h>#include <Xm/Xm.h>#include <Xm/CutPaste.h>#include <Xm/Form.h>#include <Xm/RowColumn.h>#include <Xm/LabelG.h>#include <Xm/List.h>#include <Xm/ToggleB.h>#include <Xm/DialogS.h>#include <Xm/MessageB.h>#include <Xm/SelectioB.h>#include <Xm/PushB.h>#include <Xm/Text.h>#include <Xm/Separator.h>#ifdef HAVE_DEBUG_H#include "../debug.h"#endif/* Maximum number of actions in a macro and args in    an action (to simplify the reader) */#define MAX_MACRO_ACTIONS 1024#define MAX_ACTION_ARGS 40/* How long to wait (msec) before putting up Macro Command banner */#define BANNER_WAIT_TIME 6000/* The following definitions cause an exit from the macro with a message *//* added if (1) to remove compiler warnings on solaris */#define M_FAILURE(s)  do { *errMsg = s; if (1) return False; } while (0)#define M_STR_ALLOC_ASSERT(xDV) do { if (xDV.tag == STRING_TAG && !xDV.val.str) { *errMsg = "Failed to allocate value: %s"; return(False); } } while (0)#define M_ARRAY_INSERT_FAILURE() M_FAILURE("array element failed to insert: %s")/* Data attached to window during shell command execution with   information for controling and communicating with the process */typedef struct {    XtIntervalId bannerTimeoutID;    XtWorkProcId continueWorkProcID;    char bannerIsUp;    char closeOnCompletion;    Program *program;    RestartData *context;    Widget dialog;} macroCmdInfo;/* Widgets and global data for Repeat dialog */typedef struct {    WindowInfo *forWindow;    char *lastCommand;    Widget shell, repeatText, lastCmdToggle;    Widget inSelToggle, toEndToggle;} repeatDialog;static void cancelLearn(void);static void runMacro(WindowInfo *window, Program *prog);static void finishMacroCmdExecution(WindowInfo *window);static void repeatOKCB(Widget w, XtPointer clientData, XtPointer callData);static void repeatApplyCB(Widget w, XtPointer clientData, XtPointer callData);static int doRepeatDialogAction(repeatDialog *rd, XEvent *event);static void repeatCancelCB(Widget w, XtPointer clientData, XtPointer callData);static void repeatDestroyCB(Widget w, XtPointer clientData, XtPointer callData);static void learnActionHook(Widget w, XtPointer clientData, String actionName,	XEvent *event, String *params, Cardinal *numParams);static void lastActionHook(Widget w, XtPointer clientData, String actionName,	XEvent *event, String *params, Cardinal *numParams);static char *actionToString(Widget w, char *actionName, XEvent *event,	String *params, Cardinal numParams);static int isMouseAction(const char *action);static int isRedundantAction(const char *action);static int isIgnoredAction(const char *action);static int readCheckMacroString(Widget dialogParent, char *string,	WindowInfo *runWindow, const char *errIn, char **errPos);static void bannerTimeoutProc(XtPointer clientData, XtIntervalId *id);static Boolean continueWorkProc(XtPointer clientData);static int escapeStringChars(char *fromString, char *toString);static int escapedStringLength(char *string);static int lengthMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int minMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int maxMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int focusWindowMS(WindowInfo *window, DataValue *argList, int nArgs,      DataValue *result, char **errMsg);static int getRangeMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int getCharacterMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int replaceRangeMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int replaceSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int getSelectionMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int validNumberMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int replaceInStringMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int replaceSubstringMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int readFileMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int writeFileMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int appendFileMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int writeOrAppendFile(int append, WindowInfo *window,    	DataValue *argList, int nArgs, DataValue *result, char **errMsg);static int substringMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int toupperMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int tolowerMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int stringToClipboardMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int clipboardToStringMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int searchMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int searchStringMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int setCursorPosMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int beepMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectRectangleMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int tPrintMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int getenvMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int shellCmdMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int dialogMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static void dialogBtnCB(Widget w, XtPointer clientData, XtPointer callData);static void dialogCloseCB(Widget w, XtPointer clientData, XtPointer callData);static int stringDialogMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static void stringDialogBtnCB(Widget w, XtPointer clientData,    	XtPointer callData);static void stringDialogCloseCB(Widget w, XtPointer clientData,    	XtPointer callData);static int calltipMS(WindowInfo *window, DataValue *argList, int nArgs,       DataValue *result, char **errMsg);static int killCalltipMS(WindowInfo *window, DataValue *argList, int nArgs,       DataValue *result, char **errMsg);/* T Balinski */static int listDialogMS(WindowInfo *window, DataValue *argList, int nArgs,	DataValue *result, char **errMsg);static void listDialogBtnCB(Widget w, XtPointer clientData,	XtPointer callData);static void listDialogCloseCB(Widget w, XtPointer clientData,	XtPointer callData);/* T Balinski End */static int stringCompareMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int splitMS(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);/* DISASBLED for 5.4 static int setBacklightStringMS(WindowInfo *window, DataValue *argList,	int nArgs, DataValue *result, char **errMsg);*/static int cursorMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int lineMV(WindowInfo *window, DataValue *argList, int nArgs,        DataValue *result, char **errMsg);static int columnMV(WindowInfo *window, DataValue *argList, int nArgs,        DataValue *result, char **errMsg);static int fileNameMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int filePathMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int lengthMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectionStartMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectionEndMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectionLeftMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int selectionRightMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int statisticsLineMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int incSearchLineMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int showLineNumbersMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int autoIndentMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int wrapTextMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int highlightSyntaxMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int makeBackupCopyMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int incBackupMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int showMatchingMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int overTypeModeMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int readOnlyMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int lockedMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int fileFormatMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int fontNameMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int fontNameItalicMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int fontNameBoldMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int fontNameBoldItalicMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int subscriptSepMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int minFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int maxFontWidthMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int wrapMarginMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int topLineMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int numDisplayLinesMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int displayWidthMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int activePaneMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int nPanesMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int emptyArrayMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int serverNameMV(WindowInfo *window, DataValue *argList, int nArgs,    DataValue *result, char **errMsg);static int tabDistMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int emTabDistMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int useTabsMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int modifiedMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int languageModeMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int calltipIDMV(WindowInfo *window, DataValue *argList, int nArgs,    	DataValue *result, char **errMsg);static int readSearchArgs(DataValue *argList, int nArgs, int*searchDirection,	int *searchType, int *wrap, char **errMsg);static int wrongNArgsErr(char **errMsg);static int tooFewArgsErr(char **errMsg);static int strCaseCmp(char *str1, char *str2);static int readIntArg(DataValue dv, int *result, char **errMsg);static int readStringArg(DataValue dv, char **result, char *stringStorage,    	char **errMsg);/* DISABLED FOR 5.4static int backlightStringMV(WindowInfo *window, DataValue *argList,	int nArgs, DataValue *result, char **errMsg);*/static int rangesetListMV(WindowInfo *window, DataValue *argList,	int nArgs, DataValue *result, char **errMsg);static int rangesetCreateMS(WindowInfo *window, DataValue *argList, int nArgs,      DataValue *result, char **errMsg);static int rangesetDestroyMS(WindowInfo *window, DataValue *argList, int nArgs,      DataValue *result, char **errMsg);static int rangesetGetByNameMS(WindowInfo *window, DataValue *argList, int nArgs,      DataValue *result, char **errMsg);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?