home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / jed098-4.zip / JED / LIB / BOOKMARK.SL < prev    next >
Text File  |  1997-02-01  |  2KB  |  74 lines

  1. % These routines user 'user_marks' to implement book marks.  A book mark 
  2. % may be placed in any buffer and returning to the mark may cause a change
  3. % of buffer.
  4.  
  5. % The only functions that are considered external are 'bkmrk_set_mark'
  6. % and 'bkmrk_goto_mark'.  These functions prompt for a a key '0' - '9'
  7. % or a SPACE.
  8.  
  9.  
  10. % user marks are of type 128, last mark for previous position
  11. variable Book_Marks = create_array (128, 10, 1);
  12. variable Bkmrk_Last_Position = create_user_mark ();
  13.  
  14. define bkmrk_get_or_set_mark (get)
  15. {
  16.    variable n;
  17.    variable prompt;
  18.    
  19.    prompt = "Bookmark number:";
  20.    if (get) prompt = "Bookmark number or SPACE for last position:";
  21.    
  22.    flush (prompt);
  23.    n = getkey ();
  24.    
  25.    if (get and (n == ' '))
  26.      return Bkmrk_Last_Position;
  27.    
  28.    n -= '0';
  29.    
  30.    if ((n < 0) or (n > 9)) error ("Number must be less than 10");
  31.    
  32.    if (get)        
  33.      return Book_Marks[n];
  34.    
  35.    Book_Marks[n] = create_user_mark ();
  36.    vmessage ("Bookmark %d set.", n, 1);
  37. }
  38.  
  39. define bkmrk_set_mark ()
  40. {
  41.    bkmrk_get_or_set_mark (0);
  42. }
  43.  
  44. define bkmrk_goto_mark ()
  45. {
  46.    variable mrk = bkmrk_get_or_set_mark (1);
  47.     
  48.    Bkmrk_Last_Position = create_user_mark ();
  49.  
  50.    sw2buf (user_mark_buffer (mrk));
  51.    !if (is_user_mark_in_narrow (mrk))
  52.      {
  53. #ifdef HAS_BLOCAL_VAR
  54.     variable fun;
  55.     ERROR_BLOCK
  56.       {
  57.          _clear_error ();
  58.          error ("Mark lies outside visible part of buffer.");
  59.       }
  60.     fun = get_blocal_var ("bookmark_narrow_hook");
  61.     mrk; eval (fun);
  62. #else
  63.     error ("Mark lies outside visible part of buffer.");
  64. #endif
  65.      }
  66.    
  67.  
  68.    goto_user_mark (mrk);
  69.    message ("done.");
  70. }
  71.  
  72.    
  73.    
  74.