#!/usr/bin/perl -w
-# Copyright © 2005-2014 Jamie Zawinski <jwz@jwz.org>
+# Copyright © 2005-2016 Jamie Zawinski <jwz@jwz.org>
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
use bytes;
my $progname = $0; $progname =~ s@.*/@@g;
-my ($version) = ('$Revision: 1.37 $' =~ m/\s(\d[.\d]+)\s/s);
+my ($version) = ('$Revision: 1.44 $' =~ m/\s(\d[.\d]+)\s/s);
my $verbose = 0;
my $http_proxy = undef;
my $text_literal = '';
my $text_file = '';
my $text_program = '';
-my $text_url = 'http://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss';
+my $text_url = 'https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss';
# Default URL needs to be set and match what's in OSX/XScreenSaverView.m
my $wrap_columns = undef;
my $got_any_p = 0;
$body =~ s@\\\n@@gs;
+ $body =~ s@^[ \t]*#[^\n]*$@@gm;
if ($body =~ m/^[.*]*textMode:[ \t]*([^\s]+)\s*$/im) {
$text_mode = $1;
$text_mode = $v if defined ($v);
# The "textMode" pref is set to a number instead of a string because I
- # can't figure out the black magic to make Cocoa bindings work right.
+ # couldn't figure out the black magic to make Cocoa bindings work right.
+ #
+ # Update: as of 5.33, Cocoa writes strings instead of numbers, but
+ # pre-existing saved preferences might still have numbers in them.
#
if ($text_mode eq '0') { $text_mode = 'date'; }
elsif ($text_mode eq '1') { $text_mode = 'literal'; }
sub output() {
+ binmode (STDOUT, ($latin1_p ? ':raw' : ':utf8'));
+
# Do some basic sanity checking (null text, null file names, etc.)
#
if (($text_mode eq 'literal' && $text_literal =~ m/^\s*$/i) ||
$text_file =~ s@^~/@$ENV{HOME}/@s; # allow literal "~/"
- if (open (my $in, '<', $text_file)) {
+ if (open (my $in, '<:raw', $text_file)) {
print STDERR "$progname: reading $text_file\n" if ($verbose);
+ binmode (STDOUT, ':raw');
if (($wrap_columns && $wrap_columns > 0) || $truncate_lines) {
# read it, then reformat it.
# Try to omit all tables, since they're impossible to read as text.
#
- 1 while (s/{{[^{}]*}}/ /gs); # {{ ... }}
- 1 while (s/{\|.*?\|}/\n\n/gs); # {| ... |}
+ 1 while (s/\{\{[^{}]*}}/ /gs); # {{ ... }}
+ 1 while (s/\{\|.*?\|\}/\n\n/gs); # {| ... |}
1 while (s/\|-.*?\|/ /gs); # |- ... | (table cell)
# Convert anchors to something more readable.
sub set_proxy($) {
my ($ua) = @_;
- if (!defined($ENV{http_proxy}) && !defined($ENV{HTTP_PROXY})) {
- my $proxy_data = `scutil --proxy 2>/dev/null`;
- my ($server) = ($proxy_data =~ m/\bHTTPProxy\s*:\s*([^\s]+)/s);
- my ($port) = ($proxy_data =~ m/\bHTTPPort\s*:\s*([^\s]+)/s);
- if ($server) {
+ my $proxy_data = `scutil --proxy 2>/dev/null`;
+ foreach my $proto ('http', 'https') {
+ my ($server) = ($proxy_data =~ m/\b${proto}Proxy\s*:\s*([^\s]+)/si);
+ my ($port) = ($proxy_data =~ m/\b${proto}Port\s*:\s*([^\s]+)/si);
+ my ($enable) = ($proxy_data =~ m/\b${proto}Enable\s*:\s*([^\s]+)/si);
+
+ if ($server && $enable) {
# Note: this ignores the "ExceptionsList".
- $ENV{http_proxy} = "http://" . $server . ($port ? ":$port" : "") . "/";
- print STDERR "$progname: MacOS proxy: $ENV{http_proxy}\n"
- if ($verbose > 2)
- }
+ my $proto2 = 'http';
+ $ENV{"${proto}_proxy"} = ("${proto2}://" . $server .
+ ($port ? ":$port" : "") . "/");
+ print STDERR "$progname: MacOS $proto proxy: " .
+ $ENV{"${proto}_proxy"} . "\n"
+ if ($verbose > 2);
+ }
}
$ua->env_proxy();
$load_p = 0; }
elsif (m/^--?text$/) { $text_mode = 'literal';
$text_literal = shift @ARGV || '';
+ $text_literal =~ s@\\n@\n@gs;
+ $text_literal =~ s@\\\n@\n@gs;
$load_p = 0; }
elsif (m/^--?file$/) { $text_mode = 'file';
$text_file = shift @ARGV || '';