3

\t在将数据推送到我的手表(使用 SimplyJS)时,我正在尝试让我的 Pebble 手表遵守转义序列字符,这很有趣。

以下片段是我一直在使用的代码:

simply.scrollable(true);
simply.style('small');
simply.fullscreen(true);

var aflLadderUrl = 'http://www.sportal.com.au/feeds/sss/afl_ladder.json';

var ladderContent = '';

ajax({ url: aflLadderUrl, type: 'json'}, 
  function(data) {
   var i = 0;
   while (i < 18){
     ladderContent = ladderContent + data.ladder[i].friendly_name + '\t\t\t' + data.ladder[i].percentage + '\n';
        i++;  
   } 
   simply.text({
     title: 'AFL Ladder',
     body: ladderContent
   });
  }, 
  function() {
   simply.text({
    title: 'AFL Ladder',
    body: 'No internet connection'
   });
  }
);

我目前正在观察的是,\n正在兑现,我可以看到在我的手表上,每一行数据都显示在单独的行上。但是,似乎 my\t被忽略了,而不是在我的行中插入选项卡,而是显示零空格(即'my name is' + '\t\t\t' + 'dave'显示为my name isdave)。

我还尝试仅使用 Pebble SDK 编译 Hello World 程序(从https://github.com/kristofvc/pebble-hello-world/blob/master/src/pebble_hello_world.c\t\t获取代码并添加几个要在第 11 行打印的字符串)并且还注意到 SDK支持\n字符而不是\t字符(就像我的 SimplyJS 应用程序一样)。

我的问题是:是否可以让 Pebble(通过 SDK 或 SimplyJS)以与打印到控制台时所期望的相同方式显示选项卡?我知道可能不支持 \t 字符,而不是使用\t我可以只使用空格,但这让我很好奇。

如果您需要更多信息,请告诉我。

提前致谢!

4

1 回答 1

2

因为\t是一个控制(不可打印)字符,所以它不对应于任何字形,并且不会始终如一地“显示”,如果有的话。例如,终端仿真器对它的解释与读取 TSV 文件的电子表格软件不同。听起来 Pebble 固件中将字节串转换为显示器上的像素的部分只是忽略了\t,尽管我在 SDK 文档中找不到这一点。

如果您使用的是固定宽度字体,则可以使用空格实现自己的制表符,如下所示:

var data = {ladder: [
  {friendly_name: "Cool Team", percentage: 80.0},
  {friendly_name: "Really Cool Team", percentage: 80.0},
  {friendly_name: "The Coolest Team of All", percentage: 80.0}
]}

var len = function(obj) {return obj.friendly_name.length}
var longer = function(a, b) {return len(a) > len(b) ? a : b}
var longestName = len(data.ladder.reduce(longer))

var tab = function(obj) { return new Array(longestName - len(obj) + 2).join(" ") }
var print = function(obj) { return obj.friendly_name + tab(obj) + obj.percentage }

var ladderContent = data.ladder.map(print).join("\n")
// Cool Team               80
// Really Cool Team        80
// The Coolest Team of All 80
于 2014-08-12T02:57:47.283 回答