".com"で終わる文字列をテキストクリッピングファイルとして保存する方法が知りたい.

【OS】macOS Mojave

テキストエディタで選択中の文字列を Finder へドラッグしてテキストクリッピングファイルの生成を試みます.

  • textSanpure.com
  • textSanpure.info

前者はテキストクリッピングファイルでなくウェブロケーションファイル(*.webloc)が生成されます.【添付画像2】

後者は正しくテキストクリッピングファイル(*.textClipping)が生成されます.【添付画像3】


前者の場合、システムが「この文字列はURLを指すものだ」と誤認してweblocファイルを生成したと考えます.テストはしていませんが .eu や .jp などでもそうなるのかもしれません.しかしながら www.test.info などというサイトもあるようなので一概にドメイン名だけで判断しているわけではなさそうですが.


はじめは拡張子名を変更すれば問題は解決するのでは? と思いそうしたのですが、内容自体も改変されているようで、上記の例で言えば テキスト textSanpure.com の前に http:// という文字列が差し込まれ、完全にURL文字列となっているようです.生成されたクリッピングファイルの内容はもはや変更できないので(再作成するしかない、はず)、拡張子名を変えれば済むという問題ではないようです.


仮に".com"で終わる文字列をテキストクリッピングファイルとして保存する方法がないのであれば、しかたなくテキストファイルに文字を置き、それを毎度コピーしてどこかへ貼り付けることで対処はできますが、正直面倒です.今回の挙動が単なるバグであれば古いOSを使っているので諦めてその代替案で運用するしかないですが、対処法があれば知りたいです.よろしくお願いします.



【添付画像】生成されたファイル(カラム表示状態をキャプチャした)とテキストエディタの内容


【添付画像2】textSanpure.com - QuickLook


【添付画像3】textSanpure.info - QuickLook

Mac mini, macOS 10.14

投稿日 2024/07/23 03:01

返信
スレッドに付いたマーク ランキングトップの返信

投稿日 2024/07/30 23:39

何度も済みません。ファイル名の先頭が「.」にならないための処理などいくつかの修正を加えました。


JavaScript


'use strict';

function grapheme_clusters(str) {
    const nsstr = $(str);
    const len = nsstr.length;
    let a = [];
    let i = 0;
    while (i < len) {
        const range = nsstr.rangeOfComposedCharacterSequenceAtIndex(i);
        a.push(nsstr.substringWithRange(range).js);
        i += Number(range.length);
    }
    return a;
}

function set_fname(str, ext) {
    const fsrep = $(str).fileSystemRepresentation.replace(/^\./, '_').replace(/[/:]/g, '_').replace(/\s+/g, ' ').trim();
    const margin = 5;
    let fname = '';
    if ((fsrep + ext).length < 256 - margin) {
        fname = fsrep;
    } else {
        const chrs = grapheme_clusters(fsrep);
        const ellipsis = '…';
        for (let i = 0; i < chrs.length; i++) {
            if ((fname + chrs[i] + ellipsis + ext).length > 255 - margin) {
                break;
            } else {
                fname += chrs[i];
            }
        }
        fname = fname + ellipsis;
    }
    return fname;
}

function resolve_conflicts(fpath, dname, fname, ext) {
    const filemanager = $.NSFileManager.defaultManager;
    let n = 2;
    while (filemanager.fileExistsAtPath($(fpath))) {
        fpath = `${dname}/${fname} ${n}${ext}`;
        if (n > 1000) {
            throw new Error(`${fpath}: filename: overflow`);
        }
        n++;
    }
    return fpath;
}

function run(argv) {
    if (argv.length < 1) {
        return 'usage: osascript -l JavaScript me.applescript string';
    }

    const query = argv[0].toString();

    const ext = '.textClipping';
    const fname = set_fname(query, ext);
    const dname = $('~/Desktop').stringByExpandingTildeInPath.js;

    let fpath = $(dname).stringByAppendingPathComponent(fname + ext).js;
    fpath = resolve_conflicts(fpath, dname, fname, ext);

    const furl = $.NSURL.fileURLWithPath(fpath);
    const dct = {'UTI-Data': {'public.utf8-plain-text': query}};
    const err = $();

    if (! $(dct).writeToURLError(furl, err)) {
        throw new Error(err.localizedDescription.js);
    }

    return [furl.path.js, query];
}


返信: 20

2024/08/02 09:00 Hiro__S への返信

ええと、JavaScript をミスったようです...。あと、Catalina 以降で作成したテキストクリッピングファイルと同じにする方法が分かったので、それも含めて再アップします。なお、このワークフローにより生成されたファイルは Lion でも期待どおりに表示されます。今度こそ最後 (にしたい)。

2024/08/19 06:37 light289 への返信

正直、これで何故動くのかというのはよくわかりません.
〜中略〜
ただし結果として「ちゃんと動いているように見える」


UTF-8 の情報が最優先で参照されるようです。お示しのコードでは UTF-8 の情報は正しいです。なので、他の情報に誤りがあってもちゃんと動いているように見えるのだと思います。


このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

".com"で終わる文字列をテキストクリッピングファイルとして保存する方法が知りたい.

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。