[N810]NOKIA N810上のEmacsでクリップボードを扱う
NOKIA N810でEmacsを使うようになってまず不便に思うのは、現状のmaemo-cjkを入れた環境ではキーボードのスペシャルキーのロックが利かないこともそうですが、クリップボードとの連携ができないことです。
Linux Zaurusではyaktyさんのqcfと、namさんのqcf-copy / qcf-pasteを使っており、qcfの代わりになるコマンドを探せばよさそうです。
ZaurusではQteのクリップボード(QClipboard)でしたが、N810のOS2008の場合はGTKベースですので、GTKのクリップボードと標準入出力のブリッジを探すことになります。
しかし、これというものを見つけることができなかったので、自分で作ることにします。
Ruby-Maemoを調べた時にRuby/GTK2が含まれているのを知ったので、それでやってみました。
clip.rb
GTKのクリップボードと標準入出力のブリッジの役を果たすRubyスクリプトです。
Thomas Leeさんのブログを参考にコピペしました(それは参考とは言わない)。
#!/usr/bin/env ruby
require 'kconv'
require 'gtk2'
require 'optparse'
def get_clip()
puts Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD).wait_for_text.toutf8
end
def set_clip()
buf = ""
while gets()
buf += $_
end
Gtk.init
clip = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)
clip.set_text(buf.toutf8)
clip.store
end
opts = OptionParser.new
opts.on("-g"){
get_clip()
}
opts.on("-s"){
set_clip()
}
opts.parse!(ARGV)
クリップボード中のテキストをRubyで処理して書き戻す、などといった使い方もできますね。
clip-copy / clip-paste
Elispの方です。namさんのものを改造しました。
;#####################
;# for clip.rb
;#####################
(global-set-key "\C-cc" 'clip-copy)
(global-set-key "\C-cv" 'clip-paste)
(defun clip-copy ()
;; Copy region on current buffer to clipboard on maemo.
(interactive)
(let ((coding-system-for-write 'utf-8))
(message "... copy to clipboard")
(call-process-region (region-beginning) (region-end) "clip.rb" nil nil nil "-s")
(message "")))
(defun clip-paste ()
;; Paste maemo clipboard to current buffer.
(interactive)
(message "... paste from clipboard")
(let ((s (point))(e))
(let ((coding-system-for-read 'utf-8))
(call-process "clip.rb" nil t nil "-g"))
(setq e (point))
(if (equal e s)
(ding)
)
(message "")))
インストール
clip.rbを実行権を付けてパスの通った場所にコピーします。 僕は、clip.rbをexec-pathを通した/home/user/binに置いてます。
clip.rbの実行にはRubyとRuby/GTK2が必要ですので、以下からRuby-Maemoをインストールします。
http://maemo.org/downloads/product/OS2007/ruby-maemo/
Ruby/GTK2はRuby-Maemoに含まれています。 Ruby-Maemoとは、そういう実体があるわけでなく、複数のextensionから成る複合パッケージです。
続いて、clip-copy, clip-pasteを.emacs.elなどにコピペ。 eval-bufferするか、Emacsを再起動します。
使い方
Ctl+c cでリージョンをクリップボードに転送
Ctl+c vでカレントポイントにクリップボードからペースト
インプレと展望
Linux ZaurusでできていたことがN810でもできるようになりました。
ただ、clip.rbの実行に当たってRuby/GTK2のロードに時間がかかるので、ちょっと長めに待たされます。
Thomas LeeさんのブログにはC版のソースも載っているので、いずれ作ってみようかと思っていますが、保証の限りではありません。
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <string.h>
int main (int argc, char **argv) {
const char *message = "Hello, World";
/* initialize GTK */
gtk_init (&argc, &argv);
/* set the clipboard text */
gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), message, strlen(message));
/* store the clipboard text */
gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
return 0;
}
browse-urlの設定が残されてますが、コマンドラインからブラウザにURLを表示させる方法が分からない……。
ご存知の方がいらしたら教えてください。
« [N810]NOKIA N810のキーボードカスタマイズ | Main | [Mac OS X]単3電池1本で動くGPSロガー HOLUX m-241をMac OS Xで使う »


Recent Comments