クリップボード同期できた

coLinux上のemacsのkill-ringとWindowsのclipboardの連携を
2006-11-29 - BITES THE DUST -負けて死ね-を参考にやろうとして、windowsrubyにwin32/clipboardがないと怒られた。
http://www115.sakura.ne.jp/~harabu/hiki/?(Ruby)+Cygwin%A4%C7RubyGems+を参考にgemを入れる。

cygwin上でgem install win32-clipboardしたもののうまくいかないのでググるwin32/clipboard のインストールにてこずるの巻 - @jitteの日記を発見。

結局windows側(clipboardsync_w.rb):

require 'drb/drb'
require 'kconv'
require 'win32ole'
require 'rubygems'
require 'Win32API'
require 'win32/clipboard'
DRb.start_service('druby://192.168.123.1:12345',Proc.new {|s|
  Win32::Clipboard.set_data(s.tosjis)
    })
sleep

coLinux側(clipboardsync_l.rb):

#!/usr/bin/ruby
require 'drb/drb'
DRbObject.new_with_uri("druby://192.168.123.1:12345").call(STDIN.readlines.to_s)

.emacs追加分:

(defvar cl-sync-command "~/scripts/clipboardsync_l.rb"
    "*The command for clipboard sync")
(defun cl-sync (beg end)
    (interactive "r")
      (call-process-region beg end shell-file-name nil nil nil shell-command-switch cl-sync-command))
(defadvice copy-region-as-kill
    (before clipboard-sync (beg end) activate)
      (cl-sync beg end))
(defadvice kill-region
    (before clipboard-sync (beg end) activate)
      (cl-sync beg end))

となった。よく意味わかってないけど。ポート番号は変えた方がいいだろか?

これは便利。


あとはwindows側のスクリプトがPC起動時に自動で開始するようにする。
よくやり方がわからなかったので
バッチファイル実行時に起動するDOS画面を非表示に。 - その他(プログラミング・Web制作) 締切済 | 教えて!gooを参考にvbsを作る(clipboardsync.vbs):

Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "ruby /cygdrive/c/scripts/clipboardsync_w.rb",0
Set oShell = Nothing

でスタートアップに放り込む。よし完成。