diff lisp/net/tramp-util.el @ 59582:92796330257a

Sync with Tramp 2.0.47.
author Michael Albinus <michael.albinus@gmx.de>
date Sun, 16 Jan 2005 13:18:31 +0000
parents 695cf19ef79e
children aac0a33f5772 6d92d69fae33
line wrap: on
line diff
--- a/lisp/net/tramp-util.el	Sun Jan 16 09:59:03 2005 +0000
+++ b/lisp/net/tramp-util.el	Sun Jan 16 13:18:31 2005 +0000
@@ -1,9 +1,9 @@
 ;;; -*- coding: iso-2022-7bit; -*-
 ;;; tramp-util.el --- Misc utility functions to use with Tramp
 
-;; Copyright (C) 2001  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-;; Author: Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+;; Author: kai.grossjohann@gmx.net
 ;; Keywords: comm, extensions, processes
 
 ;; This file is free software; you can redistribute it and/or modify
@@ -32,6 +32,60 @@
 (require 'compile)
 (require 'tramp)
 
+;; Define a Tramp minor mode. It's intention is to redefine some keys for Tramp
+;; specific functions, like compilation.
+;; The key remapping works since Emacs 21.4 only. Unknown for XEmacs.
+
+(when (fboundp 'define-minor-mode)
+
+  (defvar tramp-minor-mode-map (make-sparse-keymap)
+    "Keymap for Tramp minor mode.")
+
+  (define-minor-mode tramp-minor-mode "Tramp minor mode for utility functions."
+    :group 'tramp
+    :global nil
+    :init-value nil
+    :lighter " Tramp"
+    :keymap tramp-minor-mode-map
+    (setq tramp-minor-mode
+	  (and tramp-minor-mode (tramp-tramp-file-p default-directory))))
+
+  (add-hook 'find-file-hooks 'tramp-minor-mode t)
+  (add-hook 'dired-mode-hook 'tramp-minor-mode t)
+
+  (defun tramp-remap-command (old-command new-command)
+    "Replaces bindings of OLD-COMMAND by NEW-COMMAND.
+If remapping functionality for keymaps is defined, this happens for all
+bindings.  Otherwise, only bindings active during invocation are taken
+into account.  XEmacs menubar bindings are not changed by this."
+    (if (functionp 'command-remapping)
+	;; Emacs 21.4
+	(eval
+	 `(define-key tramp-minor-mode-map [remap ,old-command] new-command))
+      ;; previous Emacs 21 versions.
+      (mapcar
+       '(lambda (x)
+	  (define-key tramp-minor-mode-map x new-command))
+       (where-is-internal old-command))))
+
+  (tramp-remap-command 'compile 'tramp-compile)
+  (tramp-remap-command 'recompile 'tramp-recompile)
+
+  ;; XEmacs has an own mimic for menu entries
+  (when (fboundp 'add-menu-button)
+    (funcall 'add-menu-button
+     '("Tools" "Compile")
+     ["Compile..."
+      (command-execute (if tramp-minor-mode 'tramp-compile 'compile))
+      :active (fboundp 'compile)])
+    (funcall 'add-menu-button
+     '("Tools" "Compile")
+     ["Repeat Compilation"
+      (command-execute (if tramp-minor-mode 'tramp-recompile 'recompile))
+      :active (fboundp 'compile)])))
+
+;; Utility functions.
+
 (defun tramp-compile (command)
   "Compile on remote host."
   (interactive
@@ -49,6 +103,16 @@
       (setq default-directory d)))
   (tramp-handle-shell-command command (get-buffer "*Compilation*"))
   (pop-to-buffer (get-buffer "*Compilation*"))
+  (tramp-minor-mode 1)
+  (compilation-minor-mode 1))
+
+(defun tramp-recompile ()
+  "Re-compile on remote host."
+  (interactive)
+  (save-some-buffers (not compilation-ask-about-save) nil)
+  (tramp-handle-shell-command compile-command (get-buffer "*Compilation*"))
+  (pop-to-buffer (get-buffer "*Compilation*"))
+  (tramp-minor-mode 1)
   (compilation-minor-mode 1))
 
 (provide 'tramp-util)