1. 06 Aug, 2017 1 commit
  2. 31 Jul, 2017 1 commit
  3. 24 Jul, 2017 1 commit
    • David Lawrence Ramsey's avatar
      weeding: drop the forreal parameter from place_the_cursor() · 381a386b
      David Lawrence Ramsey authored
      Commit 28beb3f9 added the 'forreal' parameter to prevent spotlight() from
      placing the cursor wrongly due to an invalid placewewant.  However, since
      the variable-width softwrap overhaul (specifically, since commit 8490f4ac),
      place_the_cursor() no longer checks placewewant, so the parameter is no
      longer needed.
      
      Furthermore, dropping 'forreal' and thus always setting current_y won't
      affect the operation of spotlight(), since the only functions that use
      spotlight() (do_replace_loop() and do_int_spell_fix()) both call
      edit_refresh() beforehand, which means that current_y will already
      have been set to the value it will be set to again.
      381a386b
  4. 23 Jul, 2017 1 commit
    • David Lawrence Ramsey's avatar
      tweaks: set the target row for smooth scrolling more directly · 6f9bb53b
      David Lawrence Ramsey authored
      The function place_the_cursor() assumes that the viewport is up to date,
      i.e., that current is in range of edittop.  When uncutting or inserting,
      however, place_the_cursor() gets called on the out-of-date viewport
      first, and then a screen refresh is scheduled (which would put the
      viewport up to date).  This is backwards: the refresh should come before
      the cursor placement, and the only reason it works anyway is because the
      cap on the number of chunks to move backward papers over the problem by
      keeping current_y in screen range regardless.
      
      Fix this properly by simply setting current_y to the bottom row of the
      screen instead of calling place_the_cursor().  This value of current_y
      is only ever used when in smooth scrolling mode and the insertion (or
      paste) pushed the cursor offscreen.  In other situations, this value is
      overridden when place_the_cursor() gets called after a screen refresh.
      
      After that fix, the cap on the number of chunks to move backward is no
      longer needed.
      6f9bb53b
  5. 20 Jul, 2017 2 commits
  6. 19 Jul, 2017 2 commits
  7. 16 Jul, 2017 1 commit
    • Benno Schulenberg's avatar
      suspension: prevent entering an invalid byte upon resume (with S-Lang) · 43a5c876
      Benno Schulenberg authored
      For some reason, when returning from suspension, SLang will produce
      either a clipped error code (0xFF instead of 0xFFFF, when returning
      from an externally induced suspension), or it will clip the code of
      first subsequent keystroke to a single byte (when returning from a
      normal, in-editor suspension: ^Z).
      
      Side-step this by ignoring the clipped error code, and by using an
      undefined control code as the first fake keystroke.  Ignoring the
      clipped error code is not possible when using a single-byte locale,
      otherwise the user would not be able to type the character with
      code 0xFF (although it could still be entered with Esc Esc 255).
      
      This fixes https://savannah.gnu.org/bugs/?51477.
      43a5c876
  8. 15 Jul, 2017 1 commit
  9. 10 Jul, 2017 1 commit
  10. 09 Jul, 2017 1 commit
  11. 07 Jul, 2017 10 commits
    • Benno Schulenberg's avatar
      09723b07
    • David Lawrence Ramsey's avatar
      softwrap: don't flag EOL too early, nor break continuous text too early · dd667ce9
      David Lawrence Ramsey authored
      This should eliminate all cases where the newline is pushed off the edge
      of the screen in non-atblanks softwrap mode.  Also, it allows the use of
      the last column of the screen in atblanks softwrap mode when a piece of
      text does not contain any blanks.
      
      This avoids the unreachable end-of-line reported on the mailing list:
      http://lists.gnu.org/archive/html/nano-devel/2017-06/msg00011.html.
      dd667ce9
    • Benno Schulenberg's avatar
      tweaks: elide unneeded calls of get_last_chunk_leftedge() · 482fb352
      Benno Schulenberg authored
      And then elide the function entirely as it's called just once.
      482fb352
    • Benno Schulenberg's avatar
      8766e7bd
    • David Lawrence Ramsey's avatar
      new feature: allow lines to be softwrapped at whitespace · bb4d0d54
      David Lawrence Ramsey authored
      Extend get_softwrap_breakpoint() to break softwrapped lines on
      whitespace when a flag is set.  This flag is controlled by the new
      rcfile option "atblanks".  The '>' characters marking two-column
      characters at the edge of the screen are disabled when it's on.
      
      If get_softwrap_breakpoint() can't find whitespace in screen range, it
      will break the line on the screen edge.  (In this case, a blank can be
      on the last column of the screen, but text can't, so that a blank on the
      last column doesn't become invisible and possibly break the display.)
      
      This fulfills https://savannah.gnu.org/bugs/index.php?49959
      
      .
      Requested-by: default avatarNicholas Boel <axxisd@gmail.com>
      bb4d0d54
    • David Lawrence Ramsey's avatar
      replacing: make spotlight() account for varying chunk width · aa04ad4f
      David Lawrence Ramsey authored
      spotlight() now displays softwrapped lines chunk by chunk instead of all
      at once.  Since softwrapped lines are no longer of constant width, the
      latter approach would fail if softwrapping breaks the spotlighted text.
      
      Instead of taking a string, spotlight() now takes the starting and ending
      columns of that string.  Also, its handling of softwrapped lines is now
      split off into a separate function, spotlight_softwrapped().
      aa04ad4f
    • David Lawrence Ramsey's avatar
      softwrap: in do_mouse(), keep the cursor before a softwrap breakpoint · 4d7735c8
      David Lawrence Ramsey authored
      Add the new function actual_last_column() to accomplish this.
      4d7735c8
    • David Lawrence Ramsey's avatar
      softwrap: make the changes to actually allow the chunk width to vary · 8490f4ac
      David Lawrence Ramsey authored
      get_chunk_row() and get_chunk_leftedge() now become wrappers around
      get_chunk(); the latter is only used directly in place_the_cursor()
      when we need to get both the row and the leftedge.  get_chunk() now
      uses the proper formula to implement varying chunk width.
      
      Since chunk width now varies, place_the_cursor() sets the x position
      relative to the leftedge in a different way that works regardless
      of chunk width, update_softwrapped_line() loops until it gets all
      softwrap breakpoints instead of calculating the full length in
      advance and getting one full row at a time, the chunk iterators
      now count leftedges instead of rows, and fix_firstcolumn() does a
      full recalculation of the chunk that firstcolumn is on instead of
      simply shifting it back.
      
      Also, in update_softwrapped_line(), when a line's softwrap breakpoint
      is before the last column of the edit window, a ">" is now added to
      the end of it.
      
      The workaround in place_the_cursor() for when two-column characters
      straddle the edge of the screen is removed, as it's no longer needed
      now that chunks end before such characters.
      
      Furthermore, do_home() and do_end() use xplustabs() instead of
      placewewant again when calculating the leftedge, since placewewant
      refers to a column that may or may not be available (if it's not,
      the cursor will be placed wrongly).  Make get_edge_and_target() use
      xplustabs() instead of placewewant for the same reason; this also lets
      us simplify get_edge_and_target(), since xplustabs() will never be
      greater than strlenpt().  Finally, since do_end() now has to calculate
      rightedge as well as rightedge_x, use the former to implement the same
      time-saving optimizations as in do_home().
      
      The cursor is not yet adjusted when we try to go directly to a column
      past the end of a softwrap breakpoint, and placewewant handling in the
      vertical movement code is not yet adjusted for varying chunk lengths,
      but fixes for these are forthcoming.
      
      This fixes https://savannah.gnu.org/bugs/?49440.
      8490f4ac
    • David Lawrence Ramsey's avatar
      softwrap: add new functions for chunks of varying width · e375995d
      David Lawrence Ramsey authored
      get_chunk_row() replaces the formula "column / editwincols".
      
      get_chunk_leftedge() replaces "(column / editwincols) * editwincols".
      
      get_last_chunk_row() replaces "strlenpt() / editwincols".
      
      get_last_chunk_leftedge() replaces "(strlenpt() / editwincols) * editwincols".
      
      This prepares us for any changes in those formulas, and for more such
      functions later.
      e375995d
    • David Lawrence Ramsey's avatar
      softwrap: prepare for allowing the chunk width to vary · 35f6a176
      David Lawrence Ramsey authored
      The new function find_softwrap_breakpoint() returns the column number
      of the last position in screen range where we can wrap the given text
      without breaking a two-column character in half (as was done until now).
      The returned column number is the leftedge of the next softwrapped chunk.
      
      If the end of the text is reached while searching for a wrapping point,
      the parameter end_of_line is set to TRUE.
      
      The new function get_chunk() uses find_softwrap_breakpoint() to find the
      row and leftedge corresponding to a given column of a given line.
      35f6a176
  12. 02 Jul, 2017 2 commits
  13. 30 Jun, 2017 1 commit
  14. 04 Jun, 2017 3 commits
  15. 31 May, 2017 3 commits
  16. 29 May, 2017 3 commits
  17. 19 May, 2017 1 commit
  18. 16 May, 2017 1 commit
  19. 11 May, 2017 1 commit
  20. 08 May, 2017 1 commit
  21. 07 May, 2017 1 commit
  22. 05 May, 2017 1 commit