summaryrefslogtreecommitdiff
path: root/st.c
AgeCommit message (Collapse)Author
2015-10-06Normalize the whole color selection in xdrawcursor.Christoph Lohmann
2015-10-06Fix the cursor color when over selection.Quentin Rameau
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 Lohmann
2015-10-05The definition of the reverse cursor is now up to the user.Christoph Lohmann
2015-10-05Fixing the cursor movement in selections.Christoph Lohmann
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 Lohmann
2015-10-05Reverse the cursor on selection.Christoph Lohmann
2015-10-05More style changes. We forgot some switches.Christoph Lohmann
2015-10-05Small style change.Christoph Lohmann
2015-09-25Fix extra bracketed paste markers when pasting >8kbdequis
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()FRIGN
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 Caballero
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 Ebersbach
Signed-off-by: Christoph Lohmann <20h@r-36.net>
2015-09-08Add key to send a break to the serial lineRoberto E. Vargas Caballero
2015-09-07Making st.1 more descriptive about -l and fix -l in st.c.Christoph Lohmann
2015-08-31Reordering and adding control codes.Christoph Lohmann
For completeness and documentation add all C1 control codes.
2015-08-30Merge branch 'master' of ssh://suckless.org/gitrepos/stChristoph Lohmann
2015-08-30Don't read if we chunked the input data.Christoph Lohmann
2015-08-18Do not mark as invalid UTF8 control codesRoberto E. Vargas Caballero
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 Kozadaev
2015-07-24Adding -T to the usage too.Christoph Lohmann
2015-07-24Add -T, as recommended by Dmitrij D. CzarkoffChristoph Lohmann
2015-07-24Fix type for write(2) return variable.Quentin Rameau
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 Caballero
2015-07-10Make the comment for the IM XFilter more understandable.Christoph Lohmann
2015-07-10Return style unification.Christoph Lohmann
2015-07-10Aligning the macros.Christoph Lohmann
2015-07-10Unix end of file.Christoph Lohmann
2015-07-10No inline declarations please.Christoph Lohmann
2015-07-10Typo and the missing incr atom from the patches.Christoph Lohmann
2015-07-10Implement chunked write to the cmdfd.Christoph Lohmann
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 Lohmann
2015-07-10Don't treat clauses like functionsFRIGN
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 notationFRIGN
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 stFRIGN
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_* usageFRIGN
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 Xuetian
This reverts commit d2937b05aed9cee8d6651cd806d31682a853c773.
2015-06-19do not truncate font size when zoomingQuentin Rameau
2015-06-03Revert "Optimize memory footprint of line buffers"Roberto E. Vargas Caballero
This reverts commit 7ab6c92e18d468968811256e808b02309c160a22. We need 32 bits for real color support.
2015-05-25Support UTF-8 characters as word delimitersJan Christoph Ebersbach
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 Caballero
2015-05-15set selection to IDLE on clearv4hn
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 drawregionsuigin
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 Lohmann
2015-05-07Clean up xdraws and optimize glyph drawing with non-unit kerning valuessuigin
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_tsuigin
2015-05-04Fix empty selection highlighting bug.noname
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.noname
2015-05-04Add enumeration for sel.modenoname
This patch also prevents sel.mode from increasing beyond 2. It is almost impossible, but sel.mode may overflow if mouse is moved around for too long while selecting.
2015-05-04selnormalize: make special case explicitnoname
Special case is when regular selection spans multiple lines. Otherwise, just sort sel.ob.x and sel.ob.y.