;; AUTHOR: GPL(C) Mohsin Ahmed, http://www.cs.albany.edu/~mosh
;; SYNOPSIS: Make xemacs compatible with gnu emacs.
;; See /share/lib/xemacs/
;;     /share/lib/xemacs-20.4/lisp/
;;     /share/lib/xemacs-20.4/lisp/prim/mouse.el
;;     


(setq load-path (cons "~/emacs"
                      (cons "/usr/local/xemacs/current/lib/xemacs/lisp"
                            load-path)))
(load-library "mosh-vars.el")

(require 'hyper-apropos)
(require 'rect)
(require 'font-lock)


(require 'mosh)
(require 'mclip)
(require 'mosh-keyf)

(setq frame-title-format (concat
    "X%S: %b " (getenv "LOGNAME") "@" (system-name)))

; (savehist-load)

(line-number-mode 1)
(column-number-mode 1)
(setq auto-save-default nil)
(auto-save-mode -1)
(setq delete-key-deletes-forward 't)
(set-specifier default-toolbar-visible-p nil)
(set-specifier scrollbar-width           12)
(set-specifier scrollbar-height          12)

;; Some necessary functions ==========================================

(defun mosh-fill-to-column () "Repeat last char upto fill-column."
  (interactive)
  (if (eq (preceding-char) ?\n) (insert "="))
  (insert-char (preceding-char) (- fill-column (current-column)))
)

(defun mosh-delete-whitespace ()
  "Delete whitespace and delete-blank-lines bidirectionally"
  (interactive)
  (cond
   ((looking-at "[ \t]")
    (delete-region (point)
                   (progn (skip-chars-forward " \t") (point))))
   ((looking-at "\n\n")
    (delete-blank-lines))
   ((eolp)
    (delete-region (point)
                   (progn (skip-chars-forward " \t\n") (point))))
   ((bolp)
    (delete-region (point)
                   (progn (skip-chars-backward " \t\n") (point))))
   (t
    (delete-horizontal-space))
))

(defun mosh-trim-blanks ()
   "Delete trailing blanks/C-m/tabs from all lines in file.
    was called by 'write-file-hook, now on \\[mosh-trim-blanks]"
   (interactive)
   (untabify (point-min) (point-max))
   (save-excursion
     (goto-char (point-min))
     (replace-regexp "[ \t\C-m]+$" "" ))
   (message "Trimmed trailing blanks")
   nil      ; Must return nil for write-file-hook to continue.
)


(defun mosh-toggle-case ()
  "Like vi ~ command, from gnu-emacs/mosh.el"
    (interactive)
    (let (s e c (case-fold-search nil))
      (setq s (point))
      (setq c (looking-at "[A-Z]"))
      (forward-char)
      (setq e (point))
      (if c (downcase-region s e) (upcase-region   s e)))
)


(defun mosh-match-paren-other-window () "Match-Paren or Other-Window. kp5"
   (interactive)
   (cond
     ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
     ((looking-at "\\s\)") (forward-char 1) (backward-list 1))
     ((eq (count-windows) 1)                    ; Single window?
      (exchange-point-and-mark))
     (t (other-window '1)))
)


(setq
      vm-preview-lines            15
      vm-mutable-windows          nil
      vm-included-text-attribution-format   "On %w, %d %m %y, %F wrote:\n"
)

;; xemacs keys defined.
(if w32emacs (define-key function-key-map [kp-space] [clear]))

(define-key isearch-mode-map [down] 'isearch-repeat-forward)
(define-key isearch-mode-map [up  ] 'isearch-repeat-backward)
(define-key isearch-mode-map [right] 'isearch-yank-word)
(define-key isearch-mode-map [kp-multiply] 'isearch-toggle-regexp)
(define-key isearch-mode-map [kp-divide]   'isearch-toggle-case-fold)
(define-key isearch-mode-map [kp-subtract] 'isearch-abort)

(if ttyemacs (mset-key  [(control ?h)] 'delete-backward-char))

(mset-key [kp-space] 'mosh-match-paren-other-window)

(mset-key [(control kp-prior)] 'beginning-of-buffer)
(mset-key [(control kp-next )] 'end-of-buffer)

(mset-key [(control prior)] 'beginning-of-buffer)  ; was scroll-right
(mset-key [(control next )] 'end-of-buffer)        ; was scroll-left

(mset-key [home] '(move-to-window-line 0))
(mset-key [end]  '(move-to-window-line -1))
(mset-key [kp-subtract] '(kill-buffer nil))
(mset-key [f10 ?c]  'mosh-copy-to-clip)
(mset-key [f12 ?c]  'mosh-paste-clip)

(mset-key [(control ?=)]        'mosh-fill-to-column)
(mset-key [f11]                 'find-file)
(mset-key [pause]               'save-buffer)
(mset-key [(shift backspace)]   'backward-kill-line)
(mset-key [(control backspace)] 'backward-kill-word)
(mset-key [(control delete)   ] 'kill-word)
(mset-key [(shift   delete)   ] 'kill-line)
(mset-key [(control kp-insert)] 'toggle-read-only)
(mset-key [(control tab)]       'dabbrev-expand)
(mset-key [kp-divide]           'undo)
(mset-key [         kp-multiply]   'eval-defun)
(mset-key [(shift   kp-multiply)]  'eval-region)
(mset-key [(control kp-multiply)]  'eval-buffer)
(mset-key [(super   kp-multiply)]  'byte-compile-file)
(mset-key [(control kp-add)] 'repeat-complex-command)
(mset-key [kp-add]       'bury-buffer)
(mset-key [(meta left )] 'copy-from-above-command)
(mset-key [(meta right)] '(copy-from-above-command 1))
(mset-key [(meta space)] 'mosh-delete-whitespace)
(mset-key [(meta delete)] 'mosh-trim-blanks)
(mset-key [(control ?`)] 'mosh-toggle-case)

;; ===================================================================
;; Colors and fonts.
(set-face-font 'default
  "-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1")
(set-face-font 'modeline
  "-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1")

;; cat .bashrc
;;      XAPPLRESDIR=/net/sassun13/u/mosh/app-defaults
;; cat $XAPPLRESDIR/Emacs
;; Emacs.default.attributeFont:  \
;;      -Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO8859-1
;;
;; too light on light bg. Need fixed 10x20 font.
;; yellow   ff ff 00
;; magenta  ff 00 ff
;; cyan     00 ff ff
;; deepblue 0f 0f ff
;; purple   8f 0f ff
;; terrible default colors for dark background.
;; see M-x list-colors-display and list-faces-display.

(setq focus-follows-mouse 't)
(setq mouse-yank-at-point 't)
(setq zmacs-regions       'nil)

; (custom-set-face-font-size 'default 14)
; (setq bar-cursor         nil)

(set-face-background 'default "grey16")
(set-face-foreground 'default "grey90")
(set-face-background 'isearch                       "sandybrown")
(set-face-foreground 'isearch                       "black")
(set-face-foreground 'highlight                     "black")
(set-face-foreground 'primary-selection             "black")
(set-face-foreground 'secondary-selection           "black")
(set-face-foreground 'zmacs-region                  "black")
; (set-face-background 'paren-match                   "grey35")
; (set-face-background 'paren-mismatch                "orchid")
(set-face-foreground 'text-cursor                   "red2")
(set-face-background 'text-cursor                   "yellow2")
(set-face-background 'modeline                      "sandybrown")
(set-face-foreground 'modeline                      "blue4")
(set-face-foreground 'font-lock-comment-face        "darksalmon")
(set-face-foreground 'font-lock-doc-string-face     "lightgreen")
(set-face-foreground 'font-lock-function-name-face  "skyblue")
(set-face-foreground 'font-lock-keyword-face        "moccasin")
(set-face-foreground 'font-lock-preprocessor-face   "lightsteelblue")
(set-face-foreground 'font-lock-reference-face      "tomato")
(set-face-foreground 'font-lock-string-face         "mediumseagreen")
(set-face-foreground 'font-lock-type-face           "violet")
(set-face-foreground 'font-lock-variable-name-face  "lightskyblue")
(set-face-foreground 'hyper-apropos-documentation   "salmon")
(set-face-foreground 'hyper-apropos-hyperlink       "lightblue")
(set-face-foreground 'list-mode-item-selected       "red")
(set-face-background 'list-mode-item-selected       "goldenrod")
(set-face-foreground 'blue                          "lightskyblue")
; (set-face-foreground 'comint-input-face             "lightsteelblue")

;; EOF.


