戻る

Emacsでいろいろ作業する

私はエディタではnano派です。(キリッ!)
とはいえ,CLI・CUIを突き詰めるのであればEmacsも知っておいた方がいいですし,結構やれることも多いので,packageという外部プログラムの導入も楽になっていることだし,これを気に勉強してみようという話です。

package.elの導入?(emacs23以前)

emacs24以降はパッケージ管理ツールであるpackage.elが標準インストールされていますが,emacs23以前では標準ではないので,インストールしておく必要があります。
次に標準インストールされたpackage.elでは,GNU ELPAしか使えないので,他のサイト,たとえばMELPA Stableを使えるようにします。

.emacs.d/init.el に以下の記述を加えます。
(when (require 'package nil t)
  (add-to-list 'package-archives
    '("melpa-stable" . "https://stable.melpa.org/packages/"))
  (package-initialize))
ここでemacsを再起動。
「C-h v package-archives」でpackage-archivesの値として「("melpa-stable" . "https://stable.melpa.org/packages/")」が表示されるかどうかチェックしておきます。

パッケージから導入

「M-x list-packages」で導入できるパッケージが示されます。
「M-x package-install」と打つと,何をインストールするのか聞かれるので,インストールしたいパッケージを入力すると,インストールされます。

mastodonパッケージを導入

「M-x package-install」return「mastodon」return
その後, .emacs.d/init.el に
「(setq mastodon-instance-url "(サーバーのURI)") (mastodon-active-user "(ユーザー名)")」
を加えてから,Emacsを再起動し,「M-x mastodon」と打つと,mastodonを読めるようになるはず……なのですが……。
どうも最初の1回,目的のサーバーからトークンをとって来なければならず,そのトークンは自動で取得できるはずなのに,取得したトークンでは動かないという状況が存在しており,どうもmastodonのサーバーのAPIにアクセスする必要があって……。

さて,今,手元には mastodon.plstore というファイルができていて,それっぽい情報も入っているんですが……。
;;; public entries -*- mode: plstore -*- 
((
"mastodon-https:(目標のサーバー)" 
:client_id "(文字列1)" 
:client_secret "(文字列2)" 
:id "(数列1)" 
:name "mastodon.el" 
:redirect_uri "urn:(文字列):wg:oauth:2.0:oob" 
:website "https://codeberg.org/martianh/mastodon.el" 
:vapid_key "(文字列)"
))
これ,どうやって取得できたんだっけ?
普通にemacsから最初の M-x masatodon でできたんだっけ?
それとも
MASTODON_HOST=...
CLIENT_NAME=...
curl -X POST -sS https://${MASTODON_HOST}/api/v1/apps \
  -F "client_name=${CLIENT_NAME}" \
  -F "redirect_uris=urn:ietf:wg:oauth:2.0:oob" \
  -F "scopes=read write follow"
を実行したんだったけ?

いずれにせよ,これかもしれないと思って,とあるシェルスクリプトを動かしてみることに
シェルスクリプトの内容はこんな感じ
#!/bin/sh

MASTODON_HOST=(目標のサイト)
CLIENT_ID=(文字列1)
CLIENT_SECRET=(文字列2)
USERNAME=(目標のサイトにおけるユーザー名)
PASSWORD=(目標のサイトにおけるそのユーザーのパスワード)
SCOPE=read%20write%20follow
curl -X POST -sS https://${MASTODON_HOST}/oauth/token \
  -d "client_id=${CLIENT_ID}&client_secret=${CLIENT_SECRET}&grant_type=password&username=${USERNAME}&password=${PASSWORD}&scope=${SCOPE}"
シェルスクリプトなので,
chmod +x (シェルスクリプト名)
で,実行権限を与えてあげて,
./(シェルスクリプト名) > neko.txt
とやると,neko.txtはこんな感じ
{
"access_token":"(文字列3)",
"created_at":(数列2),
"expires_in":(数列3),
"id":(数列4),
"me":"https://(目標のサイト)/users/(目標のサイトにおけるユーザー名)",
"refresh_token":"(文字列4)",
"scope":"read write follow",
"token_type":"Bearer"
}
……(文字列3)がアクセストークンってやつじゃないの?

というので,.emacs.d/init.elにさらに
(setq mastodon-auth--token "(文字列3)")
を加えて,emacsから M-x mastodon したら……。
Authorization Codeは何?って聞かれて,単にReturnしたら,
Unknown response from mastodon-auth--get-token って言われた……。

どこが違ったんだろう……?

(2024.4.7. 初版)
(2024.4.17. 改訂)

戻る