123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- (provide 'pcmpl-linux)
- (require 'pcomplete)
- (defgroup pcmpl-linux nil
- "Functions for dealing with GNU/Linux completions."
- :group 'pcomplete)
- (defun pcomplete/kill ()
- "Completion for GNU/Linux `kill', using /proc filesystem."
- (if (pcomplete-match "^-\\(.*\\)" 0)
- (pcomplete-here
- (pcomplete-uniqify-list
- (split-string
- (pcomplete-process-result "kill" "-l")))
- (pcomplete-match-string 1 0)))
- (while (pcomplete-here
- (if (file-directory-p "/proc")
- (directory-files "/proc" nil "\\`[0-9]+\\'"))
- nil 'identity)))
- (defun pcomplete/umount ()
- "Completion for GNU/Linux `umount'."
- (pcomplete-opt "hVafrnvt(pcmpl-linux-fs-types)")
- (while (pcomplete-here (pcmpl-linux-mounted-directories)
- nil 'identity)))
- (defun pcomplete/mount ()
- "Completion for GNU/Linux `mount'."
- (pcomplete-opt "hVanfFrsvwt(pcmpl-linux-fs-types)o?L?U?")
- (while (pcomplete-here (pcomplete-entries) nil 'identity)))
- (defun pcmpl-linux-fs-types ()
- "Return a list of available fs modules on GNU/Linux systems."
- (let ((kernel-ver (pcomplete-process-result "uname" "-r")))
- (directory-files
- (concat "/lib/modules/" kernel-ver "/kernel/fs/"))))
- (defun pcmpl-linux-mounted-directories ()
- "Return a list of mounted directory names."
- (let (points)
- (when (file-readable-p "/etc/mtab")
- (with-temp-buffer
- (insert-file-contents-literally "/etc/mtab")
- (while (not (eobp))
- (let* ((line (buffer-substring (point) (line-end-position)))
- (args (split-string line " ")))
- (setq points (cons (nth 1 args) points)))
- (forward-line)))
- (pcomplete-uniqify-list points))))
- (defun pcomplete-pare-list (l r)
- "Destructively remove from list L all elements matching any in list R.
- Test is done using `equal'."
- (while (and l (and r (member (car l) r)))
- (setq l (cdr l)))
- (let ((m l))
- (while m
- (while (and (cdr m)
- (and r (member (cadr m) r)))
- (setcdr m (cddr m)))
- (setq m (cdr m))))
- l)
- (defun pcmpl-linux-mountable-directories ()
- "Return a list of mountable directory names."
- (let (points)
- (when (file-readable-p "/etc/fstab")
- (with-temp-buffer
- (insert-file-contents-literally "/etc/fstab")
- (while (not (eobp))
- (let* ((line (buffer-substring (point) (line-end-position)))
- (args (split-string line "\\s-+")))
- (setq points (cons (nth 1 args) points)))
- (forward-line)))
- (pcomplete-pare-list
- (pcomplete-uniqify-list points)
- (cons "swap" (pcmpl-linux-mounted-directories))))))
|