美文网首页
开发自己的emacs插件

开发自己的emacs插件

作者: 余很多之很多code | 来源:发表于2022-11-10 13:51 被阅读0次

emacs个人需求

本地记录的笔记文章,想在emacs快速通过文件名打开

通过第三方插件

通过插件counsel-projectile-find-file 快速搜索找到并打开文件,但是只能针对当前项目下。

自己写一个emacs插件

lisp插件代码

(defun open-vim-notepad()
  (interactive)
  (find-file "/opt/dir/yulove/yudata/code/soft/vim/vim-notepad.md"));

以上lisp代码:通过输入open-vim-notepad,找到文件vim-notepad.md,
并且快速打开文件

java代码生成

通过java代码遍历笔记文件,生成大量的open-xxx函数,

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Map;
public class EmacsOpenSettings {
    private static StringBuffer buff = new StringBuffer();
    private static Map<String,String> map = new HashMap<String,String>();
    
    public static void main(String[] args) {
        String path = "/opt/dir/yulove/yudata"; 
        File file = new File(path); 
        func(file);
        buff.append("(provide 'open-settings)");
        System.out.println(buff);
        
        try {
            BufferedWriter writer = new BufferedWriter(
            new FileWriter(
            "/opt/dir/yulove/yuconfig/etc/.emacs.d/config/open-settings.el"
            )
            );
            writer.write(buff.toString());
            writer.close();
        }catch(Exception ex) {
            ex.printStackTrace();
        }
    
    }
    
    private static void func(File file){
        File[] fs = file.listFiles();
        for(File f:fs){
            if(f.isDirectory()) //若是目录,则递归打印该目录下的文件
                func(f);
            if(f.isFile()) {
                String name = f.getName().split("\\.")[0];
                if(map.containsKey(name)||name.length()<=1) {
                    continue;
                }
                buff.append(open_settings(name,f.getPath()));
                map.put(name, name);
            }
                
        }
    }
    
    private static String open_settings(String name ,String path) {
        
        String s="(defun open-"+name+"()\n"
                + "  (interactive)\n"
                + "  (find-file \""+path+"\"));\n";     
        return s;
    }

ps:代码很早以前写的,所以用java写脚本代码了,最后打成了jar包,通过命令行调用,如果有新文件加入,重新生成。
文件/opt/dir/yulove/yuconfig/etc/.emacs.d/config/open-settings.el , 我是ln -s 软链接到了 ~/.emacs.d/config/open-settings.el

效果

tty.gif

相关文章

  • 开发自己的emacs插件

    emacs个人需求 本地记录的笔记文章,想在emacs快速通过文件名打开 通过第三方插件 通过插件counsel-...

  • 关于扩展Emacs插件能力的思考

    平时使用过很多Emacs插件,看过很多插件的源码,也自己写过一些小函数和插件,来提高自己日常使用Emacs的效率。...

  • atom emacs 快捷键

    atom atomic-emacs 插件的 emacs 快捷键收集 atom emacs keybinding:

  • 我为什么不想把自己的Emacs插件放到MELPA上?

    玩了Emacs十几年, 写了很多 Emacs插件 , 有很多人都建议把我的Emacs插件放到 MELPA 上. 我...

  • Learn Emacs In Day 8

    Learn Emacs In Day 8 大纲 Outline Evil插件 把Emacs变成Vim Evil(I...

  • emacs上使用px转换vw插件

    因为emacs缺少一个插件已经影响了前端同学对emacs的兴趣了,这有点尴尬,其实emacs很强大的。vs cod...

  • Emacs 学习第4天

    这篇文章主要内容是给 Emacs 添加一个插件管理器,并添加一些基础的插件,使 Emacs 变得更加好用。 第一步...

  • Emacs Paredit插件

    没有Paredit插件,在Emacs上写lisp代码会痛苦无比。最开始是在王垠的博客上看到了这个插件,当时只是为了...

  • Visual Studio Code 初体验

    背景 最近手指不堪emacs的折磨,且确实在emacs上的开发效率不高。尤其是做web开发与c++底层服务开发同时...

  • Emacs环境变量

    Emacs有一套自身的环境变量,可以通过getenv获取。很多插件会访问Emacs的环境变量,然后进行后续操作。 ...

网友评论

      本文标题:开发自己的emacs插件

      本文链接:https://www.haomeiwen.com/subject/fxwztdtx.html