Adding gnuplot package to Spacemacs - spacemacs

I've added the gnuplot MELPA package to Spacemacs by including dotspacemacs-additional-packages '(gnuplot) in the ~/.spacemacs file. It installed the package the next time I opened it up, but I'm not getting any highlighting occuring in Spacemacs when I open a .gp file. Where's the best place to look to get this working?
Edit 1:
I added a layer called plotting to the private folder in ~/.emacs.d I followed the outline for the finance layer and put
(setq plotting-packages
'(
gnuplot-mode
))
and
(defun plotting/init-gnuplot-mode ()
(use-package gnuplot-mode
:mode (("\\.gp$" . gnuplot-mode))))
in the packages.el file and
(spacemacs|defvar-company-backends gnuplot-mode)
in the config.el file.
I'm getting some syntax highlighting in .gp files now, but not all of it. Anything else I need to add to get full support?

Related

org-mode inline images not working (remotely with TRAMP)

I am working with emacs org-mode on a remote machine using TRAMP. I connect code cells to a jupyter server (on that remote machine) where I start a python 3 kernel. Code execution works perfectly fine, I can also create plots with matplotlib. While a .png is generated in the right temp file location, the output of the code cell is a (relative) link to the file without displaying it inline as expected.
An example code-block look like this:
#+BEGIN_SRC jupyter-python :session /jpy:localhost#9090:TEST
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10), range(10))
#+END_SRC
#+RESULTS:
:RESULTS:
| <matplotlib.lines.Line2D | at | 0x7f1c43a289a0> |
[[file:./.ob-jupyter/e1eecf5d59de9bfa1d3468867a64aadf4b1a6261.png]]
:END:
C-c C-x C-v gives the message: 'No images to display inline'
C-c o opens and displays the file in a different buffer correctly.
I would expect the file to display correctly inline in the org-mode buffer.
I tried to change the link manually to a TRAMP path, looking something like this:
[[file:/ssh:MYSERVER:/PATH_TO_TEMP_FOLDER/.ob-jupyter/e1eecf5d59de9bfa1d3468867a64aadf4b1a6261.png]]
which also allows me to open the file with C-c o, but won't display the file inline (Same behavior as described above)
If I open the jupyter-repl session directly and type fig (after executing the above code block) The figure displays as expected in the jupyter-repl buffer
If I run the jupyter session locally, inline plotting works as expected
Update:
I realized if I C-f on the link to open the file, the link expands to an invalid tramp link, which throws the following error message:
File is missing: /ssh:bih:/PATH_TO_CORRECT_FOLDER/00_test/file:./.ob-jupyter/
Note the file:./ at the end of the link that doesn't belong there. So I think something is going wrong somewhere between TRAMP and org-mode (or emacs-jupyter). Any ideas how to fix this?
C-h v org-display-remote-inline-images says:
org-display-remote-inline-images is a variable defined in ‘org.el’.
Its value is ‘skip’
How to display remote inline images.
Possible values of this option are:
skip Don’t display remote images.
download Always download and display remote images.
cache Display remote images, and open them in separate buffers
for caching. Silently update the image buffer when a file
change is detected.
Check the value and maybe customize the variable to do something other than skip.

Spacemacs: Search for file in multiple projects

I know I can use "SPC p f" to search for a file in the current project, which means git repository for me. Now, in my current project we have multiple git repos, and I'd like to search for files in all of them. Luckily, they all reside in the same directory (e.g. ~/projects/x/).
Is there a command in Spacemacs that lets me search for files in all the git repos under ~/projects/x?
I believe you can do it with SPC s f. When you activate it:
Prompts you to select a directory to search
Allow you to enter a search string, showing results in the HELM window
In general, SPC s shows all keybindings for general search, where f is for files.
I dug through the available helm commands again and found helm-projects-find-files, which does exactly what I want.
I put this in ~/.spacemacs into the function dotspacemacs/user-config:
(setq-default helm-locate-project-list (list "~/projects"))
(spacemacs/set-leader-keys "fm" 'helm-projects-find-files))
For searching in those files, you can use spacemacs/helm-project-smart-do-search-in-dir:
Put this somewhere in ~/.spacemacs:
(defun mine/search-in-projects ()
"Search in all my projects (i.e. what is checked out in ~/projects)"
(interactive)
(spacemacs/helm-project-smart-do-search-in-dir "~/projects"))
And this in ~/.spacemacs into the function dotspacemacs/user-config:
(spacemacs/set-leader-keys "sm" 'mine/search-in-projects)
(I used SPC-sm as key combination because the project name starts with an "m").
Oh, I just realized I can just put a marker that projectile respects (like a .projectile file) into my ~/projects/x directory. Now I can switch to the ~/projects/x project, and still am able to also narrow it to specific sub-projects by selecting e.g. ~/projects/x/p1/.
So all I needed to do was:
touch ~/projects/.projectile
Update: I realized that when doing this, I can't narrow down to a sub-project. So it's not really the best answer.
You can put this in your .spacemacs to bind SPC p f to search all projects.
(spacemacs/set-leader-keys "pf" 'helm-projectile-find-file-in-known-projects)

Unable to batch process through command-line

(Under Windows 7 x64)
I originally tried to use BIMP to apply a cutout effect to a folder but FU-cutout is one of the few that doesn't appear in the plug-in's list. I read somewhere that was because I hadn't install GIMP while customizing to allow compatibility with older plug-in and I de/reinstalled to try and fix this to no avail. So I decided to use script-fu instead but find myself unable to make it work out through the command line.
I have checked on a few sites explaining how to batch script (including the official GIMP doc) and ended with the follow code.
(define (hmd-batch-stylize pattern colours smoothness)
(let* ( (filelist (cadr (file-glob pattern 1) ) )
)
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE
filename filename)))
(drawable (car (gimp-image-get-active-layer image)))
)
(gimp-brightness-contrast drawable 35 40)
(FU-cutout RUN-NONINTERACTIVE
image drawable colours smoothness TRUE)
(gimp-file-save RUN-NONINTERACTIVE
image drawable filename filename)
(gimp-image-delete image)
)
(set! filelist (cdr filelist))
)
))
(I also register the script but for the sake of simplicity I won't add this code here). Then I open the command line and write
gimp -i -b '(hmd-batch-stylize "C:\Users\User\Desktop\3\*jpg" 32 1)' -b '(gimp-quit 0)'
in the gimp directory (I tried the directory where my files are but gimp isn't recognized as a command there). The gimp console starts up, fails to execute a bunch of dlls and a folder (all part of GMIC) with the mention "Exec format error", then I get two "Batch command completed successfully" at which point the command line freezes until I close it.
I searched online for days hoping to find a solution but no one seems to have the same problem as I do so no solution has worked yet. Help would be greatly appreciated.
PS: I thought of instead creating a script that would appear in BIMP and act as a middle-man to access the FU-cutout but I can't find how to pass the current image/filename being used by BIMP as an argument. If anyone knows how, I feel that might be my simplest way of working around this problem.

elisp: generate LaTeX PDF document

I trying to completely automatize sending job applications. First step, to put the name of the company in a letter. It almost works, but it is stuck because it asks what command to use. Reading the documentation, I thought it could be disabled by a prefix argument, but I got something wrong. Also, it doesn't need to flash by visually, it could be done completely as a background process. I'll paste the code and you'll understand immediately:
(Oh, I'm using LaTeX/P mode in emacs - the goal is to not only update the .tex but also the .pdf file)
(defun edit-letter (comp-name)
(let ((path "~/work/letter/comp"))
(edit-letter-file-path comp-name (concat path "/eng/letter.tex"))
(edit-letter-file-path comp-name (concat path "/swe/brev.tex")) ))
(defun edit-letter-file-path (company-name file-path)
(find-file file-path)
(goto-line 14)
(kill-line)
(insert (format "\\textbf{To %s}\n" company-name))
(setq current-prefix-arg nil)
(call-interactively 'TeX-command-master) ; asks what command
(kill-buffer) ) ; doesn't work
(edit-letter "Digital Power Now")
It's not entirely clear from your question what you're after, but if you want to use AucTeX to call a LaTeX/PDFTex/BibTex process without getting prompted for the command name, you can use this:
(TeX-command "LaTeX" 'TeX-master-file)
Try this in place of (call-interactively 'TeX-command-master) above. When you're using LaTeX/P "LaTeX" really means pdflatex.

How do I make Org-mode open PDF files in Evince?

In Org-mode when I try to open a link to a PDF file nothing happens. Also, when I do C-c C-e d to export as LaTeX and process to PDF and open the PDF is generated but not opened. How do I make Org-mode open PDF files in Evince?
I am using Org-mode 7.6 in GNU Emacs 23.3.1 and Evince 3.2.1 in Ubuntu 11.10.
M-x customize-variable [RET] org-file-apps [RET]
If org uses your system defaults, you have to edit your ./mailcap file.
Try adding this line:
application/pdf; /usr/bin/evince %s
Another possible construct that could work for this would be to use eval-after-load rather than add-hook. It will only set the values once on startup, you won't have to worry about entries being added or not (unless you regularly reload org).
Combine that with setcdr and you can avoid having to delete from the list and then re-add, add if and you'll ensure that you either add or change the value. The if is only needed for values that aren't in the list by default, just to make sure you don't end up with conflicts somewhere down the line.
(eval-after-load "org"
'(progn
;; .txt files aren't in the list initially, but in case that changes
;; in a future version of org, use if to avoid errors
(if (assoc "\\.txt\\'" org-file-apps)
(setcdr (assoc "\\.txt\\'" org-file-apps) "notepad.exe %s")
(add-to-list 'org-file-apps '("\\.txt\\'" . "notepad.exe %s") t))
;; Change .pdf association directly within the alist
(setcdr (assoc "\\.pdf\\'" org-file-apps) "evince %s")))
Edit for clarification
eval-after-load only evaluates the block when (require 'org) is called. If org is already loaded it will evaluate immediately (I mistakenly thought it ran each time a library was loaded, but it seems to be only the first time). The difference between add-hook and eval-after-load is explained here.
Since org-file-apps is a defcustom it won't change the values if you set them before org is loaded, if you build the list from scratch (including default values as in your second (uglier) solution) you could simply setq in your init.el and everything would work. It also means it won't overwrite your changes.
Adding (if (assoc to the PDF entry won't hurt anything, it will simply ensure that if PDFs are ever removed from the default org-file-apps that it will still be added. The only solution that would not fail if PDFs were removed is your second one. The others all assume the entry exists in one form or another.
You can use a construct similar to https://stackoverflow.com/a/3985552/789593 but adapt it to PDF files and Evince. What you want to do is to alter the list org-file-apps. This can be done by adding the following to your .emacs:
;; PDFs visited in Org-mode are opened in Evince (and not in the default choice) https://stackoverflow.com/a/8836108/789593
(add-hook 'org-mode-hook
'(lambda ()
(delete '("\\.pdf\\'" . default) org-file-apps)
(add-to-list 'org-file-apps '("\\.pdf\\'" . "evince %s"))))
This will delete the default setting for PDF files and instead open them in Evince (and retain everything else included in org-file-apps). I am new to elisp so I do not know if this solution is robust, but it works for me and seems to be more elegant than the one below.
Another option, which seems uglier, is to instead look up the default values and set them all that but change the value for PDF files:
;; PDFs visited in Org-mode are opened in Evince (and other file extensions are handled according to the defaults)
(add-hook 'org-mode-hook
'(lambda ()
(setq org-file-apps
'((auto-mode . emacs)
("\\.mm\\'" . default)
("\\.x?html?\\'" . default)
("\\.pdf\\'" . "evince %s")))))