【问题标题】:Open and close txt files with emacs in bash script在 bash 脚本中使用 emacs 打开和关闭 txt 文件
【发布时间】:2016-09-29 18:16:50
【问题描述】:

我编写了一个脚本,可以打开我工作期间需要的几个文本文件(例如期刊等)。脚本如下所示:

#! /bin/bash

DOCPATH=$HOME/Documents
NUMDOCPATH=$DOCPATH/Numerics

emacs $DOCPATH/UTA_WorkProtocol.txt &

emacs $NUMDOCPATH/NumProtocol.txt &

emacs $NUMDOCPATH/CITCOM/Protocol.txt &

这工作正常,文件已正确打开。但是,最后我想创建另一个脚本来再次保存和关闭这些文件。但是,我找不到任何命令来保存和/或关闭使用 bash 脚本在后台运行的打开的 emacs 文件。运行这样的脚本而不是在每个 txt 文件中执行 C-X C-s 会更方便,因为我可能还会将新文件添加到“打开”脚本中。

请有经验的人帮助我。谢谢!

【问题讨论】:

  • 为什么?你在后台运行 emacs 窗口做什么?
  • 我基本上是使用协议文件来写下我做过和发现的事情。因此,我从一开始就启动文件,写下所有重要的内容,并希望在完成一个命令后自动关闭所有文件。

标签: linux bash shell emacs


【解决方案1】:

这有点小技巧,但bash 脚本并不真正适合这种类型的 UI 脚本。

#! /bin/bash

DOCPATH=$HOME/Documents
NUMDOCPATH=$DOCPATH/Numerics

emacs $DOCPATH/UTA_WorkProtocol.txt &
emacs $NUMDOCPATH/NumProtocol.txt &
emacs $NUMDOCPATH/CITCOM/Protocol.txt &

emacs   # *Not* in the background
kill $(jobs -p)

当您准备好关闭所有后台的 emacs 实例时,只需关闭位于前台的实例即可。这将导致最终的emacs 退出,这将允许脚本继续执行kill 命令,这将终止剩余的后台作业。

请注意,最后的emacs 可以是任何阻止脚本完成的命令,并且可以很容易地自行终止。

【讨论】:

  • 嗯,这似乎没问题。但是,如果我没有保存任何打开的,所做的所有更改都会丢失。
  • 真正了解emacs(不是我)的人应该发布一个答案,解释如何替换kill 命令,该命令将适当的命令发送到emacs 的每个运行实例以保存和关闭正确。
【解决方案2】:

你必须使用 bash 吗?在 Emacs lisp 中很容易:

(defun open-files ()
  (interactive)
  (find-file "UTA_WorkProtocol.txt")
  (find-file "NumProtocol.txt")
  (find-file "CITCOM/Protocol.txt"))

(defun close-files ()
  (interactive)
  (save-buffers-kill-emacs)

然后打开一个 Emacs 实例并在 M-x 中运行这些命令。

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2014-04-05
    • 2012-10-22
    • 2016-08-06
    相关资源
    最近更新 更多