Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

色つきテキストを、コマンド・ラインから.rtfに保存する?

Terminal.appでzshにより、色つきテキストを生成・表示しています。結果が出たら、コピー・ペーストでTextEdit.appに移し、.rtfで保存していました。そのサンプルを図1に示します;


図1 サンプル

ユーザがアップロードしたファイル


「ABC」がマゼンタ背景の白抜き文字、「.」が黒文字、「xyz」がグリーン背景の白抜き文字。



でも、慣れてくると、コマンド・ラインから直接的に.rtfを生成したくなりました。


方法をご教示くださると幸いです。

iPhone 5s, OS X Yosemite (10.10.5), Mac mini(mid 2011), iMac(late 2009)

投稿日 2016/04/01 19:34

返信
スレッドに付いたマーク ベストな回答

投稿日 2016/04/26 11:59

OSX の RTF には文字化け問題があります、思わぬ事故を起こさないためにもこの手の作業はやめるべきです。


また、化け方は OS のバージョンにより異なり、状況は混沌としてます。下記の記事にはありませんが、Leopard と Snow Leopard でも異なります。Lion 以降のことは知りませんが、危険な香りがします。


WindowsとMacでUnicodeマッピングが違う文字

http://d.hatena.ne.jp/NAOI/20061018/1161168147


Mac OS Xのリッチテキストの扱いに関する問題

http://d.hatena.ne.jp/NAOI/20080221/1203591326


アプリケーション間のコピー&ペーストで化ける文字

http://d.hatena.ne.jp/NAOI/20080222/1203677305


TigerのリッチテキストとLeopardのリッチテキスト

http://d.hatena.ne.jp/NAOI/20080304/1204604432


リッチテキスト関連の文字化けについてのとりあえずのまとめ

http://d.hatena.ne.jp/NAOI/20080319/1205922199

返信: 32
スレッドに付いたマーク ベストな回答

2016/04/26 11:59 mNeji への返信

OSX の RTF には文字化け問題があります、思わぬ事故を起こさないためにもこの手の作業はやめるべきです。


また、化け方は OS のバージョンにより異なり、状況は混沌としてます。下記の記事にはありませんが、Leopard と Snow Leopard でも異なります。Lion 以降のことは知りませんが、危険な香りがします。


WindowsとMacでUnicodeマッピングが違う文字

http://d.hatena.ne.jp/NAOI/20061018/1161168147


Mac OS Xのリッチテキストの扱いに関する問題

http://d.hatena.ne.jp/NAOI/20080221/1203591326


アプリケーション間のコピー&ペーストで化ける文字

http://d.hatena.ne.jp/NAOI/20080222/1203677305


TigerのリッチテキストとLeopardのリッチテキスト

http://d.hatena.ne.jp/NAOI/20080304/1204604432


リッチテキスト関連の文字化けについてのとりあえずのまとめ

http://d.hatena.ne.jp/NAOI/20080319/1205922199

2016/04/01 20:36 Hiro__S への返信

Hiro.Sさん、


早速のご説明、ありがとうございました。日常のテキストではあまり問題ないようですが、てXなどに渡すとトラブりそうですね。


OSX の RTF には文字化け問題があります


もしも、TextEdit.app以外のアプリでなら、正常に動作するものでしょうか?

2016/04/01 21:10 mNeji への返信

もしも、TextEdit.app以外のアプリでなら、正常に動作するものでしょうか?


いいえ。クリップボードに RTF データをコピーした場合、クリップボード内で既に化けてます。


Tiger では Mac 寄りに化け、Leopard では Win 寄りに化け、Snow Leopard ではフォント依存。まあ、おっしゃるように対象の文字は少ないのですが、タチが悪いので RTF なんてのはなるべく使いたくないというのが正直なところです。

2016/04/01 23:14 Hiro__S への返信

ちなみに、クリップボードの中から RTF を取り出すのはこんな感じ。

#!/bin/bash osascript -e 'the clipboard as «class RTF »' 2>/dev/null | perl -0777 -ne 'print pack q[H*], substr $_, 11, -3'


実行は

$ bash rtf_in_clipboard.sh


ファイルへの書き出し

bash rtf_in_clipboard.sh >"foo.rtf"


あるいは PyObjC で

#!/usr/bin/python # -*- coding: utf-8 -*- import sys from AppKit import NSPasteboard, NSRTFPboardType pboard = NSPasteboard.generalPasteboard() rtf = pboard.dataForType_(NSRTFPboardType) if not rtf: sys.exit('no rtf data') sys.stdout.write('{0}'.format(rtf))


実行

$ python rtf_in_clipboard.py


書き出し

$ python rtf_in_clipboard.py >"foo.rtf"


それか、HTML を作成して、RTF にコンバートするとか。こんな感じにすれば、HTML をファイルに書き出さずに済みます。

#!/bin/bash html=$(cat <<'EOS' <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>001</title> </head> <body> <p style="color: red; font-family: sans-serif;">テスト</p> </body> </html> EOS ) printf '%s' "$html" | textutil -stdin -stdout -convert rtf -format html

実行

$ bash html2rtf.sh

書き出し

$ bash html2rtf.sh >"foo.rtf"


でも、コピペの方が簡単じゃないでしょうかね。

2016/04/02 01:03 Hiro__S への返信

色々なスクリプトの例題ありがtとうございます。じっくり拝見します。


私は、現行の「OS ver. 10.10.5」での自分の常用えひた、TextWranglerとTextEditとの間で、ご紹介された件の数学記号に関する動作を確認しました。


数学記号を出すために、図1に示したように、「Character Viewer」のSearchボックスで文字入力(図では not)して入手しました。

図1 「not」の入手例


ユーザがアップロードしたファイル





これで、4つの文字(EM DASH, MINUS SIGN, HYPHEN MINUS, PARALLE TO, NOT SIGN)を入手する準備をしてから、

(1) TextWranglerに書き込み、保存。

(2) そのファイルを TextEditでも開き、確認。「PARALLEL TO」だけ変化文字種依存性があるようです

(3) もう一度、TextWranglerを開いて、(1)の部分をコピーすると、(2)と一致。

(4) TextWranglerで確認すると、(4)が出来ていて、(1)と一致。


図2に、左側にTextWrangler, 右側にTextEditの表示を示します。図中の(1)~(4)は、上記の説明に対応します。

ユーザがアップロードしたファイル



これらから、私の利用範囲なら許容できそうです。


ご報告まで。

2016/04/02 01:14 mNeji への返信

ANSI エスケープコードを含むテキストを HTML に変換するには、例えば、aha を使えば良いです。


ANSI HTML Adapter

https://github.com/theZiz/aha


aha-master.zip をダンロードして、コンパイル、インストールしてください。


html から rtf への変換には textutil を使えます。使用法は、



#!/bin/bash printf '\033[34mANSI blue text\033[0m' | /usr/local/bin/aha | textutil -convert rtf -stdin -output ~/Desktop/out.rtf




など。


aha 以外にも、python や perl のモジュールがあるようですね。

2016/04/02 15:58 chandana への返信

Hiro.Sさん、


html経由というのは、考えていませんでした。


rtfというフォーマットに出力するとい積もりよりも、色つきテクストのブラウザとしてTextEditを使おうと考えたいました。


むしろ、「Termnalからどのような形式で出力が出ているのか」から見直してみたと思います。



chandanaさん、


aha, textutilは存じませんでした。これらも利用して、先に述べた見直しをしたいとおもいました。



少し時間が掛かると思います。進展がありましたら、ご報告します。

2016/04/03 00:15 mNeji への返信

shell に出力される色付きテキストを TextEdit で表示するのが目的なら、例えば、以下のようにできます。(この場合、TextEdit は rtf のタグを解釈するよう環境設定しておく必要があります。)



#!/bin/bash function textedit() { /usr/local/bin/aha | textutil -convert rtf -stdin -stdout | open -b com.apple.TextEdit -f } printf '\033[34mANSI blue text\033[0m\n' | textedit





あるいは、以下のスクリプトでは、色付きテストを shell と TextEdit の双方に出力します。



#!/bin/bash function textedit2() { ( exec 7>&1 tee /dev/fd/7 | /usr/local/bin/aha | textutil -convert rtf -stdin -stdout | open -b com.apple.TextEdit -f exec 7>&- ) } printf '\033[34mANSI blue text\033[0m\n' | textedit2




いずれも OS X 10.6.8 で動作を確認しました。


例は bash ですが、zsh でもそのまま動きます。


又、一部の Unicode の扱いで問題がある rtf に変換する事を避けたいなら、TextEdit を html のタグを解釈するように環境設定しておけば、aha の出力する html をそのまま TextEdit に渡せばよいです。

2016/04/03 02:29 chandana への返信

chandanaさん、


「make, make install」などうろ覚えで叩き、無事にinstallできました。


ご紹介の第二法を実行したら、ターミナルに「青い文字」が出力されて、TextEditが開きました。


図3 「青い文字」のTextEdit

ユーザがアップロードしたファイル



暫く、遊んで見ます。:-))

2016/04/03 14:17 mNeji への返信

これから弄り回すために、関数呼び足しにするために、頂いた分のprintf分をコメントアウトしました;

#!/bin/zsh


# test.color2TextEdit:

# usage: ••• |textedit2

#Appleサポート・コミュニティ:: 色つきテキストを、コマンド・ラインから.rtfに保存する?

# https://discussionsjapan.apple.com/thread/10172424

# 1) chandanaさんのコメント: 2016/04/03 0:15


function textedit2()

{

(

exec 7>&1

tee /dev/fd/7 |

/usr/local/bin/aha | textutil -convert rtf -stdin -stdout |\

open -b com.apple.TextEdit -f

exec 7>&-

)

}

#printf '\033[34mANSI blue text\033[0m\n' | textedit2




ターミナルで、手動で上記スクリプト()の色調整をするためのスクリプトをターミナルで動作させ、そのスクリプト(test.color2TextEdit)を読み込(source command: .)、test.color2TextEditパイプ渡しをしました、図4。


ユーザがアップロードしたファイル

図4 (a) ターミナルでの表示、(b) テキストエディットでの表示。


  • 概ねテキスト構造は問題ないですが、発色の違いが大きいです。TextEditの色設定を調べる必要があります。
  • リダイレクトやティーもこんな使い方は知らないので、要調査。
  • TextEditより、ブラウズ専用のアプリが欲しいかも。

2016/04/03 18:50 mNeji への返信

概ねテキスト構造は問題ないですが、発色の違いが大きいです。TextEditの色設定を調べる必要があります。


Terminal と同じ (ような) 色になるように、aha のソースコードを書き換えて再コンパイルすれば良いと思います。


ご参考


ANSI escape code

https://en.wikipedia.org/wiki/ANSI_escape_code

2016/04/03 19:40 Hiro__S への返信

Hiro.Sさんによると;


Terminal と同じ (ような) 色になるように、aha のソースコードを書き換えて再コンパイルすれば良いと思います。

そうですか、ahaのカラー変換があるのですね。ちょっと覗いて見ましたが、colorshemaの前後で具体的な色コードを書いてあると思ったら、一般的な規格名を引用しているのが大部分でした。


ご参考 ANSI escape code

になるわけですね。


下手に考えるよりも、部分的に自分の設定を書き込んで、様子を見た方が早いかもしれないですね。

2016/04/03 23:10 mNeji への返信

名前指定の色が実際にどんな色で表示されるかは、アプリケーションによって違うようなので、Terminal の色表示に合わせたければ、数値指定するほかないでしょう。aha は色を html の stylesheet 又は style 属性で指定しているので、ソースコード中のその部分を名前指定から数値指定に書き換えてコンパイルすることになります。


例えば、stylesheet の部分では、



color: blue;





color: rgb(73,46,255);




に書き換え、style 属性の部分では、



color:blue;





color:rgb(73,46,255);




に書き換える、など。(数値は Wikipedia の記事から取りました。)

2016/04/04 03:38 mNeji への返信

TextEdit でなくて、ブラウズ専用のアプリケーションということであれば、qlmanage で QuickLook を使う手もあります。


例えば、



#!/bin/bash function quicklook() { temp=$(mktemp /tmp/quicklook_XXXXXX) && html=$temp.html && mv "$temp" "$html" || exit /usr/local/bin/aha > "$html" qlmanage -p "$html" &>/dev/null rm "$html" } printf '\033[34mANSI blue text\033[0m\n' | quicklook




又は、



#!/bin/bash function quicklook2() { temp=$(mktemp /tmp/quicklook_XXXXXX) && html=$temp.html && mv "$temp" "$html" || exit ( exec 7>&1 tee /dev/fd/7 | /usr/local/bin/aha > "$html" exec 7>&- ) qlmanage -p "$html" &>/dev/null rm "$html" } printf '\033[34mANSI blue text\033[0m\n' | quicklook2




これらの例では、rtf ではなく html を表示させています。


しかし、QuickLook では表示されているテキストを選択してコピーする事ができないので不便ではないかな。


OS X 10.7 から 10.10 では以下のコマンドで QuickLook でのテキスト選択ができるようになるようですが、OS X 10.11 ではまた出来なくなったようです。



defaults write com.apple.finder QLEnableTextSelection -bool true killall Finder

2016/04/04 04:27 chandana への返信

こっちの方がシンプルですね。



#!/bin/bash function quicklook() { qlmanage -p -c public.html <(/usr/local/bin/aha) &>/dev/null & } printf '\033[34mANSI blue text\033[0m\n' | quicklook




#!/bin/bash function quicklook2() { ( exec 7>&1 tee /dev/fd/7 | { qlmanage -p -c public.html <(/usr/local/bin/aha) &>/dev/null & } exec 7>&- ) } printf '\033[34mANSI blue text\033[0m\n' | quicklook2




OS X 10.6.8 で bash と zsh で動作を確認しました。

色つきテキストを、コマンド・ラインから.rtfに保存する?

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