Comments (12)
@cbrewster @cmyr i am a web developer. in CSS compute fonts width throw font-size*characters. i dont know any help for you.
from xi-mac.
@cbrewster yea I was thinking about the corollary of this problem during the initial implementation: in a file with 10m lines, it looks weird to have a really wide gutter with a single number.
I agree with you in the general case, and I think for the time being just using gutterColumns * stringWidth("9")
seems reasonable?
from xi-mac.
from xi-mac.
This happens when using a non-monospaced font.
from xi-mac.
yea we don't know how to measure 'character width' in a non-monospaced font. That's a holdover from older code, though, we could definitely be doing better here, by actually measuring the string in updateGutterWidth()
from xi-mac.
I am wondering if the naive solution of gutterColumns * max(stringWidth("0"), stringWidth("1"), stringWidth("2"), ..., stringWidth("9"))
(i.e. find out which of the numbers from 0-9 is the widest und use that as a replacement for the current textMetrics.fontWidth
) is good enough?
This does not take kerning and ligatures into account, but since they usually tighten the spacing instead of widening it (this assumption could be wrong), they might not be an issue.
Otherwise, we could calculate the actual stringWidth of the numbers and maintain a cache for the widest number per column count.
from xi-mac.
I don't particularly dislike this approach? Seems like a reasonable hack. Another option to consider is just baking in Inconsolata, and not letting the gutter font be changed... 🤔
from xi-mac.
Another option: when we're drawing each line number, we calculate expected drawing bounds. We could check this against the current gutter width, and if the width is inadequate we could fire a notification or otherwise indicate that the gutterview needs to be resized.
We could also just stash the max of this in the gutterview, and invalidate if the line count decreases?
from xi-mac.
Take the following example:
There is a file with 100+ lines, but we are only viewing the top 30 lines. The gutter will be the max width for 2 characters, but then as you scroll with lines 100+, the gutter would then resize to 3 characters wide. It would seem odd for the gutter to change width while scrolling.
from xi-mac.
Shouldn't the gutter, being fixed UI, be using the System font anyway? (San Francisco or whatever the System font happens to be) There are functions for getting that and NSFont IIRC has a method for measuring strings.
from xi-mac.
@jansol this is definitely a design decision. Xcode, for instance, has a predefined gutter font (which may not be the system default?), but sublime text uses the user font.
from xi-mac.
Either way, this looks like the way to go. At least as long as our screens aren't going to fit 10k lines.
from xi-mac.
Related Issues (20)
- autosave triggers HOT 11
- Xcode colorscheme HOT 3
- xi --wait does not return after application exit HOT 1
- update to swift 5 HOT 9
- Doesn't compile for Swift 5 HOT 13
- Change default find highlight color HOT 2
- package ID specification `xi-syntect-plugin` matched no packages
- build-rust-xcode.sh fails with Permission denied (os error 13) HOT 6
- Status Bar hiding last line HOT 3
- Scroll bars disappearing when switching from different application HOT 3
- Drag events cause file to be opened HOT 1
- Wrong top margin with statusbar -- first visible line is not rendered
- Crash when deleting (backspace) selection HOT 2
- Line numbers become bogus when scrolling HOT 1
- xcodebuild error (Xcode 11.3.1) HOT 14
- (Save) Dialog Overshoots Window in Splitwindow mode (macOS Catalina)
- Where is built .app? HOT 1
- No text is displayed at all
- no such module 'ArgumentParser' HOT 9
- xcodebuild fails on Mac Version OS 12 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xi-mac.