节点包装器来启动终端程序,例如vim,emacs,tmux

时间:2018-07-29 21:21:45

标签: node.js vim emacs terminal tmux

TLDR ;如何从终端运行节点进程,从节点启动进程,退出节点进程并使该进程附加到父终端?

我正在编写一个节点终端应用程序,应该通过启动新的终端应用程序(例如vimemacstmux)结束。我希望该应用程序像在启动节点应用程序的终端中手动执行一样运行。

我目前对tmux解决方法是运行节点应用程序,该应用程序将建立一个新的tmux会话并在应用程序之前回显tmux attach-session命令存在。然后,用户可以在终端中手动键入此命令并执行它。现在,tmux会话在终端上运行 attached

我想将 attach 命令移到节点应用程序中,但最终结果相同。即节点应用程序终止,并且tmux会话附加到终端上运行。在我看来,这需要对emacsvim等应用程序执行相同的操作。在这些情况下,我无法解耦设置和附加。 (据我所知,vimemacs可以处理这种解耦,我很想知道,但是最初的问题要求为任何终端应用程序提供一个通用的解决方案。)

通过附加,我的意思是好像命令/程序是在终端中手动执行的。

1 个答案:

答案 0 :(得分:0)

POSIX <html lang="en" dir="ltr"> <head> <title>-</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://fonts.googleapis.com/css?family=Roboto+Condensed" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"> <style> /* Set the size of the div element that contains the map */ #map { width: 100%; /* The width is the width of the web page */ max-width:450px; } </style> <link rel="stylesheet" type="text/css" href="../main.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> ... <div class="row"> ... <div class="col-sm-6"> <div id="map"></div> </div> </div> <script> // Initialize and add the map function initMap() { // The location of company var freshlocation = {lat: 1.337344, lng: 103.912835}; // The map, centered at company var map = new google.maps.Map( document.getElementById('map'), {zoom: 7, center: freshlocation}); // The marker, positioned at company var marker = new google.maps.Marker({position: freshlocation, map: map}); } </script> <script async defer src="https://maps.googleapis.com/maps/api/js?key=MYAPIKEY&callback=initMap"> </script> ... </div> </body> </html> 解决了此问题,如@Amadan上面所述。此解决方案在Windows上不起作用。

以下代码段显示了如何使用kexec模块执行此操作的示例。

exec