]> granicus.if.org Git - vim/commitdiff
updated for version 7.0118
authorBram Moolenaar <Bram@vim.org>
Thu, 28 Jul 2005 22:28:16 +0000 (22:28 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 28 Jul 2005 22:28:16 +0000 (22:28 +0000)
runtime/doc/index.txt
runtime/doc/message.txt
runtime/spell/fr/main.aap
src/message.c
src/normal.c
src/spell.c

index f48382a2de4237ed1dbe935ca2e0626495553ac9..6146ee3dec5188223ac7eff4feb162177d2571aa 100644 (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
@@ -684,6 +684,7 @@ tag         char          note action in Normal mode        ~
                                   of the current screen line
 |g8|           g8                 print hex value of bytes used in UTF-8
                                   character under the cursor
+|g<|           g<                 display previous command output
 |g?|           g?              2  Rot13 encoding operator
 |g?g?|         g??             2  Rot13 encode current line
 |g?g?|         g?g?            2  Rot13 encode current line
index 8b7e7b0c94e97a368b058a9aba228e489b8bd5f4..0784da01ca88cd5c52cd60037c9b2d8cceee1624 100644 (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
@@ -21,6 +21,14 @@ depends on the 'shortmess' option.
 
 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
 maintains the messages or the translations.  You can use this to contact the
 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
    key being used otherwise.
 -> 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
-   way as at the |more-prompt|.  Only works when 'compatible' is off and
+-> Press 'k', 'u', 'b' or 'g' to scroll back in the messages.  This works the
+   same way as at the |more-prompt|.  Only works when 'compatible' is off and
    'more' is on.
 -> Press <C-Y> to copy (yank) a modeless selection to the clipboard register.
 -> 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>.
 {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:
 - Set 'cmdheight' to 2 or higher.
 - Add flags to 'shortmess'.
@@ -760,10 +771,13 @@ Type                                      effect ~
      <CR> or <NL> or j or <Down>       one more line
      d                                 down a page (half 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 (*)
      u                                 up a page (half a screen) (*)
      b or <PageUp>                     back a screen (*)
+     g                                 back to the start (*)
 
      q, <Esc> or CTRL-C                        stop the listing
      :                                 stop the listing and enter a
index 787af731905619955cf70a5a21cf0085e8966279..ca160c5a584f73425d514fb444f422a5c7620ba5 100644 (file)
@@ -13,11 +13,11 @@ all: $(SPELLDIR)/fr.latin1.spl $(SPELLDIR)/fr.utf-8.spl ../README_fr.txt
 
 $(SPELLDIR)/fr.latin1.spl : $(VIM) $(FILES)
         :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)
         :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
         :copy $source $target
index 81c0a8e6e9207388e0d0275f0577ebe54047ddb8..ed12d8c3e78ba85138b0a8bf3c06f75fdb7a641e 100644 (file)
@@ -929,7 +929,8 @@ wait_return(redraw)
                c = K_IGNORE;
            }
 #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 */
                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 *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.
  */
@@ -2070,6 +2073,12 @@ store_sb_text(sb_str, s, attr, sb_col, finish)
 {
     msgchunk_T *mp;
 
+    if (do_clear_sb_text)
+    {
+       clear_sb_text();
+       do_clear_sb_text = FALSE;
+    }
+
     if (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;
 }
 
+/*
+ * 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.
  * Called when redrawing the screen.
@@ -2119,6 +2137,26 @@ clear_sb_text()
     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.
  */
@@ -2273,7 +2311,8 @@ msg_puts_printf(str, maxlen)
 /*
  * Show the more-prompt and handle the user response.
  * 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".
  */
     static int
@@ -2291,11 +2330,21 @@ do_more_prompt(typed_char)
     msgchunk_T *mp;
     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;
 #ifdef FEAT_MOUSE
     setmouse();
 #endif
-    msg_moremsg(FALSE);
+    if (typed_char == NUL)
+       msg_moremsg(FALSE);
     for (;;)
     {
        /*
@@ -2363,6 +2412,15 @@ do_more_prompt(typed_char)
            scroll = Rows - 1;
            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 */
 #ifdef FEAT_CON_DIALOG
            if (!confirm_msg_used)
@@ -2444,14 +2502,12 @@ do_more_prompt(typed_char)
                    if (scroll == -1 && screen_ins_lines(0, 0, 1,
                                                       (int)Rows, NULL) == OK)
                    {
-                       /* clear last line, display line at top */
-                       screen_fill((int)Rows - 1, (int)Rows, 0,
-                                                  (int)Columns, ' ', ' ', 0);
+                       /* display line at top */
                        (void)disp_sb_line(0, mp);
                    }
                    else
                    {
-                       /* redisplay */
+                       /* redisplay all lines */
                        screenclear();
                        for (i = 0; i < Rows - 1; ++i)
                            mp = disp_sb_line(i, mp);
@@ -2466,6 +2522,7 @@ do_more_prompt(typed_char)
                {
                    /* scroll up, display line at bottom */
                    msg_scroll_up();
+                   ++msg_scrolled;
                    screen_fill((int)Rows - 2, (int)Rows - 1, 0,
                                                   (int)Columns, ' ', ' ', 0);
                    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 */
+               screen_fill((int)Rows - 1, (int)Rows, 0,
+                                                  (int)Columns, ' ', ' ', 0);
                msg_moremsg(FALSE);
                continue;
            }
index 5f78f334d017e524e3a5e9146c1fe44f01daa4a0..6279a6b483a3141ec6329c87b5a6e9abc578920c 100644 (file)
@@ -7564,6 +7564,10 @@ nv_g_cmd(cap)
        break;
 #endif
 
+    case '<':
+       show_sb_text();
+       break;
+
     /*
      * "gg": Goto the first line in file.  With a count it goes to
      * that line number like for "G". -- webb
index 52b7b4aa608cd6d8866f9f703987828727138185..a66ff61b00dd59e5f680deb8c214fa400c3a3b86 100644 (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_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE)
 #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
  * that for ASCII, because we don't want to use 'casemap' here.  Otherwise use
  * 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 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 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 void free_blocks __ARGS((sblock_T *bl));
 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.
      */
-    aff = (afffile_T *)getroom(&spin->si_blocks, sizeof(afffile_T));
+    aff = (afffile_T *)getroom(&spin->si_blocks, sizeof(afffile_T), TRUE);
     if (aff == NULL)
        return NULL;
     hash_init(&aff->af_pref);
@@ -3368,7 +3371,7 @@ spell_read_aff(fname, spin)
 
                /* New affix letter. */
                cur_aff = (affheader_T *)getroom(&spin->si_blocks,
-                                                        sizeof(affheader_T));
+                                                  sizeof(affheader_T), TRUE);
                if (cur_aff == NULL)
                    break;
                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. */
                --aff_todo;
                aff_entry = (affentry_T *)getroom(&spin->si_blocks,
-                                                         sizeof(affentry_T));
+                                                   sizeof(affentry_T), TRUE);
                if (aff_entry == NULL)
                    break;
                aff_entry->ae_rare = rare;
@@ -4003,7 +4006,7 @@ get_pfxlist(affile, afflist, blp)
            }
        }
        if (round == 1 && cnt > 0)
-           res = getroom(blp, cnt + 1);
+           res = getroom(blp, cnt + 1, FALSE);
        if (res == NULL)
            break;
     }
@@ -4379,13 +4382,20 @@ spell_read_wordfile(fname, spin)
  * Returns NULL when out of memory.
  */
     static void *
-getroom(blp, len)
+getroom(blp, len, align)
     sblock_T   **blp;
-    size_t     len;        /* length needed */
+    size_t     len;            /* length needed */
+    int                align;          /* align for pointer */
 {
     char_u     *p;
     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)
     {
        /* Allocate a block of memory. This is not freed until much later. */
@@ -4413,7 +4423,7 @@ getroom_save(blp, s)
 {
     char_u     *sc;
 
-    sc = (char_u *)getroom(blp, STRLEN(s) + 1);
+    sc = (char_u *)getroom(blp, STRLEN(s) + 1, FALSE);
     if (sc != NULL)
        STRCPY(sc, s);
     return sc;
@@ -4444,7 +4454,7 @@ free_blocks(bl)
 wordtree_alloc(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)))
        {
            /* Allocate a new node. */
-           np = (wordnode_T *)getroom(blp, sizeof(wordnode_T));
+           np = (wordnode_T *)getroom(blp, sizeof(wordnode_T), TRUE);
            if (np == NULL)
                return FAIL;
            np->wn_byte = word[i];