Qtopia Clipboard Filter
Qtopiaのクリップボードを標準入力/標準出力と連携させるためのフィルターです。
1時間程度のやっつけ仕事で作ったのでバグがあるかも?
使用方法
クリップボード内容の出力
オプション -w を付けて実行すると、クリップボードの内容を標準出力に書き出します。
$ qcf -w
またはオプション無し(ただし今後変更される可能性有りなのでオプション付きを推奨)
$ qcf
Display size = 480x640
の様な出力が標準エラーに出ますが、これはQtopiaアプリケーションの仕様です。
クリップボードへの読み込み
オプション -r を付けて実行すると、標準入力を読み込み、クリップボードに転送します。
$ echo "hoge" | qcf -r
ダウンロード
変更履歴
- 0.1.0 2003/05/31
- 初版
ご意見等
ご意見ご要望等がありましたらこちらにどうぞ。
[[#rcomment]]
- 2003-07-02 (Wed) 01:04:22 塚本牧生 : 天気予報スクリプトで使わせていただきました。便利便利。さて、そろそろいろいろとご指摘いただいているWikiに戻らないと...。
- 2003-06-25 (Wed) 22:35:31 途中で送ってしまった……。どうもおさわがせしました。再起動したら、症状が消えました。
- 2003-06-25 (Wed) 22:34:03 Unknown? : あら、確かに再起動したら出なくなりました。どうもおさわがせ
- 2003-06-23 (Mon) 22:42:21 yakty : C700/C750で試してみましたが、どちらでも問題なく出力出来ました。「SlSharedManager: can't get proc entry」このエラーが出る事自体が多分おかしいんで、一回再起動してみてもらえますか?(多分これシャープのライブラリが出しているエラーだし)
- 2003-06-23 (Mon) 02:28:28 Unknown? : yaktyさんこん**は。ちょっと不都合な点が出てきました。改行なしの76バイト以下のテキストは、qcf -wで標準出力に出てきません。77バイト以上なら出てきます。また、C760だと文字数にかかわらず、「SlSharedManager: can't get proc entry」というエラーメッセージが出てきてしまいます。つまり、C760の場合、76バイト以下ならエラーメッセージのみが。77バイト以上ならクリップボードの文字列とエラーメッセージが出てきます。改行付きなら1バイトでも大丈夫なんですが。
- 2003-06-23 (Mon) 01:00:07 Unknown? : Namさん、Emacsで便利に使わせてもらっています。ありがとうございます。Namさんにもう一つお礼を。こんな展開にもなってたりして。http://megadriver.ns.tc/~fumi/zatubun/?date=20030605
- 2003-06-22 (Sun) 23:48:18 Nam? : 依頼者さん、情報さんくすです。さっそく直しておきます。
- 2003-06-22 (Sun) 23:11:57 Unknown? : 依頼者です。SL-C760を買ったんですが、このマシンではqcfを起動しても「connect:shmget ok」とは出ないので、NamさんのEmacs連携のコードを手直しする必要がありました。(if (re-search-forward "^connect:shmget ok$" e)を(if (re-search-forward "^Display size = 480x640$" e)とすればOKです。
- 2003-06-11 (Wed) 16:43:37 FMB? : qkc -m でうまく行きました!早速の対応ありがとうございましたm(_ _)m。
- 2003-06-11 (Wed) 09:29:07 yakty : なんかqkcのオプションに-mを付けた方がいいみたいです。私は使ってないのでよく分からないんですが(笑)
- 2003-06-11 (Wed) 08:41:38 FMB? : 便利です。有難うございます。NamさんのEmacs連携も早速導入させてもらい、成功しました。でもUnknown(依頼人)さんの「一行野郎」がうまくいきません。NetFrontで選択&コピー、ターミナル上でone liner実行、memoでペースト、とやってみるのですが、改行はもとのままです。qcfとqkcの導入以外に何か条件があるのでしょうか?
- 2003-06-02 (Mon) 19:58:47 Nam? : 便利なツールをありがとうございます。 EmacsのバッファからClipboardへコピー&Clipboardからバッファへペーストって関数をザックリ書いてみたので宜しければどうぞ。 http://www.rr.iij4u.or.jp/~nam/
- 2003-06-02 (Mon) 00:04:57 mmo? : MIシリーズの時にClipLinkというソフトを使っていまして、SLシリーズでもできないのかな..と思っているのですが可能なのでしょうか?
- 2003-06-02 (Mon) 00:04:01 mmo? : はじめまして。こんなソフトを探していました。
- 2003-06-01 (Sun) 19:17:58 yakty : へえ、初めて知りました。nkfはもちろん知ってますけどね。
- 2003-06-01 (Sun) 11:38:50 Unknown? : qkcはQuick Kanji Code Converterですよ。nkf、Network Kanji Filterみたいなもんです。出自はMS-DOSだったと思いました。両方ともここにあります。http://hisec.minidns.net/~masui/feed/
- 2003-06-01 (Sun) 00:18:10 Unknown? : 依頼人です。yaktyさんありがとうございます。より柔軟な活用ができます。
- 2003-06-01 (Sun) 00:15:44 yakty : 文字コード変換機能とかも組み込んだ方がいいのかな〜?と思ってるんですが、欲しい方います?多分そんなに大変じゃないんで要望があれば実装します。
使用例
こうやって使うと便利!という使用方法があれば教えて下さい。
NetFrontからのコピー時の改行落ちを解決
とりあえず、依頼者さんの使用例をコピペ
(オプション無しの実行は非推奨なので-wオプションを付けさせて頂きました)
qkc のオプションに -m を付けた方がいいようです。
qcf -w | qkc -m | qcf -r
さて、早速試した上記のOne liner。
自分はNetFrontで探してきた情報をMemoに貼るのですが、
改行が落ちるので困っていました。
それを解決するためのものです。
Emacsのバッファとの連携
私はEmacsを使わないのでよく分からないのですが(^^;なんか便利そう?
↓こちらで使用例を公開されています。
http://www.rr.iij4u.or.jp/~nam/
q2chで注目レスを引用しつつレス先指定
Unknownです。ども。
q2chで選択範囲を作らずにFn+Cすると、画面上部に表示されているレスからのURLがクリップボードにコピーされます。
これを利用したスクリプトです。その糞っぷりを笑ってください。
qcfのほか、w3m(笑)が必要です。
#!/bin/sh # /home/zaurus/quote.sh # keyhelper.confに、 # Q = @exec<tab>/home/zaurus/quote.sh # などと記述するといいかも。 while : do val=`qcf -w` echo ${val} | sed 's/^.*\/\([0-9][0-9]*\)-$/>>\1/' echo ${val} | sed 's/^\(.*\)-$/-dump \1/' | xargs w3m | sed -n '6,/^[0-9][0-9]* KB \[/s/^ \(.*\)$/> \1/p' | sed '/^[0-9][0-9]* KB \[/d' exit done | qcf -r
使い方
- q2chでスレを見ている最中にレスしたくなったら Fn+C
- Keyhelper Appletなどでこのスクリプトを起動
- q2chで e などとして書き込みフォーム表示
- Fn+Vでペースト
天気予報スクリプト
塚本さん作の天気予報スクリプトで使用して頂いています。
w3mのリンク先URLをクリップボードにコピー
ども。Unknown です。
以下のようなシェルスクリプトを書き、w3m で o すると出てくる設定画面で外部ブラウザとして指定。
#!/bin/sh echo $@ | qcf -r >/dev/null 2>&1 # qcop QPE/System 'execute(QString,QString)' netfront3 $@ >/dev/null 2>&1
なおかつ ~/.w3m/keymap に以下のような記述があることを確認。
keymap M EXTERN_LINK keymap M-M EXTERN
こうしとくと、 w3m でカーソルをリンクに合わせ、 M を押すと、クリップボードにリンク先の URL がコピーされます。
Cancel を押してから M とやると、今見ているページの URL がコピーされます。
上の qcop の前の # を外せば、クリップボードにコピーしつつ、 Netfront でページを開けます。
ふつー emacs-w3m ですかね?
募集中
募集中
ソース
main.cpp
#include <getopt.h> #include <qpe/qpeapplication.h> #include <qtimer.h> #include "ClipFilter.h" int main(int argc, char* argv[]) { QPEApplication a(argc, argv); ClipFilter cf; int c; while((c = getopt(argc, argv, ":rw")) != -1){ switch(c){ case 'r': cf.setMode(ClipFilter::CLIP_READ); break; case 'w': cf.setMode(ClipFilter::CLIP_WRITE); break; default: break; } } cf.exec(); QTimer::singleShot(0, &a, SLOT(quit())); return a.exec(); }
ClipFilter.h
#ifndef _CLIPFILTER_H_ #define _CLIPFILTER_H_ #include <qstring.h> #include <qclipboard.h> #include <qfile.h> #include <qtextstream.h> #include <qpe/qpeapplication.h> class ClipFilter { public: ClipFilter(); enum Mode { CLIP_READ, CLIP_WRITE, }; void setMode(Mode mode){ m_mode = mode; } void exec(); private: void write(); void read(); QClipboard* m_cb; Mode m_mode; }; #endif /* _CLIPFILTER_H_ */
ClipFilter.cpp
#include "ClipFilter.h" ClipFilter::ClipFilter() { m_cb = QApplication::clipboard(); m_mode = CLIP_WRITE; } void ClipFilter::exec() { switch(m_mode){ case CLIP_READ: read(); break; case CLIP_WRITE: write(); break; default: break; } } void ClipFilter::write() { QTextOStream(stdout) << m_cb->text(); } void ClipFilter::read() { QTextIStream stream(stdin); m_cb->setText(stream.read()); }