diff options
-rw-r--r-- | src/css/values.nim | 2 | ||||
-rw-r--r-- | src/display/lineedit.nim | 2 | ||||
-rw-r--r-- | src/display/term.nim | 2 | ||||
-rw-r--r-- | src/display/winattrs.nim | 62 | ||||
-rw-r--r-- | src/display/window.nim | 54 | ||||
-rw-r--r-- | src/html/dom.nim | 2 | ||||
-rw-r--r-- | src/html/env.nim | 2 | ||||
-rw-r--r-- | src/layout/box.nim | 2 | ||||
-rw-r--r-- | src/layout/engine.nim | 2 | ||||
-rw-r--r-- | src/local/client.nim | 2 | ||||
-rw-r--r-- | src/local/container.nim | 2 | ||||
-rw-r--r-- | src/local/pager.nim | 2 | ||||
-rw-r--r-- | src/render/renderdocument.nim | 2 | ||||
-rw-r--r-- | src/server/buffer.nim | 2 | ||||
-rw-r--r-- | src/server/forkserver.nim | 2 |
15 files changed, 75 insertions, 67 deletions
diff --git a/src/css/values.nim b/src/css/values.nim index aa083a04..6fae4737 100644 --- a/src/css/values.nim +++ b/src/css/values.nim @@ -6,7 +6,7 @@ import unicode import css/cssparser import css/selectorparser -import display/window +import display/winattrs import img/bitmap import layout/layoutunit import types/color diff --git a/src/display/lineedit.nim b/src/display/lineedit.nim index 374cb3d7..6dccdded 100644 --- a/src/display/lineedit.nim +++ b/src/display/lineedit.nim @@ -3,7 +3,7 @@ import strutils import unicode import bindings/quickjs -import display/window +import display/winattrs import js/javascript import types/cell import types/opt diff --git a/src/display/term.nim b/src/display/term.nim index bcdcaf86..792e8a5d 100644 --- a/src/display/term.nim +++ b/src/display/term.nim @@ -10,7 +10,7 @@ import unicode import bindings/termcap import config/config -import display/window +import display/winattrs import types/cell import types/color import types/opt diff --git a/src/display/winattrs.nim b/src/display/winattrs.nim new file mode 100644 index 00000000..74a713bc --- /dev/null +++ b/src/display/winattrs.nim @@ -0,0 +1,62 @@ +import terminal + +when defined(posix): + import termios + +type + WindowAttributes* = object + width*: int + height*: int + ppc*: int # cell width + ppl*: int # cell height + width_px*: int + height_px*: int + +proc getWindowAttributes*(tty: File): WindowAttributes = + when defined(posix): + if tty.isatty(): + var win: IOctl_WinSize + if ioctl(cint(getOsFileHandle(tty)), TIOCGWINSZ, addr win) != -1: + var cols = int(win.ws_col) + var rows = int(win.ws_row) + if cols == 0: + cols = 80 + if rows == 0: + rows = 24 + var ppc = int(win.ws_xpixel) div cols + var ppl = int(win.ws_ypixel) div rows + # some terminal emulators (aka vte) don't set ws_xpixel or ws_ypixel. + # solution: use xterm. + if ppc == 0: + ppc = 9 + if ppl == 0: + ppl = 18 + # Filling the last row without raw mode breaks things. However, + # not supporting Windows means we can always have raw mode, so we can + # use all available columns. + return WindowAttributes( + width: cols, + height: rows, + ppc: ppc, + ppl: ppl, + width_px: cols * ppc, + height_px: rows * ppl + ) + # For Windows, which is no longer supported. We keep it as a fallback for + # when ioctl fails. + var height = terminalHeight() + if height == 0: + height = 24 + # Windows has no raw mode afaik, so we do not fill the last column to + # prevent line wrapping. + let width = terminalWidth() - 1 + let ppc = 9 + let ppl = 18 + return WindowAttributes( + width: width, + height: height, + ppc: ppc, + ppl: ppl, + width_px: ppc * width, + height_px: ppl * width + ) diff --git a/src/display/window.nim b/src/display/window.nim deleted file mode 100644 index 278fc3fb..00000000 --- a/src/display/window.nim +++ /dev/null @@ -1,54 +0,0 @@ -import terminal - -when defined(posix): - import termios - - -type - WindowAttributes* = object - width*: int - height*: int - ppc*: int # cell width - ppl*: int # cell height - cell_ratio*: float64 # ppl / ppc - width_px*: int - height_px*: int - -proc getWindowAttributes*(tty: File): WindowAttributes = - when defined(posix): - if tty.isatty(): - var win: IOctl_WinSize - if ioctl(cint(getOsFileHandle(tty)), TIOCGWINSZ, addr win) != -1: - var cols = win.ws_col - var rows = win.ws_row - if cols == 0: - cols = 80 - if rows == 0: - rows = 24 - # Filling the last row without raw mode breaks things. However, - # not supporting Windows means we can always have raw mode, so we can - # use all available columns. - result.width = int(cols) - result.height = int(rows) - result.ppc = int(win.ws_xpixel) div result.width - result.ppl = int(win.ws_ypixel) div result.height - # some terminal emulators (aka vte) don't set ws_xpixel or ws_ypixel. - # solution: use xterm. - if result.ppc == 0: - result.ppc = 9 - if result.ppl == 0: - result.ppl = 18 - result.width_px = result.width * result.ppc - result.height_px = result.height * result.ppl - result.cell_ratio = result.ppl / result.ppc - return - # for Windows. unused. - result.width = terminalWidth() - 1 - result.height = terminalHeight() - if result.height == 0: - result.height = 24 - result.ppc = 9 - result.ppl = 18 - result.cell_ratio = result.ppl / result.ppc - result.width_px = result.ppc * result.width - result.height_px = result.ppl * result.height diff --git a/src/html/dom.nim b/src/html/dom.nim index 3931ae69..c28cc0e5 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -10,7 +10,7 @@ import tables import css/cssparser import css/sheet import css/values -import display/window +import display/winattrs import html/enums import html/event import img/bitmap diff --git a/src/html/env.nim b/src/html/env.nim index 24e1482d..6046ee2b 100644 --- a/src/html/env.nim +++ b/src/html/env.nim @@ -1,7 +1,7 @@ import selectors import streams -import display/window +import display/winattrs import html/chadombuilder import html/dom import html/event diff --git a/src/layout/box.nim b/src/layout/box.nim index 7c764203..e09b8e37 100644 --- a/src/layout/box.nim +++ b/src/layout/box.nim @@ -2,7 +2,7 @@ import options import css/stylednode import css/values -import display/window +import display/winattrs import layout/layoutunit import types/color diff --git a/src/layout/engine.nim b/src/layout/engine.nim index 9cf45515..4a242e02 100644 --- a/src/layout/engine.nim +++ b/src/layout/engine.nim @@ -5,7 +5,7 @@ import unicode import css/stylednode import css/values -import display/window +import display/winattrs import layout/box import layout/layoutunit import utils/twtstr diff --git a/src/local/client.nim b/src/local/client.nim index 788ea32f..91b111d9 100644 --- a/src/local/client.nim +++ b/src/local/client.nim @@ -18,7 +18,7 @@ import bindings/quickjs import config/config import display/lineedit import display/term -import display/window +import display/winattrs import html/chadombuilder import html/dom import html/event diff --git a/src/local/container.nim b/src/local/container.nim index e62a3cd4..fc113ad3 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -7,7 +7,7 @@ when defined(posix): import posix import config/config -import display/window +import display/winattrs import extern/stdio import io/promise import io/serialize diff --git a/src/local/pager.nim b/src/local/pager.nim index 2559e029..9d1d2fa5 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -15,7 +15,7 @@ import config/mailcap import config/mimetypes import display/lineedit import display/term -import display/window +import display/winattrs import extern/editor import extern/runproc import extern/tempfile diff --git a/src/render/renderdocument.nim b/src/render/renderdocument.nim index de2f501f..95e2687b 100644 --- a/src/render/renderdocument.nim +++ b/src/render/renderdocument.nim @@ -5,7 +5,7 @@ import css/cascade import css/sheet import css/stylednode import css/values -import display/window +import display/winattrs import html/dom import layout/box import layout/engine diff --git a/src/server/buffer.nim b/src/server/buffer.nim index 5ed97258..979a2dc0 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -17,7 +17,7 @@ import css/mediaquery import css/sheet import css/stylednode import css/values -import display/window +import display/winattrs import html/chadombuilder import html/dom import html/enums diff --git a/src/server/forkserver.nim b/src/server/forkserver.nim index 80cc0338..5563817b 100644 --- a/src/server/forkserver.nim +++ b/src/server/forkserver.nim @@ -6,7 +6,7 @@ when defined(posix): import posix import config/config -import display/window +import display/winattrs import io/posixstream import io/serialize import io/serversocket |