- 31 Jul, 2017 1 commit
-
-
David Lawrence Ramsey authored
-
- 24 Jul, 2017 1 commit
-
-
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.
-
- 23 Jul, 2017 1 commit
-
-
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.
-
- 20 Jul, 2017 2 commits
-
-
David Lawrence Ramsey authored
A line can only be partially offscreen when doing softwrapping.
-
Benno Schulenberg authored
This fixes https://savannah.gnu.org/bugs/?51514.
-
- 19 Jul, 2017 2 commits
-
-
Benno Schulenberg authored
This improves https://savannah.gnu.org/bugs/?51479 for the +-1 case.
-
David Lawrence Ramsey authored
-
- 16 Jul, 2017 1 commit
-
-
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.
-
- 15 Jul, 2017 1 commit
-
-
Benno Schulenberg authored
-
- 10 Jul, 2017 1 commit
-
-
David Lawrence Ramsey authored
This fixes https://savannah.gnu.org/bugs/?51427.
-
- 09 Jul, 2017 1 commit
-
-
Benno Schulenberg authored
-
- 07 Jul, 2017 10 commits
-
-
Benno Schulenberg authored
-
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.
-
Benno Schulenberg authored
And then elide the function entirely as it's called just once.
-
Benno Schulenberg authored
-
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:
Nicholas Boel <axxisd@gmail.com>
-
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().
-
David Lawrence Ramsey authored
Add the new function actual_last_column() to accomplish this.
-
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.
-
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.
-
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.
-
- 02 Jul, 2017 2 commits
-
-
Benno Schulenberg authored
-
Benno Schulenberg authored
-
- 30 Jun, 2017 1 commit
-
-
Benno Schulenberg authored
When also --nohelp is active and the terminal is so narrow that the message that --constantshow displays on the bottom row does not fit, this causes the cursor to be pushed "offscreen". Some terminal emulators don't handle this case correctly, and leave the cursor in an invisible or mistaken position. Compensate for this by moving the cursor back to the start of the row. This fixes https://savannah.gnu.org/bugs/?51335 . Reported-by:
David Lawrence Ramsey <pooka109@gmail.com>
-
- 04 Jun, 2017 3 commits
-
-
Benno Schulenberg authored
-
Benno Schulenberg authored
-
Benno Schulenberg authored
-
- 31 May, 2017 3 commits
-
-
Benno Schulenberg authored
This fixes a secondary part of https://savannah.gnu.org/bugs/?51124.
-
Benno Schulenberg authored
When receiving a SIGCONT, don't call regenerate_screen() directly but act as if a SIGWINCH occurred. Also insert a dummy key, and thus let the relevant input routine redraw the relevant subwindows. Use KEY_F0 as the dummy key, as both Ncurses and Slang know it, and it should normally do nothing at all. This fixes https://savannah.gnu.org/bugs/?51124.
-
Benno Schulenberg authored
When we are in the file browser, browser_refresh() will take care of redrawing the title bar and the file list, so total_refresh() should leave those two subwindows alone in that case. This fixes https://savannah.gnu.org/bugs/?51147.
-
- 29 May, 2017 3 commits
-
-
Benno Schulenberg authored
Achieve this by making the suppression flag global, so that we can just reset it instead of making an improper call of do_cursorpos(). This fixes the secondary part of https://savannah.gnu.org/bugs/?51134.
-
Benno Schulenberg authored
Also, remove a useless assert.
-
Benno Schulenberg authored
This fixes https://savannah.gnu.org/bugs/?51134.
-
- 19 May, 2017 1 commit
-
-
Benno Schulenberg authored
-
- 16 May, 2017 1 commit
-
-
Benno Schulenberg authored
-
- 11 May, 2017 1 commit
-
-
Benno Schulenberg authored
When spotlighting the string to be replaced, placewewant isn't valid, so tell place_the_cursor() to ignore its value to avoid the cursor getting mistakenly placed at the beginning of the next row. This fixes https://savannah.gnu.org/bugs/?50997 . Reported-by:
David Lawrence Ramsey <pooka109@gmail.com>
-
- 08 May, 2017 1 commit
-
-
Benno Schulenberg authored
Also, allow Ctrl+Left/Right with --enable-tiny --enable-browser.
-
- 07 May, 2017 1 commit
-
-
David Lawrence Ramsey authored
Add missing spaces, remove excess spaces, and replace groups of indentation spaces with tabs.
-
- 05 May, 2017 2 commits
-
-
Benno Schulenberg authored
-
David Lawrence Ramsey authored
When the editing space gets narrower, either by toggling line numbers on or making nano's window smaller, and when the cursor is near the bottom, it can be pushed offscreen. In that case, don't get it back onscreen by centering the current line but by putting it on the bottom row. This makes for a smoother experience. This fixes http://savannah.gnu.org/bugs/?50933.
-