* Set the default-directory dynamically according to the buffer-file-name. @ 2021-09-29 14:31 Hongyi Zhao 2021-09-29 14:50 ` Hongyi Zhao ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Hongyi Zhao @ 2021-09-29 14:31 UTC (permalink / raw) To: help-gnu-emacs I wrote the following function to set the default-directory dynamically according to the buffer-file-name: (defun my/default-directory () (let ((file (buffer-file-name))) (if (not file) (message "no file name here.") (setq default-directory (file-name-directory (buffer-file-name)))))) Then I apply this function to specific hooks, say, python-mode-hook. This will make it easier for me to invoke files using the relative path of each project. I want to know if this is a good practice. Regards -- Assoc. Prof. Hongyi Zhao <hongyi.zhao@gmail.com> Theory and Simulation of Materials Hebei Vocational University of Technology and Engineering No. 473, Quannan West Street, Xindu District, Xingtai, Hebei province ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-29 14:31 Set the default-directory dynamically according to the buffer-file-name Hongyi Zhao @ 2021-09-29 14:50 ` Hongyi Zhao 2021-09-29 15:31 ` Tassilo Horn 2021-09-29 15:47 ` [External] : " Drew Adams 2 siblings, 0 replies; 12+ messages in thread From: Hongyi Zhao @ 2021-09-29 14:50 UTC (permalink / raw) To: help-gnu-emacs On Wed, Sep 29, 2021 at 10:31 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote: > > I wrote the following function to set the default-directory > dynamically according to the buffer-file-name: > > (defun my/default-directory () > (let ((file (buffer-file-name))) > (if (not file) > (message "no file name here.") > (setq default-directory (file-name-directory (buffer-file-name)))))) > > Then I apply this function to specific hooks, say, python-mode-hook. > This will make it easier for me to invoke files using the relative > path of each project. I want to know if this is a good practice. Maybe I have some wrong understanding. Please let me explain the current situation carefully from the questions I describe below. I've python script which located at `/home/werner/Desktop/work/python', named as `pandas-excel.py', which will read a xls file located in the same folder as it. See following for the detailed content of this script: ####### import pandas as pd excel_file = '2021-2022-1-trimmed-top-3-lines.xls' newpd = pd.read_excel(excel_file, sheet_name='Sheet1') for i in newpd.index: if i > 1: for j in newpd.columns: if int(j.split()[1]) > 2: if not pd.isnull(newpd.loc[i][j]): print(newpd.loc[i][j]) ####### Now I've added the above customized function to python-mode-hook. When I open the above script within Emacs and eval it with ipython, the following error will be triggered: /home/werner/2021-2022-1-trimmed-top-3-lines.xls Traceback (most recent call last): File "/home/werner/Desktop/work/python/pandas-excel.py", line 14, in <module> newpd = pd.read_excel(excel_file, sheet_name='Sheet1') File "/home/werner/.pyenv/versions/3.9.1/envs/datasci/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "/home/werner/.pyenv/versions/3.9.1/envs/datasci/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 364, in read_excel io = ExcelFile(io, storage_options=storage_options, engine=engine) File "/home/werner/.pyenv/versions/3.9.1/envs/datasci/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 1191, in __init__ ext = inspect_excel_format( File "/home/werner/.pyenv/versions/3.9.1/envs/datasci/lib/python3.9/site-packages/pandas/io/excel/_base.py", line 1070, in inspect_excel_format with get_handle( File "/home/werner/.pyenv/versions/3.9.1/envs/datasci/lib/python3.9/site-packages/pandas/io/common.py", line 710, in get_handle handle = open(handle, ioargs.mode) FileNotFoundError: [Errno 2] No such file or directory: '2021-2022-1-trimmed-top-3-lines.xls' But `C-h o default-directory RET' will give me the following info: default-directory is a variable defined in ‘C source code’. Its value is "/home/werner/Desktop/work/python/" Local in buffer pandas-excel.py; global value is nil Therefore, I want to know why it does not locate the xls file from the directory of the Python script. Regards -- Assoc. Prof. Hongyi Zhao <hongyi.zhao@gmail.com> Theory and Simulation of Materials Hebei Vocational University of Technology and Engineering No. 473, Quannan West Street, Xindu District, Xingtai, Hebei province ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-29 14:31 Set the default-directory dynamically according to the buffer-file-name Hongyi Zhao 2021-09-29 14:50 ` Hongyi Zhao @ 2021-09-29 15:31 ` Tassilo Horn 2021-09-30 1:08 ` Hongyi Zhao 2021-09-29 15:47 ` [External] : " Drew Adams 2 siblings, 1 reply; 12+ messages in thread From: Tassilo Horn @ 2021-09-29 15:31 UTC (permalink / raw) To: Hongyi Zhao; +Cc: help-gnu-emacs Hongyi Zhao <hongyi.zhao@gmail.com> writes: > I wrote the following function to set the default-directory > dynamically according to the buffer-file-name: > > (defun my/default-directory () > (let ((file (buffer-file-name))) > (if (not file) > (message "no file name here.") > (setq default-directory (file-name-directory (buffer-file-name)))))) > > Then I apply this function to specific hooks, say, python-mode-hook. > This will make it easier for me to invoke files using the relative > path of each project. I want to know if this is a good practice. Isn't that already the case that file-visiting buffers have (file-name-directory (buffer-file-name)) as `default-directory'? Bye, Tassilo ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-29 15:31 ` Tassilo Horn @ 2021-09-30 1:08 ` Hongyi Zhao 2021-09-30 3:37 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 1 reply; 12+ messages in thread From: Hongyi Zhao @ 2021-09-30 1:08 UTC (permalink / raw) To: Tassilo Horn; +Cc: help-gnu-emacs On Wed, Sep 29, 2021 at 11:34 PM Tassilo Horn <tsdh@gnu.org> wrote: > > Hongyi Zhao <hongyi.zhao@gmail.com> writes: > > > I wrote the following function to set the default-directory > > dynamically according to the buffer-file-name: > > > > (defun my/default-directory () > > (let ((file (buffer-file-name))) > > (if (not file) > > (message "no file name here.") > > (setq default-directory (file-name-directory (buffer-file-name)))))) > > > > Then I apply this function to specific hooks, say, python-mode-hook. > > This will make it easier for me to invoke files using the relative > > path of each project. I want to know if this is a good practice. > > Isn't that already the case that file-visiting buffers have > > (file-name-directory (buffer-file-name)) > > as `default-directory'? Yes, that's it. So, my code snippet is unnecessary. The problem I posted here should be relevant to and handled by Projectile, as I've noticed the following message: Projectile is initializing cache for /home/werner/ ... HZ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-30 1:08 ` Hongyi Zhao @ 2021-09-30 3:37 ` Emanuel Berg via Users list for the GNU Emacs text editor 2021-09-30 7:00 ` Hongyi Zhao 0 siblings, 1 reply; 12+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-30 3:37 UTC (permalink / raw) To: help-gnu-emacs; +Cc: emacs-erc Hongyi Zhao wrote: > Yes, that's it. So, my code snippet is unnecessary. I have 100+ Elisp files [1] and if everything unnecessary was to be identified and dropped I think that would mean -25 files or more :) But I got an idea recently that I told you about already, but I can tell you again, only I only implemented it to a very small degree so far (if I'll ever complete the intention), anyway it is a good idea, and simple as well, namely, keep all configuration (within a field) in _one_ file, and all extensions (within the same field) in other, separate files - that way people can browse the extensions, and use it if they like it, or tell me if it is, in your words, "unnecessary" - I don't think they will, but chances are better since no one wants to browse some other guy's mere options ... Also with this configuration/extension split on can easily add the extensions to a place like the EmacsWiki, just ship it with no prior edit needed! If only I had come up with this idea 10~15 years ago. Regrets, I have but a few ... No, just kidding :) A detail of course. I only did it for ERC so far, I think? Have a look https://dataswamp.org/~incal/emacs-init/erc/ [1] https://dataswamp.org/~incal/emacs-init/ -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-30 3:37 ` Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-30 7:00 ` Hongyi Zhao 2021-09-30 7:39 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 1 reply; 12+ messages in thread From: Hongyi Zhao @ 2021-09-30 7:00 UTC (permalink / raw) To: Emanuel Berg, help-gnu-emacs; +Cc: emacs-erc On Thu, Sep 30, 2021 at 11:37 AM Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote: > > Hongyi Zhao wrote: > > > Yes, that's it. So, my code snippet is unnecessary. > > I have 100+ Elisp files [1] and if everything unnecessary was > to be identified and dropped I think that would mean -25 files > or more :) > > But I got an idea recently that I told you about already, but > I can tell you again, only I only implemented it to a very > small degree so far (if I'll ever complete the intention), > anyway it is a good idea, and simple as well, namely, keep all > configuration (within a field) in _one_ file, and all > extensions (within the same field) in other, separate files - The most difficult thing, IMHO, is the classification criteria for the different fields. > that way people can browse the extensions, and use it if they > like it, or tell me if it is, in your words, "unnecessary" - > I don't think they will, but chances are better since no one > wants to browse some other guy's mere options ... > > Also with this configuration/extension split on can easily add > the extensions to a place like the EmacsWiki, just ship it > with no prior edit needed! > > If only I had come up with this idea 10~15 years ago. Regrets, > I have but a few ... No, just kidding :) A detail of course. > > I only did it for ERC so far, I think? Have a look > > https://dataswamp.org/~incal/emacs-init/erc/ Which ones are configuration and Which ones are extensions in your terminology? > [1] https://dataswamp.org/~incal/emacs-init/ HZ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-30 7:00 ` Hongyi Zhao @ 2021-09-30 7:39 ` Emanuel Berg via Users list for the GNU Emacs text editor 2021-09-30 8:54 ` Hongyi Zhao 0 siblings, 1 reply; 12+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-30 7:39 UTC (permalink / raw) To: help-gnu-emacs; +Cc: emacs-erc Hongyi Zhao wrote: >> But I got an idea recently that I told you about already, >> but I can tell you again, only I only implemented it to >> a very small degree so far (if I'll ever complete the >> intention), anyway it is a good idea, and simple as well, >> namely, keep all configuration (within a field) in _one_ >> file, and all extensions (within the same field) in other, >> separate files - > > The most difficult thing, IMHO, is the classification > criteria for the different fields. Here "field" refers either to an Elisp program, e.g. Gnus, Emacs-w3m and ERC, or a activity or other e.g. "audio" or "math". That's just something I wrote, maybe it should be called something else. Examples: https://dataswamp.org/~incal/emacs-init/erc/ https://dataswamp.org/~incal/emacs-init/audio.el https://dataswamp.org/~incal/emacs-init/math.el > Which ones are configuration and Which ones are extensions > in your terminology? Configuration example: https://dataswamp.org/~incal/emacs-init/erc/erc-incal.el Extensions are all other files in that directory, https://dataswamp.org/~incal/emacs-init/erc/ , namely erc-connect.el erc-iterate.el erc-kill.el erc-misc.el erc-scroll.el erc-spell.el I'm sure some of that is, in your words, "unnecessary". Sometimes it is good to have even tho it is unnecessary because the version already there isn't exactly to your liking. Sometimes it isn't but can be configured, that's preferable if so. Sometimes you are just doing what someone else has already added to Emacs and you don't know that. Then you should just drop it when you find out and re-wire to the official version ... -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-30 7:39 ` Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-30 8:54 ` Hongyi Zhao 2021-09-30 9:58 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 1 reply; 12+ messages in thread From: Hongyi Zhao @ 2021-09-30 8:54 UTC (permalink / raw) To: Emanuel Berg, help-gnu-emacs; +Cc: emacs-erc On Thu, Sep 30, 2021 at 3:39 PM Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> wrote: > Configuration example: > https://dataswamp.org/~incal/emacs-init/erc/erc-incal.el Got it. All files ending with "-incal.el" belong to this category. HZ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Set the default-directory dynamically according to the buffer-file-name. 2021-09-30 8:54 ` Hongyi Zhao @ 2021-09-30 9:58 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 0 replies; 12+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-09-30 9:58 UTC (permalink / raw) To: help-gnu-emacs; +Cc: emacs-erc Hongyi Zhao wrote: >> Configuration example: >> https://dataswamp.org/~incal/emacs-init/erc/erc-incal.el > > Got it. All files ending with "-incal.el" belong to > this category. Ah, sorry, no. Sometimes that means the first word wasn't available, e.g. https://dataswamp.org/~incal/emacs-init/align-incal.el because there was/is an `align' already! Well, good that you said this! If I'm going to continue to praise this method I should come up with a convention for file names ... -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [External] : Set the default-directory dynamically according to the buffer-file-name. 2021-09-29 14:31 Set the default-directory dynamically according to the buffer-file-name Hongyi Zhao 2021-09-29 14:50 ` Hongyi Zhao 2021-09-29 15:31 ` Tassilo Horn @ 2021-09-29 15:47 ` Drew Adams 2021-10-01 4:41 ` Hongyi Zhao 2 siblings, 1 reply; 12+ messages in thread From: Drew Adams @ 2021-09-29 15:47 UTC (permalink / raw) To: Hongyi Zhao, help-gnu-emacs > (if (not file) > (message "no file name here.") > (setq default-directory (file-name-directory > (buffer-file-name)))))) (if (not WHATEVER) (message "PROBLEM NOTIFICATION") (DO-STUFF)) If you want to stop everything and be sure the message is seen, you might want to raise an error: (unless WHATEVER (error "PROBLEM")) ; End it all (DO-STUFF) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [External] : Set the default-directory dynamically according to the buffer-file-name. 2021-09-29 15:47 ` [External] : " Drew Adams @ 2021-10-01 4:41 ` Hongyi Zhao 2021-10-01 7:09 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 1 reply; 12+ messages in thread From: Hongyi Zhao @ 2021-10-01 4:41 UTC (permalink / raw) To: Drew Adams; +Cc: help-gnu-emacs On Wed, Sep 29, 2021 at 11:47 PM Drew Adams <drew.adams@oracle.com> wrote: > > > (if (not file) > > (message "no file name here.") > > (setq default-directory (file-name-directory > > (buffer-file-name)))))) > > (if (not WHATEVER) > (message "PROBLEM NOTIFICATION") > (DO-STUFF)) > > If you want to stop everything and be sure the > message is seen, you might want to raise an error: > > (unless WHATEVER (error "PROBLEM")) ; End it all > (DO-STUFF) Do you mean this is a good practice for usage scenarios in production environments? HZ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [External] : Set the default-directory dynamically according to the buffer-file-name. 2021-10-01 4:41 ` Hongyi Zhao @ 2021-10-01 7:09 ` Emanuel Berg via Users list for the GNU Emacs text editor 0 siblings, 0 replies; 12+ messages in thread From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-10-01 7:09 UTC (permalink / raw) To: help-gnu-emacs Hongyi Zhao wrote: >> (if (not WHATEVER) >> (message "PROBLEM NOTIFICATION") >> (DO-STUFF)) >> >> If you want to stop everything and be sure the >> message is seen, you might want to raise an error: >> >> (unless WHATEVER (error "PROBLEM")) ; End it all >> (DO-STUFF) > > Do you mean this is a good practice for usage scenarios in > production environments? Well, yes, but also in every other environment where your aspiration is to write good, idiomatic Lisp. He is showing the syntax and how it is put together for two scenarios. But the more tricky question is another, namely when should one use the first one (i.e., `message' the situation, then branch out) and when is the situation in fact an `error', much like division by zero? (/ 1337 0) ; Arithmetic error -- underground experts united https://dataswamp.org/~incal ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-10-01 7:09 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-09-29 14:31 Set the default-directory dynamically according to the buffer-file-name Hongyi Zhao 2021-09-29 14:50 ` Hongyi Zhao 2021-09-29 15:31 ` Tassilo Horn 2021-09-30 1:08 ` Hongyi Zhao 2021-09-30 3:37 ` Emanuel Berg via Users list for the GNU Emacs text editor 2021-09-30 7:00 ` Hongyi Zhao 2021-09-30 7:39 ` Emanuel Berg via Users list for the GNU Emacs text editor 2021-09-30 8:54 ` Hongyi Zhao 2021-09-30 9:58 ` Emanuel Berg via Users list for the GNU Emacs text editor 2021-09-29 15:47 ` [External] : " Drew Adams 2021-10-01 4:41 ` Hongyi Zhao 2021-10-01 7:09 ` Emanuel Berg via Users list for the GNU Emacs text editor
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).