(@code{dired-do-search}).
This command is a variant of @code{tags-search}. The search stops at
- the first match it finds; use @kbd{M-,} to resume the search and find
- the next match. @xref{Tags Search}.
+ the first match it finds; use @kbd{M-x tags-loop-continue} to resume
+ the search and find the next match. @xref{Identifier Search}.
@kindex Q @r{(Dired)}
@findex dired-do-query-replace-regexp
@var{to} (@code{dired-do-query-replace-regexp}).
This command is a variant of @code{tags-query-replace}. If you exit the
- query replace loop, you can use @kbd{M-,} to resume the scan and replace
- more matches. @xref{Tags Search}.
+ query replace loop, you can use @kbd{M-x tags-loop-continue} to resume
+ the scan and replace more matches. @xref{Identifier Search}.
@end table
@node Shell Commands in Dired
it added to the kill ring, so you can use it to display the list of
currently marked files in the echo area.
+@kindex W @r{(Dired)}
+@findex browse-url-of-dired-file
+ If you have an HTML file in the file listing, it can be useful to
+view that file with a browser. The @kbd{W}
+(@code{browse-url-of-dired-file}) command will use the standard
+configured browser to view that file.
+
@kindex ( @r{(Dired)}
@findex dired-hide-details-mode
@vindex dired-hide-details-hide-symlink-targets
When you add a new item, use the appropriate mark if you are sure it applies,
otherwise leave it unmarked.
+\f
+* Installation Changes in Emacs 25.2
+
+** 'configure' detects the kqueue file notification library on *BSD
+and Mac OS X machines.
+
+\f
+* Startup Changes in Emacs 25.2
+
+\f
+* Changes in Emacs 25.2
+
+** It is possible to disable attempted recovery on fatal signals
+
+Two new variables allow to disable attempts to recover from stack
+overflow and to avoid automatic auto-save when Emacs is delivered a
+fatal signal. `attempt-stack-overflow-recovery', if set to `nil',
+will disable attempts to recover from C stack overflows; Emacs will
+then crash as with any other fatal signal.
+`attempt-orderly-shutdown-on-fatal-signal', if set to `nil', will
+disable attempts to auto-save the session and shut down in an orderly
+fashion when Emacs receives a fatal signal; instead, Emacs will
+terminate immediately. Both variables are non-`nil' by default.
+These variables are for users who would like to avoid the small
+probability of data corruption due to techniques Emacs uses to recover
+in these situations.
+
+\f
+* Editing Changes in Emacs 25.2
+
+\f
+* Changes in Specialized Modes and Packages in Emacs 25.2
+
+** File Notifications
+
+*** The kqueue library is integrated for *BSD and Mac OS X machines.
+
+\f
+* New Modes and Packages in Emacs 25.2
+
+\f
+* Incompatible Lisp Changes in Emacs 25.2
+
+\f
+* Lisp Changes in Emacs 25.2
+
+** Autoload files can be generated without timestamps,
+by setting `autoload-timestamps' to nil.
+
+\f
+* Changes in Emacs 25.2 on Non-Free Operating Systems
+
\f
* Installation Changes in Emacs 25.1
Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
The old Emacs logo icons are available as `emacs23.png' in the same location.
+ ---
** New make target `check-expensive' to run additional tests.
This includes all tests which run via "make check", plus additional
tests which take more time to perform.
added via the new Network Security Manager (NSM) and controlled via
the `network-security-level' variable.
+---
+** International domain names (IDNA) are now encoded via the new
+puny.el library, so that one can visit web sites like
+"http://méxico.icom.museum".
+
** If Emacs isn't built with TLS support, an external TLS-capable
program is used instead. This program used to be run in --insecure
mode by default, but has now changed to be secure instead, and will
+++
** C-h l now also lists the commands that were run.
-+++
-** x-select-enable-clipboard is renamed select-enable-clipboard
-and x-select-enable-primary is renamed select-enable-primary.
+** The new M-s M-w key binding uses eww to search the web for the
+text in the region.
+
+** M-x suggests shorthands and ignores obsolete commands for completion.
+** x-select-enable-clipboard is renamed select-enable-clipboard.
+x-select-enable-primary and renamed select-enable-primary.
Additionally they both now apply to all systems (OSX, GNUstep, Windows, you
name it), with the proviso that on some systems (e.g. Windows)
select-enable-primary is ineffective since the system doesn't
`erc-network-hide-list' and `erc-channel-hide-list' will only hide the
specified message types for the respective specified targets.
+*** New variable `erc-default-port-tls' used to connect to TLS IRC
+servers.
+
** Midnight-mode
---
whether to use variable-pitch fonts or not. The user can also
customize the `shr-use-fonts' variable.
++++
+*** A new command `C' (`eww-toggle-colors') can be used to toggle
+whether to use the HTML-specified colors or not. The user can also
+customize the `shr-use-colors' variable.
+
+++
*** A new command `R' (`eww-readable') will try do identify the main
textual parts of a web page and display only that, leaving menus and
log file, then it can be passed as an argument to the above function
to produce a neat summary.
+ ---
** New js.el option `js-indent-first-init'.
+ It was renamed from `js-indent-first-initialiser', to avoid issues
+ with American vs British spelling.
** Info
`tildify-ignored-environments-alist' variables (as well as a few
helper functions) obsolete.
+ +++
** New package Xref replaces Etags's front-end and UI
The new package Xref provides a generic framework and new commands to
`find-tag-other-window', `find-tag-other-frame', `find-tag-regexp',
`tags-apropos', and `tags-loop-continue'.
- The framework's API is still experimental and can change in major,
- backward-incompatible ways.
-
+ +++
*** New variables
`find-tag-marker-ring-length' is now an obsolete alias for
`xref-marker-ring-length'. `find-tag-marker-ring' is now an obsolete
alias for a private variable. `xref-push-marker-stack' and
- `xref-pop-marker-stack' should be used to mutate it instead.
+ `xref-pop-marker-stack' should be used instead to manipulate the stack
+ of searches for definitions.
---
*** `xref-find-definitions' and `describe-function' now display
information about mode local overrides (defined by cedet/mode-local.el
`define-overloadable-function' `define-mode-local-overrides').
+ The framework's Lisp API is still experimental and can change in major,
+ backward-incompatible ways.
+
+ ---
+ ** New package Project
+
+ The new package Project provides generic infrastructure for dealing
+ with projects. The main commands included in it are
+ `project-find-file' and `project-find-regexp'.
+
+ The Lisp API of this package is still experimental.
+
** EUDC
EUDC's LDAP backend has been improved.
+ +++
*** EUDC supports LDAP-over-SSL URLs (ldaps://).
+ ---
*** EUDC passes LDAP passwords through a pipe to the ldapsearch
subprocess instead of on the command line.
+ ---
*** EUDC handles LDAP wildcards automatically so the user shouldn't
need to configure this manually anymore.
+ +++
*** The LDAP configuration section of EUDC's manual has been
rewritten.
There have also been customization changes.
+ +++
*** New custom variable `eudc-server-hotlist' to allow specifying
multiple EUDC servers in init file.
+ +++
*** Custom variable `eudc-inline-query-format' defaults to completing
on email and firstname instead of surname.
+ ---
*** Custom variable `eudc-expansion-overwrites-query' defaults to nil
to avoid interfering with the kill ring.
+ +++
*** Custom variable `eudc-inline-expansion-format' defaults to
"Firstname Surname <mail-address>".
+ +++
*** Custom variable `eudc-options-file' defaults to
"~/.emacs.d/eudc-options".
+ ---
*** New custom variable `ldap-ldapsearch-password-prompt-regexp' to
allow overriding the regular expression that recognizes the ldapsearch
command line's password prompt.
+ ---
EUDC's BBDB backend now supports BBDB 3.
+ ---
EUDC's PH backend (eudcb-ph.el) is obsolete.
** Eshell
*** The new built-in command `clear' can scroll window contents out of sight.
If provided with an optional non-nil argument, the scrollback contents will be cleared.
+ +++
*** New buffer syntax '#<buffer-name>', which is equivalent to
'#<buffer buffer-name>'. This shorthand makes interacting with
buffers from eshell more convenient. Custom variable
`eshell-buffer-shorthand', which has been broken for a while, has been
removed.
+ +++
*** By default, eshell "visual" program buffers (created by
`eshell-visual-commands' and similar custom vars) are no longer killed
when their processes die. This fixes issues with short-lived commands
** Browse-url
+ ---
*** Support for the Conkeror web browser.
---
compression command is determined from the new
`dired-compress-files-alist' variable.
++++
+*** `W' is now bound to `browse-url-of-dired-file', and is useful for
+viewing HTML files and the like.
+
** Tabulated List Mode
+++
---
*** gulp.el
+ ---
*** landmark.el (moved to elpa.gnu.org)
\f
* New Modes and Packages in Emacs 25.1
+ ---
** pinentry.el allows GnuPG passphrase to be prompted through the
minibuffer instead of a graphical dialog, depending on whether the gpg
command is called from Emacs (i.e., INSIDE_EMACS environment variable
** cl-generic.el provides CLOS-style multiple-dispatch generic functions.
+ ---
** scss-mode (a minor variant of css-mode)
+ ---
** let-alist is a new macro (and a package) that allows one to easily
let-bind the values stored in an alist.
+ ---
** `tildify-mode' allows to automatically insert hard spaces as one
types the text. Breaking line after a single-character words is
forbidden by Czech and Polish typography (and may be discouraged in
other languages), so `auto-tildify-mode' makes it easier to create
a typographically-correct documents.
+ ---
** The `seq' library adds sequence manipulation functions and macros
that complement basic functions provided by subr.el. All functions
are prefixed with `seq-' and work on lists, strings and vectors.
+ ---
** The `map' library provides map-manipulation functions that work on
alists, hash-table and arrays. All functions are prefixed with
`map-'.
+ ---
** The `thunk' library provides functions and macros to control the
evaluation of forms.
+ ---
** js-jsx-mode (a minor variant of js-mode) provides indentation
support for JSX, an XML-like syntax extension to ECMAScript.
last variable when there was an odd number of arguments has been
eliminated.
+ +++
** `syntax-begin-function' is declared obsolete.
Removed font-lock-beginning-of-syntax-function and the SYNTAX-BEGIN
slot in font-lock-defaults.
`package-enable-at-startup' to t after the call to
`package-initialize'.
+ ---
** `:global' minor mode use `setq-default' rather than `setq'.
This means that you can't use `make-local-variable' and expect them to
"magically" become buffer-local.
- ** `inhibit-point-motion-hooks' now defaults to t and is obsolete.
-
+++
** `track-mouse' no longer freezes the shape of the mouse pointer.
The `track-mouse' form no longer refrains from changing the shape of
has any effect. (This change was made in Emacs 24.4 but was not
advertised at the time.)
+ +++
** `indirect-function' does not signal `void-function' any more.
This is mostly a bug-fix, since this change was missed back in 24.4 when
symbol-function was changed not to signal `void-function' any more.
+ +++
*** As a consequence, the second arg of `indirect-function' is now obsolete.
** Comint, term, and compile do not set the EMACS env var any more.
any reference to a buffer position. The 6th member of the mouse
position list returned for such events is now nil.
+ ---
** Menu items in keymaps do not support the "key shortcut cache" any more.
These slots used to hold key-shortcut data, but have been obsolete since
Emacs-21.
+ ---
** Emacs no longer downcases the first letter of a system diagnostic
when signaling a file error. For example, it now reports "Permission
denied" instead of "permission denied". The old behavior was problematic
** The `diff' command uses the unified format now. To restore the old
behavior, set `diff-switches' to `-c'.
+ ---
** `grep-template' and `grep-find-template' values don't include the
--color argument anymore. It's added at the <C> place holder position
dynamically. Any third-party code that changes these templates should
+++
*** New vector QPattern.
+ ---
** syntax-propertize is now automatically called on-demand during forward
parsing functions like `forward-sexp'.
implemented by the new `cursor-intangible-mode' and
`cursor-sensor-mode' minor modes.
+ ** `inhibit-point-motion-hooks' now defaults to t and is obsolete.
+
+ +++
** New process type `pipe', which can be used in combination with the
`:stderr' keyword of make-process to handle standard error output
of subprocess.
+ +++
** New function `make-process' provides an alternative interface to
`start-process'. It allows programs to set process parameters such as
process filter, sentinel, etc., through keyword arguments (similar to
** `read-buffer' takes a new `predicate' argument.
+ +++
** Emacs Lisp now supports generators.
+ See the "Generators" section of the ELisp manual for the details.
- ** New finalizer facility for running code when objects
- become unreachable.
+ +++
+ ** New finalizer facility for running code when objects become unreachable.
+ See the "Finalizer Type" subsection in the ELisp manual for the
+ details.
- ** lexical closures can use (:documentation <form>) to build their docstring.
- It should be placed right where the docstring would be, and <form> is then
+ ** lexical closures can use (:documentation FORM) to build their docstring.
+ It should be placed right where the docstring would be, and FORM is then
evaluated (and should return a string) when the closure is built.
** define-inline provides a new way to define inlinable functions.
** New macro `with-file-modes', for evaluating expressions with default file
permissions set to temporary values (e.g., for creating private files).
+ +++
** You can access the slots of structures using `cl-struct-slot-value'.
** Function `sort' can deal with vectors.
+++
** Function `write-region' no longer outputs "Wrote FILE" in batch mode.
+ ---
** If `pwd' is called with a prefix argument, insert the current default
directory at point.
the name is a directory separator character (forward slash on GNU and
Unix systems, forward- or backslash on MS-Windows and MS-DOS).
+ ---
** ASCII approximations to curved quotes are put in standard-display-table
if the terminal cannot display curved quotes.
+ +++
** Standard output and error streams now transliterate characters via
standard-display-table, and encode output using locale-coding-system.
+ To force a specific encoding, bind `coding-system-for-write' to the
+ coding-system of your choice when invoking functions like `prin1' and
+ `message'.
+++
** New var `truncate-string-ellipsis' to choose how to indicate truncation.
** Miscellaneous name change
+ ---
For consistency with the usual Emacs spelling, the Lisp variable
`hfy-optimisations' has been renamed to `hfy-optimizations'.
The old name should still work, as an obsolescent alias.
*** Emacs can now draw horizontal scroll bars on some platforms that
provide toolkit scroll bars, namely Gtk+, Lucid, Motif and Windows.
Horizontal scroll bars are turned off by default.
+
**** New function `horizontal-scroll-bars-available-p' telling whether
horizontal scroll bars are available on the underlying system.
+
**** New mode `horizontal-scroll-bar-mode' to toggle horizontal scroll
bars on all existing and future frames.
+
**** New function `toggle-horizontal-scroll-bar' to toggle horizontal
scroll bars on the selected frame.
+
**** New frame parameters `horizontal-scroll-bars' and
`scroll-bar-height' to set horizontal scroll bars and their height
for individual frames and in `default-frame-alist'.
+
**** New functions `frame-scroll-bar-height' and
`window-scroll-bar-height' return the height of horizontal scroll
bars on a specific frame or window.
+
**** `set-window-scroll-bars' now accepts five parameters where the last
two specify height and type of the window's horizontal scroll bar.
+
**** `window-scroll-bars' now returns type and sizes of horizontal scroll
bars too.
+
**** New buffer-local variables `horizontal-scroll-bar' and
`scroll-bar-height'.
** Etags
+ +++
*** etags no longer qualifies class members by default.
By default, `etags' will not qualify class members for C-like
(`xref-find-definitions'); if so, you can use `C-u M-.' to specify the
qualified names by hand.
+ +++
*** New language Ruby
Names of modules, classes, methods, and functions are tagged.
Overloaded operators are also tagged.
+ +++
*** Improved support for Lua
Etags now tags functions even if the "function" keyword follows some
+++
** Emacs running on MS-Windows now supports the daemon mode.
+ ---
** The byte counts in etags-generated TAGS files are now the same on
MS-Windows as they are on other platforms.
** On OS X, configure creates a Cocoa ("Nextstep") build by default.
Pass '--without-ns' to configure to create an X11 build, the old default.
+ ---
** OS X 10.5 or older is no longer supported.
+ ---
** OS X on PowerPC is no longer supported.
---
;;; Code:
+;; When bootstrapping dired-loaddefs has not been generated.
+(require 'dired-loaddefs nil t)
+
(declare-function dired-buffer-more-recently-used-p
"dired-x" (buffer1 buffer2))
(define-key map "u" 'dired-unmark)
(define-key map "v" 'dired-view-file)
(define-key map "w" 'dired-copy-filename-as-kill)
+ (define-key map "W" 'browse-url-of-dired-file)
(define-key map "x" 'dired-do-flagged-delete)
(define-key map "y" 'dired-show-file-type)
(define-key map "+" 'dired-create-directory)
(defun dired-current-directory (&optional localp)
"Return the name of the subdirectory to which this line belongs.
This returns a string with trailing slash, like `default-directory'.
- Optional argument means return a file name relative to `default-directory'."
+ Optional argument means return a file name relative to `default-directory',
+ in which case the value could be an empty string if `default-directory'
+ is the directory where the file on this line resides."
(let ((here (point))
(alist (or dired-subdir-alist
;; probably because called in a non-dired buffer
(add-to-list 'desktop-buffer-mode-handlers
'(dired-mode . dired-restore-desktop-buffer))
-\f
-;;; Start of automatically extracted autoloads.
-\f
-;;;### (autoloads nil "dired-aux" "dired-aux.el" "7b7e39be8bcaf5f35b2735c3f5635f40")
-;;; Generated autoloads from dired-aux.el
-
-(autoload 'dired-diff "dired-aux" "\
-Compare file at point with file FILE using `diff'.
-If called interactively, prompt for FILE. If the file at point
-has a backup file, use that as the default. If the file at point
-is a backup file, use its original. If the mark is active
-in Transient Mark mode, use the file at the mark as the default.
-\(That's the mark set by \\[set-mark-command], not by Dired's
-\\[dired-mark] command.)
-
-FILE is the first file given to `diff'. The file at point
-is the second file given to `diff'.
-
-With prefix arg, prompt for second argument SWITCHES, which is
-the string of command switches for the third argument of `diff'.
-
-\(fn FILE &optional SWITCHES)" t nil)
-
-(autoload 'dired-backup-diff "dired-aux" "\
-Diff this file with its backup file or vice versa.
-Uses the latest backup, if there are several numerical backups.
-If this file is a backup, diff it with its original.
-The backup file is the first file given to `diff'.
-With prefix arg, prompt for argument SWITCHES which is options for `diff'.
-
-\(fn &optional SWITCHES)" t nil)
-
-(autoload 'dired-compare-directories "dired-aux" "\
-Mark files with different file attributes in two dired buffers.
-Compare file attributes of files in the current directory
-with file attributes in directory DIR2 using PREDICATE on pairs of files
-with the same name. Mark files for which PREDICATE returns non-nil.
-Mark files with different names if PREDICATE is nil (or interactively
-with empty input at the predicate prompt).
-
-PREDICATE is a Lisp expression that can refer to the following variables:
-
- size1, size2 - file size in bytes
- mtime1, mtime2 - last modification time in seconds, as a float
- fa1, fa2 - list of file attributes
- returned by function `file-attributes'
-
- where 1 refers to attribute of file in the current dired buffer
- and 2 to attribute of file in second dired buffer.
-
-Examples of PREDICATE:
-
- (> mtime1 mtime2) - mark newer files
- (not (= size1 size2)) - mark files with different sizes
- (not (string= (nth 8 fa1) (nth 8 fa2))) - mark files with different modes
- (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID
- (= (nth 3 fa1) (nth 3 fa2)))) and GID.
-
-\(fn DIR2 PREDICATE)" t nil)
-
-(autoload 'dired-do-chmod "dired-aux" "\
-Change the mode of the marked (or next ARG) files.
-Symbolic modes like `g+w' are allowed.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chgrp "dired-aux" "\
-Change the group of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-chown "dired-aux" "\
-Change the owner of the marked (or next ARG) files.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-touch "dired-aux" "\
-Change the timestamp of the marked (or next ARG) files.
-This calls touch.
-Type M-n to pull the file attributes of the file at point
-into the minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-print "dired-aux" "\
-Print the marked (or next ARG) files.
-Uses the shell command coming from variables `lpr-command' and
-`lpr-switches' as default.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-clean-directory "dired-aux" "\
-Flag numerical backups for deletion.
-Spares `dired-kept-versions' latest versions, and `kept-old-versions' oldest.
-Positive prefix arg KEEP overrides `dired-kept-versions';
-Negative prefix arg KEEP overrides `kept-old-versions' with KEEP made positive.
-
-To clear the flags on these files, you can use \\[dired-flag-backup-files]
-with a prefix argument.
-
-\(fn KEEP)" t nil)
-
-(autoload 'dired-do-async-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files asynchronously.
-
-Like `dired-do-shell-command', but adds `&' at the end of COMMAND
-to execute it asynchronously.
-
-When operating on multiple files, asynchronous commands
-are executed in the background on each file in parallel.
-In shell syntax this means separating the individual commands
-with `&'. However, when COMMAND ends in `;' or `;&' then commands
-are executed in the background on each file sequentially waiting
-for each command to terminate before running the next command.
-In shell syntax this means separating the individual commands with `;'.
-
-The output appears in the buffer `*Async Shell Command*'.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-do-shell-command "dired-aux" "\
-Run a shell command COMMAND on the marked files.
-If no files are marked or a numeric prefix arg is given,
-the next ARG files are used. Just \\[universal-argument] means the current file.
-The prompt mentions the file(s) or the marker, as appropriate.
-
-If there is a `*' in COMMAND, surrounded by whitespace, this runs
-COMMAND just once with the entire file list substituted there.
-
-If there is no `*', but there is a `?' in COMMAND, surrounded by
-whitespace, this runs COMMAND on each file individually with the
-file name substituted for `?'.
-
-Otherwise, this runs COMMAND on each file individually with the
-file name added at the end of COMMAND (separated by a space).
-
-`*' and `?' when not surrounded by whitespace have no special
-significance for `dired-do-shell-command', and are passed through
-normally to the shell, but you must confirm first.
-
-If you want to use `*' as a shell wildcard with whitespace around
-it, write `*\"\"' in place of just `*'. This is equivalent to just
-`*' in the shell, but avoids Dired's special handling.
-
-If COMMAND ends in `&', `;', or `;&', it is executed in the
-background asynchronously, and the output appears in the buffer
-`*Async Shell Command*'. When operating on multiple files and COMMAND
-ends in `&', the shell command is executed on each file in parallel.
-However, when COMMAND ends in `;' or `;&' then commands are executed
-in the background on each file sequentially waiting for each command
-to terminate before running the next command. You can also use
-`dired-do-async-shell-command' that automatically adds `&'.
-
-Otherwise, COMMAND is executed synchronously, and the output
-appears in the buffer `*Shell Command Output*'.
-
-This feature does not try to redisplay Dired buffers afterward, as
-there's no telling what files COMMAND may have changed.
-Type \\[dired-do-redisplay] to redisplay the marked files.
-
-When COMMAND runs, its working directory is the top-level directory
-of the Dired buffer, so output files usually are created there
-instead of in a subdir.
-
-In a noninteractive call (from Lisp code), you must specify
-the list of file names explicitly with the FILE-LIST argument, which
-can be produced by `dired-get-marked-files', for example.
-
-\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-
-(autoload 'dired-run-shell-command "dired-aux" "\
-
-
-\(fn COMMAND)" nil nil)
-
-(autoload 'dired-do-kill-lines "dired-aux" "\
-Kill all marked lines (not the files).
-With a prefix argument, kill that many lines starting with the current line.
-\(A negative argument kills backward.)
-If you use this command with a prefix argument to kill the line
-for a file that is a directory, which you have inserted in the
-Dired buffer as a subdirectory, then it deletes that subdirectory
-from the buffer as well.
-To kill an entire subdirectory (without killing its line in the
-parent directory), go to its directory header line and use this
-command with a prefix argument (the value does not matter).
-
-\(fn &optional ARG FMT)" t nil)
-
-(autoload 'dired-do-compress-to "dired-aux" "\
-Compress selected files and directories to an archive.
-You are prompted for the archive name.
-The archiving command is chosen based on the archive name extension and
-`dired-compress-files-alist'.
-
-\(fn)" t nil)
-
-(autoload 'dired-compress-file "dired-aux" "\
-Compress or uncompress FILE.
-Return the name of the compressed or uncompressed file.
-Return nil if no change in files.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-query "dired-aux" "\
-Format PROMPT with ARGS, query user, and store the result in SYM.
-The return value is either nil or t.
-
-The user may type y or SPC to accept once; n or DEL to skip once;
-! to accept this and subsequent queries; or q or ESC to decline
-this and subsequent queries.
-
-If SYM is already bound to a non-nil value, this function may
-return automatically without querying the user. If SYM is !,
-return t; if SYM is q or ESC, return nil.
-
-\(fn SYM PROMPT &rest ARGS)" nil nil)
-
-(autoload 'dired-do-compress "dired-aux" "\
-Compress or uncompress marked (or next ARG) files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-byte-compile "dired-aux" "\
-Byte compile marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-load "dired-aux" "\
-Load the marked (or next ARG) Emacs Lisp files.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-redisplay "dired-aux" "\
-Redisplay all marked (or next ARG) files.
-If on a subdir line, redisplay that subdirectory. In that case,
-a prefix arg lets you edit the `ls' switches used for the new listing.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them. However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery. Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn &optional ARG TEST-FOR-SUBDIR)" t nil)
-
-(autoload 'dired-add-file "dired-aux" "\
-
-
-\(fn FILENAME &optional MARKER-CHAR)" nil nil)
-
-(autoload 'dired-remove-file "dired-aux" "\
-
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-relist-file "dired-aux" "\
-Create or update the line for FILE in all Dired buffers it would belong in.
-
-\(fn FILE)" nil nil)
-
-(autoload 'dired-copy-file "dired-aux" "\
-
-
-\(fn FROM TO OK-FLAG)" nil nil)
-
-(autoload 'dired-rename-file "dired-aux" "\
-
-
-\(fn FILE NEWNAME OK-IF-ALREADY-EXISTS)" nil nil)
-
-(autoload 'dired-create-directory "dired-aux" "\
-Create a directory called DIRECTORY.
-If DIRECTORY already exists, signal an error.
-
-\(fn DIRECTORY)" t nil)
-
-(autoload 'dired-do-copy "dired-aux" "\
-Copy all marked (or next ARG) files, or copy the current file.
-When operating on just the current file, prompt for the new name.
-
-When operating on multiple or marked files, prompt for a target
-directory, and make the new copies in that directory, with the
-same names as the original files. The initial suggestion for the
-target directory is the Dired buffer's current directory (or, if
-`dired-dwim-target' is non-nil, the current directory of a
-neighboring Dired window).
-
-If `dired-copy-preserve-time' is non-nil, this command preserves
-the modification time of each old file in the copy, similar to
-the \"-p\" option for the \"cp\" shell command.
-
-This command copies symbolic links by creating new ones, similar
-to the \"-d\" option for the \"cp\" shell command.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-symlink "dired-aux" "\
-Make symbolic links to current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new symbolic links are made in that directory
-with the same names that the files currently have. The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-For relative symlinks, use \\[dired-do-relsymlink].
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-hardlink "dired-aux" "\
-Add names (hard links) current file or all marked (or next ARG) files.
-When operating on just the current file, you specify the new name.
-When operating on multiple or marked files, you specify a directory
-and new hard links are made in that directory
-with the same names that the files currently have. The default
-suggested for the target directory depends on the value of
-`dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename "dired-aux" "\
-Rename current file or all marked (or next ARG) files.
-When renaming just the current file, you specify the new name.
-When renaming multiple or marked files, you specify a directory.
-This command also renames any buffers that are visiting the files.
-The default suggested for the target directory depends on the value
-of `dired-dwim-target', which see.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-do-rename-regexp "dired-aux" "\
-Rename selected files whose names match REGEXP to NEWNAME.
-
-With non-zero prefix argument ARG, the command operates on the next ARG
-files. Otherwise, it operates on all the marked files, or the current
-file if none are marked.
-
-As each match is found, the user must type a character saying
- what to do with it. For directions, type \\[help-command] at that time.
-NEWNAME may contain \\=\\<n> or \\& as in `query-replace-regexp'.
-REGEXP defaults to the last regexp used.
-
-With a zero prefix arg, renaming by regexp affects the absolute file name.
-Normally, only the non-directory part of the file name is used and changed.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-copy-regexp "dired-aux" "\
-Copy selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-hardlink-regexp "dired-aux" "\
-Hardlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-do-symlink-regexp "dired-aux" "\
-Symlink selected files whose names match REGEXP to NEWNAME.
-See function `dired-do-rename-regexp' for more info.
-
-\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-
-(autoload 'dired-upcase "dired-aux" "\
-Rename all marked (or next ARG) files to upper case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-downcase "dired-aux" "\
-Rename all marked (or next ARG) files to lower case.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dired-maybe-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same dired buffer.
-If it is already present, just move to it (type \\[dired-do-redisplay] to refresh),
- else inserts it at its natural place (as `ls -lR' would have done).
-With a prefix arg, you may edit the ls switches used for this listing.
- You can add `R' to the switches to expand the whole tree starting at
- this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-Dired remembers switches specified with a prefix arg, so that reverting
-the buffer will not reset them. However, using `dired-undo' to re-insert
-or delete subdirectories can bypass this machinery. Hence, you sometimes
-may have to reset some subdirectory switches after a `dired-undo'.
-You can reset all subdirectory switches to the default using
-\\<dired-mode-map>\\[dired-reset-subdir-switches].
-See Info node `(emacs)Subdir switches' for more details.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-insert-subdir "dired-aux" "\
-Insert this subdirectory into the same Dired buffer.
-If it is already present, overwrite the previous entry;
- otherwise, insert it at its natural place (as `ls -lR' would
- have done).
-With a prefix arg, you may edit the `ls' switches used for this listing.
- You can add `R' to the switches to expand the whole tree starting at
- this subdirectory.
-This function takes some pains to conform to `ls -lR' output.
-
-\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-
-(autoload 'dired-prev-subdir "dired-aux" "\
-Go to previous subdirectory, regardless of level.
-When called interactively and not on a subdir line, go to this subdir's line.
-
-\(fn ARG &optional NO-ERROR-IF-NOT-FOUND NO-SKIP)" t nil)
-
-(autoload 'dired-goto-subdir "dired-aux" "\
-Go to end of header line of DIR in this dired buffer.
-Return value of point on success, otherwise return nil.
-The next char is either \\n, or \\r if DIR is hidden.
-
-\(fn DIR)" t nil)
-
-(autoload 'dired-mark-subdir-files "dired-aux" "\
-Mark all files except `.' and `..' in current subdirectory.
-If the Dired buffer shows multiple directories, this command
-marks the files listed in the subdirectory that point is in.
-
-\(fn)" t nil)
-
-(autoload 'dired-kill-subdir "dired-aux" "\
-Remove all lines of current subdirectory.
-Lower levels are unaffected.
-
-\(fn &optional REMEMBER-MARKS)" t nil)
-
-(autoload 'dired-tree-up "dired-aux" "\
-Go up ARG levels in the dired tree.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-tree-down "dired-aux" "\
-Go down in the dired tree.
-
-\(fn)" t nil)
-
-(autoload 'dired-hide-subdir "dired-aux" "\
-Hide or unhide the current subdirectory and move to next directory.
-Optional prefix arg is a repeat factor.
-Use \\[dired-hide-all] to (un)hide all directories.
-
-\(fn ARG)" t nil)
-
-(autoload 'dired-hide-all "dired-aux" "\
-Hide all subdirectories, leaving only their header lines.
-If there is already something hidden, make everything visible again.
-Use \\[dired-hide-subdir] to (un)hide a particular subdirectory.
-
-\(fn &optional IGNORED)" t nil)
-
-(autoload 'dired-isearch-filenames-setup "dired-aux" "\
-Set up isearch to search in Dired file names.
-Intended to be added to `isearch-mode-hook'.
-
-\(fn)" nil nil)
-
-(autoload 'dired-isearch-filenames "dired-aux" "\
-Search for a string using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-isearch-filenames-regexp "dired-aux" "\
-Search for a regexp using Isearch only in file names in the Dired buffer.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch "dired-aux" "\
-Search for a string through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-isearch-regexp "dired-aux" "\
-Search for a regexp through all marked files using Isearch.
-
-\(fn)" t nil)
-
-(autoload 'dired-do-search "dired-aux" "\
-Search through all marked files for a match for REGEXP.
-Stops when a match is found.
-To continue searching for next match, use command \\[tags-loop-continue].
-
-\(fn REGEXP)" t nil)
-
-(autoload 'dired-do-query-replace-regexp "dired-aux" "\
-Do `query-replace-regexp' of FROM with TO, on all marked files.
-Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
-If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
-with the command \\[tags-loop-continue].
-
-\(fn FROM TO &optional DELIMITED)" t nil)
-
-(autoload 'dired-show-file-type "dired-aux" "\
-Print the type of FILE, according to the `file' command.
-If you give a prefix to this command, and FILE is a symbolic
-link, then the type of the file linked to by FILE is printed
-instead.
-
-\(fn FILE &optional DEREF-SYMLINKS)" t nil)
-
-;;;***
-\f
-;;;### (autoloads nil "dired-x" "dired-x.el" "26ec84bf71edaf13ce45aeab60b7f31f")
-;;; Generated autoloads from dired-x.el
-
-(autoload 'dired-jump "dired-x" "\
-Jump to Dired buffer corresponding to current buffer.
-If in a file, Dired the current directory and move to file's line.
-If in Dired already, pop up a level and goto old directory's line.
-In case the proper Dired file line cannot be found, refresh the dired
-buffer and try again.
-When OTHER-WINDOW is non-nil, jump to Dired buffer in other window.
-Interactively with prefix argument, read FILE-NAME and
-move to its line in dired.
-
-\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
-
-(autoload 'dired-jump-other-window "dired-x" "\
-Like \\[dired-jump] (`dired-jump') but in other window.
-
-\(fn &optional FILE-NAME)" t nil)
-
-(autoload 'dired-do-relsymlink "dired-x" "\
-Relative symlink all marked (or next ARG) files into a directory.
-Otherwise make a relative symbolic link to the current file.
-This creates relative symbolic links like
-
- foo -> ../bar/foo
-
-not absolute ones like
-
- foo -> /ugly/file/name/that/may/change/any/day/bar/foo
-
-For absolute symlinks, use \\[dired-do-symlink].
-
-\(fn &optional ARG)" t nil)
-
-;;;***
-\f
-;;; End of automatically extracted autoloads.
-
(provide 'dired)
(run-hooks 'dired-load-hook) ; for your customizations
(defvaralias 'ffap-newsgroup-heads 'thing-at-point-newsgroup-heads)
(defalias 'ffap-newsgroup-p 'thing-at-point-newsgroup-p)
-(defsubst ffap-url-p (string)
+(defun ffap-url-p (string)
"If STRING looks like an URL, return it (maybe improved), else nil."
(when (and (stringp string) ffap-url-regexp)
(let* ((case-fold-search t)
(push (cons "" (cdr (assoc (match-string 0) ; i.e. "(TeX-current-macro)"
preferred-suffix-rules)))
guess-rules))
- (setq kpsewhich-args (mapcar (lambda (rule)
- (concat (car rule) name (cdr rule)))
- guess-rules))
(with-temp-buffer
(let ((process-environment (buffer-local-value
'process-environment curbuf))
(exec-path (buffer-local-value 'exec-path curbuf)))
- (apply #'call-process "kpsewhich" nil t nil kpsewhich-args))
+ (apply #'call-process "kpsewhich" nil t nil
+ (mapcar (lambda (rule)
+ (concat (car rule) name (cdr rule)))
+ guess-rules)))
(when (< (point-min) (point-max))
(buffer-substring (goto-char (point-min)) (point-at-eol))))))))
(eval-and-compile
(defmacro c--macroexpand-all (form &optional environment)
;; Macro to smooth out the renaming of `cl-macroexpand-all' in Emacs 24.3.
- (if (eq c--mapcan-status 'cl-mapcan)
+ (if (fboundp 'macroexpand-all)
`(macroexpand-all ,form ,environment)
`(cl-macroexpand-all ,form ,environment)))
wouldn't be able to undo them.
The return value is the value of the last form in BODY."
- `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
- (inhibit-read-only t) (inhibit-point-motion-hooks t)
- before-change-functions after-change-functions
- deactivate-mark
- buffer-file-name buffer-file-truename ; Prevent primitives checking
- ; for file modification
- ,@varlist)
- (unwind-protect
- (progn ,@body)
- (and (not modified)
- (buffer-modified-p)
- (set-buffer-modified-p nil)))))
-(put 'c-save-buffer-state 'lisp-indent-function 1)
+ (declare (debug t) (indent 1))
+ (if (fboundp 'with-silent-modifications)
+ `(with-silent-modifications (let* ,varlist ,@body))
+ `(let* ((modified (buffer-modified-p)) (buffer-undo-list t)
+ (inhibit-read-only t) (inhibit-point-motion-hooks t)
+ before-change-functions after-change-functions
+ deactivate-mark
+ buffer-file-name buffer-file-truename ; Prevent primitives checking
+ ; for file modification
+ ,@varlist)
+ (unwind-protect
+ (progn ,@body)
+ (and (not modified)
+ (buffer-modified-p)
+ (set-buffer-modified-p nil))))))
(defmacro c-tentative-buffer-changes (&rest body)
"Eval BODY and optionally restore the buffer contents to the state it
;; Wrappers for common scan-lists cases, mainly because it's almost
;; impossible to get a feel for how that function works.
- (defmacro c-go-list-forward ()
- "Move backward across one balanced group of parentheses.
-
- Return POINT when we succeed, NIL when we fail. In the latter case, leave
- point unmoved."
- `(c-safe (let ((endpos (scan-lists (point) 1 0)))
- (goto-char endpos)
- endpos)))
-
- (defmacro c-go-list-backward ()
- "Move backward across one balanced group of parentheses.
-
- Return POINT when we succeed, NIL when we fail. In the latter case, leave
- point unmoved."
- `(c-safe (let ((endpos (scan-lists (point) -1 0)))
- (goto-char endpos)
- endpos)))
+ (defmacro c-go-list-forward (&optional pos limit)
+ "Move forward across one balanced group of parentheses starting at POS or
+ point. Return POINT when we succeed, NIL when we fail. In the latter case,
+ leave point unmoved.
+
+ A LIMIT for the search may be given. The start position is assumed to be
+ before it."
+ (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) 1 0)) (point))))
+ (if limit
+ `(save-restriction
+ (if ,limit
+ (narrow-to-region (point-min) ,limit))
+ ,res)
+ res)))
+
+ (defmacro c-go-list-backward (&optional pos limit)
+ "Move backward across one balanced group of parentheses starting at POS or
+ point. Return POINT when we succeed, NIL when we fail. In the latter case,
+ leave point unmoved.
+
+ A LIMIT for the search may be given. The start position is assumed to be
+ after it."
+ (let ((res `(c-safe (goto-char (scan-lists ,(or pos `(point)) -1 0)) (point))))
+ (if limit
+ `(save-restriction
+ (if ,limit
+ (narrow-to-region ,limit (point-max)))
+ ,res)
+ res)))
(defmacro c-up-list-forward (&optional pos limit)
"Return the first position after the list sexp containing POS,
#ifdef HAVE_MODULES
/* Defined in alloc.c. */
- extern Lisp_Object make_user_ptr (void (*finalizer) (void*), void *p);
+ extern Lisp_Object make_user_ptr (void (*finalizer) (void *), void *p);
/* Defined in emacs-module.c. */
extern void module_init (void);
extern void syms_of_fontset (void);
#endif
+/* Defined in inotify.c */
+#ifdef HAVE_INOTIFY
+extern void syms_of_inotify (void);
+#endif
+
+/* Defined in kqueue.c */
+#ifdef HAVE_KQUEUE
+extern void globals_of_kqueue (void);
+extern void syms_of_kqueue (void);
+#endif
+
/* Defined in gfilenotify.c */
#ifdef HAVE_GFILENOTIFY
extern void globals_of_gfilenotify (void);
extern void syms_of_gfilenotify (void);
#endif
-/* Defined in inotify.c */
-#ifdef HAVE_INOTIFY
-extern void syms_of_inotify (void);
-#endif
-
#ifdef HAVE_W32NOTIFY
/* Defined on w32notify.c. */
extern void syms_of_w32notify (void);
(require 'vc-git)
(require 'vc-hg)
+ (autoload 'dired-uncache "dired")
(declare-function tramp-find-executable "tramp-sh")
(declare-function tramp-get-remote-path "tramp-sh")
(declare-function tramp-get-remote-stat "tramp-sh")
(ert-deftest tramp-test26-process-file ()
"Check `process-file'."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(not
(ert-deftest tramp-test27-start-file-process ()
"Check `start-file-process'."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(not
(ert-deftest tramp-test28-shell-command ()
"Check `shell-command'."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(not
(ert-deftest tramp-test29-vc-registered ()
"Check `vc-registered'."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(vc-register
nil (list (car vc-handled-backends)
(list (file-name-nondirectory tmp-name2))))))
+ ;; vc-git uses an own process sentinel, Tramp's sentinel
+ ;; for flushing the cache isn't used.
+ (dired-uncache (concat (file-remote-p default-directory) "/"))
(should (vc-registered (file-name-nondirectory tmp-name2)))))
;; Cleanup.
(file-truename tramp-test-temporary-file-directory) nil
(string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
- (defun tramp--test-darwin-p ()
- "Check, whether the remote host runs Mac OS X.
- Several special characters do not work properly there."
- ;; We must refill the cache. `file-truename' does it.
- (with-parsed-tramp-file-name
- (file-truename tramp-test-temporary-file-directory) nil
- (string-match "^Darwin" (tramp-get-connection-property v "uname" ""))))
-
(defun tramp--test-check-files (&rest files)
"Run a simple but comprehensive test over every file in FILES."
;; We must use `file-truename' for the temporary directory, because
(ert-deftest tramp-test31-special-characters-with-stat ()
"Check special characters in file names.
Use the `stat' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(ert-deftest tramp-test31-special-characters-with-perl ()
"Check special characters in file names.
Use the `perl' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(ert-deftest tramp-test31-special-characters-with-ls ()
"Check special characters in file names.
Use the `ls' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(defun tramp--test-utf8 ()
"Perform the test in `tramp-test32-utf8*'."
- (tramp--instrument-test-case 10
(let ((coding-system-for-read 'utf-8)
(coding-system-for-write 'utf-8)
(file-name-coding-system 'utf-8))
(tramp--test-check-files
(unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
- (unless (or (tramp--test-hpux-p) (tramp--test-darwin-p))
+ (unless (tramp--test-hpux-p)
"أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها بلا اتصال بالإنترنت")
"银河系漫游指南系列"
- "Автостопом по гала́ктике"))))
+ "Автостопом по гала́ктике")))
(ert-deftest tramp-test32-utf8 ()
"Check UTF8 encoding in file names and file contents."
(ert-deftest tramp-test32-utf8-with-stat ()
"Check UTF8 encoding in file names and file contents.
Use the `stat' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(ert-deftest tramp-test32-utf8-with-perl ()
"Check UTF8 encoding in file names and file contents.
Use the `perl' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
(ert-deftest tramp-test32-utf8-with-ls ()
"Check UTF8 encoding in file names and file contents.
Use the `ls' command."
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
process sentinels. They shall not disturb each other."
;; Mark as failed until bug has been fixed.
:expected-result :failed
- :tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
(skip-unless
(eq
Since it unloads Tramp, it shall be the last test to run."
;; Mark as failed until all symbols are unbound.
:expected-result (if (featurep 'tramp) :failed :passed)
- :tags '(:expensive-test)
(when (featurep 'tramp)
(unload-feature 'tramp 'force)
;; No Tramp feature must be left.
setlock -n /tmp/getmail.lock && echo getmail isn\'t running
+ toto=$(grep hello foo |
+ wc)
+
# adsgsdg
if foo; then