Giter VIP home page Giter VIP logo

emacs-auto-deployment's Introduction

Emacs auto-deployment

MELPA: copy-file-on-save MELPA stable: copy-file-on-save

copy-file-on-save is a minor mode to copy the file to another path on after-save-hook. This not only saves the backup in the project specific path, it also you can realize the deployment to the remote server over TRAMP.

Why copy-file-on-save?

The original name of this feature was auto-deployment. It was named after JetBrains’ automatic deployment function. But in Emacs this function can be realized by TRAMP’s excellent file system abstraction layer. That is, deploying to remote server is just done with only copy-file function.

vs direct editing on TRAMP

TRAMP can log in to remote server from Emacs and edit the file directly. This means that you do not need to keep a full copy of the project on your client PC. But at the price you will feel latency to all file system operations.

The disadvantage of TRAMP is Emacs Lisp compatibility. Especially in the case of several packages, processing depending on the file system is lacking consideration or it may be slow even if it works. For example, Magit also works via TRAMP, but it’s very slow.

vs emacs-ssh-deploy

ssh-deploy package is a TRAMP wrapper like copy-file-on-save, but it has many features such as directory recursive deployment and diff between remote and local. If you want rich features you should use ssh-deploy.

On the other hand, we only provide simple functions. We recommend using tools and scripts such as rsync and git for multi-file deployment.

For deployment

A typical use of this feature is to place PHP files on the remote development server. However, this is useful not only for PHP but also for synchronizing files without depend on shared directory function of virtual environments (VirtualBox, Vagrant and Docker).

Extends TRAMP

vagrant-tramp and docker-tramp increase the affinity of Emacs (TRAMP) and Vagrant/Docker, so it is worth noting.

API

Variable

(string) copy-file-on-save-dest-dir

Path to deployment directory or convert (mapping) function.

You can use TRAMP’s syntax. See Configuration - TRAMP User Manual and Inline methods. (ex. /scp:dest-server:/home/your/path/to/proj)

(repeat string) copy-file-on-save-ignore-patterns

Configure for each project

This is necessary for sharing variables in the project.

Using .dir-locals.el (RECOMMENDED)

Put the following into your .dir-locals.el in project root directory.

((nil . ((copy-file-on-save-dest-dir . "/scp:dest-server:/home/your/path/to/proj")
         (copy-file-on-save-ignore-patterns . ("/cache")))))

This method uses standard functions of Emacs. However, you will feel annoying warnings from Emacs. Please see Safe File Variables - GNU Emacs Manual for how to suppress this warning.

How to turn on copy-file-on-save

Enable global-minor-mode (RECOMMENDED)

Put the following into your init.el or .emacs file.

(global-copy-file-on-save-mode)

Please don’t worry. This mode does not work in buffers that do not have available settings for deployment.

Enable manually

M-x copy-file-on-save-mode will toggle enable/disable the minor mode.

Using hook with auto-minor-mode

;; Example for full directory path to your project.
(add-to-list 'auto-minor-mode-alist `(,(format "^%s/work/your-project/" (getenv "HOME")) . copy-file-on-save-mode))
;; You can ommit path if it is enough specific your project.
(add-to-list 'auto-minor-mode-alist '("/work/your-project/" . copy-file-on-save-mode))

Changelog

See also CONTRIBUTORS.

v0.0.3

  • [ENHANCEMENT,BUG] Fixed saving failed when there was no directory. (Thanks @Csomnia)

emacs-auto-deployment's People

Contributors

csomnia avatar jcs090218 avatar zonuexe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

emacs-auto-deployment's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.