Copy to Clipboard output を使った NotionCodeBlockByAlfred の作成 : hkob の雑記録 (124)

はじめに

hkob の雑記録の第124回目は、昨日紹介した Alfred Workflow の Copy to Clipboard output を使って Notion に CodeBlock を追加するショートカットを作成します。以前、Notion API を使った NotionCodeBlockShortcut を紹介しましたが、それの Alfred 版です。以前の記事はこちらになります。今回の Alfred 版の方が圧倒的に使い勝手がいいと思います。

hkob.hatenablog.com

前提条件

このアプリの利用条件は以下のとおりです。

  1. Notion のアプリ版を使っていること
  2. CodeBlock を追加したいページを開いており、その場所にカーソルが存在すること

逆にいうと、Notion API 版とは異なり、ページの途中に CodeBlock を挿入することも可能です。

ワークフローの作成

まずワークフローの全体図を示します。前から順番に解説します。

ワークフローの全体図

1. External trigger

最初は External trigger です。設定は以下のようになります。こちらは後で作成するショートカットのサービスから呼び出されるために、URL scheme を設定するものです。

External trigger

ここに書かれているように URL は以下のようになります。今回は引数は使わないので、? の前までが必要となります。

alfred://runtrigger/jp.ac.metro-cit.hkob/NotionCodeBlock/?argument=test

2. List Filter input

2番目は List Filter input です。設定画面は以下のようになります。言語の選択をするところです。

List Filter input

言語の部分は量が多いのでここに書いてあるように CSV ファイルを用意してドラッグしました。Notion API のものをそのまま持ってきたので、うまく動かないものもありました。例えば、shell はそのままではうまく動かず、bash とすると Shell が選ばれました。あと、自分が使わなそうな言語は後で外してしまおうと思います。

abap,,abap
arduino,,arduino
bash,,bash
basic,,basic
c,,c
clojure,,clojure
coffeescript,,coffeescript
c++,,c++
c#,,c#
css,,css
dart,,dart
diff,,diff
docker,,docker
elixir,,elixir
elm,,elm
erlang,,erlang
flow,,flow
fortran,,fortran
f#,,f#
gherkin,,gherkin
glsl,,glsl
go,,go
graphql,,graphql
groovy,,groovy
haskell,,haskell
html,,html
java,,java
javascript,,javascript
json,,json
julia,,julia
kotlin,,kotlin
latex,,latex
less,,less
lisp,,lisp
livescript,,livescript
lua,,lua
makefile,,makefile
markdown,,markdown
markup,,markup
matlab,,matlab
mermaid,,mermaid
nix,,nix
notion formula,,notion formula
objective-c,,objective-c
ocaml,,ocaml
pascal,,pascal
perl,,perl
php,,php
plain text,,plain text
powershell,,powershell
prolog,,prolog
protobuf,,protobuf
python,,python
r,,r
reason,,reason
ruby,,ruby
rust,,rust
sass,,sass
scala,,scala
scheme,,scheme
scss,,scss
shell,,shell
sql,,sql
swift,,swift
typescript,,typescript
vb.net,,vb.net
verilog,,verilog
vhdl,,vhdl
visual basic,,visual basic
webassembly,,webassembly
xml,,xml
yaml,,yaml

3. Arg and Vars utility

3番目は Arg and Vars utility です。今、入力されたデータが lang という変数に代入されます。

Arg and Vars utility

4. Launch Apps / Files action

4番目は Launch Apps / Files action です。これは単純で Notion.app を開くだけです。

Launch Apps / Files action

5. Copy to Clipboard output

5番目は Copy to Clipboard output です。

Copy to Clipboard output

中のテキストは以下のようにしました。Notion API 版では、CodeBlock は箇条書きのサブブロックに設定しています。テキスト貼り付けの場合、インデントをすることでサブブロックにすることはできるのですが、空行が含まれる時に CodeBlock から抜けてしまい、空行以降のテキストが標準テキストに戻ってしまいました。このため、今回はサブブロック化は諦めて同じ階層に記載することにしました。

- {datetime:long}

{clipboard}




6. Delay utility

当初は 5 までで終わっていたのですが、貼り付けた段階でこの部分が選択された状態になってしまい、連続して実行すると上書きされてしまうことに気づきました。そこで、カーソルを下に移動する作業を追加しました。しかし、すぐに実行してしまうと貼り付け処理が終わる前にカーソル移動が発生してしまい、思い通りの処理になりませんでした。そこで、Delay utility で 1 秒時間待ちをしています。

Delay utility

7. Dispatch Key Combo output

最後はカーソル移動を行う、Dispatch Key Combo output です。これはまだ紹介前でしたが、ここまで記事を書いてしまったので、使ってしまいます。見てわかるようにキーを押したことにする処理になります。これによって、貼り付けたコードブロックの下にカーソルが移動することになります。

Dispatch Key Combo output

サービスショートカットの作成

サービスを受けるショートカットは非常に簡単です。サービスで受け取ったものをクリップボードに書き込み、Alfred の URL scheme を呼び出すだけとなっています。

サービスを受けるショートカット

処理結果

せっかくなので動作の様子を動画にして X にポストしました。API 版よりキビキビ動いてかなりよい感じです。@now を使っていないので、秒まで表示されているのも嬉しい改良点になっています。

おわりに

今回は、昨日紹介した Copy to Clipboard output を使って、NotionCodeBlockByAlfred を作成しました。インデントがつかないのが残念ですが、Notion API 版よりも高速で便利です。

hkob.notion.site