0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

updated for version 7.0118

This commit is contained in:
Bram Moolenaar
2005-07-28 22:28:16 +00:00
parent 87e25fdf80
commit cfc7d63267
6 changed files with 112 additions and 24 deletions

View File

@@ -1,4 +1,4 @@
*index.txt* For Vim version 7.0aa. Last change: 2005 Jul 27 *index.txt* For Vim version 7.0aa. Last change: 2005 Jul 28
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -684,6 +684,7 @@ tag char note action in Normal mode ~
of the current screen line of the current screen line
|g8| g8 print hex value of bytes used in UTF-8 |g8| g8 print hex value of bytes used in UTF-8
character under the cursor character under the cursor
|g<| g< display previous command output
|g?| g? 2 Rot13 encoding operator |g?| g? 2 Rot13 encoding operator
|g?g?| g?? 2 Rot13 encode current line |g?g?| g?? 2 Rot13 encode current line
|g?g?| g?g? 2 Rot13 encode current line |g?g?| g?g? 2 Rot13 encode current line

View File

@@ -1,4 +1,4 @@
*message.txt* For Vim version 7.0aa. Last change: 2005 Jul 27 *message.txt* For Vim version 7.0aa. Last change: 2005 Jul 28
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@@ -21,6 +21,14 @@ depends on the 'shortmess' option.
The number of remembered messages is fixed at 20. The number of remembered messages is fixed at 20.
*g<*
The "g<" command can be used to see the last page of previous command output.
This is especially useful if you accidentally typed <Space> at the hit-return
prompt.
Note: when you stopped the output with "q" at the more prompt only up to that
point will be displayed.
The previous command output is cleared when another command produces output.
If you are using translated messages, the first printed line tells who If you are using translated messages, the first printed line tells who
maintains the messages or the translations. You can use this to contact the maintains the messages or the translations. You can use this to contact the
maintainer when you spot a mistake. maintainer when you spot a mistake.
@@ -728,8 +736,8 @@ and the screen is about to be redrawn:
-> Press <Enter> or <Space> to redraw the screen and continue, without that -> Press <Enter> or <Space> to redraw the screen and continue, without that
key being used otherwise. key being used otherwise.
-> Press ':' or any other Normal mode command character to start that command. -> Press ':' or any other Normal mode command character to start that command.
-> Press 'k', 'u' or 'b' to scroll back in the messages. This works the same -> Press 'k', 'u', 'b' or 'g' to scroll back in the messages. This works the
way as at the |more-prompt|. Only works when 'compatible' is off and same way as at the |more-prompt|. Only works when 'compatible' is off and
'more' is on. 'more' is on.
-> Press <C-Y> to copy (yank) a modeless selection to the clipboard register. -> Press <C-Y> to copy (yank) a modeless selection to the clipboard register.
-> Use a menu. The characters defined for Cmdline-mode are used. -> Use a menu. The characters defined for Cmdline-mode are used.
@@ -739,6 +747,9 @@ and the screen is about to be redrawn:
pressing <Space>. pressing <Space>.
{Vi: only ":" commands are interpreted} {Vi: only ":" commands are interpreted}
If you accidentally hit <Enter> or <Space> and you want to see the displayed
text then use |g<|. This only works when 'more' is set.
To reduce the number of hit-enter prompts: To reduce the number of hit-enter prompts:
- Set 'cmdheight' to 2 or higher. - Set 'cmdheight' to 2 or higher.
- Add flags to 'shortmess'. - Add flags to 'shortmess'.
@@ -760,10 +771,13 @@ Type effect ~
<CR> or <NL> or j or <Down> one more line <CR> or <NL> or j or <Down> one more line
d down a page (half a screen) d down a page (half a screen)
<Space> or <PageDown> down a screen <Space> or <PageDown> down a screen
G down all the way, until the hit-enter
prompt
<BS> or k or <Up> one line back (*) <BS> or k or <Up> one line back (*)
u up a page (half a screen) (*) u up a page (half a screen) (*)
b or <PageUp> back a screen (*) b or <PageUp> back a screen (*)
g back to the start (*)
q, <Esc> or CTRL-C stop the listing q, <Esc> or CTRL-C stop the listing
: stop the listing and enter a : stop the listing and enter a

View File

@@ -13,11 +13,11 @@ all: $(SPELLDIR)/fr.latin1.spl $(SPELLDIR)/fr.utf-8.spl ../README_fr.txt
$(SPELLDIR)/fr.latin1.spl : $(VIM) $(FILES) $(SPELLDIR)/fr.latin1.spl : $(VIM) $(FILES)
:sys env LANG=fr_FR.ISO8859-1 :sys env LANG=fr_FR.ISO8859-1
$(VIM) -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q $(VIM) -u NONE -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q
$(SPELLDIR)/fr.utf-8.spl : $(VIM) $(FILES) $(SPELLDIR)/fr.utf-8.spl : $(VIM) $(FILES)
:sys env LANG=fr_FR.UTF-8 :sys env LANG=fr_FR.UTF-8
$(VIM) -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q $(VIM) -u NONE -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q
../README_fr.txt : README_fr_FR.txt ../README_fr.txt : README_fr_FR.txt
:copy $source $target :copy $source $target

View File

@@ -929,7 +929,8 @@ wait_return(redraw)
c = K_IGNORE; c = K_IGNORE;
} }
#endif #endif
if (p_more && !p_cp && (c == 'b' || c == 'k' || c == 'u')) if (p_more && !p_cp && (c == 'b' || c == 'k' || c == 'u'
|| c == 'g' || c == K_UP))
{ {
/* scroll back to show older messages */ /* scroll back to show older messages */
do_more_prompt(c); do_more_prompt(c);
@@ -2057,6 +2058,8 @@ static msgchunk_T *last_msgchunk = NULL; /* last displayed text */
static msgchunk_T *msg_sb_start __ARGS((msgchunk_T *mps)); static msgchunk_T *msg_sb_start __ARGS((msgchunk_T *mps));
static msgchunk_T *disp_sb_line __ARGS((int row, msgchunk_T *smp)); static msgchunk_T *disp_sb_line __ARGS((int row, msgchunk_T *smp));
static int do_clear_sb_text = FALSE; /* clear text on next msg */
/* /*
* Store part of a printed message for displaying when scrolling back. * Store part of a printed message for displaying when scrolling back.
*/ */
@@ -2070,6 +2073,12 @@ store_sb_text(sb_str, s, attr, sb_col, finish)
{ {
msgchunk_T *mp; msgchunk_T *mp;
if (do_clear_sb_text)
{
clear_sb_text();
do_clear_sb_text = FALSE;
}
if (s > *sb_str) if (s > *sb_str)
{ {
mp = (msgchunk_T *)alloc((int)(sizeof(msgchunk_T) + (s - *sb_str))); mp = (msgchunk_T *)alloc((int)(sizeof(msgchunk_T) + (s - *sb_str)));
@@ -2101,6 +2110,15 @@ store_sb_text(sb_str, s, attr, sb_col, finish)
*sb_col = 0; *sb_col = 0;
} }
/*
* Finished showing messages, clear the scroll-back text on the next message.
*/
void
may_clear_sb_text()
{
do_clear_sb_text = TRUE;
}
/* /*
* Clear any text remembered for scrolling back. * Clear any text remembered for scrolling back.
* Called when redrawing the screen. * Called when redrawing the screen.
@@ -2119,6 +2137,26 @@ clear_sb_text()
last_msgchunk = NULL; last_msgchunk = NULL;
} }
/*
* "g<" command.
*/
void
show_sb_text()
{
msgchunk_T *mp;
/* Only show somethign if there is more than one line, otherwise it looks
* weird, typing a command without output results in one line. */
mp = msg_sb_start(last_msgchunk);
if (mp == NULL || mp->sb_prev == NULL)
vim_beep();
else
{
do_more_prompt('G');
wait_return(FALSE);
}
}
/* /*
* Move to the start of screen line in already displayed text. * Move to the start of screen line in already displayed text.
*/ */
@@ -2273,7 +2311,8 @@ msg_puts_printf(str, maxlen)
/* /*
* Show the more-prompt and handle the user response. * Show the more-prompt and handle the user response.
* This takes care of scrolling back and displaying previously displayed text. * This takes care of scrolling back and displaying previously displayed text.
* When at hit-enter prompt "typed_char" is the already typed character. * When at hit-enter prompt "typed_char" is the already typed character,
* otherwise it's NUL.
* Returns TRUE when jumping ahead to "confirm_msg_tail". * Returns TRUE when jumping ahead to "confirm_msg_tail".
*/ */
static int static int
@@ -2291,11 +2330,21 @@ do_more_prompt(typed_char)
msgchunk_T *mp; msgchunk_T *mp;
int i; int i;
if (typed_char == 'G')
{
/* "g<": Find first line on the last page. */
mp_last = msg_sb_start(last_msgchunk);
for (i = 0; i < Rows - 2 && mp_last != NULL
&& mp_last->sb_prev != NULL; ++i)
mp_last = msg_sb_start(mp_last->sb_prev);
}
State = ASKMORE; State = ASKMORE;
#ifdef FEAT_MOUSE #ifdef FEAT_MOUSE
setmouse(); setmouse();
#endif #endif
msg_moremsg(FALSE); if (typed_char == NUL)
msg_moremsg(FALSE);
for (;;) for (;;)
{ {
/* /*
@@ -2363,6 +2412,15 @@ do_more_prompt(typed_char)
scroll = Rows - 1; scroll = Rows - 1;
break; break;
case 'g': /* all the way back to the start */
scroll = -999999;
break;
case 'G': /* all the way to the end */
scroll = 999999;
lines_left = 999999;
break;
case ':': /* start new command line */ case ':': /* start new command line */
#ifdef FEAT_CON_DIALOG #ifdef FEAT_CON_DIALOG
if (!confirm_msg_used) if (!confirm_msg_used)
@@ -2444,14 +2502,12 @@ do_more_prompt(typed_char)
if (scroll == -1 && screen_ins_lines(0, 0, 1, if (scroll == -1 && screen_ins_lines(0, 0, 1,
(int)Rows, NULL) == OK) (int)Rows, NULL) == OK)
{ {
/* clear last line, display line at top */ /* display line at top */
screen_fill((int)Rows - 1, (int)Rows, 0,
(int)Columns, ' ', ' ', 0);
(void)disp_sb_line(0, mp); (void)disp_sb_line(0, mp);
} }
else else
{ {
/* redisplay */ /* redisplay all lines */
screenclear(); screenclear();
for (i = 0; i < Rows - 1; ++i) for (i = 0; i < Rows - 1; ++i)
mp = disp_sb_line(i, mp); mp = disp_sb_line(i, mp);
@@ -2466,6 +2522,7 @@ do_more_prompt(typed_char)
{ {
/* scroll up, display line at bottom */ /* scroll up, display line at bottom */
msg_scroll_up(); msg_scroll_up();
++msg_scrolled;
screen_fill((int)Rows - 2, (int)Rows - 1, 0, screen_fill((int)Rows - 2, (int)Rows - 1, 0,
(int)Columns, ' ', ' ', 0); (int)Columns, ' ', ' ', 0);
mp_last = disp_sb_line((int)Rows - 2, mp_last); mp_last = disp_sb_line((int)Rows - 2, mp_last);
@@ -2473,9 +2530,11 @@ do_more_prompt(typed_char)
} }
} }
if (scroll <= 0) if (scroll < 0 || (scroll == 0 && mp_last != NULL))
{ {
/* displayed the requested text, more prompt again */ /* displayed the requested text, more prompt again */
screen_fill((int)Rows - 1, (int)Rows, 0,
(int)Columns, ' ', ' ', 0);
msg_moremsg(FALSE); msg_moremsg(FALSE);
continue; continue;
} }

View File

@@ -7564,6 +7564,10 @@ nv_g_cmd(cap)
break; break;
#endif #endif
case '<':
show_sb_text();
break;
/* /*
* "gg": Goto the first line in file. With a count it goes to * "gg": Goto the first line in file. With a count it goes to
* that line number like for "G". -- webb * that line number like for "G". -- webb

View File

@@ -672,6 +672,9 @@ static linenr_T apply_prefixes __ARGS((slang_T *slang, char_u *word, int round,
# define SPELL_TOUPPER(c) ((c) < 256 ? spelltab.st_upper[c] : (c)) # define SPELL_TOUPPER(c) ((c) < 256 ? spelltab.st_upper[c] : (c))
# define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE) # define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE)
#else #else
# if defined(HAVE_WCHAR_H)
# include <wchar.h> /* for towupper() and towlower() */
# endif
/* Multi-byte implementation. For Unicode we can call utf_*(), but don't do /* Multi-byte implementation. For Unicode we can call utf_*(), but don't do
* that for ASCII, because we don't want to use 'casemap' here. Otherwise use * that for ASCII, because we don't want to use 'casemap' here. Otherwise use
* the "w" library function for characters above 255 if available. */ * the "w" library function for characters above 255 if available. */
@@ -3147,7 +3150,7 @@ static int spell_read_dic __ARGS((char_u *fname, spellinfo_T *spin, afffile_T *a
static char_u *get_pfxlist __ARGS((afffile_T *affile, char_u *afflist, sblock_T **blp)); static char_u *get_pfxlist __ARGS((afffile_T *affile, char_u *afflist, sblock_T **blp));
static int store_aff_word __ARGS((char_u *word, spellinfo_T *spin, char_u *afflist, afffile_T *affile, hashtab_T *ht, hashtab_T *xht, int comb, int flags, char_u *pfxlist)); static int store_aff_word __ARGS((char_u *word, spellinfo_T *spin, char_u *afflist, afffile_T *affile, hashtab_T *ht, hashtab_T *xht, int comb, int flags, char_u *pfxlist));
static int spell_read_wordfile __ARGS((char_u *fname, spellinfo_T *spin)); static int spell_read_wordfile __ARGS((char_u *fname, spellinfo_T *spin));
static void *getroom __ARGS((sblock_T **blp, size_t len)); static void *getroom __ARGS((sblock_T **blp, size_t len, int align));
static char_u *getroom_save __ARGS((sblock_T **blp, char_u *s)); static char_u *getroom_save __ARGS((sblock_T **blp, char_u *s));
static void free_blocks __ARGS((sblock_T *bl)); static void free_blocks __ARGS((sblock_T *bl));
static wordnode_T *wordtree_alloc __ARGS((sblock_T **blp)); static wordnode_T *wordtree_alloc __ARGS((sblock_T **blp));
@@ -3240,7 +3243,7 @@ spell_read_aff(fname, spin)
/* /*
* Allocate and init the afffile_T structure. * Allocate and init the afffile_T structure.
*/ */
aff = (afffile_T *)getroom(&spin->si_blocks, sizeof(afffile_T)); aff = (afffile_T *)getroom(&spin->si_blocks, sizeof(afffile_T), TRUE);
if (aff == NULL) if (aff == NULL)
return NULL; return NULL;
hash_init(&aff->af_pref); hash_init(&aff->af_pref);
@@ -3368,7 +3371,7 @@ spell_read_aff(fname, spin)
/* New affix letter. */ /* New affix letter. */
cur_aff = (affheader_T *)getroom(&spin->si_blocks, cur_aff = (affheader_T *)getroom(&spin->si_blocks,
sizeof(affheader_T)); sizeof(affheader_T), TRUE);
if (cur_aff == NULL) if (cur_aff == NULL)
break; break;
cur_aff->ah_key[0] = *items[1]; /* TODO: multi-byte? */ cur_aff->ah_key[0] = *items[1]; /* TODO: multi-byte? */
@@ -3428,7 +3431,7 @@ spell_read_aff(fname, spin)
/* New item for an affix letter. */ /* New item for an affix letter. */
--aff_todo; --aff_todo;
aff_entry = (affentry_T *)getroom(&spin->si_blocks, aff_entry = (affentry_T *)getroom(&spin->si_blocks,
sizeof(affentry_T)); sizeof(affentry_T), TRUE);
if (aff_entry == NULL) if (aff_entry == NULL)
break; break;
aff_entry->ae_rare = rare; aff_entry->ae_rare = rare;
@@ -4003,7 +4006,7 @@ get_pfxlist(affile, afflist, blp)
} }
} }
if (round == 1 && cnt > 0) if (round == 1 && cnt > 0)
res = getroom(blp, cnt + 1); res = getroom(blp, cnt + 1, FALSE);
if (res == NULL) if (res == NULL)
break; break;
} }
@@ -4379,13 +4382,20 @@ spell_read_wordfile(fname, spin)
* Returns NULL when out of memory. * Returns NULL when out of memory.
*/ */
static void * static void *
getroom(blp, len) getroom(blp, len, align)
sblock_T **blp; sblock_T **blp;
size_t len; /* length needed */ size_t len; /* length needed */
int align; /* align for pointer */
{ {
char_u *p; char_u *p;
sblock_T *bl = *blp; sblock_T *bl = *blp;
if (align && bl != NULL)
/* Round size up for alignment. On some systems structures need to be
* aligned to the size of a pointer (e.g., SPARC). */
bl->sb_used = (bl->sb_used + sizeof(char *) - 1)
& ~(sizeof(char *) - 1);
if (bl == NULL || bl->sb_used + len > SBLOCKSIZE) if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
{ {
/* Allocate a block of memory. This is not freed until much later. */ /* Allocate a block of memory. This is not freed until much later. */
@@ -4413,7 +4423,7 @@ getroom_save(blp, s)
{ {
char_u *sc; char_u *sc;
sc = (char_u *)getroom(blp, STRLEN(s) + 1); sc = (char_u *)getroom(blp, STRLEN(s) + 1, FALSE);
if (sc != NULL) if (sc != NULL)
STRCPY(sc, s); STRCPY(sc, s);
return sc; return sc;
@@ -4444,7 +4454,7 @@ free_blocks(bl)
wordtree_alloc(blp) wordtree_alloc(blp)
sblock_T **blp; sblock_T **blp;
{ {
return (wordnode_T *)getroom(blp, sizeof(wordnode_T)); return (wordnode_T *)getroom(blp, sizeof(wordnode_T), TRUE);
} }
/* /*
@@ -4541,7 +4551,7 @@ tree_add_word(word, root, flags, region, prefixID, blp)
|| node->wn_prefixID != prefixID))) || node->wn_prefixID != prefixID)))
{ {
/* Allocate a new node. */ /* Allocate a new node. */
np = (wordnode_T *)getroom(blp, sizeof(wordnode_T)); np = (wordnode_T *)getroom(blp, sizeof(wordnode_T), TRUE);
if (np == NULL) if (np == NULL)
return FAIL; return FAIL;
np->wn_byte = word[i]; np->wn_byte = word[i];