aboutsummaryrefslogtreecommitdiff
path: root/st.c
Commit message (Collapse)AuthorAge
* Normalize the whole color selection in xdrawcursor.Christoph Lohmann2015-10-06
|
* Fix the cursor color when over selection.Quentin Rameau2015-10-06
| | | | | | | 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>
* Snowman is everywhere.Christoph Lohmann2015-10-05
|
* The definition of the reverse cursor is now up to the user.Christoph Lohmann2015-10-05
|
* Fixing the cursor movement in selections.Christoph Lohmann2015-10-05
| | | | | | 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.
* When the cursor is moved, clear the selection.Christoph Lohmann2015-10-05
|
* Reverse the cursor on selection.Christoph Lohmann2015-10-05
|
* More style changes. We forgot some switches.Christoph Lohmann2015-10-05
|
* Small style change.Christoph Lohmann2015-10-05
|
* Fix extra bracketed paste markers when pasting >8kbdequis2015-09-25
| | | | | | | | | | | | | | | | | | | | 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>
* dup() -> dup2()FRIGN2015-09-22
| | | | | | | 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.
* Fix copy of line with len = 0Roberto E. Vargas Caballero2015-09-10
| | | | | | | 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).
* Expose cursor shape in config.def.hJan Christoph Ebersbach2015-09-08
| | | | Signed-off-by: Christoph Lohmann <20h@r-36.net>
* Add key to send a break to the serial lineRoberto E. Vargas Caballero2015-09-08
|
* Making st.1 more descriptive about -l and fix -l in st.c.Christoph Lohmann2015-09-07
|
* Reordering and adding control codes.Christoph Lohmann2015-08-31
| | | | For completeness and documentation add all C1 control codes.
* Merge branch 'master' of ssh://suckless.org/gitrepos/stChristoph Lohmann2015-08-30
|\
| * Do not mark as invalid UTF8 control codesRoberto E. Vargas Caballero2015-08-18
| | | | | | | | | | | | 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.
* | Don't read if we chunked the input data.Christoph Lohmann2015-08-30
|/
* Adding mouse colour/shape settingsAlex Kozadaev2015-07-28
|
* Adding -T to the usage too.Christoph Lohmann2015-07-24
|
* Add -T, as recommended by Dmitrij D. CzarkoffChristoph Lohmann2015-07-24
|
* Fix type for write(2) return variable.Quentin Rameau2015-07-24
| | | | | | | | | | | | 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.
* Fix style in execshRoberto E. Vargas Caballero2015-07-24
|
* Make the comment for the IM XFilter more understandable.Christoph Lohmann2015-07-10
|
* Return style unification.Christoph Lohmann2015-07-10
|
* Aligning the macros.Christoph Lohmann2015-07-10
|
* Unix end of file.Christoph Lohmann2015-07-10
|
* No inline declarations please.Christoph Lohmann2015-07-10
|
* Typo and the missing incr atom from the patches.Christoph Lohmann2015-07-10
|
* Implement chunked write to the cmdfd.Christoph Lohmann2015-07-10
| | | | | This is needed so big input like a paste of several megabyte does not clog our I/O.
* Implement INCR transfers in the clipboard.Christoph Lohmann2015-07-10
|
* Don't treat clauses like functionsFRIGN2015-07-10
| | | | | | and add a space between the keyword and the parentheses. Signed-off-by: Christoph Lohmann <20h@r-36.net>
* Use BSD-style function notationFRIGN2015-07-10
| | | | | | | 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>
* Unboolify stFRIGN2015-07-09
| | | | | | | | | 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>
* Remove insane *_FILENO and EXIT_* usageFRIGN2015-07-09
| | | | | | | | | | | | 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>
* Revert "Remove unnecessary XFilterEvent call."Weng Xuetian2015-07-02
| | | | This reverts commit d2937b05aed9cee8d6651cd806d31682a853c773.
* do not truncate font size when zoomingQuentin Rameau2015-06-19
|
* Revert "Optimize memory footprint of line buffers"Roberto E. Vargas Caballero2015-06-03
| | | | | This reverts commit 7ab6c92e18d468968811256e808b02309c160a22. We need 32 bits for real color support.
* Support UTF-8 characters as word delimitersJan Christoph Ebersbach2015-05-25
| | | | | | | 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.
* Merge branch 'master' of ssh://suckless.org/gitrepos/stRoberto E. Vargas Caballero2015-05-15
|\
| * Fix the new -e handling. An empty cmd has to work for backwards compatibility.Christoph Lohmann2015-05-10
| |
* | set selection to IDLE on clearv4hn2015-05-15
| | | | | | | | | | | | Otherwise a tangling bmotion event will consider the selection still valid and selnormalize segfaults because of an invalid sel.ob.y index.
* | Small bugfix for makeglyphfontspecs call in drawregionsuigin2015-05-12
|/ | | | | | | | | 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.
* Clean up xdraws and optimize glyph drawing with non-unit kerning valuessuigin2015-05-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Changed type for UTF-32 codepoints from long to uint_least32_tsuigin2015-05-06
|
* Fix empty selection highlighting bug.noname2015-05-04
| | | | | | | | | | | | | | 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().
* Fix indentation.noname2015-05-04
|
* Add enumeration for sel.modenoname2015-05-04
| | | | | | 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.
* selnormalize: make special case explicitnoname2015-05-04
| | | | | Special case is when regular selection spans multiple lines. Otherwise, just sort sel.ob.x and sel.ob.y.