<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Elvince</id>
	<title>WikEmacs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Elvince"/>
	<link rel="alternate" type="text/html" href="https://wikemacs.org/wiki/Special:Contributions/Elvince"/>
	<updated>2026-04-09T12:55:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Ploum&amp;diff=51002</id>
		<title>User talk:Ploum</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Ploum&amp;diff=51002"/>
		<updated>2025-05-26T11:21:41Z</updated>

		<summary type="html">&lt;p&gt;Elvince: hello&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome on Wikemacs! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 11:21, 26 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Talk:Main_Page&amp;diff=51001</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Talk:Main_Page&amp;diff=51001"/>
		<updated>2025-03-12T12:49:18Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* spam: deleteBatch extension? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMPORTANT: Offline discussion ==&lt;br /&gt;
&lt;br /&gt;
There is a Google group for discussion of the site: https://groups.google.com/forum/?fromgroups#!forum/wikemacs so we should probably favor posting there. [[User:PhilHudson|PhilHudson]] 16:16, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== IMPORTANT: Content Quality guidelines ==&lt;br /&gt;
I think before flame wars and fights among members, we should form&lt;br /&gt;
proper/strict guide lines for each aspect of the site. [http://depuypinnaclelawsuit.webnode.com/ DePuy Pinnacle Lawsuit]   Wikipedia has very strict&lt;br /&gt;
rules about that., even their bots can tell the content quality of a&lt;br /&gt;
page. we can create articles in &amp;quot;WikEmacs&amp;quot; Namespace. [[User:Kindahero|Kindahero]] 23:57, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:Wikipedia has lots of rules today, but it started with very few rules and they invented the rules as they became necessary.  It's impossible to predict what problems will be encountered.  I'd suggest that rules only be made when it becomes clear that one is necessary. [[User:Ciaran|Ciaran]] 15:24, 29 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
I would like to structure the Main Page in boxes like here [http://www.webos-internals.org] the Featured Article/Project. Any objections?&lt;br /&gt;
And maybe [[User:Bozhidar]] should write some lines about the relation to the &amp;quot;old&amp;quot; EmacsWiki?--[[User:Kenda|Kenda]] 19:58, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
This seems like a good idea. Might help us utilize better the screen estate. As for the relation to the EmacsWiki - it is more or less non-existing. We have the permission from Alex (kensanata) to migrate any content we choose to, but they won't be supporting us in any way. [[User:Bozhidar|Bozhidar]] 20:28, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Markup Conventions== &lt;br /&gt;
&lt;br /&gt;
=== Wikipedia linking convention ===&lt;br /&gt;
&lt;br /&gt;
Could/should we have a convention for formatting and placement of wikipedia links on pages? [[User:PhilHudson|PhilHudson]] 22:37, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
=== EmacsWiki linking convention ===&lt;br /&gt;
&lt;br /&gt;
Similar question to Wikipedia wrt EmacsWiki [[User:PhilHudson|PhilHudson]] 23:06, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
== Describing Modes and Packages ==&lt;br /&gt;
&lt;br /&gt;
=== Naming Conventions ===&lt;br /&gt;
&lt;br /&gt;
I'd like to suggest *not* suffixing (links to) modes with &amp;quot;-mode&amp;quot;. Thus: &amp;quot;org&amp;quot; not &amp;quot;org-mode&amp;quot;. For consistency I've been adding links titled &amp;quot;org-mode&amp;quot; until now, since that one was already created when I started. [[User:PhilHudson|PhilHudson]] 22:09, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
:Agreed, let's use the &amp;quot;friendly&amp;quot; name of a package. I'd say &amp;quot;Org&amp;quot;, &amp;quot;Gnus&amp;quot;, &amp;quot;YASnippet&amp;quot;, etc. [[User:GregLucas|GregLucas]]&lt;br /&gt;
&lt;br /&gt;
:I actually disagree. E.g. [[Java]] could be a page describing the different Java capabilities of Emacs, with links to the different JavaScript modes. This is especially true for [[JavaScript]], where the [[js-mode]] shipped with the latest Emacs is completely different from the other widely used [[js2-mode]] by Yegge. [[User:Damd|Damd]] 18:20, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::Hm, good point about disambiguation... I still like the idea of using &amp;quot;titles&amp;quot; vs &amp;quot;commands&amp;quot;, though. E.g. a [[Java]] page describing the built-in support (Java Mode) and then linking to articles on related packages (JDEE, etc) and why you might consider them instead. [[User:GregLucas|GregLucas]] 19:32, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::How would we handle e.g. [[Haskell]]?  Emacs doesn't ship with any Haskell mode as far as I know... [[User:Damd|damd]] 19:58, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Not ship, but a haskell-mode definitely exists and is in use...--[[Special:Contributions/84.192.109.230|84.192.109.230]] 18:33, 11 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Template for mode-with-github-source pages? ==&lt;br /&gt;
&lt;br /&gt;
Can Wikimedia do page templates? I'm sure the answer is yes. [[User:PhilHudson|PhilHudson]] 23:07, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
== Issues == &lt;br /&gt;
* The &amp;quot;Editing Help&amp;quot; link goes to a virgin page, not the full help page.&lt;br /&gt;
* Add [http://meta.wikimedia.org/wiki/Help:Footnotes Mediawiki Cite extension] to enable footnotes.&lt;br /&gt;
* Add [http://meta.wikimedia.org/wiki/Category#Visualizing_category_tree Category Tree extension] to explore various categories like [[:Category:Programming languages]].&lt;br /&gt;
&lt;br /&gt;
== Syntax highlighting ==&lt;br /&gt;
&lt;br /&gt;
Could we install a MediaWiki plugin which lets us do proper syntax highlighting of different languages?  [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi SyntaxHighlight GeSHi] looks like a good alternative. [[User:Damd|damd]] 20:07, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:I've already installed it, but it doesn't seem to work properly (the fonts seem terribly small) and it doesn't support Emacs Lisp. [[User:Bozhidar|Bozhidar]] 20:24, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::Are you sure the font size is not because of your web browser settings? They look just fine when I try it. About the Elisp support, we can still use just &amp;quot;lisp&amp;quot; until someone gets around to writing a version for Elisp. [[User:Damd|damd]] 18:44, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::: I also found font size in the code snippets are inconveniently low. I dont have any special settings for my browser. I am on recent firefox. [[User:Kindahero|Kindahero]] 18:52, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::We could customize the CSS for the syntax highlighting plugin, but first let's make sure it's actually something in the CSS that causes this. &lt;br /&gt;
::::&amp;lt;pre&amp;gt;This is just an ordinary PRE element.&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;This is a PRE element generated by the syntax highlighting plugin.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::::Is the font in both examples too tiny?  If so, I suggest you check your browser settings.  You can configure this in the &amp;quot;Content&amp;quot; section of Firefox's settings. [[User:Damd|damd]] 19:13, 1 April 2012 (EEST)&lt;br /&gt;
::::: I only find the second one small not the both. I started with 'firefox -safe-mode' still the same. It seems its general problem with Geshi see http://stackoverflow.com/questions/5354968/changing-the-font-size-of-code-formatted-by-syntaxhighlight-geshi-in-mediawiki [[User:Kindahero|Kindahero]] 20:25, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
==fails to create thumbnails==&lt;br /&gt;
I think some adminstative settings must be made in order to produce thumbnails of the pictures automatically. Can anyone do this .? check out [[Dictem]] to see what I am talking about. [[User:Kindahero|Kindahero]] 16:21, 31 March 2012 (EEST)&lt;br /&gt;
: found this link, http://www.mediawiki.org/wiki/Manual:Configuration_settings#Thumbnail_settings [[User:Kindahero|Kindahero]] 16:24, 31 March 2012 (EEST)&lt;br /&gt;
:: another link, http://www.mwusers.com/forums/showthread.php?1334-Resized-thumbnail-images-not-displaying  Feel free to delete these links [[User:Kindahero|Kindahero]] 16:28, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:I see that on &amp;lt;nowiki&amp;gt;[[File:Screenshot-dictem-buffer.jpg]]&amp;lt;/nowiki&amp;gt;, the main image is not displayed. The &amp;quot;Full resolution&amp;quot; link shows a valid image. By the way, this type of question might be appropriate for [https://groups.google.com/forum/?fromgroups#!forum/wikemacs Google Groups:WikEmacs]. [[User:Xophist|Xophist]] 21:31, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== needed plugins ==&lt;br /&gt;
&lt;br /&gt;
* cite.php is needed to show references using &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt; &amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; for example http://wikemacs.org/wiki/Battery#How_to_show_battery_status_only_on_laptop.3F  has ref, but not working.?&lt;br /&gt;
&lt;br /&gt;
:I had this problem when getting Cite_web set up on en.swpat.org.  If I look into how I got it working, could it be fixed here too? [[User:Ciaran|Ciaran]] 15:31, 29 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WikEmacs staying open? Great! ==&lt;br /&gt;
&lt;br /&gt;
Glad to hear it's not closing.  Anything we (new contributors) should know?  Is anything changing? [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 09:51, 20 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
: Hello, I am the new caretaker of WikEmacs.  No major changes have been made.  This will continue to be a site by and for the users, so I welcome all input for suggested changes.  As the site expands and users return, we will likely need to revisit the control structure and possibly modify the site rules.  For now I would like to focus on growing the wiki. --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 15:09, 22 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
:: Take a look at this: [http://www.emacswiki.org/emacs/BackwardKillLine BackwardKillLine on emacswiki].  If just reading this article does not inspire you to to keep WikEmacs open, nothing will I'm afraid. --[[User:Holocronweaver|Holocronweaver]] 22:30, 22 February 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Keeping the licence situation clear and clean ==&lt;br /&gt;
&lt;br /&gt;
Just noting the current situation...&lt;br /&gt;
&lt;br /&gt;
* emacswiki.org is published under multiple licences, including GPLv2, GFDL (no version specified), CC-sa, and their own [http://www.emacswiki.org/OLD simple permissive licence].&lt;br /&gt;
* The GNU Emacs manual is published under GFDLv1.3+&lt;br /&gt;
* Existing WikEmacs texts are under GFDLv1.3+&lt;br /&gt;
&lt;br /&gt;
For emacswiki.org, we could either ask them to specify their version(s) of GFDL, or we could use their text under their simple permissive licence.  If we do the latter, we could include a mention of their copyright notice either in the default copyright notice at the bottom of all WikEmacs pages, or we could create a template &amp;quot;''This page includes text from emacswiki.org, used under [http://www.emacswiki.org/OLD this licence]''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For the GNU Emacs manual, if we're going to continue using GFDLv1.3+, then we don't have to do anything.  But if we want to switch to the dual-licence model used by Wikipedia (and accepted by Stallman), then whenever we copy text from the manual, we'd have to put a template on those pages to say that those pages are only available under GFDLv1.3+ (and not CC-sa).&lt;br /&gt;
&lt;br /&gt;
For text by WikEmacs contributors, we could continue to license it under GFDLv1.3+, or we could say that from now on, contributions are under the Wikipedia-style dual-licence (GFDLv1.3+ and CC-sa).  This wouldn't change much but it would give us more options in the future if we do encounter problems.&lt;br /&gt;
&lt;br /&gt;
I'll have to think for a while before having any recommendations, and there's currently nothing messy or problematic, but just wanted to note the situation early on in case anyone wants to make suggestions.  I have experience with licensing issues. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 07:02, 23 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
: I have spent some time thinking on this, and your suggestion of asking emacswiki.org to clarify their version of GFDL appears to be simplest.  That way WikEmacs could maintain its current GFDLv1.3+ license and no ugly licensing notices would be necessary when porting content from emacswiki.org, assuming thes choose GFDLv1.3+.  In the event they choose a different version of GFDL, is it possible to port old versions of the license to new versions so we could use the material under GFDL1.3+?  --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 13:30, 3 May 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
::Ok, I've thought through the scenarios now.  The current Wikemacs licence notice is fine: if wikemacs contains original content plus emacswiki content plus GNU manual content plus Wikipedia content, it will always be true that the recipient can distribute under GFDL v1.3 or any later version.  (emacswiki doesn't textually say &amp;quot;v1.3+&amp;quot; but all their pages are also under a [http://www.emacswiki.org/OLD do what you want, just preserve our copyright notice] licence, so GFDL version ambiguities can be ignored.)  So nothing has to be changed in the footer.&lt;br /&gt;
&lt;br /&gt;
::The two other issues are the copyright details, and the licence of original contributions.&lt;br /&gt;
&lt;br /&gt;
::Copyright details.  If we include material from the manual/wikipedia/emacswiki, then we have to mention this somewhere (otherwise we'd be claiming to own stuff we copied from them).  At a minimum, we have to put a general statement in [[WikEmacs:Copyrights]] to say &amp;quot;''Some pages incorporate text from XYZ, received under &amp;lt;copy of their licence notice&amp;gt;''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
::Legally, that's all that's necessary.  But, by lacking precision it leads to certain inconveniences.  For example, if someone wants to copy an article from here that contains just original content, they should be able to include just a single line &amp;quot;''copyright 2013 Wikemacs''&amp;quot;, but if there's no way to see that it's original content then that person will have to include all the &amp;quot;''this may contain...''&amp;quot; statements from [[WikEmacs:Copyrights]].  Or if there's a problem later (such as someone adding non-free content to emacswiki, and us copying it over), we're left with a mess not knowing what pages have to be checked/reverted.&lt;br /&gt;
&lt;br /&gt;
::(This reminds me that the copyright situation of my own wiki is not a shining example, but that's less problematic since all material is original content.)&lt;br /&gt;
&lt;br /&gt;
::So, for keeping track of copyrights, nothing is ''required'' and complexity just makes people less likely to do it, so it's just a matter of picking the low hanging fruit.  I see four possibilities:&lt;br /&gt;
::# Mention &amp;quot;''from XYZ''&amp;quot; in the edit summary.  Drawback: if someone forgot to do this, there's no way to go back later and put it into the edit summary, and, the only way to search all edit summaries is by going to each page... tedious.&lt;br /&gt;
::# Mention it on the page.  This is what wikipedia does.  Make a template so that editors can add &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;copyright manual}} to the bottom of the page or in the &amp;quot;References&amp;quot; section to add one sentence &amp;quot;''This page incorporates bla bla see [[WikEmacs:Copyrights]]''&amp;quot;.&lt;br /&gt;
::# Same, but put it at the top of the Talk: page.&lt;br /&gt;
::# Make a page for listing which pages contain substantial amounts of material from what sources.&lt;br /&gt;
::The last two look nice and clean but that's also a drawback since if reader-contributors don't see how copyright info is noted, they won't realise that they should also make a note when they add third-party content to a page.  The second solution adds a bit of mess to the page, but it works well with the wiki model of learn-by-copying.&lt;br /&gt;
&lt;br /&gt;
::If in doubt, I'd go with the second option.  (Copying Wikipedia is usually a safe move.)  We can always change at a later stage.&lt;br /&gt;
&lt;br /&gt;
::The last thing is the licence of new contributions (i.e. what should the notice under the edit box say &amp;quot;''all contributions to WikEmacs are considered to be released under...''&amp;quot;).  My usual reflex is to use GNU whatever, but Stallman did give Wikipedia the green light to move to a dual GFDL + CC-by-sa for original contributions.  I can't remember all the problems that motivated Wikipedia to migrate, but I think there were some issues like GFDL's requirement to include a copy of the licence when distributing covered works (so when you print a 2-page article, you have to add the 10 pages of the licence).  Copying Wikipedia's approach probably has some practical advantages for people re-using Wikemacs material, and it allows people to copy material from Wikemacs into Wikipedia (while still being able to copy wikemacs material into the GNU manuals etc.).  So for new contributions, a plain GFDLv1.3+ is fine, but the Wikipedia model is probably better.  This wouldn't change the footer - GFDL would still be our primary licence since some pages would combine original content (GFDL+CC-by-sa) with content from the GNU manual (GFDL only) and the combination could only be distributed under GFDL, not CC-by-sa.&lt;br /&gt;
&lt;br /&gt;
::It would also be a good idea for the notice under the edit box to tell people &amp;quot;''If you incorporate material from the GNU manual, please include &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;copyright manual}} at the end of the page''&amp;quot;, and similar for emacswiki and Wikipedia.&lt;br /&gt;
&lt;br /&gt;
::Hope that helps.  I'll be back at the end of June.  None of this is urgent anyway. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 07:27, 3 June 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Which emacswiki.org topics to work on? ==&lt;br /&gt;
&lt;br /&gt;
So, for each of the useful pages on emacswiki.org, we should make our own pages for those topics and incorporate the knowledge that's in the emacswiki.org pages, but how do we make a list of the useful emacswiki.org pages?&lt;br /&gt;
&lt;br /&gt;
Does the site have any equivalents to MediaWiki's pages:&lt;br /&gt;
&lt;br /&gt;
* [[Special:LongPages]]&lt;br /&gt;
* [[Special:MostLinkedPages]]&lt;br /&gt;
* [[Special:MostRevisions]]&lt;br /&gt;
&lt;br /&gt;
?  (But IMO we should take a decision on the licence before doing a lot of work.) [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 12:27, 24 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
:If not, I wonder if search engines could help us approximate the &amp;quot;value&amp;quot; of each page?&lt;br /&gt;
&lt;br /&gt;
:* https://www.google.com/search?q=site%3Aemacswiki.org&lt;br /&gt;
&lt;br /&gt;
:Hmm.  I'd take that as a no.  Looks like a random selection.  Any other ideas?&lt;br /&gt;
&lt;br /&gt;
:Finding the pages with the most revisions shouldn't be too hard.  Just involves a script downloading the history of [http://www.emacswiki.org/emacs/?action=printable-index each page] and sorting by length.  That might give an indication of the good pages.&lt;br /&gt;
&lt;br /&gt;
:The [http://www.alexa.com/siteinfo/emacswiki.org info on alexa.com] isn't too solid, but gives some hints about what people look for. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 11:19, 3 June 2013 (EDT)&lt;br /&gt;
::I will look into this. In the mean time, I would edit articles whenever you cannot you find the information you want on the wiki.  This is how I edit wikis in general. --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 22:07, 26 November 2013 (EST)&lt;br /&gt;
&lt;br /&gt;
== Phone number spam  ==&lt;br /&gt;
&lt;br /&gt;
I've been seeing lots of spam, by bots creating new pages. I don't believe I have permissions to delete them, and I'm not sure where I could go to suggest they be deleted. So I'm putting them here:&lt;br /&gt;
&lt;br /&gt;
* [[855 .447 ..2444.. phone number for Cox customer service (((New Hampshire))) Cox customer service 855 .447 ..2444.. customer service for Cox (((New York))) Cox phone number]]&lt;br /&gt;
* [[Quickbooks 1-888-300-9067 contact quickbooks support phone number1]]&lt;br /&gt;
* [[1-866-560-7666 QuickBooks Point of Sale support number]]&lt;br /&gt;
* [[Quickbooks 1-888-300-9067 Quickbooks software support phone number2]]&lt;br /&gt;
* [[(1855 447 2444) Pogo customer service number Pogo customer service number]]&lt;br /&gt;
* [[K A T A P P A!!!@!~!!(( 18555801808 )))!!~@ facebook helpline phone number facebook contact email telephone number for facebook]]&lt;br /&gt;
* [[Canada 1-888-300-9067 QuickBooks online phone number3]]&lt;br /&gt;
* [[Canada 1-888-300-9067 QuickBooks online phone number1]]&lt;br /&gt;
* [[1 844 405 0214 google support number google support phone number raftaar]]&lt;br /&gt;
* [[NIRMAND 18558554535$$ facebook customer service number facebook support phone number fvdshfvggpp]]&lt;br /&gt;
&lt;br /&gt;
It seems like they are largely from July 2017. If I hit &amp;quot;random page&amp;quot;, I get a spam page about 90% of the time, so I expect there are a whole lot of these pages.&lt;br /&gt;
&lt;br /&gt;
[[User:Zck|Zck]] ([[User talk:Zck|talk]]) 22:17, 11 March 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== spam: deleteBatch extension? ===&lt;br /&gt;
&lt;br /&gt;
Hey Zck, indeed :( I'd like to mass-delete them.&lt;br /&gt;
&lt;br /&gt;
I found this special page: https://wikemacs.org/wiki/Special:Nuke but it only looks for recent pages.&lt;br /&gt;
&lt;br /&gt;
There might be another extension: https://www.mediawiki.org/wiki/Extension%3aDeleteBatch but it isn't install. We have to contact Jesse.&lt;br /&gt;
&lt;br /&gt;
Or use an API? https://www.mediawiki.org/wiki/Manual:Pywikibot/login.py or another program, a browser automation tool?&lt;br /&gt;
&lt;br /&gt;
[[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 12:34, 12 March 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Talk:Main_Page&amp;diff=51000</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Talk:Main_Page&amp;diff=51000"/>
		<updated>2025-03-12T12:34:40Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Phone number spam */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IMPORTANT: Offline discussion ==&lt;br /&gt;
&lt;br /&gt;
There is a Google group for discussion of the site: https://groups.google.com/forum/?fromgroups#!forum/wikemacs so we should probably favor posting there. [[User:PhilHudson|PhilHudson]] 16:16, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== IMPORTANT: Content Quality guidelines ==&lt;br /&gt;
I think before flame wars and fights among members, we should form&lt;br /&gt;
proper/strict guide lines for each aspect of the site. [http://depuypinnaclelawsuit.webnode.com/ DePuy Pinnacle Lawsuit]   Wikipedia has very strict&lt;br /&gt;
rules about that., even their bots can tell the content quality of a&lt;br /&gt;
page. we can create articles in &amp;quot;WikEmacs&amp;quot; Namespace. [[User:Kindahero|Kindahero]] 23:57, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:Wikipedia has lots of rules today, but it started with very few rules and they invented the rules as they became necessary.  It's impossible to predict what problems will be encountered.  I'd suggest that rules only be made when it becomes clear that one is necessary. [[User:Ciaran|Ciaran]] 15:24, 29 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
I would like to structure the Main Page in boxes like here [http://www.webos-internals.org] the Featured Article/Project. Any objections?&lt;br /&gt;
And maybe [[User:Bozhidar]] should write some lines about the relation to the &amp;quot;old&amp;quot; EmacsWiki?--[[User:Kenda|Kenda]] 19:58, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
This seems like a good idea. Might help us utilize better the screen estate. As for the relation to the EmacsWiki - it is more or less non-existing. We have the permission from Alex (kensanata) to migrate any content we choose to, but they won't be supporting us in any way. [[User:Bozhidar|Bozhidar]] 20:28, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Markup Conventions== &lt;br /&gt;
&lt;br /&gt;
=== Wikipedia linking convention ===&lt;br /&gt;
&lt;br /&gt;
Could/should we have a convention for formatting and placement of wikipedia links on pages? [[User:PhilHudson|PhilHudson]] 22:37, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
=== EmacsWiki linking convention ===&lt;br /&gt;
&lt;br /&gt;
Similar question to Wikipedia wrt EmacsWiki [[User:PhilHudson|PhilHudson]] 23:06, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
== Describing Modes and Packages ==&lt;br /&gt;
&lt;br /&gt;
=== Naming Conventions ===&lt;br /&gt;
&lt;br /&gt;
I'd like to suggest *not* suffixing (links to) modes with &amp;quot;-mode&amp;quot;. Thus: &amp;quot;org&amp;quot; not &amp;quot;org-mode&amp;quot;. For consistency I've been adding links titled &amp;quot;org-mode&amp;quot; until now, since that one was already created when I started. [[User:PhilHudson|PhilHudson]] 22:09, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
:Agreed, let's use the &amp;quot;friendly&amp;quot; name of a package. I'd say &amp;quot;Org&amp;quot;, &amp;quot;Gnus&amp;quot;, &amp;quot;YASnippet&amp;quot;, etc. [[User:GregLucas|GregLucas]]&lt;br /&gt;
&lt;br /&gt;
:I actually disagree. E.g. [[Java]] could be a page describing the different Java capabilities of Emacs, with links to the different JavaScript modes. This is especially true for [[JavaScript]], where the [[js-mode]] shipped with the latest Emacs is completely different from the other widely used [[js2-mode]] by Yegge. [[User:Damd|Damd]] 18:20, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::Hm, good point about disambiguation... I still like the idea of using &amp;quot;titles&amp;quot; vs &amp;quot;commands&amp;quot;, though. E.g. a [[Java]] page describing the built-in support (Java Mode) and then linking to articles on related packages (JDEE, etc) and why you might consider them instead. [[User:GregLucas|GregLucas]] 19:32, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::How would we handle e.g. [[Haskell]]?  Emacs doesn't ship with any Haskell mode as far as I know... [[User:Damd|damd]] 19:58, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Not ship, but a haskell-mode definitely exists and is in use...--[[Special:Contributions/84.192.109.230|84.192.109.230]] 18:33, 11 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Template for mode-with-github-source pages? ==&lt;br /&gt;
&lt;br /&gt;
Can Wikimedia do page templates? I'm sure the answer is yes. [[User:PhilHudson|PhilHudson]] 23:07, 24 March 2012 (EET)&lt;br /&gt;
&lt;br /&gt;
== Issues == &lt;br /&gt;
* The &amp;quot;Editing Help&amp;quot; link goes to a virgin page, not the full help page.&lt;br /&gt;
* Add [http://meta.wikimedia.org/wiki/Help:Footnotes Mediawiki Cite extension] to enable footnotes.&lt;br /&gt;
* Add [http://meta.wikimedia.org/wiki/Category#Visualizing_category_tree Category Tree extension] to explore various categories like [[:Category:Programming languages]].&lt;br /&gt;
&lt;br /&gt;
== Syntax highlighting ==&lt;br /&gt;
&lt;br /&gt;
Could we install a MediaWiki plugin which lets us do proper syntax highlighting of different languages?  [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi SyntaxHighlight GeSHi] looks like a good alternative. [[User:Damd|damd]] 20:07, 25 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:I've already installed it, but it doesn't seem to work properly (the fonts seem terribly small) and it doesn't support Emacs Lisp. [[User:Bozhidar|Bozhidar]] 20:24, 26 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::Are you sure the font size is not because of your web browser settings? They look just fine when I try it. About the Elisp support, we can still use just &amp;quot;lisp&amp;quot; until someone gets around to writing a version for Elisp. [[User:Damd|damd]] 18:44, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::: I also found font size in the code snippets are inconveniently low. I dont have any special settings for my browser. I am on recent firefox. [[User:Kindahero|Kindahero]] 18:52, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::We could customize the CSS for the syntax highlighting plugin, but first let's make sure it's actually something in the CSS that causes this. &lt;br /&gt;
::::&amp;lt;pre&amp;gt;This is just an ordinary PRE element.&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;This is a PRE element generated by the syntax highlighting plugin.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::::Is the font in both examples too tiny?  If so, I suggest you check your browser settings.  You can configure this in the &amp;quot;Content&amp;quot; section of Firefox's settings. [[User:Damd|damd]] 19:13, 1 April 2012 (EEST)&lt;br /&gt;
::::: I only find the second one small not the both. I started with 'firefox -safe-mode' still the same. It seems its general problem with Geshi see http://stackoverflow.com/questions/5354968/changing-the-font-size-of-code-formatted-by-syntaxhighlight-geshi-in-mediawiki [[User:Kindahero|Kindahero]] 20:25, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
==fails to create thumbnails==&lt;br /&gt;
I think some adminstative settings must be made in order to produce thumbnails of the pictures automatically. Can anyone do this .? check out [[Dictem]] to see what I am talking about. [[User:Kindahero|Kindahero]] 16:21, 31 March 2012 (EEST)&lt;br /&gt;
: found this link, http://www.mediawiki.org/wiki/Manual:Configuration_settings#Thumbnail_settings [[User:Kindahero|Kindahero]] 16:24, 31 March 2012 (EEST)&lt;br /&gt;
:: another link, http://www.mwusers.com/forums/showthread.php?1334-Resized-thumbnail-images-not-displaying  Feel free to delete these links [[User:Kindahero|Kindahero]] 16:28, 31 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:I see that on &amp;lt;nowiki&amp;gt;[[File:Screenshot-dictem-buffer.jpg]]&amp;lt;/nowiki&amp;gt;, the main image is not displayed. The &amp;quot;Full resolution&amp;quot; link shows a valid image. By the way, this type of question might be appropriate for [https://groups.google.com/forum/?fromgroups#!forum/wikemacs Google Groups:WikEmacs]. [[User:Xophist|Xophist]] 21:31, 1 April 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
== needed plugins ==&lt;br /&gt;
&lt;br /&gt;
* cite.php is needed to show references using &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt; &amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; for example http://wikemacs.org/wiki/Battery#How_to_show_battery_status_only_on_laptop.3F  has ref, but not working.?&lt;br /&gt;
&lt;br /&gt;
:I had this problem when getting Cite_web set up on en.swpat.org.  If I look into how I got it working, could it be fixed here too? [[User:Ciaran|Ciaran]] 15:31, 29 January 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== WikEmacs staying open? Great! ==&lt;br /&gt;
&lt;br /&gt;
Glad to hear it's not closing.  Anything we (new contributors) should know?  Is anything changing? [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 09:51, 20 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
: Hello, I am the new caretaker of WikEmacs.  No major changes have been made.  This will continue to be a site by and for the users, so I welcome all input for suggested changes.  As the site expands and users return, we will likely need to revisit the control structure and possibly modify the site rules.  For now I would like to focus on growing the wiki. --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 15:09, 22 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
:: Take a look at this: [http://www.emacswiki.org/emacs/BackwardKillLine BackwardKillLine on emacswiki].  If just reading this article does not inspire you to to keep WikEmacs open, nothing will I'm afraid. --[[User:Holocronweaver|Holocronweaver]] 22:30, 22 February 2013 (EET)&lt;br /&gt;
&lt;br /&gt;
== Keeping the licence situation clear and clean ==&lt;br /&gt;
&lt;br /&gt;
Just noting the current situation...&lt;br /&gt;
&lt;br /&gt;
* emacswiki.org is published under multiple licences, including GPLv2, GFDL (no version specified), CC-sa, and their own [http://www.emacswiki.org/OLD simple permissive licence].&lt;br /&gt;
* The GNU Emacs manual is published under GFDLv1.3+&lt;br /&gt;
* Existing WikEmacs texts are under GFDLv1.3+&lt;br /&gt;
&lt;br /&gt;
For emacswiki.org, we could either ask them to specify their version(s) of GFDL, or we could use their text under their simple permissive licence.  If we do the latter, we could include a mention of their copyright notice either in the default copyright notice at the bottom of all WikEmacs pages, or we could create a template &amp;quot;''This page includes text from emacswiki.org, used under [http://www.emacswiki.org/OLD this licence]''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
For the GNU Emacs manual, if we're going to continue using GFDLv1.3+, then we don't have to do anything.  But if we want to switch to the dual-licence model used by Wikipedia (and accepted by Stallman), then whenever we copy text from the manual, we'd have to put a template on those pages to say that those pages are only available under GFDLv1.3+ (and not CC-sa).&lt;br /&gt;
&lt;br /&gt;
For text by WikEmacs contributors, we could continue to license it under GFDLv1.3+, or we could say that from now on, contributions are under the Wikipedia-style dual-licence (GFDLv1.3+ and CC-sa).  This wouldn't change much but it would give us more options in the future if we do encounter problems.&lt;br /&gt;
&lt;br /&gt;
I'll have to think for a while before having any recommendations, and there's currently nothing messy or problematic, but just wanted to note the situation early on in case anyone wants to make suggestions.  I have experience with licensing issues. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 07:02, 23 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
: I have spent some time thinking on this, and your suggestion of asking emacswiki.org to clarify their version of GFDL appears to be simplest.  That way WikEmacs could maintain its current GFDLv1.3+ license and no ugly licensing notices would be necessary when porting content from emacswiki.org, assuming thes choose GFDLv1.3+.  In the event they choose a different version of GFDL, is it possible to port old versions of the license to new versions so we could use the material under GFDL1.3+?  --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 13:30, 3 May 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
::Ok, I've thought through the scenarios now.  The current Wikemacs licence notice is fine: if wikemacs contains original content plus emacswiki content plus GNU manual content plus Wikipedia content, it will always be true that the recipient can distribute under GFDL v1.3 or any later version.  (emacswiki doesn't textually say &amp;quot;v1.3+&amp;quot; but all their pages are also under a [http://www.emacswiki.org/OLD do what you want, just preserve our copyright notice] licence, so GFDL version ambiguities can be ignored.)  So nothing has to be changed in the footer.&lt;br /&gt;
&lt;br /&gt;
::The two other issues are the copyright details, and the licence of original contributions.&lt;br /&gt;
&lt;br /&gt;
::Copyright details.  If we include material from the manual/wikipedia/emacswiki, then we have to mention this somewhere (otherwise we'd be claiming to own stuff we copied from them).  At a minimum, we have to put a general statement in [[WikEmacs:Copyrights]] to say &amp;quot;''Some pages incorporate text from XYZ, received under &amp;lt;copy of their licence notice&amp;gt;''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
::Legally, that's all that's necessary.  But, by lacking precision it leads to certain inconveniences.  For example, if someone wants to copy an article from here that contains just original content, they should be able to include just a single line &amp;quot;''copyright 2013 Wikemacs''&amp;quot;, but if there's no way to see that it's original content then that person will have to include all the &amp;quot;''this may contain...''&amp;quot; statements from [[WikEmacs:Copyrights]].  Or if there's a problem later (such as someone adding non-free content to emacswiki, and us copying it over), we're left with a mess not knowing what pages have to be checked/reverted.&lt;br /&gt;
&lt;br /&gt;
::(This reminds me that the copyright situation of my own wiki is not a shining example, but that's less problematic since all material is original content.)&lt;br /&gt;
&lt;br /&gt;
::So, for keeping track of copyrights, nothing is ''required'' and complexity just makes people less likely to do it, so it's just a matter of picking the low hanging fruit.  I see four possibilities:&lt;br /&gt;
::# Mention &amp;quot;''from XYZ''&amp;quot; in the edit summary.  Drawback: if someone forgot to do this, there's no way to go back later and put it into the edit summary, and, the only way to search all edit summaries is by going to each page... tedious.&lt;br /&gt;
::# Mention it on the page.  This is what wikipedia does.  Make a template so that editors can add &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;copyright manual}} to the bottom of the page or in the &amp;quot;References&amp;quot; section to add one sentence &amp;quot;''This page incorporates bla bla see [[WikEmacs:Copyrights]]''&amp;quot;.&lt;br /&gt;
::# Same, but put it at the top of the Talk: page.&lt;br /&gt;
::# Make a page for listing which pages contain substantial amounts of material from what sources.&lt;br /&gt;
::The last two look nice and clean but that's also a drawback since if reader-contributors don't see how copyright info is noted, they won't realise that they should also make a note when they add third-party content to a page.  The second solution adds a bit of mess to the page, but it works well with the wiki model of learn-by-copying.&lt;br /&gt;
&lt;br /&gt;
::If in doubt, I'd go with the second option.  (Copying Wikipedia is usually a safe move.)  We can always change at a later stage.&lt;br /&gt;
&lt;br /&gt;
::The last thing is the licence of new contributions (i.e. what should the notice under the edit box say &amp;quot;''all contributions to WikEmacs are considered to be released under...''&amp;quot;).  My usual reflex is to use GNU whatever, but Stallman did give Wikipedia the green light to move to a dual GFDL + CC-by-sa for original contributions.  I can't remember all the problems that motivated Wikipedia to migrate, but I think there were some issues like GFDL's requirement to include a copy of the licence when distributing covered works (so when you print a 2-page article, you have to add the 10 pages of the licence).  Copying Wikipedia's approach probably has some practical advantages for people re-using Wikemacs material, and it allows people to copy material from Wikemacs into Wikipedia (while still being able to copy wikemacs material into the GNU manuals etc.).  So for new contributions, a plain GFDLv1.3+ is fine, but the Wikipedia model is probably better.  This wouldn't change the footer - GFDL would still be our primary licence since some pages would combine original content (GFDL+CC-by-sa) with content from the GNU manual (GFDL only) and the combination could only be distributed under GFDL, not CC-by-sa.&lt;br /&gt;
&lt;br /&gt;
::It would also be a good idea for the notice under the edit box to tell people &amp;quot;''If you incorporate material from the GNU manual, please include &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;copyright manual}} at the end of the page''&amp;quot;, and similar for emacswiki and Wikipedia.&lt;br /&gt;
&lt;br /&gt;
::Hope that helps.  I'll be back at the end of June.  None of this is urgent anyway. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 07:27, 3 June 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
== Which emacswiki.org topics to work on? ==&lt;br /&gt;
&lt;br /&gt;
So, for each of the useful pages on emacswiki.org, we should make our own pages for those topics and incorporate the knowledge that's in the emacswiki.org pages, but how do we make a list of the useful emacswiki.org pages?&lt;br /&gt;
&lt;br /&gt;
Does the site have any equivalents to MediaWiki's pages:&lt;br /&gt;
&lt;br /&gt;
* [[Special:LongPages]]&lt;br /&gt;
* [[Special:MostLinkedPages]]&lt;br /&gt;
* [[Special:MostRevisions]]&lt;br /&gt;
&lt;br /&gt;
?  (But IMO we should take a decision on the licence before doing a lot of work.) [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 12:27, 24 April 2013 (EDT)&lt;br /&gt;
&lt;br /&gt;
:If not, I wonder if search engines could help us approximate the &amp;quot;value&amp;quot; of each page?&lt;br /&gt;
&lt;br /&gt;
:* https://www.google.com/search?q=site%3Aemacswiki.org&lt;br /&gt;
&lt;br /&gt;
:Hmm.  I'd take that as a no.  Looks like a random selection.  Any other ideas?&lt;br /&gt;
&lt;br /&gt;
:Finding the pages with the most revisions shouldn't be too hard.  Just involves a script downloading the history of [http://www.emacswiki.org/emacs/?action=printable-index each page] and sorting by length.  That might give an indication of the good pages.&lt;br /&gt;
&lt;br /&gt;
:The [http://www.alexa.com/siteinfo/emacswiki.org info on alexa.com] isn't too solid, but gives some hints about what people look for. [[User:Ciaran|Ciaran]] ([[User talk:Ciaran|talk]]) 11:19, 3 June 2013 (EDT)&lt;br /&gt;
::I will look into this. In the mean time, I would edit articles whenever you cannot you find the information you want on the wiki.  This is how I edit wikis in general. --[[User:Holocronweaver|Holocronweaver]] ([[User talk:Holocronweaver|talk]]) 22:07, 26 November 2013 (EST)&lt;br /&gt;
&lt;br /&gt;
== Phone number spam  ==&lt;br /&gt;
&lt;br /&gt;
I've been seeing lots of spam, by bots creating new pages. I don't believe I have permissions to delete them, and I'm not sure where I could go to suggest they be deleted. So I'm putting them here:&lt;br /&gt;
&lt;br /&gt;
* [[855 .447 ..2444.. phone number for Cox customer service (((New Hampshire))) Cox customer service 855 .447 ..2444.. customer service for Cox (((New York))) Cox phone number]]&lt;br /&gt;
* [[Quickbooks 1-888-300-9067 contact quickbooks support phone number1]]&lt;br /&gt;
* [[1-866-560-7666 QuickBooks Point of Sale support number]]&lt;br /&gt;
* [[Quickbooks 1-888-300-9067 Quickbooks software support phone number2]]&lt;br /&gt;
* [[(1855 447 2444) Pogo customer service number Pogo customer service number]]&lt;br /&gt;
* [[K A T A P P A!!!@!~!!(( 18555801808 )))!!~@ facebook helpline phone number facebook contact email telephone number for facebook]]&lt;br /&gt;
* [[Canada 1-888-300-9067 QuickBooks online phone number3]]&lt;br /&gt;
* [[Canada 1-888-300-9067 QuickBooks online phone number1]]&lt;br /&gt;
* [[1 844 405 0214 google support number google support phone number raftaar]]&lt;br /&gt;
* [[NIRMAND 18558554535$$ facebook customer service number facebook support phone number fvdshfvggpp]]&lt;br /&gt;
&lt;br /&gt;
It seems like they are largely from July 2017. If I hit &amp;quot;random page&amp;quot;, I get a spam page about 90% of the time, so I expect there are a whole lot of these pages.&lt;br /&gt;
&lt;br /&gt;
[[User:Zck|Zck]] ([[User talk:Zck|talk]]) 22:17, 11 March 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== spam: deleteBatch extension? ===&lt;br /&gt;
&lt;br /&gt;
Hey Zck, indeed :( I'd like to mass-delete them.&lt;br /&gt;
&lt;br /&gt;
I found this special page: https://wikemacs.org/wiki/Special:Nuke but it only looks for recent pages.&lt;br /&gt;
&lt;br /&gt;
There might be another extension: https://www.mediawiki.org/wiki/Extension%3aDeleteBatch but it isn't install. We have to contact Jessy.&lt;br /&gt;
&lt;br /&gt;
Or use an API? https://www.mediawiki.org/wiki/Manual:Pywikibot/login.py or another program, a browser automation tool?&lt;br /&gt;
&lt;br /&gt;
[[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 12:34, 12 March 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_30.1&amp;diff=50999</id>
		<title>GNU Emacs 30.1</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_30.1&amp;diff=50999"/>
		<updated>2025-03-12T00:33:47Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Emacs 30.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See:&lt;br /&gt;
&lt;br /&gt;
* https://www.masteringemacs.org/article/whats-new-in-emacs-301&lt;br /&gt;
* https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-30&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 30.1 =&lt;br /&gt;
&lt;br /&gt;
* completion-preview-mode: a replacement for company-mode&lt;br /&gt;
* native and faster JSON parser&lt;br /&gt;
* which-key mode is built-in&lt;br /&gt;
* native completion is on by default&lt;br /&gt;
* official Android support&lt;br /&gt;
* Tree Sitter improvements&lt;br /&gt;
* Emacs is now the default application for 'org-protocol'&lt;br /&gt;
* and more!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to get it =&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
&lt;br /&gt;
Unofficial AppImage for latest releases:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/blahgeek/emacs-appimage&lt;br /&gt;
&lt;br /&gt;
=  How to build it =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt install build-essential autoconf automake texinfo libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff-dev libgnutls28-dev libncurses-dev libjansson-dev libgccjit-10-dev ./configure –with-tree-sitter&lt;br /&gt;
&lt;br /&gt;
(On Debian 12, get libgccjit-12-dev)&lt;br /&gt;
&lt;br /&gt;
make -j16&lt;br /&gt;
&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Main_Page&amp;diff=50998</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Main_Page&amp;diff=50998"/>
		<updated>2025-03-12T00:24:11Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Emacs 30.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WikEmacs''' is here to stay.  Spread the word!&lt;br /&gt;
&lt;br /&gt;
[[File:Emacs_parts.png|320px|thumb|right|Basic [[Emacs Terminology|terminology]] of typical Emacs GUI Frame]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
'''First time visitors''' can start [[#Explore WikEmacs|exploring WikEmacs]]. We have added lots of useful pages since the launch of WikEmacs.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
We need more '''[[:Category:WikEmacs Contributor|WikEmacs contributors]]'''.  You can help the following way.&lt;br /&gt;
&lt;br /&gt;
{{Note| First of all, please take a minute to look at the&lt;br /&gt;
[[WikEmacs:Guidelines|WikEmacs guidelines]] before you start editing.}}&lt;br /&gt;
&lt;br /&gt;
* Priority tasks&lt;br /&gt;
** Add content. Please adopt the following approach - ''I found this on the web which was helpful. But it took me a lot of time to find it. Now that I have found it, I will put it in WikEmacs so that others can benefit from it''. You can start by documenting Emacs' support of your favorite programming language. &lt;br /&gt;
* Intermediate tasks&lt;br /&gt;
** Provide tutorials or content for the [[:Category:Popular Package|popular packages]] or [[:Category:Built-in Package|built-in packages]].&lt;br /&gt;
** Add more content to [[Special:ShortPages|short pages]].&lt;br /&gt;
** Document or add more [[:Category:Third Party Package|third party packages]].&lt;br /&gt;
* Other tasks&lt;br /&gt;
** Copy edit [[Special:RecentChanges|recent changes]] or be a moral police.&lt;br /&gt;
** Add more members to various [[Special:Categories|categories]].&lt;br /&gt;
** Categorize one of these pages [[Special:UncategorizedPages|uncategorized pages]].&lt;br /&gt;
** Follow the [http://wikemacs.org/api.php?hidebots=1&amp;amp;days=7&amp;amp;limit=50&amp;amp;action=feedrecentchanges&amp;amp;feedformat=atom RSS feed] to watch edits, new users and help fighting vandalism (fortunately quite low).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Emacs News'''&lt;br /&gt;
&lt;br /&gt;
The latest stable release of Emacs is [[GNU Emacs 30.1|Emacs-30.1]] released in February, 2025. The precedent is [[GNU Emacs 29|Emacs-29]].&lt;br /&gt;
&lt;br /&gt;
Emacs is available on all popular [[:Category:Install Or Upgrade| operating systems]] including [[Installing Emacs on BSD |BSD]], [[Installing Emacs on GNU/Linux | GNU/Linux]], [[Installing Emacs on OS X | OS X]] and [[Installing Emacs on Windows| Windows]].  It supports a variety of [[:Category:Programming languages|programming languages]].&lt;br /&gt;
&amp;lt;!-- Left hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
== Explore WikEmacs ==&lt;br /&gt;
&lt;br /&gt;
To explore WikEmacs proceed as follows:&lt;br /&gt;
* Search for or visit a page of interest&lt;br /&gt;
* At the end of the page, there is a list of categories&lt;br /&gt;
* Click on individual categories and it will give you a list of all pages that will be of interest to you.&lt;br /&gt;
&lt;br /&gt;
===  What is your comfort level with Emacs? ===&lt;br /&gt;
* [[:Category:Beginner|Beginner]]&lt;br /&gt;
* [[:Category:Intermediate|Intermediate]]&lt;br /&gt;
* [[:Category:Expert|Expert]]&lt;br /&gt;
** Are you a maintainer of a [[:Category:Built-in Package|Built-in Package]]? If you don't find information about your package, please add it. No one else can write about your package as well as you.&lt;br /&gt;
** Have you developed any [[:Category:Third Party Package|Third Party Package]]s? Consider writing about what it is and how to use it.&lt;br /&gt;
* [[:Category:Vim User|Vim User]]&lt;br /&gt;
&lt;br /&gt;
=== What do you want to accomplish now? ===&lt;br /&gt;
* [[:Category:Install Or Upgrade|Install Or Upgrade]]&lt;br /&gt;
* [[:Category:Customization|Customize Emacs]]&lt;br /&gt;
* [[Key Bindings|Tweak Key Bindings]]&lt;br /&gt;
* [[:Category:Tutorial|Learn more Emacs (Tutorials)]]&lt;br /&gt;
* [[:Category:Emacs Lisp|Learn Emacs Lisp]]&lt;br /&gt;
&lt;br /&gt;
=== What do you use Emacs for? ===&lt;br /&gt;
* [[:Category:Text Editing|Text Editing]]&lt;br /&gt;
* [[:Category:Programming|Programming]]&lt;br /&gt;
* [[:Category:Document authoring|Document authoring]]&lt;br /&gt;
* [[:Category:Organizer|Getting Organized]]&lt;br /&gt;
* [[:Category:Email|Emailing]]&lt;br /&gt;
* [[:Category:Chat|Chatting]]&lt;br /&gt;
* [[:Category:Blog|Blogging]]&lt;br /&gt;
* [[:Category:Browse|Browsing]] &lt;br /&gt;
* [[:Category:Entertainment|Entertainment]]&lt;br /&gt;
* [[:Category:Workflow|Other]]&lt;br /&gt;
&lt;br /&gt;
=== How do you involve yourself with the community? ===&lt;br /&gt;
* [[:Category:Emacs User|Emacs User]]&lt;br /&gt;
* [[:Category:Emacs Contributor|Emacs Contributor]]&lt;br /&gt;
* [[:Category:WikEmacs Contributor|WikEmacs Contributor]]&lt;br /&gt;
* [[Financial_Support|Financial Supporter]]&lt;br /&gt;
* [[:Category:User Role|Other]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Right hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Help build WikEmacs==&lt;br /&gt;
&lt;br /&gt;
The following are suggestions for articles to write, along with the page of the GNU Emacs manual which documents this feature.  ('''Note:''' it's possible that an article for a given topic exists already under a different name.  In that case, please ensure that the article includes the link to the manual page, and then remove the topic from this list.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not finished.  I grabbed ideas from large section titles of the manual, but there are many more in the &amp;quot;Detailed Node Listing&amp;quot;, longer version of the table of contents. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Command-line startup options]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Entering-Emacs.html] and [https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Invocation.html])&lt;br /&gt;
* [[Built-in help]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html])&lt;br /&gt;
* [[Registers]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Registers.html])&lt;br /&gt;
* [[:Category:Search|Search for text in a buffer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Search.html])&lt;br /&gt;
* [[Fixing typos]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixit.html])&lt;br /&gt;
* [[Keyboard macros]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macros.html])&lt;br /&gt;
* [[Windows within a frame]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows.html])&lt;br /&gt;
* [[Frames]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html])&lt;br /&gt;
* [[International character sets]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/International.html])&lt;br /&gt;
* [[Indentation]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html])&lt;br /&gt;
* [[Editing source code]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Programs.html])&lt;br /&gt;
* [[Building software]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Building.html])&lt;br /&gt;
* [[Maintaining source code repositories]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Maintaining.html])&lt;br /&gt;
* [[Abbrevs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Abbrevs.html])&lt;br /&gt;
* [[Dired]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html])&lt;br /&gt;
* [[Calendars and diaries]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar_002fDiary.html])&lt;br /&gt;
* [[Sending mail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html])&lt;br /&gt;
* [[Rmail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html])&lt;br /&gt;
* [[Gnus]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus.html])&lt;br /&gt;
* [[Document viewer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Document-View.html])&lt;br /&gt;
* [[Shell commands withing Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html])&lt;br /&gt;
* [[Emacs server]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html])&lt;br /&gt;
* [[Printing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Printing.html])&lt;br /&gt;
* [[Sorting]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sorting.html])&lt;br /&gt;
* [[Picture mode]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Picture-Mode.html])&lt;br /&gt;
* [[Editing binary files]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html])&lt;br /&gt;
* [[Saving Emacs sessions]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Emacs-Sessions.html])&lt;br /&gt;
* [[Recursive editing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Recursive-Edit.html])&lt;br /&gt;
* [[Emulating other text editors]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emulation.html])&lt;br /&gt;
* [[Hyperlinking within Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Hyperlinking.html])&lt;br /&gt;
* [[Games and fun]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Amusements.html])&lt;br /&gt;
* [[Installing additional packages]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html])&lt;br /&gt;
* [[Customising Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Customization.html])&lt;br /&gt;
** [[Customize]] (simple interface) ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html])&lt;br /&gt;
* [[Cancelling commands]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html])&lt;br /&gt;
* [[If Emacs is malfunctioning]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Lossage.html])&lt;br /&gt;
* [[Reporting bugs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Bugs.html])&lt;br /&gt;
* [[Contributing to GNU Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html])&lt;br /&gt;
* [[Getting help from others]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Service.html])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WikEmacs]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Talk:Installing_Emacs_on_GNU/Linux&amp;diff=50996</id>
		<title>Talk:Installing Emacs on GNU/Linux</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Talk:Installing_Emacs_on_GNU/Linux&amp;diff=50996"/>
		<updated>2024-10-15T15:03:28Z</updated>

		<summary type="html">&lt;p&gt;Elvince: install with guix, distrobox, other channels ?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maybe we should add instructions about Emacs 23 as well? [[User:Bozhidar|Bozhidar]] 13:46, 28 March 2012 (EEST)&lt;br /&gt;
 &lt;br /&gt;
: This should be &amp;quot;installation emacs GNU/linux&amp;quot; or something instead of GNU/linux [[User:Kindahero|Kindahero]] 16:14, 29 March 2012 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Good point. [[User:Bozhidar|Bozhidar]]&lt;br /&gt;
&lt;br /&gt;
== Emacs-24 ==&lt;br /&gt;
&lt;br /&gt;
I have XUbuntu 15.10 (Wily) and &amp;lt;code&amp;gt;sudo apt-get install emacs-24 emacs24-el emacs24-common&amp;lt;/code&amp;gt; worked with the default repos, and installed 24.5.&lt;br /&gt;
The note about emacs-24 (using an unsupported repo; installing 24.3) looks obsolete. --[[User:David Biesack|David Biesack]] ([[User talk:David Biesack|talk]]) 10:26, 26 January 2016 (EST)&lt;br /&gt;
&lt;br /&gt;
== Other installation channels ==&lt;br /&gt;
&lt;br /&gt;
The introduction mentions them and it would be great to have details: how to install Emacs with Guix, Distrobox or unofficial package channels. [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 15:03, 15 October 2024 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50985</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50985"/>
		<updated>2024-08-18T07:07:41Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Ready player&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Mpg123 =&lt;br /&gt;
&lt;br /&gt;
'''mpg123''' is a package written by HiroseYuuji for playing .mp3 and .ogg files with the mpg123 and ogg123 programs. It can:&lt;br /&gt;
&lt;br /&gt;
* play local music&lt;br /&gt;
* create and save playlists&lt;br /&gt;
* play randomly&lt;br /&gt;
* repeat songs&lt;br /&gt;
* loop inside songs&lt;br /&gt;
&lt;br /&gt;
It is maybe the simplest player for Emacs you will find.&lt;br /&gt;
&lt;br /&gt;
With extensions you can also:&lt;br /&gt;
&lt;br /&gt;
* control the player from outside&lt;br /&gt;
* edit ID3 tags&lt;br /&gt;
* drag and drop music files from Dired&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== package.el ===&lt;br /&gt;
&lt;br /&gt;
'''mpg123.el''' is on [[MELPA]].&lt;br /&gt;
&lt;br /&gt;
Its latest version (2023-05 at the time of writing) is for Emacs 28. You might experience a freeze of the interface in Emacs 27 when playing.&lt;br /&gt;
&lt;br /&gt;
=== Debian system ===&lt;br /&gt;
&lt;br /&gt;
You'd be better off using package.el, but you will also find a (historical) Debian package.&lt;br /&gt;
&lt;br /&gt;
Install the [http://packages.debian.org/search?keywords=mpg123-el  mpg123-el package] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123-el&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs, and you can start using it.&lt;br /&gt;
&lt;br /&gt;
=== Dependency for all systems ===&lt;br /&gt;
&lt;br /&gt;
Install the mpg123 and ogg123 programs with your system's package manager :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123 ogg123&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual install ===&lt;br /&gt;
&lt;br /&gt;
The sources are on [http://www.gentei.org/~yuuji/software/mpg123el/ mpg123.el's git repository]. You can save them in ''~/.emacs.d/mpg123.el''.&lt;br /&gt;
&lt;br /&gt;
Check you have the following in your [[Init_File]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs or {{Command|eval-current-buffer}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
{{Command|mpg123}} &lt;br /&gt;
: start mpg123, choose a directory or a mp3/ogg file and start listening. The buffer shows a complete list of commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1 --:--/--:--	 Hurricane by Kyuss&lt;br /&gt;
0%--------------------------------------50%-------------------------------------100%&lt;br /&gt;
Volume: [N/A] Repeat: [--] Loop: [--]&lt;br /&gt;
mpg123:&lt;br /&gt;
W	Show the real filename&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
SPC	Play or pause&lt;br /&gt;
RET	Play&lt;br /&gt;
m	Mark position (when playing)&lt;br /&gt;
r	Restart from marked position&lt;br /&gt;
w	Where is the marked position&lt;br /&gt;
&amp;lt;	&amp;lt;&amp;lt;&lt;br /&gt;
&amp;gt;	&amp;gt;&amp;gt;&lt;br /&gt;
f	Forward 1 sec&lt;br /&gt;
b	Backward 1 sec&lt;br /&gt;
F	Forward 10 sec&lt;br /&gt;
B	Backard 10 sec&lt;br /&gt;
n	Move to next line&lt;br /&gt;
p	Move to previous line&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
-	Volume down&lt;br /&gt;
+	Volume up&lt;br /&gt;
o	Open other directory or playlist file&lt;br /&gt;
a	Add other directory or playlist file&lt;br /&gt;
S	Save current playlist to a file&lt;br /&gt;
i	Increase repetition count&lt;br /&gt;
d	Decrease repetition count (-1 for infinity)&lt;br /&gt;
L	Increase current loop count&lt;br /&gt;
l	Decrease current loop count. Also toggles between 0(no loop) and -1(always loop)&lt;br /&gt;
s	Shuffle music list&lt;br /&gt;
D	Delete music file&lt;br /&gt;
.	Display playing position indicator&lt;br /&gt;
k	Kill music line and push onto stack&lt;br /&gt;
y	Yank music line from stack&lt;br /&gt;
I	Intro-quiz mode ON/OFF (Stop at marked position)&lt;br /&gt;
q	Quit&lt;br /&gt;
Q	Quit without query&lt;br /&gt;
&amp;lt;down-mouse-2&amp;gt;	Select a music directly on the mouse cursor&lt;br /&gt;
0..9	Digit argument (ex. 50V increase volume by 50steps)&lt;br /&gt;
----&lt;br /&gt;
The delimiter line &amp;quot;-------&amp;quot; is the indicator of currently playing position.&lt;br /&gt;
You may see the slider on the line running from left to right while the&lt;br /&gt;
music's going ahead.  If you hit RET or &amp;lt;down-mouse-2&amp;gt; on the indicator line,&lt;br /&gt;
the music will immediately move to that position.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Save this file somewhere, like in .emacs.d/my-plugins:&lt;br /&gt;
http://www.gentei.org/~yuuji/software/mpg123el/mpg123-remote.el &lt;br /&gt;
&lt;br /&gt;
add in your .emacs:&lt;br /&gt;
     (load &amp;quot;path/to/mpg123-remote&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
restart emacs. To control mpg123 from the outside, you have to start a server, for example with M-x server-start. Now you have access to a few functions that you can call this way:&lt;br /&gt;
&lt;br /&gt;
    emacsclient -e '(remote-mpg123-pause)' ; next and prev are also available&lt;br /&gt;
&lt;br /&gt;
define a global shorcut with your desktop manager and you're done !&lt;br /&gt;
&lt;br /&gt;
sources : http://www.gentei.org/~yuuji/software/mpg123el/&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
= Listen =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alphapapa/listen.el Listen.el] is a minimalist music player.&lt;br /&gt;
&lt;br /&gt;
Requires: Emacs 29.1.&lt;br /&gt;
&lt;br /&gt;
= ready-player =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/xenodium/ready-player/ ready-player] is a lightweight major mode to open media (audio/video) files in an Emacs buffer.&lt;br /&gt;
&lt;br /&gt;
By default, ready-player-mode will try to use either mpv, vlc, ffplay, or mplayer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Ready-player.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Ready-player.png&amp;diff=50984</id>
		<title>File:Ready-player.png</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Ready-player.png&amp;diff=50984"/>
		<updated>2024-08-18T07:05:09Z</updated>

		<summary type="html">&lt;p&gt;Elvince: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Jlquinn&amp;diff=50983</id>
		<title>User talk:Jlquinn</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Jlquinn&amp;diff=50983"/>
		<updated>2024-08-15T14:58:00Z</updated>

		<summary type="html">&lt;p&gt;Elvince: hello new user&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello and welcome! Any pages you want to take care of? [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 14:58, 15 August 2024 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Imenu&amp;diff=50982</id>
		<title>Imenu</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Imenu&amp;diff=50982"/>
		<updated>2024-07-04T00:45:22Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Customisation */ add to menu bar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Imenu&lt;br /&gt;
|description=https://www.gnu.org/software/emacs/manual/html_node/elisp/Imenu.html&lt;br /&gt;
|author=&lt;br /&gt;
|source=&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Imenu''' produces menus for accessing locations in documents, typically in the current buffer. You can access the locations using an ordinary menu (menu bar or other) or using '''minibuffer completion'''.&lt;br /&gt;
'''&lt;br /&gt;
A typical use of Imenu shows a menu-bar menu that is an index or table of contents for the current buffer. For a source-code buffer it is typical to '''index definitions of functions, variables''', and so on.&lt;br /&gt;
&lt;br /&gt;
You can use Imenu with any major mode and any programming language or document type. If there is no Imenu support for your context, you can add it using EmacsLisp and the constructs provided in library 'imenu.el'.&lt;br /&gt;
&lt;br /&gt;
Library imenu+.el ([[Imenu+]]) extends standard library imenu.el.&lt;br /&gt;
&lt;br /&gt;
= Customisation =&lt;br /&gt;
&lt;br /&gt;
== Add an entry menu ==&lt;br /&gt;
&lt;br /&gt;
You can add the imenu listing in the main menu bar. You have to add a hook to each mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(add-hook 'markdown-mode-hook #'imenu-add-menubar-index)&lt;br /&gt;
(add-hook 'makefile-mode-hook #'imenu-add-menubar-index)&lt;br /&gt;
(add-hook 'prog-mode-hook #'imenu-add-menubar-index)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The third line about prog-mode-hook adds imenu for all programming languages modes.&lt;br /&gt;
&lt;br /&gt;
However, by default, changes to the file will not automatically update the index menu. Set imenu-auto-rescan to t in local fashion as shown below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(add-hook 'markdown-mode-hook (lambda () (setq-local imenu-auto-rescan t)))&lt;br /&gt;
(add-hook 'makefile-mode-hook (lambda () (setq-local imenu-auto-rescan t)))&lt;br /&gt;
(add-hook 'prog-mode-hook&lt;br /&gt;
      (lambda ()&lt;br /&gt;
        (setq-local imenu-auto-rescan t)&lt;br /&gt;
        (setq-local imenu-sort-function #'imenu--sort-by-name)))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add an entry to the context menu ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(add-hook 'prog-mode-hook 'context-menu-mode)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using ido ==&lt;br /&gt;
&lt;br /&gt;
Using [[ido]] in conjunction with imenu makes it very easy and quick to use. Add the following function into your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(defun ido-goto-symbol (&amp;amp;optional symbol-list)&lt;br /&gt;
      &amp;quot;Refresh imenu and jump to a place in the buffer using Ido.&amp;quot;&lt;br /&gt;
      (interactive)&lt;br /&gt;
      (unless (featurep 'imenu)&lt;br /&gt;
        (require 'imenu nil t))&lt;br /&gt;
      (cond&lt;br /&gt;
       ((not symbol-list)&lt;br /&gt;
        (let ((ido-mode ido-mode)&lt;br /&gt;
              (ido-enable-flex-matching&lt;br /&gt;
               (if (boundp 'ido-enable-flex-matching)&lt;br /&gt;
                   ido-enable-flex-matching t))&lt;br /&gt;
              name-and-pos symbol-names position)&lt;br /&gt;
          (unless ido-mode&lt;br /&gt;
            (ido-mode 1)&lt;br /&gt;
            (setq ido-enable-flex-matching t))&lt;br /&gt;
          (while (progn&lt;br /&gt;
                   (imenu--cleanup)&lt;br /&gt;
                   (setq imenu--index-alist nil)&lt;br /&gt;
                   (ido-goto-symbol (imenu--make-index-alist))&lt;br /&gt;
                   (setq selected-symbol&lt;br /&gt;
                         (ido-completing-read &amp;quot;Symbol? &amp;quot; symbol-names))&lt;br /&gt;
                   (string= (car imenu--rescan-item) selected-symbol)))&lt;br /&gt;
          (unless (and (boundp 'mark-active) mark-active)&lt;br /&gt;
            (push-mark nil t nil))&lt;br /&gt;
          (setq position (cdr (assoc selected-symbol name-and-pos)))&lt;br /&gt;
          (cond&lt;br /&gt;
           ((overlayp position)&lt;br /&gt;
            (goto-char (overlay-start position)))&lt;br /&gt;
           (t&lt;br /&gt;
            (goto-char position)))))&lt;br /&gt;
       ((listp symbol-list)&lt;br /&gt;
        (dolist (symbol symbol-list)&lt;br /&gt;
          (let (name position)&lt;br /&gt;
            (cond&lt;br /&gt;
             ((and (listp symbol) (imenu--subalist-p symbol))&lt;br /&gt;
              (ido-goto-symbol symbol))&lt;br /&gt;
             ((listp symbol)&lt;br /&gt;
              (setq name (car symbol))&lt;br /&gt;
              (setq position (cdr symbol)))&lt;br /&gt;
             ((stringp symbol)&lt;br /&gt;
              (setq name symbol)&lt;br /&gt;
              (setq position&lt;br /&gt;
                    (get-text-property 1 'org-imenu-marker symbol))))&lt;br /&gt;
            (unless (or (null position) (null name)&lt;br /&gt;
                        (string= (car imenu--rescan-item) name))&lt;br /&gt;
              (add-to-list 'symbol-names name)&lt;br /&gt;
              (add-to-list 'name-and-pos (cons name position))))))))    &lt;br /&gt;
&lt;br /&gt;
(global-set-key (kbd &amp;quot;C-c i&amp;quot;) 'ido-goto-symbol) ; or any key you see fit&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, '''M-x eval-current-buffer''', hit '''C-c i''' and enjoy quick navigation through your code.&lt;br /&gt;
&lt;br /&gt;
== imenu-list: show the menu list in a thin sidebar buffer ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/bmag/imenu-list imenu-list] is a plugin (in melpa) to show the current buffer's imenu entries in a separate (and thin) buffer.&lt;br /&gt;
&lt;br /&gt;
[[File:imenu-list-light.png]]&lt;br /&gt;
&lt;br /&gt;
== imenu-anywhere: get a menu list across several buffers ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/vspinu/imenu-anywhere imenu-anywhere] (on [[MELPA]] and MELPA stable) allows to construct the menu list by looking into several buffers. By default it looks into buffers of the same mode, the same project and &amp;quot;friendly modes&amp;quot; (defined in &amp;lt;code&amp;gt;imenu-anywhere-friendly-modes&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
To bind it to a key of your choice do something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
 (global-set-key (kbd &amp;quot;C-.&amp;quot;) #'imenu-anywhere)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
== helm-imenu ==&lt;br /&gt;
&lt;br /&gt;
[[Helm]] is a nice package that provides interactivity for lots of commands. Here '''helm-imenu''' (provided by the helm package) offers to interactively select a variable declaration, a method, a class (or something else depending on the language support).&lt;br /&gt;
&lt;br /&gt;
[[File:helm-imenu.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ace-jump, quick cursor movements ==&lt;br /&gt;
&lt;br /&gt;
[[ace-jump]], for quick and direct cursor movement on current view. &lt;br /&gt;
&lt;br /&gt;
[[Category:Intermediate]]&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
[[Category:Buffer Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Python&amp;diff=50981</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Python&amp;diff=50981"/>
		<updated>2024-06-25T14:40:15Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Virtual environments */ add emacs-pet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How can we turn Emacs as full featured Python IDE? How to use Emacs for data science? Many packages are explained below. You don't have to install all of them one by one, see the all-in-one solutions, like Elpy, [http://wikemacs.org/wiki/Starter_Kits starter kits] and the [https://spacemacs.org/layers/+lang/python/README.html Spacemacs] layer.&lt;br /&gt;
&lt;br /&gt;
An important library you'll want to get familiar with is [https://jedi.readthedocs.io/en/latest/ Jedi], an autocompletion and analysis library for Python. It helps at autocompletion, finding definitions, showing documentation, etc. Elpy makes good use of it.&lt;br /&gt;
&lt;br /&gt;
We also have Rope that allows cross-project refactoring and smaller ones (change the method signature,…). Again Elpy bases on it and other packages like emacs-traad make it easy to install and use.&lt;br /&gt;
&lt;br /&gt;
See also [[Django]] support.&lt;br /&gt;
&lt;br /&gt;
== Default modes ==&lt;br /&gt;
&lt;br /&gt;
There are a number of python modes for Emacs.&lt;br /&gt;
fgallina's [https://github.com/fgallina/python.el python.el] is the python.el included in Emacs 24.2 and onwards.&lt;br /&gt;
&lt;br /&gt;
== All-in-one solutions ==&lt;br /&gt;
&lt;br /&gt;
=== emacs-for-python ===&lt;br /&gt;
&lt;br /&gt;
'''emacs-for-python''' is a bundle of the above modes (and more), and it's an easy way to turn Emacs into a Python IDE.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/gabrielelanaro/emacs-for-python/ emacs-for-python at github]&lt;br /&gt;
&lt;br /&gt;
=== Elpy ===&lt;br /&gt;
&lt;br /&gt;
'''Elpy''' is a collection of elisp packages for Python too.&lt;br /&gt;
&lt;br /&gt;
https://github.com/jorgenschaefer/elpy/wiki/Features&lt;br /&gt;
&lt;br /&gt;
It permits, among others, to:&lt;br /&gt;
&lt;br /&gt;
* refactor code (using rope),&lt;br /&gt;
* send a region or a buffer to a python interpreter,&lt;br /&gt;
* run unit tests, run the test the cursor is in, with a test runner of choice (django, pytest, …),&lt;br /&gt;
* jump to a symbol definition (elpy-goto-definition),…&lt;br /&gt;
&lt;br /&gt;
and of course&lt;br /&gt;
&lt;br /&gt;
* on-the-fly checks with flymake,&lt;br /&gt;
* code completion with company-mode and either rope or jedi,&lt;br /&gt;
* on the fly code helper with eldoc (and rope or jedi), &lt;br /&gt;
* code navigation,&lt;br /&gt;
* change of virtual environment inside Emacs (pyvenv), etc&lt;br /&gt;
&lt;br /&gt;
=== EMP: EMacs Python ===&lt;br /&gt;
&lt;br /&gt;
The goal of '''emp''' is to take all the best development components available for Python, and combine it conveniently under Emacs. It builds on top of elpy, and provides even more bindings.&lt;br /&gt;
&lt;br /&gt;
https://kootenpv.github.io/2016-01-01-emacs-python&lt;br /&gt;
&lt;br /&gt;
=== Emacs-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
[http://emacs-bootstrap.com/ Emacs-bootstrap] is a website where you can select a few programming languages, some options, and have it generate a full .emacs.d folder for you.&lt;br /&gt;
&lt;br /&gt;
== Language Server Protocol support ==&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/joaotavora/eglot eglot], a polyglot LSP mode for Emacs (by the author of Yasnippet,…),&lt;br /&gt;
&lt;br /&gt;
and [https://github.com/palantir/python-language-server pyls] specifically for Python.&lt;br /&gt;
&lt;br /&gt;
== Refactoring ==&lt;br /&gt;
&lt;br /&gt;
=== rope &amp;amp; ropemacs ===&lt;br /&gt;
&lt;br /&gt;
==== Presentation ====&lt;br /&gt;
&lt;br /&gt;
'''rope''' is a library for refactoring and manipulating Python code, '''pymacs''' is an interface between emacs lisp and python, and '''{{ModeLink|ropemacs}}''' is an Emacs interface to the rope library which uses rope and pymacs.&lt;br /&gt;
&lt;br /&gt;
If you do some search and replace of code objects in your code and find it sometimes tricky, and/or you need to do it in more than one file, then you should consider a good tool of refactoring.&lt;br /&gt;
&lt;br /&gt;
But Rope can do more than this simple example, it can:&lt;br /&gt;
&lt;br /&gt;
* Rename anything&lt;br /&gt;
* Extract method/local variable &lt;br /&gt;
* Change method signature &lt;br /&gt;
* Perform cross-project refactorings&lt;br /&gt;
* Support Mercurial, GIT, Darcs and SVN in refactorings &lt;br /&gt;
&lt;br /&gt;
Rope can also help IDE's with: &lt;br /&gt;
&lt;br /&gt;
* Auto-completion&lt;br /&gt;
* Finding definition location&lt;br /&gt;
* Getting pydoc&lt;br /&gt;
* Finding occurrences&lt;br /&gt;
* Organizing imports (removing unused and duplicate imports and sorting them)&lt;br /&gt;
* Generating python elements &lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
Note: see also emacs-traad below that has an easy installation process.&lt;br /&gt;
&lt;br /&gt;
===== With el-get =====&lt;br /&gt;
&lt;br /&gt;
So an easy way is to use an [[el-get]] recipe: '''M-x el-get-install ropemacs'''. It installs and build Pymacs, rope and ropemacs. The difference from the solution using pip is that it setups the Emacs side of Pymacs correctly.&lt;br /&gt;
&lt;br /&gt;
===== Manually =====&lt;br /&gt;
&lt;br /&gt;
You can follow the instructions as given [http://stackoverflow.com/a/22496541/4018217 here] ,if you don't want to use marmalade you can use the following instructions .&lt;br /&gt;
&lt;br /&gt;
    sudo pip install rope ropemacs&lt;br /&gt;
&lt;br /&gt;
As of February 2014 you can't install Pymacs via pip, therefore:&lt;br /&gt;
&lt;br /&gt;
    git clone http://github.com/pinard/pymacs&lt;br /&gt;
    cd pymacs&lt;br /&gt;
    make check&lt;br /&gt;
    sudo make install&lt;br /&gt;
&lt;br /&gt;
make check ensures the prerequisites. sudo make install puts Pymacs module in Python local modules path, usually /usr/local/lib/python2.7/dist-packages/. People generally frown upon make install, because if you lose the Makefile, it can become hard to cleanly uninstall. But you shouldn't fear it, as pip uses the same directory, so pip uninstall pymacs will work.&lt;br /&gt;
&lt;br /&gt;
'''After you do the make install of pymacs do not delete the folder.Copy the file pymacs.el to ~/.emacs.d/site-lisp/'''&lt;br /&gt;
&lt;br /&gt;
Now add path of pyamcs.el to your ~/.emacs file,using this code:&lt;br /&gt;
    (setq emacs-config-path &amp;quot;~/.emacs.d/&amp;quot;) &lt;br /&gt;
    (setq base-lisp-path &amp;quot;~/.emacs.d/site-lisp/&amp;quot;)&lt;br /&gt;
    (setq site-lisp-path (concat emacs-config-path &amp;quot;/site-lisp&amp;quot;))&lt;br /&gt;
    (defun add-path (p)&lt;br /&gt;
      (add-to-list 'load-path (concat base-lisp-path p)))&lt;br /&gt;
    (add-path &amp;quot;&amp;quot;)&lt;br /&gt;
    (add-to-list 'load-path &amp;quot;~/.emacs.d&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
You can now lazily load ropemacs or load it at runtime.For lazy evaluation add this to your .emacs file:&lt;br /&gt;
    (defun load-ropemacs ()&lt;br /&gt;
      &amp;quot;Load pymacs and ropemacs&amp;quot;&lt;br /&gt;
      (interactive)&lt;br /&gt;
      (require 'pymacs)&lt;br /&gt;
      (pymacs-load &amp;quot;ropemacs&amp;quot; &amp;quot;rope-&amp;quot;)&lt;br /&gt;
      ;; Automatically save project python buffers before refactorings&lt;br /&gt;
      (setq ropemacs-confirm-saving 'nil)&lt;br /&gt;
    )&lt;br /&gt;
    (global-set-key &amp;quot;\C-xpl&amp;quot; 'load-ropemacs)&lt;br /&gt;
&lt;br /&gt;
use c-xpl to load ropemacs.Read more about it [https://github.com/python-rope/ropemacs#setting-up here]&lt;br /&gt;
&lt;br /&gt;
=== Rope &amp;amp; traad ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abingham/traad Traad] is a client-server approach to using the rope Python refactory library. It involves two basic components:&lt;br /&gt;
* A HTTP server exposing the rope API via JSON, and&lt;br /&gt;
* Client libraries for talking to the server&lt;br /&gt;
Since rope is written in Python, any tool that wants to use rope needs to either embed Python, or it needs to find a way to communicate with a Python process running rope. The embedding approach is difficult if the target environment is not written in Python, and it also faces challenges when dealing with more than one Python version.&lt;br /&gt;
&lt;br /&gt;
So traad aims to simplify communication with rope running in an independent process. HTTP communication and JSON data handling is well supported in many, many languages, so any environment that wants to use rope should be able to easily communicate with traad.&lt;br /&gt;
&lt;br /&gt;
==== emacs-traad, easy installation and use ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abingham/emacs-traad emacs-traad] (simply traad in melpa) makes it very easy to install traad, and thus rope. Install traad from melpa and then '''M-x traad-install-server'''. Then start a connection with traad-open and enjoy. Furthermore it installs traad in its own virtualenv, so it won't clutter your current virtualenv, and you don't have to re-install it in every project.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
It is possible to remove a method's argument, normalize arguments, see the occurrences of a method, organize imports, some more python refactoring, and also see the history of traad changes.&lt;br /&gt;
&lt;br /&gt;
=== Other Python &amp;quot;refactoring&amp;quot; tools ===&lt;br /&gt;
&lt;br /&gt;
==== Projectile - replace in project ====&lt;br /&gt;
&lt;br /&gt;
This is not specific to Python but is very helpful anyway. [[Projectile]] has a function '''projectile-replace''' which interactively offers to replace all occurrences of a term in all the files of the project. So it's handy to rename a method.&lt;br /&gt;
&lt;br /&gt;
==== Iedit - replace occurences of a symbol ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/victorhge/iedit Iedit] isn't specific to Python and isn't a &amp;quot;real&amp;quot; &amp;quot;intelligent&amp;quot; refactoring, but it helps editing similar portions of text in the current buffer, with highlighting and simultaneous editing, like multicursors. Go on a variable you want to rename and call '''iedit''' (bound to '''C-;'''). You can restrict to the current method with a 0 prefix argument: '''C-u 0 M-x iedit'''. You can use '''C-\'''' (control quote) to only show the lines that will be edited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Red4e - change the method signature, add decorators ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/vindarel/redbaron4emacs/ red4e] (not a package) is a little utility, considered a proof of concept, that helps at modifying the current method signature: &lt;br /&gt;
&lt;br /&gt;
* '''add a decorator''', remove one, automatically adding or removing &amp;quot;self&amp;quot; for a staticmethod,&lt;br /&gt;
* '''add an argument''' (and rename it inside the method body), remove an argument, add the couple &amp;quot;*args, **kwargs&amp;quot;, &lt;br /&gt;
* '''rename/copy/comment/kill the current method''' (and rename it in the project too), &lt;br /&gt;
* quickly go to another method (with imenu), &lt;br /&gt;
* toggle arguments on '''one or multiple lines''',&lt;br /&gt;
* and more, to be continued.&lt;br /&gt;
&lt;br /&gt;
It uses under the hood (mostly, not everywhere) the redbaron python library that allows to manipulate an FST (Full Syntax Tree).&lt;br /&gt;
&lt;br /&gt;
==== Pygen - code generation ====&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/JackCrawley/pygen pygen]. Unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Refactor with Elpy ===&lt;br /&gt;
&lt;br /&gt;
See Elpy's documentation: http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring&lt;br /&gt;
&lt;br /&gt;
One can refactor code (with rope), format code, edit all the occurences of the symbol at point simultaneously, and fix imports.&lt;br /&gt;
&lt;br /&gt;
== Auto-Completion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jedi ===&lt;br /&gt;
&lt;br /&gt;
Jedi.el is a Python auto-completion package for Emacs. It aims at helping your Python coding in a non-destructive way. It also helps you to find information about Python objects, such as docstring, function arguments and code location.&lt;br /&gt;
&lt;br /&gt;
Jedi is simple to install and it works out of the box.&lt;br /&gt;
&lt;br /&gt;
See screenshots and get the full documentation : http://tkf.github.io/emacs-jedi/released/&lt;br /&gt;
&lt;br /&gt;
Jedi's official page: http://jedi.jedidjah.ch/en/latest/&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
Install Jedi.el via el-get, Marmalade or MELPA (see install for more info) and add this to your Emacs configuration:&lt;br /&gt;
    (add-hook 'python-mode-hook 'jedi:setup)&lt;br /&gt;
    (setq jedi:setup-keys t)                      ; optional&lt;br /&gt;
    (setq jedi:complete-on-dot t)                 ; optional&lt;br /&gt;
&lt;br /&gt;
or call M-x jedi:setup&lt;br /&gt;
&lt;br /&gt;
''Note'': it's nice to use it in a python interpreter inside emacs :)&lt;br /&gt;
&lt;br /&gt;
=== Anaconda ===&lt;br /&gt;
&lt;br /&gt;
'''Anaconda-mode''' is a mode for '''code navigation, documentation lookup''' and '''completion''' for Python.&lt;br /&gt;
&lt;br /&gt;
It runs on '''emacs 24.3''' with python &amp;gt;= 2.6. &lt;br /&gt;
&lt;br /&gt;
It provides:&lt;br /&gt;
&lt;br /&gt;
* context-sensitive code completion for Python&lt;br /&gt;
* jump to definition&lt;br /&gt;
* find references&lt;br /&gt;
* view documentation&lt;br /&gt;
* virtualenv management&lt;br /&gt;
&lt;br /&gt;
The package is available in [[MELPA]]. For more information, [https://github.com/proofit404/anaconda-mode read its documentation].&lt;br /&gt;
&lt;br /&gt;
== Code Checker ==&lt;br /&gt;
&lt;br /&gt;
=== Flymake and Flycheck ===&lt;br /&gt;
&lt;br /&gt;
[[Flymake]] (in Emacs) is a on-the-fly syntax checker for Emacs. &lt;br /&gt;
We can use it with [[flycheck]] (in melpa), that aims at being a replacement.&lt;br /&gt;
&lt;br /&gt;
To run pep8, pylint, pyflakes and unit-tests (with nose), you can be interested in using [https://github.com/akaihola/flymake-python flymake-python].&lt;br /&gt;
&lt;br /&gt;
Don't forget about '''pylint''' too.&lt;br /&gt;
&lt;br /&gt;
[[File:flycheck-annotated.png]]&lt;br /&gt;
&lt;br /&gt;
=== MyPy checks ===&lt;br /&gt;
&lt;br /&gt;
With [https://github.com/SerialDev/mypy-mode mypy-mode] we get a compilation-mode based support for python 3.6+ type hints checks.&lt;br /&gt;
&lt;br /&gt;
As a side note, we can also get flycheck to work, at the same time as pylint, with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;elisp&amp;quot;&amp;gt;&lt;br /&gt;
(flycheck-define-checker&lt;br /&gt;
    python-mypy &amp;quot;&amp;quot;&lt;br /&gt;
    :command (&amp;quot;mypy&amp;quot;&lt;br /&gt;
              &amp;quot;--ignore-missing-imports&amp;quot;&lt;br /&gt;
              &amp;quot;--python-version&amp;quot; &amp;quot;3.6&amp;quot;&lt;br /&gt;
              source-original)&lt;br /&gt;
    :error-patterns&lt;br /&gt;
    ((error line-start (file-name) &amp;quot;:&amp;quot; line &amp;quot;: error:&amp;quot; (message) line-end))&lt;br /&gt;
    :modes python-mode)&lt;br /&gt;
&lt;br /&gt;
(add-to-list 'flycheck-checkers 'python-mypy t)&lt;br /&gt;
(flycheck-add-next-checker 'python-pylint 'python-mypy t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Indexing sources: ctags, cscope, pycscope == &lt;br /&gt;
&lt;br /&gt;
Indexing sources allows you to do neat things, like going to the definition of a function or finding which functions are calling another one.&lt;br /&gt;
&lt;br /&gt;
Note that Elpy does the &amp;quot;go to definition&amp;quot; feature (elpy-goto-definition), without the need of indexing sources.&lt;br /&gt;
&lt;br /&gt;
=== etags, ctags ===&lt;br /&gt;
&lt;br /&gt;
'''Etags''' (Exuberant Ctags) generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object). Etags is a multilingual implementation of '''ctags'''.&lt;br /&gt;
&lt;br /&gt;
The primary use for the tags files is looking up class/method/function/constant/etc declaration/definitions. Cscope is more powerful (see below).&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
Generate the tags with this command at the root of your project:&lt;br /&gt;
&lt;br /&gt;
     find . -name &amp;quot;*.py&amp;quot; -print | etags -&lt;br /&gt;
&lt;br /&gt;
it creates the file TAGS.&lt;br /&gt;
&lt;br /&gt;
Note that projects like [[Projectile]] or [[Helm]] provide an integrated use of etags (finding one, re-generating the index, etc).&lt;br /&gt;
&lt;br /&gt;
=== cscope ===&lt;br /&gt;
&lt;br /&gt;
'''cscope''' is a much more powerful beast. While it operates on more or less the same principle (generating a file of useful metadata) it allows you do some fancier things like find all references to a symbol, see where a function is being invoked, etc.+ (you can find definitions as well). &lt;br /&gt;
&lt;br /&gt;
It was originally designed for C and C++, but thanks to version 0.3 of '''pycscope''', pythonistas can make use of it.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
The following commands should get you running: &lt;br /&gt;
&lt;br /&gt;
    apt-get install cscope&lt;br /&gt;
    pip install pycscope&lt;br /&gt;
    # in project base dir:&lt;br /&gt;
    find . -name '*.py' &amp;gt; cscope.files&lt;br /&gt;
    cscope -R &lt;br /&gt;
&lt;br /&gt;
now install the '''xcscope''' emacs package with [[ELPA]] and require it: &lt;br /&gt;
    (require 'xcscope)&lt;br /&gt;
&lt;br /&gt;
When done, you can either enable the mode with '''cscope-minor-mode''' (which will add a menu you are free to explore) or call some functions like {{Command|cscope-find-global-definition}}, {{Command|cscope-find-functions-calling-this-function}}, etc.&lt;br /&gt;
&lt;br /&gt;
==== Interactivity with helm-cscope ====&lt;br /&gt;
&lt;br /&gt;
You can do all that interactively with [https://github.com/alpha22jp/helm-cscope.el helm-cscope] (in melpa): when you are on symbol, just call {{Command|helm-cscope-find-global-definition}} (for example) and enjoy the nice interactive interface.&lt;br /&gt;
&lt;br /&gt;
== Running tests ==&lt;br /&gt;
&lt;br /&gt;
Elpy has commands to run either all tests of the current buffer or only the test we are on. It supports launchers for '''Django''' (thus using &amp;quot;manage.py test&amp;quot;), '''pytest''' and '''nose'''. See http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#testing&lt;br /&gt;
&lt;br /&gt;
If you wish to modify the way it runs test, set the following variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq elpy-test-&amp;lt;django, nose, pytest&amp;gt;-runner-command '(&amp;quot;./manage.py&amp;quot; &amp;quot;test&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Hydra to choose what tests to run, navigate errors and switch to the console ===&lt;br /&gt;
&lt;br /&gt;
See this snippet: https://github.com/abo-abo/hydra/wiki/Elpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Running Make, with completion of commands ===&lt;br /&gt;
&lt;br /&gt;
It can be handy to call a Makefile target from wherever we are in a project, and even more handy with fuzzy completion of the targets. This is easily done with [https://github.com/abo-abo/helm-make helm-make]. It is also included in [[Django]] mode, which does the same for management commands.&lt;br /&gt;
&lt;br /&gt;
[[File:Make-helm.png]]&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
Well, let's start with the debuggers documentation:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.python.org/3/library/pdb.html pdb doc]&lt;br /&gt;
* [https://pypi.python.org/pypi/pdbpp/ pdb++] has a few more commands&lt;br /&gt;
* [https://pypi.python.org/pypi/ipdb ipdb] to make use of ipython (aka jupyter)&lt;br /&gt;
&lt;br /&gt;
=== Ipdb, ipython debugger ===&lt;br /&gt;
&lt;br /&gt;
If you call ipdb, the execution will stop and give a nice ipython-looking prompt.&lt;br /&gt;
Just add the line &lt;br /&gt;
&lt;br /&gt;
    import ipdb; ipdb.set_trace()&lt;br /&gt;
&lt;br /&gt;
Now you can use the usual commands: '''c''' to continue the execution, '''n''' to execute the next one, '''s''' to step into the next function call, '''l''' to list the source code, '''!''' to execute a statement in the current context, etc.&lt;br /&gt;
&lt;br /&gt;
Note: if you like IPython/Jupyter, look at the [https://github.com/millejoh/emacs-ipython-notebook Emacs IPython Notebook].&lt;br /&gt;
&lt;br /&gt;
Note: You can use [[yasnippet]] to quickly enter this sentence, or just a simple function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun python-add-breakpoint ()&lt;br /&gt;
  &amp;quot;Add a break point&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (newline-and-indent)&lt;br /&gt;
  (insert &amp;quot;import ipdb; ipdb.set_trace()&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;^[ ]*import ipdb; ipdb.set_trace()&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use the following to highlight this line, and not forget it :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
; Highlight the call to ipdb&lt;br /&gt;
; src http://pedrokroger.com/2010/07/configuring-emacs-as-a-python-ide-2/&lt;br /&gt;
(defun annotate-pdb ()&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;import ipdb&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;ipdb.set_trace()&amp;quot;))&lt;br /&gt;
(add-hook 'python-mode-hook 'annotate-pdb)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And just delete every breakpoints of the buffer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
(defun ipdb-cleanup ()&lt;br /&gt;
    (interactive)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (replace-regexp &amp;quot;.*ipdb.set_trace().*\n&amp;quot; &amp;quot;&amp;quot; nil (point-min) (point-max))&lt;br /&gt;
      ;; (save-buffer)&lt;br /&gt;
      ))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pdb track ===&lt;br /&gt;
&lt;br /&gt;
If you use emacs-for-python given above, you can track your source code while debugging with pdbtrack.&lt;br /&gt;
&lt;br /&gt;
A tool to use in a non-emacs terminal would be [https://pypi.python.org/pypi/pdbpp/ pdbpp]&lt;br /&gt;
&lt;br /&gt;
=== Realgud, a front end to many debuggers to stay in the source window ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/realgud/realgud Realgud] is a graphical front-end to many python debuggers. The goal is to call the debugger from within Emacs and manipulate it ('''c'''ontinue, '''n'''ext commands, setting breakpoints, etc) within the source window, with single key presses. We can also inspect variables with mouse clicks, set and clear breakpoints (from the source, with mouse clicks), evaluate expressions, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:Realgud.png]]&lt;br /&gt;
&lt;br /&gt;
=== Redefine the code being run in the debugger session ===&lt;br /&gt;
&lt;br /&gt;
The tip in [http://wenshanren.org/?p=351 this article] makes use of the pdb feature to execute code in the context of the current stack frame with the &amp;quot;!&amp;quot; command (which can actually be omitted. See [https://docs.python.org/3/library/pdb.html the pdb doc]) and it uses an emacs package to make it much easier to write code blocks for the (i)pdb prompt (à la org-mode code blocks).&lt;br /&gt;
&lt;br /&gt;
=== M-x compile and breakpoints ===&lt;br /&gt;
&lt;br /&gt;
You may run your script from a real terminal, from emacs with M-x shell or with M-x compile. If you like the latter you'll notice that it hangs if you set breakpoints inside your code. The function below checks if your code has breakpoints and if so, it gives you the hand for the debugger prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
; thanks to https://masteringemacs.org/article/compiling-running-scripts-emacs (slightly modified)&lt;br /&gt;
(defadvice compile&lt;br /&gt;
    (before ad-compile-smart activate)&lt;br /&gt;
  &amp;quot;Advises `compile' so it sets the argument COMINT to t if breakpoints are present in `python-mode' files&amp;quot;&lt;br /&gt;
  (when (derived-mode-p major-mode 'python-mode)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (save-match-data (goto-char (point-min))&lt;br /&gt;
                       (if (search-forward &amp;quot;ipdb.set_trace()&amp;quot;&lt;br /&gt;
                                           (point-max)&lt;br /&gt;
                                           t)&lt;br /&gt;
                           (progn (ad-set-arg 1 t)&lt;br /&gt;
                                  (switch-to-buffer-other-window &amp;quot;*compilation*&amp;quot;)))))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now just run '''M-x compile''' as usual.&lt;br /&gt;
&lt;br /&gt;
=== Debug Adapter Protocol - dap-mode, LSP for debugging ===&lt;br /&gt;
&lt;br /&gt;
[https://emacs-lsp.github.io/dap-mode/ dap-mode] is a client/library for [https://microsoft.github.io/debug-adapter-protocol/ Debug Adapter Protocol], a wire protocol for communication between client and Debug Server. It's similar to the LSP but provides integration with debug server.&lt;br /&gt;
&lt;br /&gt;
You can set breakpoints in your code, step, evaluate statements, launch or attach to debugging sessions, etc. You can use '''dap-hydra''' to see the available actions.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Choose your docstring fill-paragraph style (M-q) ===&lt;br /&gt;
&lt;br /&gt;
If you call '''M-q''' (fill-paragraph) inside a Python docstring, Python-mode will format it following PEP-257: the first sentence  is on the same line with the opening quotes and a blank line is inserted before the closing quotes, like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
def foo():&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;My docstring.&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   pass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps you prefer the Django style:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
def foo():&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   My docstring.&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   pass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make '''M-q''' respect the Django style, use this setting:&lt;br /&gt;
&lt;br /&gt;
    (setq python-fill-docstring-style 'django)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Insert Sphinx docstrings ===&lt;br /&gt;
&lt;br /&gt;
The package [https://github.com/naiquevin/sphinx-doc.el sphinx-doc] (on melpa) offers, with one shortuct, to insert ''or update'' Sphinx-like docstrings for the current method's arguments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eldoc: argument list in the echo area ===&lt;br /&gt;
&lt;br /&gt;
Eldoc is a MinorMode which shows you, in the echo area, the argument list of the function call you are currently writing. It works out of the box for elisp editing and for modes that implement its support, such as python-mode. You just have to call '''eldoc-mode'''.&lt;br /&gt;
&lt;br /&gt;
To always enable it:&lt;br /&gt;
&lt;br /&gt;
    (add-hook 'python-mode-hook 'eldoc-mode)&lt;br /&gt;
&lt;br /&gt;
=== Jedi: show the method signature, show documentation ===&lt;br /&gt;
&lt;br /&gt;
This pops up the function signature when you're between parentheses for a function call (not the default): '''M-x jedi:get-in-function-call'''.&lt;br /&gt;
&lt;br /&gt;
There is also '''M-x jedi:show-doc''' to show the docstring for the symbol at point in another window.&lt;br /&gt;
&lt;br /&gt;
See more in [https://jedi.readthedocs.io/en/latest/ the Jedi documentation].&lt;br /&gt;
&lt;br /&gt;
=== helm-pydoc ===&lt;br /&gt;
&lt;br /&gt;
'''helm-pydoc''' is a little utility that lets you interactively select a module you want read the doc and displays it in another buffer.&lt;br /&gt;
&lt;br /&gt;
=== pydoc linkification ===&lt;br /&gt;
&lt;br /&gt;
If you've ever used the emacs lisp documentation system, you may find that the pydoc is poorer in functionnalities:&lt;br /&gt;
* there is no direct link to code source&lt;br /&gt;
* there is no &amp;quot;back&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
John Kitchin's pydoc aims at fixing that with more enhancements, like a bit of source fontification. See more at [http://kitchingroup.cheme.cmu.edu/blog/2014/12/20/A-new-mode-for-Python-documentation/ his presentation] and [https://github.com/jkitchin/jmax/blob/master/pydoc.el on github].&lt;br /&gt;
&lt;br /&gt;
=== info format ===&lt;br /&gt;
&lt;br /&gt;
Another way to read the python documentation is in the texinfo format. You'll need to install the package '''python-info''' [http://melpa.org/#/python-info on MELPA] and go through [https://bitbucket.org/jonwaltman/pydoc-info/ the installation process].&lt;br /&gt;
&lt;br /&gt;
== Datascience ==&lt;br /&gt;
&lt;br /&gt;
=== the Scimax starter kit ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/jkitchin/scimax Scimax], a starter kit for scientists and engineers, for people interested in reproducible research and publishing. Scimax is just Emacs that has been configured extensively to make it act like we need it to for research documentation and publication. It provides a lot of customization of org-mode, improvements to bibliography, tools to send emails, manage a contacts database, evaluating code asynchronously, and more.&lt;br /&gt;
&lt;br /&gt;
=== Ipython / Jupyter notebooks ===&lt;br /&gt;
&lt;br /&gt;
You have [http://jupyter.org/ online Jupyter notebooks], also a [https://jupyter.org/qtconsole/ Qt console] and an [https://github.com/millejoh/emacs-ipython-notebook emacs ipython notebook] !&lt;br /&gt;
&lt;br /&gt;
Notebooks allow you to create and share documents that contain live code, equations, visualizations and explanatory text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, machine learning and much more. This is [https://nbviewer.jupyter.org/github/akittas/presentations/blob/master/pythess/func_py/func_py.ipynb an example of result]. You can [https://try.jupyter.org/ try it online].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:emacs-ipython.png||||the emacs ipython notebook, mixing and evaluating code, text and graphics]]&lt;br /&gt;
&lt;br /&gt;
=== lpy - eval a region, step through expressions ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abo-abo/lpy lpy] is a little tool that offers to:&lt;br /&gt;
&lt;br /&gt;
* press '''e''' in the right position (before an expression) to eval it,&lt;br /&gt;
* press '''j''' to go to the next expression&lt;br /&gt;
&lt;br /&gt;
and more ! It's a new tool in development (by a great developer, rest assured the doc will follow ! :p)&lt;br /&gt;
&lt;br /&gt;
You'll have to read its documented source. Lpy is actually is an attempt to implement a variant of [https://github.com/abo-abo/lispy lispy-mode]&lt;br /&gt;
for Python. Unfortunately,&lt;br /&gt;
Python isn't nearly as well-structured as LISP. But Python is&lt;br /&gt;
ubiquitous, and the less powerful `lpy-mode' is better than nothing&lt;br /&gt;
at all. The basic idea of `lpy-mode' is to increase the editing efficiency&lt;br /&gt;
by binding useful navigation, refactoring and evaluation commands&lt;br /&gt;
to unprefixed keys, e.g. &amp;quot;j&amp;quot; or &amp;quot;e&amp;quot;. But only in certain point&lt;br /&gt;
positions, so that you are still able to use uprefixed keys to&lt;br /&gt;
insert themselves.&lt;br /&gt;
Example, here &amp;quot;|&amp;quot; represents the point position:&lt;br /&gt;
&lt;br /&gt;
      print |(&amp;quot;2+2=%d&amp;quot; % (2 + 2))&lt;br /&gt;
&lt;br /&gt;
Here, if you press the key &amp;quot;e&amp;quot;, the whole line will be evaluated&lt;br /&gt;
and &amp;quot;2+2=4&amp;quot; will be printed in the Echo Area.&lt;br /&gt;
&lt;br /&gt;
=== Send the current paragraph to the REPL, go to the next paragraph ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;elisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun my-python-para-send-and-step ()&lt;br /&gt;
  &amp;quot;Sends the current paragraph to the python REPL and goes to the next one&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (mark-paragraph)&lt;br /&gt;
  (python-shell-send-region)&lt;br /&gt;
  (forward-paragraph))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Send code to the REPL (isend-mode, eval-in-repl) ===&lt;br /&gt;
&lt;br /&gt;
This is actually a default feature of python.el. See its menu to send a line or a region to the repl.&lt;br /&gt;
&lt;br /&gt;
Besides, [https://github.com/ffevotte/isend-mode.el isend-mode] (in MELPA) works with many languages and REPLs, and so does [https://github.com/kaz-yos/eval-in-repl eval-in-repl] (in MELPA). With the latter, just use '''C-RET'''.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/sriramkswamy/ryo-emacs/blob/master/config/sk-python.el sk's utilities for datascience]: several helper functions, similar to &amp;lt;code&amp;gt;ess-describe-object-at-point&amp;lt;/code&amp;gt;, to get the shape, type and sum of the symbol at point. It works very well for my needs and doesn't need any extra package - just the built-in python-mode. There are also keybindings setup to send various chunks of code.&lt;br /&gt;
&lt;br /&gt;
== Other tools ==&lt;br /&gt;
&lt;br /&gt;
=== Virtual environments ===&lt;br /&gt;
&lt;br /&gt;
Some tools allow to apply the changes of virtual environment activation inside emacs. They make '''M-x compile''' aware of the environment, etc.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wyuenho/emacs-pet pet] should supersede the other solutions. I tracks down the correct Python tooling executables from your virtualenvs so you can glue the binaries to Emacs, without configuration. &lt;br /&gt;
  * «The first time you call one the few pet helper functions, it will use Projectile or project.el to detect the root of your project, search for the configuration files for the many supported Python virtualenv tools, and then lookup the location of the virtualenv based on the content of the configuration files. Once a virtualenv is found, all executables are found by looking into its bin directory.»&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/porterjamesj/virtualenvwrapper.el virtualenvwrapper] emulates much of the functionnality of '''virtualenvwrapper''', integrates well with '''M-x shell''' or '''eshell''', is aware of hooks, has an automatic activation by project and integrates in the mode line.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/jorgenschaefer/pyvenv pyvenv] sets the python path, uses virtualwrapper's hooks, ...&lt;br /&gt;
&lt;br /&gt;
=== Python versions (pyenv) ===&lt;br /&gt;
&lt;br /&gt;
We can change python versions with [https://github.com/proofit404/pyenv-mode pyenv-mode] (in melpa) and automatically when there is a .python-version file with [https://github.com/ssbb/pyenv-mode-auto pyenv-mode-auto].&lt;br /&gt;
&lt;br /&gt;
Once it's installed, we just have to switch with '''M-x pyenv-mode-set'''.&lt;br /&gt;
&lt;br /&gt;
=== Pymacs ===&lt;br /&gt;
&lt;br /&gt;
'''{{ModeLink|Pymacs}}''' is an Emacs extension that enables the use of Python alongside with Emacs Lisp.&lt;br /&gt;
&lt;br /&gt;
[http://pymacs.progiciels-bpi.ca/index.html Pymacs homepage]&lt;br /&gt;
&lt;br /&gt;
=== include import statements or remove unused ===&lt;br /&gt;
&lt;br /&gt;
[[Ropemacs]] (see above) is a plugin for performing python refactorings in emacs. It uses rope library and pymacs. It has '''rope-auto-import''', so if you write &lt;br /&gt;
&lt;br /&gt;
    rmtree&lt;br /&gt;
&lt;br /&gt;
and then execute {{Command|rope-auto-import}}, &lt;br /&gt;
&lt;br /&gt;
    from shutil import rmtree&lt;br /&gt;
&lt;br /&gt;
is inserted at the top of the file.&lt;br /&gt;
&lt;br /&gt;
Unfortunately Ropemacs can not do non-relative imports, it can only create imports of the &amp;quot;from X import Y&amp;quot; variety (if you type ''shutil.rmtree'' it doesn't write ''import shutil'').&lt;br /&gt;
&lt;br /&gt;
'''emacs-traad''' (see above) has a function '''traad-auto-import'''.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Wilfred/pyimport pyimport] can add import statements or remove the unused ones (with pyflakes).&lt;br /&gt;
&lt;br /&gt;
[http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring Elpy] too can import missing ones.&lt;br /&gt;
&lt;br /&gt;
See also [https://gitlab.com/emacs-stuff/python-import-add/ a snippet] to add many imports at once.&lt;br /&gt;
&lt;br /&gt;
=== Sort import statements ===&lt;br /&gt;
&lt;br /&gt;
See the '''py-isort''' [[Melpa]] package to automatically sort import statements.&lt;br /&gt;
&lt;br /&gt;
=== pip-requirements mode ===&lt;br /&gt;
&lt;br /&gt;
[http://melpa.org/#/pip-requirements pip-requirements] (in MELPA) is a major mode for editing pip requirements files, with the following features:&lt;br /&gt;
* syntax highlighting&lt;br /&gt;
* Auto completion of package names from PyPI&lt;br /&gt;
* togglable comments&lt;br /&gt;
&lt;br /&gt;
=== pip utilities ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/brotzeitmacher/pippel pippel] (in melpa) provides a similar package menu as &amp;quot;package-list-packages&amp;quot;, to list, install, upgrade, remove etc pip packages.&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/emacs-stuff/pip-utils pip-utils] (not in melpa) provides some functions with completion of packages and of the requirements files of the project:&lt;br /&gt;
&lt;br /&gt;
* choose one requirements file of the project if many and install its packages,&lt;br /&gt;
* chooses the right virtual env,&lt;br /&gt;
* install a new package and add it into a requirements file (with interactive choice, needed when there is a &amp;quot;dev-requirements&amp;quot; for instance),&lt;br /&gt;
* check the current package version (with pip freeze),&lt;br /&gt;
* open the package page on pypi.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage with Python 3 ===&lt;br /&gt;
&lt;br /&gt;
There's a tool to highlight in real time the lines that are (not) covered by your unit tests. It's called [https://github.com/mattharrison/pycoverage.el pycoverage.el] and it is in [[melpa]].&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
&lt;br /&gt;
Let's put them on [[Python libraries]]. Hints to write Emacs packages for Python projects.&lt;br /&gt;
&lt;br /&gt;
== Screencasts ==&lt;br /&gt;
&lt;br /&gt;
These videos are of particular interest for Python development in Emacs:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JmmTUIahB1U Emacs, Pyright and Eglot make for an excellent Python IDE]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
You'll be certainly interested in the following packages (that you will find on [[ELPA]] or MELPA):&lt;br /&gt;
&lt;br /&gt;
=== '''Magit''', a git interface === &lt;br /&gt;
&lt;br /&gt;
Emacs + git is magic : see [[magit]]&lt;br /&gt;
&lt;br /&gt;
=== Code navigation: jump to function definitions ===&lt;br /&gt;
&lt;br /&gt;
Get started with [[imenu]] and '''helm-imenu''' (see [[helm]]).&lt;br /&gt;
&lt;br /&gt;
Then for cross-project code navigation see xcscope that answers questions like &amp;quot;show all methods that call this one&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See also '''grep''', '''rgrep''', '''occur''', [https://github.com/ShingoFukuyama/helm-swoop helm-swoop] (interactive grep of the current buffer) and enhanced grep tools like [https://github.com/Wilfred/ag.el ag] and its related helm-ag.&lt;br /&gt;
&lt;br /&gt;
=== Code navigation: move by indentation levels ===&lt;br /&gt;
&lt;br /&gt;
See [https://gitlab.com/emacs-stuff/indent-tools indent-tools] (in MELPA) that allows to move and fire actions by levels of indentation, for code source like Python or Yaml. For example: go to the next line that has the same indentation level, comment/kill/fold/… the current indentation level, the current paragraph, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:indent-tools.gif]]&lt;br /&gt;
&lt;br /&gt;
=== '''Yasnippet''', a template system ===&lt;br /&gt;
&lt;br /&gt;
[[yasnippet]]&lt;br /&gt;
&lt;br /&gt;
=== '''helm-pydoc''' to browse the documentation of installed packages and import one ===&lt;br /&gt;
&lt;br /&gt;
=== '''pungi''' to integrate jedi, virtualenv and buildout ===&lt;br /&gt;
&lt;br /&gt;
=== How to do code folding ===&lt;br /&gt;
&lt;br /&gt;
See [[folding]]&lt;br /&gt;
&lt;br /&gt;
=== other '''ELPA packages''' === &lt;br /&gt;
&lt;br /&gt;
If you're running Emacs with package support (usually Emacs 24 and later), check out what is available in [[ELPA]]:&lt;br /&gt;
; {{Command | list-packages}}  :  and see flymake-pyhon-pyflakes, flymake-shell, abl-mode (a python TDD minor-mode), nose (easy python test-running in emacs), visual-regexp / visual-regexp-steroids, python-magic and more.&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming languages]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Jbalint&amp;diff=50980</id>
		<title>User talk:Jbalint</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Jbalint&amp;diff=50980"/>
		<updated>2024-06-21T23:52:59Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Created page with &amp;quot;Hello and welcome! ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello and welcome! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 23:52, 21 June 2024 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Bltejerina&amp;diff=50979</id>
		<title>User talk:Bltejerina</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Bltejerina&amp;diff=50979"/>
		<updated>2024-04-02T10:44:32Z</updated>

		<summary type="html">&lt;p&gt;Elvince: hello new user&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 10:44, 2 April 2024 (UTC)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Buffer_management&amp;diff=50977</id>
		<title>Buffer management</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Buffer_management&amp;diff=50977"/>
		<updated>2024-03-07T20:23:00Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Ibuffer */ ibuffer-vc !&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Let's list the possible ways to manage buffers. How to manage a lot of buffers, to get fuzzy completion, to work in distinct projects, workspaces, etc ?&lt;br /&gt;
&lt;br /&gt;
What is a buffer exactly ? Check the [http://wikemacs.org/wiki/Emacs_Terminology#Buffer Emacs term].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List current buffers =&lt;br /&gt;
&lt;br /&gt;
== Ibuffer ==&lt;br /&gt;
&lt;br /&gt;
Ibuffer is built-in. Nice extension: [https://github.com/abo-abo/hydra/wiki/Ibuffer hydra-ibuffer] will offer a nice prompt with ibuffer commands.&lt;br /&gt;
&lt;br /&gt;
[[File:hydra-ibuffer.png]]&lt;br /&gt;
&lt;br /&gt;
Another extension, [https://github.com/purcell/ibuffer-vc/ ibuffer-vc], allows to group the buffers by project directory (or more precisely, by the project root when they are under version conrol).&lt;br /&gt;
&lt;br /&gt;
== Switch buffers with completion ==&lt;br /&gt;
&lt;br /&gt;
Choose your favorite option: [[ido]], [[ivy]] or [[helm]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Work in projects =&lt;br /&gt;
&lt;br /&gt;
== Projectile ==&lt;br /&gt;
&lt;br /&gt;
In [[Projectile]], a project root is defined either by a source control repository either by a &amp;lt;code&amp;gt;.projectile&amp;lt;/code&amp;gt; file. Among other features, it allows to show the list of buffers that belong to the current project and switch to it. It is by default bound to '''C-c p b''' ('''M-x projectile-switch-buffer'''). See also the menu. You can choose the completion engine for Projectile (helm, …).&lt;br /&gt;
&lt;br /&gt;
= Work in distinct workspaces / perspectives =&lt;br /&gt;
&lt;br /&gt;
== persp-mode ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Bad-ptr/persp-mode.el persp-mode] (in MELPA) implements  named perspectives, i.e. a set of buffers/window configs, or also tagged workspaces. It is based on [https://github.com/nex3/perspective-el perspective-el] and adds the ability to share perspectives among frames and to save/restore its state from/to a file.&lt;br /&gt;
&lt;br /&gt;
Once we activate the mode ('''M-x persp-mode''') we can carry on our work. Then we can create another group/perspective/workspace ('''persp-switch''' and entering a new name, '''C-x x s''' by default). Once we are in a new persp, the usual commands that list buffers will only list buffers from that one, not from the other perspectives. &lt;br /&gt;
&lt;br /&gt;
== persp-projectile ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/bbatsov/persp-projectile persp-projectile] (in MELPA) is a minor mode that provides the ability to manage different workspaces. If you need to open many projects at the same time, perspective can help you keep each project related buffers and windows setting separate from other projects, similar to multiple spaces on MacOS, which allows you to focus on the files of the current active project.&lt;br /&gt;
&lt;br /&gt;
It is based on '''perspective-el''' listed above.&lt;br /&gt;
&lt;br /&gt;
= Tabs =&lt;br /&gt;
&lt;br /&gt;
Tabs may be a concept that do not translate very well in Emacs. We often advise to loose this habit and embrace the Emacs way (i.e., everything else listed in that page !). But you can emulate some tabs features of course. &lt;br /&gt;
&lt;br /&gt;
== elscreen ==&lt;br /&gt;
&lt;br /&gt;
[[elscreen]] (in MELPA) is a tabbed window session manager modeled after GNU screen. We can create tabs manually. With extensions, we can choose to isolate a tab's buffers from the others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Evil-mode, or switching buffers à la Vim =&lt;br /&gt;
&lt;br /&gt;
That's possible with [[evil]]. Just do &amp;lt;code&amp;gt;:ls&amp;lt;/code&amp;gt; and voilà :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
== Keep a certain kind of buffers in a window: Purpose ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/bmag/emacs-purpose emacs-purpose] (&amp;quot;window-purpose&amp;quot; on MELPA) provides a new window management system for Emacs, which gives you a better control over where Emacs displays buffers.&lt;br /&gt;
&lt;br /&gt;
With Purpose, each buffer has a configurable &amp;quot;purpose&amp;quot; and each window can interactively be dedicated to a certain &amp;quot;purpose&amp;quot;. When you dedicate a window (C-c , d), Purpose makes sure that this window will be used only for buffers which have the same purpose as the buffer that is currently displayed in that window.&lt;br /&gt;
&lt;br /&gt;
== Frames only mode, better fit with tiling window managers ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/davidshepherd7/frames-only-mode frames-only-mode] makes emacs play nicely with tiling window managers by setting it up to use frames rather than windows.&lt;br /&gt;
&lt;br /&gt;
== Buffer navigation (Category) ==&lt;br /&gt;
&lt;br /&gt;
[http://wikemacs.org/wiki/Category:Buffer_Navigation Buffer Navigation]&lt;br /&gt;
&lt;br /&gt;
== Session Management ==&lt;br /&gt;
&lt;br /&gt;
[[Session_management]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Buffer Management]]&lt;br /&gt;
[[Category:Buffers]]&lt;br /&gt;
[[Category:Third Party Package]]&lt;br /&gt;
[[Category:Workflow]]&lt;br /&gt;
[[Category:Intermediate]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Notmuch&amp;diff=50976</id>
		<title>Notmuch</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Notmuch&amp;diff=50976"/>
		<updated>2024-02-24T22:04:35Z</updated>

		<summary type="html">&lt;p&gt;Elvince: create notmuch mail page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=notmuch&lt;br /&gt;
|description=Email client&lt;br /&gt;
|author=&lt;br /&gt;
|maintainer=&lt;br /&gt;
|screenshots=https://notmuchmail.org/screenshots/&lt;br /&gt;
|manual=http://https://notmuchmail.org/notmuch-emacs/&lt;br /&gt;
|source=https://git.notmuchmail.org/git/notmuch&lt;br /&gt;
|in_emacs=no&lt;br /&gt;
|Development status=active&lt;br /&gt;
|website=https://notmuchmail.org/&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://notmuchmail.org/ notmuch] is a &amp;quot;fast, global-search and tag-based email system to use within your text editor or in a terminal&amp;quot; that comes with an Emacs interface.&lt;br /&gt;
&lt;br /&gt;
[[File:Notmuch-tree-split.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Third Party Package]]&lt;br /&gt;
[[Category:Email]]&lt;br /&gt;
[[Category:MUA]]&lt;br /&gt;
[[Category:Mail Client]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Notmuch-tree-split.png&amp;diff=50975</id>
		<title>File:Notmuch-tree-split.png</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Notmuch-tree-split.png&amp;diff=50975"/>
		<updated>2024-02-24T22:01:21Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Notmuch Emacs interface, split tree view.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Notmuch Emacs interface, split tree view.&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50974</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50974"/>
		<updated>2024-02-22T17:30:20Z</updated>

		<summary type="html">&lt;p&gt;Elvince: add listen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Mpg123 =&lt;br /&gt;
&lt;br /&gt;
'''mpg123''' is a package written by HiroseYuuji for playing .mp3 and .ogg files with the mpg123 and ogg123 programs. It can:&lt;br /&gt;
&lt;br /&gt;
* play local music&lt;br /&gt;
* create and save playlists&lt;br /&gt;
* play randomly&lt;br /&gt;
* repeat songs&lt;br /&gt;
* loop inside songs&lt;br /&gt;
&lt;br /&gt;
It is maybe the simplest player for Emacs you will find.&lt;br /&gt;
&lt;br /&gt;
With extensions you can also:&lt;br /&gt;
&lt;br /&gt;
* control the player from outside&lt;br /&gt;
* edit ID3 tags&lt;br /&gt;
* drag and drop music files from Dired&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== package.el ===&lt;br /&gt;
&lt;br /&gt;
'''mpg123.el''' is on [[MELPA]].&lt;br /&gt;
&lt;br /&gt;
Its latest version (2023-05 at the time of writing) is for Emacs 28. You might experience a freeze of the interface in Emacs 27 when playing.&lt;br /&gt;
&lt;br /&gt;
=== Debian system ===&lt;br /&gt;
&lt;br /&gt;
You'd be better off using package.el, but you will also find a (historical) Debian package.&lt;br /&gt;
&lt;br /&gt;
Install the [http://packages.debian.org/search?keywords=mpg123-el  mpg123-el package] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123-el&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs, and you can start using it.&lt;br /&gt;
&lt;br /&gt;
=== Dependency for all systems ===&lt;br /&gt;
&lt;br /&gt;
Install the mpg123 and ogg123 programs with your system's package manager :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123 ogg123&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual install ===&lt;br /&gt;
&lt;br /&gt;
The sources are on [http://www.gentei.org/~yuuji/software/mpg123el/ mpg123.el's git repository]. You can save them in ''~/.emacs.d/mpg123.el''.&lt;br /&gt;
&lt;br /&gt;
Check you have the following in your [[Init_File]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs or {{Command|eval-current-buffer}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
{{Command|mpg123}} &lt;br /&gt;
: start mpg123, choose a directory or a mp3/ogg file and start listening. The buffer shows a complete list of commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1 --:--/--:--	 Hurricane by Kyuss&lt;br /&gt;
0%--------------------------------------50%-------------------------------------100%&lt;br /&gt;
Volume: [N/A] Repeat: [--] Loop: [--]&lt;br /&gt;
mpg123:&lt;br /&gt;
W	Show the real filename&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
SPC	Play or pause&lt;br /&gt;
RET	Play&lt;br /&gt;
m	Mark position (when playing)&lt;br /&gt;
r	Restart from marked position&lt;br /&gt;
w	Where is the marked position&lt;br /&gt;
&amp;lt;	&amp;lt;&amp;lt;&lt;br /&gt;
&amp;gt;	&amp;gt;&amp;gt;&lt;br /&gt;
f	Forward 1 sec&lt;br /&gt;
b	Backward 1 sec&lt;br /&gt;
F	Forward 10 sec&lt;br /&gt;
B	Backard 10 sec&lt;br /&gt;
n	Move to next line&lt;br /&gt;
p	Move to previous line&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
-	Volume down&lt;br /&gt;
+	Volume up&lt;br /&gt;
o	Open other directory or playlist file&lt;br /&gt;
a	Add other directory or playlist file&lt;br /&gt;
S	Save current playlist to a file&lt;br /&gt;
i	Increase repetition count&lt;br /&gt;
d	Decrease repetition count (-1 for infinity)&lt;br /&gt;
L	Increase current loop count&lt;br /&gt;
l	Decrease current loop count. Also toggles between 0(no loop) and -1(always loop)&lt;br /&gt;
s	Shuffle music list&lt;br /&gt;
D	Delete music file&lt;br /&gt;
.	Display playing position indicator&lt;br /&gt;
k	Kill music line and push onto stack&lt;br /&gt;
y	Yank music line from stack&lt;br /&gt;
I	Intro-quiz mode ON/OFF (Stop at marked position)&lt;br /&gt;
q	Quit&lt;br /&gt;
Q	Quit without query&lt;br /&gt;
&amp;lt;down-mouse-2&amp;gt;	Select a music directly on the mouse cursor&lt;br /&gt;
0..9	Digit argument (ex. 50V increase volume by 50steps)&lt;br /&gt;
----&lt;br /&gt;
The delimiter line &amp;quot;-------&amp;quot; is the indicator of currently playing position.&lt;br /&gt;
You may see the slider on the line running from left to right while the&lt;br /&gt;
music's going ahead.  If you hit RET or &amp;lt;down-mouse-2&amp;gt; on the indicator line,&lt;br /&gt;
the music will immediately move to that position.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Save this file somewhere, like in .emacs.d/my-plugins:&lt;br /&gt;
http://www.gentei.org/~yuuji/software/mpg123el/mpg123-remote.el &lt;br /&gt;
&lt;br /&gt;
add in your .emacs:&lt;br /&gt;
     (load &amp;quot;path/to/mpg123-remote&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
restart emacs. To control mpg123 from the outside, you have to start a server, for example with M-x server-start. Now you have access to a few functions that you can call this way:&lt;br /&gt;
&lt;br /&gt;
    emacsclient -e '(remote-mpg123-pause)' ; next and prev are also available&lt;br /&gt;
&lt;br /&gt;
define a global shorcut with your desktop manager and you're done !&lt;br /&gt;
&lt;br /&gt;
sources : http://www.gentei.org/~yuuji/software/mpg123el/&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
= Listen =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alphapapa/listen.el Listen.el] is a minimalist music player.&lt;br /&gt;
&lt;br /&gt;
Requires: Emacs 29.1.&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=SLIME&amp;diff=50973</id>
		<title>SLIME</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=SLIME&amp;diff=50973"/>
		<updated>2024-02-22T10:02:06Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Supported implementations */ rm old ones&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''SLIME''', the '''Superior Lisp Interaction Mode for Emacs''', is an [[Emacs]] mode for developing [[Common Lisp]] applications. SLIME originates in an Emacs mode called SLIM written by Eric Marsden and developed as an open-source project by Luke Gorrie and Helmut Eller. Over 100 Lisp developers have contributed code to SLIME since the project was started in 2003. SLIME uses a backend called SWANK, offering a &amp;quot;language server&amp;quot; experience, with the added benefit that the backend is loaded into your running Common Lisp image.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* it provides a REPL which is hooked to the running image, directly in Emacs,&lt;br /&gt;
* it integrates the Common Lisp debugger with an Emacs interface&lt;br /&gt;
* it provides symbol completion,&lt;br /&gt;
* code evaluation, compilation, macroexpansion&lt;br /&gt;
* cross-referencing,&lt;br /&gt;
* breaking, stepping, tracing,&lt;br /&gt;
* go to definition,&lt;br /&gt;
* online documentation,&lt;br /&gt;
* fuzzy searching functions and symbols, system names, documentation,&lt;br /&gt;
* an interactive object inspector,&lt;br /&gt;
* it supports every common Common Lisp implementation,&lt;br /&gt;
* multiple connections and multiple listener buffers (mrepl)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Supported implementations ==&lt;br /&gt;
&lt;br /&gt;
SLIME works with the following active Common Lisp implementations:&lt;br /&gt;
&lt;br /&gt;
* [[Steel Bank Common Lisp]] (SBCL)&lt;br /&gt;
* [[Clozure CL]] &lt;br /&gt;
* [[LispWorks]]&lt;br /&gt;
* [[Allegro Common Lisp]]&lt;br /&gt;
* [[CLISP]]&lt;br /&gt;
* [[Embeddable Common Lisp]] (ECL)&lt;br /&gt;
* [[Armed Bear Common Lisp]] (ABCL)&lt;br /&gt;
&lt;br /&gt;
Some implementations of other programming languages are using SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[Clojure]]&lt;br /&gt;
* [[Swank-js]] for JavaScript&lt;br /&gt;
&lt;br /&gt;
There are also clones of SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[SOLID]] for [[Objective Caml]]&lt;br /&gt;
&lt;br /&gt;
And forks:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/capitaomorte/sly/blob/master/README.md#fork SLY]&lt;br /&gt;
&lt;br /&gt;
== Get with Portacle, portable and multiplatform  ==&lt;br /&gt;
&lt;br /&gt;
[https://shinmera.github.io/portacle/ Portacle] is a portable and multiplatform development environment for Common Lisp. It's the easiest way to get SBCL + Emacs + Slime + Quicklisp + Git.&lt;br /&gt;
&lt;br /&gt;
== Install with package.el ==&lt;br /&gt;
&lt;br /&gt;
Slime is in GNU ELPA. You can install it with '''M-x package-install RET slime RET'''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's a few useful Emacs Lisp code snippets&lt;br /&gt;
for your SLIME configuration within your {{EmacsConfigFile}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
;; a list of alternative Common Lisp implementations that can be&lt;br /&gt;
;; used with SLIME. Note that their presence render&lt;br /&gt;
;; inferior-lisp-program useless. This variable holds a list of&lt;br /&gt;
;; programs and if you invoke SLIME with any prefix argument,&lt;br /&gt;
;; like M-- M-x slime or C-u M-x slime, you can select a program&lt;br /&gt;
;; from that list.&lt;br /&gt;
(setq slime-lisp-implementations&lt;br /&gt;
      '((ccl (&amp;quot;ccl&amp;quot;))&lt;br /&gt;
        (clisp (&amp;quot;clisp&amp;quot; &amp;quot;-q&amp;quot;))&lt;br /&gt;
        (sbcl (&amp;quot;sbcl&amp;quot; &amp;quot;--noinform&amp;quot;) :coding-system utf-8-unix)))&lt;br /&gt;
&lt;br /&gt;
;; select the default value from slime-lisp-implementations&lt;br /&gt;
(if (eq system-type 'darwin)&lt;br /&gt;
    ;; default to Clozure CL on OS X&lt;br /&gt;
    (setq slime-default-lisp 'ccl)&lt;br /&gt;
  ;; default to SBCL on Linux and Windows&lt;br /&gt;
  (setq slime-default-lisp 'sbcl))&lt;br /&gt;
&lt;br /&gt;
;; If you use Prelude:&lt;br /&gt;
; (add-hook 'lisp-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook)))&lt;br /&gt;
; (add-hook 'slime-repl-mode-hook (lambda () (run-hooks 'prelude-interactive-lisp-coding-hook)))&lt;br /&gt;
&lt;br /&gt;
;; start slime automatically when we open a lisp file&lt;br /&gt;
(defun prelude-start-slime ()&lt;br /&gt;
  (unless (slime-connected-p)&lt;br /&gt;
    (save-excursion (slime))))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-mode-hook 'prelude-start-slime)&lt;br /&gt;
&lt;br /&gt;
;; Stop SLIME's REPL from grabbing DEL,&lt;br /&gt;
;; which is annoying when backspacing over a '('&lt;br /&gt;
(defun prelude-override-slime-repl-bindings-with-paredit ()&lt;br /&gt;
  (define-key slime-repl-mode-map&lt;br /&gt;
    (read-kbd-macro paredit-backward-delete-key) nil))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-repl-mode-hook 'prelude-override-slime-repl-bindings-with-paredit)&lt;br /&gt;
&lt;br /&gt;
(eval-after-load &amp;quot;slime&amp;quot;&lt;br /&gt;
  '(progn&lt;br /&gt;
     (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol&lt;br /&gt;
           slime-fuzzy-completion-in-place t&lt;br /&gt;
           slime-enable-evaluate-in-emacs t&lt;br /&gt;
           slime-autodoc-use-multiline-p t)&lt;br /&gt;
&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;TAB&amp;quot;) 'slime-indent-and-complete-symbol)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c i&amp;quot;) 'slime-inspect)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c C-s&amp;quot;) 'slime-selector)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slime history with helm ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/emacs-helm/helm-slime helm-slime] provides a more interactive repl history with [[Helm]]. It is not in a package repository, you have to download it and load its file (&amp;lt;code&amp;gt;M-x load-file&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Nrepl.el]] for Clojure&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://common-lisp.net/project/slime/ SLIME project page]&lt;br /&gt;
* [https://lispcookbook.github.io/cl-cookbook/emacs-ide.html Emacs and SLIME tutorial on the Common Lisp Cookbook]&lt;br /&gt;
* [http://osdir.com/ml/lisp.cmucl.devel/2003-08/msg00327.html The birth of SLIME on the cmucl-imp mailing list (August 2003)]&lt;br /&gt;
* [http://common-lisp.net/~trittweiler/talks/slime-talk-2008.pdf SLIME presentation by Tobias Rittweiler (2008)]&lt;br /&gt;
* [http://wingolog.org/archives/2006/01/02/slime Review of SLIME by Andy Wingo]&lt;br /&gt;
* [http://bc.tech.coop/blog/070120.html Bill Clementson's &amp;quot;Slime Tips and Techniques&amp;quot; - Part 1] (See also [http://bc.tech.coop/blog/070121.html Part 2], [http://bc.tech.coop/blog/070122.html Part 3], [http://bc.tech.coop/blog/070129.html Part 4], [http://bc.tech.coop/blog/070208.html Part 5], [http://bc.tech.coop/blog/070424.html Part 6], and [http://bc.tech.coop/blog/070425.html Part 7])&lt;br /&gt;
* [http://bc.tech.coop/blog/070927.html Bill Clementson's &amp;quot;SLIME Refactoring&amp;quot;] describes how to set up SLIME&lt;br /&gt;
* [http://bc.tech.coop/blog/070125.html Bill Clementson's &amp;quot;Emacs Keymaps and the SLIME scratch buffer]&lt;br /&gt;
* [http://bc.tech.coop/blog/050501.html Bill Clementson's &amp;quot;CL, Music and SLIME Tutorials&amp;quot;] contains a good SLIME tutorial&lt;br /&gt;
* [http://www.bese.it/~segv/mb-slime.el Marco Baringer's (SLIME guru) SLIME setup]&lt;br /&gt;
* [http://www.cliki.net/Editing%20Lisp%20Code%20with%20Emacs Marco Baringer's &amp;quot;Editing Lisp Code with Emacs&amp;quot;]&lt;br /&gt;
* [http://common-lisp.net/pipermail/slime-devel/ The slime-devel Archives]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisp]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Popular Package]]&lt;br /&gt;
[[Category:Third Party Package]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=SLIME&amp;diff=50972</id>
		<title>SLIME</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=SLIME&amp;diff=50972"/>
		<updated>2024-02-22T09:45:00Z</updated>

		<summary type="html">&lt;p&gt;Elvince: features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''SLIME''', the '''Superior Lisp Interaction Mode for Emacs''', is an [[Emacs]] mode for developing [[Common Lisp]] applications. SLIME originates in an Emacs mode called SLIM written by Eric Marsden and developed as an open-source project by Luke Gorrie and Helmut Eller. Over 100 Lisp developers have contributed code to SLIME since the project was started in 2003. SLIME uses a backend called SWANK, offering a &amp;quot;language server&amp;quot; experience, with the added benefit that the backend is loaded into your running Common Lisp image.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* it provides a REPL which is hooked to the running image, directly in Emacs,&lt;br /&gt;
* it integrates the Common Lisp debugger with an Emacs interface&lt;br /&gt;
* it provides symbol completion,&lt;br /&gt;
* code evaluation, compilation, macroexpansion&lt;br /&gt;
* cross-referencing,&lt;br /&gt;
* breaking, stepping, tracing,&lt;br /&gt;
* go to definition,&lt;br /&gt;
* online documentation,&lt;br /&gt;
* fuzzy searching functions and symbols, system names, documentation,&lt;br /&gt;
* an interactive object inspector,&lt;br /&gt;
* it supports every common Common Lisp implementation,&lt;br /&gt;
* multiple connections and multiple listener buffers (mrepl)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Supported implementations ==&lt;br /&gt;
&lt;br /&gt;
SLIME works with the following Common Lisp implementations:&lt;br /&gt;
&lt;br /&gt;
* [[CMU Common Lisp]] (CMUCL)&lt;br /&gt;
* [[Scieneer Common Lisp]]&lt;br /&gt;
* [[Steel Bank Common Lisp]] (SBCL)&lt;br /&gt;
* [[Clozure CL]] (former OpenMCL)&lt;br /&gt;
* [[LispWorks]]&lt;br /&gt;
* [[Allegro Common Lisp]]&lt;br /&gt;
* [[CLISP]]&lt;br /&gt;
* [[Embeddable Common Lisp]] (ECL)&lt;br /&gt;
* [[Armed Bear Common Lisp]] (ABCL)&lt;br /&gt;
&lt;br /&gt;
Some implementations of other programming languages are using SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[Clojure]]&lt;br /&gt;
* [[Swank-js]] for JavaScript&lt;br /&gt;
&lt;br /&gt;
There are also clones of SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[SOLID]] for [[Objective Caml]]&lt;br /&gt;
&lt;br /&gt;
And forks:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/capitaomorte/sly/blob/master/README.md#fork SLY]&lt;br /&gt;
&lt;br /&gt;
== Get with Portacle, portable and multiplatform  ==&lt;br /&gt;
&lt;br /&gt;
[https://shinmera.github.io/portacle/ Portacle] is a portable and multiplatform development environment for Common Lisp. It's the easiest way to get SBCL + Emacs + Slime + Quicklisp + Git.&lt;br /&gt;
&lt;br /&gt;
== Install with package.el ==&lt;br /&gt;
&lt;br /&gt;
Slime is in GNU ELPA. You can install it with '''M-x package-install RET slime RET'''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's a few useful Emacs Lisp code snippets&lt;br /&gt;
for your SLIME configuration within your {{EmacsConfigFile}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
;; a list of alternative Common Lisp implementations that can be&lt;br /&gt;
;; used with SLIME. Note that their presence render&lt;br /&gt;
;; inferior-lisp-program useless. This variable holds a list of&lt;br /&gt;
;; programs and if you invoke SLIME with any prefix argument,&lt;br /&gt;
;; like M-- M-x slime or C-u M-x slime, you can select a program&lt;br /&gt;
;; from that list.&lt;br /&gt;
(setq slime-lisp-implementations&lt;br /&gt;
      '((ccl (&amp;quot;ccl&amp;quot;))&lt;br /&gt;
        (clisp (&amp;quot;clisp&amp;quot; &amp;quot;-q&amp;quot;))&lt;br /&gt;
        (sbcl (&amp;quot;sbcl&amp;quot; &amp;quot;--noinform&amp;quot;) :coding-system utf-8-unix)))&lt;br /&gt;
&lt;br /&gt;
;; select the default value from slime-lisp-implementations&lt;br /&gt;
(if (eq system-type 'darwin)&lt;br /&gt;
    ;; default to Clozure CL on OS X&lt;br /&gt;
    (setq slime-default-lisp 'ccl)&lt;br /&gt;
  ;; default to SBCL on Linux and Windows&lt;br /&gt;
  (setq slime-default-lisp 'sbcl))&lt;br /&gt;
&lt;br /&gt;
;; If you use Prelude:&lt;br /&gt;
; (add-hook 'lisp-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook)))&lt;br /&gt;
; (add-hook 'slime-repl-mode-hook (lambda () (run-hooks 'prelude-interactive-lisp-coding-hook)))&lt;br /&gt;
&lt;br /&gt;
;; start slime automatically when we open a lisp file&lt;br /&gt;
(defun prelude-start-slime ()&lt;br /&gt;
  (unless (slime-connected-p)&lt;br /&gt;
    (save-excursion (slime))))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-mode-hook 'prelude-start-slime)&lt;br /&gt;
&lt;br /&gt;
;; Stop SLIME's REPL from grabbing DEL,&lt;br /&gt;
;; which is annoying when backspacing over a '('&lt;br /&gt;
(defun prelude-override-slime-repl-bindings-with-paredit ()&lt;br /&gt;
  (define-key slime-repl-mode-map&lt;br /&gt;
    (read-kbd-macro paredit-backward-delete-key) nil))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-repl-mode-hook 'prelude-override-slime-repl-bindings-with-paredit)&lt;br /&gt;
&lt;br /&gt;
(eval-after-load &amp;quot;slime&amp;quot;&lt;br /&gt;
  '(progn&lt;br /&gt;
     (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol&lt;br /&gt;
           slime-fuzzy-completion-in-place t&lt;br /&gt;
           slime-enable-evaluate-in-emacs t&lt;br /&gt;
           slime-autodoc-use-multiline-p t)&lt;br /&gt;
&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;TAB&amp;quot;) 'slime-indent-and-complete-symbol)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c i&amp;quot;) 'slime-inspect)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c C-s&amp;quot;) 'slime-selector)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slime history with helm ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/emacs-helm/helm-slime helm-slime] provides a more interactive repl history with [[Helm]]. It is not in a package repository, you have to download it and load its file (&amp;lt;code&amp;gt;M-x load-file&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Nrepl.el]] for Clojure&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://common-lisp.net/project/slime/ SLIME project page]&lt;br /&gt;
* [https://lispcookbook.github.io/cl-cookbook/emacs-ide.html Emacs and SLIME tutorial on the Common Lisp Cookbook]&lt;br /&gt;
* [http://osdir.com/ml/lisp.cmucl.devel/2003-08/msg00327.html The birth of SLIME on the cmucl-imp mailing list (August 2003)]&lt;br /&gt;
* [http://common-lisp.net/~trittweiler/talks/slime-talk-2008.pdf SLIME presentation by Tobias Rittweiler (2008)]&lt;br /&gt;
* [http://wingolog.org/archives/2006/01/02/slime Review of SLIME by Andy Wingo]&lt;br /&gt;
* [http://bc.tech.coop/blog/070120.html Bill Clementson's &amp;quot;Slime Tips and Techniques&amp;quot; - Part 1] (See also [http://bc.tech.coop/blog/070121.html Part 2], [http://bc.tech.coop/blog/070122.html Part 3], [http://bc.tech.coop/blog/070129.html Part 4], [http://bc.tech.coop/blog/070208.html Part 5], [http://bc.tech.coop/blog/070424.html Part 6], and [http://bc.tech.coop/blog/070425.html Part 7])&lt;br /&gt;
* [http://bc.tech.coop/blog/070927.html Bill Clementson's &amp;quot;SLIME Refactoring&amp;quot;] describes how to set up SLIME&lt;br /&gt;
* [http://bc.tech.coop/blog/070125.html Bill Clementson's &amp;quot;Emacs Keymaps and the SLIME scratch buffer]&lt;br /&gt;
* [http://bc.tech.coop/blog/050501.html Bill Clementson's &amp;quot;CL, Music and SLIME Tutorials&amp;quot;] contains a good SLIME tutorial&lt;br /&gt;
* [http://www.bese.it/~segv/mb-slime.el Marco Baringer's (SLIME guru) SLIME setup]&lt;br /&gt;
* [http://www.cliki.net/Editing%20Lisp%20Code%20with%20Emacs Marco Baringer's &amp;quot;Editing Lisp Code with Emacs&amp;quot;]&lt;br /&gt;
* [http://common-lisp.net/pipermail/slime-devel/ The slime-devel Archives]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisp]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Popular Package]]&lt;br /&gt;
[[Category:Third Party Package]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=SLIME&amp;diff=50971</id>
		<title>SLIME</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=SLIME&amp;diff=50971"/>
		<updated>2024-02-22T09:41:16Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Configuration */ rm cmucl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''SLIME''', the '''Superior Lisp Interaction Mode for Emacs''', is an [[Emacs]] mode for developing [[Common Lisp]] applications. SLIME originates in an Emacs mode called SLIM written by Eric Marsden and developed as an open-source project by Luke Gorrie and Helmut Eller. Over 100 Lisp developers have contributed code to SLIME since the project was started in 2003. SLIME uses a backend called SWANK that is loaded into Common Lisp.&lt;br /&gt;
&lt;br /&gt;
== Supported implementations ==&lt;br /&gt;
&lt;br /&gt;
SLIME works with the following Common Lisp implementations:&lt;br /&gt;
&lt;br /&gt;
* [[CMU Common Lisp]] (CMUCL)&lt;br /&gt;
* [[Scieneer Common Lisp]]&lt;br /&gt;
* [[Steel Bank Common Lisp]] (SBCL)&lt;br /&gt;
* [[Clozure CL]] (former OpenMCL)&lt;br /&gt;
* [[LispWorks]]&lt;br /&gt;
* [[Allegro Common Lisp]]&lt;br /&gt;
* [[CLISP]]&lt;br /&gt;
* [[Embeddable Common Lisp]] (ECL)&lt;br /&gt;
* [[Armed Bear Common Lisp]] (ABCL)&lt;br /&gt;
&lt;br /&gt;
Some implementations of other programming languages are using SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[Clojure]]&lt;br /&gt;
* [[Swank-js]] for JavaScript&lt;br /&gt;
&lt;br /&gt;
There are also clones of SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[SOLID]] for [[Objective Caml]]&lt;br /&gt;
&lt;br /&gt;
And forks:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/capitaomorte/sly/blob/master/README.md#fork SLY]&lt;br /&gt;
&lt;br /&gt;
== Get with Portacle, portable and multiplatform  ==&lt;br /&gt;
&lt;br /&gt;
[https://shinmera.github.io/portacle/ Portacle] is a portable and multiplatform development environment for Common Lisp. It's the easiest way to get SBCL + Emacs + Slime + Quicklisp + Git.&lt;br /&gt;
&lt;br /&gt;
== Install with package.el ==&lt;br /&gt;
&lt;br /&gt;
Slime is in GNU ELPA. You can install it with '''M-x package-install RET slime RET'''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's a few useful Emacs Lisp code snippets&lt;br /&gt;
for your SLIME configuration within your {{EmacsConfigFile}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
;; a list of alternative Common Lisp implementations that can be&lt;br /&gt;
;; used with SLIME. Note that their presence render&lt;br /&gt;
;; inferior-lisp-program useless. This variable holds a list of&lt;br /&gt;
;; programs and if you invoke SLIME with any prefix argument,&lt;br /&gt;
;; like M-- M-x slime or C-u M-x slime, you can select a program&lt;br /&gt;
;; from that list.&lt;br /&gt;
(setq slime-lisp-implementations&lt;br /&gt;
      '((ccl (&amp;quot;ccl&amp;quot;))&lt;br /&gt;
        (clisp (&amp;quot;clisp&amp;quot; &amp;quot;-q&amp;quot;))&lt;br /&gt;
        (sbcl (&amp;quot;sbcl&amp;quot; &amp;quot;--noinform&amp;quot;) :coding-system utf-8-unix)))&lt;br /&gt;
&lt;br /&gt;
;; select the default value from slime-lisp-implementations&lt;br /&gt;
(if (eq system-type 'darwin)&lt;br /&gt;
    ;; default to Clozure CL on OS X&lt;br /&gt;
    (setq slime-default-lisp 'ccl)&lt;br /&gt;
  ;; default to SBCL on Linux and Windows&lt;br /&gt;
  (setq slime-default-lisp 'sbcl))&lt;br /&gt;
&lt;br /&gt;
;; If you use Prelude:&lt;br /&gt;
; (add-hook 'lisp-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook)))&lt;br /&gt;
; (add-hook 'slime-repl-mode-hook (lambda () (run-hooks 'prelude-interactive-lisp-coding-hook)))&lt;br /&gt;
&lt;br /&gt;
;; start slime automatically when we open a lisp file&lt;br /&gt;
(defun prelude-start-slime ()&lt;br /&gt;
  (unless (slime-connected-p)&lt;br /&gt;
    (save-excursion (slime))))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-mode-hook 'prelude-start-slime)&lt;br /&gt;
&lt;br /&gt;
;; Stop SLIME's REPL from grabbing DEL,&lt;br /&gt;
;; which is annoying when backspacing over a '('&lt;br /&gt;
(defun prelude-override-slime-repl-bindings-with-paredit ()&lt;br /&gt;
  (define-key slime-repl-mode-map&lt;br /&gt;
    (read-kbd-macro paredit-backward-delete-key) nil))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-repl-mode-hook 'prelude-override-slime-repl-bindings-with-paredit)&lt;br /&gt;
&lt;br /&gt;
(eval-after-load &amp;quot;slime&amp;quot;&lt;br /&gt;
  '(progn&lt;br /&gt;
     (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol&lt;br /&gt;
           slime-fuzzy-completion-in-place t&lt;br /&gt;
           slime-enable-evaluate-in-emacs t&lt;br /&gt;
           slime-autodoc-use-multiline-p t)&lt;br /&gt;
&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;TAB&amp;quot;) 'slime-indent-and-complete-symbol)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c i&amp;quot;) 'slime-inspect)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c C-s&amp;quot;) 'slime-selector)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slime history with helm ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/emacs-helm/helm-slime helm-slime] provides a more interactive repl history with [[Helm]]. It is not in a package repository, you have to download it and load its file (&amp;lt;code&amp;gt;M-x load-file&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Nrepl.el]] for Clojure&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://common-lisp.net/project/slime/ SLIME project page]&lt;br /&gt;
* [https://lispcookbook.github.io/cl-cookbook/emacs-ide.html Emacs and SLIME tutorial on the Common Lisp Cookbook]&lt;br /&gt;
* [http://osdir.com/ml/lisp.cmucl.devel/2003-08/msg00327.html The birth of SLIME on the cmucl-imp mailing list (August 2003)]&lt;br /&gt;
* [http://common-lisp.net/~trittweiler/talks/slime-talk-2008.pdf SLIME presentation by Tobias Rittweiler (2008)]&lt;br /&gt;
* [http://wingolog.org/archives/2006/01/02/slime Review of SLIME by Andy Wingo]&lt;br /&gt;
* [http://bc.tech.coop/blog/070120.html Bill Clementson's &amp;quot;Slime Tips and Techniques&amp;quot; - Part 1] (See also [http://bc.tech.coop/blog/070121.html Part 2], [http://bc.tech.coop/blog/070122.html Part 3], [http://bc.tech.coop/blog/070129.html Part 4], [http://bc.tech.coop/blog/070208.html Part 5], [http://bc.tech.coop/blog/070424.html Part 6], and [http://bc.tech.coop/blog/070425.html Part 7])&lt;br /&gt;
* [http://bc.tech.coop/blog/070927.html Bill Clementson's &amp;quot;SLIME Refactoring&amp;quot;] describes how to set up SLIME&lt;br /&gt;
* [http://bc.tech.coop/blog/070125.html Bill Clementson's &amp;quot;Emacs Keymaps and the SLIME scratch buffer]&lt;br /&gt;
* [http://bc.tech.coop/blog/050501.html Bill Clementson's &amp;quot;CL, Music and SLIME Tutorials&amp;quot;] contains a good SLIME tutorial&lt;br /&gt;
* [http://www.bese.it/~segv/mb-slime.el Marco Baringer's (SLIME guru) SLIME setup]&lt;br /&gt;
* [http://www.cliki.net/Editing%20Lisp%20Code%20with%20Emacs Marco Baringer's &amp;quot;Editing Lisp Code with Emacs&amp;quot;]&lt;br /&gt;
* [http://common-lisp.net/pipermail/slime-devel/ The slime-devel Archives]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisp]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Popular Package]]&lt;br /&gt;
[[Category:Third Party Package]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=SLIME&amp;diff=50970</id>
		<title>SLIME</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=SLIME&amp;diff=50970"/>
		<updated>2024-02-22T09:39:36Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* External links */ cookbook&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''SLIME''', the '''Superior Lisp Interaction Mode for Emacs''', is an [[Emacs]] mode for developing [[Common Lisp]] applications. SLIME originates in an Emacs mode called SLIM written by Eric Marsden and developed as an open-source project by Luke Gorrie and Helmut Eller. Over 100 Lisp developers have contributed code to SLIME since the project was started in 2003. SLIME uses a backend called SWANK that is loaded into Common Lisp.&lt;br /&gt;
&lt;br /&gt;
== Supported implementations ==&lt;br /&gt;
&lt;br /&gt;
SLIME works with the following Common Lisp implementations:&lt;br /&gt;
&lt;br /&gt;
* [[CMU Common Lisp]] (CMUCL)&lt;br /&gt;
* [[Scieneer Common Lisp]]&lt;br /&gt;
* [[Steel Bank Common Lisp]] (SBCL)&lt;br /&gt;
* [[Clozure CL]] (former OpenMCL)&lt;br /&gt;
* [[LispWorks]]&lt;br /&gt;
* [[Allegro Common Lisp]]&lt;br /&gt;
* [[CLISP]]&lt;br /&gt;
* [[Embeddable Common Lisp]] (ECL)&lt;br /&gt;
* [[Armed Bear Common Lisp]] (ABCL)&lt;br /&gt;
&lt;br /&gt;
Some implementations of other programming languages are using SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[Clojure]]&lt;br /&gt;
* [[Swank-js]] for JavaScript&lt;br /&gt;
&lt;br /&gt;
There are also clones of SLIME:&lt;br /&gt;
&lt;br /&gt;
* [[SOLID]] for [[Objective Caml]]&lt;br /&gt;
&lt;br /&gt;
And forks:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/capitaomorte/sly/blob/master/README.md#fork SLY]&lt;br /&gt;
&lt;br /&gt;
== Get with Portacle, portable and multiplatform  ==&lt;br /&gt;
&lt;br /&gt;
[https://shinmera.github.io/portacle/ Portacle] is a portable and multiplatform development environment for Common Lisp. It's the easiest way to get SBCL + Emacs + Slime + Quicklisp + Git.&lt;br /&gt;
&lt;br /&gt;
== Install with package.el ==&lt;br /&gt;
&lt;br /&gt;
Slime is in GNU ELPA. You can install it with '''M-x package-install RET slime RET'''.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's a few useful Emacs Lisp code snippets&lt;br /&gt;
for your SLIME configuration within your {{EmacsConfigFile}}:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
;; a list of alternative Common Lisp implementations that can be&lt;br /&gt;
;; used with SLIME. Note that their presence render&lt;br /&gt;
;; inferior-lisp-program useless. This variable holds a list of&lt;br /&gt;
;; programs and if you invoke SLIME with any prefix argument,&lt;br /&gt;
;; like M-- M-x slime or C-u M-x slime, you can select a program&lt;br /&gt;
;; from that list.&lt;br /&gt;
(setq slime-lisp-implementations&lt;br /&gt;
      '((ccl (&amp;quot;ccl&amp;quot;))&lt;br /&gt;
        (clisp (&amp;quot;clisp&amp;quot; &amp;quot;-q&amp;quot;))&lt;br /&gt;
        (cmucl (&amp;quot;cmucl&amp;quot; &amp;quot;-quiet&amp;quot;))&lt;br /&gt;
        (sbcl (&amp;quot;sbcl&amp;quot; &amp;quot;--noinform&amp;quot;) :coding-system utf-8-unix)))&lt;br /&gt;
&lt;br /&gt;
;; select the default value from slime-lisp-implementations&lt;br /&gt;
(if (eq system-type 'darwin)&lt;br /&gt;
    ;; default to Clozure CL on OS X&lt;br /&gt;
    (setq slime-default-lisp 'ccl)&lt;br /&gt;
  ;; default to SBCL on Linux and Windows&lt;br /&gt;
  (setq slime-default-lisp 'sbcl))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'lisp-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook)))&lt;br /&gt;
(add-hook 'slime-repl-mode-hook (lambda () (run-hooks 'prelude-interactive-lisp-coding-hook)))&lt;br /&gt;
&lt;br /&gt;
;; start slime automatically when we open a lisp file&lt;br /&gt;
(defun prelude-start-slime ()&lt;br /&gt;
  (unless (slime-connected-p)&lt;br /&gt;
    (save-excursion (slime))))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-mode-hook 'prelude-start-slime)&lt;br /&gt;
&lt;br /&gt;
;; Stop SLIME's REPL from grabbing DEL,&lt;br /&gt;
;; which is annoying when backspacing over a '('&lt;br /&gt;
(defun prelude-override-slime-repl-bindings-with-paredit ()&lt;br /&gt;
  (define-key slime-repl-mode-map&lt;br /&gt;
    (read-kbd-macro paredit-backward-delete-key) nil))&lt;br /&gt;
&lt;br /&gt;
(add-hook 'slime-repl-mode-hook 'prelude-override-slime-repl-bindings-with-paredit)&lt;br /&gt;
&lt;br /&gt;
(eval-after-load &amp;quot;slime&amp;quot;&lt;br /&gt;
  '(progn&lt;br /&gt;
     (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol&lt;br /&gt;
           slime-fuzzy-completion-in-place t&lt;br /&gt;
           slime-enable-evaluate-in-emacs t&lt;br /&gt;
           slime-autodoc-use-multiline-p t)&lt;br /&gt;
&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;TAB&amp;quot;) 'slime-indent-and-complete-symbol)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c i&amp;quot;) 'slime-inspect)&lt;br /&gt;
     (define-key slime-mode-map (kbd &amp;quot;C-c C-s&amp;quot;) 'slime-selector)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slime history with helm ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/emacs-helm/helm-slime helm-slime] provides a more interactive repl history with [[Helm]]. It is not in a package repository, you have to download it and load its file (&amp;lt;code&amp;gt;M-x load-file&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Nrepl.el]] for Clojure&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://common-lisp.net/project/slime/ SLIME project page]&lt;br /&gt;
* [https://lispcookbook.github.io/cl-cookbook/emacs-ide.html Emacs and SLIME tutorial on the Common Lisp Cookbook]&lt;br /&gt;
* [http://osdir.com/ml/lisp.cmucl.devel/2003-08/msg00327.html The birth of SLIME on the cmucl-imp mailing list (August 2003)]&lt;br /&gt;
* [http://common-lisp.net/~trittweiler/talks/slime-talk-2008.pdf SLIME presentation by Tobias Rittweiler (2008)]&lt;br /&gt;
* [http://wingolog.org/archives/2006/01/02/slime Review of SLIME by Andy Wingo]&lt;br /&gt;
* [http://bc.tech.coop/blog/070120.html Bill Clementson's &amp;quot;Slime Tips and Techniques&amp;quot; - Part 1] (See also [http://bc.tech.coop/blog/070121.html Part 2], [http://bc.tech.coop/blog/070122.html Part 3], [http://bc.tech.coop/blog/070129.html Part 4], [http://bc.tech.coop/blog/070208.html Part 5], [http://bc.tech.coop/blog/070424.html Part 6], and [http://bc.tech.coop/blog/070425.html Part 7])&lt;br /&gt;
* [http://bc.tech.coop/blog/070927.html Bill Clementson's &amp;quot;SLIME Refactoring&amp;quot;] describes how to set up SLIME&lt;br /&gt;
* [http://bc.tech.coop/blog/070125.html Bill Clementson's &amp;quot;Emacs Keymaps and the SLIME scratch buffer]&lt;br /&gt;
* [http://bc.tech.coop/blog/050501.html Bill Clementson's &amp;quot;CL, Music and SLIME Tutorials&amp;quot;] contains a good SLIME tutorial&lt;br /&gt;
* [http://www.bese.it/~segv/mb-slime.el Marco Baringer's (SLIME guru) SLIME setup]&lt;br /&gt;
* [http://www.cliki.net/Editing%20Lisp%20Code%20with%20Emacs Marco Baringer's &amp;quot;Editing Lisp Code with Emacs&amp;quot;]&lt;br /&gt;
* [http://common-lisp.net/pipermail/slime-devel/ The slime-devel Archives]&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisp]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Popular Package]]&lt;br /&gt;
[[Category:Third Party Package]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50969</id>
		<title>GNU Emacs 29</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50969"/>
		<updated>2024-02-22T09:23:20Z</updated>

		<summary type="html">&lt;p&gt;Elvince: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See:&lt;br /&gt;
&lt;br /&gt;
* https://www.masteringemacs.org/article/whats-new-in-emacs-29-1&lt;br /&gt;
* https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 29 =&lt;br /&gt;
&lt;br /&gt;
Emacs 29.1 has a wide variety of new features, including:&lt;br /&gt;
&lt;br /&gt;
* Official tree-sitter support&lt;br /&gt;
* EGlot, the Language Server Client, is now built-in&lt;br /&gt;
* Use-package is built-in&lt;br /&gt;
* Better long line support&lt;br /&gt;
* Native SQLite Support&lt;br /&gt;
* Changing the init directory (now possible)&lt;br /&gt;
* Pixel Scroll Precision Mode to get smooth scrolling&lt;br /&gt;
&lt;br /&gt;
= How to get it =&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
&lt;br /&gt;
Unofficial AppImage for latest releases:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/blahgeek/emacs-appimage&lt;br /&gt;
&lt;br /&gt;
=  How to build it =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt install build-essential autoconf automake texinfo libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff-dev libgnutls28-dev libncurses-dev libjansson-dev libgccjit-10-dev ./configure –with-tree-sitter&lt;br /&gt;
&lt;br /&gt;
(On Debian 12, get libgccjit-12-dev)&lt;br /&gt;
&lt;br /&gt;
make -j16&lt;br /&gt;
&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50968</id>
		<title>GNU Emacs 29</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50968"/>
		<updated>2024-02-22T09:22:48Z</updated>

		<summary type="html">&lt;p&gt;Elvince: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See:&lt;br /&gt;
&lt;br /&gt;
* https://www.masteringemacs.org/article/whats-new-in-emacs-29-1&lt;br /&gt;
* https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 29 =&lt;br /&gt;
&lt;br /&gt;
Emacs 29.1 has a wide variety of new features, including:&lt;br /&gt;
&lt;br /&gt;
* Official tree-sitter support&lt;br /&gt;
* EGlot, the Language Server Client, is now built-in&lt;br /&gt;
* Use-package is built-in&lt;br /&gt;
* Better long line support&lt;br /&gt;
* Native SQLite Support&lt;br /&gt;
* Changing the init directory (now possible)&lt;br /&gt;
* Pixel Scroll Precision Mode to get smooth scrolling&lt;br /&gt;
&lt;br /&gt;
= How to get it =&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
&lt;br /&gt;
Unofficial AppImage for latest releases:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/blahgeek/emacs-appimage&lt;br /&gt;
&lt;br /&gt;
=  How to build it =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt install build-essential autoconf automake texinfo libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff-dev libgnutls28-dev libncurses-dev libjansson-dev libgccjit-10-dev ./configure –with-tree-sitter&lt;br /&gt;
&lt;br /&gt;
# On Debian 12, get libgccjit-12-dev&lt;br /&gt;
&lt;br /&gt;
make -j16&lt;br /&gt;
&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50967</id>
		<title>GNU Emacs 29</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50967"/>
		<updated>2024-02-22T09:21:17Z</updated>

		<summary type="html">&lt;p&gt;Elvince: appImage, build it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See:&lt;br /&gt;
&lt;br /&gt;
* https://www.masteringemacs.org/article/whats-new-in-emacs-29-1&lt;br /&gt;
* https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 29 =&lt;br /&gt;
&lt;br /&gt;
Emacs 29.1 has a wide variety of new features, including:&lt;br /&gt;
&lt;br /&gt;
* Official tree-sitter support&lt;br /&gt;
* EGlot, the Language Server Client, is now built-in&lt;br /&gt;
* Use-package is built-in&lt;br /&gt;
* Better long line support&lt;br /&gt;
* Native SQLite Support&lt;br /&gt;
* Changing the init directory (now possible)&lt;br /&gt;
* Pixel Scroll Precision Mode to get smooth scrolling&lt;br /&gt;
&lt;br /&gt;
= How to get it =&lt;br /&gt;
&lt;br /&gt;
== AppImage ==&lt;br /&gt;
&lt;br /&gt;
Unofficial AppImage for latest releases:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/blahgeek/emacs-appimage&lt;br /&gt;
&lt;br /&gt;
=  How to build it =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt install build-essential autoconf automake texinfo libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff-dev libgnutls28-dev libncurses-dev libjansson-dev libgccjit-10-dev ./configure –with-tree-sitter&lt;br /&gt;
&lt;br /&gt;
make -j16&lt;br /&gt;
&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50966</id>
		<title>GNU Emacs 29</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_29&amp;diff=50966"/>
		<updated>2024-02-22T09:18:37Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Created page with &amp;quot;See:  * https://www.masteringemacs.org/article/whats-new-in-emacs-29-1 * https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29  = What's new in Emacs 29 =  Emac...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See:&lt;br /&gt;
&lt;br /&gt;
* https://www.masteringemacs.org/article/whats-new-in-emacs-29-1&lt;br /&gt;
* https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-29&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 29 =&lt;br /&gt;
&lt;br /&gt;
Emacs 29.1 has a wide variety of new features, including:&lt;br /&gt;
&lt;br /&gt;
* Official tree-sitter support&lt;br /&gt;
* EGlot, the Language Server Client, is now built-in&lt;br /&gt;
* Use-package is built-in&lt;br /&gt;
* Better long line support&lt;br /&gt;
* Native SQLite Support&lt;br /&gt;
* Changing the init directory (now possible)&lt;br /&gt;
* Pixel Scroll Precision Mode to get smooth scrolling&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Main_Page&amp;diff=50965</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Main_Page&amp;diff=50965"/>
		<updated>2024-02-22T09:15:11Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Emacs 29.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WikEmacs''' is here to stay.  Spread the word!&lt;br /&gt;
&lt;br /&gt;
[[File:Emacs_parts.png|320px|thumb|right|Basic [[Emacs Terminology|terminology]] of typical Emacs GUI Frame]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
'''First time visitors''' can start [[#Explore WikEmacs|exploring WikEmacs]]. We have added lots of useful pages since the launch of WikEmacs.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
We need more '''[[:Category:WikEmacs Contributor|WikEmacs contributors]]'''.  You can help the following way.&lt;br /&gt;
&lt;br /&gt;
{{Note| First of all, please take a minute to look at the&lt;br /&gt;
[[WikEmacs:Guidelines|WikEmacs guidelines]] before you start editing.}}&lt;br /&gt;
&lt;br /&gt;
* Priority tasks&lt;br /&gt;
** Add content. Please adopt the following approach - ''I found this on the web which was helpful. But it took me a lot of time to find it. Now that I have found it, I will put it in WikEmacs so that others can benefit from it''. You can start by documenting Emacs' support of your favorite programming language. &lt;br /&gt;
* Intermediate tasks&lt;br /&gt;
** Provide tutorials or content for the [[:Category:Popular Package|popular packages]] or [[:Category:Built-in Package|built-in packages]].&lt;br /&gt;
** Add more content to [[Special:ShortPages|short pages]].&lt;br /&gt;
** Document or add more [[:Category:Third Party Package|third party packages]].&lt;br /&gt;
* Other tasks&lt;br /&gt;
** Copy edit [[Special:RecentChanges|recent changes]] or be a moral police.&lt;br /&gt;
** Add more members to various [[Special:Categories|categories]].&lt;br /&gt;
** Categorize one of these pages [[Special:UncategorizedPages|uncategorized pages]].&lt;br /&gt;
** Follow the [http://wikemacs.org/api.php?hidebots=1&amp;amp;days=7&amp;amp;limit=50&amp;amp;action=feedrecentchanges&amp;amp;feedformat=atom RSS feed] to watch edits, new users and help fighting vandalism (fortunately quite low).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Emacs News'''&lt;br /&gt;
&lt;br /&gt;
The latest stable release of Emacs is [[GNU Emacs 29|Emacs-29.1]] released on July 30th, 2023. The precedent is [[GNU Emacs 28|Emacs-28.1]].&lt;br /&gt;
&lt;br /&gt;
Emacs is available on all popular [[:Category:Install Or Upgrade| operating systems]] including [[Installing Emacs on BSD |BSD]], [[Installing Emacs on GNU/Linux | GNU/Linux]], [[Installing Emacs on OS X | OS X]] and [[Installing Emacs on Windows| Windows]].  It supports a variety of [[:Category:Programming languages|programming languages]].&lt;br /&gt;
&amp;lt;!-- Left hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
== Explore WikEmacs ==&lt;br /&gt;
&lt;br /&gt;
To explore WikEmacs proceed as follows:&lt;br /&gt;
* Search for or visit a page of interest&lt;br /&gt;
* At the end of the page, there is a list of categories&lt;br /&gt;
* Click on individual categories and it will give you a list of all pages that will be of interest to you.&lt;br /&gt;
&lt;br /&gt;
===  What is your comfort level with Emacs? ===&lt;br /&gt;
* [[:Category:Beginner|Beginner]]&lt;br /&gt;
* [[:Category:Intermediate|Intermediate]]&lt;br /&gt;
* [[:Category:Expert|Expert]]&lt;br /&gt;
** Are you a maintainer of a [[:Category:Built-in Package|Built-in Package]]? If you don't find information about your package, please add it. No one else can write about your package as well as you.&lt;br /&gt;
** Have you developed any [[:Category:Third Party Package|Third Party Package]]s? Consider writing about what it is and how to use it.&lt;br /&gt;
* [[:Category:Vim User|Vim User]]&lt;br /&gt;
&lt;br /&gt;
=== What do you want to accomplish now? ===&lt;br /&gt;
* [[:Category:Install Or Upgrade|Install Or Upgrade]]&lt;br /&gt;
* [[:Category:Customization|Customize Emacs]]&lt;br /&gt;
* [[Key Bindings|Tweak Key Bindings]]&lt;br /&gt;
* [[:Category:Tutorial|Learn more Emacs (Tutorials)]]&lt;br /&gt;
* [[:Category:Emacs Lisp|Learn Emacs Lisp]]&lt;br /&gt;
&lt;br /&gt;
=== What do you use Emacs for? ===&lt;br /&gt;
* [[:Category:Text Editing|Text Editing]]&lt;br /&gt;
* [[:Category:Programming|Programming]]&lt;br /&gt;
* [[:Category:Document authoring|Document authoring]]&lt;br /&gt;
* [[:Category:Organizer|Getting Organized]]&lt;br /&gt;
* [[:Category:Email|Emailing]]&lt;br /&gt;
* [[:Category:Chat|Chatting]]&lt;br /&gt;
* [[:Category:Blog|Blogging]]&lt;br /&gt;
* [[:Category:Browse|Browsing]] &lt;br /&gt;
* [[:Category:Entertainment|Entertainment]]&lt;br /&gt;
* [[:Category:Workflow|Other]]&lt;br /&gt;
&lt;br /&gt;
=== How do you involve yourself with the community? ===&lt;br /&gt;
* [[:Category:Emacs User|Emacs User]]&lt;br /&gt;
* [[:Category:Emacs Contributor|Emacs Contributor]]&lt;br /&gt;
* [[:Category:WikEmacs Contributor|WikEmacs Contributor]]&lt;br /&gt;
* [[Financial_Support|Financial Supporter]]&lt;br /&gt;
* [[:Category:User Role|Other]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Right hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Help build WikEmacs==&lt;br /&gt;
&lt;br /&gt;
The following are suggestions for articles to write, along with the page of the GNU Emacs manual which documents this feature.  ('''Note:''' it's possible that an article for a given topic exists already under a different name.  In that case, please ensure that the article includes the link to the manual page, and then remove the topic from this list.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not finished.  I grabbed ideas from large section titles of the manual, but there are many more in the &amp;quot;Detailed Node Listing&amp;quot;, longer version of the table of contents. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Command-line startup options]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Entering-Emacs.html] and [https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Invocation.html])&lt;br /&gt;
* [[Built-in help]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html])&lt;br /&gt;
* [[Registers]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Registers.html])&lt;br /&gt;
* [[:Category:Search|Search for text in a buffer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Search.html])&lt;br /&gt;
* [[Fixing typos]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixit.html])&lt;br /&gt;
* [[Keyboard macros]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macros.html])&lt;br /&gt;
* [[Windows within a frame]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows.html])&lt;br /&gt;
* [[Frames]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html])&lt;br /&gt;
* [[International character sets]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/International.html])&lt;br /&gt;
* [[Indentation]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html])&lt;br /&gt;
* [[Editing source code]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Programs.html])&lt;br /&gt;
* [[Building software]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Building.html])&lt;br /&gt;
* [[Maintaining source code repositories]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Maintaining.html])&lt;br /&gt;
* [[Abbrevs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Abbrevs.html])&lt;br /&gt;
* [[Dired]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html])&lt;br /&gt;
* [[Calendars and diaries]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar_002fDiary.html])&lt;br /&gt;
* [[Sending mail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html])&lt;br /&gt;
* [[Rmail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html])&lt;br /&gt;
* [[Gnus]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus.html])&lt;br /&gt;
* [[Document viewer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Document-View.html])&lt;br /&gt;
* [[Shell commands withing Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html])&lt;br /&gt;
* [[Emacs server]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html])&lt;br /&gt;
* [[Printing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Printing.html])&lt;br /&gt;
* [[Sorting]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sorting.html])&lt;br /&gt;
* [[Picture mode]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Picture-Mode.html])&lt;br /&gt;
* [[Editing binary files]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html])&lt;br /&gt;
* [[Saving Emacs sessions]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Emacs-Sessions.html])&lt;br /&gt;
* [[Recursive editing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Recursive-Edit.html])&lt;br /&gt;
* [[Emulating other text editors]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emulation.html])&lt;br /&gt;
* [[Hyperlinking within Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Hyperlinking.html])&lt;br /&gt;
* [[Games and fun]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Amusements.html])&lt;br /&gt;
* [[Installing additional packages]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html])&lt;br /&gt;
* [[Customising Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Customization.html])&lt;br /&gt;
** [[Customize]] (simple interface) ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html])&lt;br /&gt;
* [[Cancelling commands]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html])&lt;br /&gt;
* [[If Emacs is malfunctioning]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Lossage.html])&lt;br /&gt;
* [[Reporting bugs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Bugs.html])&lt;br /&gt;
* [[Contributing to GNU Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html])&lt;br /&gt;
* [[Getting help from others]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Service.html])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WikEmacs]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50964</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50964"/>
		<updated>2024-02-22T07:50:38Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Mpg123 */ extensions: ID3 tags, drag and drop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Mpg123 =&lt;br /&gt;
&lt;br /&gt;
'''mpg123''' is a package written by HiroseYuuji for playing .mp3 and .ogg files with the mpg123 and ogg123 programs. It can:&lt;br /&gt;
&lt;br /&gt;
* play local music&lt;br /&gt;
* create and save playlists&lt;br /&gt;
* play randomly&lt;br /&gt;
* repeat songs&lt;br /&gt;
* loop inside songs&lt;br /&gt;
&lt;br /&gt;
It is maybe the simplest player for Emacs you will find.&lt;br /&gt;
&lt;br /&gt;
With extensions you can also:&lt;br /&gt;
&lt;br /&gt;
* control the player from outside&lt;br /&gt;
* edit ID3 tags&lt;br /&gt;
* drag and drop music files from Dired&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== package.el ===&lt;br /&gt;
&lt;br /&gt;
'''mpg123.el''' is on [[MELPA]].&lt;br /&gt;
&lt;br /&gt;
Its latest version (2023-05 at the time of writing) is for Emacs 28. You might experience a freeze of the interface in Emacs 27 when playing.&lt;br /&gt;
&lt;br /&gt;
=== Debian system ===&lt;br /&gt;
&lt;br /&gt;
You'd be better off using package.el, but you will also find a (historical) Debian package.&lt;br /&gt;
&lt;br /&gt;
Install the [http://packages.debian.org/search?keywords=mpg123-el  mpg123-el package] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123-el&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs, and you can start using it.&lt;br /&gt;
&lt;br /&gt;
=== Dependency for all systems ===&lt;br /&gt;
&lt;br /&gt;
Install the mpg123 and ogg123 programs with your system's package manager :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123 ogg123&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual install ===&lt;br /&gt;
&lt;br /&gt;
The sources are on [http://www.gentei.org/~yuuji/software/mpg123el/ mpg123.el's git repository]. You can save them in ''~/.emacs.d/mpg123.el''.&lt;br /&gt;
&lt;br /&gt;
Check you have the following in your [[Init_File]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs or {{Command|eval-current-buffer}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
{{Command|mpg123}} &lt;br /&gt;
: start mpg123, choose a directory or a mp3/ogg file and start listening. The buffer shows a complete list of commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1 --:--/--:--	 Hurricane by Kyuss&lt;br /&gt;
0%--------------------------------------50%-------------------------------------100%&lt;br /&gt;
Volume: [N/A] Repeat: [--] Loop: [--]&lt;br /&gt;
mpg123:&lt;br /&gt;
W	Show the real filename&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
SPC	Play or pause&lt;br /&gt;
RET	Play&lt;br /&gt;
m	Mark position (when playing)&lt;br /&gt;
r	Restart from marked position&lt;br /&gt;
w	Where is the marked position&lt;br /&gt;
&amp;lt;	&amp;lt;&amp;lt;&lt;br /&gt;
&amp;gt;	&amp;gt;&amp;gt;&lt;br /&gt;
f	Forward 1 sec&lt;br /&gt;
b	Backward 1 sec&lt;br /&gt;
F	Forward 10 sec&lt;br /&gt;
B	Backard 10 sec&lt;br /&gt;
n	Move to next line&lt;br /&gt;
p	Move to previous line&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
-	Volume down&lt;br /&gt;
+	Volume up&lt;br /&gt;
o	Open other directory or playlist file&lt;br /&gt;
a	Add other directory or playlist file&lt;br /&gt;
S	Save current playlist to a file&lt;br /&gt;
i	Increase repetition count&lt;br /&gt;
d	Decrease repetition count (-1 for infinity)&lt;br /&gt;
L	Increase current loop count&lt;br /&gt;
l	Decrease current loop count. Also toggles between 0(no loop) and -1(always loop)&lt;br /&gt;
s	Shuffle music list&lt;br /&gt;
D	Delete music file&lt;br /&gt;
.	Display playing position indicator&lt;br /&gt;
k	Kill music line and push onto stack&lt;br /&gt;
y	Yank music line from stack&lt;br /&gt;
I	Intro-quiz mode ON/OFF (Stop at marked position)&lt;br /&gt;
q	Quit&lt;br /&gt;
Q	Quit without query&lt;br /&gt;
&amp;lt;down-mouse-2&amp;gt;	Select a music directly on the mouse cursor&lt;br /&gt;
0..9	Digit argument (ex. 50V increase volume by 50steps)&lt;br /&gt;
----&lt;br /&gt;
The delimiter line &amp;quot;-------&amp;quot; is the indicator of currently playing position.&lt;br /&gt;
You may see the slider on the line running from left to right while the&lt;br /&gt;
music's going ahead.  If you hit RET or &amp;lt;down-mouse-2&amp;gt; on the indicator line,&lt;br /&gt;
the music will immediately move to that position.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Save this file somewhere, like in .emacs.d/my-plugins:&lt;br /&gt;
http://www.gentei.org/~yuuji/software/mpg123el/mpg123-remote.el &lt;br /&gt;
&lt;br /&gt;
add in your .emacs:&lt;br /&gt;
     (load &amp;quot;path/to/mpg123-remote&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
restart emacs. To control mpg123 from the outside, you have to start a server, for example with M-x server-start. Now you have access to a few functions that you can call this way:&lt;br /&gt;
&lt;br /&gt;
    emacsclient -e '(remote-mpg123-pause)' ; next and prev are also available&lt;br /&gt;
&lt;br /&gt;
define a global shorcut with your desktop manager and you're done !&lt;br /&gt;
&lt;br /&gt;
sources : http://www.gentei.org/~yuuji/software/mpg123el/&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50963</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50963"/>
		<updated>2024-02-22T00:11:56Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Mpg123 */ Emacs 28 notice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Mpg123 =&lt;br /&gt;
&lt;br /&gt;
'''mpg123''' is a package written by HiroseYuuji for playing .mp3 and .ogg files with the mpg123 and ogg123 programs. It can:&lt;br /&gt;
&lt;br /&gt;
* play local music&lt;br /&gt;
* create and save playlists&lt;br /&gt;
* play randomly&lt;br /&gt;
* repeat songs&lt;br /&gt;
* loop inside songs&lt;br /&gt;
&lt;br /&gt;
It is maybe the simplest player for Emacs you will find.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== package.el ===&lt;br /&gt;
&lt;br /&gt;
'''mpg123.el''' is on [[MELPA]].&lt;br /&gt;
&lt;br /&gt;
Its latest version (2023-05 at the time of writing) is for Emacs 28. You might experience a freeze of the interface in Emacs 27 when playing.&lt;br /&gt;
&lt;br /&gt;
=== Debian system ===&lt;br /&gt;
&lt;br /&gt;
You'd be better off using package.el, but you will also find a (historical) Debian package.&lt;br /&gt;
&lt;br /&gt;
Install the [http://packages.debian.org/search?keywords=mpg123-el  mpg123-el package] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123-el&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs, and you can start using it.&lt;br /&gt;
&lt;br /&gt;
=== Dependency for all systems ===&lt;br /&gt;
&lt;br /&gt;
Install the mpg123 and ogg123 programs with your system's package manager :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123 ogg123&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual install ===&lt;br /&gt;
&lt;br /&gt;
The sources are on [http://www.gentei.org/~yuuji/software/mpg123el/ mpg123.el's git repository]. You can save them in ''~/.emacs.d/mpg123.el''.&lt;br /&gt;
&lt;br /&gt;
Check you have the following in your [[Init_File]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs or {{Command|eval-current-buffer}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
{{Command|mpg123}} &lt;br /&gt;
: start mpg123, choose a directory or a mp3/ogg file and start listening. The buffer shows a complete list of commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1 --:--/--:--	 Hurricane by Kyuss&lt;br /&gt;
0%--------------------------------------50%-------------------------------------100%&lt;br /&gt;
Volume: [N/A] Repeat: [--] Loop: [--]&lt;br /&gt;
mpg123:&lt;br /&gt;
W	Show the real filename&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
SPC	Play or pause&lt;br /&gt;
RET	Play&lt;br /&gt;
m	Mark position (when playing)&lt;br /&gt;
r	Restart from marked position&lt;br /&gt;
w	Where is the marked position&lt;br /&gt;
&amp;lt;	&amp;lt;&amp;lt;&lt;br /&gt;
&amp;gt;	&amp;gt;&amp;gt;&lt;br /&gt;
f	Forward 1 sec&lt;br /&gt;
b	Backward 1 sec&lt;br /&gt;
F	Forward 10 sec&lt;br /&gt;
B	Backard 10 sec&lt;br /&gt;
n	Move to next line&lt;br /&gt;
p	Move to previous line&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
-	Volume down&lt;br /&gt;
+	Volume up&lt;br /&gt;
o	Open other directory or playlist file&lt;br /&gt;
a	Add other directory or playlist file&lt;br /&gt;
S	Save current playlist to a file&lt;br /&gt;
i	Increase repetition count&lt;br /&gt;
d	Decrease repetition count (-1 for infinity)&lt;br /&gt;
L	Increase current loop count&lt;br /&gt;
l	Decrease current loop count. Also toggles between 0(no loop) and -1(always loop)&lt;br /&gt;
s	Shuffle music list&lt;br /&gt;
D	Delete music file&lt;br /&gt;
.	Display playing position indicator&lt;br /&gt;
k	Kill music line and push onto stack&lt;br /&gt;
y	Yank music line from stack&lt;br /&gt;
I	Intro-quiz mode ON/OFF (Stop at marked position)&lt;br /&gt;
q	Quit&lt;br /&gt;
Q	Quit without query&lt;br /&gt;
&amp;lt;down-mouse-2&amp;gt;	Select a music directly on the mouse cursor&lt;br /&gt;
0..9	Digit argument (ex. 50V increase volume by 50steps)&lt;br /&gt;
----&lt;br /&gt;
The delimiter line &amp;quot;-------&amp;quot; is the indicator of currently playing position.&lt;br /&gt;
You may see the slider on the line running from left to right while the&lt;br /&gt;
music's going ahead.  If you hit RET or &amp;lt;down-mouse-2&amp;gt; on the indicator line,&lt;br /&gt;
the music will immediately move to that position.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Save this file somewhere, like in .emacs.d/my-plugins:&lt;br /&gt;
http://www.gentei.org/~yuuji/software/mpg123el/mpg123-remote.el &lt;br /&gt;
&lt;br /&gt;
add in your .emacs:&lt;br /&gt;
     (load &amp;quot;path/to/mpg123-remote&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
restart emacs. To control mpg123 from the outside, you have to start a server, for example with M-x server-start. Now you have access to a few functions that you can call this way:&lt;br /&gt;
&lt;br /&gt;
    emacsclient -e '(remote-mpg123-pause)' ; next and prev are also available&lt;br /&gt;
&lt;br /&gt;
define a global shorcut with your desktop manager and you're done !&lt;br /&gt;
&lt;br /&gt;
sources : http://www.gentei.org/~yuuji/software/mpg123el/&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50962</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50962"/>
		<updated>2024-02-21T23:28:48Z</updated>

		<summary type="html">&lt;p&gt;Elvince: mpg123.el was updated for Emacs 28 !&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Mpg123 =&lt;br /&gt;
&lt;br /&gt;
'''mpg123''' is a package written by HiroseYuuji for playing .mp3 and .ogg files with the mpg123 and ogg123 programs. It can:&lt;br /&gt;
&lt;br /&gt;
* play local music&lt;br /&gt;
* create and save playlists&lt;br /&gt;
* play randomly&lt;br /&gt;
* repeat songs&lt;br /&gt;
* loop inside songs&lt;br /&gt;
&lt;br /&gt;
It is maybe the simplest player for Emacs you will find.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== package.el ===&lt;br /&gt;
&lt;br /&gt;
'''mpg123.el''' is on [[MELPA]].&lt;br /&gt;
&lt;br /&gt;
=== Debian system ===&lt;br /&gt;
&lt;br /&gt;
You'd be better off using package.el, but you will also find a (historical) Debian package.&lt;br /&gt;
&lt;br /&gt;
Install the [http://packages.debian.org/search?keywords=mpg123-el  mpg123-el package] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123-el&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs, and you can start using it.&lt;br /&gt;
&lt;br /&gt;
=== Dependency for all systems ===&lt;br /&gt;
&lt;br /&gt;
Install the mpg123 and ogg123 programs with your system's package manager :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install mpg123 ogg123&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Manual install ===&lt;br /&gt;
&lt;br /&gt;
The sources are on [http://www.gentei.org/~yuuji/software/mpg123el/ mpg123.el's git repository]. You can save them in ''~/.emacs.d/mpg123.el''.&lt;br /&gt;
&lt;br /&gt;
Check you have the following in your [[Init_File]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
restart emacs or {{Command|eval-current-buffer}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
{{Command|mpg123}} &lt;br /&gt;
: start mpg123, choose a directory or a mp3/ogg file and start listening. The buffer shows a complete list of commands.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 1 --:--/--:--	 Hurricane by Kyuss&lt;br /&gt;
0%--------------------------------------50%-------------------------------------100%&lt;br /&gt;
Volume: [N/A] Repeat: [--] Loop: [--]&lt;br /&gt;
mpg123:&lt;br /&gt;
W	Show the real filename&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
SPC	Play or pause&lt;br /&gt;
RET	Play&lt;br /&gt;
m	Mark position (when playing)&lt;br /&gt;
r	Restart from marked position&lt;br /&gt;
w	Where is the marked position&lt;br /&gt;
&amp;lt;	&amp;lt;&amp;lt;&lt;br /&gt;
&amp;gt;	&amp;gt;&amp;gt;&lt;br /&gt;
f	Forward 1 sec&lt;br /&gt;
b	Backward 1 sec&lt;br /&gt;
F	Forward 10 sec&lt;br /&gt;
B	Backard 10 sec&lt;br /&gt;
n	Move to next line&lt;br /&gt;
p	Move to previous line&lt;br /&gt;
g	Go to current music line&lt;br /&gt;
-	Volume down&lt;br /&gt;
+	Volume up&lt;br /&gt;
o	Open other directory or playlist file&lt;br /&gt;
a	Add other directory or playlist file&lt;br /&gt;
S	Save current playlist to a file&lt;br /&gt;
i	Increase repetition count&lt;br /&gt;
d	Decrease repetition count (-1 for infinity)&lt;br /&gt;
L	Increase current loop count&lt;br /&gt;
l	Decrease current loop count. Also toggles between 0(no loop) and -1(always loop)&lt;br /&gt;
s	Shuffle music list&lt;br /&gt;
D	Delete music file&lt;br /&gt;
.	Display playing position indicator&lt;br /&gt;
k	Kill music line and push onto stack&lt;br /&gt;
y	Yank music line from stack&lt;br /&gt;
I	Intro-quiz mode ON/OFF (Stop at marked position)&lt;br /&gt;
q	Quit&lt;br /&gt;
Q	Quit without query&lt;br /&gt;
&amp;lt;down-mouse-2&amp;gt;	Select a music directly on the mouse cursor&lt;br /&gt;
0..9	Digit argument (ex. 50V increase volume by 50steps)&lt;br /&gt;
----&lt;br /&gt;
The delimiter line &amp;quot;-------&amp;quot; is the indicator of currently playing position.&lt;br /&gt;
You may see the slider on the line running from left to right while the&lt;br /&gt;
music's going ahead.  If you hit RET or &amp;lt;down-mouse-2&amp;gt; on the indicator line,&lt;br /&gt;
the music will immediately move to that position.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Save this file somewhere, like in .emacs.d/my-plugins:&lt;br /&gt;
http://www.gentei.org/~yuuji/software/mpg123el/mpg123-remote.el &lt;br /&gt;
&lt;br /&gt;
add in your .emacs:&lt;br /&gt;
     (load &amp;quot;path/to/mpg123-remote&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
restart emacs. To control mpg123 from the outside, you have to start a server, for example with M-x server-start. Now you have access to a few functions that you can call this way:&lt;br /&gt;
&lt;br /&gt;
    emacsclient -e '(remote-mpg123-pause)' ; next and prev are also available&lt;br /&gt;
&lt;br /&gt;
define a global shorcut with your desktop manager and you're done !&lt;br /&gt;
&lt;br /&gt;
sources : http://www.gentei.org/~yuuji/software/mpg123el/&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Maxxcan&amp;diff=50961</id>
		<title>User talk:Maxxcan</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Maxxcan&amp;diff=50961"/>
		<updated>2024-01-04T10:03:33Z</updated>

		<summary type="html">&lt;p&gt;Elvince: welcome&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 05:03, 4 January 2024 (EST)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Packrat&amp;diff=50960</id>
		<title>User talk:Packrat</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Packrat&amp;diff=50960"/>
		<updated>2023-07-17T11:43:09Z</updated>

		<summary type="html">&lt;p&gt;Elvince: greetings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 07:43, 17 July 2023 (EDT)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Python&amp;diff=50959</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Python&amp;diff=50959"/>
		<updated>2023-05-02T11:05:45Z</updated>

		<summary type="html">&lt;p&gt;Elvince: add Screencast session&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How can we turn Emacs as full featured Python IDE? How to use Emacs for data science? Many packages are explained below. You don't have to install all of them one by one, see the all-in-one solutions, like Elpy, [http://wikemacs.org/wiki/Starter_Kits starter kits] and the [https://spacemacs.org/layers/+lang/python/README.html Spacemacs] layer.&lt;br /&gt;
&lt;br /&gt;
An important library you'll want to get familiar with is [https://jedi.readthedocs.io/en/latest/ Jedi], an autocompletion and analysis library for Python. It helps at autocompletion, finding definitions, showing documentation, etc. Elpy makes good use of it.&lt;br /&gt;
&lt;br /&gt;
We also have Rope that allows cross-project refactoring and smaller ones (change the method signature,…). Again Elpy bases on it and other packages like emacs-traad make it easy to install and use.&lt;br /&gt;
&lt;br /&gt;
See also [[Django]] support.&lt;br /&gt;
&lt;br /&gt;
== Default modes ==&lt;br /&gt;
&lt;br /&gt;
There are a number of python modes for Emacs.&lt;br /&gt;
fgallina's [https://github.com/fgallina/python.el python.el] is the python.el included in Emacs 24.2 and onwards.&lt;br /&gt;
&lt;br /&gt;
== All-in-one solutions ==&lt;br /&gt;
&lt;br /&gt;
=== emacs-for-python ===&lt;br /&gt;
&lt;br /&gt;
'''emacs-for-python''' is a bundle of the above modes (and more), and it's an easy way to turn Emacs into a Python IDE.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/gabrielelanaro/emacs-for-python/ emacs-for-python at github]&lt;br /&gt;
&lt;br /&gt;
=== Elpy ===&lt;br /&gt;
&lt;br /&gt;
'''Elpy''' is a collection of elisp packages for Python too.&lt;br /&gt;
&lt;br /&gt;
https://github.com/jorgenschaefer/elpy/wiki/Features&lt;br /&gt;
&lt;br /&gt;
It permits, among others, to:&lt;br /&gt;
&lt;br /&gt;
* refactor code (using rope),&lt;br /&gt;
* send a region or a buffer to a python interpreter,&lt;br /&gt;
* run unit tests, run the test the cursor is in, with a test runner of choice (django, pytest, …),&lt;br /&gt;
* jump to a symbol definition (elpy-goto-definition),…&lt;br /&gt;
&lt;br /&gt;
and of course&lt;br /&gt;
&lt;br /&gt;
* on-the-fly checks with flymake,&lt;br /&gt;
* code completion with company-mode and either rope or jedi,&lt;br /&gt;
* on the fly code helper with eldoc (and rope or jedi), &lt;br /&gt;
* code navigation,&lt;br /&gt;
* change of virtual environment inside Emacs (pyvenv), etc&lt;br /&gt;
&lt;br /&gt;
=== EMP: EMacs Python ===&lt;br /&gt;
&lt;br /&gt;
The goal of '''emp''' is to take all the best development components available for Python, and combine it conveniently under Emacs. It builds on top of elpy, and provides even more bindings.&lt;br /&gt;
&lt;br /&gt;
https://kootenpv.github.io/2016-01-01-emacs-python&lt;br /&gt;
&lt;br /&gt;
=== Emacs-bootstrap ===&lt;br /&gt;
&lt;br /&gt;
[http://emacs-bootstrap.com/ Emacs-bootstrap] is a website where you can select a few programming languages, some options, and have it generate a full .emacs.d folder for you.&lt;br /&gt;
&lt;br /&gt;
== Language Server Protocol support ==&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/joaotavora/eglot eglot], a polyglot LSP mode for Emacs (by the author of Yasnippet,…),&lt;br /&gt;
&lt;br /&gt;
and [https://github.com/palantir/python-language-server pyls] specifically for Python.&lt;br /&gt;
&lt;br /&gt;
== Refactoring ==&lt;br /&gt;
&lt;br /&gt;
=== rope &amp;amp; ropemacs ===&lt;br /&gt;
&lt;br /&gt;
==== Presentation ====&lt;br /&gt;
&lt;br /&gt;
'''rope''' is a library for refactoring and manipulating Python code, '''pymacs''' is an interface between emacs lisp and python, and '''{{ModeLink|ropemacs}}''' is an Emacs interface to the rope library which uses rope and pymacs.&lt;br /&gt;
&lt;br /&gt;
If you do some search and replace of code objects in your code and find it sometimes tricky, and/or you need to do it in more than one file, then you should consider a good tool of refactoring.&lt;br /&gt;
&lt;br /&gt;
But Rope can do more than this simple example, it can:&lt;br /&gt;
&lt;br /&gt;
* Rename anything&lt;br /&gt;
* Extract method/local variable &lt;br /&gt;
* Change method signature &lt;br /&gt;
* Perform cross-project refactorings&lt;br /&gt;
* Support Mercurial, GIT, Darcs and SVN in refactorings &lt;br /&gt;
&lt;br /&gt;
Rope can also help IDE's with: &lt;br /&gt;
&lt;br /&gt;
* Auto-completion&lt;br /&gt;
* Finding definition location&lt;br /&gt;
* Getting pydoc&lt;br /&gt;
* Finding occurrences&lt;br /&gt;
* Organizing imports (removing unused and duplicate imports and sorting them)&lt;br /&gt;
* Generating python elements &lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
Note: see also emacs-traad below that has an easy installation process.&lt;br /&gt;
&lt;br /&gt;
===== With el-get =====&lt;br /&gt;
&lt;br /&gt;
So an easy way is to use an [[el-get]] recipe: '''M-x el-get-install ropemacs'''. It installs and build Pymacs, rope and ropemacs. The difference from the solution using pip is that it setups the Emacs side of Pymacs correctly.&lt;br /&gt;
&lt;br /&gt;
===== Manually =====&lt;br /&gt;
&lt;br /&gt;
You can follow the instructions as given [http://stackoverflow.com/a/22496541/4018217 here] ,if you don't want to use marmalade you can use the following instructions .&lt;br /&gt;
&lt;br /&gt;
    sudo pip install rope ropemacs&lt;br /&gt;
&lt;br /&gt;
As of February 2014 you can't install Pymacs via pip, therefore:&lt;br /&gt;
&lt;br /&gt;
    git clone http://github.com/pinard/pymacs&lt;br /&gt;
    cd pymacs&lt;br /&gt;
    make check&lt;br /&gt;
    sudo make install&lt;br /&gt;
&lt;br /&gt;
make check ensures the prerequisites. sudo make install puts Pymacs module in Python local modules path, usually /usr/local/lib/python2.7/dist-packages/. People generally frown upon make install, because if you lose the Makefile, it can become hard to cleanly uninstall. But you shouldn't fear it, as pip uses the same directory, so pip uninstall pymacs will work.&lt;br /&gt;
&lt;br /&gt;
'''After you do the make install of pymacs do not delete the folder.Copy the file pymacs.el to ~/.emacs.d/site-lisp/'''&lt;br /&gt;
&lt;br /&gt;
Now add path of pyamcs.el to your ~/.emacs file,using this code:&lt;br /&gt;
    (setq emacs-config-path &amp;quot;~/.emacs.d/&amp;quot;) &lt;br /&gt;
    (setq base-lisp-path &amp;quot;~/.emacs.d/site-lisp/&amp;quot;)&lt;br /&gt;
    (setq site-lisp-path (concat emacs-config-path &amp;quot;/site-lisp&amp;quot;))&lt;br /&gt;
    (defun add-path (p)&lt;br /&gt;
      (add-to-list 'load-path (concat base-lisp-path p)))&lt;br /&gt;
    (add-path &amp;quot;&amp;quot;)&lt;br /&gt;
    (add-to-list 'load-path &amp;quot;~/.emacs.d&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
You can now lazily load ropemacs or load it at runtime.For lazy evaluation add this to your .emacs file:&lt;br /&gt;
    (defun load-ropemacs ()&lt;br /&gt;
      &amp;quot;Load pymacs and ropemacs&amp;quot;&lt;br /&gt;
      (interactive)&lt;br /&gt;
      (require 'pymacs)&lt;br /&gt;
      (pymacs-load &amp;quot;ropemacs&amp;quot; &amp;quot;rope-&amp;quot;)&lt;br /&gt;
      ;; Automatically save project python buffers before refactorings&lt;br /&gt;
      (setq ropemacs-confirm-saving 'nil)&lt;br /&gt;
    )&lt;br /&gt;
    (global-set-key &amp;quot;\C-xpl&amp;quot; 'load-ropemacs)&lt;br /&gt;
&lt;br /&gt;
use c-xpl to load ropemacs.Read more about it [https://github.com/python-rope/ropemacs#setting-up here]&lt;br /&gt;
&lt;br /&gt;
=== Rope &amp;amp; traad ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abingham/traad Traad] is a client-server approach to using the rope Python refactory library. It involves two basic components:&lt;br /&gt;
* A HTTP server exposing the rope API via JSON, and&lt;br /&gt;
* Client libraries for talking to the server&lt;br /&gt;
Since rope is written in Python, any tool that wants to use rope needs to either embed Python, or it needs to find a way to communicate with a Python process running rope. The embedding approach is difficult if the target environment is not written in Python, and it also faces challenges when dealing with more than one Python version.&lt;br /&gt;
&lt;br /&gt;
So traad aims to simplify communication with rope running in an independent process. HTTP communication and JSON data handling is well supported in many, many languages, so any environment that wants to use rope should be able to easily communicate with traad.&lt;br /&gt;
&lt;br /&gt;
==== emacs-traad, easy installation and use ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abingham/emacs-traad emacs-traad] (simply traad in melpa) makes it very easy to install traad, and thus rope. Install traad from melpa and then '''M-x traad-install-server'''. Then start a connection with traad-open and enjoy. Furthermore it installs traad in its own virtualenv, so it won't clutter your current virtualenv, and you don't have to re-install it in every project.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
It is possible to remove a method's argument, normalize arguments, see the occurrences of a method, organize imports, some more python refactoring, and also see the history of traad changes.&lt;br /&gt;
&lt;br /&gt;
=== Other Python &amp;quot;refactoring&amp;quot; tools ===&lt;br /&gt;
&lt;br /&gt;
==== Projectile - replace in project ====&lt;br /&gt;
&lt;br /&gt;
This is not specific to Python but is very helpful anyway. [[Projectile]] has a function '''projectile-replace''' which interactively offers to replace all occurrences of a term in all the files of the project. So it's handy to rename a method.&lt;br /&gt;
&lt;br /&gt;
==== Iedit - replace occurences of a symbol ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/victorhge/iedit Iedit] isn't specific to Python and isn't a &amp;quot;real&amp;quot; &amp;quot;intelligent&amp;quot; refactoring, but it helps editing similar portions of text in the current buffer, with highlighting and simultaneous editing, like multicursors. Go on a variable you want to rename and call '''iedit''' (bound to '''C-;'''). You can restrict to the current method with a 0 prefix argument: '''C-u 0 M-x iedit'''. You can use '''C-\'''' (control quote) to only show the lines that will be edited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Red4e - change the method signature, add decorators ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/vindarel/redbaron4emacs/ red4e] (not a package) is a little utility, considered a proof of concept, that helps at modifying the current method signature: &lt;br /&gt;
&lt;br /&gt;
* '''add a decorator''', remove one, automatically adding or removing &amp;quot;self&amp;quot; for a staticmethod,&lt;br /&gt;
* '''add an argument''' (and rename it inside the method body), remove an argument, add the couple &amp;quot;*args, **kwargs&amp;quot;, &lt;br /&gt;
* '''rename/copy/comment/kill the current method''' (and rename it in the project too), &lt;br /&gt;
* quickly go to another method (with imenu), &lt;br /&gt;
* toggle arguments on '''one or multiple lines''',&lt;br /&gt;
* and more, to be continued.&lt;br /&gt;
&lt;br /&gt;
It uses under the hood (mostly, not everywhere) the redbaron python library that allows to manipulate an FST (Full Syntax Tree).&lt;br /&gt;
&lt;br /&gt;
==== Pygen - code generation ====&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/JackCrawley/pygen pygen]. Unmaintained.&lt;br /&gt;
&lt;br /&gt;
=== Refactor with Elpy ===&lt;br /&gt;
&lt;br /&gt;
See Elpy's documentation: http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring&lt;br /&gt;
&lt;br /&gt;
One can refactor code (with rope), format code, edit all the occurences of the symbol at point simultaneously, and fix imports.&lt;br /&gt;
&lt;br /&gt;
== Auto-Completion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jedi ===&lt;br /&gt;
&lt;br /&gt;
Jedi.el is a Python auto-completion package for Emacs. It aims at helping your Python coding in a non-destructive way. It also helps you to find information about Python objects, such as docstring, function arguments and code location.&lt;br /&gt;
&lt;br /&gt;
Jedi is simple to install and it works out of the box.&lt;br /&gt;
&lt;br /&gt;
See screenshots and get the full documentation : http://tkf.github.io/emacs-jedi/released/&lt;br /&gt;
&lt;br /&gt;
Jedi's official page: http://jedi.jedidjah.ch/en/latest/&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
Install Jedi.el via el-get, Marmalade or MELPA (see install for more info) and add this to your Emacs configuration:&lt;br /&gt;
    (add-hook 'python-mode-hook 'jedi:setup)&lt;br /&gt;
    (setq jedi:setup-keys t)                      ; optional&lt;br /&gt;
    (setq jedi:complete-on-dot t)                 ; optional&lt;br /&gt;
&lt;br /&gt;
or call M-x jedi:setup&lt;br /&gt;
&lt;br /&gt;
''Note'': it's nice to use it in a python interpreter inside emacs :)&lt;br /&gt;
&lt;br /&gt;
=== Anaconda ===&lt;br /&gt;
&lt;br /&gt;
'''Anaconda-mode''' is a mode for '''code navigation, documentation lookup''' and '''completion''' for Python.&lt;br /&gt;
&lt;br /&gt;
It runs on '''emacs 24.3''' with python &amp;gt;= 2.6. &lt;br /&gt;
&lt;br /&gt;
It provides:&lt;br /&gt;
&lt;br /&gt;
* context-sensitive code completion for Python&lt;br /&gt;
* jump to definition&lt;br /&gt;
* find references&lt;br /&gt;
* view documentation&lt;br /&gt;
* virtualenv management&lt;br /&gt;
&lt;br /&gt;
The package is available in [[MELPA]]. For more information, [https://github.com/proofit404/anaconda-mode read its documentation].&lt;br /&gt;
&lt;br /&gt;
== Code Checker ==&lt;br /&gt;
&lt;br /&gt;
=== Flymake and Flycheck ===&lt;br /&gt;
&lt;br /&gt;
[[Flymake]] (in Emacs) is a on-the-fly syntax checker for Emacs. &lt;br /&gt;
We can use it with [[flycheck]] (in melpa), that aims at being a replacement.&lt;br /&gt;
&lt;br /&gt;
To run pep8, pylint, pyflakes and unit-tests (with nose), you can be interested in using [https://github.com/akaihola/flymake-python flymake-python].&lt;br /&gt;
&lt;br /&gt;
Don't forget about '''pylint''' too.&lt;br /&gt;
&lt;br /&gt;
[[File:flycheck-annotated.png]]&lt;br /&gt;
&lt;br /&gt;
=== MyPy checks ===&lt;br /&gt;
&lt;br /&gt;
With [https://github.com/SerialDev/mypy-mode mypy-mode] we get a compilation-mode based support for python 3.6+ type hints checks.&lt;br /&gt;
&lt;br /&gt;
As a side note, we can also get flycheck to work, at the same time as pylint, with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;elisp&amp;quot;&amp;gt;&lt;br /&gt;
(flycheck-define-checker&lt;br /&gt;
    python-mypy &amp;quot;&amp;quot;&lt;br /&gt;
    :command (&amp;quot;mypy&amp;quot;&lt;br /&gt;
              &amp;quot;--ignore-missing-imports&amp;quot;&lt;br /&gt;
              &amp;quot;--python-version&amp;quot; &amp;quot;3.6&amp;quot;&lt;br /&gt;
              source-original)&lt;br /&gt;
    :error-patterns&lt;br /&gt;
    ((error line-start (file-name) &amp;quot;:&amp;quot; line &amp;quot;: error:&amp;quot; (message) line-end))&lt;br /&gt;
    :modes python-mode)&lt;br /&gt;
&lt;br /&gt;
(add-to-list 'flycheck-checkers 'python-mypy t)&lt;br /&gt;
(flycheck-add-next-checker 'python-pylint 'python-mypy t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Indexing sources: ctags, cscope, pycscope == &lt;br /&gt;
&lt;br /&gt;
Indexing sources allows you to do neat things, like going to the definition of a function or finding which functions are calling another one.&lt;br /&gt;
&lt;br /&gt;
Note that Elpy does the &amp;quot;go to definition&amp;quot; feature (elpy-goto-definition), without the need of indexing sources.&lt;br /&gt;
&lt;br /&gt;
=== etags, ctags ===&lt;br /&gt;
&lt;br /&gt;
'''Etags''' (Exuberant Ctags) generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object). Etags is a multilingual implementation of '''ctags'''.&lt;br /&gt;
&lt;br /&gt;
The primary use for the tags files is looking up class/method/function/constant/etc declaration/definitions. Cscope is more powerful (see below).&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
Generate the tags with this command at the root of your project:&lt;br /&gt;
&lt;br /&gt;
     find . -name &amp;quot;*.py&amp;quot; -print | etags -&lt;br /&gt;
&lt;br /&gt;
it creates the file TAGS.&lt;br /&gt;
&lt;br /&gt;
Note that projects like [[Projectile]] or [[Helm]] provide an integrated use of etags (finding one, re-generating the index, etc).&lt;br /&gt;
&lt;br /&gt;
=== cscope ===&lt;br /&gt;
&lt;br /&gt;
'''cscope''' is a much more powerful beast. While it operates on more or less the same principle (generating a file of useful metadata) it allows you do some fancier things like find all references to a symbol, see where a function is being invoked, etc.+ (you can find definitions as well). &lt;br /&gt;
&lt;br /&gt;
It was originally designed for C and C++, but thanks to version 0.3 of '''pycscope''', pythonistas can make use of it.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
The following commands should get you running: &lt;br /&gt;
&lt;br /&gt;
    apt-get install cscope&lt;br /&gt;
    pip install pycscope&lt;br /&gt;
    # in project base dir:&lt;br /&gt;
    find . -name '*.py' &amp;gt; cscope.files&lt;br /&gt;
    cscope -R &lt;br /&gt;
&lt;br /&gt;
now install the '''xcscope''' emacs package with [[ELPA]] and require it: &lt;br /&gt;
    (require 'xcscope)&lt;br /&gt;
&lt;br /&gt;
When done, you can either enable the mode with '''cscope-minor-mode''' (which will add a menu you are free to explore) or call some functions like {{Command|cscope-find-global-definition}}, {{Command|cscope-find-functions-calling-this-function}}, etc.&lt;br /&gt;
&lt;br /&gt;
==== Interactivity with helm-cscope ====&lt;br /&gt;
&lt;br /&gt;
You can do all that interactively with [https://github.com/alpha22jp/helm-cscope.el helm-cscope] (in melpa): when you are on symbol, just call {{Command|helm-cscope-find-global-definition}} (for example) and enjoy the nice interactive interface.&lt;br /&gt;
&lt;br /&gt;
== Running tests ==&lt;br /&gt;
&lt;br /&gt;
Elpy has commands to run either all tests of the current buffer or only the test we are on. It supports launchers for '''Django''' (thus using &amp;quot;manage.py test&amp;quot;), '''pytest''' and '''nose'''. See http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#testing&lt;br /&gt;
&lt;br /&gt;
If you wish to modify the way it runs test, set the following variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq elpy-test-&amp;lt;django, nose, pytest&amp;gt;-runner-command '(&amp;quot;./manage.py&amp;quot; &amp;quot;test&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A Hydra to choose what tests to run, navigate errors and switch to the console ===&lt;br /&gt;
&lt;br /&gt;
See this snippet: https://github.com/abo-abo/hydra/wiki/Elpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Running Make, with completion of commands ===&lt;br /&gt;
&lt;br /&gt;
It can be handy to call a Makefile target from wherever we are in a project, and even more handy with fuzzy completion of the targets. This is easily done with [https://github.com/abo-abo/helm-make helm-make]. It is also included in [[Django]] mode, which does the same for management commands.&lt;br /&gt;
&lt;br /&gt;
[[File:Make-helm.png]]&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
Well, let's start with the debuggers documentation:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.python.org/3/library/pdb.html pdb doc]&lt;br /&gt;
* [https://pypi.python.org/pypi/pdbpp/ pdb++] has a few more commands&lt;br /&gt;
* [https://pypi.python.org/pypi/ipdb ipdb] to make use of ipython (aka jupyter)&lt;br /&gt;
&lt;br /&gt;
=== Ipdb, ipython debugger ===&lt;br /&gt;
&lt;br /&gt;
If you call ipdb, the execution will stop and give a nice ipython-looking prompt.&lt;br /&gt;
Just add the line &lt;br /&gt;
&lt;br /&gt;
    import ipdb; ipdb.set_trace()&lt;br /&gt;
&lt;br /&gt;
Now you can use the usual commands: '''c''' to continue the execution, '''n''' to execute the next one, '''s''' to step into the next function call, '''l''' to list the source code, '''!''' to execute a statement in the current context, etc.&lt;br /&gt;
&lt;br /&gt;
Note: if you like IPython/Jupyter, look at the [https://github.com/millejoh/emacs-ipython-notebook Emacs IPython Notebook].&lt;br /&gt;
&lt;br /&gt;
Note: You can use [[yasnippet]] to quickly enter this sentence, or just a simple function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun python-add-breakpoint ()&lt;br /&gt;
  &amp;quot;Add a break point&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (newline-and-indent)&lt;br /&gt;
  (insert &amp;quot;import ipdb; ipdb.set_trace()&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;^[ ]*import ipdb; ipdb.set_trace()&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use the following to highlight this line, and not forget it :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
; Highlight the call to ipdb&lt;br /&gt;
; src http://pedrokroger.com/2010/07/configuring-emacs-as-a-python-ide-2/&lt;br /&gt;
(defun annotate-pdb ()&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;import ipdb&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;ipdb.set_trace()&amp;quot;))&lt;br /&gt;
(add-hook 'python-mode-hook 'annotate-pdb)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And just delete every breakpoints of the buffer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
(defun ipdb-cleanup ()&lt;br /&gt;
    (interactive)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (replace-regexp &amp;quot;.*ipdb.set_trace().*\n&amp;quot; &amp;quot;&amp;quot; nil (point-min) (point-max))&lt;br /&gt;
      ;; (save-buffer)&lt;br /&gt;
      ))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pdb track ===&lt;br /&gt;
&lt;br /&gt;
If you use emacs-for-python given above, you can track your source code while debugging with pdbtrack.&lt;br /&gt;
&lt;br /&gt;
A tool to use in a non-emacs terminal would be [https://pypi.python.org/pypi/pdbpp/ pdbpp]&lt;br /&gt;
&lt;br /&gt;
=== Realgud, a front end to many debuggers to stay in the source window ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/realgud/realgud Realgud] is a graphical front-end to many python debuggers. The goal is to call the debugger from within Emacs and manipulate it ('''c'''ontinue, '''n'''ext commands, setting breakpoints, etc) within the source window, with single key presses. We can also inspect variables with mouse clicks, set and clear breakpoints (from the source, with mouse clicks), evaluate expressions, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:Realgud.png]]&lt;br /&gt;
&lt;br /&gt;
=== Redefine the code being run in the debugger session ===&lt;br /&gt;
&lt;br /&gt;
The tip in [http://wenshanren.org/?p=351 this article] makes use of the pdb feature to execute code in the context of the current stack frame with the &amp;quot;!&amp;quot; command (which can actually be omitted. See [https://docs.python.org/3/library/pdb.html the pdb doc]) and it uses an emacs package to make it much easier to write code blocks for the (i)pdb prompt (à la org-mode code blocks).&lt;br /&gt;
&lt;br /&gt;
=== M-x compile and breakpoints ===&lt;br /&gt;
&lt;br /&gt;
You may run your script from a real terminal, from emacs with M-x shell or with M-x compile. If you like the latter you'll notice that it hangs if you set breakpoints inside your code. The function below checks if your code has breakpoints and if so, it gives you the hand for the debugger prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
; thanks to https://masteringemacs.org/article/compiling-running-scripts-emacs (slightly modified)&lt;br /&gt;
(defadvice compile&lt;br /&gt;
    (before ad-compile-smart activate)&lt;br /&gt;
  &amp;quot;Advises `compile' so it sets the argument COMINT to t if breakpoints are present in `python-mode' files&amp;quot;&lt;br /&gt;
  (when (derived-mode-p major-mode 'python-mode)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (save-match-data (goto-char (point-min))&lt;br /&gt;
                       (if (search-forward &amp;quot;ipdb.set_trace()&amp;quot;&lt;br /&gt;
                                           (point-max)&lt;br /&gt;
                                           t)&lt;br /&gt;
                           (progn (ad-set-arg 1 t)&lt;br /&gt;
                                  (switch-to-buffer-other-window &amp;quot;*compilation*&amp;quot;)))))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now just run '''M-x compile''' as usual.&lt;br /&gt;
&lt;br /&gt;
=== Debug Adapter Protocol - dap-mode, LSP for debugging ===&lt;br /&gt;
&lt;br /&gt;
[https://emacs-lsp.github.io/dap-mode/ dap-mode] is a client/library for [https://microsoft.github.io/debug-adapter-protocol/ Debug Adapter Protocol], a wire protocol for communication between client and Debug Server. It's similar to the LSP but provides integration with debug server.&lt;br /&gt;
&lt;br /&gt;
You can set breakpoints in your code, step, evaluate statements, launch or attach to debugging sessions, etc. You can use '''dap-hydra''' to see the available actions.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Choose your docstring fill-paragraph style (M-q) ===&lt;br /&gt;
&lt;br /&gt;
If you call '''M-q''' (fill-paragraph) inside a Python docstring, Python-mode will format it following PEP-257: the first sentence  is on the same line with the opening quotes and a blank line is inserted before the closing quotes, like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
def foo():&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;My docstring.&lt;br /&gt;
&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   pass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perhaps you prefer the Django style:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
def foo():&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   My docstring.&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   pass&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make '''M-q''' respect the Django style, use this setting:&lt;br /&gt;
&lt;br /&gt;
    (setq python-fill-docstring-style 'django)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Insert Sphinx docstrings ===&lt;br /&gt;
&lt;br /&gt;
The package [https://github.com/naiquevin/sphinx-doc.el sphinx-doc] (on melpa) offers, with one shortuct, to insert ''or update'' Sphinx-like docstrings for the current method's arguments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eldoc: argument list in the echo area ===&lt;br /&gt;
&lt;br /&gt;
Eldoc is a MinorMode which shows you, in the echo area, the argument list of the function call you are currently writing. It works out of the box for elisp editing and for modes that implement its support, such as python-mode. You just have to call '''eldoc-mode'''.&lt;br /&gt;
&lt;br /&gt;
To always enable it:&lt;br /&gt;
&lt;br /&gt;
    (add-hook 'python-mode-hook 'eldoc-mode)&lt;br /&gt;
&lt;br /&gt;
=== Jedi: show the method signature, show documentation ===&lt;br /&gt;
&lt;br /&gt;
This pops up the function signature when you're between parentheses for a function call (not the default): '''M-x jedi:get-in-function-call'''.&lt;br /&gt;
&lt;br /&gt;
There is also '''M-x jedi:show-doc''' to show the docstring for the symbol at point in another window.&lt;br /&gt;
&lt;br /&gt;
See more in [https://jedi.readthedocs.io/en/latest/ the Jedi documentation].&lt;br /&gt;
&lt;br /&gt;
=== helm-pydoc ===&lt;br /&gt;
&lt;br /&gt;
'''helm-pydoc''' is a little utility that lets you interactively select a module you want read the doc and displays it in another buffer.&lt;br /&gt;
&lt;br /&gt;
=== pydoc linkification ===&lt;br /&gt;
&lt;br /&gt;
If you've ever used the emacs lisp documentation system, you may find that the pydoc is poorer in functionnalities:&lt;br /&gt;
* there is no direct link to code source&lt;br /&gt;
* there is no &amp;quot;back&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
John Kitchin's pydoc aims at fixing that with more enhancements, like a bit of source fontification. See more at [http://kitchingroup.cheme.cmu.edu/blog/2014/12/20/A-new-mode-for-Python-documentation/ his presentation] and [https://github.com/jkitchin/jmax/blob/master/pydoc.el on github].&lt;br /&gt;
&lt;br /&gt;
=== info format ===&lt;br /&gt;
&lt;br /&gt;
Another way to read the python documentation is in the texinfo format. You'll need to install the package '''python-info''' [http://melpa.org/#/python-info on MELPA] and go through [https://bitbucket.org/jonwaltman/pydoc-info/ the installation process].&lt;br /&gt;
&lt;br /&gt;
== Datascience ==&lt;br /&gt;
&lt;br /&gt;
=== the Scimax starter kit ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/jkitchin/scimax Scimax], a starter kit for scientists and engineers, for people interested in reproducible research and publishing. Scimax is just Emacs that has been configured extensively to make it act like we need it to for research documentation and publication. It provides a lot of customization of org-mode, improvements to bibliography, tools to send emails, manage a contacts database, evaluating code asynchronously, and more.&lt;br /&gt;
&lt;br /&gt;
=== Ipython / Jupyter notebooks ===&lt;br /&gt;
&lt;br /&gt;
You have [http://jupyter.org/ online Jupyter notebooks], also a [https://jupyter.org/qtconsole/ Qt console] and an [https://github.com/millejoh/emacs-ipython-notebook emacs ipython notebook] !&lt;br /&gt;
&lt;br /&gt;
Notebooks allow you to create and share documents that contain live code, equations, visualizations and explanatory text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, machine learning and much more. This is [https://nbviewer.jupyter.org/github/akittas/presentations/blob/master/pythess/func_py/func_py.ipynb an example of result]. You can [https://try.jupyter.org/ try it online].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:emacs-ipython.png||||the emacs ipython notebook, mixing and evaluating code, text and graphics]]&lt;br /&gt;
&lt;br /&gt;
=== lpy - eval a region, step through expressions ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abo-abo/lpy lpy] is a little tool that offers to:&lt;br /&gt;
&lt;br /&gt;
* press '''e''' in the right position (before an expression) to eval it,&lt;br /&gt;
* press '''j''' to go to the next expression&lt;br /&gt;
&lt;br /&gt;
and more ! It's a new tool in development (by a great developer, rest assured the doc will follow ! :p)&lt;br /&gt;
&lt;br /&gt;
You'll have to read its documented source. Lpy is actually is an attempt to implement a variant of [https://github.com/abo-abo/lispy lispy-mode]&lt;br /&gt;
for Python. Unfortunately,&lt;br /&gt;
Python isn't nearly as well-structured as LISP. But Python is&lt;br /&gt;
ubiquitous, and the less powerful `lpy-mode' is better than nothing&lt;br /&gt;
at all. The basic idea of `lpy-mode' is to increase the editing efficiency&lt;br /&gt;
by binding useful navigation, refactoring and evaluation commands&lt;br /&gt;
to unprefixed keys, e.g. &amp;quot;j&amp;quot; or &amp;quot;e&amp;quot;. But only in certain point&lt;br /&gt;
positions, so that you are still able to use uprefixed keys to&lt;br /&gt;
insert themselves.&lt;br /&gt;
Example, here &amp;quot;|&amp;quot; represents the point position:&lt;br /&gt;
&lt;br /&gt;
      print |(&amp;quot;2+2=%d&amp;quot; % (2 + 2))&lt;br /&gt;
&lt;br /&gt;
Here, if you press the key &amp;quot;e&amp;quot;, the whole line will be evaluated&lt;br /&gt;
and &amp;quot;2+2=4&amp;quot; will be printed in the Echo Area.&lt;br /&gt;
&lt;br /&gt;
=== Send the current paragraph to the REPL, go to the next paragraph ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;elisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun my-python-para-send-and-step ()&lt;br /&gt;
  &amp;quot;Sends the current paragraph to the python REPL and goes to the next one&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (mark-paragraph)&lt;br /&gt;
  (python-shell-send-region)&lt;br /&gt;
  (forward-paragraph))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Send code to the REPL (isend-mode, eval-in-repl) ===&lt;br /&gt;
&lt;br /&gt;
This is actually a default feature of python.el. See its menu to send a line or a region to the repl.&lt;br /&gt;
&lt;br /&gt;
Besides, [https://github.com/ffevotte/isend-mode.el isend-mode] (in MELPA) works with many languages and REPLs, and so does [https://github.com/kaz-yos/eval-in-repl eval-in-repl] (in MELPA). With the latter, just use '''C-RET'''.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/sriramkswamy/ryo-emacs/blob/master/config/sk-python.el sk's utilities for datascience]: several helper functions, similar to &amp;lt;code&amp;gt;ess-describe-object-at-point&amp;lt;/code&amp;gt;, to get the shape, type and sum of the symbol at point. It works very well for my needs and doesn't need any extra package - just the built-in python-mode. There are also keybindings setup to send various chunks of code.&lt;br /&gt;
&lt;br /&gt;
== Other tools ==&lt;br /&gt;
&lt;br /&gt;
=== Virtual environments ===&lt;br /&gt;
&lt;br /&gt;
Some tools allow to apply the changes of virtual environment activation inside emacs. They make '''M-x compile''' aware of the environment, etc.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/porterjamesj/virtualenvwrapper.el virtualenvwrapper] emulates much of the functionnality of '''virtualenvwrapper''', integrates well with '''M-x shell''' or '''eshell''', is aware of hooks, has an automatic activation by project and integrates in the mode line.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/jorgenschaefer/pyvenv pyvenv] sets the python path, uses virtualwrapper's hooks, ...&lt;br /&gt;
&lt;br /&gt;
=== Python versions (pyenv) ===&lt;br /&gt;
&lt;br /&gt;
We can change python versions with [https://github.com/proofit404/pyenv-mode pyenv-mode] (in melpa) and automatically when there is a .python-version file with [https://github.com/ssbb/pyenv-mode-auto pyenv-mode-auto].&lt;br /&gt;
&lt;br /&gt;
Once it's installed, we just have to switch with '''M-x pyenv-mode-set'''.&lt;br /&gt;
&lt;br /&gt;
=== Pymacs ===&lt;br /&gt;
&lt;br /&gt;
'''{{ModeLink|Pymacs}}''' is an Emacs extension that enables the use of Python alongside with Emacs Lisp.&lt;br /&gt;
&lt;br /&gt;
[http://pymacs.progiciels-bpi.ca/index.html Pymacs homepage]&lt;br /&gt;
&lt;br /&gt;
=== include import statements or remove unused ===&lt;br /&gt;
&lt;br /&gt;
[[Ropemacs]] (see above) is a plugin for performing python refactorings in emacs. It uses rope library and pymacs. It has '''rope-auto-import''', so if you write &lt;br /&gt;
&lt;br /&gt;
    rmtree&lt;br /&gt;
&lt;br /&gt;
and then execute {{Command|rope-auto-import}}, &lt;br /&gt;
&lt;br /&gt;
    from shutil import rmtree&lt;br /&gt;
&lt;br /&gt;
is inserted at the top of the file.&lt;br /&gt;
&lt;br /&gt;
Unfortunately Ropemacs can not do non-relative imports, it can only create imports of the &amp;quot;from X import Y&amp;quot; variety (if you type ''shutil.rmtree'' it doesn't write ''import shutil'').&lt;br /&gt;
&lt;br /&gt;
'''emacs-traad''' (see above) has a function '''traad-auto-import'''.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Wilfred/pyimport pyimport] can add import statements or remove the unused ones (with pyflakes).&lt;br /&gt;
&lt;br /&gt;
[http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring Elpy] too can import missing ones.&lt;br /&gt;
&lt;br /&gt;
See also [https://gitlab.com/emacs-stuff/python-import-add/ a snippet] to add many imports at once.&lt;br /&gt;
&lt;br /&gt;
=== Sort import statements ===&lt;br /&gt;
&lt;br /&gt;
See the '''py-isort''' [[Melpa]] package to automatically sort import statements.&lt;br /&gt;
&lt;br /&gt;
=== pip-requirements mode ===&lt;br /&gt;
&lt;br /&gt;
[http://melpa.org/#/pip-requirements pip-requirements] (in MELPA) is a major mode for editing pip requirements files, with the following features:&lt;br /&gt;
* syntax highlighting&lt;br /&gt;
* Auto completion of package names from PyPI&lt;br /&gt;
* togglable comments&lt;br /&gt;
&lt;br /&gt;
=== pip utilities ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/brotzeitmacher/pippel pippel] (in melpa) provides a similar package menu as &amp;quot;package-list-packages&amp;quot;, to list, install, upgrade, remove etc pip packages.&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/emacs-stuff/pip-utils pip-utils] (not in melpa) provides some functions with completion of packages and of the requirements files of the project:&lt;br /&gt;
&lt;br /&gt;
* choose one requirements file of the project if many and install its packages,&lt;br /&gt;
* chooses the right virtual env,&lt;br /&gt;
* install a new package and add it into a requirements file (with interactive choice, needed when there is a &amp;quot;dev-requirements&amp;quot; for instance),&lt;br /&gt;
* check the current package version (with pip freeze),&lt;br /&gt;
* open the package page on pypi.&lt;br /&gt;
&lt;br /&gt;
=== Code coverage with Python 3 ===&lt;br /&gt;
&lt;br /&gt;
There's a tool to highlight in real time the lines that are (not) covered by your unit tests. It's called [https://github.com/mattharrison/pycoverage.el pycoverage.el] and it is in [[melpa]].&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
&lt;br /&gt;
Let's put them on [[Python libraries]]. Hints to write Emacs packages for Python projects.&lt;br /&gt;
&lt;br /&gt;
== Screencasts ==&lt;br /&gt;
&lt;br /&gt;
These videos are of particular interest for Python development in Emacs:&lt;br /&gt;
&lt;br /&gt;
* [https://www.youtube.com/watch?v=JmmTUIahB1U Emacs, Pyright and Eglot make for an excellent Python IDE]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
You'll be certainly interested in the following packages (that you will find on [[ELPA]] or MELPA):&lt;br /&gt;
&lt;br /&gt;
=== '''Magit''', a git interface === &lt;br /&gt;
&lt;br /&gt;
Emacs + git is magic : see [[magit]]&lt;br /&gt;
&lt;br /&gt;
=== Code navigation: jump to function definitions ===&lt;br /&gt;
&lt;br /&gt;
Get started with [[imenu]] and '''helm-imenu''' (see [[helm]]).&lt;br /&gt;
&lt;br /&gt;
Then for cross-project code navigation see xcscope that answers questions like &amp;quot;show all methods that call this one&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See also '''grep''', '''rgrep''', '''occur''', [https://github.com/ShingoFukuyama/helm-swoop helm-swoop] (interactive grep of the current buffer) and enhanced grep tools like [https://github.com/Wilfred/ag.el ag] and its related helm-ag.&lt;br /&gt;
&lt;br /&gt;
=== Code navigation: move by indentation levels ===&lt;br /&gt;
&lt;br /&gt;
See [https://gitlab.com/emacs-stuff/indent-tools indent-tools] (in MELPA) that allows to move and fire actions by levels of indentation, for code source like Python or Yaml. For example: go to the next line that has the same indentation level, comment/kill/fold/… the current indentation level, the current paragraph, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:indent-tools.gif]]&lt;br /&gt;
&lt;br /&gt;
=== '''Yasnippet''', a template system ===&lt;br /&gt;
&lt;br /&gt;
[[yasnippet]]&lt;br /&gt;
&lt;br /&gt;
=== '''helm-pydoc''' to browse the documentation of installed packages and import one ===&lt;br /&gt;
&lt;br /&gt;
=== '''pungi''' to integrate jedi, virtualenv and buildout ===&lt;br /&gt;
&lt;br /&gt;
=== How to do code folding ===&lt;br /&gt;
&lt;br /&gt;
See [[folding]]&lt;br /&gt;
&lt;br /&gt;
=== other '''ELPA packages''' === &lt;br /&gt;
&lt;br /&gt;
If you're running Emacs with package support (usually Emacs 24 and later), check out what is available in [[ELPA]]:&lt;br /&gt;
; {{Command | list-packages}}  :  and see flymake-pyhon-pyflakes, flymake-shell, abl-mode (a python TDD minor-mode), nose (easy python test-running in emacs), visual-regexp / visual-regexp-steroids, python-magic and more.&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming languages]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User%27s_Initialization_File&amp;diff=50958</id>
		<title>User's Initialization File</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User%27s_Initialization_File&amp;diff=50958"/>
		<updated>2022-12-29T16:16:17Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Debugging the Init file */ add debug-on-message&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''User's Initialization File ''' or '''dotemacs''' or '''init file''' is a file to store your configurations/customizations for Emacs written&lt;br /&gt;
in [[Emacs Lisp]], located at either {{Filename|${HOME}/.emacs.d/init.el}} or (archaically) at {{Filename|${HOME}/.emacs}} or at {{Filename|%HOME%\_emacs}} on [[Windows| MS Windows]].&lt;br /&gt;
&lt;br /&gt;
The most reliable way to find our the place of the initialization file on your system is to check the value of the '''user-init-file''' variable. &lt;br /&gt;
&lt;br /&gt;
== Configuration Example ==&lt;br /&gt;
&lt;br /&gt;
For a good example of an init file check out some of the starter kits, like [[Prelude]].&lt;br /&gt;
&lt;br /&gt;
== Debugging the Init file ==&lt;br /&gt;
&lt;br /&gt;
=== Debug on init, debug on error ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ emacs --debug-init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running the above command will enable the Emacs Lisp debugger for errors in the init file.&lt;br /&gt;
&lt;br /&gt;
You can also use ''debug-on-error'' to get the debugger when an error occurs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq debug-on-error t)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identify what is causing an error message ===&lt;br /&gt;
&lt;br /&gt;
Sometimes you see an error message, for example &amp;quot;Package cl is deprecated&amp;quot;, but you can't find where it's coming from. Use ''debug-on-message'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq debug-on-message &amp;quot;Package cl is deprecated&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bug-hunter - dissect the init file for you ===&lt;br /&gt;
&lt;br /&gt;
A more advanced usage is to use [https://github.com/Malabarba/elisp-bug-hunter elisp's bug hunter]. It will find the source of the error for you. You can install it through [[ELPA]] and call it interactively:&lt;br /&gt;
&lt;br /&gt;
  M-x bug-hunter-init-file RET e&lt;br /&gt;
&lt;br /&gt;
So it will find easily where there's a parenthesis missing.&lt;br /&gt;
&lt;br /&gt;
=== Test what function is taking most CPU ===&lt;br /&gt;
&lt;br /&gt;
Use ''profiler.el'' to calculate and display the CPU profile of what Emacs functions take the most of the processing time.&lt;br /&gt;
&lt;br /&gt;
=== Test if your init file is ok without reloading emacs ===&lt;br /&gt;
&lt;br /&gt;
(see [http://oremacs.com/2015/03/05/testing-init-sanity/ this blog post])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun my-test-emacs ()&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (require 'async)&lt;br /&gt;
  (async-start&lt;br /&gt;
   (lambda () (shell-command-to-string&lt;br /&gt;
          &amp;quot;emacs --batch --eval \&amp;quot;&lt;br /&gt;
(condition-case e&lt;br /&gt;
    (progn&lt;br /&gt;
      (load \\\&amp;quot;~/.emacs.d/init.el\\\&amp;quot;)&lt;br /&gt;
      (message \\\&amp;quot;-OK-\\\&amp;quot;))&lt;br /&gt;
  (error&lt;br /&gt;
   (message \\\&amp;quot;ERROR!\\\&amp;quot;)&lt;br /&gt;
   (signal (car e) (cdr e))))\&amp;quot;&amp;quot;))&lt;br /&gt;
   `(lambda (output)&lt;br /&gt;
      (if (string-match &amp;quot;-OK-&amp;quot; output)&lt;br /&gt;
          (when ,(called-interactively-p 'any)&lt;br /&gt;
            (message &amp;quot;All is well&amp;quot;))&lt;br /&gt;
        (switch-to-buffer-other-window &amp;quot;*startup error*&amp;quot;)&lt;br /&gt;
        (delete-region (point-min) (point-max))&lt;br /&gt;
        (insert output)&lt;br /&gt;
        (search-backward &amp;quot;ERROR!&amp;quot;)))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to package your config and packages == &lt;br /&gt;
&lt;br /&gt;
Will come a moment when you want to duplicate your emacs configuration into another computer. And you realize that you rely on a lot of third party packages that you don't want to re-install manually ! So how can we package our config, along with all our packages ? There are some options.&lt;br /&gt;
&lt;br /&gt;
First you would obviously bundle everything into source control (except for a private file). Bitbucket and [https://gitlab.com Gitlab.com] offer private repos.&lt;br /&gt;
&lt;br /&gt;
You then must read the page on [[package.el]] to see a way to list all the packages you use.&lt;br /&gt;
&lt;br /&gt;
=== With Cask ===&lt;br /&gt;
&lt;br /&gt;
You can use [[Cask]] to manage all the dependencies. A Cask file lists them all, like&lt;br /&gt;
&lt;br /&gt;
    (depends-on &amp;quot;cask&amp;quot;)&lt;br /&gt;
    (depends-on &amp;quot;dash&amp;quot;)&lt;br /&gt;
    (depends-on &amp;quot;evil&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== With use-package ===&lt;br /&gt;
&lt;br /&gt;
'''Use-package''' (see below) is a macro that cleans emacs's configuration and speeds up its start up. We can use it also to manage our packages with [[package.el]]. See [https://github.com/jwiegley/use-package#for-packageel-users its documentation]. The relevant packages are downloaded automatically once declared in your .emacs. The '':ensure'' keyword causes the package(s) to be installed automatically if not already present on your system:&lt;br /&gt;
&lt;br /&gt;
  (use-package magit&lt;br /&gt;
   :ensure t)&lt;br /&gt;
&lt;br /&gt;
We can also choose prefered package sources (between GNU Elpa, Melpa-stable or Melpa), and more.&lt;br /&gt;
&lt;br /&gt;
=== With org-mode ===&lt;br /&gt;
&lt;br /&gt;
Some write their config in [[org-mode]] and load it with a call to org-babel, which is doable in one line in ~/.emacs.d/init.el: &lt;br /&gt;
&lt;br /&gt;
    (require 'org)&lt;br /&gt;
    (require 'ob-tangle)&lt;br /&gt;
    (org-babel-load-file (expand-file-name &amp;quot;~/.emacs.d/myemacs.org&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/noahfrederick/dots/tree/master/emacs.d an example config with Cask and org-mode].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
some split it in multiple elisp files, some keep it in one big file.&lt;br /&gt;
&lt;br /&gt;
Finally, to speed up the installation and ensure the same environment, you can also commit the pckages installed with package.el.&lt;br /&gt;
&lt;br /&gt;
You can take inspiration from [[Starter Kits]].&lt;br /&gt;
&lt;br /&gt;
== Speed up Emacs's start up ==&lt;br /&gt;
&lt;br /&gt;
=== Use-package ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jwiegley/use-package Use-package] is a macro that allows you to isolate package configuration in your .emacs file in a way that is both performance-oriented and, well, tidy. The author created it because he has over 80 packages that he uses in Emacs, and things were getting difficult to manage. Yet with this utility his total load time is around 2 seconds, with no loss of functionality. The key point is that it loads packages lazily. So your emacs starts up, you can start using it, and the longest loadings are done in the background.&lt;br /&gt;
&lt;br /&gt;
The simplest ''use-package'' declaration looks like this:&lt;br /&gt;
&lt;br /&gt;
  (use-package foo)&lt;br /&gt;
&lt;br /&gt;
This loads in the package foo, but only if foo is available on your system.&lt;br /&gt;
&lt;br /&gt;
Then we have keywords to add functionality. We can call code before and after a package is loaded ('':init'' and '':conf''), '':bind'' keybindings, do conditional loading, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Prelude]], a much more powerful and productive set of initial configuration than the one you get out of the box.&lt;br /&gt;
* [[Emacs Starter Kit]]&lt;br /&gt;
* [[package.el]], the built-in package manager in Emacs 24.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* {{Manual|emacs|Init-File|The Init File}}&lt;br /&gt;
* [http://ola-bini.blogspot.com/2008/05/how-large-is-your-emacs.html How Large is Your .emacs?]&lt;br /&gt;
&lt;br /&gt;
[[Category:Customization]]&lt;br /&gt;
[[Category:Key Concepts]]&lt;br /&gt;
[[Category:Debug]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Elscreen&amp;diff=50957</id>
		<title>Elscreen</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Elscreen&amp;diff=50957"/>
		<updated>2022-12-01T12:43:48Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Configuration */ how to hide elscreen tabs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{Package&lt;br /&gt;
|name=elscreen.el&lt;br /&gt;
|description=Emacs window session manager&lt;br /&gt;
|author=&lt;br /&gt;
|maintainer=NaotoMorishima&lt;br /&gt;
|source=https://github.com/shosti/elscreen&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Emacs Lisp screen''' is a tabbed window session manager modeled after [http://www.gnu.org/software/screen/ GNU screen]. &lt;br /&gt;
&lt;br /&gt;
GNU Emacs is more of an “environment” than just an editor, since it has the strong configuration language, emacs-lisp. There are a lot of applications written in emacs-lisp, and you may run many applications on your Emacs at the same time, i.e. e-mail reader, news reader, IRC client, a kind of IDE, etc. These applications likely consist of two or more windows, so when you switch among applications, you may want to save or restore how windows are located (this is called as “window-configuration”). &lt;br /&gt;
Note that for managing multiple buffers, you may want to use something else, like [[ido]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
== With el-get ==&lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : {{Command|el-get-install RET elscreen}}, and done.&lt;br /&gt;
&lt;br /&gt;
== From sources ==&lt;br /&gt;
&lt;br /&gt;
Download it at http://www.morishima.net/~naoto/elscreen-en/?lang=en&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Basic usage =&lt;br /&gt;
&lt;br /&gt;
Click on the menu or type {{CommandKeys| C-z ?| elscreen-help}} to see full help.&lt;br /&gt;
The prefix key of elscreen is '''C-z'''.&lt;br /&gt;
&lt;br /&gt;
== Screen creation ==&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-z C-c|elscreen-create}}&lt;br /&gt;
: create a new screen and switch to it.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-z C|elscreen-clone &amp;amp;optional SCREEN}} &lt;br /&gt;
: create a new screen with the window-configuration of SCREEN. If SCREEN is omitted, current screen is used.&lt;br /&gt;
&lt;br /&gt;
== Navigation ==&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-z p|elscreen-previous}}&lt;br /&gt;
:  switch to the previous screen. 'n' will go to next.&lt;br /&gt;
&lt;br /&gt;
== Suspend emacs ==&lt;br /&gt;
&lt;br /&gt;
'''C-z''' is the prefix key, but you still can iconify emacs with '''C-x C-z'''. (see C-h w iconify-or-deiconify)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
== Change prefix key ==&lt;br /&gt;
This variable must be set before elscreen is loaded :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq elscreen-prefix-key “\C-z”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
alternatively, you can change it when elscreen is loaded :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
 (elscreen-set-prefix-key &amp;quot;\C-t&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Change keys to change tabs ==&lt;br /&gt;
&lt;br /&gt;
Add into your &amp;lt;code&amp;gt;~/.emacs&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(global-set-key (kbd &amp;quot;&amp;lt;C-prior&amp;gt;&amp;quot;) 'elscreen-previous)&lt;br /&gt;
(global-set-key (kbd &amp;quot;&amp;lt;C-next&amp;gt;&amp;quot;) 'elscreen-next)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if you want to use &amp;lt;code&amp;gt;Ctrl-tab&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Ctrl-shift-tab&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;emacs-lisp&amp;quot;&amp;gt;&lt;br /&gt;
(global-set-key (kbd &amp;quot;&amp;lt;C-tab&amp;gt;&amp;quot;) 'elscreen-next) ;; except in org&lt;br /&gt;
(global-set-key (kbd &amp;quot;&amp;lt;C-iso-lefttab&amp;gt;&amp;quot;) 'elscreen-previous)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Give each screen its own buffer-list ==&lt;br /&gt;
&lt;br /&gt;
You may want to have each screen its own independent buffer list (i.e. most recently used buffer orders).&lt;br /&gt;
Give a try to '''[http://www.emacswiki.org/emacs/ElscreenSeparateBufferLists elscreen-buffer-list]'''.&lt;br /&gt;
You can install it with [[el-get]].&lt;br /&gt;
&lt;br /&gt;
== Persistent screens accross sessions ==&lt;br /&gt;
&lt;br /&gt;
This is easily achievable with the [http://melpa.org/#/elscreen-persist elscreen-persist] package on MELPA. To use it, you can either enable a mode, which will do the job automatically, either manually  call a function to store and restore your current screens.&lt;br /&gt;
&lt;br /&gt;
== Hide the tabs ==&lt;br /&gt;
&lt;br /&gt;
You can actually use elscreen without the tabs that appear at the top:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;gt;&lt;br /&gt;
(setf elscreen-display-tab nil)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Use a hydra ==&lt;br /&gt;
&lt;br /&gt;
Here's an example [https://github.com/abo-abo/hydra/wiki hydra] to manipulate elscreens:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(defhydra hydra-elscreen (:color red :hint nil)&lt;br /&gt;
         &amp;quot;&lt;br /&gt;
elscreen&lt;br /&gt;
_c_reate    _n_ext     _s_tore&lt;br /&gt;
_k_ill      _p_revious _r_estore&lt;br /&gt;
_C_lone     _g_oto&amp;quot;&lt;br /&gt;
         (&amp;quot;c&amp;quot; elscreen-create)&lt;br /&gt;
         (&amp;quot;C&amp;quot; elscreen-clone)&lt;br /&gt;
         (&amp;quot;k&amp;quot; elscreen-kill)&lt;br /&gt;
         (&amp;quot;n&amp;quot; elscreen-next)&lt;br /&gt;
         (&amp;quot;p&amp;quot; elscreen-previous)&lt;br /&gt;
         (&amp;quot;s&amp;quot; elscreen-store)&lt;br /&gt;
         (&amp;quot;r&amp;quot; elscreen-restore)&lt;br /&gt;
         (&amp;quot;g&amp;quot; elscreen-goto)&lt;br /&gt;
         )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
== Eyebrowse ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/wasamasa/eyebrowse Eyebrowse] aims to be more feature complete and bug free. By the prolific Wasamasa.&lt;br /&gt;
&lt;br /&gt;
== Centaur tabs ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ema2159/centaur-tabs centaur-tabs] is an aesthetic, functional and efficient tabs plugin for Emacs with a lot of customization options.&lt;br /&gt;
&lt;br /&gt;
== Escreen, an alternative ==&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/emacsmirror/escreen its github mirror].&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EmacsLispScreen&lt;br /&gt;
&lt;br /&gt;
== Separate buffers per projects ==&lt;br /&gt;
&lt;br /&gt;
with [https://github.com/nex3/perspective-el perspective-el].&lt;br /&gt;
&lt;br /&gt;
== elscreen-multi-term: manage a term per screen ==&lt;br /&gt;
&lt;br /&gt;
See [http://wikemacs.org/wiki/Shell#elscreen-multi-term this wiki entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-------------------------------------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;!-- Add categories based on user-level (beginner etc), user-role (programming, emacs contributor etc), platform (windows, linux etc), work flow (text editing, document authoring etc) or package type (built-in or third party) --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Third Party Package]][[Category:session manager]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Convenience]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50956</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50956"/>
		<updated>2022-07-19T14:25:54Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Sort files */ add dired-quick-sort, sort by size \o/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Dired+]] offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/xuhdev/dired-quick-sort dired-quick-sort], in Melpa, provides persistent quick sorting of Dired buffers, with the help of a [[Hydra]] menu. In a keystroke, we can choose if we want to sort the current Dired buffer by size, time, extension, in reverse order or not, by grouping directories or not, and what time access of files to consider (last modified time, atime, ctime…).&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== Drag and drop (Emacs 29) ==&lt;br /&gt;
&lt;br /&gt;
Emacs 29 comes with the ability to drag marked files in Dired and drop them anywhere else. &lt;br /&gt;
&lt;br /&gt;
Set this variable to t:&lt;br /&gt;
&lt;br /&gt;
    (setq dired-mouse-drag-files t)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
'''file-tree''' offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
[[File:Filetree.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Dirvish - a polished Dired with batteries included ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexluigit/dirvish Dirvish] is an improved version of Dired. It extends its interface with a three panes layout, offers preview of files, including of images, has nice user menus, etc. It can be used as a modern file manager, and yet it remains Dired at its core.&lt;br /&gt;
&lt;br /&gt;
[[File:Dirvish.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50955</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50955"/>
		<updated>2022-07-18T09:32:55Z</updated>

		<summary type="html">&lt;p&gt;Elvince: drag and drop in Emacs 29&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== Drag and drop (Emacs 29) ==&lt;br /&gt;
&lt;br /&gt;
Emacs 29 comes with the ability to drag marked files in Dired and drop them anywhere else. &lt;br /&gt;
&lt;br /&gt;
Set this variable to t:&lt;br /&gt;
&lt;br /&gt;
    (setq dired-mouse-drag-files t)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
'''file-tree''' offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
[[File:Filetree.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Dirvish - a polished Dired with batteries included ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexluigit/dirvish Dirvish] is an improved version of Dired. It extends its interface with a three panes layout, offers preview of files, including of images, has nice user menus, etc. It can be used as a modern file manager, and yet it remains Dired at its core.&lt;br /&gt;
&lt;br /&gt;
[[File:Dirvish.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50954</id>
		<title>File:Dirvish.png</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50954"/>
		<updated>2022-07-18T08:25:43Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Elvince uploaded a new version of File:Dirvish.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Dirvish with the modus-vivendi theme&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50953</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50953"/>
		<updated>2022-07-17T22:56:04Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Dirvish - a polished Dired with batteries included */ add image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
'''file-tree''' offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
[[File:Filetree.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Dirvish - a polished Dired with batteries included ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexluigit/dirvish Dirvish] is an improved version of Dired. It extends its interface with a three panes layout, offers preview of files, including of images, has nice user menus, etc. It can be used as a modern file manager, and yet it remains Dired at its core.&lt;br /&gt;
&lt;br /&gt;
[[File:Dirvish.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50952</id>
		<title>File:Dirvish.png</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50952"/>
		<updated>2022-07-17T22:55:35Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Elvince uploaded a new version of File:Dirvish.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Dirvish with the modus-vivendi theme&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50951</id>
		<title>File:Dirvish.png</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Dirvish.png&amp;diff=50951"/>
		<updated>2022-07-17T22:53:43Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Dirvish with the modus-vivendi theme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Dirvish with the modus-vivendi theme&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50950</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50950"/>
		<updated>2022-07-17T22:52:19Z</updated>

		<summary type="html">&lt;p&gt;Elvince: add Dirvish&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
'''file-tree''' offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
[[File:Filetree.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Dirvish - a polished Dired with batteries included ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexluigit/dirvish Dirvish] is an improved version of Dired. It extends its interface with a three panes layout, offers preview of files, including of images, has nice user menus, etc. It can be used as a modern file manager, and yet it remains Dired at its core.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Media_player&amp;diff=50949</id>
		<title>Media player</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Media_player&amp;diff=50949"/>
		<updated>2022-07-01T08:02:52Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* Mpg123 */ is broken on Emacs 27 :( so long.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are the available media players for Emacs ?&lt;br /&gt;
&lt;br /&gt;
= EMMS =&lt;br /&gt;
&lt;br /&gt;
EMMS, The Emacs Multimedia System.&lt;br /&gt;
&lt;br /&gt;
[https://www.gnu.org/software/emms/manual/ EMMS] is the Emacs Multimedia System. It tries to be a clean and small application to play multimedia files from Emacs using external players. Many of its ideas are derived from MpthreePlayer , but it tries to be more general and cleaner.&lt;br /&gt;
&lt;br /&gt;
The fact that EMMS is based on external players makes it powerful, because it supports all formats that those players support, with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Audio support : MP3, Ogg Vorbis, FLAC&lt;br /&gt;
* Video support : MPEG, WMV, MOV, AVI, OGM, MKV, etc...&lt;br /&gt;
* Tagging capability, possibly batched&lt;br /&gt;
* Playlist management&lt;br /&gt;
* Remotely drivable via emacsclient (playlist creation via rox-filer, for example)&lt;br /&gt;
* covers display&lt;br /&gt;
* Dired integration&lt;br /&gt;
* interactive metadata browser&lt;br /&gt;
* synchronized lyrics display&lt;br /&gt;
* connection to GNU FM radio streams&lt;br /&gt;
* Extensible&lt;br /&gt;
&lt;br /&gt;
[[File:emms-covers.png|600px|the emms multimedia player showing covers]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Install the needed packages with the package manager of your system :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install emms vorbis-tools&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(you may also try with [http://wikemacs.org/wiki/El-get el-get].)&lt;br /&gt;
&lt;br /&gt;
add the following to your ~/.emacs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(require 'emms-setup)&lt;br /&gt;
          (emms-all)&lt;br /&gt;
          (emms-default-players)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
and, as usual, restart emacs or ''M-x eval-current-buffer RET''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
You can play a file or a directory with the command ''M-x emms-play-file'' or ''emms-play-directory''.&lt;br /&gt;
&lt;br /&gt;
You can add files and directories to the emms playlist (which will be created if it doesn't exist yet) with ''M-x emms-add-file'', play it with emms-start and you can '''visit the playlist buffer''' by simply calling '''M-x emms RET'''. Hitting '?' in the playlist buffer will show you all the available shortcuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add other file extensions === &lt;br /&gt;
&lt;br /&gt;
If you want to, say, be able to '''read flv videos''' :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; add flv and ogv&lt;br /&gt;
(define-emms-simple-player mplayer '(file url)&lt;br /&gt;
      (regexp-opt '(&amp;quot;.ogg&amp;quot; &amp;quot;.mp3&amp;quot; &amp;quot;.wav&amp;quot; &amp;quot;.mpg&amp;quot; &amp;quot;.mpeg&amp;quot; &amp;quot;.wmv&amp;quot; &amp;quot;.wma&amp;quot;&lt;br /&gt;
                    &amp;quot;.mov&amp;quot; &amp;quot;.avi&amp;quot; &amp;quot;.divx&amp;quot; &amp;quot;.ogm&amp;quot; &amp;quot;.asf&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;http://&amp;quot; &amp;quot;mms://&amp;quot;&lt;br /&gt;
                    &amp;quot;.rm&amp;quot; &amp;quot;.rmvb&amp;quot; &amp;quot;.mp4&amp;quot; &amp;quot;.flac&amp;quot; &amp;quot;.vob&amp;quot; &amp;quot;.m4a&amp;quot; &amp;quot;.flv&amp;quot; &amp;quot;.ogv&amp;quot; &amp;quot;.pls&amp;quot;))&lt;br /&gt;
      &amp;quot;mplayer&amp;quot; &amp;quot;-slave&amp;quot; &amp;quot;-quiet&amp;quot; &amp;quot;-really-quiet&amp;quot; &amp;quot;-fullscreen&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Get lyrics of current song ===&lt;br /&gt;
&lt;br /&gt;
We have to install '''emms-get-lyrics.el'''. &lt;br /&gt;
&lt;br /&gt;
With [[el-get]] : '''el-get-install RET emms-get-lyrics RET'''.&lt;br /&gt;
&lt;br /&gt;
Or :&lt;br /&gt;
* save https://raw.github.com/talau/elisp/master/emms-get-lyrics.el in your ~/.emacs.d/my-extensions&lt;br /&gt;
* be sure you have [[emacs-w3m]] installed&lt;br /&gt;
* add those two lines in your ~/.emacs :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs.d/my-extensions/&amp;quot;)&lt;br /&gt;
(require 'emms-get-lyrics)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* {{Command|evaluate-current-buffer}}&lt;br /&gt;
&lt;br /&gt;
Then start playing a song and call {{Command|emms-get-lyrics-current-song}}.&lt;br /&gt;
&lt;br /&gt;
Excerpt from its documentation :&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The function 'emms-get-lyrics-current-song' tries to get the lyrics&lt;br /&gt;
of the song that emms is currently playing [from http://www.lyricwiki.org/].  It currently requires&lt;br /&gt;
w3m to get the lyrics.  It copies the lyrics to a file ending in&lt;br /&gt;
.lyrics; if the variable `emms-get-lyrics-use-files' is nil, it&lt;br /&gt;
will just display the lyrics in a buffer without saving them to a&lt;br /&gt;
file.  If the variable `emms-get-lyrics-dir' is non-nil, then the&lt;br /&gt;
lyrics will be put in this directory with the file&lt;br /&gt;
ARTIST-TITLE.lyrics; otherwise it will be put in the same directory&lt;br /&gt;
as the song file, in a file with the same name as the song file&lt;br /&gt;
except the extension will by &amp;quot;.lyrics&amp;quot;.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links == &lt;br /&gt;
&lt;br /&gt;
The official documentation: https://www.gnu.org/software/emms/manual/&lt;br /&gt;
&lt;br /&gt;
http://www.emacswiki.org/emacs/EMMS&lt;br /&gt;
&lt;br /&gt;
http://www.gnewsense.org/Documentation/Emacs#Listening_to_Music an easy tutorial to begin with.&lt;br /&gt;
&lt;br /&gt;
= Bongo =&lt;br /&gt;
&lt;br /&gt;
Bongo is a beautiful, flexible and usable buffer-oriented media player for Emacs, developed in parallel to EMMS 2.0. If you store your music collection locally and use structured file names, then Bongo is a great way for you to play music from within Emacs.&lt;br /&gt;
&lt;br /&gt;
Notable features of Bongo include :&lt;br /&gt;
&lt;br /&gt;
*    separate playlist and library buffers (each of which you may have any number — even zero of both is okay if you don’t need playlist functionality),&lt;br /&gt;
*    hierarchical buffers with collapsable sections for each artist and album,&lt;br /&gt;
*    familiar Emacs bindings for editing Bongo buffers (edit playlists much like you would regular text),&lt;br /&gt;
*    a nice visual seeking interface doubling as a progress meter (hit ‘s’),&lt;br /&gt;
*    a visual audio volume control (Volume, which is actually a stand-alone package),&lt;br /&gt;
*    built-in support for playing and retreiving information about audio CDs,&lt;br /&gt;
*    built-in support for submitting information to Last.fm using ‘lastfmsubmitd’,&lt;br /&gt;
*    the ability to perform arbitrary actions (stopping playback is a simple example) once playback reaches certain points in the playlist, using so-called “action tracks”,&lt;br /&gt;
*    an XMMS-like keymap for XMMS refugees,&lt;br /&gt;
*    zero-configuration, out-of-the-box rock’n’roll action.&lt;br /&gt;
&lt;br /&gt;
Bongo woks with many backend processes : mpg123, mplayer, vlc, ogg123, timidity and others.&lt;br /&gt;
&lt;br /&gt;
An advantage of Bongo over EMMS may be that it can hook into Dired, so one would sort and manage files in Dired and press '''e''' to add a track to the playlist.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
There is no el-get recipe for bongo (is there for MELPA in emacs24 ?). You have to install it from git. It is a 3 steps process :&lt;br /&gt;
&lt;br /&gt;
* go to where you want to put the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/.emacs.d/your-extensions&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* retrieve the sources :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://github.com/dbrock/bongo.git&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add the Bongo directory to your ‘load-path’, and then run {{Command|load-library RET bongo RET}}. Here’s what you’ll want to put in your ~/.emacs:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
;; Change this to the correct directory name for you.&lt;br /&gt;
(add-to-list 'load-path &amp;quot;~/.emacs/your-extensions/bongo&amp;quot;)&lt;br /&gt;
(autoload 'bongo &amp;quot;bongo&amp;quot;&lt;br /&gt;
  &amp;quot;Start Bongo by switching to a Bongo buffer.&amp;quot; t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Run Bongo with (have a guess) {{Command|bongo}} and you'll be left with a quite explicit buffer. To learn more commands, please notice the menu entry and see the documentation at the project's page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [here a nice Bongo logo]&lt;br /&gt;
&lt;br /&gt;
  Welcome to Bongo, the buffer-oriented media player!&lt;br /&gt;
&lt;br /&gt;
  This is a Bongo library buffer.  It's empty now, but in a&lt;br /&gt;
  few moments it could hold your entire media collection ---&lt;br /&gt;
  or just the parts that you are currently interested in.&lt;br /&gt;
&lt;br /&gt;
  To insert local media files or directories, use `i'.&lt;br /&gt;
  To insert the URL of a media file or stream, use `I u RET'.&lt;br /&gt;
  To insert other things, use `I TAB' to list possibilities.&lt;br /&gt;
&lt;br /&gt;
  To enqueue tracks in the nearest playlist buffer, use `e'.&lt;br /&gt;
  To hop to the nearest playlist buffer, use `h'.&lt;br /&gt;
&lt;br /&gt;
  Enabled backends: mpg123, mplayer, ogg123&lt;br /&gt;
  To modify this list, customize `bongo-enabled-backends'.&lt;br /&gt;
&lt;br /&gt;
  Bongo is free software licensed under the GNU GPL.&lt;br /&gt;
  Report bugs to &amp;lt;bongo-devel@nongnu.org&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, you're going to switch between a '''library buffer''' and a '''playlist buffer'''. You have to add tracks to the library, as indicated. Then you can start playing a track (enter). This adds the track on the playlist buffer. You can switch between buffers with '''h'''. &lt;br /&gt;
&lt;br /&gt;
When on the library buffer, to add a track to the end of the playlist, press '''e'''. To add it at the beginning, press '''E'''.&lt;br /&gt;
&lt;br /&gt;
* Pause playback : SPC&lt;br /&gt;
* Stop playback : '''C-c C-s'''&lt;br /&gt;
&lt;br /&gt;
== Getting further ==&lt;br /&gt;
&lt;br /&gt;
Check the good documentation on the project's page :&lt;br /&gt;
https://github.com/dbrock/bongo&lt;br /&gt;
&lt;br /&gt;
== Play radio ==&lt;br /&gt;
&lt;br /&gt;
Bongo can read online streams out of the box. As said in the buffer, press '''i''' and paste your stream's url. &lt;br /&gt;
&lt;br /&gt;
== Remote control ==&lt;br /&gt;
&lt;br /&gt;
Use '''bongo-pause/resume''', '''bongo-next''' and '''bongo-previous''' and couple them with [http://wikemacs.org/wiki/Emacs_server EmacsServer]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
emacsclient -e '(bongo-pause/resume)'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Can't play tracks continuously ===&lt;br /&gt;
&lt;br /&gt;
If Bongo plays a track and stops, try only enabling the mplayer backend only:&lt;br /&gt;
&lt;br /&gt;
    (setq-default bongo-enabled-backends '(mplayer))&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Official site : https://github.com/dbrock/bongo&lt;br /&gt;
Some hacks : http://www.emacswiki.org/emacs/BongoHacks (edit tags, add files from dired,…)&lt;br /&gt;
&lt;br /&gt;
= mpdel, a client to MPD =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mpdel/mpdel/tree/e09904bf31ed465ea93ef2c165e8a6f705229f57 MPDel] is an emacs client for the Music Player Daemon. MPDel provides an Emacs user interface to control playback (play, pause, next, volume up…) and to display and control the current playlist as well as your stored playlists (e.g., “my favorites”, “wake me up”, “make me dance”, …).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Dionysos music player=&lt;br /&gt;
&lt;br /&gt;
[https://github.com/nlamirault/dionysos Dionysos] (in melpa) is a music player which accepts as backends mpv, mpd and vlc.&lt;br /&gt;
&lt;br /&gt;
= Vuiet =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mihaiolteanu/vuiet Vuiet] is a music player and explorer, with recommendations based on Lastfm or Spotify. It can:&lt;br /&gt;
&lt;br /&gt;
* search songs and artists&lt;br /&gt;
* create playlists, including '''smart playlists''' which play songs indefinitely based on criteria&lt;br /&gt;
* explore artists and genres with Lastfm&lt;br /&gt;
* search tracks on '''youtube''' and play them with mpv&lt;br /&gt;
* display and save '''lyrics'''&lt;br /&gt;
* search inside the saved lyrics&lt;br /&gt;
&lt;br /&gt;
[[Category:Entertainment]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:Ray_Kuo&amp;diff=50948</id>
		<title>User talk:Ray Kuo</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:Ray_Kuo&amp;diff=50948"/>
		<updated>2022-04-21T22:02:07Z</updated>

		<summary type="html">&lt;p&gt;Elvince: hello&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello new Wikemacs user! We are are not a big tribe here, but we're nice. You can watch the RSS feed to watch all changes to the site. &lt;br /&gt;
Is there something specific you wanted to do?&lt;br /&gt;
I think Wikemacs is great for tutorials (see the Elisp ones) and pages that sum up a lot of stuff (Git, Python, Dired…).&lt;br /&gt;
See you around o/ [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 18:02, 21 April 2022 (EDT)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=GNU_Emacs_28&amp;diff=50947</id>
		<title>GNU Emacs 28</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=GNU_Emacs_28&amp;diff=50947"/>
		<updated>2022-04-06T10:23:46Z</updated>

		<summary type="html">&lt;p&gt;Elvince: release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.gnu.org/software/emacs/#Releases&lt;br /&gt;
&lt;br /&gt;
https://www.gnu.org/software/emacs/news/NEWS.28.1&lt;br /&gt;
&lt;br /&gt;
https://www.masteringemacs.org/article/whats-new-in-emacs-28-1&lt;br /&gt;
&lt;br /&gt;
= What's new in Emacs 28 =&lt;br /&gt;
&lt;br /&gt;
Emacs 28.1 has a wide variety of new features, including:&lt;br /&gt;
&lt;br /&gt;
* Native compilation of Lisp files&lt;br /&gt;
* Text shaping with HarfBuzz and drawing with Cairo&lt;br /&gt;
* Support for loading Secure Computing filters&lt;br /&gt;
* Much improved display of Emoji and Emoji sequences&lt;br /&gt;
* New system for documenting groups of functions&lt;br /&gt;
* A minor mode for context menus&lt;br /&gt;
* Mode-specific commands&lt;br /&gt;
* Emacs shows matching parentheses by default&lt;br /&gt;
* Many improvements and extensions to project.el&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Main_Page&amp;diff=50946</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Main_Page&amp;diff=50946"/>
		<updated>2022-04-06T10:18:11Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Emacs 28.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WikEmacs''' is here to stay.  Spread the word!&lt;br /&gt;
&lt;br /&gt;
[[File:Emacs_parts.png|320px|thumb|right|Basic [[Emacs Terminology|terminology]] of typical Emacs GUI Frame]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
'''First time visitors''' can start [[#Explore WikEmacs|exploring WikEmacs]]. We have added lots of useful pages since the launch of WikEmacs.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
We need more '''[[:Category:WikEmacs Contributor|WikEmacs contributors]]'''.  You can help the following way.&lt;br /&gt;
&lt;br /&gt;
{{Note| First of all, please take a minute to look at the&lt;br /&gt;
[[WikEmacs:Guidelines|WikEmacs guidelines]] before you start editing.}}&lt;br /&gt;
&lt;br /&gt;
* Priority tasks&lt;br /&gt;
** Add content. Please adopt the following approach - ''I found this on the web which was helpful. But it took me a lot of time to find it. Now that I have found it, I will put it in WikEmacs so that others can benefit from it''. You can start by documenting Emacs' support of your favorite programming language. &lt;br /&gt;
* Intermediate tasks&lt;br /&gt;
** Provide tutorials or content for the [[:Category:Popular Package|popular packages]] or [[:Category:Built-in Package|built-in packages]].&lt;br /&gt;
** Add more content to [[Special:ShortPages|short pages]].&lt;br /&gt;
** Document or add more [[:Category:Third Party Package|third party packages]].&lt;br /&gt;
* Other tasks&lt;br /&gt;
** Copy edit [[Special:RecentChanges|recent changes]] or be a moral police.&lt;br /&gt;
** Add more members to various [[Special:Categories|categories]].&lt;br /&gt;
** Categorize one of these pages [[Special:UncategorizedPages|uncategorized pages]].&lt;br /&gt;
** Follow the [http://wikemacs.org/api.php?hidebots=1&amp;amp;days=7&amp;amp;limit=50&amp;amp;action=feedrecentchanges&amp;amp;feedformat=atom RSS feed] to watch edits, new users and help fighting vandalism (fortunately quite low).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''Emacs News'''&lt;br /&gt;
&lt;br /&gt;
The latest stable release of Emacs is [[GNU Emacs 28|Emacs-28.1]] released on April 4th, 2022. The precedent is [[GNU Emacs 27|Emacs-27.2]].&lt;br /&gt;
&lt;br /&gt;
Emacs is available on all popular [[:Category:Install Or Upgrade| operating systems]] including [[Installing Emacs on BSD |BSD]], [[Installing Emacs on GNU/Linux | GNU/Linux]], [[Installing Emacs on OS X | OS X]] and [[Installing Emacs on Windows| Windows]].  It supports a variety of [[:Category:Programming languages|programming languages]].&lt;br /&gt;
&amp;lt;!-- Left hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
== Explore WikEmacs ==&lt;br /&gt;
&lt;br /&gt;
To explore WikEmacs proceed as follows:&lt;br /&gt;
* Search for or visit a page of interest&lt;br /&gt;
* At the end of the page, there is a list of categories&lt;br /&gt;
* Click on individual categories and it will give you a list of all pages that will be of interest to you.&lt;br /&gt;
&lt;br /&gt;
===  What is your comfort level with Emacs? ===&lt;br /&gt;
* [[:Category:Beginner|Beginner]]&lt;br /&gt;
* [[:Category:Intermediate|Intermediate]]&lt;br /&gt;
* [[:Category:Expert|Expert]]&lt;br /&gt;
** Are you a maintainer of a [[:Category:Built-in Package|Built-in Package]]? If you don't find information about your package, please add it. No one else can write about your package as well as you.&lt;br /&gt;
** Have you developed any [[:Category:Third Party Package|Third Party Package]]s? Consider writing about what it is and how to use it.&lt;br /&gt;
* [[:Category:Vim User|Vim User]]&lt;br /&gt;
&lt;br /&gt;
=== What do you want to accomplish now? ===&lt;br /&gt;
* [[:Category:Install Or Upgrade|Install Or Upgrade]]&lt;br /&gt;
* [[:Category:Customization|Customize Emacs]]&lt;br /&gt;
* [[Key Bindings|Tweak Key Bindings]]&lt;br /&gt;
* [[:Category:Tutorial|Learn more Emacs (Tutorials)]]&lt;br /&gt;
* [[:Category:Emacs Lisp|Learn Emacs Lisp]]&lt;br /&gt;
&lt;br /&gt;
=== What do you use Emacs for? ===&lt;br /&gt;
* [[:Category:Text Editing|Text Editing]]&lt;br /&gt;
* [[:Category:Programming|Programming]]&lt;br /&gt;
* [[:Category:Document authoring|Document authoring]]&lt;br /&gt;
* [[:Category:Organizer|Getting Organized]]&lt;br /&gt;
* [[:Category:Email|Emailing]]&lt;br /&gt;
* [[:Category:Chat|Chatting]]&lt;br /&gt;
* [[:Category:Blog|Blogging]]&lt;br /&gt;
* [[:Category:Browse|Browsing]] &lt;br /&gt;
* [[:Category:Entertainment|Entertainment]]&lt;br /&gt;
* [[:Category:Workflow|Other]]&lt;br /&gt;
&lt;br /&gt;
=== How do you involve yourself with the community? ===&lt;br /&gt;
* [[:Category:Emacs User|Emacs User]]&lt;br /&gt;
* [[:Category:Emacs Contributor|Emacs Contributor]]&lt;br /&gt;
* [[:Category:WikEmacs Contributor|WikEmacs Contributor]]&lt;br /&gt;
* [[Financial_Support|Financial Supporter]]&lt;br /&gt;
* [[:Category:User Role|Other]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Right hand column --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Help build WikEmacs==&lt;br /&gt;
&lt;br /&gt;
The following are suggestions for articles to write, along with the page of the GNU Emacs manual which documents this feature.  ('''Note:''' it's possible that an article for a given topic exists already under a different name.  In that case, please ensure that the article includes the link to the manual page, and then remove the topic from this list.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Not finished.  I grabbed ideas from large section titles of the manual, but there are many more in the &amp;quot;Detailed Node Listing&amp;quot;, longer version of the table of contents. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Command-line startup options]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Entering-Emacs.html] and [https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Invocation.html])&lt;br /&gt;
* [[Built-in help]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Help.html])&lt;br /&gt;
* [[Registers]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Registers.html])&lt;br /&gt;
* [[:Category:Search|Search for text in a buffer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Search.html])&lt;br /&gt;
* [[Fixing typos]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Fixit.html])&lt;br /&gt;
* [[Keyboard macros]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Keyboard-Macros.html])&lt;br /&gt;
* [[Windows within a frame]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows.html])&lt;br /&gt;
* [[Frames]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html])&lt;br /&gt;
* [[International character sets]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/International.html])&lt;br /&gt;
* [[Indentation]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Indentation.html])&lt;br /&gt;
* [[Editing source code]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Programs.html])&lt;br /&gt;
* [[Building software]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Building.html])&lt;br /&gt;
* [[Maintaining source code repositories]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Maintaining.html])&lt;br /&gt;
* [[Abbrevs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Abbrevs.html])&lt;br /&gt;
* [[Dired]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html])&lt;br /&gt;
* [[Calendars and diaries]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Calendar_002fDiary.html])&lt;br /&gt;
* [[Sending mail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sending-Mail.html])&lt;br /&gt;
* [[Rmail]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html])&lt;br /&gt;
* [[Gnus]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Gnus.html])&lt;br /&gt;
* [[Document viewer]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Document-View.html])&lt;br /&gt;
* [[Shell commands withing Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html])&lt;br /&gt;
* [[Emacs server]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html])&lt;br /&gt;
* [[Printing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Printing.html])&lt;br /&gt;
* [[Sorting]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Sorting.html])&lt;br /&gt;
* [[Picture mode]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Picture-Mode.html])&lt;br /&gt;
* [[Editing binary files]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html])&lt;br /&gt;
* [[Saving Emacs sessions]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Emacs-Sessions.html])&lt;br /&gt;
* [[Recursive editing]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Recursive-Edit.html])&lt;br /&gt;
* [[Emulating other text editors]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Emulation.html])&lt;br /&gt;
* [[Hyperlinking within Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Hyperlinking.html])&lt;br /&gt;
* [[Games and fun]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Amusements.html])&lt;br /&gt;
* [[Installing additional packages]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html])&lt;br /&gt;
* [[Customising Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Customization.html])&lt;br /&gt;
** [[Customize]] (simple interface) ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html])&lt;br /&gt;
* [[Cancelling commands]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Quitting.html])&lt;br /&gt;
* [[If Emacs is malfunctioning]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Lossage.html])&lt;br /&gt;
* [[Reporting bugs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Bugs.html])&lt;br /&gt;
* [[Contributing to GNU Emacs]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html])&lt;br /&gt;
* [[Getting help from others]] ([https://www.gnu.org/software/emacs/manual/html_node/emacs/Service.html])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WikEmacs]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50942</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50942"/>
		<updated>2021-11-05T13:12:47Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* See Also */ add filetree image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
'''file-tree''' offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
[[File:Filetree.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=File:Filetree.jpg&amp;diff=50941</id>
		<title>File:Filetree.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=File:Filetree.jpg&amp;diff=50941"/>
		<updated>2021-11-05T13:11:36Z</updated>

		<summary type="html">&lt;p&gt;Elvince: The filetree default view. One can cycle between notes, icons, directory info, tree depth…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The filetree default view. One can cycle between notes, icons, directory info, tree depth…&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50940</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50940"/>
		<updated>2021-11-05T13:10:38Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* See Also */ fix img&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
```file-tree``` offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Dired&amp;diff=50939</id>
		<title>Dired</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Dired&amp;diff=50939"/>
		<updated>2021-11-05T13:09:57Z</updated>

		<summary type="html">&lt;p&gt;Elvince: /* See Also */ add filetree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Package&lt;br /&gt;
|name=Dired&lt;br /&gt;
|description=File Manager for Emacs.&lt;br /&gt;
|source=http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/dired.el&lt;br /&gt;
|author=Sebastian Kremer&lt;br /&gt;
|maintainer=[[FSF]]&lt;br /&gt;
|in_emacs=yes&lt;br /&gt;
|Development status=active&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Dired''' is a inbuilt File Manager for Emacs. Its arguably the best&lt;br /&gt;
file manager with the functionality it possesses. Unlike any other&lt;br /&gt;
file managers the directory listing is just as an another [[buffer]] of&lt;br /&gt;
Emacs with '''dired-mode''' as {{ModeLink|Major Mode}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
'''Dired''' has countless functionality. The best way to learn it is to try it out. Open a dired buffer and look at the commands listed in the menus.&lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x d| dired}}&lt;br /&gt;
: ask for a directory and puts you into a buffer with direct listing of that directory. &lt;br /&gt;
&lt;br /&gt;
; {{CommandKeys|C-x C-j| dired-jump}}&lt;br /&gt;
: jump to a dired buffer corresponding to the current buffer (This require loading [http://www.gnu.org/software/emacs/manual/html_node/dired-x/ Dired Extra]).&lt;br /&gt;
&lt;br /&gt;
In the minibuffer, while doing 'Find File':&lt;br /&gt;
&lt;br /&gt;
; {{Keys|C-d}}&lt;br /&gt;
: jump to a dired buffer corresponding to the directory in the minibuffer.&lt;br /&gt;
&lt;br /&gt;
== Basic commands ==&lt;br /&gt;
&lt;br /&gt;
; {{Keys| RET}}&lt;br /&gt;
: Open the file/Directory. You can use '''a''' to open the directory without creating another buffer.&lt;br /&gt;
&lt;br /&gt;
; {{Keys| q}}&lt;br /&gt;
: Close the dir&lt;br /&gt;
&lt;br /&gt;
; {{Keys| i}}&lt;br /&gt;
: i: open directory in subtree. Use '''^''' to go up one level. With a prefix argument ('''C-u i'''), you can edit the ''ls'' switches used for the listing. So you can add '''R''' to expand the whole tree starting at this subdirectory. &lt;br /&gt;
&lt;br /&gt;
; {{keys|C}}&lt;br /&gt;
: Copy file&lt;br /&gt;
If you set &amp;lt;code&amp;gt;(setq dired-dwim-target t)&amp;lt;/code&amp;gt;, split your window and open another dired buffer on the other window, Dired will suggest it as the default target directory for the copy and rename commands.&lt;br /&gt;
&lt;br /&gt;
; {{Keys|R}}&lt;br /&gt;
:Rename file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|D}}&lt;br /&gt;
: Delete file&lt;br /&gt;
&lt;br /&gt;
; {{Keys|+}}&lt;br /&gt;
: create a new dir&lt;br /&gt;
&lt;br /&gt;
== Mark/unmark files ==&lt;br /&gt;
&lt;br /&gt;
{{Keys|m}}&lt;br /&gt;
: mark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|u}}&lt;br /&gt;
: unmark a file&lt;br /&gt;
&lt;br /&gt;
{{Keys|U}}&lt;br /&gt;
: unmark all marked&lt;br /&gt;
&lt;br /&gt;
{{Keys|%m}}&lt;br /&gt;
: mark by pattern&lt;br /&gt;
&lt;br /&gt;
== Edit filenames and permissions ==&lt;br /&gt;
&lt;br /&gt;
'''Wdired''' mode (writable dired) allows you to enter a mode where you can edit filenames, symbolic link target and filenames permissions as you would in a regular buffer. It is particularly great to do some editing based on search and replace.&lt;br /&gt;
&lt;br /&gt;
{{Keys|C-x C-q}}&lt;br /&gt;
: enter wdired mode (calls ''wdired-change-to-wdired-mode''). Type '''C-c C-c''' to validate your changes or '''C-c ESC''' to abort.&lt;br /&gt;
&lt;br /&gt;
{{Command|customize-group RET wdired}} to customize wdired behavior.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' in Dired, you can rename a single file or move the marked ones with '''R'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sort files ==&lt;br /&gt;
&lt;br /&gt;
By default, typing '''s''' will toggle sorting by date. You can change the listing switches (of GNU '''ls''') with '''C-u s'''. &lt;br /&gt;
&lt;br /&gt;
You can customize the variable '''dired-listing-switches'''. For example,&lt;br /&gt;
&lt;br /&gt;
    (setq dired-listing-switches &amp;quot;-aBhl --group-directories-first&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
will display directories first. You can then customize per-directory local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dired+ (see below) offers more options (sort by size, by extension,…) and will add a menu entry.&lt;br /&gt;
&lt;br /&gt;
== Find files recursively ==&lt;br /&gt;
&lt;br /&gt;
=== find-name-dired ===&lt;br /&gt;
&lt;br /&gt;
With {{Command|find-name-dired}}, you'll be asked for the base directory, a file wildcard and the matching files will be displayed in a Dired buffer. It uses the ''find'' GNU utility. &lt;br /&gt;
&lt;br /&gt;
Similar commands are '''find-grep-dired''' or '''find-dired'''. More information can be read in [http://www.gnu.org/software/emacs/manual/html_node/emacs/Dired-and-Find.html#Dired-and-Find the documentation].&lt;br /&gt;
&lt;br /&gt;
=== Interactive selection with Projectile ===&lt;br /&gt;
&lt;br /&gt;
[[Projectile]], coupled with {{Command|helm-projectile}}, lets you find recursively and interactively files in your project. This command does not use a Dired buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View image thumbnails (image-dired) ==&lt;br /&gt;
&lt;br /&gt;
Viewing images is a builtin feature of Dired (press Enter or '''v''' on an image file). On Emacs24.4, pressing '''n''' and '''p''' will show the next or previous image file. But if you want to navigate between image thumbnails, use the (builtin too) [http://www.gnu.org/software/emacs/manual/html_node/emacs/Image_002dDired.html image-dired]. You can directly call it with {{Command|image-dired}}, or mark the images you want to look at in the dired buffer (with '''m''') and then type '''C-t d (image-dired-display-thumbs)'''.&lt;br /&gt;
&lt;br /&gt;
=== Tag images ===&lt;br /&gt;
&lt;br /&gt;
More advanced features include image tags, which are metadata used to categorize image files. The tags are stored in a plain text file configured by '''image-dired-db-file'''.&lt;br /&gt;
&lt;br /&gt;
To tag image files, mark them in the dired buffer and type '''C-t t (image-dired-tag-files)'''. This reads the tag name in the minibuffer. &lt;br /&gt;
&lt;br /&gt;
To mark files having a certain tag, type '''C-t f (image-dired-mark-tagged-files)'''. After marking image files with a certain tag, you can use '''C-t d''' to view them.&lt;br /&gt;
&lt;br /&gt;
You can also tag a file directly from the thumbnail buffer by typing '''t t''' and you can remove a tag by typing '''t r'''. &lt;br /&gt;
&lt;br /&gt;
There is also a special “tag” called “comment” for each file (it is not a tag in the exact same sense as the other tags, it is handled slightly different). That is used to enter a comment or description about the image. You comment a file from the thumbnail buffer by typing '''c'''. You will be prompted for a comment. Type '''C-t c''' to add a comment from Dired '''(image-dired-dired-comment-files)'''.&lt;br /&gt;
&lt;br /&gt;
=== Rotate images ===&lt;br /&gt;
&lt;br /&gt;
Image-Dired also provides simple image manipulation. In the thumbnail buffer, type '''L''' to rotate the original image 90 degrees anti clockwise, and '''R''' to rotate it 90 degrees clockwise. This rotation is lossless, and uses an external utility called JpegTRAN.&lt;br /&gt;
&lt;br /&gt;
=== See also: Dired Image SlideShow (DISS) ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ieure/diss DISS] is an external package, published in 2021, that builds on Dired and Image-mode to provide a mode to browse images and view them in a slideshow.&lt;br /&gt;
&lt;br /&gt;
Diss features include:&lt;br /&gt;
&lt;br /&gt;
* Use any Dired buffer (including find-dired) as the source of images.&lt;br /&gt;
* Manual navigation, or automatic advance with delay.&lt;br /&gt;
* Easily categorize files: mark, flag for deletion, or apply an arbitrary marker character directly from the image.&lt;br /&gt;
* Advancing images can optionally apply a marker to every image.&lt;br /&gt;
* Infinite loop, or pop back to image list when finished.&lt;br /&gt;
* Multiple slideshow configurations can be named and saved.&lt;br /&gt;
* Quick image tools: Rotate CW/CCW, smart fit, fit height, fit width, rename.&lt;br /&gt;
&lt;br /&gt;
It can also work with the lightweight Feh image viewer.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
=== [[Dired+]] - a package that extends the functionalities of Dired ===&lt;br /&gt;
&lt;br /&gt;
=== [[Direx]] - a general purpose directory/tree explorer ===&lt;br /&gt;
&lt;br /&gt;
=== Dired-du - display recursive directory sizes ===&lt;br /&gt;
&lt;br /&gt;
[https://elpa.gnu.org/packages/dired-du.html Dired-du] (in GNU [[ELPA]]) defines a minor mode '''dired-du-mode''' to show&lt;br /&gt;
the recursive size of directories in Dired buffers.&lt;br /&gt;
If the &amp;lt;code&amp;gt;du&amp;lt;/code&amp;gt; program is available, then the directory sizes are&lt;br /&gt;
obtained with it.  Otherwise, the directory sizes are obtained&lt;br /&gt;
with Lisp.  The former is faster and provide a more precise value.&lt;br /&gt;
For directories where the user doesn't have read permission,&lt;br /&gt;
the recursive size is not obtained.&lt;br /&gt;
Once this mode is enabled, every new Dired buffer displays&lt;br /&gt;
recursive dir sizes.&lt;br /&gt;
&lt;br /&gt;
To enable the mode at start up add the following into your [[Init File]]:&lt;br /&gt;
&lt;br /&gt;
   (add-hook 'dired-mode-hook #'dired-du-mode)&lt;br /&gt;
&lt;br /&gt;
but beware that it can take a long time.&lt;br /&gt;
&lt;br /&gt;
So you can also enable this mode once in a buffer: '''M-x dired-du-mode''', and disable it when you're done.&lt;br /&gt;
&lt;br /&gt;
You can also select files (with the selector &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for example) and call '''M-x dired-du-count-sizes''', to count the number of marked files and how much space they use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dired-details - a library to make file details hide-able ===&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks#dired-open dired-open] - open files with external applications ===&lt;br /&gt;
&lt;br /&gt;
Many times, you want to open media files, pdfs or other documents with an external application. There's remedy for that too, namely dired-guess-shell-alist-user, but that is still not as convenient as just hitting enter.&lt;br /&gt;
&lt;br /&gt;
dired-open is part of dired-hacks (in MELPA).&lt;br /&gt;
&lt;br /&gt;
This feature is also the goal of [https://melpa.org/#/openwith openwith] (in MELPA).&lt;br /&gt;
&lt;br /&gt;
=== Dired-k - add colored icons depending on the git status ===&lt;br /&gt;
&lt;br /&gt;
See here: http://wikemacs.org/wiki/Git#Colorize_Dired_output_depending_on_the_file_git_status&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/Fuco1/dired-hacks dired-subtree] - insert the subdirectory (with the i key) directly below its line ===&lt;br /&gt;
&lt;br /&gt;
=== Treemacs, a tree-style file explorer ===&lt;br /&gt;
&lt;br /&gt;
see [https://github.com/Alexander-Miller/treemacs Treemacs]. It has optional git integration (showing the status of files with different faces), optional follow-mode, projectile integration (quickly open treemacs at any known project’s root directory), session persistence with &amp;lt;code&amp;gt;desktop-save-mode&amp;lt;/code&amp;gt;, and more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Speed_bar]] - navigate files and sources in another frame ===&lt;br /&gt;
&lt;br /&gt;
=== [[emacs-nav]] - a simple files and sources browser popup ===&lt;br /&gt;
&lt;br /&gt;
=== [http://melpa.org/#/dirtree dirtree] - a directory tree view panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/asok/peep-dired peep-dired] - file previews à la ranger ===&lt;br /&gt;
	 &lt;br /&gt;
[http://ranger.nongnu.org/ Ranger] is a file browser for the terminal that has a nice navigation system composed of three panes: the current directory at the middle, the previous one to the left, and a preview of the file the cursor is on to the right. Peep-dired mimics a handy two-panes navigation with instant preview.&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/ralesi/ranger.el Ranger]- Ranger functionalities in Dired ===&lt;br /&gt;
&lt;br /&gt;
With ranger (formerly known as evil-ranger, even if it wasn't specific to evil-mode), we have most of ranger's functionalities in Dired: 3 panes layout, previews, etc. Very nice !&lt;br /&gt;
&lt;br /&gt;
=== [https://github.com/knpatel401/filetree file-tree] - display and operate and a file list as a tree ===&lt;br /&gt;
&lt;br /&gt;
```file-tree``` offers two things: it's a file tree viewer, and it allows to write and display ```notes``` associated to files.&lt;br /&gt;
&lt;br /&gt;
It offers actions similar to Dired: mark files and take actions (copy, delete, rename…).&lt;br /&gt;
&lt;br /&gt;
You can find a demo video on Youtube here: https://youtu.be/-KrMaLq8Bms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Evil-ranger-preview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Desktop Management]] [[Category:File Manager]][[Category:Built-in Package]]&lt;br /&gt;
[[Category:Beginner]]&lt;br /&gt;
[[Category:Navigation]]&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=User_talk:JorgePeixoto&amp;diff=50937</id>
		<title>User talk:JorgePeixoto</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=User_talk:JorgePeixoto&amp;diff=50937"/>
		<updated>2021-10-10T23:47:30Z</updated>

		<summary type="html">&lt;p&gt;Elvince: Hello!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello Jorge, welcome on the small team of Wikemacs contributors! [[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 19:47, 10 October 2021 (EDT)&lt;/div&gt;</summary>
		<author><name>Elvince</name></author>
	</entry>
</feed>