事象
Atomのterminal-plusパッケージをインストール後、terminalを起動しようとしても、真っ暗なままでうんともすんとも言わない。
これをどうにかしたい。
(結論から言うと、たぶん terminusパッケージとか使ったほうが早いと思いますが、備忘として残しておきます)
環境
$ sw_vers
ProductName: macOS
ProductVersion: 11.2.3
BuildVersion: 20D91
$ node -v
v14.16.0
$ npm -v
6.14.11
% atom --version
Atom : 1.55.0
Electron: 6.1.12
Chrome : 76.0.3809.146
Node : 12.4.0
% apm show terminal-plus
terminal-plus
├── 0.14.5
├── https://github.com/jeremyramin/terminal-plus
├── A terminal package for Atom, complete with themes and more.
├── 999044 downloads
└── 709 stars
やったこと
~/.atom/packages/terminal-plus
での作業
- package.json書き換え
package.json
"dependencies": {
"atom-space-pen-views": "^2.1.0",
// "pty.js": "git+https://github.com/jeremyramin/pty.js.git#28f2667", // この行はを削除
"node-pty": ">= 0.1.0", // この行を追加
"term.js": "git+https://github.com/jeremyramin/term.js.git",
"underscore": "^1.8.3"
},
- requireするパッケージを変更
lib/process.coffee
# pty = require 'pty.js' # こっちはコメントアウトor削除
pty = require 'node-pty' #読み込むパッケージ名を変更したものを追加
path = require 'path'
fs = require 'fs'
_ = require 'underscore'
child = require 'child_process'
# (略)
$ npm install
$ apm rebuild
で事象が解消する。
何をしたか
- pty.jsはterminal-plusで参照されるパッケージ。その名の通り擬似端末をforkしてくれるもの。
- こちらはあまりメンテされておらず、最近のnode.jsではビルド1が(少なくとも手元の環境では)上手くいかない。
- pty.jsが更に参照しているnanのバージョンが古いままで、node10系以降では対応できていなかったり、pty.js自体のコードも古かったり。
- これを、pty.jsのフォークである node-pty に置き換えてしまう。
- node-ptyは割とアクティブにメンテされているようにみえるので、こちらを使うのがよさそう。
参考
- https://github.com/jeremyramin/terminal-plus
-
https://github.com/jeremyramin/pty.js
- terminal-plusが参照しているpty.js。
-
https://github.com/chjj/pty.js
- 上記のfork元。時折、package.jsonのdependencies部分更新のpull request 等が上がっているが、取り込みなどはされていない模様。
-
https://github.com/nodejs/nan/issues/763
- node v10以上だとbuildに失敗する件のissue。
-
https://github.com/microsoft/node-pty
- 今回差し替えたパッケージ。こちらも https://github.com/chjj/pty.js のフォーク
-
https://atom.io/packages/terminus
- node-ptyを使っているパッケージ。これだと一発で動く。
-
npm rebuild
のこと。 そもそも、apm install terminal-plus
の時点でエラーにならずインストール成功したり、terminal-plus起動時に明示的にエラーが出てこないのは何故かは理解できていない。。 ↩