Obsidianのデイリーノートに前の日次の日リンクを自動表示する

昨日の記事のスクリプトを少しだけ強化しました。
aita.hateblo.jp

右端に前の日と次の日へのリンクを表示します。

RunJSプラグインを使います。
昨日の記事を参照して導入し、スクリプトだけ以下のものに書き換えます。

```js RunJS="wareki"
main();

function main() {

    // 前回作成した要素を削除
    let elms = document.querySelectorAll('.mod-active .wareki-header');
    for (let elm of elms) {
        elm.remove();
    }

    const basename = app.workspace.getActiveFile()?.basename;
    // タイトルがyyyy-mm-ddのときのみ実行
    if (/^\d{4}-\d{2}-\d{2}.*$/.test(basename)) {
	let htmlL = new Date(basename).toLocaleDateString('ja-JP-u-ca-japanese', {
            era: 'long',
            year: 'numeric',
            month: 'long',
            day: 'numeric',
            weekday: 'short',
        });
        let htmlR = `<a href="javascript:app.commands.executeCommandById('daily-notes:goto-prev')">prev</a>`;
        htmlR += " ";
        htmlR += `<a href="javascript:app.commands.executeCommandById('daily-notes:goto-next')">next</a>`;

	// 新たな要素を作成
        const newElm = document.createElement('div');
        newElm.innerHTML = `<div style="float:left;">${htmlL}</div><div style="float:right;">${htmlR}</div>`;
        newElm.className = 'wareki-header';
        newElm.style.border = 'solid 1px #ddd';
        newElm.style.fontSize = 'smaller';
        newElm.style.padding = '2px 20px';

        // 新たな要素をタイトル下に挿入
        for (let titleElm of document.querySelectorAll(".mod-active .view-header")) {
            titleElm.after(newElm.cloneNode(true))
        }
    }
};
```

Obsidianのデイリーノートのヘッダに自動で和暦を表示する

日記にObsidianを使っています。
obsidian.md

デイリーノートのタイトルはyyyy-mm-ddにしていますが
それだけだと分かりにくいので和暦と曜日の情報を表示させてみました。

これにはRunJSプラグイン(と自作の簡単なスクリプト)を利用しました。
github.com

JavaScriptを実行するプラグインは色々ありますが
・DataViewプラグインはあらかじめノートに記入しておく
・Templaterプラグインは毎回手動でコマンドを実行する
必要があります。
RunJSプラグインはファイルを開くイベントを含め色々なイベントにスクリプトを登録でき、しかも修正すると自動再読み込みされるので、この用途では便利でした。

実現方法

まずはScripts_RunJSフォルダ(設定で変更可)を作成し
適当な名前のファイルを作成して画像のようにコードを貼り付けます。

```js RunJS="wareki"
main();

function main() {

    // 前回作成した要素を削除
    let elms = document.querySelectorAll('.mod-active .wareki-header');
    for (let elm of elms) {
        elm.remove();
    }

    const basename = app.workspace.getActiveFile()?.basename;
    // タイトルがyyyy-mm-ddのときのみ実行
    if (/^\d{4}-\d{2}-\d{2}.*$/.test(basename)) {

        // 新たな要素を作成
        const newElm = document.createElement('div');
        newElm.innerHTML =  new Date(basename).toLocaleDateString('ja-JP-u-ca-japanese', {
            era: 'long',  // 時代 : 'narrow' にすると '平成' は 'H' になる
            year: 'numeric',  // 年 : 'ja-JP-u-ca-japanese' の場合は和暦
            month: 'long',  // 月
            day: 'numeric',  // 日
            weekday: 'short',  // 曜日 : 'long' で '金曜日'・'short' で '(金)' になる
        });
        newElm.className = 'wareki-header';
        newElm.style.border = 'solid 1px #ddd';
        newElm.style.fontSize = 'smaller';
        newElm.style.padding = '2px 20px';

        // 新たな要素をタイトル下に挿入
        for (let titleElm of document.querySelectorAll(".mod-active .view-header")) {
            titleElm.after(newElm.cloneNode(true))
        }
    }
};
```

そしてRunJSの設定画面から
・Scripts folderに作成したフォルダ名Scripts_RunJSを、
・Auto startとEvent handler(workspace > file-open)にコードブロックで記載しているスクリプト名warekiを
指定すれば完了です。

うまくいっていれば冒頭の画像のように表示されます。


以上、ここではノートタイトルを利用した情報を表示しましたが
app.metadataCache.getFileCache(app.workspace.getActiveFile()).flontmatterで取得できるノートのプロパティや
await app.vault.adapter.read()で読み込んだCSVを利用すると
より多彩な情報を自動表示できて面白いと思います。

Evernoteのノートリンクを取得するiOSショートカット

タイトルの通りです。

以下のリンクよりインポート。
https://www.icloud.com/shortcuts/b284ff5184e04682a158249799f97767

挙動は以下のGIF動画を参照。

動画内の手順は以下の通り。

  1. 文字列を選択し、共有メニューから「Evernoteリンク」を選択
  2. タイトルに選択文字列を含むノートのリストが表示される
  3. リストからリンクを作成したいノートを選択
  4. 自動的に内部ノートリンク(evernote://〜)へのリンクがコピーされる
  5. ペースト
あとがき

解説が投げやりのはデモンストレーションのGIFを作るのに疲れたからです。

  • 共有シートの連絡先を個別に非表示にするのに連絡先を一旦削除して登録し直さなければならなかったり
  • GIF作成ショートカット で「自動的にサイズ変更」を選ばないと画像が反転してしまったり

あとショートカットギャラリーの「GIFの発音」が使えそうで使えない感。

Hey Siri で任意のサイトを検索するショートカット

例えば「Hey Siri AmazoniPhoneを検索」と言ってもAmazonの検索結果は表示してくれません。

代替案として「Hey Siri ランチャー」「(Siri)テキストは何ですか」「AmazoniPhoneを検索」と言うと、Amazonでの検索結果を表示するショートカットを作りました。
https://www.icloud.com/shortcuts/5f589eecea35487cae1b86aa328dab85

命令とサイトのパターンはアクション冒頭の辞書で任意に設定出来ます。
例)「Amazonで@を検索」「https://www.amazon.co.jp/s/?field-keywords=@

アマゾンとAmazonを用意しているのは表記揺れ対応のためです。
サイトURLだけでなくURLスキームも設定出来るので、辞書アプリで検索したり、テキストを受け渡したり等といった使い方もできるでしょう。

Porter for Scrapboxで行全体選択

iPhoneからScrapboxを使うならPorterですよね。

Porter for Scrapbox

Porter for Scrapbox

  • shunsuke senoo
  • 仕事効率化
  • 無料


Porterには行全体の上下移動やインデントのツールボタンは用意されていますが
行全体選択が用意されていませんでした。
ツールボタン (Tool buttons) - Porter for Scrapbox オンラインヘルプ

行全体選択後に削除したり他ページへ移動したり、という操作を割としていたので、
行全体選択するボタンが欲しいかも。と考えていたところ、
いつの間にか以下の機能が公開されていました。
任意のキー押下イベントを発行する(Execute arbitrary key down event) - Porter for Scrapbox オンラインヘルプ

これはすごい。ということで利用してみました。

(function() {
// sbpKeydownEvent.dispatch(keyCode , withShift, withCtrl, withAlt, withCommand);
  sbpKeydownEvent.dispatch(36 , false, false, false, false);// Home
  sbpKeydownEvent.dispatch(36 , false, false, false, false);// Home
  sbpKeydownEvent.dispatch(35 , true, false, false, false);// Shift + End
  sbpKeydownEvent.dispatch(39 , true, false, false, false);// Shift + →
})();

ツールボタンに登録したらいつでも一瞬で行選択出来るようになりました。
改行を含めたくない場合はShift + →の行をコメントアウトして下さい。

物書堂の国語辞書で「任意のアルファベット」を指定できますか

辞書 by 物書堂

辞書 by 物書堂

  • 物書堂
  • 辞書/辞典/その他
  • 無料

答え:パターン検索のグループに全アルファベットを入力しましょう。

(abcdefghijklmnopqrstuvwxyz)

そのままですが自由度は高く、以下のように色々と応用がききます。

数字
(1234567890)
ギリシャ文字
(αβγδεζηθικλμνξοπρστυφχψω)
あ行
(あいうえお)
あの段
(あかさたなはまやらわがざだばぱ)
ゃで終わる拗音
(きしちにひみりぎじぢびぴ)ゃ


では問題。以下、大辞林に載っている言葉限定です。

Q1. あ行だけからなる一番長い言葉は何でしょう

ヒント:(あいうえお)(あいうえお)(あいうえお)(あいうえお)(あいうえお)(あいうえお)*

Q2. あの段だけからなる一番長い言葉は何でしょう

ヒント:(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)(あかさたなはまやらわがざだばぱ)*

Q3. 1文字目があ行、2文字目がか行、…、5文字目がな行である5文字以上の言葉は何でしょう

ヒント:(あいうえお)(かきくけこ)(さしすせそ)(たちつてと)(なにぬねの)*

Q4. 1文字目があの段、2文字目がいの段、…、5文字目がおの段である5文字の言葉以上は何でしょう

ヒント:(あかさたなはまやらわがざだばぱ)(いきしちにひみりぎじぢびぴ)(うくすつぬふむゆるぐずづぶぷ)(えけせてねへめれげぜでべぺ)(おこそとのほもよろごぞどぼぽ)*




正解は
A1. えいえいおう
A2. 赤坂忠正
A3. オクシタニー
A4. 味付け海苔、タイムレコーダーなど
でした。

各トピックの最終更新日時を表示するHandyFlowyスクリプトShowLastModified

ShowLastModifiedは表示している全てのトピックの更新日時を表示するスクリプトです。*1*2

HandyFlowy

HandyFlowy

  • Michinari YAMAMOTO
  • 仕事効率化
  • 無料

共有トピックからShowLastModifiedをインポート

実行すると表示中の各トピック名の直下に最終更新日時を表示します。
リロードするかトピック間を移動すると表示は消えます。

今回はスクリプト作成にあたり、DeskFlowyを大いに使用しました。
クリップボードスクリプトを実行するショートカットキー(Windows版はCtrl+Alt+R)がいい感じです。

以下ソース。

$('span.slm').remove();
$('.project:not(.parent)').each(function(idx, elm) {
	var pr = project_tree.getProjectReferenceFromDomProject($(elm));
	var name = _.unescape(pr.getName());
	var pto = pr.getProjectTreeObject();
	if(!pto) return;
	var lm = global_project_tree_object.getLastModified(pto);
	var date = new Date(1E3 * (MAIN_PROJECT_TREE_INFO.dateJoinedTimestampInSeconds + lm));
	date = 'yyyy-MM-dd hh:mm:ss'
		.replace('yyyy', date.getFullYear())
		.replace('MM', ('0' + (date.getMonth() + 1)).slice(-2))
		.replace('dd', ('0' + date.getDate()).slice(-2))
		.replace('hh', ('0' + date.getHours()).slice(-2))
		.replace('mm', ('0' + date.getMinutes()).slice(-2))
		.replace('ss', ('0' + date.getSeconds()).slice(-2));
	var left = $(elm).hasClass('selected') ? 0 : 28;
	$(elm).children('.name').after('<span class="slm" style="color: #88f;font-size: small;margin-left: '+left+'px;">'+date+'</span>');
});

*1:winerosesさんのLastTimeの修正&機能強化版的な位置付けです。

*2:ロジックは外部スクリプトライブラリのLast changedで使われているgetLastModifiedDateStringの実装を利用しています。