I'm new to emacs and wanting my buffers to be automatically named folder/filename or clojure.namespace.filename. I've found Uniquify which will rename conflicting buffers but I can't see how to use it as the default. Is there a way to do this or alternatively, a more idiomatic way of identifying buffers in emacs?
You can use uniquify M-x customize-group <return> uniquify <return>, which allows including enough of the relative path in the buffer name to differentiate buffers.
If you want to use the clojure namespace of the file as the buffer name there is the rename-buffer function, which could be passed a name generated with the help of clojure-mode which can tell you what namespace that file defines via clojure-expected-ns or clojure-find-ns.
There is also the option of setting a header or mode-line entry besides the buffer name.
Related
When I press M-. or C-c C-l it usually jumps to the function's declaration in .mli file. Oftentimes there is associated .ml file to which I can switch with C-c C-a but then, I have to search for the implementation of this function in it manually.
If there is an easy way to either jump directly to a definition in .ml file or somehow position to the corresponding function location when switching between .mli and .ml?
This is governed by the merlin-locate-preference variable, which documentation says:
Determine whether locate should in priority look in ml or mli files.
So you will land to the implementation, if it is available, once the variable is set to 'ml:
(setq merlin-locate-preference 'ml)
It is interesting though, that it defaults to 'ml so that either you overwrote it or merlin jumps to mli because it can't find the definition. If you want to jump to the definition in another project, then add corresponding S and B clauses to your .merlin file.
In Emacs Prelude, I cannot figure out how to create a new file when a file exists that "matches" the name of the file.
In the example screen capture, I am trying to create a file called spawn.exs in a directory that already contains a file called spawn_basic.exs. When I use C-xC-f to create a new file, emacs is matching spawn.exs to spawn_basic.exs and hitting Enter results in opening spawn_basic.exs instead of creating spawn.exs.
I've tried some workarounds (i.e. using touch to create the file) but I'm looking for a simpler solution that would require only one command. If there is not a command to do this, is there a way to disable the file name matching feature in Prelude? I like most everything else about Prelude compared to vanilla Emacs so I would rather not switch back.
In Prelude, C-x C-f is bound to helm-find-files. It's usually
great, but for this case I don't see a good workaround for bypassing
its match (as you've described).
However, ido-find-file has a similarly friendly completion system,
yet offers a nice solution to bypass the completion. When you type
spawn.exs, open by pressing C-j instead of RET. I think Helm
should do this too (instead of treating them the same), so you might
want to submit a feature request (to match Ido's "verbatim entry").
Ido works well as a find-file replacement, and it's recommended over
Helm for simple cases like this
in Mastering Emacs. So you could
remap it with:
(global-set-key (kbd "C-x C-f") 'ido-find-file)
I have a directory "a" with a set of templates, for instance
$ ls a
b bcc cc ccdd
I would like to implement a keyboard shortcut in Emacs that will show a buffer with the template names, similar to dired or buffer-menu and then be able to select a template name by using arrow keys or mouse. Then insert the selected template into the current buffer at point.
How can this be done?
To augment Chris' answer with a little code, here is a small wrapper around ido-insert-file:
(require 'ido)
(defvar so/template-directory "/tmp/templates"
"Directory where template files are stored")
(defun so/insert-template ()
(interactive)
(let ((default-directory so/template-directory))
(ido-insert-file)))
This allows you to run (or bind a key to) so/insert-template no matter what directory you are currently in. Obviously set so/template-directory to your preferred directory.
insert-file, bound to C-x i by default, can insert a file into your buffer at point, but it doesn't give you a nice menu. Both helm and ido enhance this behaviour.
helm does not come with Emacs, but it can be installed via MELPA. When helm-mode is active, insert-file uses Helm's narrowing features. Once you're in the a directory, the up and down keys may be used to select a file, and Enter will insert it.
ido is shipped with Emacs. When ido-mode is active, C-x i is rebound to ido-insert-file. Once you're in the a directory, the left and right keys may be used to select a file, and Enter will insert it.
Both tools are excellent, both can be used in many other situations, and both offer effective filtering and navigation. Try one or both and use whichever you prefer.
Everything #Chris said about Helm and Ido is true also for Icicles, and with better "narrowing" features and on-the-fly sorting in different orders.
There is nothing extra to do --- just load Icicles and turn on Icicle minor mode. Whenever you use standard command insert-file (bound to C-x i) you get the behavior you requested for free. This behavior is in fact available for all completion in Emacs. In Icicle mode, standard commands become menus you can use the arrow keys on, etc.
In addition, your question title asks to be able to "select a set" of files. You can do that easily in Icicles, but not otherwise. IOW, selection is also multi-selection.
(However, I suspect that your question is mistitled, since the text describes something different, and I doubt that you want to insert a set of files. You probably meant that you want to select one file name from a set of file names. Consider retitling the question, if so.)
I use C-x C-f and C-X C-s to save a file to directory "test", then I can not open the test directory with "tab", it says "Dired (directory): ~/test.....".
I want to know what is the wrong and the correct method to create a file in emacs, thanks!
Emacs distinguishes between files and buffers. You do all your editing in buffers, which do not necessarily have to be associated with a file (see, e.g., the *scratch* buffer). However, you often want to edit a buffer that is associated with a file. In that case you visit (Emacs lingo for "open") said file with C-x C-f.
Let's say you have a directory "test" in your home directory, and in that directory a single file "foo.txt". If you want to edit the contents of that file, visit it by typing:
C-x C-f ~/test/foo.txt RET
That's easy enough: now you get a new buffer in Emacs which is conveniently named after the file you're visiting ("foo.txt"). If you want to store changes you've made in the buffer back to the associated file, you type C-x C-s, and Emacs will write the contents of the buffer to the file "~/test/foo.txt".
This mechanism also works for files that do not exist when you start editing!
If you type, say,
C-x C-f ~/test/bar.txt RET
You get a buffer associated with a (yet non-existent) file "bar.txt" in the directory "~/test". Again, you can edit that buffer to your liking and then save the buffer with C-x C-s. The first time you do that, a new file is created.
If you want to create a buffer named "baz" that is not associated with any file, type
C-x b baz RET
Since it is not associated with a file yet, typing C-x C-s in that buffer will prompt you to specify a file-name. After saving, the buffer will be associated with the file you specified.
Finally, if you're in a buffer that is associated with a file, but you want to save it to a different file, you can do so with C-x C-w, which will give you the same prompt as in the previous case. Again, the buffer will be associated after saving with the file you provide.
Tab completion does work in all of the commands that ask you for a file name. If you think it doesn't then it might be because the file you think should be completed does not exist (also beware of upper-/lower-case distinctions in file names), or because another file with the same prefix forbids further disambiguation. Tapping TAB twice should list the available completions in a temporary buffer, letting you continue specifying the path name until it is complete.
Dired mode is pretty much orthogonal to all of the above. It is a mode for "editing" directories, i.e., doing file system operations. You invoke it by typing C-x d, which you may have typed accidentally?! It is quite powerful, but also quite complex. See here for its documentation.
How can I pass the output of globalff to emacs-dired. Essentially I am looking for something corresponding to find-name-dired that works with output of globalff.
I just tried it. I have a directory named WebServiceHost, and I typed
M-x globalff RET webservicehost RET
and it displayed that directory's name -- along with all the files inside it -- in the *globalff* buffer. Happily, the directory was the selected item, so I just hit RET, and Emacs then showed me the dired buffer for that directory.
I don't have a globalff answer for you. But you can do the same thing that globalff does, using Icicles instead. And you can open Dired on a set of files from Icicles.
See http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input for using Icicles instead of globalff. (And see http://www.emacswiki.org/emacs/LocateFilesAnywhere for a comparison).
See http://www.emacswiki.org/emacs/Icicles_-_Dired_Enhancements#OpenDiredOnSavedFiles for opening Dired on a set of files that match your minibuffer input in Icicles.