⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motion.c

📁 aee是一种易使用的文本编辑器。你可以不用说明书来使用它。它提供终端接口和本地的X-windows接口。它的特性包括即弹的菜单
💻 C
📖 第 1 页 / 共 2 页
字号:
					draw_line((curr_buff->scr_vert-(curr_buff->scr_pos/COLS)), 0, curr_buff->curr_line->line, 1, curr_buff->curr_line);				}			}			else				curr_buff->scr_vert += curr_buff->scr_pos / COLS;			curr_buff->absolute_lin++;		}	}	else if (curr_buff->curr_line->next_line == NULL)	{		wmove(com_win, 0,0);		werase(com_win);		wprintw(com_win, right_err_msg);		wrefresh(com_win);		clr_cmd_line = TRUE;	}	curr_buff->abs_pos = tscr_pos;	wmove(curr_buff->win, curr_buff->scr_vert, curr_buff->scr_horz);}void adv_word()	/* advance to next word in text		*/{	if (curr_buff->position != curr_buff->curr_line->line_length)	{		while ((curr_buff->position < curr_buff->curr_line->line_length) && ((*curr_buff->pointer != ' ') && (*curr_buff->pointer != '\t')))			right(TRUE);		while ((curr_buff->position < curr_buff->curr_line->line_length) && ((*curr_buff->pointer == ' ') || (*curr_buff->pointer == '\t')))			right(TRUE);	}	else		right(TRUE);}void prev_word()	/* move to start of previous word in text	*/{	if (curr_buff->position != 1)	{		if ((curr_buff->position != 1) && ((curr_buff->pointer[-1] == ' ') || (curr_buff->pointer[-1] == '\t')))		{	/* if at the start of a word	*/			while ((curr_buff->position != 1) && ((*curr_buff->pointer != ' ') && (*curr_buff->pointer != '\t')))				left(TRUE);		}		while ((curr_buff->position != 1) && ((*curr_buff->pointer == ' ') || (*curr_buff->pointer == '\t')))			left(TRUE);		while ((curr_buff->position != 1) && ((*curr_buff->pointer != ' ') && (*curr_buff->pointer != '\t')))			left(TRUE);		if ((curr_buff->position != 1) && ((*curr_buff->pointer == ' ') || (*curr_buff->pointer == '\t')))			right(TRUE);	}	else		left(TRUE);}void move_rel(direction, lines)	/* move relative # of lines to current line */char *direction;int lines;{	struct text *tmp_paste;	struct text *tmp_line;	int i;	int j;	int m;	int slct_flag;	char *tmp;	if ((lines > curr_buff->last_line) && (mark_text))	{		if (*direction == 'u')		{			i = 0;			while ((i<lines) && (curr_buff->curr_line->prev_line != NULL))			{				fast_line("u");				i++;			}			while (curr_buff->position > 1)				fast_left();		}		else		{			for (i=0; (i < lines) && (curr_buff->curr_line->next_line != NULL); i++)				fast_line("d");		}		curr_buff->pointer = curr_buff->curr_line->line;		curr_buff->abs_pos = curr_buff->scr_pos = curr_buff->scr_horz = 0;		curr_buff->position = 1;		if (curr_buff->curr_line->next_line == NULL)			midscreen(curr_buff->last_line, curr_buff->position);		else			midscreen(curr_buff->last_line/2, curr_buff->position);	}	else if ((lines > curr_buff->last_line) && (!mark_text))	{		if (*direction == 'u')		{			i = 0;			if (curr_buff->curr_line->changed && curr_buff->journalling)				write_journal(curr_buff, curr_buff->curr_line);			while ((i<lines) && (curr_buff->curr_line->prev_line != NULL))			{				curr_buff->curr_line = curr_buff->curr_line->prev_line;				i++;			}			curr_buff->absolute_lin -= i;		}		else		{			i = 0;			if (curr_buff->curr_line->changed && curr_buff->journalling)				write_journal(curr_buff, curr_buff->curr_line);			while ((i<lines) && (curr_buff->curr_line->next_line != NULL))			{				curr_buff->curr_line = curr_buff->curr_line->next_line;				i++;			}			curr_buff->absolute_lin += i;		}		curr_buff->pointer = curr_buff->curr_line->line;		curr_buff->abs_pos = curr_buff->scr_pos = curr_buff->scr_horz = 0;		curr_buff->position = 1;		if (curr_buff->curr_line->next_line == NULL)			midscreen(curr_buff->last_line, curr_buff->position);		else			midscreen(curr_buff->last_line/2, curr_buff->position);	}	else	{		if (*direction == 'u')		{			while (curr_buff->position != 1)				left(TRUE);			curr_buff->abs_pos = curr_buff->scr_pos = curr_buff->scr_horz;			for (i = 0; (i < lines) && (curr_buff->curr_line->prev_line != NULL); i++)				up();			if ((curr_buff->last_line > 5) && ( curr_buff->scr_vert < 4))			{				tmp = curr_buff->pointer;				tmp_line = curr_buff->curr_line;				slct_flag = mark_text;				mark_text = FALSE;				tmp_paste = cpste_line;				i  = j = 0;				m = curr_buff->scr_vert;				while ((i < 5) && (tmp_line->prev_line != NULL))				{					tmp_line = tmp_line->prev_line;					i += tmp_line->vert_len;					j++;					m -=tmp_line->vert_len;				}				if ((curr_buff->scr_vert - m) > 5)					m = curr_buff->scr_vert - 5;				if (i > 5)					curr_buff->scr_vert = 5;				else					curr_buff->scr_vert = i;				i = -m;				wmove(curr_buff->win, 0,0);				for (value=0; value<i; value++)					winsertln(curr_buff->win);				i = curr_buff->scr_vert;				tmp_line = curr_buff->curr_line;				for (value=0; value<j; value++)				{					curr_buff->curr_line = curr_buff->curr_line->prev_line;					curr_buff->pointer = curr_buff->curr_line->line;					i -= curr_buff->curr_line->vert_len;					m += curr_buff->curr_line->vert_len;					if ((slct_flag) && (cpste_line->prev_line != NULL))					{						cpste_line = cpste_line->prev_line;						wstandout(curr_buff->win);					}					draw_line(i, 0, curr_buff->pointer, 1, curr_buff->curr_line);					wstandend(curr_buff->win);				}				curr_buff->curr_line = tmp_line;				cpste_line = tmp_paste;				curr_buff->pointer = tmp;				mark_text = slct_flag;				curr_buff->scr_horz = scanline(curr_buff->curr_line, curr_buff->position);			}		}		else		{			adv_line();			for (i = 1; (i < lines) && (curr_buff->curr_line->next_line != NULL); i++)				down();			if ((curr_buff->last_line > 10) && (curr_buff->scr_vert > (curr_buff->last_line - 5)) && (curr_buff->curr_line->next_line != NULL))			{				tmp = curr_buff->pointer;				tmp_line = curr_buff->curr_line;				slct_flag = mark_text;				mark_text = FALSE;				tmp_paste = cpste_line;				j = 1;				i = curr_buff->curr_line->vert_len - 1;				while ((i < 5) && (tmp_line->next_line != NULL))				{					tmp_line = tmp_line->next_line;					i += tmp_line->vert_len;					j++;				}				if (i > 5)					i = 5;				m = i;				i = (curr_buff->scr_vert + i ) - curr_buff->last_line;				if (i > 0)					curr_buff->scr_vert = curr_buff->last_line - m;				wmove(curr_buff->win, 0, 0);				for (value=0; value<i; value++)					wdeleteln(curr_buff->win);				tmp_line = curr_buff->curr_line;				i = curr_buff->scr_vert;				for (value=0; value<j; value++)				{					if ((slct_flag) && (cpste_line->next_line != NULL))					{						cpste_line = cpste_line->next_line;						wstandout(curr_buff->win);					}					draw_line(i, 0, curr_buff->pointer, 1, curr_buff->curr_line);					i += curr_buff->curr_line->vert_len;					wstandend(curr_buff->win);					curr_buff->curr_line = curr_buff->curr_line->next_line;					if (curr_buff->curr_line != NULL)						curr_buff->pointer = curr_buff->curr_line->line;				}				curr_buff->curr_line = tmp_line;				cpste_line = tmp_paste;				curr_buff->pointer = tmp;				mark_text = slct_flag;				curr_buff->scr_horz = 0;			}		}	}	wmove(curr_buff->win, curr_buff->scr_vert, curr_buff->scr_horz);}	void eol()		/* go to end of current line			*/{	int e;	if ((curr_buff->position == curr_buff->curr_line->line_length) && (curr_buff->curr_line->next_line != NULL))		right(TRUE);	e = (curr_buff->curr_line->vert_len - (scanline(curr_buff->curr_line, curr_buff->position) / COLS)) - 1;	if (mark_text)	{		while (curr_buff->position != curr_buff->curr_line->line_length)			fast_right();	}	else	{		curr_buff->position = curr_buff->curr_line->line_length;		curr_buff->abs_pos = curr_buff->scr_pos = scanline(curr_buff->curr_line, curr_buff->position);		curr_buff->scr_horz = curr_buff->scr_pos % COLS;	}	curr_buff->scr_vert += e;	if (curr_buff->scr_vert > curr_buff->last_line)	{		curr_buff->scr_vert = curr_buff->last_line;		midscreen(curr_buff->scr_vert, curr_buff->position);	}	else if (mark_text)		midscreen(curr_buff->scr_vert, curr_buff->position);	else	{		curr_buff->pointer = &(curr_buff->curr_line->line[curr_buff->position - 1]);		wmove(curr_buff->win, curr_buff->scr_vert, curr_buff->scr_horz);	}}void bol()			/* move to beginning of current line	*/{	int b;	b = scanline(curr_buff->curr_line, curr_buff->position) / COLS;	if (curr_buff->position != 1)	{		if (mark_text)		{			while (curr_buff->position != 1)				fast_left();		}		else		{			curr_buff->position = 1;			curr_buff->scr_horz = curr_buff->scr_pos = 0;			curr_buff->pointer = curr_buff->curr_line->line;		}		curr_buff->abs_pos = 0;		if ((curr_buff->scr_vert - b) < 0)		{			curr_buff->scr_vert = 0;			midscreen(0, curr_buff->position);		}		else		{			curr_buff->scr_vert -= b;			if (mark_text)				midscreen(curr_buff->scr_vert, curr_buff->position);			else				wmove(curr_buff->win, curr_buff->scr_vert, curr_buff->scr_horz);		}	}	else if (curr_buff->curr_line->prev_line != NULL)	{		curr_buff->abs_pos = 0;		up();	}}void adv_line()	/* advance to beginning of next line	*/{	curr_buff->abs_pos = 0;	if (curr_buff->position == 1)		down();	else	{		if (curr_buff->position < curr_buff->curr_line->line_length)			eol();		right(TRUE);	}}/* |	move cursor to the next page */void next_page(){	int counter = 0;	int vlength;	int tmp_vert = curr_buff->scr_vert;	struct text *tmp_line;	char done = FALSE;	if (curr_buff->curr_line->changed && curr_buff->journalling)		write_journal(curr_buff, curr_buff->curr_line);	vlength = 	   (curr_buff->curr_line->vert_len - (scanline(curr_buff->curr_line, curr_buff->position) / COLS)) - 1;	tmp_line = curr_buff->curr_line;	while ((curr_buff->curr_line->next_line != NULL) && (counter < curr_buff->last_line) && (!done))	{		if ((curr_buff->curr_line->vert_len + counter - vlength) <= curr_buff->last_line)		{			counter += curr_buff->curr_line->vert_len - vlength;			adv_line();		}		else			done = TRUE;		vlength = 0;	}	if (counter == 0)	{		if (curr_buff->curr_line->next_line != NULL)			adv_line();	}	if (curr_buff->curr_line->next_line != NULL)		midscreen(tmp_vert, 0);}/* |	move the cursor to the previous page */void prev_page(){	int counter = 0;	int vlength;	int tmp_vert = curr_buff->scr_vert;	struct text *tmp_line;	char done = FALSE;	if (curr_buff->curr_line->changed && curr_buff->journalling)		write_journal(curr_buff, curr_buff->curr_line);	vlength = (scanline(curr_buff->curr_line, curr_buff->position) / COLS);	tmp_line = curr_buff->curr_line;	while ((curr_buff->curr_line->prev_line != NULL) && (counter < curr_buff->last_line) && (!done))	{		if ((curr_buff->curr_line->vert_len + counter - vlength) <= curr_buff->last_line)		{			counter += curr_buff->curr_line->vert_len - vlength;			if (curr_buff->position != 1)				bol();			bol();		}		else			done = TRUE;		vlength = 0;	}	if (counter == 0)	{		if (curr_buff->curr_line->prev_line != NULL)		{			if (curr_buff->position != 1)				bol();			bol();		}	}	midscreen(tmp_vert, 0);}

⌨️ 快捷键说明

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