startup.el 25.4 KB
Newer Older
Linus Tolke's avatar
Linus Tolke committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
;;;;;
;;;;; $Id$
;;;;; Copyright (C) 1991  Lysator Academic Computer Association.
;;;;;
;;;;; This file is part of the LysKOM server.
;;;;; 
;;;;; LysKOM 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 1, or (at your option) 
;;;;; any later version.
;;;;; 
;;;;; LysKOM 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 LysKOM; see the file COPYING.  If not, write to
;;;;; Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
;;;;; or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
;;;;; MA 02139, USA.
;;;;;
;;;;; Please mail bug reports to bug-lyskom@lysator.liu.se. 
;;;;;
Per Cederqvist's avatar
.    
Per Cederqvist committed
25
26
27
28
29
30
31
32
33
34
35
;;;; ================================================================
;;;; ================================================================
;;;;
;;;; File: startup.el
;;;;
;;;; This file contains functions that are called only when lyskom
;;;; is loaded, started or when a new user is logged in during a 
;;;; session.
;;;;


36
37
38
39
40
(setq lyskom-clientversion-long 
      (concat lyskom-clientversion-long
	      "$Id$\n"))


Per Cederqvist's avatar
.    
Per Cederqvist committed
41
42
43
44
45
46
;;; ================================================================
;;;                         Start kom.


(defun lyskom (&optional host username password)
  "Start a LysKOM session.
Linus Tolke's avatar
Linus Tolke committed
47
48
49
Optional arguments: HOST, USERNAME and PASSWORD.

See lyskom-mode for details."
David Kågedal's avatar
David Kågedal committed
50
51
52
53
  (interactive (list (lyskom-read-server-name
		      (lyskom-format 'server-q
				     (or (getenv "KOMSERVER")
					 lyskom-default-server)))
Per Cederqvist's avatar
.    
Per Cederqvist committed
54
55
56
		     nil
		     nil))

57
  (run-hooks 'lyskom-init-hook)
58
  (setq username
David Kågedal's avatar
David Kågedal committed
59
	(or username (getenv "KOMNAME")))
60
  (setq password
David Kågedal's avatar
David Kågedal committed
61
	(or password (getenv "KOMPASSWORD")))
Per Cederqvist's avatar
.    
Per Cederqvist committed
62
  (if (zerop (length host))
63
64
65
66
67
      (let* ((env-kom (getenv "KOMSERVER"))
	     (canon (rassoc env-kom kom-server-aliases)))
	(setq host (or (car canon)
		       env-kom
		       lyskom-default-server))))
68
69
  (let ((port 4894)
	(init-done nil))
Per Cederqvist's avatar
.    
Per Cederqvist committed
70
71
72
73
74
75
76
77
78
    (cond				;Allow "nanny:4892" to use port 4892.
     ((string-match ":" host)
      (setq port (string-to-int (substring host (match-end 0))))
      (cond
       ((zerop (match-beginning 0))
	(setq host lyskom-default-server))
       (t
	(setq host (substring host 0 (match-beginning 0)))))))

David Kågedal's avatar
David Kågedal committed
79
80
81
82
83
84
85
86
    (let* ((buffer (generate-new-buffer host))
	   (name (buffer-name buffer))
	   (proc nil))
      (unwind-protect
	  (progn
	    (setq proc (open-network-stream name buffer host port))
	    (switch-to-buffer buffer)
	    (lyskom-mode)		;Clearing lyskom-default...
87
	    (setq lyskom-buffer buffer)
David Kågedal's avatar
David Kågedal committed
88
89
90
91
	    (setq lyskom-default-user-name username)
	    (setq lyskom-default-password password)
	    (setq lyskom-server-name host)
	    (setq lyskom-proc proc)
92
	    (lyskom-setup-faces)
David Kågedal's avatar
David Kågedal committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
	    (lyskom-insert
	     (lyskom-format 'try-connect lyskom-clientversion host))
	    (set-process-filter proc 'lyskom-connect-filter)
	    (lyskom-process-send-string proc
					(concat "A"
						(lyskom-format-objects
						 (concat (user-login-name)
							 "%" (system-name)))))
	    (while (eq 'lyskom-connect-filter (process-filter proc))
	      (accept-process-output proc))
	    ;; Now we have got the correct response.
	    (set-process-sentinel proc 'lyskom-sentinel)

	    (save-excursion
David Kågedal's avatar
David Kågedal committed
107
	      (lyskom-init-parse buffer))
David Kågedal's avatar
David Kågedal committed
108

109
110
111
112
	    ;; Tell the server who we are
	    (initiate-set-client-version 'background nil
					 "lyskom.el" lyskom-clientversion)

David Kågedal's avatar
David Kågedal committed
113
	    (setq lyskom-server-info (blocking-do 'get-server-info))
114
115
116
117
118
119
            (setq lyskom-server-version
                  (list (/ (server-info->version lyskom-server-info) 10000)
                        (/ (% (server-info->version lyskom-server-info) 10000)
                           100)
                        (% (server-info->version lyskom-server-info) 100)))
            (lyskom-setup-client-for-server-version)
David Kågedal's avatar
David Kågedal committed
120
121
	    (lyskom-format-insert 
	     'connection-done
122
	     (if (zerop (elt lyskom-server-version 2))
David Kågedal's avatar
David Kågedal committed
123
		 (format "%d.%d"
124
125
                         (elt lyskom-server-version 0)
                         (elt lyskom-server-version 1))
David Kågedal's avatar
David Kågedal committed
126
	       (format "%d.%d.%d"
127
128
129
130
                         (elt lyskom-server-version 0)
                         (elt lyskom-server-version 1)
                         (elt lyskom-server-version 2))))
            (if (not (zerop (server-info->motd-of-lyskom lyskom-server-info)))
David Kågedal's avatar
David Kågedal committed
131
132
133
134
135
136
		(let ((text (blocking-do 'get-text 
					 (server-info->motd-of-lyskom
					  lyskom-server-info))))
		  (lyskom-insert 
		   (if text
		       (text->text-mass text)
137
138
		     (lyskom-get-string 'lyskom-motd-was-garbed)))
                  (lyskom-insert "\n")))
David Kågedal's avatar
David Kågedal committed
139
140
	    ;; Can't use lyskom-end-of-command here.
	    (setq lyskom-executing-command nil) 
David Kågedal's avatar
David Kågedal committed
141
	    ;; Log in
David Kågedal's avatar
David Kågedal committed
142
	    (kom-start-anew t)
143
	    (setq lyskom-buffer-list (cons lyskom-buffer lyskom-buffer-list))
David Kågedal's avatar
David Kågedal committed
144
	    (setq init-done t))
145
	;; Something went wrong. Lets cleanup everything. :->
David Kågedal's avatar
David Kågedal committed
146
147
148
149
	(if init-done
	    nil
	  (if proc (delete-process proc))
	  (kill-buffer buffer))))))
Per Cederqvist's avatar
.    
Per Cederqvist committed
150
151


152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
(defun lyskom-setup-client-check-version (spec version)
  (let ((relation (elt spec 0))
        (major (elt spec 1))
        (minor (elt spec 2))
        (revision (elt spec 3)))
    (cond ((eq relation '=)
           (and (or (null major) (= major (elt version 0)))
                (or (null minor) (= minor (elt version 1)))
                (or (null revision) (= revision (elt version 2)))))
          ((eq relation '>=)
           (or (and (= (elt version 0) major)
                    (= (elt version 1) minor)
                    (>= (elt version 2) revision))
               (and (= (elt version 0) major)
                    (> (elt version 1) minor))
               (and (> (elt version 0) major)))))))               


(defun lyskom-setup-client-for-server-version ()
 "Set up the supports list and flags for the current server. See
variable documentation for lyskom-server-feautres"
  (let ((result nil)
        (flags nil))
    (mapcar (function
             (lambda (spec)
               (let ((spec-version (elt spec 0))
                     (plist (elt spec 1)))
                 (if (and (lyskom-setup-client-check-version 
                           spec-version
                           lyskom-server-version))
                     (mapcar
                      (function
                       (lambda (x)
                         (cond ((consp x) (setq result (cons x result)))
                               ((symbolp x) (setq flags (cons x flags)))
                               (t (setq result (cons (cons x t) 
                                                     result))))))
                      plist)))))
            lyskom-server-features)
    (mapcar (function (lambda (x) (set x t))) flags)
    (setq lyskom-server-supports result)))
                                             
                                                                 

Per Cederqvist's avatar
.    
Per Cederqvist committed
196
197
(defun lyskom-connect-filter (proc output)
  "Receive connection acknowledgement from server."
198
  (if lyskom-debug-communications-to-buffer
David Kågedal's avatar
David Kågedal committed
199
      (lyskom-debug-insert proc "-----> " output))
200
201
202
203
204
205
  (cond
   ((string-match "^LysKOM\n" output)
    (set-process-filter proc 'lyskom-filter))))



Per Cederqvist's avatar
.    
Per Cederqvist committed
206
207
208
209
210
211


;;; ================================================================
;;;                        Start anew


212
(defun kom-start-anew (&optional lyskom-first-time-around)
213
  "Start as a new person."
Per Cederqvist's avatar
.    
Per Cederqvist committed
214
215
  (interactive)
  (lyskom-start-of-command 'kom-start-anew)
216
  (lyskom-completing-clear-cache)
217
  (clear-all-caches)
David Kågedal's avatar
David Kågedal committed
218
219
  (let ((old-me lyskom-pers-no))
    (unwind-protect
220
221
222
223
224
225
        (progn
          (if lyskom-first-time-around
              nil
            (lyskom-tell-internat 'kom-tell-login))
          (setq lyskom-pers-no nil)
          (while (not lyskom-pers-no)
226

227
228
229
230
            (if (and lyskom-first-time-around
                     lyskom-default-user-name)
                ;; This is nil if we can't find a unique match.
                (setq lyskom-pers-no
231
                      (conf-z-info->conf-no
232
233
                       (lyskom-lookup-conf-by-name lyskom-default-user-name
                                                   '(pers)))))
234
            (if lyskom-pers-no
235
236
237
                nil
              (let ((name (lyskom-read-conf-name
                           (lyskom-get-string 'what-is-your-name)
238
                           '(pers none) t "" t)))
239
                (setq lyskom-pers-no
240
                      (or (conf-z-info->conf-no 
241
                           (lyskom-lookup-conf-by-name name '(pers)))
242
243
244
245
246
247
                          (lyskom-create-new-person name)))))
            ;; Now lyskom-pers-no contains a number of a person.
            ;; Lets log him in.
            (if lyskom-pers-no
                (let ((conf-stat (blocking-do 'get-conf-stat lyskom-pers-no))
                      (lyskom-inhibit-minibuffer-messages t))
248
249
250

		  ;; DEBUG
		  (if (null conf-stat)
251
		      (lyskom-insert "You don't exist. Go away.\n"))
252

253
254
255
256
257
258
259
260
261
262
263
264
265
                  (lyskom-insert (concat (conf-stat->name conf-stat) "\n"))
                  (setq lyskom-first-time-around nil)
                  (if (blocking-do 'login lyskom-pers-no
                                   (if lyskom-default-password
                                       (prog1
                                           lyskom-default-password
                                         (setq lyskom-default-password nil)
                                         (set-default 'lyskom-default-password
                                                      nil))
                                     ;; Use password read when creating
                                     ;; the person when loggin in new
                                     ;; users
                                     (or lyskom-is-new-user
266
267
                                         (silent-read
					  (lyskom-get-string 'password)))))
268
269
270
271
272
273
274
                      (if lyskom-is-new-user
                          (blocking-do 'add-member
                                       (server-info->conf-pres-conf lyskom-server-info)
                                       lyskom-pers-no 100 1))
                    (lyskom-insert-string 'wrong-password)
                    (setq lyskom-pers-no nil))
                  (setq lyskom-is-new-user nil))))
David Kågedal's avatar
David Kågedal committed
275
	  
276
277
278
279
280
281
282
          ;; Now we are logged in.
          (lyskom-insert-string 'are-logged-in)
          (let ((conf-stat (blocking-do 'get-conf-stat lyskom-pers-no)))
            (if (and conf-stat
                     (/= (conf-stat->msg-of-day conf-stat) 0))
                (progn
                  (lyskom-insert-string 'you-have-motd)
283
284
285
                  (let ((lyskom-show-comments ; +++SOJGE
                         (not kom-no-comments-to-motd)))
                    (lyskom-view-text (conf-stat->msg-of-day conf-stat)))))
286
287
288
289
290
291
292
293
294
295
296
297
298
            (if (and conf-stat
                     (zerop (conf-stat->presentation conf-stat))
                     (not (zerop (conf-stat->no-of-texts conf-stat))))
                (lyskom-insert-string 'presentation-encouragement)))
          (if (not lyskom-dont-read-user-area)
              (lyskom-read-options))
          (lyskom-refetch)
          ;; (cache-initiate-who-info-buffer (blocking-do 'who-is-on))
          (cache-set-marked-texts (blocking-do 'get-marks))
          ;; What is this variable? It is never used. It is ust to
          ;; fill the cache?
          (let ((lyskom-who-am-i (blocking-do 'who-am-i)))
            (if lyskom-who-am-i (setq lyskom-session-no lyskom-who-am-i))))
David Kågedal's avatar
David Kågedal committed
299
	  
David Kågedal's avatar
David Kågedal committed
300
301
      ;; If something failed, make sure we are someone
      (if (null lyskom-pers-no) (setq lyskom-pers-no old-me))
David Kågedal's avatar
David Kågedal committed
302
      (setq lyskom-is-new-user nil)
David Kågedal's avatar
David Kågedal committed
303
304
305
306
      (lyskom-end-of-command)))
  ;; Run the hook kom-login-hook. We don't want to hang the
  ;; login, just because something crashed here.
  (condition-case err
307
      (progn
308
309
        (run-hooks 'lyskom-login-hook)
        (run-hooks 'kom-login-hook))
David Kågedal's avatar
David Kågedal committed
310
    (error (lyskom-format-insert-before-prompt
311
            'error-in-login-hook (format "%s" err)))))
Linus Tolke's avatar
Linus Tolke committed
312
313
314


(defun lyskom-refetch ()
315
316
317
318
319
320
  "Resets and fetches all reading info.
This is called at login and after prioritize and set-unread."
  ;; The whole membership!
  (lyskom-set-membership (blocking-do 'get-membership lyskom-pers-no))
  (setq lyskom-membership-is-read t)
  (setq lyskom-unread-confs (blocking-do 'get-unread-confs lyskom-pers-no))
Linus Tolke's avatar
Linus Tolke committed
321
322
  (setq lyskom-last-conf-fetched -1)
  (setq lyskom-last-conf-received -1)
323
  (setq lyskom-last-conf-done -1)
Linus Tolke's avatar
Linus Tolke committed
324
  (setq lyskom-to-do-list (lyskom-create-read-list))
325
  (setq lyskom-reading-list (lyskom-create-read-list)))
326
327


Linus Tolke's avatar
Linus Tolke committed
328
329
330
(defun lyskom-set-membership (membership)
  "Sets lyskom-membership to a new value.
Args: MEMBERSHIP."
David Kågedal's avatar
David Kågedal committed
331
  (setq lyskom-membership (sort (listify-vector membership)
Linus Tolke's avatar
Linus Tolke committed
332
333
				'lyskom-membership-<))
  (setq lyskom-membership-is-read t))
Per Cederqvist's avatar
.    
Per Cederqvist committed
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372


(defun lyskom-print-name (conf-stat)
  "Print the name of the CONF-STAT, with a trailing \n."
  (lyskom-insert (concat (conf-stat->name conf-stat) "\n")))


(defun lyskom-extract-persons (conf-list)
  "Extract persons from a conf-list.
Return a list of pers-nos of all conferences that are persons.
Args: CONF-LIST."
  (lyskom-do-extract-persons-or-confs conf-list t))


(defun lyskom-extract-confs (conf-list)
  "Extract conferences from a conf-list.
Return a list of conf-nos of all conferences that are persons.
Args: CONF-LIST."
  (lyskom-do-extract-persons-or-confs conf-list nil))


(defun lyskom-do-extract-persons-or-confs (conf-list want-persons)
  "Extract persons or conferences from CONF-LIST.
WANT-PERSONS is t for persons, nil for confs."
  (let* ((result nil)
	 (i 0)
	 (nos (conf-list->conf-nos conf-list))
	 (types (conf-list->conf-types conf-list))
	 (len (length nos)))
    (while (< i len)
      (cond
       ((eq (conf-type->letterbox (elt types i))
	    want-persons)
	(setq result (cons (elt nos i)
			   result))))
      (++ i))
    (nreverse result)))


David Kågedal's avatar
David Kågedal committed
373
(defun lyskom-create-new-person (name)
Per Cederqvist's avatar
.    
Per Cederqvist committed
374
375
376
377
378
379
380
381
382
383
  "A new user named NAME (or an old that mis-spelled his name)."
  (lyskom-insert
   (lyskom-format 'first-greeting name))
  (lyskom-scroll)
  (cond
   ((ja-or-nej-p (lyskom-format 'is-name-correct name))
    (let ((password (silent-read (lyskom-get-string 'personal-password))))
      (cond
       ((not (equal password 
		    (silent-read (lyskom-get-string 'repeat-password))))
David Kågedal's avatar
David Kågedal committed
384
	;; Failed to enter the same password twice
Per Cederqvist's avatar
.    
Per Cederqvist committed
385
	(lyskom-insert-string 'repeat-failure)
David Kågedal's avatar
David Kågedal committed
386
	nil)
Per Cederqvist's avatar
.    
Per Cederqvist committed
387
       (t
David Kågedal's avatar
David Kågedal committed
388
389
390
391
392
393
394
395
	;; Entered the same password twice
	(let ((new-person (blocking-do 'create-person name password)))
	  (if (null new-person)
	      (lyskom-insert-string 'could-not-create-you)
	    ;; Raise a flag so the user will be added to the
	    ;; presentation conference after login
	    (setq lyskom-is-new-user password))
	  new-person)))))
Per Cederqvist's avatar
.    
Per Cederqvist committed
396
   (t
David Kågedal's avatar
David Kågedal committed
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
    ;; Do not create a new person
    nil)))


;;(defun lyskom-start-anew-create-handler (pers-no name password)
;;  "A new person has been created. Log in as him."
;;  (cond
;;   ((null pers-no)
;;    (lyskom-insert-string 'could-not-create-you)
;;    (setq lyskom-executing-command nil)
;;    (kom-start-anew))
;;   (t
;;    (initiate-login 'main 'lyskom-add-for-new-person
;;		    pers-no password pers-no lyskom-pers-no)
;;    )))

;;(defun lyskom-add-for-new-person (reply pers-no lyskom-pers-no)
;;  "Add a news person as member in the default presentation conference."
;;  (initiate-add-member 'main 'lyskom-start-anew-login-2
;;		       (server-info->conf-pres-conf lyskom-server-info)
;;		       pers-no 100 1
;;		       pers-no lyskom-pers-no))
Linus Tolke's avatar
Linus Tolke committed
419

Per Cederqvist's avatar
.    
Per Cederqvist committed
420

David Kågedal's avatar
David Kågedal committed
421
422
(defun lyskom-read-server-name (prompt)
  "Read the name of a LysKOM server.
David Kågedal's avatar
David Kågedal committed
423
Copmpletion is done on the servers i kom-server-aliases. If an
David Kågedal's avatar
David Kågedal committed
424
425
426
427
428
429
430
alias name is entered, the corresponding address is returned."
  ;; Create a completion table like
  ;; (("kom.lysator.liu.se" . "kom.lysator.liu.se")
  ;;  ("LysKOM" . "kom.lysator.liu.se"))
  (let ((known-servers
	 (append (mapcar (function (lambda (pair)
				     (cons (car pair) (car pair))))
David Kågedal's avatar
David Kågedal committed
431
			 kom-server-aliases)
David Kågedal's avatar
David Kågedal committed
432
433
		 (mapcar (function (lambda (pair)
				     (cons (cdr pair) (car pair))))
David Kågedal's avatar
David Kågedal committed
434
			 kom-server-aliases)))
David Kågedal's avatar
David Kågedal committed
435
436
437
438
439
440
441
	(completion-ignore-case t)
	server)
    (setq server (completing-read prompt known-servers nil nil))
    (or (cdr (assoc server known-servers))
	server)))
      

Per Cederqvist's avatar
.    
Per Cederqvist committed
442
443
444
;;; ================================================================
;;;                        The LysKOM mode.

445
446
447
;; The LysKOM mode should not be inherited if we create a new buffer
;; and default-major-mode is nil.
(put 'lyskom-mode 'mode-class 'special)
Per Cederqvist's avatar
.    
Per Cederqvist committed
448
449
450
451

(defun lyskom-mode ()
  "\\<lyskom-mode-map>Mode for LysKOM client.
Commands:
David Kågedal's avatar
David Kågedal committed
452
453
454
455
456
457
\\[kom-next-command]	Do the default action. This can be to read the next text,select
n	ext conference with unread texts or whatever the prompt says.
\\[kom-go-to-conf]	Go to a conference. LysKOM will ask you for a conference
	and make you a member of it if you are not already.
\\[kom-list-conferences]	List conferences matching a given string.
\\[kom-list-persons]	List persons matching a given string.
Per Cederqvist's avatar
.    
Per Cederqvist committed
458

David Kågedal's avatar
David Kågedal committed
459
460
\\[kom-list-news]	List the conferences you have unread texts in.
\\[kom-go-to-next-conf]	Go to the next conference with unread texts.
Per Cederqvist's avatar
.    
Per Cederqvist committed
461

David Kågedal's avatar
David Kågedal committed
462
\\[kom-membership]	Display a buffer with the list of conferences you are member in.
Per Cederqvist's avatar
.    
Per Cederqvist committed
463

David Kågedal's avatar
David Kågedal committed
464
465
\\[kom-quit]	Leave this LysKOM session.
\\[kom-who-is-on]	Show a list of all the users of lyskom right now.
Per Cederqvist's avatar
.    
Per Cederqvist committed
466

David Kågedal's avatar
David Kågedal committed
467
\\[kom-extended-command]	Read a command using the minibuffer and execute it.
468
	This is another way to give commands.
Per Cederqvist's avatar
.    
Per Cederqvist committed
469

David Kågedal's avatar
David Kågedal committed
470
471
472
\\[kom-write-text]	Start writing a new text.
\\[kom-write-comment]	Start writing a comment to the last read article.
\\[kom-private-answer]	Start writing a personal answer to the author of the last
Per Cederqvist's avatar
.    
Per Cederqvist committed
473
	read article.
David Kågedal's avatar
David Kågedal committed
474
\\[kom-send-letter]	Start writing a letter to a person or conference.
Per Cederqvist's avatar
.    
Per Cederqvist committed
475

David Kågedal's avatar
David Kågedal committed
476
477
\\[kom-page-next-command]	Clear the page and do what \\[kom-next-command] does.
\\[kom-line-next-command]	Do what \\[kom-next-command] does, but scroll at most 1 line.
Per Cederqvist's avatar
.    
Per Cederqvist committed
478

David Kågedal's avatar
David Kågedal committed
479
480
0 .. 9	Give a numeric argument to the next command.
\\[describe-mode]	Display this help text.
Per Cederqvist's avatar
.    
Per Cederqvist committed
481

David Kågedal's avatar
David Kågedal committed
482
\\[kom-busy-wait]	Put the lyskom-session in wait mode. The next created text with 
Per Cederqvist's avatar
.    
Per Cederqvist committed
483
484
	a priotity higher that that of the next conference you are going
	to will be read directly when it is created.
David Kågedal's avatar
David Kågedal committed
485
486
487
\\[kom-set-unread]	Mark a number of texts as unread.
\\[kom-jump]	Skip (mark as read) all the comments to this article recursively.
\\[kom-display-time]	Show the current date and time.
Per Cederqvist's avatar
.    
Per Cederqvist committed
488

David Kågedal's avatar
David Kågedal committed
489
490
491
492
\\[kom-change-presentation]	Change your presentation.
\\[kom-view]	View the specified text.
\\[kom-view-commented-text]	View the text that the current text comments or is a footnote to.
\\[kom-review-presentation]	Show the presentation for a person or a conferencce.
Per Cederqvist's avatar
.    
Per Cederqvist committed
493

David Kågedal's avatar
David Kågedal committed
494
495
\\[kom-review-comments]	View all comments to the current text.
\\[kom-review-tree]	View all comments to the current text and step through the tree
Per Cederqvist's avatar
.    
Per Cederqvist committed
496
497
	in depth-first order.

David Kågedal's avatar
David Kågedal committed
498
499
500
\\[kom-find-root-review]	View the complete comment tree.
\\[kom-find-root]	Show the root text of this comment tree.
\\[kom-review-by-to]	View the last (first or all) article written by named author
Per Cederqvist's avatar
.    
Per Cederqvist committed
501
502
	in a named conference.

David Kågedal's avatar
David Kågedal committed
503
504
505
506
\\[kom-mark-text]	Create a mark on a text.
\\[kom-unmark-text]	Remove the mark on a text.
\\[kom-review-marked-texts]	View all text marked with a certain mark.
\\[kom-review-all-marked-texts]	View all marked text.
Per Cederqvist's avatar
.    
Per Cederqvist committed
507

David Kågedal's avatar
David Kågedal committed
508
509
510
511
512
513
\\[kom-view-next-new-text]	Read the next text from the list of unread.
\\[kom-review-next]	Continue the viewing.
\\[kom-review-stack]	Show the stack of things we are viewing.
\\[kom-review-clear]	Clear the stack of things we are viewing.
\\[kom-review-backward]	Toggles the read order of reviewed texts. This can only be done
	when viewing texts with \\[kom-review-by-to], \\[kom-review-marked-texts] and \\[kom-review-all-marked-texts].
Per Cederqvist's avatar
.    
Per Cederqvist committed
514

David Kågedal's avatar
David Kågedal committed
515
516
517
\\[kom-status-conf]	Show the status of a conference.
\\[kom-status-person]	Show the status of a person
\\[kom-save-text]	Save the text you are looking at to a file.
Per Cederqvist's avatar
.    
Per Cederqvist committed
518

David Kågedal's avatar
David Kågedal committed
519
520
\\[kom-get-abuse]	Get an insulting text.
\\[kom-get-appreciation]	Get an encouraging text.
Per Cederqvist's avatar
.    
Per Cederqvist committed
521

David Kågedal's avatar
David Kågedal committed
522
523
\\[kom-add-self]	Become a member of a conference.
\\[kom-sub-self]	Removes you as a member of a conference.
Per Cederqvist's avatar
.    
Per Cederqvist committed
524
525
526
527

All bindings (this is here due to the fact that inconsistensies while 
developping this package are frequent):
\\{lyskom-mode-map}
Linus Tolke's avatar
Linus Tolke committed
528
529
530
531
532
533
Entry to this mode runs lyskom-mode-hook.

Functions and variables beginning with kom- are intended for the user to see,
set or call.
Functions and variables beginning with lyskom- are not intended for the user
to see, set of call."
Per Cederqvist's avatar
.    
Per Cederqvist committed
534
535
536
  (interactive)
  (lyskom-clear-vars)
  (setq mode-line-buffer-identification
537
	(list (concat (lyskom-mode-name-from-host) ": ") 'mode-line-conf-name))
Per Cederqvist's avatar
.    
Per Cederqvist committed
538
539
540

  (setq major-mode 'lyskom-mode)
  (setq mode-name "LysKOM")
541
  (setq mode-line-process (lyskom-get-string 'mode-line-working))
Per Cederqvist's avatar
.    
Per Cederqvist committed
542
  (use-local-map lyskom-mode-map)
543
  (lyskom-count-down-edits)
544
545
  (run-hooks 'lyskom-mode-hook)
  (lyskom-tell-phrases-validate))
Per Cederqvist's avatar
.    
Per Cederqvist committed
546
547
548
549
550
551
552
553
554
555

(defun lyskom-clear-vars ()
  "Set up buffer-local vars."
  (let ((proc lyskom-proc)
	(pers-no lyskom-pers-no)
	(membership lyskom-membership)
	(membership-is-read lyskom-membership-is-read)
	(last-viewed lyskom-last-viewed)
	(replies-buffer lyskom-unparsed-buffer)
	(replies-marker lyskom-unparsed-marker)
Linus Tolke's avatar
Linus Tolke committed
556
	(server-info lyskom-server-info)
557
	(server-name lyskom-server-name)
Linus Tolke's avatar
Linus Tolke committed
558
	)
Per Cederqvist's avatar
.    
Per Cederqvist committed
559
    (kill-all-local-variables)
David Byers's avatar
David Byers committed
560
561
562
    (make-local-variable 'kom-ansaphone-show-messages)
    (make-local-variable 'kom-ansaphone-record-messages)
    (make-local-variable 'kom-prompt-format)
563
564
565
566
    (make-local-variable 'kom-ansaphone-on)
    (make-local-variable 'kom-ansaphone-default-reply)
    (make-local-variable 'kom-remote-control)
    (make-local-variable 'kom-remote-controllers)
David Kågedal's avatar
David Kågedal committed
567
    (make-local-variable 'kom-login-hook)
David Byers's avatar
David Byers committed
568
569
570
    (make-local-variable 'kom-friends)
    (make-local-variable 'kom-permanent-filter-list)
    (make-local-variable 'kom-session-filter-list)
Linus Tolke's avatar
Linus Tolke committed
571
    (make-local-variable 'lyskom-blocking-return)
David Kågedal's avatar
David Kågedal committed
572
573
    (make-local-variable 'lyskom-buffer)
    (make-local-variable 'lyskom-command-to-do)
Per Cederqvist's avatar
.    
Per Cederqvist committed
574
    (make-local-variable 'lyskom-conf-cache)
David Kågedal's avatar
David Kågedal committed
575
576
577
578
    (make-local-variable 'lyskom-count-var)
    (make-local-variable 'lyskom-current-conf)
    (make-local-variable 'lyskom-current-subject)
    (make-local-variable 'lyskom-current-text)
579
    (make-local-variable 'lyskom-default-password)
David Kågedal's avatar
David Kågedal committed
580
581
582
583
584
585
586
587
    (make-local-variable 'lyskom-default-user-name)
    (make-local-variable 'lyskom-do-when-done)
    (make-local-variable 'lyskom-dont-change-prompt)
    (make-local-variable 'lyskom-errno)
    (make-local-variable 'lyskom-executing-command)
    (make-local-variable 'lyskom-fetched-texts)
    (make-local-variable 'lyskom-filter-list)
    (make-local-variable 'lyskom-is-administrator)
Per Cederqvist's avatar
.    
Per Cederqvist committed
588
    (make-local-variable 'lyskom-is-parsing)
David Kågedal's avatar
David Kågedal committed
589
590
591
    (make-local-variable 'lyskom-is-waiting)
    (make-local-variable 'lyskom-is-writing)
    (make-local-variable 'lyskom-last-conf-done)
Per Cederqvist's avatar
.    
Per Cederqvist committed
592
593
    (make-local-variable 'lyskom-last-conf-fetched)
    (make-local-variable 'lyskom-last-conf-received)
David Kågedal's avatar
David Kågedal committed
594
595
    (make-local-variable 'lyskom-last-group-message-recipient)
    (make-local-variable 'lyskom-last-personal-message-sender)
David Kågedal's avatar
David Kågedal committed
596
597
598
    (make-local-variable 'lyskom-last-viewed)
    (make-local-variable 'lyskom-list-of-edit-buffers)
    (make-local-variable 'lyskom-marked-text-cache)
Per Cederqvist's avatar
.    
Per Cederqvist committed
599
    (make-local-variable 'lyskom-membership)
David Kågedal's avatar
David Kågedal committed
600
    (make-local-variable 'lyskom-membership-is-read)
601
    (make-local-variable 'lyskom-current-prompt)
602
    (make-local-variable 'lyskom-normally-read-texts)
David Kågedal's avatar
David Kågedal committed
603
604
605
606
607
608
609
610
611
612
613
614
615
    (make-local-variable 'lyskom-number-of-pending-calls)
    (make-local-variable 'lyskom-options-done)
    (make-local-variable 'lyskom-other-clients-user-areas)
    (make-local-variable 'lyskom-output-queue)
    (make-local-variable 'lyskom-pending-calls)
    (make-local-variable 'lyskom-pers-cache)
    (make-local-variable 'lyskom-pers-no)
    (make-local-variable 'lyskom-prefetch-conf-tresh)
    (make-local-variable 'lyskom-prefetch-confs)
    (make-local-variable 'lyskom-prefetch-texts)
    (make-local-variable 'lyskom-previous-text)
    (make-local-variable 'lyskom-prioritize-buffer)
    (make-local-variable 'lyskom-proc)
Per Cederqvist's avatar
.    
Per Cederqvist committed
616
    (make-local-variable 'lyskom-reading-list)
David Kågedal's avatar
David Kågedal committed
617
618
    (make-local-variable 'lyskom-server-info)
    (make-local-variable 'lyskom-server-name)
619
620
621
622
623
624
625
    (make-local-variable 'lyskom-server-version)
    (make-local-variable 'lyskom-server-supports)
    (make-local-variable 'lyskom-long-conf-types-flag)
    (make-local-variable 'lyskom-set-last-read-flag)
    (make-local-variable 'lyskom-uconf-stats-flag)
    (make-local-variable 'lyskom-z-lookup-flag)
    (make-local-variable 'lyskom-accept-async-flag)
David Kågedal's avatar
David Kågedal committed
626
    (make-local-variable 'lyskom-session-no)
David Kågedal's avatar
David Kågedal committed
627
    (make-local-variable 'lyskom-session-priority)
David Kågedal's avatar
David Kågedal committed
628
629
    (make-local-variable 'lyskom-text-cache)
    (make-local-variable 'lyskom-text-mass-cache)
Per Cederqvist's avatar
.    
Per Cederqvist committed
630
    (make-local-variable 'lyskom-to-be-printed-before-prompt)
David Kågedal's avatar
David Kågedal committed
631
632
633
634
    (make-local-variable 'lyskom-to-do-list)
    (make-local-variable 'lyskom-unparsed-buffer)
    (make-local-variable 'lyskom-unparsed-marker)
    (make-local-variable 'lyskom-unread-confs)
Per Cederqvist's avatar
.    
Per Cederqvist committed
635
    (make-local-variable 'lyskom-what-i-am-doing)
David Kågedal's avatar
David Kågedal committed
636
637
638
    (make-local-variable 'lyskom-who-info-buffer)
    (make-local-variable 'lyskom-who-info-buffer-is-on)
    (make-local-variable 'lyskom-who-info-cache)
Per Cederqvist's avatar
.    
Per Cederqvist committed
639
640
641
642
643
644
645
646
647
    (make-local-variable 'mode-line-conf-name)
    (setq lyskom-proc proc)
    (setq lyskom-pers-no pers-no)
    (setq lyskom-membership membership)
    (setq lyskom-last-viewed last-viewed)
    (setq lyskom-membership-is-read membership-is-read)
    (setq lyskom-unparsed-buffer replies-buffer)
    (setq lyskom-unparsed-marker replies-marker)
    (setq lyskom-server-info server-info)
648
    (setq lyskom-server-name server-name)
Per Cederqvist's avatar
.    
Per Cederqvist committed
649
650
    (setq lyskom-do-when-done (cons kom-do-when-done kom-do-when-done))
    (setq lyskom-output-queue (lyskom-queue-create))
651
    (setq lyskom-list-of-edit-buffers nil)
David Kågedal's avatar
David Kågedal committed
652
    (setq lyskom-pending-calls nil)
Per Cederqvist's avatar
.    
Per Cederqvist committed
653
    (lyskom-set-mode-line (lyskom-get-string 'not-present-anywhere))))