🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fj.editor.emacs
7 messages
7 total messages Started by Yoshitaka Ikeda Thu, 22 Jun 2006 23:20
Emacsからスクリプトを使って印刷をする。
#577
Author: Yoshitaka Ikeda
Date: Thu, 22 Jun 2006 23:20
39 lines
2560 bytes
なんか、質問しようとしていろいろと設定しているうちにできちゃったので
とりあえずテクニカルな文書を残しておこう。

プリンタがつながっていないUNIXサーバにいつも遠隔からsshで
接続しているわけですが、プリンタ側でpdf化してメールで送るような
スクリプトを書いて印刷しようとしています。

テキストファイルをpdf化して送るスクリプトを書いて、
~/print-via-email.shとして700でおいてあります。

~/print-via-email.shの中身は、

#!/bin/sh
/usr/local/bin/nkf | /usr/local/bin/a2ps-j -p | /usr/local/bin/ps2pdf - - | \
/usr/bin/uuencode "printeroutput.pdf" | \
/usr/bin/mail -s "Printing from unix server" my@mail.address

って感じです。単体テストではちゃんとPDFを生成して自分に
メールで送ってくるのを確認します。

さて、.emacsで
(setq lpr-command "/home/username/print_via_mail.sh")
ってやると、
M-x print-bufferで、テキストからPDFファイルを使ってメールで
送ってきてくれます。

---
ここから、質問。

これで印刷するとa2psでつく枠の部分でファイル名が「stdin」になります。
これをemacsで編集中のファイル名にしたい。
できれば送ってくるファイル名を "ファイル名.pdf"にしたいと思ってます。
どうすればいいものか、どなたか知恵をください。

-- 
-- 
I LOVE SNOOPY!  でつ
Yoshitaka Ikeda mailto:ikeda@4bn.ne.jp
My Honeypot: honey@4bn.ne.jp  <-don't send this address
Re: Emacs からスクリプトを使って印刷をする。
#578
Author: OTA Takashi
Date: Fri, 23 Jun 2006 01:31
38 lines
2668 bytes
おおたです。
ikedaさんが2006年06月23日(金) 08時20分09秒に、
fj.editor.emacsに投稿した<861wtgn5g6.fsf@bsd2.4bn.ne.jp>の記事から

> さて、.emacsで
> (setq lpr-command "/home/username/print_via_mail.sh")
> ってやると、
> M-x print-bufferで、テキストからPDFファイルを使ってメールで
> 送ってきてくれます。

> これで印刷するとa2psでつく枠の部分でファイル名が「stdin」になります。
> これをemacsで編集中のファイル名にしたい。
> できれば送ってくるファイル名を "ファイル名.pdf"にしたいと思ってます。
> どうすればいいものか、どなたか知恵をください。

編集中のファイルの名前をとってきて,

(setq lpr-command (concat ("/home/username/print_via_mail.sh") (FILE)))

みたいな感じにして,print_via_mail.sh の方では

> #!/bin/sh
> /usr/local/bin/nkf | /usr/local/bin/a2ps-j -p

% a2ps --help
syntax: a2ps [switches] [files]
        switches are:
        -l @    label string
(略)

とあるので,こっちでは a2ps に -l でラベルをその FILE を
渡すようにすればいいんじゃないでしょうか.

# 昔々,某サイトでは label にログイン名を入れる an2ps というコマンドが
# あったそうじゃ…….

----- ニュースはみんなのために /|\ メールは個人のために ---- 太田尚志 -----
http://web.sfc.keio.ac.jp/~takot/ Msngr(NOT for mail): supertakot@hotmail.コム
Re: Emacs からスクリプトを使って印刷をする。
#579
Author: Yoshitaka Ikeda
Date: Fri, 23 Jun 2006 05:07
50 lines
2716 bytes
OTA Takashi <takot+news@sfc.keio.ac.jp> writes:

> おおたです。
> 
> 編集中のファイルの名前をとってきて,
> 
> (setq lpr-command (concat ("/home/username/print_via_mail.sh") (FILE)))
> 
> みたいな感じにして,print_via_mail.sh の方では

ちょっと、引数調べてみると、
$1 : -J
$2 : ファイル名+Emacs Buffer
というのが勝手に負荷されている様です。

> > #!/bin/sh
> > /usr/local/bin/nkf | /usr/local/bin/a2ps-j -p
> 
> % a2ps --help
> syntax: a2ps [switches] [files]
>         switches are:
>         -l @    label string
> (略)
> 
> とあるので,こっちでは a2ps に -l でラベルをその FILE を
> 渡すようにすればいいんじゃないでしょうか.

/usr/local/bin/a2ps-j -l "$2"
って感じで入れてみたんですが、 Emacs Bufferの文字が入っちゃってちょっと
いや~んな感じ。
かといって、
/usr/local/bin/a2ps-j -l $2
とすると生成されません。たぶん
/usr/local/bin/a2ps-j -l ファイル名 Emacs Buffer
で、Emacsというファイルを変換しに行って失敗してると思われます。
#シェルスクリプト側で処理するのが正しいかな?

今は、とりあえず Emacs Bufferの文字が入ってるのを我慢してます。

ところで、
6 23 13:51 2006 print_via_mail.sh Emacs buffer Page 1
みたいな文字列が本文エリアに付加されていますが
これは、Emacsが付加してるんですよね?


 
-- 
I LOVE SNOOPY!  でつ
Yoshitaka Ikeda mailto:ikeda@4bn.ne.jp
My Honeypot: honey@4bn.ne.jp  <-don't send this address
Re: Emacs からスクリプトを使って印刷をする。
#580
Author: Katsumi Yamaoka
Date: Mon, 26 Jun 2006 06:54
34 lines
2623 bytes
>>>>> In <86k678tq7c.fsf@bsd2.4bn.ne.jp>
>>>>>	Yoshitaka Ikeda <ikeda@4bn.ne.jp> wrote:

> 今は、とりあえず Emacs Bufferの文字が入ってるのを我慢してます。

> ところで、
> 6 23 13:51 2006 print_via_mail.sh Emacs buffer Page 1
> みたいな文字列が本文エリアに付加されていますが
> これは、Emacsが付加してるんですよね?

はいそうです。正確には lpr-page-header-program という変数の値で
ある pr コマンドが付加しています[1]。この辺りの ELisp のコードに
カスタマイズの余地はまったく無くて、好みの形式にするにはコードそ
のものを書き換えるしかないのですが、とりあえず " Emacs buffer"
をはぎ取るやつを一つ (.emacs などに入れて下さい)。

(defadvice print-buffer (around print-filename-in-page-headers activate)
  "Print a file name in the page headers if the buffer visits a file."
  (if buffer-file-name
      (let ((title (file-name-nondirectory buffer-file-name))
	    (new-coords (print-region-new-buffer (point-min) (point-max))))
	(apply 'call-process-region (car new-coords) (cdr new-coords)
	       lpr-page-header-program t t nil
	       (nconc (list "-h" title)
		      lpr-page-header-switches))
	(setq ad-return-value
	      (print-region-1 (point-min) (point-max) lpr-switches nil)))
    ad-do-it))

[1] 印刷するバッファの内容を「pr -h "バッファ名 Emacs buffer" -F」
    に通したものを lpr-command で指定したコマンドにパイプします。
    lpr.el 参照。
-- 
山岡
Re: Emacs からスクリプトを使って印刷をする。
#581
Author: Yoshitaka Ikeda
Date: Mon, 26 Jun 2006 08:19
14 lines
1688 bytes
Katsumi Yamaoka <yamaoka@jpl.org> writes:
> はいそうです。正確には lpr-page-header-program という変数の値で
(snip)
>     lpr.el 参照。

試してみましたが、まだついたままです。自分でも原因探求してみますが。

#ちなみに、M-x print-bufferだと *spool temp* Emacs buffer になって、
#M-x lpr-bufferだと print_via_mail.sh Emacs buffer となります。

-- 
I LOVE SNOOPY!  でつ
Yoshitaka Ikeda mailto:ikeda@4bn.ne.jp
My Honeypot: honey@4bn.ne.jp  <-don't send this address
Re: Emacs からスクリプトを使って印刷をする。
#582
Author: Katsumi Yamaoka
Date: Mon, 26 Jun 2006 09:31
40 lines
3145 bytes
>>>>> In <864py8s51j.fsf@bsd2.4bn.ne.jp>
>>>>>	Yoshitaka Ikeda <ikeda@4bn.ne.jp> wrote:

> 試してみましたが、まだついたままです。自分でも原因探求してみますが。

以前の記事を読み返して見るに、lpr-add-switches 変数の値が nil で
はないですね?  これが nil だと lpr-command の第二引数としてタイ
トルが渡されませんから。このタイトルは "バッファ名 Emacs buffer"
のままです。このことをおっしゃっているのではないですか?
それから、たぶん関係無いですが、lpr-headers-switches 変数の値は
デフォルトの nil ですね?

(defadvice ...) のようなやり方で簡単に対処することは、不可能に思
えてきました。lpr.el を以下のように改造してしまうのが簡単でしょ
う。

--- lpr.el~	2001-07-15 16:15:34 +0000
+++ lpr.el	2006-06-26 09:29:12 +0000
@@ -199,8 +199,8 @@
   ;; On some MIPS system, having a space in the job name
   ;; crashes the printer demon.  But using dashes looks ugly
   ;; and it seems to annoying to do for that MIPS system.
-  (let ((name  (concat (buffer-name) " Emacs buffer"))
-	(title (concat (buffer-name) " Emacs buffer"))
+  (let ((name (buffer-name))
+	(title (buffer-name))
 	;; Make pipes use the same coding system as
 	;; writing the buffer to a file would.
 	(coding-system-for-write (or coding-system-for-write

(変更した後で M-x byte-compile-file して下さい。正規版とは別の場
所に置いて、(load "/some/where/lpr") とするのも良いと思います。)

> #ちなみに、M-x print-bufferだと *spool temp* Emacs buffer になって、
> #M-x lpr-bufferだと print_via_mail.sh Emacs buffer となります。

上記の lpr.el 本体を改造するやり方ならば、lpr-buffer にも効果を
及ぼします。(ちなみに Emacs 21.3 とほぼ同じ 21.4 で試しています。)
-- 
山岡
Re: Emacs からスクリプトを使って印刷をする。
#583
Author: Yoshitaka Ikeda
Date: Mon, 26 Jun 2006 09:55
27 lines
2422 bytes
Katsumi Yamaoka <yamaoka@jpl.org> writes:
> 以前の記事を読み返して見るに、lpr-add-switches 変数の値が nil で
> はないですね?  これが nil だと lpr-command の第二引数としてタイ
> トルが渡されませんから。このタイトルは "バッファ名 Emacs buffer"
> のままです。このことをおっしゃっているのではないですか?

lpr-add-switchesはデフォルトのままです。たぶんnilではないです。

> それから、たぶん関係無いですが、lpr-headers-switches 変数の値は
> デフォルトの nil ですね?

これもデフォルトのままなので、たぶんnilです。

 
> (defadvice ...) のようなやり方で簡単に対処することは、不可能に思
(snip)> 
> 上記の lpr.el 本体を改造するやり方ならば、lpr-buffer にも効果を
> 及ぼします。(ちなみに Emacs 21.3 とほぼ同じ 21.4 で試しています。)

この方法で試してみたら、うまく成功しました。
あとで、Summaryをまとめてみます。

-- 
-- 
I LOVE SNOOPY!  でつ
Yoshitaka Ikeda mailto:ikeda@4bn.ne.jp
My Honeypot: honey@4bn.ne.jp  <-don't send this address
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads