Emacs之实时渲染markdown(九十五)

news/2025/2/22 16:11:38/

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

文章目录

    • 1.前言
    • 2.下载配置EAF框架
      • <1>.下载配置emacs-application-framework(简称:EAF)
    • 3.加载配置应用:Markdown Previewer
    • 4.遇到的坑
      • <1>.第一个坑
    • 5.调试经验
      • <1>.黑盒盲调分析
      • <2>.效果图

1.前言

本篇目的:在Emacs中实时预览markdown,摆脱其他markdown第三方软件,实现左边写,右边实时渲染。
折腾了一天,终于调通了,为了让大家少走弯路,将趟过的坑分享给大家。

2.下载配置EAF框架

<1>.下载配置emacs-application-framework(简称:EAF)

# git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/.emacs.d/site-lisp/emacs-application-framework
# cd emacs-application-framework
# chmod +x ./install-eaf.py安装依赖
# ./install-eaf.py配置EAF框架
# emacs ~/.emacs
(add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/")
(require 'eaf)

3.加载配置应用:Markdown Previewer

其实第二步已经将所有的应用下载下来了,第三步只剩配置而已。但是安装有很多坑,自己注意点。
配置应用和EAF框架

(add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/");;加载EAF框架
(require 'eaf);;加载demo:M-x eaf-open-demo验证是否安装成功
(require 'eaf-demo);;加载图片查看器
(require 'eaf-image-viewer);;加载markdown; M-x eaf-open打开markdown文件
(require 'eaf-markdown-previewer)(defun open-markdown-file()(interactive)(eaf-open (buffer-name)))
(add-hook 'markdown-mode-hook 'open-markdown-file)

到这一步就可以预览了,但是只是在保存的时候才会预览。

配置实时预览

git clone https://github.com/manateelazycat/auto-save

;;eaf markdown 实时预览 begin
(load-file (expand-file-name "~/.emacs.d/site-lisp/auto-save-markdown.el"))
(require 'auto-save)
(auto-save-enable);;安静的保存
(setq auto-save-silent t);;保存时自动删除行尾的空格
(setq auto-save-delete-trailing-whitespace t)
;; 当前文件类型为GPG文件时,禁用自动保存模式。
(setq auto-save-disable-predicates'((lambda ()(string-suffix-p"gpg"(file-name-extension (buffer-name)) t))))
;;eaf markdown 实时预览 end

4.遇到的坑

<1>.第一个坑

将emacs-application-framework/app目录下每个的应用中buffer.py引用from core.*包的全部加入以下patch。

from PyQt6.QtGui import QColor
from PyQt6.QtWidgets import QPushButton+ import sys
+ import os
+ CURRENT_DIR = os.path.split(os.path.abspath(__file__))[0]  # 当前目录
+ config_path = CURRENT_DIR.rsplit('/', 2)[0]  # 上2级目录
+ sys.path.append(config_path)from core.buffer import Buffer
from core.utils import get_emacs_theme_foreground, get_emacs_theme_background, interactiveclass AppBuffer(Buffer):def __init__(self, buffer_id, url, arguments):Buffer.__init__(self, buffer_id, url, arguments, True)self.add_widget(QPushButton("Hello, EAF hacker, it's working!!!"))self.buffer_widget.setStyleSheet("background: {}; color: {}; font-size: 100px;".format(self.theme_background_color, self.theme_foreground_color))@interactivedef update_theme(self):super().update_theme()self.background_color = QColor(self.theme_background_color)self.buffer_widget.setStyleSheet("background-color: {};".format(self.theme_background_color))self.buffer_widget.setStyleSheet("background: {}; color: {}; font-size: 100px;".format(self.theme_background_color, self.theme_foreground_color))self.update()

5.调试经验

因为作者也没有添加什么log开关,只有一个crash开关,也没啥用,关键得知道到底缺什么库,因为EAF基本是使用python3.x开发,然后使用Elisp来调用,知道这个架构以后,我们可以做点什么,来探测到底哪里出问题了。

<1>.黑盒盲调分析

我的策略就是:
将app应用中的所有的buffer.py执行一边,就知道问题处在哪里了,然后缺什么装什么就行。
这招很管用,看论坛有的人调EAF,两三天都没啥结果,这个依赖太多,环境太复杂了。

应用中python调用路径

~/.emacs.d/site-lisp/emacs-application-framework/app/xxx/buffer.py

<2>.效果图

在这里插入图片描述


http://www.ppmy.cn/news/79048.html

相关文章

Three.js--》实现3d小岛模型搭建

目录 项目搭建 初始化three.js基础代码 设置环境背景 设置水面样式 添加天空小岛 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还…

NFT游戏Mythical Beings将参加NFT Polygon 在线展会

Mythical Beings神秘生物是由Tarasca Art & Games 开发的基于区块链的卡牌收集游戏。游戏中每张卡牌所拥有的属性和背后的故事都是独一无二的&#xff0c;Mythical Beings不仅具有游戏属性&#xff0c;还兼具故事的传承。 作为一款跨链Polygon的NFT游戏&#xff0c;Mythic…

多态的应用

多态的应用 1.多态的构建&#xff1a; ​ 自我理解&#xff1a;就是 父类引用指向子类对象。 功能 &#xff1a; 父类能调用父类对应子类的方法和属性&#xff0c;但是都是优先调用 重写的方法 或 子类的属性&#xff01; 创建子类构造器&#xff0c;就是先进入子类构造器&…

花指令问题

前言 想起之前打题的时候经常会遇到一些关乎花指令的问题&#xff0c;但是没有系统地总结归纳花指令去除的姿势&#xff0c;浅浅开一个坑慢慢来写 题1&#xff1a;简单jmp 可以骗过dbg&#xff0c;但是放在ida中就很容易看出来&#xff0c;无效跳转 题目来源&#xff1a;[HD…

【Android笔记103】Android之自动完成文本框组件(AutoCompleteTextView、MultiAutoCompleteTextView)

这篇文章,主要介绍Android之自动完成文本框组件(AutoCompleteTextView、MultiAutoCompleteTextView)。 目录 一、AutoCompleteTextView组件 1.1、运行效果 1.2、案例代码 (1)布局文件

【C++刷题集】-- day3

目录 选择题 单选 OR59 字符串中找出连续最长的数字串⭐ 【题目解析】 【解题思路】 JZ39 数组中出现次数超过一半的数字⭐ 【题目解析】 【解题思路1】 【解题思路2】 选择题 单选 1、以下程序的输出结果是 ( ) #include <stdio.h> int main() {char a[10] …

CodeForces.1786A2.发牌.[中等][flg标识][数学规律][双色牌]

题目描述&#xff1a; 题目解读&#xff1a; 发牌问题&#xff0c;给两人发双色牌&#xff0c;同样还是 给a发1张&#xff0c;然后给b发2&#xff0c;3张&#xff1b; 给a发4&#xff0c;5张&#xff0c;给b发6&#xff0c;7张&#xff1b; 给a发8&#xff0c;9张&#xff…

mac 切换java jdk版本 java8 java11

1. 终端执行命令 查看本地各版本jdk&#xff1a;mac通常默认安装了jdk1.8 安装目录是 /Library/Java/JavaVirtualMachines/ cd /Library/Java/JavaVirtualMachines/ ls 2. 上述命令列出的各版本目录名 后&#xff0c;在全局配置文件.bash_profile中新增上面命令列出的各…