summaryrefslogtreecommitdiff
path: root/lisp/net/tramp-util.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/net/tramp-util.el')
-rw-r--r--lisp/net/tramp-util.el68
1 files changed, 66 insertions, 2 deletions
diff --git a/lisp/net/tramp-util.el b/lisp/net/tramp-util.el
index 2d828d27c51..1cd7f14dcd6 100644
--- a/lisp/net/tramp-util.el
+++ b/lisp/net/tramp-util.el
@@ -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)