Emacs 如何从最新到最旧删除具有相似名称(一次一个)的进程

Emacs 如何从最新到最旧删除具有相似名称(一次一个)的进程,emacs,elisp,dired,Emacs,Elisp,Dired,我遇到的情况是,我可能有几个进程同时以以下名称运行: preview preview<1> preview<2> preview<3> preview<4> 我设置了一个键来删除一个名为“预览”的进程: (定义键驱动模式映射(kbd“”)(lambda()(交互式) (删除流程(获取流程“预览”)) 我想这样的方法会奏效: (defun kill-last-process-named (name) (cl-loop with name-re

我遇到的情况是,我可能有几个进程同时以以下名称运行:

preview
preview<1>
preview<2>
preview<3>
preview<4>
我设置了一个键来删除一个名为“预览”的进程:

(定义键驱动模式映射(kbd“”)(lambda()(交互式)
(删除流程(获取流程“预览”))

我想这样的方法会奏效:

(defun kill-last-process-named (name)
  (cl-loop with name-re = 
           (format "^%s\\(?:<\\([[:digit:]]+\\)>\\)?" (regexp-quote name))
   for process in (process-list)
   for pname = (process-name process)
   if (string-match name-re pname)
   collect (cons (string-to-number (or (match-string 1 pname) "0")) process)
   into processes
   finally (delete-process (cdar (cl-sort processes '> :key 'car)))))
(defun kill最后一个名为(name)的进程)
(名称为re的cl循环=
(格式“^%s\\(?:\\)?”(regexp报价名称))
对于中的进程(进程列表)
对于pname=(进程名称进程)
if(字符串匹配名称重新命名)
收集(cons(字符串到数字(或(匹配字符串1 pname)“0”)进程)
进入过程
最后(删除进程(cdar(cl排序进程“>:key'car()())))

我想这样的方法会奏效:

(defun kill-last-process-named (name)
  (cl-loop with name-re = 
           (format "^%s\\(?:<\\([[:digit:]]+\\)>\\)?" (regexp-quote name))
   for process in (process-list)
   for pname = (process-name process)
   if (string-match name-re pname)
   collect (cons (string-to-number (or (match-string 1 pname) "0")) process)
   into processes
   finally (delete-process (cdar (cl-sort processes '> :key 'car)))))
(defun kill最后一个名为(name)的进程)
(名称为re的cl循环=
(格式“^%s\\(?:\\)?”(regexp报价名称))
对于中的进程(进程列表)
对于pname=(进程名称进程)
if(字符串匹配名称重新命名)
收集(cons(字符串到数字(或(匹配字符串1 pname)“0”)进程)
进入过程
最后(删除进程(cdar(cl排序进程“>:key'car()())))

您知道如何在Emacs中保持焦点,但在顶部打开一个“快速查看”窗口吗?即Emacs保持键盘焦点。@event_jr是的,这正是我的代码所做的。当您的光标在dired模式下的文件或文件夹上时,计算表达式
(启动进程“预览”nil“qlmanager”“-p”(dired获取访问文件))
。我有一个特殊的条件转义键,链接到下面答案中编写的函数:(全局设置键(kbd“”)`(菜单项“”)(lambda()(交互式)(cond((和(相等缓冲区文件名lawlist todo file)(和(>(递归深度)0)(不是(minibufferp))(抛出“退出nil”)((获取进程“预览”)(杀死最后一个名为“预览”)((相等(缓冲区名称)预览缓冲区名称)(杀死缓冲区预览缓冲区名称)(删除窗口)(退出递归编辑))):过滤器,(lambda(绑定)(如果(或)(和(和(和(相等缓冲区文件名lawlist todo文件)(和(>(递归深度)0)(不是(minibufferp)))(获取进程“预览”)(相等(缓冲区名称)预览缓冲区名称))绑定)))您知道如何在Emacs中保持焦点,但在顶部打开一个“快速查看”窗口吗?即Emacs保持键盘焦点。@event_jr是的,这正是我的代码所做的。在dired模式下,将光标放在文件或文件夹上,计算表达式
(启动进程“预览”nil“qlmanager”-p(dired get file for vision))
。我有一个特殊的条件转义键,链接到下面答案中编写的函数:(全局设置键(kbd“”)`(菜单项“”)(lambda()(交互式)(cond((和(相等缓冲区文件名lawlist todo file)(和(>(递归深度)0)(非(minibufferp)))(抛出“退出nil”)((获取进程“预览”)(杀死最后一个名为的进程)预览”)((相等(缓冲区名称)预览缓冲区名称)(杀死缓冲区预览缓冲区名称)(删除窗口)(退出递归编辑)):过滤器,(lambda(绑定)(if(或(和(和(相等缓冲区文件名lawlist todo file)(和(>(递归深度)0)(非(minibufferp)))(获取进程“预览”)(相等(缓冲区名称)预览缓冲区名称))绑定)
(defun kill-last-process-named (name)
  (cl-loop with name-re = 
           (format "^%s\\(?:<\\([[:digit:]]+\\)>\\)?" (regexp-quote name))
   for process in (process-list)
   for pname = (process-name process)
   if (string-match name-re pname)
   collect (cons (string-to-number (or (match-string 1 pname) "0")) process)
   into processes
   finally (delete-process (cdar (cl-sort processes '> :key 'car)))))