summaryrefslogtreecommitdiff
path: root/development/ex-vi
diff options
context:
space:
mode:
Diffstat (limited to 'development/ex-vi')
-rw-r--r--development/ex-vi/README_Slackware.txt22
-rw-r--r--development/ex-vi/ex-vi.SlackBuild31
2 files changed, 51 insertions, 2 deletions
diff --git a/development/ex-vi/README_Slackware.txt b/development/ex-vi/README_Slackware.txt
index 034205d91d..656d52fb3f 100644
--- a/development/ex-vi/README_Slackware.txt
+++ b/development/ex-vi/README_Slackware.txt
@@ -9,3 +9,25 @@ After installing, either log out & back in, or "source
/etc/profile.d/ex-vi.sh". To temporarily disable the scripts, remove
their execute bits. Users can always set PATH and MANPATH in their own
dotfiles, of course.
+
+In visual mode (vi or :vi from ex), ex-vi has compiled-in values for
+the maximum terminal size, in columns and rows. This build will support
+terminals up to 320x200 characters by default. If you get 'Terminal too
+wide' errors, make your terminal as large as possible and rebuild ex-vi
+from within it, with a command like:
+
+TUBECOLS=$COLUMNS TUBELINES=$LINES ./ex-vi.SlackBuild
+
+Exceeding the maximum line height just means vi will ignore the extra
+lines at the bottom of the screen. Note that increasing these values
+causes vi to use more memory, but on a fairly modern system it shouldn't
+be too much. If you're building for a memory-poor system (embedded, or old
+hardware), you could save memory with e.g. TUBECOLS=80 TUBELINES=25 or so.
+
+If you *really* need to run vi without 'Terminal too wide', you can
+export e.g. COLUMNS=80 in the environment, and vi will only use part of
+the terminal. The COLUMNS variable gets reset whenever an X terminal is
+resized (at least for most X terminal emulators).
+
+Thanks to zacts on Freenode IRC ##slackware for pointing out the terminal
+size limitation.
diff --git a/development/ex-vi/ex-vi.SlackBuild b/development/ex-vi/ex-vi.SlackBuild
index 9d7d5324fe..48963c40b4 100644
--- a/development/ex-vi/ex-vi.SlackBuild
+++ b/development/ex-vi/ex-vi.SlackBuild
@@ -6,9 +6,30 @@
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
+# 20150331 bkw: build 2
+# Increase TUBE* constants in config.h to allow for larger terminals.
+
+# vi has hardcoded terminal size limits of 160 columns and 100 lines.
+# These days it's not unusual to have a 1920x1080 framenbuffer with 8x16
+# console font, for 240x67 characters. Increase limits here. Doing so uses
+# TUBESIZE bytes of memory at startup, and another TUBESIZE bytes every
+# time you switch from ex mode to visual mode, so let's not get too crazy
+# with the cheez whiz. The real problem is TUBECOLS (the width): if the
+# terminal exceeds this, you get 'Terminal too wide' and are stuck in ex
+# mode. Exceeding TUBELINES just means vi ignores the extra lines at the
+# bottom of the terminal.
+
+# Default to 320x200, which would be enough for a 8x16 console font on a
+# WQXGA 2560x1600 display, or a 2/3-width full-height X terminal on 4K
+# UHDTV (3840x2160). If I don't make this configurable, someone will
+# need it to be. So:
+TUBECOLS=${TUBECOLS:-320}
+TUBELINES=${TUBELINES:-200}
+
+# We now return you to your regularly scheduled programming:
PRGNAM=ex-vi
VERSION=${VERSION:-050325}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@@ -55,10 +76,16 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-# don't install the binary with the sticky bit set. It doesn't do anything
+# Don't install the binary with the sticky bit set. It doesn't do anything
# on Linux, and might set off alarm bells.
sed -i 's,-m 1755,-m 755,' Makefile
+# Apologies for the fugly sed code here. It works, though.
+sed -i -e "/^#define/s,\\(TUBESIZE *\\).*$,\\1 $(( TUBECOLS * TUBELINES ))," \
+ -e "/^#define/s,\\(TUBECOLS *\\).*$,\\1 $TUBECOLS," \
+ -e "/^#define/s,\\(TUBELINES *\\).*$,\\1 $TUBELINES," \
+ config.h
+
# To avoid conflicts with Slackware's elvis and/or vim, we install to /opt and
# include a login script to set PATH and MANPATH.
make all install \