add BigText element. fix video args.

This commit is contained in:
Christopher Jeffrey 2015-07-11 16:15:30 -07:00
parent de02802bf0
commit 2b1203bb3a
10 changed files with 36306 additions and 2 deletions

View File

@ -145,6 +145,7 @@ screen.render();
- [Line](#line-from-box)
- [ScrollableBox](#scrollablebox-from-box) (deprecated)
- [ScrollableText](#scrollabletext-from-scrollablebox) (deprecated)
- [BigText](#bigtext-from-box)
- [Lists](#lists)
- [List](#list-from-box)
- [FileManager](#filemanager-from-list)
@ -754,6 +755,33 @@ pre-existing newlines and escape codes.
- Inherits all from ScrollableBox.
#### BigText (from Box)
A box which can render content drawn as 8x14 cell characters using the terminus
font.
##### Options:
- Inherits all from Box.
- __font__ - bdf->json font file to use (see [ttystudio][ttystudio] for
instructions on compiling BDFs to JSON).
- __fontBold__ - bdf->json bold font file to use (see [ttystudio][ttystudio]
for instructions on compiling BDFs to JSON).
- __fch__ - foreground character. (default: `' '`)
##### Properties:
- Inherits all from Box.
##### Events:
- Inherits all from Box.
##### Methods:
- Inherits all from Box.
### Lists
@ -2239,3 +2267,4 @@ See LICENSE for more info.
[urwid]: http://urwid.org/reference/index.html
[curses-ui]: http://search.cpan.org/~mdxi/Curses-UI-0.9609/lib/Curses/UI.pm
[termbox]: https://github.com/nsf/termbox-go
[ttystudio]: https://github.com/chjj/ttystudio#choosing-a-new-font-for-your-terminal-recording

View File

@ -15,6 +15,7 @@ widget.classes = [
'Line',
'ScrollableBox',
'ScrollableText',
'BigText',
'List',
'Form',
'Input',

149
lib/widgets/bigtext.js Normal file
View File

@ -0,0 +1,149 @@
/**
* bigtext.js - bigtext element for blessed
* Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
* https://github.com/chjj/blessed
*/
/**
* Modules
*/
var fs = require('fs');
var helpers = require('../helpers');
var Node = require('./node');
var Box = require('./box');
/**
* BigText
*/
function BigText(options) {
if (!(this instanceof Node)) {
return new BigText(options);
}
options = options || {};
options.font = options.font
|| __dirname + '/../../usr/fonts/ter-u14n.json';
options.fontBold = options.font
|| __dirname + '/../../usr/fonts/ter-u14b.json';
this.fch = options.fch;
this.ratio = {};
this.font = this.loadFont(options.font);
this.fontBold = this.loadFont(options.font);
Box.call(this, options);
if (this.style.bold) {
this.font = this.fontBold;
}
}
BigText.prototype.__proto__ = Box.prototype;
BigText.prototype.type = 'bigtext';
BigText.prototype.loadFont = function(filename) {
var self = this
, data
, font;
data = JSON.parse(fs.readFileSync(filename, 'utf8'));
this.ratio.width = data.width;
this.ratio.height = data.height;
function convertLetter(ch, lines) {
while (lines.length > self.ratio.height) {
lines.shift();
lines.pop();
}
lines = lines.map(function(line) {
var chs = line.split('');
chs = chs.map(function(ch) {
return ch === ' ' ? 0 : 1;
});
while (chs.length < self.ratio.width) chs.push(0);
return chs;
});
while (lines.length < self.ratio.height) lines.push([0, 0, 0, 0, 0, 0, 0, 0]);
return lines;
}
font = Object.keys(data.glyphs).reduce(function(out, ch) {
var lines = data.glyphs[ch].map;
out[ch] = convertLetter(ch, lines);
return out;
}, {});
delete font[' '];
return font;
};
BigText.prototype.setContent = function(content) {
this.content = '';
this.text = content || '';
};
BigText.prototype.render = function() {
if (this.position.width == null || this._shrinkWidth) {
// if (this.width - this.iwidth < this.ratio.width * this.text.length + 1) {
this.position.width = this.ratio.width * this.text.length + 1;
this._shrinkWidth = true;
// }
}
if (this.position.height == null || this._shrinkHeight) {
// if (this.height - this.iheight < this.ratio.height + 0) {
this.position.height = this.ratio.height + 0;
this._shrinkHeight = true;
// }
}
var coords = this._render();
if (!coords) return;
var lines = this.screen.lines
, left = coords.xi + this.ileft
, top = coords.yi + this.itop
, right = coords.xl - this.iright
, bottom = coords.yl - this.ibottom;
var dattr = this.sattr(this.style)
, bg = dattr & 0x1ff
, fg = (dattr >> 9) & 0x1ff
, flags = (dattr >> 18) & 0x1ff
, attr = (flags << 18) | (bg << 9) | fg;
for (var x = left, i = 0; x < right; x += this.ratio.width, i++) {
var ch = this.text[i];
if (!ch) break;
var map = this.font[ch];
if (!map) continue;
for (var y = top; y < Math.min(bottom, top + this.ratio.height); y++) {
if (!lines[y]) continue;
var mline = map[y - top];
if (!mline) continue;
for (var mx = 0; mx < this.ratio.width; mx++) {
var mcell = mline[mx];
if (mcell == null) break;
if (this.fch && this.fch !== ' ') {
lines[y][x + mx][0] = dattr;
lines[y][x + mx][1] = mcell === 1 ? this.fch : ' ';
} else {
lines[y][x + mx][0] = mcell === 1 ? attr : dattr;
lines[y][x + mx][1] = ' ';
}
}
lines[y].dirty = true;
}
}
return coords;
};
/**
* Expose
*/
module.exports = BigText;

View File

@ -61,8 +61,12 @@ function Video(options) {
this.now = Date.now() / 1000 | 0;
this.start = opts.start || 0;
if (this.start) {
if (shell === 'mplayer') {
opts.args.unshift('-ss', this.start + '');
} else if (shell === 'mpv') {
opts.args.unshift('--start', this.start + '');
}
}
var DISPLAY = process.env.DISPLAY;
delete process.env.DISPLAY;
@ -91,7 +95,11 @@ function Video(options) {
var watched = (Date.now() / 1000 | 0) - self.now;
self.now = Date.now() / 1000 | 0;
self.start += watched;
if (shell === 'mplayer') {
opts.args.unshift('-ss', self.start + '');
} else if (shell === 'mpv') {
opts.args.unshift('--start', self.start + '');
}
var DISPLAY = process.env.DISPLAY;
delete process.env.DISPLAY;

30
test/widget-bigtext.js Normal file
View File

@ -0,0 +1,30 @@
var blessed = require('../')
, screen;
screen = blessed.screen({
dump: __dirname + '/logs/bigtext.log',
smartCSR: true
});
var box = blessed.bigtext({
parent: screen,
content: 'Hello',
shrink: true,
width: '80%',
// height: '80%',
height: 'shrink',
// width: 'shrink',
border: 'line',
fch: ' ',
style: {
fg: 'red',
bold: false
}
});
screen.key('q', function() {
return process.exit(0);
});
screen.render();

1
usr/fonts/AUTHORS Normal file
View File

@ -0,0 +1 @@
Dimitar Zhekov <dimitar.zhekov@gmail.com>

94
usr/fonts/LICENSE Normal file
View File

@ -0,0 +1,94 @@
Copyright (c) 2014 Dimitar Toshkov Zhekov,
with Reserved Font Name "Terminus Font".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

340
usr/fonts/README Normal file
View File

@ -0,0 +1,340 @@
NOTE: This directory contains the terminus font compiled to a JSON format.
Contents:
1. About.
1.1. Quick installation.
1.2. Legend.
1.3. Variants.
1.4. Notes.
2. Linux console.
2.1. consoletools.
2.2. kbd.
2.3. Quick reference.
2.4. Legend.
2.5. Notes.
3. UNIX console.
3.1. bsd-pcvt.
3.2. Legend.
3.3. Notes.
4. X11 Window System.
4.1. Installation.
4.2. Notes.
5. Frequently Asked Questions.
6. Legal information.
6.1. Licenses.
6.2. Copyright.
1. About.
This archive contains source code for generating and installing Terminus
Font for Linux console, BSD console and X11 Window System.
- version 4.39
- sizes 6x12, 8x14, 8x16, 10x18, 10x20, 11x22, 12x24, 14x28, 16x32
- styles normal, bold, EGA/VGA bold
- characters 891
- format Bitmap Distribution Format (BDF) version 2.1
The character set covers about 120 language sets and supports ISO8859-1/2/5/
7/9/13/15/16, Paratype-PT154/PT254, KOI8-R/U/E/F, Esperanto and many IBM,
Windows and Macintosh code pages, as well as the IBM VGA, vt100 and xterm
pseudographic characters.
1.1. Quick installation.
The commands:
$ ./configure [--prefix=PREFIX]
$ make
# make install fontdir
compile and install the Linux console and X11 Window System fonts.
The default PREFIX is /usr/local.
1.2. Legend.
The file names are structured as follows:
ter-u<SIZE><STYLE>.bdf
where <SIZE> is the font height, and <STYLE> is n for normal (all sizes), b
for bold (all sizes except 6x12) and v for EGA/VGA bold (8x14 and 8x16 only,
makes use of the eight character matrix column).
1.3. Variants.
Some characters are implemented in two variants. To use the alternate
variant, execute:
$ patch -p1 -i alt/<NAME>.diff
before installation. See the font page for examples about the differences.
If you want to combine hi2 with dv1 and/or ka2, apply hi2 and then hi2-dv1
and/or hi2-ka2.
1.4. Notes.
The commands marked with $ can be executed by a regular user.
The configure commands are optional.
The make commands require GNU make.
A lot of characters are available only under X11/ISO10646-1 (UTF+8/Unicode).
Sizes 6x12, 11x22, 14x28-bold and 16x32-normal are worse than the others.
Avoid them.
210E and 210F are not italic.
2. Linux console.
- sizes all available, see "About"
- styles normal, bold, framebuffer-bold
- code pages ISO8859-1/ISO8859-15/Windows-1252, ISO8859-2/Windows-1250,
Windows-1251/ISO8859-5, ISO8859-9/Windows-1254, ISO8859-16,
ISO8859-7/Windows-1253, ISO8859-13/Windows-1257, IBM-437,
Bulgarian-MIK, KOI8-R, KOI8-U, Paratype-PT154, combined
- format PC Screen Font (PSF) with unicode data
2.1. consoletools.
$ ./configure [--prefix=PREFIX | --psfdir=DIRECTORY]
$ make psf
# make install-psf
The files are compressed with gzip and installed in DIRECTORY. The default
DIRECTORY is PREFIX/share/consolefonts. Requires Perl.
If you lack mappings for Windows-1252/1250/1251/1254/1253/1257, ISO8859-16,
IBM-437, KOI8-R, Bulgarian-MIK or Paratype-PT154/PT254, also run:
$ ./configure [--prefix=PREFIX | --acmdir=DIRECTORY]
$ make txt
# make install-acm
The default DIRECTORY is PREFIX/share/consoletrans. Requires awk.
Uninstallation of the mappings is not supported. To load a font:
$ consolechars [-m MAPPING] -f ter-<X><SIZE><STYLE>
where <X> is a character identifying the code page as listed in p.2.4.
2.2. kbd.
$ ./configure [--psfdir=DIRECTORY]
$ make psf
# make install-psf
where DIRECTORY should be either PREFIX/lib/kbd/consolefonts or
PREFIX/share/kbd/consolefonts, depending on kbd version. Missing mappings
are installed with:
$ ./configure [--prefix=PREFIX | --unidir=DIRECTORY]
$ make txt
# make install-uni
The default DIRECTORY is PREFIX/share/kbd/consoletrans. Requires awk. To
load a font:
$ setfont [-m MAPPING] ter-<X><SIZE><STYLE>
where <X> is a character identifying the code page as listed in p.2.4.
2.3. Quick reference.
The commands:
$ ./configure [--prefix=PREFIX | --psfdir=DIRECTORY | --ref=FILENAME]
# make install-ref
install the text from p.2.4 as FILENAME (the default is README.terminus)
in DIRECTORY.
2.4. Legend.
names mappings covered codepage(s)
ter-1* iso01, iso15, cp1252 ISO8859-1, ISO8859-15, Windows-1252
ter-2* iso02, cp1250 ISO8859-2, Windows-1250
ter-7* iso07, cp1253 ISO8859-7, Windows-1253
ter-9* iso09, cp1254 ISO8859-9, Windows-1254
ter-c* cp1251, iso05 Windows-1251, ISO8859-5
ter-d* iso13, cp1257 ISO8859-13, Windows-1257
ter-g* iso16 ISO8859-16
ter-i* cp437 IBM-437
ter-k* koi8r KOI8-R
ter-m* mik Bulgarian-MIK
ter-p* pt154 Paratype-PT154
ter-u* koi8u KOI8-U
ter-v* all listed above all listed above and many others (about 110
and many others language sets), 8 foreground colors
names style
ter-*n normal
ter-*b bold
ter-*f framebuffer-bold
2.5. Notes.
The combined code page is based on IBM-437 (character 0xFF is ogonek).
The ISO8859-16 font also includes all letters and accents from Windows-1250.
3. UNIX console.
- sizes 8x14 and 8x16 only
- styles normal, bold, framebuffer-bold
- code pages ISO8859-1/Windows-1252, ISO8859-2, ISO8859-5, ISO8859-7,
ISO8859-9/Windows-1254, ISO8859-13, ISO8859-15, ISO8859-16,
Windows-1251, IBM-437, KOI8-R, KOI8-U, Paratype-PT154
- format raw data
3.1. bsd-pcvt.
$ ./configure [--prefix=PREFIX | --rawdir=DIRECTORY]
$ make raw
# make install.raw
or, for file names with minus instead of period:
# make install-raw
The default DIRECTORY is PREFIX/share/misc/pcvtfonts. The fonts are
installed uncompressed. Requires Perl. To load a font:
$ loadfont -f /usr/share/misc/pcvtfonts/ter-<X><STYLE>.8<SIZE>
or, for file names with minus instead of period:
$ loadfont -f /usr/share/misc/pcvtfonts/ter-<X><STYLE>-8x<SIZE>
where <X> is a character identifying the code page as listed in p.3.2.
3.2. Legend.
names covered codepage(s)
ter-1* ISO8859-1, Windows-1252
ter-2* ISO8859-2
ter-5* ISO8859-5
ter-7* ISO8859-7
ter-9* ISO8859-9, Windows-1254
ter-c* Windows-1251
ter-d* ISO8859-13
ter-f* ISO8859-15
ter-g* ISO8859-16
ter-i* IBM-437
ter-k* KOI8-R
ter-p* Paratype-PT154
ter-u* KOI8-U
names style
ter-*n normal
ter-*b bold
ter-*f framebuffer-bold
3.3. Notes.
The RAW font contains data only and should be compatible with all UNIX
systems. If any of the bold fonts doesn't look good try framebuffer-bold,
or, if you are using an EGA/VGA adapter, program it to to clear column 8 of
the character matrix (attribute controller register 0x10 bit 0x02).
4. X11 Window System.
- sizes all available, see "About"
- styles normal, bold
- code pages ISO8859-1/Windows-1252, ISO8859-2, ISO8859-5, ISO8859-7,
ISO8859-9/Windows-1254, ISO8859-13, ISO8859-15, ISO8859-16,
Windows-1251, KOI8-R, KOI8-U, Paratype-PT154, ISO10646-1
- format Portable Compiled Font (PCF)
4.1. Installation.
$ ./configure [--prefix=PREFIX | --x11dir=DIRECTORY]
$ make pcf
# make install-pcf
The files are compressed with gzip and installed in DIRECTORY. The default
DIRECTORY is PREFIX/share/fonts/terminus. Requires Perl and bdftopcf.
A copy of the normal 6x12 font is installed as "bold", because some X11
libraries and applications substitute the missing bold fonts by shifting the
normal fonts, and others do not recognize the bold style at all if the
lowest font size lacks it. To install only the normal font, use "n12"
instead of "pcf" in the above commands.
To update the font cache in DIRECTORY after (un)installation, run:
# make fontdir
The configuration file which lists the font directories must contain
DIRECTORY. If xfs or the X-server were active during the installation, they
should be restarted so the font list can be updated.
4.2. Notes.
The ISO8859-1 and ISO8859-9 fonts contain the Windows Western characters and
can be used as Windows-1252 and Windows-1254 respectively.
5. Frequently Asked Questions.
Q. Italic version?
A. No. The quality is significantly lower, and preserving the font width
requires overlapping characters, which are not handled very well by X11/Xft.
If you need it than much, try mkitalic from FreeBSD or bdfslant from Debian.
Q. Scalable version?
A. Long story short, when the average display resolution becomes at least
150 DPI. Prefferably 200.
Q. How about some new characters?
A. Contact me and be ready to help.
Q. The bold 6x12 font...
A. ...does not exist, there is no space for a bold font in a 6x12 matrix.
However, the "normal" font is somewhere between.
Q. The font works in X11/Motif, but not in GNOME/KDE/Xfce.
A. Try adding 75-yes-terminus.conf to the Fontconfig configuration files.
See also mkfontscale(1), mkfontdir(1), fc-cache(1), xorg.conf(5), xfs(1),
xlsfonts(1), fonts-conf(5) etc.
6. Legal information.
6.1. Licenses.
Terminus Font is licensed under the SIL Open Font License, Version 1.1.
The license is included as OFL.TXT, and is also available with a FAQ at:
http://scripts.sil.org/OFL
The files configure, configure.help, bdftopsf.pl and ucstoany.pl are
distributed under the GNU General Public License version 2.0 or (at your
choice) any later version.
6.2. Copyright.
Terminus Font 4.39, Copyright (C) 2014 Dimitar Toshkov Zhekov.
Report bugs to <dimitar.zhekov@gmail.com>
Thanks to Anton Zinoviev, Tim Allen, Kir Koliushkin, Antonios Galanopoulos
and all the others who helped.

17826
usr/fonts/ter-u14b.json Normal file

File diff suppressed because it is too large Load Diff

17826
usr/fonts/ter-u14n.json Normal file

File diff suppressed because it is too large Load Diff