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

news2024/9/21 18:58:06

简介: 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, interactive

class 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))

    @interactive
    def 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.coloradmin.cn/o/564236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web安全常见攻击

前言 本篇主要简单介绍在 Web 领域几种常见的攻击手段。 1. Cross Site Script&#xff08;XSS跨站脚本攻击) 首先插播一句&#xff0c;为毛叫 XSS&#xff0c;缩写明显是 CSS 啊&#xff1f;没错&#xff0c;为了防止与我们熟悉的 CSS&#xff08;Cascading Style Sheets&am…

类ChatGPT的各种语言大模型LLM开源Github模型集合​

作为开发人员&#xff0c;面对堪称科技奇点爆发的ChatGPT&#xff0c;我们如何应对。当然是努力跟进&#xff0c;虽然ChatGPT不开源&#xff0c;但是有诸多不输ChatGPT的各类语言大模型LLM有分享。我们筛选出其中影响力较大的各个开源Github仓库&#xff0c;收录到 类ChatGPT的…

由浅入深Dubbo网络通信协议大全

目录 1 网络通信协议1.1 dubbo协议1.2 rmi协议1.3 hessian协议1.4 http协议1.5 webservice协议1.6 thrift协议1.7 rest协议1.8 grpc协议1.9 memcached协议1.10 redis协议 2 序列化实现剖析 1 网络通信协议 在之前的内容中&#xff0c;我们讲解了消费者端服务发现与提供者端服务…

局部最小值问题

局部最小值问题 自写&#xff1a; // arr 相邻的数不相等&#xff01; 返回一个局部最小的下标public static int oneMinIndex(int[] arr) {if(arr null || arr.length 0) {return -1;}if(arr.length 1) {return 0;}int L 0;int R arr.length - 1;if(arr[L] < arr[L 1…

C++判断大端小端

C判断大端小端 1. 基础知识 大端小端其实表示的是数据在存储器中的存放顺序。 大端模式&#xff1a;数据的高字节存放在内存的低地址中&#xff0c;而低字节则存放在高地址中。地址由小到大增加&#xff0c;数据则从高位向低位存放&#xff0c;这种存放方式符合人类的正常思维…

Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?

目录 一图胜万言&#xff01;&#xff01; 解释说明 1. hadoop 2. hive 3. hbase 总结 一图胜万言&#xff01;&#xff01; 解释说明 1. hadoop 它是一个分布式计算分布式文件系统&#xff0c;前者其实就是 MapReduce&#xff0c;后者是 HDFS 。后者可以独立运行&…

特瑞仕|关于无线射频

无线射频&#xff08;Radio Frequency, RF&#xff09;是指在一定频率范围内&#xff0c;通过无线电波进行通信和传输信息的技术。随着移动通信、物联网、智能家居等领域的不断发展&#xff0c;无线射频技术已经成为现代社会中不可或缺的一部分。本文将从以下几个方面对无线射频…

打印机无法扫描的原因及解决方法

在家庭和办公环境中&#xff0c;打印机已成为不可或缺的设备。它不仅可以打印文件&#xff0c;还可以扫描文档并将它们转换为数字数据。但有时&#xff0c;打印机可能无法扫描文档或图片。以下是可能导致这些问题的原因和解决方法。 出现打印机无法扫描的原因&#xff1a; 1.…

web基础和http协议

文章目录 一、web基础1.1dns的概念1.2网页的概念1.3HTML的概念1.4静态网页1.5动态网络 二、HTTP协议2.1什么是HTTP协议2.2HTTP的版本协议2.3HTTP的请求方法2.4HTTP的状态码2.5HTTP 请求流程分析 一、web基础 1.1dns的概念 dns用作域名解析&#xff0c;有正向解析和反向解析两…

protobuf全局环境搭建

一、安装npm 1.测试是否安装npm 如果未出现npm 不是内部或外部命令&#xff0c;则先安装npm npm是NodeJs的包管理器&#xff08;Node Package Manager&#xff09; 所以我们要安装npm&#xff0c;其实就是安装NodeJs&#xff0c;进入NodeJs官网 下载完成之后&#xff0c;安装…

7.性能测试

目录 一、常见的性能问题 二、为啥要进行性能测试&#xff1f; 三、确定性能测试的需求&#xff08;性能指标&#xff0c;量化&#xff09; 1.关键性能指标分析 2.关键业务的分析 四、不同维度衡量系统的性能 1.研发人员 2.系统运维人员 3.用户 4.性能测试人员 五、性…

力扣 695. 岛屿的最大面积

一、题目描述 给你一个大小为 m x n 的二进制矩阵 grid。 岛屿是由一些相邻的 1&#xff08;代表土地&#xff09;构成的组合&#xff0c;这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。…

论文分享 A ConvNet for the 2020s

摘要 视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入&#xff0c;它迅速取代了 ConvNets&#xff0c;成为最先进的图像分类模型。另一方面&#xff0c;vanilla ViT 在应用于对象检测和语义分割等一般计算机视觉任务时面临困难。正是层次化的 Transforme…

SpringBoot 3.1现已推出,惊艳新特性带来前所未有的开发体验

一、介绍 1.1 新特性概述 经过半年的沉淀 Spring Boot 3.1于2023年5月18日正式发布了&#xff0c;带来了许多令人兴奋的新特性和改进。本篇博客将详细介绍Spring Boot 3.1的新特性、升级说明以及核心功能的改进。 同时&#xff0c;2.6.x 版本线已经停止维护了&#xff0c;最新…

02SpringCloud Nacos注册中心和配置中心与Sentinel服务熔断和流控

Nacos注册中心和配置中心 Nacos 是 Alibaba 开发的用于微服务管理的平台&#xff0c;核心功能&#xff1a;服务注册与发现和集中配置管理。 Nacos 作为服务注册发现组件&#xff0c;可以替换Spring Cloud 应用中传统的服务注册于发现组件&#xff0c;如&#xff1a;Eureka、C…

XML和JSON格式转换成txt

XML如下这种&#xff1a; 转换代码 import os import xml.etree.ElementTree as ET# xml文件存放目录(修改成自己的文件名) input_dir rC:\121\Annotations# 输出txt文件目录&#xff08;自己创建的文件夹&#xff09; out_dir rC:\121\txtclass_list []# 获取目录所有xml文…

pix2pixHD代码---数据集处理

在train文件中&#xff1a;其中dataset是dataloader的方法&#xff0c;而dataloader等于CreateDataLoader。 所以我们跳到CreateDataLoader&#xff1a; 在CreateDataLoader中返回的是dataset_loader&#xff0c;是来自于CustomDatasetDataLoader。切调用了initialize。因为C…

零次学习(Zero-Shot Learning)

零次学习&#xff08;Zero-Shot Learning&#xff09; 零样本学习zero-shot learning&#xff0c;是最具挑战的机器识别方法之一。2009年&#xff0c;Lampert 等人提出了Animals with Attributes数据集和经典的基于属性学习的算法&#xff0c;开始让这一算法引起广泛关注。 零…

qt quick(qml)通过arcgis导入自定义格式地图(Windows 版本)

参考ArcGIS Maps SDK for Qt 参考Display a map 安装 预先安装的软件 安装ArcGIS SDK 点击ArcGIS Maps SDK for Qt 注册账号 要注册成developer版本用户的&#xff0c;不然之后可能没办法生成API 下载 下载之后安装&#xff0c;一路next就可以了 在QT中创建ArcGIS项目…

CMOS图像传感器——TDI CIS(2)

在之前的文章 CMOS图像传感器——TDI CIS_tdi相机的工作原理_沧海一升的博客-CSDN博客时间延迟积分(Time-Delay Integration, TDI)技术是一种特殊的成像模式https://blog.csdn.net/qq_21842097/article/details/119873386 对CMOS TDI图像传感器做了基本介绍,这里我们…