Blessed "Prompt" 默认情况下是黑底黑字 - 我该如何设置它的样式?
Blessed "Prompt" is black on black by default - how do I style it?
我正在使用 blessed 并且正在尝试向我的应用程序添加提示。它工作正常,但我无法阅读其文本。我准备了一个最小的例子,它说明了我所看到的。
我想知道如何设置输入文本的样式。 style-Attributes as mentioned in the docs 似乎没有效果。
这是我看到的(输入框和两个按钮上都有文字,但黑底黑字)。
下面是使用标准终端和标准主题在 Debian 9 上重现错误的代码:
var blessed = require('blessed');
var screen = blessed.screen({});
var prompt = blessed.prompt({
left: 'center',
top: 'center',
height: 'shrink',
width: 'shrink',
border: 'line',
});
screen.append(prompt);
screen.key(['q', 'C-c'], function quit() {
return process.exit(0);
});
screen.render();
prompt.input('Search:', 'test', function() {});
我在 Win 10 和 Ubuntu 16 上试过这个示例。我对您的代码所做的唯一更改是 screen
定义已移动到 promt
定义之前(没有它我得到 'No active screen' 错误),并且我还根据文档添加了样式。我的复制品:
1) 运行 npm install blessed
在空文件夹中
2) 使用以下代码在该文件夹中创建 index.js
var blessed = require('blessed');
var screen = blessed.screen({});
var prompt = blessed.prompt({
left: 'center',
top: 'center',
height: 'shrink',
width: 'shrink',
border: 'line',
style: {
fg: 'blue',
bg: 'black',
bold: true,
border: {
fg: 'blue',
bg: 'red'
}
}
});
screen.append(prompt);
screen.key(['q', 'C-c'], function quit() {
return process.exit(0);
});
screen.render();
prompt.input('Search:', 'test', function() {});
3) 运行 node index
4) 得到
是你想要的吗?
免责声明:我对 blessed
代码库不是很熟悉,因此可能有更原生的方法来执行此操作。如果没有,那么听起来应该请求/实施此功能。
观察 1 - 您终端的颜色设置导致了这个问题
根据您提供的屏幕截图,您终端的默认颜色是黑色前景和白色背景。如果您在终端设置中反转它,您应该能够看到预期的行为。
但是!您的应用程序应该不管用户的设置是什么,所以这不是一个好的解决方案...
观察 2 - Prompt
构造函数对其具有黑色背景的子项进行硬编码
如有疑问,请转到the source!这是截至 2017 年 9 月 30 日的 prompt.js
的一部分:
// ...
function Prompt(options) {
// ...
Box.call(this, options);
this._.input = new Textbox({
// ...
bg: 'black'
});
this._.okay = new Button({
// ...
bg: 'black',
hoverBg: 'blue',
});
this._.cancel = new Button({
// ...
bg: 'black',
hoverBg: 'blue',
});
}
// ...
因此,似乎解决问题的唯一方法是在创建 Prompt
后覆盖这些子样式属性。
解决方案 1 - 创建后覆盖子样式属性
创建提示后,您可以覆盖每个子项的样式。将前景设为白色(应该是)可能是最直接的...
另外,为了便于维护,这个 hack 确实应该在它自己的函数中。
function createBlessedPrompt(options) {
var prompt = blessed.prompt(options);
// NOTE - Not sure if blessed has some sortof `children()` selector.
// If not, we probably should create one.
// Nevertheless, temporarily hardcoding the children here...
//
var promptChildren = [prompt._.input, prompt._.okay, prompt._.cancel];
promptChildren.forEach(x => {
Object.assign(x.style, {
fg: 'white',
bg: 'black'
});
});
return prompt;
}
解决方案 2 - 向 blessed 存储库提交错误修复
这似乎真的是 blessed 本身的问题。如果你能想到 Prompt
应该正确处理这种情况的方法,你应该完全帮助你的编码员并写一个问题/拉取请求来解决这个问题。
祝你好运!
我正在使用 blessed 并且正在尝试向我的应用程序添加提示。它工作正常,但我无法阅读其文本。我准备了一个最小的例子,它说明了我所看到的。
我想知道如何设置输入文本的样式。 style-Attributes as mentioned in the docs 似乎没有效果。
这是我看到的(输入框和两个按钮上都有文字,但黑底黑字)。
下面是使用标准终端和标准主题在 Debian 9 上重现错误的代码:
var blessed = require('blessed');
var screen = blessed.screen({});
var prompt = blessed.prompt({
left: 'center',
top: 'center',
height: 'shrink',
width: 'shrink',
border: 'line',
});
screen.append(prompt);
screen.key(['q', 'C-c'], function quit() {
return process.exit(0);
});
screen.render();
prompt.input('Search:', 'test', function() {});
我在 Win 10 和 Ubuntu 16 上试过这个示例。我对您的代码所做的唯一更改是 screen
定义已移动到 promt
定义之前(没有它我得到 'No active screen' 错误),并且我还根据文档添加了样式。我的复制品:
1) 运行 npm install blessed
在空文件夹中
2) 使用以下代码在该文件夹中创建 index.js
var blessed = require('blessed');
var screen = blessed.screen({});
var prompt = blessed.prompt({
left: 'center',
top: 'center',
height: 'shrink',
width: 'shrink',
border: 'line',
style: {
fg: 'blue',
bg: 'black',
bold: true,
border: {
fg: 'blue',
bg: 'red'
}
}
});
screen.append(prompt);
screen.key(['q', 'C-c'], function quit() {
return process.exit(0);
});
screen.render();
prompt.input('Search:', 'test', function() {});
3) 运行 node index
4) 得到
是你想要的吗?
免责声明:我对 blessed
代码库不是很熟悉,因此可能有更原生的方法来执行此操作。如果没有,那么听起来应该请求/实施此功能。
观察 1 - 您终端的颜色设置导致了这个问题
根据您提供的屏幕截图,您终端的默认颜色是黑色前景和白色背景。如果您在终端设置中反转它,您应该能够看到预期的行为。
但是!您的应用程序应该不管用户的设置是什么,所以这不是一个好的解决方案...
观察 2 - Prompt
构造函数对其具有黑色背景的子项进行硬编码
如有疑问,请转到the source!这是截至 2017 年 9 月 30 日的 prompt.js
的一部分:
// ...
function Prompt(options) {
// ...
Box.call(this, options);
this._.input = new Textbox({
// ...
bg: 'black'
});
this._.okay = new Button({
// ...
bg: 'black',
hoverBg: 'blue',
});
this._.cancel = new Button({
// ...
bg: 'black',
hoverBg: 'blue',
});
}
// ...
因此,似乎解决问题的唯一方法是在创建 Prompt
后覆盖这些子样式属性。
解决方案 1 - 创建后覆盖子样式属性
创建提示后,您可以覆盖每个子项的样式。将前景设为白色(应该是)可能是最直接的...
另外,为了便于维护,这个 hack 确实应该在它自己的函数中。
function createBlessedPrompt(options) {
var prompt = blessed.prompt(options);
// NOTE - Not sure if blessed has some sortof `children()` selector.
// If not, we probably should create one.
// Nevertheless, temporarily hardcoding the children here...
//
var promptChildren = [prompt._.input, prompt._.okay, prompt._.cancel];
promptChildren.forEach(x => {
Object.assign(x.style, {
fg: 'white',
bg: 'black'
});
});
return prompt;
}
解决方案 2 - 向 blessed 存储库提交错误修复
这似乎真的是 blessed 本身的问题。如果你能想到 Prompt
应该正确处理这种情况的方法,你应该完全帮助你的编码员并写一个问题/拉取请求来解决这个问题。
祝你好运!