Mercurial > emacs
annotate lisp/resume.el @ 39625:e441240482b2
(add-change-log-entry): Skip copyright notice
and copying permission notice at start of file, if any.
Make use of terms "entry" and "item" accord with Emacs manual.
Simplify the logic for moving point while entering or creating
an entry and then an item.
(add-change-log-entry-other-window): Doc fix.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 06 Oct 2001 02:32:54 +0000 |
parents | b1a3fef3d648 |
children | e88404e8f2cf |
rev | line source |
---|---|
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
244
diff
changeset
|
1 ;;; resume.el --- process command line args from within a suspended Emacs job |
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
244
diff
changeset
|
2 |
845 | 3 ;; Copyright (C) 1992 Free Software Foundation, Inc. |
4 | |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
5 ;; Author: Joe Wells <jbw@bucsf.bu.edu> |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
6 ;; Adapted-By: ESR |
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
810
diff
changeset
|
7 ;; Keywords: processes |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
8 |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
9 ;; This file is part of GNU Emacs. |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
10 |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
11 ;; GNU Emacs is free software; you can redistribute it and/or modify |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
12 ;; it under the terms of the GNU General Public License as published by |
12244 | 13 ;; the Free Software Foundation; either version 2, or (at your option) |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
14 ;; any later version. |
17 | 15 |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
19 ;; GNU General Public License for more details. |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
20 |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
21 ;; You should have received a copy of the GNU General Public License |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
17 | 25 |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
26 ;;; Commentary: |
17 | 27 |
15120 | 28 ;; The purpose of this library is to handle command line arguments |
29 ;; when you resume an existing Emacs job. | |
30 | |
31 ;; In order to use it, you must put this code in your .emacs file. | |
32 | |
33 ;; (add-hook 'suspend-hook 'resume-suspend-hook) | |
34 ;; (add-hook 'suspend-resume-hook 'resume-process-args) | |
35 | |
36 ;; You can't get the benefit of this library by using the `emacs' command, | |
15121 | 37 ;; since that always starts a new Emacs job. Instead you must use a |
38 ;; command called `edit' which knows how to resume an existing Emacs job | |
39 ;; if you have one, or start a new Emacs job if you don't have one. | |
40 | |
41 ;; To define the `edit' command, run the script etc/emacs.csh (if you use CSH), | |
42 ;; or etc/emacs.bash if you use BASH. You would normally do this in your | |
43 ;; login script. | |
82 | 44 |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
45 ;; Stephan Gildea suggested bug fix (gildea@bbn.com). |
17 | 46 ;; Ideas from Michael DeCorte and other people. |
47 | |
810
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
48 ;;; Code: |
80303373daae
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
664
diff
changeset
|
49 |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
50 (defvar resume-emacs-args-file (expand-file-name "~/.emacs_args") |
17 | 51 "*This file is where arguments are placed for a suspended emacs job.") |
52 | |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
53 (defvar resume-emacs-args-buffer " *Command Line Args*" |
82 | 54 "Buffer that is used by resume-process-args.") |
17 | 55 |
56 (defun resume-process-args () | |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
57 "Handler for command line args given when Emacs is resumed." |
82 | 58 (let ((start-buffer (current-buffer)) |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
59 (args-buffer (get-buffer-create resume-emacs-args-buffer)) |
7385 | 60 length args |
61 (command-line-default-directory default-directory)) | |
17 | 62 (unwind-protect |
63 (progn | |
82 | 64 (set-buffer args-buffer) |
17 | 65 (erase-buffer) |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
66 ;; get the contents of resume-emacs-args-file |
17 | 67 (condition-case () |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
68 (let ((result (insert-file-contents resume-emacs-args-file))) |
82 | 69 (setq length (car (cdr result)))) |
70 ;; the file doesn't exist, ergo no arguments | |
71 (file-error | |
72 (erase-buffer) | |
73 (setq length 0))) | |
74 (if (<= length 0) | |
75 (setq args nil) | |
76 ;; get the arguments from the buffer | |
77 (goto-char (point-min)) | |
78 (while (not (eobp)) | |
79 (skip-chars-forward " \t\n") | |
80 (let ((begin (point))) | |
81 (skip-chars-forward "^ \t\n") | |
82 (setq args (cons (buffer-substring begin (point)) args))) | |
83 (skip-chars-forward " \t\n")) | |
84 ;; arguments are now in reverse order | |
85 (setq args (nreverse args)) | |
86 ;; make sure they're not read again | |
87 (erase-buffer)) | |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
88 (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file) |
82 | 89 ;; if nothing was in buffer, args will be null |
90 (or (null args) | |
7385 | 91 (setq command-line-default-directory |
92 (file-name-as-directory (car args)) | |
82 | 93 args (cdr args))) |
94 ;; actually process the arguments | |
95 (command-line-1 args)) | |
17 | 96 ;; If the command line args don't result in a find-file, the |
82 | 97 ;; buffer will be left in args-buffer. So we change back to the |
17 | 98 ;; original buffer. The reason I don't just use |
99 ;; (let ((default-directory foo)) | |
100 ;; (command-line-1 args)) | |
101 ;; in the context of the original buffer is because let does not | |
102 ;; work properly with buffer-local variables. | |
82 | 103 (if (eq (current-buffer) args-buffer) |
104 (set-buffer start-buffer))))) | |
105 | |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
106 ;;;###autoload |
2537
62b0d90a62e8
(resume-suspend-hook): Renamed from resume-empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2536
diff
changeset
|
107 (defun resume-suspend-hook () |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
108 "Clear out the file used for transmitting args when Emacs resumes." |
82 | 109 (save-excursion |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
110 (set-buffer (get-buffer-create resume-emacs-args-buffer)) |
82 | 111 (erase-buffer) |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
112 (resume-write-buffer-to-file (current-buffer) resume-emacs-args-file))) |
82 | 113 |
2536
e8426c217792
(resume-empty-args-file): Renamed from empty-args-file.
Richard M. Stallman <rms@gnu.org>
parents:
2110
diff
changeset
|
114 (defun resume-write-buffer-to-file (buffer file) |
82 | 115 "Writes the contents of BUFFER into FILE, if permissions allow." |
116 (if (not (file-writable-p file)) | |
117 (error "No permission to write file %s" file)) | |
118 (save-excursion | |
119 (set-buffer buffer) | |
120 (clear-visited-file-modtime) | |
121 (save-restriction | |
122 (widen) | |
123 (write-region (point-min) (point-max) file nil 'quiet)) | |
124 (set-buffer-modified-p nil))) | |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
244
diff
changeset
|
125 |
7385 | 126 (provide 'resume) |
127 | |
658
7cbd4fcd8b0f
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
244
diff
changeset
|
128 ;;; resume.el ends here |