aboutsummaryrefslogtreecommitdiff
path: root/st.c
AgeCommit message (Collapse)AuthorFilesLines
2015-10-11fix bug where first selection snaps to linesJason Woofenden1-2/+3
2015-10-06Fix the cursor colors selectionQuentin Rameau1-3/+2
Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-10-06Normalize the whole color selection in xdrawcursor.Christoph Lohmann1-11/+22
2015-10-06Fix the cursor color when over selection.Quentin Rameau1-1/+2
If we want to show a custom selected cursor color, we must not set the revert attribute to the drawn glyph. Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-10-05Snowman is everywhere.Christoph Lohmann1-0/+2
2015-10-05The definition of the reverse cursor is now up to the user.Christoph Lohmann1-12/+3
2015-10-05Fixing the cursor movement in selections.Christoph Lohmann1-13/+31
Before the fix the cursor wouldn't obey if it's in a selection. If it is inside it will now change to the reverse. This patch also adds that the defaultcs will be reversed for the manually drawn cursors.
2015-10-05When the cursor is moved, clear the selection.Christoph Lohmann1-0/+1
2015-10-05Reverse the cursor on selection.Christoph Lohmann1-0/+3
2015-10-05More style changes. We forgot some switches.Christoph Lohmann1-33/+33
2015-10-05Small style change.Christoph Lohmann1-4/+4
2015-09-25Fix extra bracketed paste markers when pasting >8kbdequis1-2/+2
Before this patch, when pasting over BUFSIZE (8192 bytes here), st would do the following: \e[200~...8192 bytes...\e[201~\e[200~...remaining bytes...\e[201~ With this patch, the start marker is only sent when the offset is 0 (at the beginning of selnotify) and the end marker is only sent when the remaining bytes to read are 0 (at the end). For short pastes, both conditions are true in the same iteration. For long pastes, it removes the extra markers in the middle, keeping the intended wrapping: \e[200~...8192 bytes......remaining bytes...\e[201~ Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-09-22dup() -> dup2()FRIGN1-2/+1
gcc would warn about an unused result. We know it is 0 and dup() can't fail in these circumstances, as we closed fd0 previously. Using dup2() to do the same saves one line and shuts gcc up, bringing us a clean build back.
2015-09-10Fix copy of line with len = 0Roberto E. Vargas Caballero1-1/+4
When a line has no any character linelen is 0, so last = &term.line[y][MIN(lastx, linelen-1)] generated a pointer to the end of the previous line. The best thing we can do in this case is to add a newline, because we don't have a glyph to print (and consult its state of wrapping).
2015-09-08Expose cursor shape in config.def.hJan Christoph Ebersbach1-1/+1
Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-09-08Add key to send a break to the serial lineRoberto E. Vargas Caballero1-0/+9
2015-09-07Making st.1 more descriptive about -l and fix -l in st.c.Christoph Lohmann1-1/+1
2015-08-31Reordering and adding control codes.Christoph Lohmann1-2/+21
For completeness and documentation add all C1 control codes.
2015-08-30Merge branch 'master' of ssh://suckless.org/gitrepos/stChristoph Lohmann1-2/+2
2015-08-30Don't read if we chunked the input data.Christoph Lohmann1-1/+2
2015-08-18Do not mark as invalid UTF8 control codesRoberto E. Vargas Caballero1-2/+2
wcwidth() returns -1 for all the non visible characters, but it doesn't necessarilly mean that they are incorrect. It only means that they are not printable.
2015-07-28Adding mouse colour/shape settingsAlex Kozadaev1-4/+16
2015-07-24Adding -T to the usage too.Christoph Lohmann1-2/+4
2015-07-24Add -T, as recommended by Dmitrij D. CzarkoffChristoph Lohmann1-0/+1
2015-07-24Fix type for write(2) return variable.Quentin Rameau1-1/+2
A little fix in xwrite(). >From 3727d2e3344b57128ab51c7839795204f1f839ff Mon Sep 17 00:00:00 2001 From: Quentin Rameau <quinq@fifth.space> Date: Fri, 24 Jul 2015 11:40:46 +0200 Subject: [PATCH] Fix type for write(2) return variable. The allocated lengh of s fits into an integer so we can safely use ssize_t here.
2015-07-24Fix style in execshRoberto E. Vargas Caballero1-2/+1
2015-07-10Make the comment for the IM XFilter more understandable.Christoph Lohmann1-3/+3
2015-07-10Return style unification.Christoph Lohmann1-0/+10
2015-07-10Aligning the macros.Christoph Lohmann1-20/+22
2015-07-10Unix end of file.Christoph Lohmann1-0/+1
2015-07-10No inline declarations please.Christoph Lohmann1-2/+2
2015-07-10Typo and the missing incr atom from the patches.Christoph Lohmann1-1/+3
2015-07-10Implement chunked write to the cmdfd.Christoph Lohmann1-2/+51
This is needed so big input like a paste of several megabyte does not clog our I/O.
2015-07-10Implement INCR transfers in the clipboard.Christoph Lohmann1-6/+68
2015-07-10Don't treat clauses like functionsFRIGN1-382/+382
and add a space between the keyword and the parentheses. Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-07-10Use BSD-style function notationFRIGN1-129/+256
Put the opening brace on a new line. This was already used for some functions inside st.c. Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-07-09Unboolify stFRIGN1-29/+27
This practice proved itself in sbase, ubase and a couple of other projects. Also remove the True and False defined in X11 and FcTrue and FcFalse defined in Fontconfig. Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-07-09Remove insane *_FILENO and EXIT_* usageFRIGN1-14/+12
Any system having different assignments than the usual 0, 1, 2 for the standard file numbers and 0, 1 for the exit-statuses is broken beyond repair. Let's keep it simple and just use the numbers, no reason to fall out of the window here and bend down for POSIX. In one occasion, the ret-variable was not necessary. The check was rewritten. Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-07-02Revert "Remove unnecessary XFilterEvent call."Weng Xuetian1-0/+7
This reverts commit d2937b05aed9cee8d6651cd806d31682a853c773.
2015-06-19do not truncate font size when zoomingQuentin Rameau1-8/+7
2015-06-03Revert "Optimize memory footprint of line buffers"Roberto E. Vargas Caballero1-2/+2
This reverts commit 7ab6c92e18d468968811256e808b02309c160a22. We need 32 bits for real color support.
2015-05-25Support UTF-8 characters as word delimitersJan Christoph Ebersbach1-1/+17
For a higher usefulness of the utf8strchr function, the index of the UTF-8 character could be returned in addition with a Rune instead of a char*. Since utf8strchr is currently only used by ISDELIM I didn't bother to increase the complexity.
2015-05-15Merge branch 'master' of ssh://suckless.org/gitrepos/stRoberto E. Vargas Caballero1-1/+1
2015-05-15set selection to IDLE on clearv4hn1-0/+1
Otherwise a tangling bmotion event will consider the selection still valid and selnormalize segfaults because of an invalid sel.ob.y index.
2015-05-12Small bugfix for makeglyphfontspecs call in drawregionsuigin1-1/+1
Here's a patch that fixes a bug when calling `makedrawglyphfontspecs' in `drawregion'. Wasn't offseting the pointer into the input glyphs array by `x1'. The bug isn't causing any problems currently, because `drawregion' is always called with `x1' and `y1' values of 0, but if this ever changes in the future, the bug would certainly cause some problems.
2015-05-10Fix the new -e handling. An empty cmd has to work for backwards compatibility.Christoph Lohmann1-1/+1
2015-05-07Clean up xdraws and optimize glyph drawing with non-unit kerning valuessuigin1-196/+187
I have another patch here for review that optimizes the performance of glyph drawing, primarily when using non-unit kerning values, and fixes a few other minor issues. It's dependent on the earlier patch from me that stores unicode codepoints in a Rune type, typedef'd to uint_least32_t. This patch is a pretty big change to xdraws so your scrutiny is appreciated. First, some performance numbers. I used Yu-Jie Lin termfps.sh shell script to benchmark before and after, and you can find it in the attachments. On my Kaveri A10 7850k machine, I get the following results: Before Patch ============ 1) Font: "Liberation Mono:pixelsize=12:antialias=false:autohint=false" cwscale: 1.0, chscale: 1.0 For 273x83 100 frames. Elapsed time : 1.553 Frames/second: 64.352 Chars /second: 1,458,159 2) Font: "Inconsolata:pixelsize=14:antialias=true:autohint=true" cwscale: 1.001, chscale: 1.001 For 239x73 100 frames. Elapsed time : 159.286 Frames/second: 0.627 Chars /second: 10,953 After Patch =========== 3) Font: "Liberation Mono:pixelsize=12:antialias=false:autohint=false" cwscale: 1.0, chscale: 1.0 For 273x83 100 frames. Elapsed time : 1.544 Frames/second: 64.728 Chars /second: 1,466,690 4) Font: "Inconsolata:pixelsize=14:antialias=true:autohint=true" cwscale: 1.001, chscale: 1.001 For 239x73 100 frames. Elapsed time : 1.955 Frames/second: 51.146 Chars /second: 892,361 As you can see, while the improvements for fonts with unit-kerning is marginal, there's a huge ~81x performance increase with the patch when using kerning values other than 1.0. So what does the patch do? The `xdraws' function would render each glyph one at a time if non-unit kerning values were configured, and this was the primary cause of the slow down. Xft provides a handful of functions which allow you to render multiple characters or glyphs at time, each with a unique <x,y> position, so it was simply a matter of massaging the data into a format that would allow us to use one of these functions. I've split `xdraws' up into two functions. In the first pass with `xmakeglyphfontspecs' it will iterate over all of the glyphs in a given row and it will build up an array of corresponding XftGlyphFontSpec records. Much of the old logic for resolving fonts for glyphs using Xft and fontconfig went into this function. The second pass is done with `xrenderglyphfontspecs' which contains the old logic for determining colors, clearing the background, and finally rendering the array of XftGlyphFontSpec records. There's a couple of other things that have been improved by this patch. For instance, the UTF-32 codepoints in the Line's were being re-encoded back into UTF-8 strings to be passed to `xdraws' which in turn would then decode back to UTF-32 to verify that the Font contained a matching glyph for the code point. Next, the UTF-8 string was being passed to `XftDrawStringUtf8' which internally mallocs a scratch buffer and decodes back to UTF-32 and does the lookup of the glyphs all over again. This patch gets rid of all of this redundant round-trip encoding and decoding of characters to be rendered and only looks up the glyph index once (per font) during the font resolution phase. So this is probably what's responsible for the marginal improvements seen when kerning values are kept to 1.0. I imagine there are other performance improvements here too, not seen in the above benchmarks, if the user has lots of non-ASCII code plane characters on the screen, or several different fonts are being utilized during screen redraw. Anyway, if you see any problems, please let me know and I can fix them.
2015-05-06Changed type for UTF-32 codepoints from long to uint_least32_tsuigin1-25/+27
2015-05-04Fix empty selection highlighting bug.noname1-7/+5
When user clicks LMB, one character is selected, but will not be copied to selection until the user moves cursor a bit. Therefore, the character should not be highlighted as selected yet. Before the patch, the trick was not to mark line as dirty to avoid highlighting it. However, if user has already selected something and clicks in line that contains selection, selclear sets the line as dirty and one character is highlighted when it should not. This patch replaces dirty trick with explicit check for sel.mode inside selected().
2015-05-04Fix indentation.noname1-4/+4