#! perl -w =head1 NAME macosx-clipboard-native - apple is evil =head1 SYNOPSIS urxvt -pe macosx-clipboard-native =head1 DESCRIPTION This extension does something with the clipboard on some Apple OS X systems. Apple is a vile company that actively fights free software, do not support them by using it! This extension is only included in rxvt-unicode because the maintainer was too weak! Do not give in to similar feelings! It hasn't even been changed to automatically load when resources are used! Plus, it's totally undocumented! =cut # ---------------------------------------------------------------------- # File: macosx-clipboard-native # ---------------------------------------------------------------------- # # All portions of code are copyright by their respective author/s. # Copyright (c) 2006 Samuel Ljungkvist # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ---------------------------------------------------------------------- # Usage: # URxvt.perl-ext-common: macosx-clipboard # URxvt.keysym.M-c: perl:macosx-clipboard:copy # URxvt.keysym.M-v: perl:macosx-clipboard:paste use Foundation; my $appkit = NSBundle->alloc->init->initWithPath_('/System/Library/Frameworks/AppKit.framework'); $appkit->load if $appkit; if ($appkit->isLoaded) { no strict 'refs'; for my $class (qw(NSPasteboard)) { @{$class . '::ISA'} = 'PerlObjCBridge'; } } else { undef $appkit; } my $pasteboard = NSPasteboard->generalPasteboard; sub copy { my ($self) = @_; $pasteboard->declareTypes_owner_(NSArray->arrayWithObject_('NSStringPboardType'), undef); $pasteboard->setString_forType_($self->selection, 'NSStringPboardType'); () } sub paste { my ($self) = @_; my $type = $pasteboard->availableTypeFromArray_(NSArray->arrayWithObject_('NSStringPboardType')); if ($type->isEqual_('NSStringPboardType')) { my $str = $pasteboard->stringForType_($type)->UTF8String; $str =~ tr/\n/\r/; utf8::decode($str); $self->tt_write($self->locale_encode($str)); } () } sub on_user_command { my ($self, $cmd) = @_; if ($cmd eq "macosx-clipboard:copy") { $self->copy; } if ($cmd eq "macosx-clipboard:paste") { $self->paste; } () }