Atom」タグアーカイブ

Atom: Script to atom-runner

macOS で Atom を使おうとしたら Script パッケージのアップデートが。
適用したらエラーで動かなくなった、なんじゃそりゃ。
バグ報告は上がっているようなので修正を待つとするか。

いや、ぶっちゃけ気に入らない所も多かったし別の手段も考えよう。
せっかくなので自作、も考えたけどアウトプットパネルはどうしよう?
Gedit みたいに標準では付いていないみたいだし、うーん。
もっとシンプルなパッケージを探して参考にしようかなと。

オススメのatomパッケージ7選 – Qiita

atom-runner というのを試しに入れてみた。
これは別 Pane を使って出力するようだ、なるほど。
そのおかげかパッケージもシンプルで素敵。

てゆーか、コイツは shebang どおりにスクリプトを実行してくれるヤン!
対応言語なんて shebang を書くなら設定不要、拡張子無しもイケる。
何だよ自分で作らなくてもいいジャン、こいつを今度から使うことにする。

ただデフォルトの状態だと何か表示が変、無駄な余白がある。
下側ピッチリに表示させたいんだけど。

Atom-Runner, Moving output pane to right side – support – Atom Discussion

こんなのを見つけた。
試してみると -4 に指定すれば下に出るようになるな。

#pane = panes[panes.length - 1][dirfunc](view)
pane = panes[panes.length - 4][dirfunc](view)

それとカレントディレクトリが全部ルート (/) になるんだが。
ファイルの場所を指定するには、新しいペインを表示する前に記憶すりゃいいかも。

  run: (selection) ->
    # add
    path = atom.workspace.getActivePaneItem()?.buffer?.file?.path
    @cwd = p.dirname(path)

##################################

    try
      '''dir = atom.project.getPaths()[0] || '.'
      try
        if not fs.statSync(dir).isDirectory()
          throw new Error("Bad dir")
      catch
        dir = p.dirname(dir)
      @child = spawn(cmd, args, cwd: dir)'''
      @child = spawn(cmd, args, {cwd: @cwd})

それと esc を押したら Pane も削除してほしいな。
https://flight-manual.atom.io/api/v1.41.0/Pane/
Pane.destroy() でペインは削除できるようだ。

  stopAndClose: ->
    {pane, view} = @runnerView()
    pane?.removeItem(view)
    pane?.destroy() # add
    @stop(view)

よし後は run:file を F5 に割り付けして。

理想どおりになったけどかなり改造してしまった。
Atom を使う人はプログラマーだからこんな改造はみんなできるよね。

Catalina Atom JavaScript

おいおい、Atom の Script パッケージって…

Script はシバンを書かなければパスを通した node.js で実行するようです。
シバンを osascript に指定してもパラメーターは node.js 用のまま。
どういうことだってばよ。

右下にある言語の所をクリックし

JavaScript for Automamation (jxa)

を選択すれば osascript 用のパラメーターになるようです。

こんなのを毎回やるのなんて面倒臭いぞ。
ということで vim-modeline を使うことにする。

#!/usr/bin/osascript

console.log('Hello');

// vim:set ft=js.jxa

vim 屋は最終行に書いている場合が多いので合わせてみた。
Atom のみならこの表記でいい、本家 vim を併用している人は困るかも。
書き込んだ後に開き直すか option+control+V を押す。

問題なく JXA で起動できるようになります。
普通にシバンどおりに実行してくれたほうが嬉しいのに。

ところで node.js なんだけど。

普通にダウンロードしテキトーに置いた奴は起動できなくなっていた。
上記は以前試した graalvm に入っていた奴なんだけどね。
Gatekeeper がどんどん厳しくなるなぁ。
正式な手段でインストールしないと全部弾かれるようになったみたい。

macOS Catalinaでnode.jsをインストール – Qiita
node.jsのversionを管理するためにnodebrewを利用する – Qiita

curl -L git.io/nodebrew | perl - setup

を実行すると ~/.nodebrew が作られる。
筆者は zsh に変更したので ~/.zshrc にパスを書き込む。
しかし mac 屋は何故ドットコマンドではなく source を使うのか?

. ~/.zshrc

Node.js

コレを書いた時点の LTS は 10.16.3 である。

# ~/.nodebrew/src にバイナリでダウンロード
# ~/.nodebrew/node に展開
nodebrew install-binary v10.16.3

# ~/.nodebrew/current のリンク先を指定先に変更する
# ~/.nodebrew/current/bin に nodebrew 自体のリンクを貼る
nodebrew use v10.16.3

全部 $HOME 以下に展開されるけど問題なく使えるようになった。
Gatekeeper の仕組みがイマイチわからないな。

Atom zsh

おいおい、Atom の Script パッケージって…

zsh は日本語を一文字扱いしないのかと一瞬思ってしまったジャン。
パッケージが日本語を正しく扱えないということみたいね。

Python – 日本語が出力されない(atom、python)|teratail

あれ?
筆者は Python で文字化けしたことなんて無いんだけーが。
Python3 しか使わないからなのかな、まあいいや。

ようするにこのパッケージは初期化設定を読み込まないってことみたい。
Shell なのでとりあえず init.coffee に以下を追記し再起動。

process.env.LANG = 'ja_JP.UTF-8';

なんだコレだけだった。
キチンと zsh で起動しているね、よかったこれで使える。

# 追記
上記をやると spell-check パッケージがエラーを吐く。
日本語環境では無意味なものだし無効にとこうね。

Open Terminal in Atom and Gedit

macOS 上の Atom で Terminal.app を一発で開きたい。
もちろん編集中ファイルの位置をカレントディレクトリにして。
Gedit, VScode には最初からその機能があったけど Atom には無いのね。

早速拡張をインス、、、、、なんてしないよ。
拡張のインストールネタをやっている輩は何もアプリが作れない人だけです(暴言)
プログラミングの実力は経験値だけなのに他人が作ったものに頼っている時点でねぇ。

それと Atom ウインドウ内部で開くターミナルを勧めている輩は何だよ。
debug 目的なんだから別プロセスにしなきゃ困るだろ、と思うんだが。
って、それは別の話ということで。

Atom は Node.js 製なので child_process.exec が使える。
Gjs, jjs, JXA, Node.js – L’Isola di Niente
後はカレントディレクトリを得る手段さえ解ればアッサリ作れるはず。

いや、coffeescript という Atom の拡張以外の使い道が思いつかない言語が。。。。。
世の中にはレールなんとか以外の使い道がゼロの言語を推すみたいな人もいるけどさ。
面倒だ、既存拡張のソースを見てしまえ!

GitHub – blueimp/atom-open-terminal-here: Open the Terminal (Mac OS X, Linux) or Command Prompt (Windows) in the given directory via context menu or keyboard shortcut in the Atom text editor.

index.coffee を見る。
child_process.exec は coffeescript ではこう書けばいいのか。
atom.workspace.getActivePaneItem() から辿って編集中パスが得られるようだ。
x-terminal-emulator って何かと調べたらサル専用ディストリだけじゃん。
サルブンツ以外の Linux 使いは結局自分で作らないといけなかったわwwwww

そういえばテンプレートリテラルは coffeescript ではどう描くの?
Template literals in Coffeescript (Example)
ダブルクォートとシャープって何よ、JS と同じバッククォートとドルでいいじゃん。
従うしかないけーが、ダブルクォートのエスケープめんどいな。

Atom を Gedit のように使う – L’Isola di Niente
これに追記する。

init.coffee

atom.commands.add 'atom-text-editor', 'editor:open-terminal', ->
    path = atom.workspace.getActivePaneItem()?.buffer?.file?.path
    dirname = require('path').dirname(path)
    require('child_process').exec "open -a Terminal \"#{dirname}\""

keymap.cson

'atom-workspace atom-text-editor:not([mini])':
    #etc...
    'alt-cmd-t': 'editor:open-terminal'

command+option+T で Terminal.app を開く機能追加おしまい。
ほとんどコピペだけどこの手段が解ってしまえば応用もできるし書き方も覚えた。
経験値はこんなことの積み重ねです。

ちなみに筆者は自前拡張呼び出しは command+option+* に統一している。
Gedit では Ctrl+Alt+* と同じように統一している。
Gedit 及び Eye of Gnome プラグイン – L’Isola di Niente
そうでもしないと自分で指定したはずのキーを結構忘れるんですよコレが。
拡張を沢山インストールって人は他人が決めたキーを全部覚えるのだろうか?

おまけ。

Gedit にこの機能は最初からあるけど 3.32 は起動すると stderr を吐く。
端末から gnome-terminal と打って起動すれば同じ stderr を吐くのが解る。
ということで標準の外部ツールを書き換えしましょう。

#!/bin/sh

gnome-terminal --working-directory=$GEDIT_CURRENT_DOCUMENT_DIR > /dev/null 2>&1 &

Ctrl+Alt+T にして入出力はすべて無しに。
これで stderr の赤い出力が出なくなるのでボトムパネルも開かなくなります。

Hello Atom

PyObjC Tips の作成が全然進まない。
原因は解っている、Visual Studio Code がイライラするからだ!
無効にしても無効にしても意図しない補完を勝手にされるのはもうウンザリ。
でも mac のエディタってイマイチなものしか。。。

そういえば Atom って初期の超不安定な頃のしか試していないや、と。
最近のはどうなっているのかな、検索してみよう。

GitHub、無償コードエディター「Atom 1.31」を正式公開 ?ファイルツリーに多くの改善 – 窓の杜

シバンでファイルの見分けができるようになっているようだ。
何だよ、vscode よりコッチのほうが絶対にいいじゃん。

Atom

早速 macOS 版 1.38 をインストール。
触り始めでレビューしても無意味なので二週間ほど使い込む。
その間、徹底的に Gedit 風にカスタマイズ。

Atom を Gedit のように使う – L’Isola di Niente

こうなった。
何だこれ、vscode での不満が全部解決したぞ。

script というシンプルな名前のパッケージが本当に素敵!
モードラインが使える!
自作Geditプラグインの html_escape が関数追加だけで使える!
coffeescript を少し調べる必要があったけど JavaScript が解るなら簡単!
イライラするだけの余計な補完をしない(超重要!)

ということで乗り換え決定。
ただひとつ、拡張関数は js でよくね?